Contiki-NG
uart0-putchar.c
1/*---------------------------------------------------------------------------*/
2#include "contiki.h"
3#include "dev/uart0.h"
4
5#include <string.h>
6/*---------------------------------------------------------------------------*/
7#define SLIP_END 0300
8#undef putchar
9/*---------------------------------------------------------------------------*/
10int
11putchar(int c)
12{
13#if SLIP_ARCH_CONF_ENABLED
14 static char debug_frame = 0;
15
16 if(!debug_frame) { /* Start of debug output */
17 uart0_writeb(SLIP_END);
18 uart0_writeb('\r'); /* Type debug line == '\r' */
19 debug_frame = 1;
20 }
21#endif /* SLIP_ARCH_CONF_ENABLED */
22
23 /* Need to also print '\n' because for example COOJA will not show
24 any output before line end */
25 uart0_writeb((char)c);
26
27#if SLIP_ARCH_CONF_ENABLED
28 /*
29 * Line buffered output, a newline marks the end of debug output and
30 * implicitly flushes debug output.
31 */
32 if(c == '\n') {
33 uart0_writeb(SLIP_END);
34 debug_frame = 0;
35 }
36#endif /* SLIP_ARCH_CONF_ENABLED */
37 return c;
38}
39
40#if defined(__GNUC__) && (__GNUC__ >= 9)
41/* The printf() in newlib in GCC 9 from Texas Instruments uses the
42 * "TI C I/O" protocol which is not implemented in GDB. The user manual
43 * suggests overriding write() to redirect printf() output. */
44int
45write(int fd, const char *buf, int len)
46{
47 int i = 0;
48 for(; i < len && buf[i]; i++) {
49 putchar(buf[i]);
50 }
51 return i;
52}
53#endif
54/*---------------------------------------------------------------------------*/