@@ -141,6 +141,7 @@ extern serial_t stdio_uart;
141
141
class DirectSerial : public FileHandle {
142
142
public:
143
143
DirectSerial (PinName tx, PinName rx, int baud);
144
+ DirectSerial (const serial_pinmap_t &explicit_pinmap, int baud);
144
145
virtual ssize_t write (const void *buffer, size_t size);
145
146
virtual ssize_t read (void *buffer, size_t size);
146
147
virtual off_t seek (off_t offset, int whence = SEEK_SET)
@@ -178,6 +179,22 @@ DirectSerial::DirectSerial(PinName tx, PinName rx, int baud)
178
179
#endif
179
180
}
180
181
182
+ DirectSerial::DirectSerial (const serial_pinmap_t &explicit_pinmap, int baud)
183
+ {
184
+ if (stdio_uart_inited) {
185
+ return ;
186
+ }
187
+ serial_init_direct (&stdio_uart, &explicit_pinmap);
188
+ serial_baud (&stdio_uart, baud);
189
+ #if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
190
+ serial_set_flow_control (&stdio_uart, FlowControlRTS, STDIO_UART_RTS, NC);
191
+ #elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
192
+ serial_set_flow_control (&stdio_uart, FlowControlCTS, NC, STDIO_UART_CTS);
193
+ #elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTSCTS
194
+ serial_set_flow_control (&stdio_uart, FlowControlRTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
195
+ #endif
196
+ }
197
+
181
198
ssize_t DirectSerial::write (const void *buffer, size_t size)
182
199
{
183
200
const unsigned char *buf = static_cast <const unsigned char *>(buffer);
@@ -262,7 +279,12 @@ static FileHandle *default_console()
262
279
{
263
280
#if MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
264
281
# if MBED_CONF_PLATFORM_STDIO_BUFFERED_SERIAL
265
- static UARTSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
282
+ # if defined(STDIO_UART_TX) && defined(STDIO_UART_TX_FUNC) && defined(STDIO_UART_RX) && defined(STDIO_UART_RX_FUNC) && defined(STDIO_UART)
283
+ const serial_pinmap_t explicit_pinmap = {STDIO_UART, STDIO_UART_TX, STDIO_UART_TX_FUNC, STDIO_UART_RX, STDIO_UART_RX_FUNC, 1 };
284
+ static UARTSerial console (explicit_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
285
+ # else
286
+ static UARTSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
287
+ # endif
266
288
# if CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_RTS
267
289
console.set_flow_control (SerialBase::RTS, STDIO_UART_RTS, NC);
268
290
# elif CONSOLE_FLOWCONTROL == CONSOLE_FLOWCONTROL_CTS
@@ -271,7 +293,12 @@ static FileHandle *default_console()
271
293
console.set_flow_control (SerialBase::RTSCTS, STDIO_UART_RTS, STDIO_UART_CTS);
272
294
# endif
273
295
# else
274
- static DirectSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
296
+ # if defined(STDIO_UART_TX) && defined(STDIO_UART_TX_FUNC) && defined(STDIO_UART_RX) && defined(STDIO_UART_RX_FUNC) && defined(STDIO_UART)
297
+ const serial_pinmap_t explicit_pinmap = {STDIO_UART, STDIO_UART_TX, STDIO_UART_TX_FUNC, STDIO_UART_RX, STDIO_UART_RX_FUNC, 1 };
298
+ static DirectSerial console (explicit_pinmap, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
299
+ # else
300
+ static DirectSerial console (STDIO_UART_TX, STDIO_UART_RX, MBED_CONF_PLATFORM_STDIO_BAUD_RATE);
301
+ # endif
275
302
# endif
276
303
#else // MBED_CONF_TARGET_CONSOLE_UART && DEVICE_SERIAL
277
304
static Sink console;
0 commit comments