bluetooth: Add support for HCI_EVENT_EXTENDED_INQUIRY_RESULT
Follow up of a4e1f4d8ce,
this contains only response per event.
Change-Id: I6582f9530a273699048c04481fa0ef4a31a315ae
Reviewed-on: https://review.haiku-os.org/c/haiku/+/10486
Tested-by: Commit checker robot <[email protected]>
Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
230470d6d4
commit
c0336fd788
@@ -276,6 +276,15 @@ struct hci_ev_sychronous_connection_changed {
|
|||||||
|
|
||||||
// TODO: Define remaining Bluetooth 2.1 events structures
|
// TODO: Define remaining Bluetooth 2.1 events structures
|
||||||
#define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x2F
|
#define HCI_EVENT_EXTENDED_INQUIRY_RESULT 0x2F
|
||||||
|
struct hci_ev_extended_inquiry_info {
|
||||||
|
bdaddr_t bdaddr;
|
||||||
|
uint8 page_repetition_mode;
|
||||||
|
uint8 scan_period_mode;
|
||||||
|
uint8 dev_class[3];
|
||||||
|
uint16 clock_offset;
|
||||||
|
int8 rssi;
|
||||||
|
uint8 eir[240];
|
||||||
|
} __attribute__((packed));
|
||||||
|
|
||||||
#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
|
#define HCI_EVENT_ENCRYPTION_KEY_REFRESH_COMPLETE 0x30
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ DiscoveryAgent::StartInquiry(uint32 accessCode, DiscoveryListener* listener,
|
|||||||
// For getting each discovered message
|
// For getting each discovered message
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_RESULT);
|
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_RESULT);
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_RESULT_WITH_RSSI);
|
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_RESULT_WITH_RSSI);
|
||||||
|
request.AddInt16("eventExpected", HCI_EVENT_EXTENDED_INQUIRY_RESULT);
|
||||||
|
|
||||||
// For finishing each discovered message
|
// For finishing each discovered message
|
||||||
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_COMPLETE);
|
request.AddInt16("eventExpected", HCI_EVENT_INQUIRY_COMPLETE);
|
||||||
|
|||||||
@@ -255,6 +255,9 @@ LocalDeviceImpl::HandleExpectedRequest(struct hci_event_header* event,
|
|||||||
case HCI_EVENT_INQUIRY_RESULT_WITH_RSSI:
|
case HCI_EVENT_INQUIRY_RESULT_WITH_RSSI:
|
||||||
InquiryResultWithRSSI(JumpEventHeader<uint8>(event), request);
|
InquiryResultWithRSSI(JumpEventHeader<uint8>(event), request);
|
||||||
break;
|
break;
|
||||||
|
case HCI_EVENT_EXTENDED_INQUIRY_RESULT:
|
||||||
|
ExtendedInquiryResult(JumpEventHeader<uint8>(event), request);
|
||||||
|
break;
|
||||||
|
|
||||||
case HCI_EVENT_REMOTE_EXTENDED_FEATURES:
|
case HCI_EVENT_REMOTE_EXTENDED_FEATURES:
|
||||||
break;
|
break;
|
||||||
@@ -862,6 +865,39 @@ LocalDeviceImpl::InquiryResultWithRSSI(uint8* numberOfResponses, BMessage* reque
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
LocalDeviceImpl::ExtendedInquiryResult(uint8* numberOfResponses, BMessage* request)
|
||||||
|
{
|
||||||
|
uint8 count = *numberOfResponses;
|
||||||
|
TRACE_BT("LocalDeviceImpl: %s #responses=%d\n", __FUNCTION__, count);
|
||||||
|
|
||||||
|
// the spec says count always equals 1
|
||||||
|
if (count != 1 || request == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
hci_ev_extended_inquiry_info* info = (hci_ev_extended_inquiry_info*)(numberOfResponses + 1);
|
||||||
|
|
||||||
|
BMessage reply(BT_MSG_INQUIRY_DEVICE);
|
||||||
|
reply.AddUInt8("count", count);
|
||||||
|
|
||||||
|
TRACE_BT("LocalDeviceImpl: page_rep=%d scan_period=%d clock=%d rssi=%d\n",
|
||||||
|
info->page_repetition_mode, info->scan_period_mode, info->clock_offset, info->rssi);
|
||||||
|
|
||||||
|
reply.AddData("bdaddr", B_ANY_TYPE, &info->bdaddr, sizeof(bdaddr_t));
|
||||||
|
reply.AddData("dev_class", B_ANY_TYPE, info->dev_class, 3);
|
||||||
|
reply.AddUInt8("page_repetition_mode", info->page_repetition_mode);
|
||||||
|
reply.AddUInt8("scan_period_mode", info->scan_period_mode);
|
||||||
|
reply.AddUInt16("clock_offset", info->clock_offset);
|
||||||
|
reply.AddInt8("rssi", info->rssi);
|
||||||
|
|
||||||
|
// need to implement eir parsing
|
||||||
|
printf("%s: Sending reply...\n", __func__);
|
||||||
|
status_t status = request->SendReply(&reply);
|
||||||
|
if (status < B_OK)
|
||||||
|
printf("%s: Error sending reply!\n", __func__);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
LocalDeviceImpl::InquiryComplete(uint8* status, BMessage* request)
|
LocalDeviceImpl::InquiryComplete(uint8* status, BMessage* request)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ private:
|
|||||||
// Inquiry
|
// Inquiry
|
||||||
void InquiryResult(uint8* numberOfResponses, BMessage* request);
|
void InquiryResult(uint8* numberOfResponses, BMessage* request);
|
||||||
void InquiryResultWithRSSI(uint8* numberOfResponses, BMessage* request);
|
void InquiryResultWithRSSI(uint8* numberOfResponses, BMessage* request);
|
||||||
|
void ExtendedInquiryResult(uint8* numberOfResponses, BMessage* request);
|
||||||
void InquiryComplete(uint8* status, BMessage* request);
|
void InquiryComplete(uint8* status, BMessage* request);
|
||||||
void RemoteNameRequestComplete(struct hci_ev_remote_name_request_complete_reply*
|
void RemoteNameRequestComplete(struct hci_ev_remote_name_request_complete_reply*
|
||||||
remotename, BMessage* request);
|
remotename, BMessage* request);
|
||||||
|
|||||||
Reference in New Issue
Block a user