diff --git a/headers/private/bluetooth/CommandManager.h b/headers/private/bluetooth/CommandManager.h index eebbc468b4..ebcff164b1 100644 --- a/headers/private/bluetooth/CommandManager.h +++ b/headers/private/bluetooth/CommandManager.h @@ -19,6 +19,9 @@ void* buildAuthEnable(uint8 auth, size_t* outsize); /* LINK CONTROL */ void* buildRemoteNameRequest(bdaddr_t bdaddr,uint8 pscan_rep_mode, uint16 clock_offset, size_t* outsize); void* buildInquiry(uint32 lap, uint8 length, uint8 num_rsp, size_t* outsize); +void* buildInquiryCancel(size_t* outsize); +void* buildPinCodeRequestReply(bdaddr_t bdaddr, uint8 length, char pincode[16], size_t* outsize); +void* buildPinCodeRequestNegativeReply(bdaddr_t bdaddr, uint8 length, char pincode[16], size_t* outsize); /* OGF_INFORMATIONAL_PARAM */ void* buildReadBufferSize(size_t* outsize); diff --git a/src/kits/bluetooth/CommandManager.cpp b/src/kits/bluetooth/CommandManager.cpp index 3ee954de6b..9231949b0e 100644 --- a/src/kits/bluetooth/CommandManager.cpp +++ b/src/kits/bluetooth/CommandManager.cpp @@ -144,10 +144,10 @@ void* buildInquiry(uint32 lap, uint8 length, uint8 num_rsp, size_t* outsize) struct hci_cp_inquiry* param; void* command = buildCommand(OGF_LINK_CONTROL, OCF_INQUIRY, (void**) ¶m, sizeof(struct hci_cp_inquiry), outsize); - if (command != NULL) { - - param->lap[2] = (lap >> 16) & 0xFF; - param->lap[1] = (lap >> 8) & 0xFF; + if (command != NULL) { + + param->lap[2] = (lap >> 16) & 0xFF; + param->lap[1] = (lap >> 8) & 0xFF; param->lap[0] = (lap >> 0) & 0xFF; param->length = length; param->num_rsp = num_rsp; @@ -156,6 +156,53 @@ void* buildInquiry(uint32 lap, uint8 length, uint8 num_rsp, size_t* outsize) return command; } +void* buildInquiryCancel(size_t* outsize) +{ + + return buildCommand(OGF_LINK_CONTROL, OCF_INQUIRY_CANCEL, NULL, 0, outsize); + +} + + +void* buildPinCodeRequestReply(bdaddr_t bdaddr, uint8 length, char pincode[16], size_t* outsize) +{ + + struct hci_cp_pin_code_reply* param; + + if (length > HCI_PIN_SIZE) // PinCode cannot be longer than 16 + return NULL; + + void* command = buildCommand(OGF_LINK_CONTROL, OCF_PIN_CODE_REPLY, (void**) ¶m, sizeof(struct hci_cp_pin_code_reply), outsize); + + if (command != NULL) { + + param->bdaddr = bdaddr; + param->pin_len = length; + memcpy(¶m->pin_code, pincode, length); + + } + + return command; +} + + +void* buildPinCodeRequestNegativeReply(bdaddr_t bdaddr, uint8 length, char pincode[16], size_t* outsize) +{ + + struct hci_cp_pin_code_neg_reply* param; + + void* command = buildCommand(OGF_LINK_CONTROL, OCF_PIN_CODE_NEG_REPLY, + (void**) ¶m, sizeof(struct hci_cp_pin_code_neg_reply), outsize); + + if (command != NULL) { + + param->bdaddr = bdaddr; + + } + + return command; +} + #if 0 #pragma mark - INFORMATIONAL_PARAM -