1 /*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "pico/binary_info.h"
8 #include "pico/stdio/driver.h"
9 #include "pico/stdio_rtt.h"
10 #include "SEGGER_RTT.h"
11
12 #if PICO_NO_BI_STDIO_RTT
13 #define stdio_bi_decl_if_func_used(x)
14 #else
15 #define stdio_bi_decl_if_func_used bi_decl_if_func_used
16 #endif
17
stdio_rtt_init(void)18 void stdio_rtt_init(void) {
19 SEGGER_RTT_Init();
20 stdio_set_driver_enabled(&stdio_rtt, true);
21 stdio_bi_decl_if_func_used(bi_program_feature("RTT stdin / stdout"));
22 }
23
stdio_rtt_deinit(void)24 void stdio_rtt_deinit(void) {
25 stdio_set_driver_enabled(&stdio_rtt, false);
26 }
27
stdio_rtt_out_chars(const char * buf,int length)28 static void stdio_rtt_out_chars(const char *buf, int length) {
29 SEGGER_RTT_Write(0, buf, (unsigned)length);
30 }
31
stdio_rtt_in_chars(char * buf,int length)32 static int stdio_rtt_in_chars(char *buf, int length) {
33 return (int)SEGGER_RTT_Read(0, buf, (unsigned)length);
34 }
35
36 stdio_driver_t stdio_rtt = {
37 .out_chars = stdio_rtt_out_chars,
38 .in_chars = stdio_rtt_in_chars,
39 #if PICO_STDIO_ENABLE_CRLF_SUPPORT
40 .crlf_enabled = PICO_STDIO_RTT_DEFAULT_CRLF
41 #endif
42 };
43