mirror of https://github.com/ARMmbed/mbed-os.git
Merge pull request #14988 from npal-cy/pr/swintegration-501
CYW43XXX Cordio HCI driver: update BT power up sequences to remove redundant delay (500ms) during HCIDrive initializationpull/14994/head
commit
09eee5881e
|
@ -29,6 +29,17 @@
|
|||
#include "rtos/ThisThread.h"
|
||||
#include <chrono>
|
||||
|
||||
// BT settling time after power on
|
||||
#if !defined (CY_BT_POWER_ON_SETTLING_TIME)
|
||||
#define CY_BT_POWER_ON_SETTLING_TIME (500ms)
|
||||
#endif /* !defined (CY_BT_POWER_ON_SETTLING_TIME) */
|
||||
|
||||
// Power on reset time
|
||||
#if !defined (CY_BT_POWER_ON_RESET_TIME)
|
||||
#define CY_BT_POWER_ON_RESET_TIME (1ms)
|
||||
#endif /* !defined (CY_BT_POWER_ON_RESET_TIME) */
|
||||
|
||||
|
||||
namespace ble {
|
||||
namespace vendor {
|
||||
namespace cypress_ble {
|
||||
|
@ -44,7 +55,7 @@ CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, Pi
|
|||
cts(cts), rts(rts),
|
||||
bt_host_wake_name(bt_host_wake_name),
|
||||
bt_device_wake_name(bt_device_wake_name),
|
||||
bt_power(bt_power_name, PIN_OUTPUT, PullNone, 0),
|
||||
bt_power(bt_power_name, PIN_OUTPUT, PullUp, 0),
|
||||
bt_host_wake(bt_host_wake_name, PIN_INPUT, PullNone, 0),
|
||||
bt_device_wake(bt_device_wake_name, PIN_OUTPUT, PullNone, 1),
|
||||
host_wake_irq_event(host_wake_irq),
|
||||
|
@ -153,8 +164,9 @@ void CyH4TransportDriver::initialize()
|
|||
bt_host_wake_active = true;
|
||||
sleep_manager_lock_deep_sleep();
|
||||
|
||||
// Keep the bt_power line in the low level to ensure that the device resets.
|
||||
bt_power = 0;
|
||||
rtos::ThisThread::sleep_for(1ms);
|
||||
rtos::ThisThread::sleep_for(CY_BT_POWER_ON_RESET_TIME);
|
||||
|
||||
#if defined(CYW43XXX_UNBUFFERED_UART)
|
||||
uart.baud(DEF_BT_BAUD_RATE);
|
||||
|
@ -186,7 +198,9 @@ void CyH4TransportDriver::initialize()
|
|||
cyhal_uart_enable_event(&uart, CYHAL_UART_IRQ_RX_NOT_EMPTY, CYHAL_ISR_PRIORITY_DEFAULT, true);
|
||||
#endif
|
||||
|
||||
// Power up BT
|
||||
bt_power = 1;
|
||||
rtos::ThisThread::sleep_for(CY_BT_POWER_ON_SETTLING_TIME);
|
||||
|
||||
#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER)
|
||||
if (bt_host_wake_name != NC) {
|
||||
|
@ -229,6 +243,7 @@ void CyH4TransportDriver::terminate()
|
|||
|
||||
deassert_bt_dev_wake();
|
||||
|
||||
// Power down BT
|
||||
bt_power = 0; //BT_POWER is an output, should not be freed only set inactive
|
||||
|
||||
#if defined(CYW43XXX_UNBUFFERED_UART)
|
||||
|
|
|
@ -75,13 +75,10 @@ class HCIDriver : public CordioHCIDriver {
|
|||
public:
|
||||
HCIDriver(
|
||||
ble::vendor::cypress_ble::CyH4TransportDriver& transport_driver,
|
||||
PinName bt_power_name,
|
||||
bool ps_enabled,
|
||||
uint8_t host_wake_irq,
|
||||
uint8_t dev_wake_irq
|
||||
) : CordioHCIDriver(transport_driver),
|
||||
bt_power_name(bt_power_name),
|
||||
bt_power(bt_power_name, PIN_OUTPUT, PullUp, 0),
|
||||
is_powersave_enabled(ps_enabled),
|
||||
host_wake_irq(host_wake_irq),
|
||||
dev_wake_irq(dev_wake_irq),
|
||||
|
@ -101,9 +98,6 @@ public:
|
|||
|
||||
virtual void do_initialize()
|
||||
{
|
||||
rtos::ThisThread::sleep_for(500ms);
|
||||
bt_power = 1;
|
||||
rtos::ThisThread::sleep_for(500ms);
|
||||
}
|
||||
|
||||
virtual void do_terminate() { }
|
||||
|
@ -436,12 +430,12 @@ private:
|
|||
if (is_powersave_on()) {
|
||||
pBuf[HCI_CMD_HDR_LEN + 3] = dev_wake_irq; // BT WAKE
|
||||
} else {
|
||||
pBuf[HCI_CMD_HDR_LEN + 3] = 0x00; // BT WAKE
|
||||
pBuf[HCI_CMD_HDR_LEN + 3] = 0x00; // no BT WAKE
|
||||
}
|
||||
if (is_powersave_on()) {
|
||||
pBuf[HCI_CMD_HDR_LEN + 4] = host_wake_irq; // HOST WAKE
|
||||
} else {
|
||||
pBuf[HCI_CMD_HDR_LEN + 4] = 0x00; // HOST WAKE
|
||||
pBuf[HCI_CMD_HDR_LEN + 4] = 0x00; // no HOST WAKE
|
||||
}
|
||||
pBuf[HCI_CMD_HDR_LEN + 5] = 0x00; // Sleep during SCO
|
||||
pBuf[HCI_CMD_HDR_LEN + 6] = 0x00; // Combining sleep mode and SCM
|
||||
|
@ -522,9 +516,6 @@ private:
|
|||
return (is_powersave_enabled);
|
||||
}
|
||||
|
||||
PinName bt_power_name;
|
||||
mbed::DigitalInOut bt_power;
|
||||
|
||||
bool is_powersave_enabled;
|
||||
uint8_t host_wake_irq;
|
||||
uint8_t dev_wake_irq;
|
||||
|
@ -546,9 +537,9 @@ ble::CordioHCIDriver& ble_cordio_get_hci_driver()
|
|||
{
|
||||
static ble::vendor::cypress_ble::CyH4TransportDriver& transport_driver =
|
||||
ble_cordio_get_h4_transport_driver();
|
||||
|
||||
static ble::vendor::cypress::HCIDriver hci_driver(
|
||||
transport_driver,
|
||||
/* bt_power */ CYBSP_BT_POWER,
|
||||
transport_driver.get_enabled_powersave(),
|
||||
transport_driver.get_host_wake_irq_event(),
|
||||
transport_driver.get_dev_wake_irq_event()
|
||||
|
|
Loading…
Reference in New Issue