33
33
#include " drivers/UARTSerial.h"
34
34
#include " hal/us_ticker_api.h"
35
35
#include " hal/lp_ticker_api.h"
36
+ #include " hal/explicit_pinmap.h"
36
37
#include < stdlib.h>
37
38
#include < string.h>
38
39
#include < limits.h>
@@ -154,6 +155,7 @@ extern serial_t stdio_uart;
154
155
class DirectSerial : public FileHandle {
155
156
public:
156
157
DirectSerial (PinName tx, PinName rx, int baud);
158
+ DirectSerial (const serial_pinmap_t &explicit_pinmap, int baud);
157
159
virtual ssize_t write (const void *buffer, size_t size);
158
160
virtual ssize_t read (void *buffer, size_t size);
159
161
virtual off_t seek (off_t offset, int whence = SEEK_SET)
@@ -180,14 +182,39 @@ DirectSerial::DirectSerial(PinName tx, PinName rx, int baud)
180
182
if (stdio_uart_inited) {
181
183
return ;
182
184
}
183
- serial_init (&stdio_uart, tx, rx);
185
+ static const serial_pinmap_t console_pinmap = get_uart_pinmap (STDIO_UART_TX, STDIO_UART_RX);
186
+ serial_init_direct (&stdio_uart, &console_pinmap);
184
187
serial_baud (&stdio_uart, baud);
188
+
185
189
#if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
186
- serial_set_flow_control (&stdio_uart, FlowControlRTS, STDIO_UART_RTS, NC);
190
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, NC);
191
+ serial_set_flow_control_direct (&stdio_uart, FlowControlRTS, fc_pinmap);
187
192
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
188
- serial_set_flow_control (&stdio_uart, FlowControlCTS, NC, STDIO_UART_CTS);
193
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (NC, STDIO_UART_CTS);
194
+ serial_set_flow_control_direct (&stdio_uart, FlowControlCTS, fc_pinmap);
189
195
#elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
190
- serial_set_flow_control (&stdio_uart, FlowControlRTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
196
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, STDIO_UART_CTS);
197
+ serial_set_flow_control_direct (&stdio_uart, FlowControlRTSCTS, fc_pinmap);
198
+ #endif
199
+ }
200
+
201
+ DirectSerial::DirectSerial (const serial_pinmap_t &explicit_pinmap, int baud)
202
+ {
203
+ if (stdio_uart_inited) {
204
+ return ;
205
+ }
206
+ serial_init_direct (&stdio_uart, &explicit_pinmap);
207
+ serial_baud (&stdio_uart, baud);
208
+
209
+ #if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
210
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, NC);
211
+ serial_set_flow_control_direct (&stdio_uart, FlowControlRTS, fc_pinmap);
212
+ #elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
213
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (NC, STDIO_UART_CTS);
214
+ serial_set_flow_control_direct (&stdio_uart, FlowControlCTS, fc_pinmap);
215
+ #elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
216
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, STDIO_UART_CTS);
217
+ serial_set_flow_control_direct (&stdio_uart, FlowControlRTSCTS, fc_pinmap);
191
218
#endif
192
219
}
193
220
@@ -303,17 +330,23 @@ MBED_WEAK FileHandle *mbed::mbed_override_console(int fd)
303
330
static FileHandle *default_console ()
304
331
{
305
332
#if MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
333
+
306
334
# if MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL
307
- static UARTSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
335
+ static const serial_pinmap_t console_pinmap = get_uart_pinmap (STDIO_UART_TX, STDIO_UART_RX);
336
+ static UARTSerial console (console_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
308
337
# if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
309
- console.set_flow_control (SerialBase::RTS, STDIO_UART_RTS, NC);
338
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, NC);
339
+ console.serial_set_flow_control (SerialBase::RTS, fc_pinmap);
310
340
# elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
311
- console.set_flow_control (SerialBase::CTS, NC, STDIO_UART_CTS);
341
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (NC, STDIO_UART_CTS);
342
+ console.serial_set_flow_control (SerialBase::CTS, fc_pinmap);
312
343
# elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
313
- console.set_flow_control (SerialBase::RTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
344
+ static const serial_fc_pinmap_t fc_pinmap = get_uart_fc_pinmap (STDIO_UART_RTS, STDIO_UART_CTS);
345
+ console.serial_set_flow_control (SerialBase::RTSCTS, fc_pinmap);
314
346
# endif
315
347
# else
316
- static DirectSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
348
+ static const serial_pinmap_t console_pinmap = get_uart_pinmap (STDIO_UART_TX, STDIO_UART_RX);
349
+ static DirectSerial console (console_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
317
350
# endif
318
351
#else // MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
319
352
static Sink console;
0 commit comments