Diff between 126be2509fa9ee58abae703198c06a27f49f1905 and 7dfc7e96144150b0fa4f286d8d351ee96baf7db8

Changed Files

File Additions Deletions Status
emulator/bthost.c +22 -0 modified

Full Patch

diff --git a/emulator/bthost.c b/emulator/bthost.c
index 2af5f7a..1bdc1b2 100644
--- a/emulator/bthost.c
+++ b/emulator/bthost.c
@@ -556,6 +556,8 @@ static void evt_cmd_complete(struct bthost *bthost, const void *data,
 		break;
 	case BT_HCI_CMD_PIN_CODE_REQUEST_NEG_REPLY:
 		break;
+	case BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY:
+		break;
 	case BT_HCI_CMD_WRITE_SIMPLE_PAIRING_MODE:
 		break;
 	case BT_HCI_CMD_IO_CAPABILITY_REQUEST_REPLY:
@@ -722,6 +724,22 @@ static void evt_pin_code_request(struct bthost *bthost, const void *data,
 	}
 }
 
+static void evt_link_key_request(struct bthost *bthost, const void *data,
+								uint8_t len)
+{
+	const struct bt_hci_evt_link_key_request *ev = data;
+	struct bt_hci_cmd_link_key_request_neg_reply cp;
+
+	if (len < sizeof(*ev))
+		return;
+
+	memset(&cp, 0, sizeof(cp));
+	memcpy(cp.bdaddr, ev->bdaddr, 6);
+
+	send_command(bthost, BT_HCI_CMD_LINK_KEY_REQUEST_NEG_REPLY,
+							&cp, sizeof(cp));
+}
+
 static void evt_link_key_notify(struct bthost *bthost, const void *data,
 								uint8_t len)
 {
@@ -902,6 +920,10 @@ static void process_evt(struct bthost *bthost, const void *data, uint16_t len)
 		evt_pin_code_request(bthost, param, hdr->plen);
 		break;
 
+	case BT_HCI_EVT_LINK_KEY_REQUEST:
+		evt_link_key_request(bthost, param, hdr->plen);
+		break;
+
 	case BT_HCI_EVT_LINK_KEY_NOTIFY:
 		evt_link_key_notify(bthost, param, hdr->plen);
 		break;