Diff between ef276c54785525b7669d7d0439f80eeb20c03fab and d54f3c6f519310b21dcd9a397cf8ea57bd6079b9

Changed Files

File Additions Deletions Status
emulator/bthost.c +18 -0 modified
emulator/bthost.h +5 -0 modified

Full Patch

diff --git a/emulator/bthost.c b/emulator/bthost.c
index 8c1d1f9..d893c7e 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -61,6 +61,8 @@ struct bthost {
 	uint8_t ncmd;
 	bthost_cmd_complete_cb cmd_complete_cb;
 	void *cmd_complete_data;
+	bthost_new_conn_cb new_conn_cb;
+	void *new_conn_data;
 	uint16_t server_psm;
 	uint16_t next_cid;
 };
@@ -346,9 +348,18 @@ static void evt_conn_complete(struct bthost *bthost, const void *data,
 								uint8_t len)
 {
 	const struct bt_hci_evt_conn_complete *ev = data;
+	uint16_t handle;
 
 	if (len < sizeof(*ev))
 		return;
+
+	if (ev->status)
+		return;
+
+	handle = le16_to_cpu(ev->handle);
+
+	if (bthost->new_conn_cb)
+		bthost->new_conn_cb(handle, bthost->new_conn_data);
 }
 
 static void evt_num_completed_packets(struct bthost *bthost, const void *data,
@@ -618,6 +629,13 @@ void bthost_set_cmd_complete_cb(struct bthost *bthost,
 	bthost->cmd_complete_data = user_data;
 }
 
+void bthost_set_connect_cb(struct bthost *bthost, bthost_new_conn_cb cb,
+							void *user_data)
+{
+	bthost->new_conn_cb = cb;
+	bthost->new_conn_data = user_data;
+}
+
 void bthost_write_scan_enable(struct bthost *bthost, uint8_t scan)
 {
 	send_command(bthost, BT_HCI_CMD_WRITE_SCAN_ENABLE, &scan, 1);
diff --git a/emulator/bthost.h b/emulator/bthost.h
index 14362d0..c11f326 100644
--- a/emulator/bthost.h
+++ b/emulator/bthost.h
@@ -44,6 +44,11 @@ typedef void (*bthost_cmd_complete_cb) (uint16_t opcode, uint8_t status,
 void bthost_set_cmd_complete_cb(struct bthost *bthost,
 				bthost_cmd_complete_cb cb, void *user_data);
 
+typedef void (*bthost_new_conn_cb) (uint16_t handle, void *user_data);
+
+void bthost_set_connect_cb(struct bthost *bthost, bthost_new_conn_cb cb,
+							void *user_data);
+
 void bthost_write_scan_enable(struct bthost *bthost, uint8_t scan);
 
 void bthost_set_server_psm(struct bthost *bthost, uint16_t psm);