[Utilities] Add more options for logtrace.
This commit is contained in:
parent
09f2d42e5a
commit
b07bd6c515
|
@ -4,6 +4,44 @@ config RT_USING_LOGTRACE
|
||||||
bool "Enable log trace"
|
bool "Enable log trace"
|
||||||
default n
|
default n
|
||||||
|
|
||||||
|
if RT_USING_LOGTRACE
|
||||||
|
config LOG_TRACE_MAX_SESSION
|
||||||
|
int "Maximal number of session"
|
||||||
|
default 16
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "The default level of log"
|
||||||
|
default LOG_TRACE_USING_LEVEL_INFO
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_NOTRACE
|
||||||
|
bool "No trace"
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_ERROR
|
||||||
|
bool "Only error log"
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_WARNING
|
||||||
|
bool "Warning log"
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_INFO
|
||||||
|
bool "Information log"
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_VERBOSE
|
||||||
|
bool "Verbose log"
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_LEVEL_DEBUG
|
||||||
|
bool "All debug log"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config LOG_TRACE_USING_MEMLOG
|
||||||
|
bool "Enable memory log for logtrace"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enable memory log for logtrace, then the logs in log_trace
|
||||||
|
will be printed out in idle thread hook function.
|
||||||
|
|
||||||
|
Please make sure the idle hook is not used.
|
||||||
|
endif
|
||||||
|
|
||||||
config RT_USING_RYM
|
config RT_USING_RYM
|
||||||
bool "Enable Ymodem"
|
bool "Enable Ymodem"
|
||||||
default n
|
default n
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
from building import *
|
from building import *
|
||||||
|
|
||||||
cwd = GetCurrentDir()
|
cwd = GetCurrentDir()
|
||||||
src = Glob('*.c')
|
src = Split('''
|
||||||
|
log_trace.c
|
||||||
|
''')
|
||||||
CPPPATH = [cwd]
|
CPPPATH = [cwd]
|
||||||
|
|
||||||
|
if GetDepend('LOG_TRACE_USING_MEMLOG'):
|
||||||
|
src += ['memlog.c']
|
||||||
|
|
||||||
|
if GetDepend('RT_USING_DFS'):
|
||||||
|
src += ['log_file.c']
|
||||||
|
|
||||||
group = DefineGroup('Utilities', src, depend = ['RT_USING_LOGTRACE'], CPPPATH = CPPPATH)
|
group = DefineGroup('Utilities', src, depend = ['RT_USING_LOGTRACE'], CPPPATH = CPPPATH)
|
||||||
|
|
||||||
Return('group')
|
Return('group')
|
||||||
|
|
|
@ -41,7 +41,7 @@ static struct rt_device _log_device;
|
||||||
static rt_device_t _traceout_device = RT_NULL;
|
static rt_device_t _traceout_device = RT_NULL;
|
||||||
|
|
||||||
/* define a default lg session. The name is empty. */
|
/* define a default lg session. The name is empty. */
|
||||||
static struct log_trace_session _def_session = {{"\0"}, LOG_TRACE_LEVEL_INFO};
|
static struct log_trace_session _def_session = {{"\0"}, LOG_TRACE_LEVEL_DEFAULT};
|
||||||
static const struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
|
static const struct log_trace_session *_the_sessions[LOG_TRACE_MAX_SESSION] = {&_def_session};
|
||||||
/* there is a default session at least */
|
/* there is a default session at least */
|
||||||
static rt_uint16_t _the_sess_nr = 1;
|
static rt_uint16_t _the_sess_nr = 1;
|
||||||
|
@ -267,6 +267,19 @@ void __logtrace_vfmtout(const struct log_trace_session *session,
|
||||||
RT_ASSERT(session);
|
RT_ASSERT(session);
|
||||||
RT_ASSERT(fmt);
|
RT_ASSERT(fmt);
|
||||||
|
|
||||||
|
/* it's default session */
|
||||||
|
if (session->id.name[0] == '\0')
|
||||||
|
{
|
||||||
|
rt_snprintf(_trace_buf, sizeof(_trace_buf), "[%08x]", rt_tick_get());
|
||||||
|
if (_traceout_device != RT_NULL)
|
||||||
|
{
|
||||||
|
rt_device_write(_traceout_device, -1, _trace_buf, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
ptr = &_trace_buf[0];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
rt_snprintf(_trace_buf, sizeof(_trace_buf), "[%08x][", rt_tick_get());
|
rt_snprintf(_trace_buf, sizeof(_trace_buf), "[%08x][", rt_tick_get());
|
||||||
if (_traceout_device != RT_NULL)
|
if (_traceout_device != RT_NULL)
|
||||||
{
|
{
|
||||||
|
@ -277,6 +290,8 @@ void __logtrace_vfmtout(const struct log_trace_session *session,
|
||||||
|
|
||||||
_trace_buf[0] = ']';
|
_trace_buf[0] = ']';
|
||||||
ptr = &_trace_buf[1];
|
ptr = &_trace_buf[1];
|
||||||
|
}
|
||||||
|
|
||||||
length = rt_vsnprintf(ptr, LOG_TRACE_BUFSZ, fmt, argptr);
|
length = rt_vsnprintf(ptr, LOG_TRACE_BUFSZ, fmt, argptr);
|
||||||
|
|
||||||
if (length >= LOG_TRACE_BUFSZ)
|
if (length >= LOG_TRACE_BUFSZ)
|
||||||
|
|
|
@ -37,7 +37,19 @@
|
||||||
#define LOG_TRACE_LEVEL_DEBUG 0x09
|
#define LOG_TRACE_LEVEL_DEBUG 0x09
|
||||||
#define LOG_TRACE_LEVEL_ALL 0x0f
|
#define LOG_TRACE_LEVEL_ALL 0x0f
|
||||||
|
|
||||||
#ifndef LOG_TRACE_LEVEL_DEFAULT
|
#if defined(LOG_TRACE_USING_LEVEL_NOTRACE)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_NOTRACE
|
||||||
|
#elif defined(LOG_TRACE_USING_LEVEL_ERROR)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_ERROR
|
||||||
|
#elif defined(LOG_TRACE_USING_LEVEL_WARNING)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_WARNING
|
||||||
|
#elif defined(LOG_TRACE_USING_LEVEL_INFO)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_INFO
|
||||||
|
#elif defined(LOG_TRACE_USING_LEVEL_VERBOSE)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_VERBOSE
|
||||||
|
#elif defined(LOG_TRACE_USING_LEVEL_DEBUG)
|
||||||
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_DEBUG
|
||||||
|
#else
|
||||||
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_INFO
|
#define LOG_TRACE_LEVEL_DEFAULT LOG_TRACE_LEVEL_INFO
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* File : memlog.c
|
||||||
|
* This file is part of RT-Thread RTOS
|
||||||
|
* COPYRIGHT (C) 2013, RT-Thread Development Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* Change Logs:
|
||||||
|
* Date Author Notes
|
||||||
|
* 2013-06-26 Grissiom the first version
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <rtthread.h>
|
||||||
|
#include <rtdevice.h>
|
||||||
|
#include <log_trace.h>
|
||||||
|
|
||||||
|
#define PIPE_SZ 2048
|
||||||
|
#define PIPE_NAME "memlog"
|
||||||
|
|
||||||
|
static rt_pipe_t *_log_pipe = NULL;
|
||||||
|
static rt_uint8_t outbuf[1024];
|
||||||
|
void memlog_flush(void)
|
||||||
|
{
|
||||||
|
rt_size_t readsz;
|
||||||
|
rt_device_t console;
|
||||||
|
|
||||||
|
console = rt_console_get_device();
|
||||||
|
if (!console) return;
|
||||||
|
|
||||||
|
readsz = rt_device_read((rt_device_t)&(_log_pipe->parent), 0, outbuf, sizeof(outbuf));
|
||||||
|
if (readsz)
|
||||||
|
rt_device_write(console, 0, outbuf, readsz);
|
||||||
|
}
|
||||||
|
|
||||||
|
int memlog_init(void)
|
||||||
|
{
|
||||||
|
_log_pipe = rt_pipe_create(PIPE_NAME, PIPE_SZ);
|
||||||
|
if (_log_pipe == RT_NULL)
|
||||||
|
{
|
||||||
|
rt_kprintf("init pipe device failed.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
log_trace_set_device(PIPE_NAME);
|
||||||
|
rt_thread_idle_sethook(memlog_flush);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
INIT_APP_EXPORT(memlog_init);
|
Loading…
Reference in New Issue