Advertisement
xerpi

Wii Bluetooth link and pin functions

Oct 10th, 2014
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. //added by xerpi
  2. #define HCI_LINK_KEY_REQUEST            0x17
  3. #define HCI_LINK_KEY_REQ_REP            0x0B
  4. #define HCI_LINK_KEY_REQ_REP_NEGATIVE       0x0C
  5. #define HCI_LINK_KEY_REQ_REP_PLEN       26      //25: BD add6, lk 16
  6. #define HCI_LINK_KEY_REQ_REP_NEGATIVE_PLEN  10      //9: BD add6
  7. //event code
  8. #define HCI_LINK_KEY_AUTH_COMPLETE      0x06
  9.  
  10.  
  11. err_t hci_link_key_req_reply(struct bd_addr *bdaddr, unsigned char *link_key)
  12. {
  13.     struct pbuf *p;
  14.     if ((p = btpbuf_alloc(PBUF_RAW, HCI_LINK_KEY_REQ_REP_PLEN, PBUF_RAM)) == NULL) {
  15.         ERROR("hci_link_key_req_reply: Could not allocate memory for pbuf\n");
  16.         return ERR_MEM;
  17.     }
  18.  
  19.     p = hci_cmd_ass(p, HCI_LINK_KEY_REQ_REP, HCI_LINK_CTRL_OGF, HCI_LINK_KEY_REQ_REP_PLEN);
  20.     //copy bdaddr to offset 0x4
  21.     memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6);
  22.     //copy Link Key (16 bytes long) to offset 10 (0xA)
  23.     memcpy(((u8_t *)p->payload)+10, link_key, 16);
  24.     //send command
  25.     physbusif_output(p,p->tot_len);
  26.     btpbuf_free(p);
  27.  
  28.     return ERR_OK;
  29. }
  30.  
  31. err_t hci_link_key_req_neg_reply(struct bd_addr *bdaddr)
  32. {
  33.     struct pbuf *p;
  34.  
  35.     if ((p = btpbuf_alloc(PBUF_RAW, HCI_LINK_KEY_REQ_REP_NEGATIVE_PLEN, PBUF_RAM)) == NULL) {
  36.         ERROR("hci_link_key_req_neg_repl: Could not allocate memory for pbuf\n");
  37.         return ERR_MEM;
  38.     }
  39.  
  40.     p = hci_cmd_ass(p, HCI_LINK_KEY_REQ_REP_NEGATIVE, HCI_LINK_CTRL_OGF, HCI_LINK_KEY_REQ_REP_NEGATIVE_PLEN);
  41.     memcpy(((u8_t *)p->payload)+4, bdaddr->addr, 6);
  42.  
  43.     physbusif_output(p,p->tot_len);
  44.     btpbuf_free(p);
  45.  
  46.     return ERR_OK;
  47. }
  48.  
  49.  
  50.  
  51. /*
  52. case HCI_LINK_KEY_REQUEST:
  53.     bdaddr = (void *)((u8_t *)p->payload);
  54.     hci_link_key_req_neg_reply(bdaddr);
  55.     break;
  56. case HCI_PIN_CODE_REQUEST:
  57.     bdaddr = (void *)((u8_t *)p->payload);
  58.     static unsigned char pin[] = {0x00, 0x00, 0x00, 0x00};
  59.     hci_pin_code_request_reply(bdaddr, sizeof(pin), pin);
  60.     break;
  61. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement