From 3ae26099c9a2ec1c317130e12cfaf6735248dab2 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Wed, 11 Oct 2023 16:04:15 +0200 Subject: [PATCH 1/3] Portenta H7: add api to manage bluetooth low power mode status in CYW43xxx chip --- .../CyH4TransportDriver.cpp | 5 ++ .../COMPONENT_CYW43XXX/CyH4TransportDriver.h | 1 + .../COMPONENT_CYW43XXX/HCIDriver.cpp | 4 + .../TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp | 82 ++++++++++--------- 4 files changed, 52 insertions(+), 40 deletions(-) diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.cpp index ee79e18ca70..cc586e671ea 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.cpp +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.cpp @@ -374,4 +374,9 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive return (ble_cordio_get_default_h4_transport_driver()); } +MBED_WEAK +void ble_cordio_set_cycfg_bt_lp_mode(bool status) { + (void)status; +} + #endif diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.h b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.h index e5657b76407..4ec1b6d3c2c 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.h +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.h @@ -137,5 +137,6 @@ class CyH4TransportDriver : public CordioHCITransportDriver { ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_default_h4_transport_driver(); ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_driver(); +void ble_cordio_set_cycfg_bt_lp_mode(bool status); #endif #endif /* CY_H4TRANSPORT_DRIVER_H_ */ diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/HCIDriver.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/HCIDriver.cpp index ff389c9f815..ae6bc61159a 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/HCIDriver.cpp +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/HCIDriver.cpp @@ -557,3 +557,7 @@ ble::CordioHCIDriver& ble_cordio_get_hci_driver() ); return hci_driver; } + +void ble_cordio_set_lp_mode(bool status) { + ble_cordio_set_cycfg_bt_lp_mode(status); +} \ No newline at end of file diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp index 2d668fed9ce..a3851782ac2 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp @@ -35,10 +35,11 @@ #include "CyH4TransportDriver.h" #define cyhal_gpio_to_rtos(x) (x) -#define CYCFG_BT_LP_ENABLED (1) #define CYCFG_BT_HOST_WAKE_IRQ_EVENT WAKE_EVENT_ACTIVE_LOW #define CYCFG_BT_DEV_WAKE_POLARITY WAKE_EVENT_ACTIVE_LOW +bool cycfg_bt_lp_enabled = true; + /******************************************************************************* * Function Name: ble_cordio_get_h4_transport_driver ******************************************************************************** @@ -53,45 +54,30 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_driver() { #if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) - -#if (defined(CYCFG_BT_LP_ENABLED)) - if (CYCFG_BT_LP_ENABLED) { - static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( - /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), - /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), - /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), - /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), - /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), - DEF_BT_BAUD_RATE, - cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), - cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE), - CYCFG_BT_HOST_WAKE_IRQ_EVENT, - CYCFG_BT_DEV_WAKE_POLARITY - ); - return s_transport_driver; - } else { /* CYCFG_BT_LP_ENABLED */ - static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( - /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), - /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), - /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), - /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), - /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), - DEF_BT_BAUD_RATE); - return s_transport_driver; - } -#else /* (defined(CYCFG_BT_LP_ENABLED)) */ - static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( - /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), - /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), - /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), - /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), - /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), - DEF_BT_BAUD_RATE), - cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE) - ); - return s_transport_driver; -#endif /* (defined(CYCFG_BT_LP_ENABLED)) */ - + if (cycfg_bt_lp_enabled) { + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE, + cyhal_gpio_to_rtos(CYBSP_BT_HOST_WAKE), + cyhal_gpio_to_rtos(CYBSP_BT_DEVICE_WAKE), + CYCFG_BT_HOST_WAKE_IRQ_EVENT, + CYCFG_BT_DEV_WAKE_POLARITY + ); + return s_transport_driver; + } else { /* cycfg_bt_lp_enabled */ + static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( + /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), + /* RX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RX), + /* cts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_CTS), + /* rts */ cyhal_gpio_to_rtos(CYBSP_BT_UART_RTS), + /* power */ cyhal_gpio_to_rtos(CYBSP_BT_POWER), + DEF_BT_BAUD_RATE); + return s_transport_driver; + } #else /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver( /* TX */ cyhal_gpio_to_rtos(CYBSP_BT_UART_TX), @@ -103,3 +89,19 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive return s_transport_driver; #endif /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */ } + +/******************************************************************************* +* Function Name: ble_cordio_set_cycfg_bt_lp_mode +******************************************************************************** +* +* Sets the low-power mode configuration for the Bluetooth stack. +* By default, low-power mode is enabled. +* +* \param status +* - `true` to enable low-power mode. +* - `false` to disable low-power mode. +*******************************************************************************/ +void ble_cordio_set_cycfg_bt_lp_mode(bool status) +{ + cycfg_bt_lp_enabled = status; +} From 60b8f149a422a4af46283d42f316f3d3e474ccb9 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Wed, 18 Oct 2023 17:03:40 +0200 Subject: [PATCH 2/3] add weak implementation of ble_cordio_set_lp_mode() fun to avoid compilation issues --- connectivity/drivers/ble/FEATURE_BLE/CommonHCIDriver.cpp | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 connectivity/drivers/ble/FEATURE_BLE/CommonHCIDriver.cpp diff --git a/connectivity/drivers/ble/FEATURE_BLE/CommonHCIDriver.cpp b/connectivity/drivers/ble/FEATURE_BLE/CommonHCIDriver.cpp new file mode 100644 index 00000000000..f7e010b3211 --- /dev/null +++ b/connectivity/drivers/ble/FEATURE_BLE/CommonHCIDriver.cpp @@ -0,0 +1,6 @@ +#include "mbed_toolchain.h" + +MBED_WEAK +void ble_cordio_set_lp_mode(bool status) { + (void)status; +} \ No newline at end of file From 15df991bb419b662fd8c6c0e8261288b7f66a515 Mon Sep 17 00:00:00 2001 From: Leonardo Cavagnis Date: Tue, 24 Oct 2023 13:07:05 +0200 Subject: [PATCH 3/3] Portenta H7: static var for bt lp mode --- .../COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp index a3851782ac2..426ce293781 100644 --- a/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp +++ b/connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/TARGET_PORTENTA_H7/cy_bt_cordio_cfg.cpp @@ -38,7 +38,7 @@ #define CYCFG_BT_HOST_WAKE_IRQ_EVENT WAKE_EVENT_ACTIVE_LOW #define CYCFG_BT_DEV_WAKE_POLARITY WAKE_EVENT_ACTIVE_LOW -bool cycfg_bt_lp_enabled = true; +static bool cycfg_bt_lp_enabled = true; /******************************************************************************* * Function Name: ble_cordio_get_h4_transport_driver