diff --git a/components/bt/host/nimble/Kconfig.in b/components/bt/host/nimble/Kconfig.in index 15947c2f88..6c36c00f91 100644 --- a/components/bt/host/nimble/Kconfig.in +++ b/components/bt/host/nimble/Kconfig.in @@ -819,3 +819,9 @@ menu "GAP Service" Timeout = Value * 10 ms endmenu + +config BT_NIMBLE_VS_SUPPORT + bool "Enable support for VSC and VSE" + help + This option is used to enable support for sending Vendor Specific HCI commands and handling + Vendor Specific HCI Events. diff --git a/components/bt/host/nimble/nimble b/components/bt/host/nimble/nimble index 326292d478..46268fd9c0 160000 --- a/components/bt/host/nimble/nimble +++ b/components/bt/host/nimble/nimble @@ -1 +1 @@ -Subproject commit 326292d47806594994f4b98fbeb20619a67132bd +Subproject commit 46268fd9c058fde006427b62b2198ace049b4e5f diff --git a/components/bt/host/nimble/port/include/esp_nimble_cfg.h b/components/bt/host/nimble/port/include/esp_nimble_cfg.h index 058aea77ed..cdf7eb05f2 100644 --- a/components/bt/host/nimble/port/include/esp_nimble_cfg.h +++ b/components/bt/host/nimble/port/include/esp_nimble_cfg.h @@ -1700,4 +1700,11 @@ #endif #endif +#ifndef MYNEWT_VAL_BLE_HCI_VS +#define MYNEWT_VAL_BLE_HCI_VS CONFIG_BT_NIMBLE_VS_SUPPORT +#define MYNEWT_VAL_BLE_HCI_VS_OCF_OFFSET (0) +#else +#define MYNEWT_VAL_BLE_HCI_VS (0) +#endif + #endif 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 01d013a6af..e6916f4a1d 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)