1*042d53a7SEvalZero /*
2*042d53a7SEvalZero * SPDX-License-Identifier: Apache-2.0
3*042d53a7SEvalZero *
4*042d53a7SEvalZero * Date Author Notes
5*042d53a7SEvalZero * 2018-12-27 ChenYong first implementation
6*042d53a7SEvalZero */
7*042d53a7SEvalZero
8*042d53a7SEvalZero #include <string.h>
9*042d53a7SEvalZero
10*042d53a7SEvalZero #include <rtthread.h>
11*042d53a7SEvalZero #include <rthw.h>
12*042d53a7SEvalZero
13*042d53a7SEvalZero #include <modlog/modlog.h>
14*042d53a7SEvalZero
15*042d53a7SEvalZero /* This log is the first line of logs */
16*042d53a7SEvalZero static rt_bool_t console_is_fline = RT_TRUE;
17*042d53a7SEvalZero
18*042d53a7SEvalZero #ifdef NIMBLE_DEBUG_LEVEL
19*042d53a7SEvalZero #define MODLOG_DEBUG_LEVEL NIMBLE_DEBUG_LEVEL
20*042d53a7SEvalZero #else
21*042d53a7SEvalZero #define MODLOG_DEBUG_LEVEL MODLOG_LEVEL_INFO
22*042d53a7SEvalZero #endif /* NIMBLE_DBG_LEVEL */
23*042d53a7SEvalZero
24*042d53a7SEvalZero #define DBG_ENABLE
25*042d53a7SEvalZero #define DBG_COLOR
26*042d53a7SEvalZero #define DBG_LEVEL MODLOG_DEBUG_LEVEL
27*042d53a7SEvalZero
28*042d53a7SEvalZero #ifndef DBG_SECTION_NAME
29*042d53a7SEvalZero #define DBG_SECTION_NAME "nimble"
30*042d53a7SEvalZero #endif
31*042d53a7SEvalZero
32*042d53a7SEvalZero #include <rtdbg.h>
33*042d53a7SEvalZero
modlog_vprintf(const char * fmt,va_list args)34*042d53a7SEvalZero static rt_size_t modlog_vprintf(const char *fmt, va_list args)
35*042d53a7SEvalZero {
36*042d53a7SEvalZero static char modlog_buf[RT_CONSOLEBUF_SIZE];
37*042d53a7SEvalZero rt_device_t dev = rt_console_get_device();
38*042d53a7SEvalZero rt_size_t length;
39*042d53a7SEvalZero
40*042d53a7SEvalZero length = rt_vsnprintf(modlog_buf, sizeof(modlog_buf) - 1, fmt, args);
41*042d53a7SEvalZero
42*042d53a7SEvalZero #ifdef RT_USING_DEVICE
43*042d53a7SEvalZero if (dev == RT_NULL)
44*042d53a7SEvalZero {
45*042d53a7SEvalZero rt_hw_console_output(modlog_buf);
46*042d53a7SEvalZero }
47*042d53a7SEvalZero else
48*042d53a7SEvalZero {
49*042d53a7SEvalZero rt_uint16_t old_flag = dev->open_flag;
50*042d53a7SEvalZero
51*042d53a7SEvalZero dev->open_flag |= RT_DEVICE_FLAG_STREAM;
52*042d53a7SEvalZero rt_device_write(dev, 0, modlog_buf, length);
53*042d53a7SEvalZero dev->open_flag = old_flag;
54*042d53a7SEvalZero }
55*042d53a7SEvalZero #else
56*042d53a7SEvalZero rt_hw_console_output(log);
57*042d53a7SEvalZero #endif
58*042d53a7SEvalZero
59*042d53a7SEvalZero return length;
60*042d53a7SEvalZero }
61*042d53a7SEvalZero
modlog_dummy(uint8_t level,const char * msg,...)62*042d53a7SEvalZero void modlog_dummy(uint8_t level, const char *msg, ...)
63*042d53a7SEvalZero {
64*042d53a7SEvalZero va_list args;
65*042d53a7SEvalZero
66*042d53a7SEvalZero RT_ASSERT(msg);
67*042d53a7SEvalZero
68*042d53a7SEvalZero va_start(args, msg);
69*042d53a7SEvalZero switch (level)
70*042d53a7SEvalZero {
71*042d53a7SEvalZero case MODLOG_LEVEL_CRITICAL:
72*042d53a7SEvalZero #if (MODLOG_DEBUG_LEVEL >= MODLOG_LEVEL_LOG)
73*042d53a7SEvalZero case MODLOG_LEVEL_LOG:
74*042d53a7SEvalZero if(console_is_fline) rt_kprintf("[D/%s] ", DBG_SECTION_NAME);
75*042d53a7SEvalZero modlog_vprintf(msg, args);
76*042d53a7SEvalZero break;
77*042d53a7SEvalZero #endif
78*042d53a7SEvalZero #if (MODLOG_DEBUG_LEVEL >= MODLOG_LEVEL_INFO)
79*042d53a7SEvalZero case MODLOG_LEVEL_INFO:
80*042d53a7SEvalZero if(console_is_fline) rt_kprintf("[I/%s] ", DBG_SECTION_NAME);
81*042d53a7SEvalZero modlog_vprintf(msg, args);
82*042d53a7SEvalZero break;
83*042d53a7SEvalZero #endif
84*042d53a7SEvalZero #if (MODLOG_DEBUG_LEVEL >= MODLOG_LEVEL_WARING)
85*042d53a7SEvalZero case MODLOG_LEVEL_WARING:
86*042d53a7SEvalZero if(console_is_fline) rt_kprintf("[W/%s] ", DBG_SECTION_NAME);
87*042d53a7SEvalZero modlog_vprintf(msg, args);
88*042d53a7SEvalZero break;
89*042d53a7SEvalZero #endif
90*042d53a7SEvalZero #if (MODLOG_DEBUG_LEVEL >= MODLOG_LEVEL_ERROR)
91*042d53a7SEvalZero case MODLOG_LEVEL_ERROR:
92*042d53a7SEvalZero if(console_is_fline) rt_kprintf("[E/%s] ", DBG_SECTION_NAME);
93*042d53a7SEvalZero modlog_vprintf(msg, args);
94*042d53a7SEvalZero break;
95*042d53a7SEvalZero #endif
96*042d53a7SEvalZero }
97*042d53a7SEvalZero
98*042d53a7SEvalZero if (strchr(msg, '\n') != RT_NULL)
99*042d53a7SEvalZero {
100*042d53a7SEvalZero console_is_fline = RT_TRUE;
101*042d53a7SEvalZero }
102*042d53a7SEvalZero else
103*042d53a7SEvalZero {
104*042d53a7SEvalZero console_is_fline = RT_FALSE;
105*042d53a7SEvalZero }
106*042d53a7SEvalZero
107*042d53a7SEvalZero va_end(args);
108*042d53a7SEvalZero }
109