From 7c6ab05f5083e1ac27465d74ef59addf1315fe63 Mon Sep 17 00:00:00 2001 From: Rahul Tank Date: Mon, 12 Jun 2023 16:55:52 +0530 Subject: [PATCH] feat(nimble): Add support for PCL Set RSSI VSC and example code for its usage This commit adds support for sending Vendor Specific HCI commands and handling Vendor Specific HCI Events in the Nimble stack. It also includes the necessary configuration options and APIs to handle these commands and events. The following changes were made: - Added configuration option to enable support for VSC and VSE - Added API to send Vendor Specific HCI commands - Added example code for using the Set RSSI VSC for Power Control This commit also includes some minor code improvements and bug fixes --- components/bt/host/nimble/nimble | 2 +- .../porting/nimble/include/nimble/hci_common.h | 5 +++++ examples/bluetooth/nimble/blecent/main/main.c | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index 46268fd9c0..abc80c36ca 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit 46268fd9c058fde006427b62b2198ace049b4e5f +Subproject commit abc80c36cab77cc47c62b0cdbbcedf53346460c4 diff --git a/components/bt/porting/nimble/include/nimble/hci_common.h b/components/bt/porting/nimble/include/nimble/hci_common.h index 7d350b9ef8..70eb982d4a 100644 --- a/components/bt/porting/nimble/include/nimble/hci_common.h +++ b/components/bt/porting/nimble/include/nimble/hci_common.h @@ -1136,6 +1136,11 @@ struct ble_hci_vs_rd_static_addr_rp { uint8_t addr[6]; } __attribute__((packed)); + +#if SOC_BLE_POWER_CONTROL_SUPPORTED && MYNEWT_VAL(BLE_HCI_VS) +#define BLE_HCI_OCF_VS_PCL_SET_RSSI (MYNEWT_VAL(BLE_HCI_VS_OCF_OFFSET) + (0x0111)) +#endif + /* Command Specific Definitions */ /* --- Set controller to host flow control (OGF 0x03, OCF 0x0031) --- */ #define BLE_HCI_CTLR_TO_HOST_FC_OFF (0) diff --git a/examples/bluetooth/nimble/blecent/main/main.c b/examples/bluetooth/nimble/blecent/main/main.c index 81a849a370..8d377b6dfe 100644 --- a/examples/bluetooth/nimble/blecent/main/main.c +++ b/examples/bluetooth/nimble/blecent/main/main.c @@ -671,6 +671,24 @@ blecent_gap_event(struct ble_gap_event *event, void *arg) blecent_power_control(event->connect.conn_handle); #endif +#if MYNEWT_VAL(BLE_HCI_VS) +#if MYNEWT_VAL(BLE_POWER_CONTROL) + int8_t vs_cmd[10]= {0, 0,-70,-60,-68,-58,-75,-65,-80,-70}; + + vs_cmd[0] = ((uint8_t)(event->connect.conn_handle & 0xFF)); + vs_cmd[1] = ((uint8_t)(event->connect.conn_handle >> 8) & 0xFF); + + rc = ble_hs_hci_send_vs_cmd(BLE_HCI_OCF_VS_PCL_SET_RSSI , + &vs_cmd, sizeof(vs_cmd), NULL, 0); + if (rc != 0) { + MODLOG_DFLT(INFO, "Failed to send VSC %x \n", rc); + return 0; + } + else + MODLOG_DFLT(INFO, "Successfully issued VSC , rc = %d \n", rc); +#endif +#endif + #if CONFIG_EXAMPLE_ENCRYPTION /** Initiate security - It will perform * Pairing (Exchange keys)