Add support for LE Events to libbluetooth
Now we can receive and deal with LE Events, which are encoded inside
a LE Meta Event, using the low-level libbluetooth.
diff --git a/lib/hci.c b/lib/hci.c
index 3b2baf9..a1538ac 100644
--- a/lib/hci.c
+++ b/lib/hci.c
@@ -1093,6 +1093,7 @@
hci_filter_set_ptype(HCI_EVENT_PKT, &nf);
hci_filter_set_event(EVT_CMD_STATUS, &nf);
hci_filter_set_event(EVT_CMD_COMPLETE, &nf);
+ hci_filter_set_event(EVT_LE_META_EVENT, &nf);
hci_filter_set_event(r->event, &nf);
hci_filter_set_opcode(opcode, &nf);
if (setsockopt(dd, SOL_HCI, HCI_FILTER, &nf, sizeof(nf)) < 0)
@@ -1106,6 +1107,7 @@
evt_cmd_complete *cc;
evt_cmd_status *cs;
evt_remote_name_req_complete *rn;
+ evt_le_meta_event *me;
remote_name_req_cp *cp;
int len;
@@ -1186,6 +1188,17 @@
memcpy(r->rparam, ptr, r->rlen);
goto done;
+ case EVT_LE_META_EVENT:
+ me = (void *) ptr;
+
+ if (me->subevent != r->event)
+ continue;
+
+ len -= 1;
+ r->rlen = MIN(len, r->rlen);
+ memcpy(r->rparam, me->data, r->rlen);
+ goto done;
+
default:
if (hdr->evt != r->event)
break;