mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'kmwh-swint-2' into 'pr-dev/hci-driver-terminate'
Kmwh swint 2 See merge request repo/mbed-os!702pull/14009/head
commit
a8fbe8cea2
|
@ -31,32 +31,38 @@ namespace cypress_ble {
|
|||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, int baud, PinName bt_host_wake_name, PinName bt_device_wake_name, uint8_t host_wake_irq, uint8_t dev_wake_irq) :
|
||||
CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, PinName bt_power_name, int baud, PinName bt_host_wake_name, PinName bt_device_wake_name, uint8_t host_wake_irq, uint8_t dev_wake_irq) :
|
||||
cts(cts), rts(rts),
|
||||
tx(tx), rx(rx),
|
||||
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_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),
|
||||
dev_wake_irq_event(dev_wake_irq)
|
||||
|
||||
{
|
||||
cyhal_uart_init(&uart, tx, rx, NULL, NULL);
|
||||
enabled_powersave = true;
|
||||
bt_host_wake_active = false;
|
||||
}
|
||||
|
||||
CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, int baud) :
|
||||
CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, PinName bt_power_name, int baud) :
|
||||
cts(cts),
|
||||
rts(rts),
|
||||
tx(tx), rx(rx),
|
||||
bt_host_wake_name(NC),
|
||||
bt_device_wake_name(NC),
|
||||
bt_power(bt_power_name, PIN_OUTPUT, PullNone, 0),
|
||||
bt_host_wake(bt_host_wake_name),
|
||||
bt_device_wake(bt_device_wake_name)
|
||||
|
||||
{
|
||||
cyhal_uart_init(&uart, tx, rx, NULL, NULL);
|
||||
enabled_powersave = false;
|
||||
bt_host_wake_active = false;
|
||||
sleep_manager_lock_deep_sleep();
|
||||
|
||||
sleep_manager_lock_deep_sleep(); // locking deep sleep because this option
|
||||
// does not include a host wake pin
|
||||
holding_deep_sleep_lock = true;
|
||||
}
|
||||
|
||||
|
@ -118,18 +124,22 @@ static void on_controller_irq(void *callback_arg, cyhal_uart_event_t event)
|
|||
|
||||
void CyH4TransportDriver::initialize()
|
||||
{
|
||||
#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER)
|
||||
mbed::InterruptIn *host_wake_pin;
|
||||
#endif
|
||||
|
||||
sleep_manager_lock_deep_sleep();
|
||||
|
||||
bt_power = 0;
|
||||
rtos::ThisThread::sleep_for(1ms);
|
||||
|
||||
cyhal_uart_init(&uart, tx, rx, NULL, NULL);
|
||||
|
||||
const cyhal_uart_cfg_t uart_cfg = { .data_bits = 8, .stop_bits = 1, .parity = CYHAL_UART_PARITY_NONE, .rx_buffer = NULL, .rx_buffer_size = 0 };
|
||||
cyhal_uart_configure(&uart, &uart_cfg);
|
||||
cyhal_uart_set_flow_control(&uart, cts, rts);
|
||||
cyhal_uart_clear(&uart);
|
||||
cyhal_uart_register_callback(&uart, &on_controller_irq, &uart);
|
||||
cyhal_uart_enable_event(&uart, CYHAL_UART_IRQ_RX_NOT_EMPTY, CYHAL_ISR_PRIORITY_DEFAULT, true);
|
||||
|
||||
bt_power = 1;
|
||||
|
||||
#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER)
|
||||
if (bt_host_wake_name != NC) {
|
||||
//Register IRQ for Host WAKE
|
||||
|
@ -146,10 +156,34 @@ void CyH4TransportDriver::initialize()
|
|||
bt_device_wake = WAKE_EVENT_ACTIVE_HIGH;
|
||||
}
|
||||
sleep_manager_unlock_deep_sleep();
|
||||
rtos::ThisThread::sleep_for(500ms);
|
||||
}
|
||||
|
||||
void CyH4TransportDriver::terminate() { }
|
||||
void CyH4TransportDriver::terminate()
|
||||
{
|
||||
cyhal_uart_event_t enable_irq_event = (cyhal_uart_event_t)(CYHAL_UART_IRQ_RX_DONE
|
||||
| CYHAL_UART_IRQ_TX_DONE
|
||||
| CYHAL_UART_IRQ_RX_NOT_EMPTY
|
||||
);
|
||||
|
||||
cyhal_uart_enable_event(&uart,
|
||||
enable_irq_event,
|
||||
CYHAL_ISR_PRIORITY_DEFAULT,
|
||||
false
|
||||
);
|
||||
|
||||
if(bt_host_wake.is_connected())
|
||||
{
|
||||
#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER)
|
||||
delete host_wake_pin;
|
||||
#endif
|
||||
}
|
||||
|
||||
deassert_bt_dev_wake();
|
||||
|
||||
bt_power = 0; //BT_POWER is an output, should not be freed only set inactive
|
||||
|
||||
cyhal_uart_free(&uart);
|
||||
}
|
||||
|
||||
uint16_t CyH4TransportDriver::write(uint8_t type, uint16_t len, uint8_t *pData)
|
||||
{
|
||||
|
@ -229,14 +263,14 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_default_h4_transpo
|
|||
#if (defined(CYBSP_BT_HOST_WAKE) && defined(CYBSP_BT_DEVICE_WAKE))
|
||||
static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver(
|
||||
/* TX */ CYBSP_BT_UART_TX, /* RX */ CYBSP_BT_UART_RX,
|
||||
/* cts */ CYBSP_BT_UART_CTS, /* rts */ CYBSP_BT_UART_RTS, DEF_BT_BAUD_RATE,
|
||||
/* cts */ CYBSP_BT_UART_CTS, /* rts */ CYBSP_BT_UART_RTS, CYBSP_BT_POWER, DEF_BT_BAUD_RATE,
|
||||
CYBSP_BT_HOST_WAKE, CYBSP_BT_DEVICE_WAKE
|
||||
);
|
||||
|
||||
#else
|
||||
static ble::vendor::cypress_ble::CyH4TransportDriver s_transport_driver(
|
||||
/* TX */ CYBSP_BT_UART_TX, /* RX */ CYBSP_BT_UART_RX,
|
||||
/* cts */ CYBSP_BT_UART_CTS, /* rts */ CYBSP_BT_UART_RTS, DEF_BT_BAUD_RATE);
|
||||
/* cts */ CYBSP_BT_UART_CTS, /* rts */ CYBSP_BT_UART_RTS, CYBSP_BT_POWER, DEF_BT_BAUD_RATE);
|
||||
#endif
|
||||
return s_transport_driver;
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <stdint.h>
|
||||
#include "ble/driver/CordioHCITransportDriver.h"
|
||||
#include "drivers/DigitalInOut.h"
|
||||
#include "drivers/InterruptIn.h"
|
||||
#include "cyhal_uart.h"
|
||||
|
||||
namespace ble {
|
||||
|
@ -40,9 +41,9 @@ public:
|
|||
* Initialize the transport driver.
|
||||
*
|
||||
*/
|
||||
CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, int baud, PinName bt_host_wake_name, PinName bt_device_wake_name,
|
||||
CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, PinName bt_power_name, int baud, PinName bt_host_wake_name, PinName bt_device_wake_name,
|
||||
uint8_t host_wake_irq = 0, uint8_t dev_wake_irq = 0);
|
||||
CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, int baud);
|
||||
CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, PinName bt_power_name, int baud);
|
||||
|
||||
/**
|
||||
* Destructor
|
||||
|
@ -92,19 +93,26 @@ private:
|
|||
cyhal_uart_t uart;
|
||||
PinName cts;
|
||||
PinName rts;
|
||||
PinName tx;
|
||||
PinName rx;
|
||||
PinName bt_host_wake_name;
|
||||
PinName bt_device_wake_name;
|
||||
|
||||
mbed::DigitalInOut bt_power;
|
||||
mbed::DigitalInOut bt_host_wake;
|
||||
mbed::DigitalInOut bt_device_wake;
|
||||
|
||||
bool bt_host_wake_active;
|
||||
|
||||
#if (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER)
|
||||
mbed::InterruptIn *host_wake_pin;
|
||||
#endif
|
||||
|
||||
bool enabled_powersave;
|
||||
uint8_t host_wake_irq_event;
|
||||
uint8_t dev_wake_irq_event;
|
||||
|
||||
bool holding_deep_sleep_lock;
|
||||
|
||||
};
|
||||
|
||||
} // namespace cypress
|
||||
|
|
|
@ -87,7 +87,8 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive
|
|||
/* 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), DEF_BT_BAUD_RATE,
|
||||
/* 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(CYCFG_BT_HOST_WAKE_GPIO),
|
||||
cyhal_gpio_to_rtos(CYCFG_BT_DEV_WAKE_GPIO),
|
||||
CYCFG_BT_HOST_WAKE_IRQ_EVENT,
|
||||
|
@ -99,7 +100,8 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive
|
|||
/* 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), DEF_BT_BAUD_RATE);
|
||||
/* 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)) */
|
||||
|
@ -107,7 +109,8 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive
|
|||
/* 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), DEF_BT_BAUD_RATE,
|
||||
/* 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;
|
||||
|
@ -118,7 +121,8 @@ ble::vendor::cypress_ble::CyH4TransportDriver& ble_cordio_get_h4_transport_drive
|
|||
/* 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), DEF_BT_BAUD_RATE);
|
||||
/* 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;
|
||||
#endif /* (defined(MBED_TICKLESS) && DEVICE_SLEEP && DEVICE_LPTICKER) */
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue