1 /* 2 * Copyright (c) 2006-2018, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2018-09-04 armink the first version 9 */ 10 11 #include <rthw.h> 12 #include <ulog.h> 13 14 #ifdef ULOG_BACKEND_USING_CONSOLE 15 16 #if defined(ULOG_ASYNC_OUTPUT_BY_THREAD) && ULOG_ASYNC_OUTPUT_THREAD_STACK < 384 17 #error "The thread stack size must more than 384 when using async output by thread (ULOG_ASYNC_OUTPUT_BY_THREAD)" 18 #endif 19 20 static struct ulog_backend console; 21 22 void ulog_console_backend_output(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw, 23 const char *log, size_t len) 24 { 25 rt_device_t dev = rt_console_get_device(); 26 27 #ifdef RT_USING_DEVICE 28 if (dev == RT_NULL) 29 { 30 rt_hw_console_output(log); 31 } 32 else 33 { 34 rt_uint16_t old_flag = dev->open_flag; 35 36 dev->open_flag |= RT_DEVICE_FLAG_STREAM; 37 rt_device_write(dev, 0, log, len); 38 dev->open_flag = old_flag; 39 } 40 #else 41 rt_hw_console_output(log); 42 #endif 43 44 } 45 46 int ulog_console_backend_init(void) 47 { 48 ulog_init(); 49 console.output = ulog_console_backend_output; 50 51 ulog_backend_register(&console, "console", RT_TRUE); 52 53 return 0; 54 } 55 INIT_PREV_EXPORT(ulog_console_backend_init); 56 57 #endif /* ULOG_BACKEND_USING_CONSOLE */ 58