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:
vighnesh-sawant
2026-03-12 17:01:16 +00:00
committed by waddlesplash
parent 230470d6d4
commit c0336fd788
4 changed files with 47 additions and 0 deletions
+9
View File
@@ -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
+1
View File
@@ -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);
+36
View File
@@ -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)
{ {
+1
View File
@@ -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);