@@ -88,6 +88,10 @@ FileHandle::~FileHandle() {
88
88
#if DEVICE_SERIAL
89
89
extern int stdio_uart_inited;
90
90
extern serial_t stdio_uart;
91
+ #if MBED_CONF_CORE_STDIO_CONVERT_NEWLINES
92
+ static char stdio_in_prev;
93
+ static char stdio_out_prev;
94
+ #endif
91
95
#endif
92
96
93
97
static void init_serial () {
@@ -226,9 +230,19 @@ extern "C" int PREFIX(_write)(FILEHANDLE fh, const unsigned char *buffer, unsign
226
230
if (fh < 3 ) {
227
231
#if DEVICE_SERIAL
228
232
if (!stdio_uart_inited) init_serial ();
233
+ #if MBED_CONF_CORE_STDIO_CONVERT_NEWLINES
234
+ for (unsigned int i = 0 ; i < length; i++) {
235
+ if (buffer[i] == ' \n ' && stdio_out_prev != ' \r ' ) {
236
+ serial_putc (&stdio_uart, ' \r ' );
237
+ }
238
+ serial_putc (&stdio_uart, buffer[i]);
239
+ stdio_out_prev = buffer[i];
240
+ }
241
+ #else
229
242
for (unsigned int i = 0 ; i < length; i++) {
230
243
serial_putc (&stdio_uart, buffer[i]);
231
244
}
245
+ #endif
232
246
#endif
233
247
n = length;
234
248
} else {
@@ -254,7 +268,28 @@ extern "C" int PREFIX(_read)(FILEHANDLE fh, unsigned char *buffer, unsigned int
254
268
// only read a character at a time from stdin
255
269
#if DEVICE_SERIAL
256
270
if (!stdio_uart_inited) init_serial ();
271
+ #if MBED_CONF_CORE_STDIO_CONVERT_NEWLINES
272
+ while (true ) {
273
+ char c = serial_getc (&stdio_uart);
274
+ if ((c == ' \r ' && stdio_in_prev != ' \n ' ) ||
275
+ (c == ' \n ' && stdio_in_prev != ' \r ' )) {
276
+ stdio_in_prev = c;
277
+ *buffer = ' \n ' ;
278
+ break ;
279
+ } else if ((c == ' \r ' && stdio_in_prev == ' \n ' ) ||
280
+ (c == ' \n ' && stdio_in_prev == ' \r ' )) {
281
+ stdio_in_prev = c;
282
+ // onto next character
283
+ continue ;
284
+ } else {
285
+ stdio_in_prev = c;
286
+ *buffer = c;
287
+ break ;
288
+ }
289
+ }
290
+ #else
257
291
*buffer = serial_getc (&stdio_uart);
292
+ #endif
258
293
#endif
259
294
n = 1 ;
260
295
} else {
0 commit comments