From 611511d3b644e4a331f8226f18cf3e2f9a16d1b9 Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Thu, 2 Nov 2023 10:35:50 +0530 Subject: [PATCH] Fix the parameters in duplicate exception list vsc command --- nimble/host/include/host/ble_esp_gap.h | 23 ++++++++++++++- nimble/host/src/ble_gap.c | 41 +++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/nimble/host/include/host/ble_esp_gap.h b/nimble/host/include/host/ble_esp_gap.h index da05316ef..196283e99 100644 --- a/nimble/host/include/host/ble_esp_gap.h +++ b/nimble/host/include/host/ble_esp_gap.h @@ -11,6 +11,11 @@ extern "C" { #endif +#define BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_ADV_ADDR 0 +#define BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_LINK_ID 1 +#define BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_BEACON_TYPE 2 +#define BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_PROV_SRV_ADV 3 +#define BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_PROXY_SRV_ADV 4 /** * Configure LE Data Length in controller (OGF = 0x08, OCF = 0x0022). @@ -86,8 +91,8 @@ int ble_gap_wl_tx_clear(void); */ int ble_gap_wl_read_size(uint8_t *size); -#if MYNEWT_VAL(BLE_POWER_CONTROL) #if MYNEWT_VAL(BLE_HCI_VS) +#if MYNEWT_VAL(BLE_POWER_CONTROL) #define ESP_1M_LOW (-70) #define ESP_1M_HIGH (-60) @@ -160,6 +165,22 @@ struct ble_gap_set_auto_pcl_params { */ int ble_gap_set_auto_pcl_param(struct ble_gap_set_auto_pcl_params *params); #endif + +/** + * This API is used to send the Duplicate Exception list VSC to controller + * + * @param subcode The operation to be done (add/remove/clean) + * + * @param type Exception list type + * + * @param value Device address + * + * @cb Registered callback + * + * @return 0 on success; nonzero on failure. + */ + +int ble_gap_duplicate_exception_list(uint8_t subcode, uint8_t type, uint8_t *value, void *cb); #endif #ifdef __cplusplus diff --git a/nimble/host/src/ble_gap.c b/nimble/host/src/ble_gap.c index f9f824155..677a52fbf 100644 --- a/nimble/host/src/ble_gap.c +++ b/nimble/host/src/ble_gap.c @@ -7374,7 +7374,8 @@ ble_gap_set_transmit_power_reporting_enable(uint16_t conn_handle, #endif } -#if MYNEWT_VAL(BLE_POWER_CONTROL) && MYNEWT_VAL(BLE_HCI_VS) +#if MYNEWT_VAL(BLE_HCI_VS) +#if MYNEWT_VAL(BLE_POWER_CONTROL) static int ble_gap_pcl_param_validate(struct ble_gap_set_auto_pcl_params *params) { @@ -7443,6 +7444,44 @@ ble_gap_set_auto_pcl_param(struct ble_gap_set_auto_pcl_params *params) } #endif +int +ble_gap_duplicate_exception_list(uint8_t subcode, uint8_t type, uint8_t *value, void *cb) +{ + uint8_t device_info_array[1 + 4 + BLE_DEV_ADDR_LEN] = {0}; + + device_info_array[0] = subcode; + device_info_array[1] = type & 0xff; + device_info_array[2] = (type >> 8) & 0xff; + device_info_array[3] = (type >> 16) & 0xff; + device_info_array[4] = (type >> 24) & 0xff; + switch (type) + { + case BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_ADV_ADDR: + swap_in_place(value, BLE_DEV_ADDR_LEN); + memcpy(&device_info_array[5], value, BLE_DEV_ADDR_LEN); + break; + case BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_LINK_ID: + memcpy(&device_info_array[5], value, 4); + break; + case BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_BEACON_TYPE: + //do nothing + break; + case BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_PROV_SRV_ADV: + //do nothing + break; + case BLE_DUPLICATE_SCAN_EXCEPTIONAL_INFO_MESH_PROXY_SRV_ADV: + //do nothing + break; + default: + //do nothing + break; + } + + return ble_hs_hci_send_vs_cmd(BLE_HCI_OCF_VS_DUPLICATE_EXCEPTION_LIST, + &device_info_array, sizeof(device_info_array), NULL, 0); +} +#endif + int ble_gap_set_data_related_addr_change_param(uint8_t adv_handle, uint8_t change_reason) {