Skip to content

Commit 9bec1b8

Browse files
committed
use serial_tx_active
1 parent 546b081 commit 9bec1b8

File tree

7 files changed

+55
-17
lines changed

7 files changed

+55
-17
lines changed

connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace cypress_ble {
3434
using namespace std::chrono_literals;
3535

3636
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) :
37-
#if defined(CYW43XXX_UNBUFFERED_UART)
37+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
3838
uart(tx, rx),
3939
#else
4040
tx(tx), rx(rx),
@@ -54,7 +54,7 @@ CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, Pi
5454
}
5555

5656
CyH4TransportDriver::CyH4TransportDriver(PinName tx, PinName rx, PinName cts, PinName rts, PinName bt_power_name, int baud) :
57-
#if defined(CYW43XXX_UNBUFFERED_UART)
57+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
5858
uart(tx, rx),
5959
#else
6060
tx(tx), rx(rx),
@@ -116,20 +116,20 @@ void CyH4TransportDriver::bt_host_wake_fall_irq_handler(void)
116116
}
117117
}
118118

119-
#if defined(CYW43XXX_UNBUFFERED_UART)
119+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
120120
void CyH4TransportDriver::on_controller_irq()
121121
#else
122122
static void on_controller_irq(void *callback_arg, cyhal_uart_event_t event)
123123
#endif
124124
{
125-
#if !defined(CYW43XXX_UNBUFFERED_UART)
125+
#if !(defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
126126
(void)(event);
127127
cyhal_uart_t *uart_obj = (cyhal_uart_t *)callback_arg;
128128
#endif
129129

130130
sleep_manager_lock_deep_sleep();
131131

132-
#if defined(CYW43XXX_UNBUFFERED_UART)
132+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
133133
while (uart.readable()) {
134134
uint8_t char_received;
135135
if (uart.read(&char_received, 1)) {
@@ -153,7 +153,7 @@ void CyH4TransportDriver::initialize()
153153
bt_power = 0;
154154
rtos::ThisThread::sleep_for(1ms);
155155

156-
#if defined(CYW43XXX_UNBUFFERED_UART)
156+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
157157
uart.baud(DEF_BT_BAUD_RATE);
158158

159159
uart.format(
@@ -205,7 +205,7 @@ void CyH4TransportDriver::initialize()
205205

206206
void CyH4TransportDriver::terminate()
207207
{
208-
#if !defined(CYW43XXX_UNBUFFERED_UART)
208+
#if !(defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
209209
cyhal_uart_event_t enable_irq_event = (cyhal_uart_event_t)(CYHAL_UART_IRQ_RX_DONE
210210
| CYHAL_UART_IRQ_TX_DONE
211211
| CYHAL_UART_IRQ_RX_NOT_EMPTY
@@ -229,7 +229,7 @@ void CyH4TransportDriver::terminate()
229229

230230
bt_power = 0; //BT_POWER is an output, should not be freed only set inactive
231231

232-
#if defined(CYW43XXX_UNBUFFERED_UART)
232+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
233233
uart.close();
234234
#else
235235
cyhal_uart_free(&uart);
@@ -245,7 +245,7 @@ uint16_t CyH4TransportDriver::write(uint8_t type, uint16_t len, uint8_t *pData)
245245

246246
while (i < len + 1) {
247247
uint8_t to_write = i == 0 ? type : pData[i - 1];
248-
#if defined(CYW43XXX_UNBUFFERED_UART)
248+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
249249
while (uart.writeable() == 0);
250250
uart.write(&to_write, 1);
251251
#else
@@ -254,8 +254,8 @@ uint16_t CyH4TransportDriver::write(uint8_t type, uint16_t len, uint8_t *pData)
254254
#endif
255255
++i;
256256
}
257-
#if defined(CYW43XXX_UNBUFFERED_UART)
258-
while (uart.writeable() == 0);
257+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
258+
while(uart.is_tx_active() != 0);
259259
#else
260260
while(cyhal_uart_is_tx_active(&uart));
261261
#endif
@@ -294,7 +294,7 @@ void CyH4TransportDriver::deassert_bt_dev_wake()
294294

295295
void CyH4TransportDriver::update_uart_baud_rate(int baud)
296296
{
297-
#if defined(CYW43XXX_UNBUFFERED_UART)
297+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
298298
uart.baud((uint32_t)baud);
299299
#else
300300
uint32_t ignore;

connectivity/drivers/ble/FEATURE_BLE/COMPONENT_CYW43XXX/CyH4TransportDriver.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
#include "drivers/DigitalInOut.h"
2626
#include "drivers/InterruptIn.h"
2727

28-
#if defined(CYW43XXX_UNBUFFERED_UART)
28+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
2929
#include "drivers/UnbufferedSerial.h"
3030
#else
3131
#include "cyhal_uart.h"
@@ -86,8 +86,8 @@ class CyH4TransportDriver : public CordioHCITransportDriver {
8686
private:
8787
void assert_bt_dev_wake();
8888
void deassert_bt_dev_wake();
89-
90-
#if defined(CYW43XXX_UNBUFFERED_UART)
89+
90+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
9191
void on_controller_irq();
9292
#endif
9393

@@ -98,7 +98,7 @@ class CyH4TransportDriver : public CordioHCITransportDriver {
9898
// However UART APIs does not prevent the BT radio from going to sleep.
9999
// Use the HAL APIs to prevent the radio from going to sleep until UART transmition is complete.
100100
// Mbed layer has no API that distinguish between data in HW buffer v.s. data already transmitted.
101-
#if defined(CYW43XXX_UNBUFFERED_UART)
101+
#if (defined(CYW43XXX_UNBUFFERED_UART) && DEVICE_SERIAL_ASYNCH)
102102
mbed::UnbufferedSerial uart;
103103
#else
104104
cyhal_uart_t uart;

drivers/include/drivers/SerialBase.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,12 @@ class SerialBase : private NonCopyable<SerialBase> {
273273
*/
274274
int set_dma_usage_rx(DMAUsage usage);
275275

276+
/** Attempts to determine if the serial peripheral is already in use for TX
277+
*
278+
* @return Non-zero if the TX transaction is ongoing, 0 otherwise
279+
*/
280+
int is_tx_active();
281+
276282
#if !defined(DOXYGEN_ONLY)
277283
protected:
278284
void start_read(void *buffer, int buffer_size, char buffer_width, const event_callback_t &callback, int event, unsigned char char_match);

drivers/include/drivers/UnbufferedSerial.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,14 @@ class UnbufferedSerial:
211211
*/
212212
void set_flow_control(Flow type, PinName flow1 = NC, PinName flow2 = NC);
213213
#endif // DEVICE_SERIAL_FC
214+
215+
#if DEVICE_SERIAL_ASYNCH
216+
/** Attempts to determine if the serial peripheral is already in use for TX
217+
*
218+
* @return Non-zero if the TX transaction is ongoing, 0 otherwise
219+
*/
220+
int is_tx_active();
221+
#endif // DEVICE_SERIAL_ASYNCH
214222
};
215223

216224
} // namespace mbed

drivers/source/SerialBase.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,16 @@ void SerialBase::interrupt_handler_asynch(void)
486486
}
487487
}
488488

489+
int SerialBase::is_tx_active(void)
490+
{
491+
int result = 0;
492+
lock();
493+
result = serial_tx_active(&_serial);
494+
unlock();
495+
496+
return result;
497+
}
498+
489499
#endif
490500

491501
} // namespace mbed

drivers/source/UnbufferedSerial.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,19 @@ void UnbufferedSerial::set_flow_control(Flow type, PinName flow1, PinName flow2)
122122
}
123123
#endif // DEVICE_SERIAL_FC
124124

125+
#if DEVICE_SERIAL_ASYNCH
126+
int UnbufferedSerial::is_tx_active(void)
127+
{
128+
int retval;
129+
130+
lock();
131+
retval = SerialBase::is_tx_active();
132+
unlock();
133+
134+
return retval;
135+
}
136+
#endif // DEVICE_SERIAL_ASYNCH
137+
125138
} // namespace mbed
126139

127140
#endif // #if DEVICE_SERIAL

targets/targets.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3050,7 +3050,8 @@
30503050
"device_has_add": [
30513051
"USBDEVICE",
30523052
"EMAC",
3053-
"QSPI"
3053+
"QSPI",
3054+
"SERIAL_ASYNCH"
30543055
],
30553056
"overrides": {
30563057
"system_power_supply": "PWR_SMPS_1V8_SUPPLIES_LDO",

0 commit comments

Comments
 (0)