mgmt: Add support for discovering event
diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt
index 0d6523f..925b5ad 100644
--- a/doc/mgmt-api.txt
+++ b/doc/mgmt-api.txt
@@ -525,3 +525,11 @@
Controller Index <controller id>
Event Parameters Address (6 Octets)
Name (249 Octets)
+
+
+Discovering Event
+=================
+
+Event Code 0x00014
+Controller Index <controller id>
+Event Parameters Discovering (1 Octet)
diff --git a/lib/mgmt.h b/lib/mgmt.h
index ec3985c..f45321c 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -291,3 +291,5 @@
bdaddr_t bdaddr;
uint8_t name[MGMT_MAX_NAME_LENGTH];
} __packed;
+
+#define MGMT_EV_DISCOVERING 0x0014
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index f366c8b..042afc5 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
@@ -1316,6 +1316,42 @@
btd_event_remote_name(&info->bdaddr, &ev->bdaddr, 0, (char *) ev->name);
}
+static void mgmt_discovering(int sk, uint16_t index, void *buf, size_t len)
+{
+ struct mgmt_mode *ev = buf;
+ struct controller_info *info;
+ struct btd_adapter *adapter;
+ int state;
+
+ if (len < sizeof(*ev)) {
+ error("Too small discovering event");
+ return;
+ }
+
+ DBG("Controller %u discovering %u", index, ev->val);
+
+ if (index > max_index) {
+ error("Unexpected index %u in discovering event", index);
+ return;
+ }
+
+ info = &controllers[index];
+
+ adapter = manager_find_adapter(&info->bdaddr);
+ if (!adapter)
+ return;
+
+ state = adapter_get_state(adapter);
+
+ if (ev->val) {
+ if (!(state & (STATE_STDINQ | STATE_LE_SCAN | STATE_PINQ)))
+ state |= STATE_PINQ;
+ } else
+ state &= ~(STATE_STDINQ | STATE_PINQ);
+
+ adapter_set_state(adapter, state);
+}
+
static gboolean mgmt_event(GIOChannel *io, GIOCondition cond, gpointer user_data)
{
char buf[MGMT_BUF_SIZE];
@@ -1417,6 +1453,9 @@
case MGMT_EV_REMOTE_NAME:
mgmt_remote_name(sk, index, buf + MGMT_HDR_SIZE, len);
break;
+ case MGMT_EV_DISCOVERING:
+ mgmt_discovering(sk, index, buf + MGMT_HDR_SIZE, len);
+ break;
default:
error("Unknown Management opcode %u (index %u)", opcode, index);
break;