Diff between 3e7a93b71acea679f4c4de4479b6b2bd7080c759 and 67656f8ec9be1979e08b4e9f2710e7f797b565bd

Changed Files

File Additions Deletions Status
lib/hci.c +32 -0 modified
lib/hci_lib.h +2 -1 modified

Full Patch

diff --git a/lib/hci.c b/lib/hci.c
index ce272f6..89b2318 100644
--- a/lib/hci.c
+++ b/lib/hci.c
@@ -2927,3 +2927,35 @@ int hci_le_conn_update(int dd, uint16_t handle, uint16_t min_interval,
 
 	return 0;
 }
+
+int hci_le_read_remote_features(int dd, uint16_t handle, uint8_t *features, int to)
+{
+	evt_le_read_remote_used_features_complete rp;
+	le_read_remote_used_features_cp cp;
+	struct hci_request rq;
+
+	memset(&cp, 0, sizeof(cp));
+	cp.handle = handle;
+
+	memset(&rq, 0, sizeof(rq));
+	rq.ogf    = OGF_LE_CTL;
+	rq.ocf    = OCF_LE_READ_REMOTE_USED_FEATURES;
+	rq.event  = EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE;
+	rq.cparam = &cp;
+	rq.clen   = LE_READ_REMOTE_USED_FEATURES_CP_SIZE;
+	rq.rparam = &rp;
+	rq.rlen   = EVT_LE_READ_REMOTE_USED_FEATURES_COMPLETE_SIZE;
+
+	if (hci_send_req(dd, &rq, to) < 0)
+		return -1;
+
+	if (rp.status) {
+		errno = EIO;
+		return -1;
+	}
+
+	if (features)
+		memcpy(features, rp.features, 8);
+
+	return 0;
+}
diff --git a/lib/hci_lib.h b/lib/hci_lib.h
index 50744c3..eba3cd1 100644
--- a/lib/hci_lib.h
+++ b/lib/hci_lib.h
@@ -127,7 +127,6 @@ int hci_le_create_conn(int dd, uint16_t interval, uint16_t window,
 		uint16_t latency, uint16_t supervision_timeout,
 		uint16_t min_ce_length, uint16_t max_ce_length,
 		uint16_t *handle, int to);
-
 int hci_le_conn_update(int dd, uint16_t handle, uint16_t min_interval,
 			uint16_t max_interval, uint16_t latency,
 			uint16_t supervision_timeout, int to);
@@ -135,6 +134,8 @@ int hci_le_add_white_list(int dd, const bdaddr_t *bdaddr, uint8_t type, int to);
 int hci_le_rm_white_list(int dd, const bdaddr_t *bdaddr, uint8_t type, int to);
 int hci_le_read_white_list_size(int dd, uint8_t *size, int to);
 int hci_le_clear_white_list(int dd, int to);
+int hci_le_read_remote_features(int dd, uint16_t handle, uint8_t *features, int to);
+
 int hci_for_each_dev(int flag, int(*func)(int dd, int dev_id, long arg), long arg);
 int hci_get_route(bdaddr_t *bdaddr);