feat: "add log flies"
This commit is contained in:
@@ -54,8 +54,8 @@
|
|||||||
<ClCompile Include="LVGL.Simulator.cpp" />
|
<ClCompile Include="LVGL.Simulator.cpp" />
|
||||||
<ClCompile Include="lvgl_mydemo\data\dataModel.c" />
|
<ClCompile Include="lvgl_mydemo\data\dataModel.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\data\gui_scr_mgr.c" />
|
<ClCompile Include="lvgl_mydemo\data\gui_scr_mgr.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\log\drv_log.c" />
|
<ClCompile Include="lvgl_mydemo\lib\drv_log.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\log\lib_log.c" />
|
<ClCompile Include="lvgl_mydemo\lib\lib_log.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\lvgl_app.c" />
|
<ClCompile Include="lvgl_mydemo\lvgl_app.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\screen\gui_main_scr.c" />
|
<ClCompile Include="lvgl_mydemo\screen\gui_main_scr.c" />
|
||||||
<ClCompile Include="lvgl_mydemo\screen\gui_test1_scr.c" />
|
<ClCompile Include="lvgl_mydemo\screen\gui_test1_scr.c" />
|
||||||
|
|||||||
@@ -39,14 +39,14 @@
|
|||||||
<ClCompile Include="lvgl_mydemo\screen\gui_test1_scr.c">
|
<ClCompile Include="lvgl_mydemo\screen\gui_test1_scr.c">
|
||||||
<Filter>lvgl_mydemo\srceen</Filter>
|
<Filter>lvgl_mydemo\srceen</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="lvgl_mydemo\log\drv_log.c">
|
|
||||||
<Filter>lvgl_mydemo\log</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="lvgl_mydemo\data\gui_scr_mgr.c">
|
<ClCompile Include="lvgl_mydemo\data\gui_scr_mgr.c">
|
||||||
<Filter>lvgl_mydemo\data</Filter>
|
<Filter>lvgl_mydemo\data</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="lvgl_mydemo\log\lib_log.c">
|
<ClCompile Include="lvgl_mydemo\lib\drv_log.c">
|
||||||
<Filter>lvgl_mydemo\log</Filter>
|
<Filter>lvgl_mydemo\lib</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="lvgl_mydemo\lib\lib_log.c">
|
||||||
|
<Filter>lvgl_mydemo\lib</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -80,8 +80,8 @@
|
|||||||
<Filter Include="lvgl_mydemo\assert\image">
|
<Filter Include="lvgl_mydemo\assert\image">
|
||||||
<UniqueIdentifier>{5aec906d-b671-4778-9999-6dcadc840600}</UniqueIdentifier>
|
<UniqueIdentifier>{5aec906d-b671-4778-9999-6dcadc840600}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
<Filter Include="lvgl_mydemo\log">
|
<Filter Include="lvgl_mydemo\lib">
|
||||||
<UniqueIdentifier>{7c5bcdd0-7a51-46f7-804e-ed1f4371645d}</UniqueIdentifier>
|
<UniqueIdentifier>{125c5bdc-13e9-45ed-bf0d-f844505c20ca}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
59
LVGL.Simulator/lvgl_mydemo/lib/drv_log.c
Normal file
59
LVGL.Simulator/lvgl_mydemo/lib/drv_log.c
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
/************************************************************************
|
||||||
|
* FilePath : drv_log.c
|
||||||
|
* Author : GX.Duan
|
||||||
|
* Date : 2022-09-21 22:22:33
|
||||||
|
* LastEditTime : 2022-09-30 22:29:58
|
||||||
|
* LastEditors : ShallowGreen123 2608653986@qq.com
|
||||||
|
* Copyright (c): 2022 by GX.Duan, All Rights Reserved.
|
||||||
|
* Github : https://github.com/ShallowGreen123/lvgl_mydemo
|
||||||
|
************************************************************************/
|
||||||
|
#define __DRV_LOG_C__
|
||||||
|
/*********************************************************************************
|
||||||
|
* INCLUDES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#include "drv_log.h"
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* DEFINES
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* MACROS
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* TYPEDEFS
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* STATIC FUNCTION
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* GLOBAL FUNCTION
|
||||||
|
* *******************************************************************************/
|
||||||
|
void Drv_LogPrintf(void *str)
|
||||||
|
{
|
||||||
|
printf("\033[1;32m%s\n", (uint8_t *)str);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Drv_LogColorPrintf(void *str, void *prefix)
|
||||||
|
{
|
||||||
|
char type = *((char *)prefix + 1);
|
||||||
|
char *color_str = NULL;
|
||||||
|
|
||||||
|
/* clang-format off */
|
||||||
|
switch (type) {
|
||||||
|
case 'V': printf(RTT_CTRL_TEXT_BRIGHT_YELLOW); break;
|
||||||
|
case 'D': printf(RTT_CTRL_TEXT_BRIGHT_GREEN); break;
|
||||||
|
case 'I': printf(RTT_CTRL_TEXT_BRIGHT_WHITE); break;
|
||||||
|
case 'W': printf(RTT_CTRL_TEXT_BRIGHT_YELLOW); break;
|
||||||
|
case 'E': printf(RTT_CTRL_TEXT_BRIGHT_RED); break;
|
||||||
|
case 'X' :printf(RTT_CTRL_TEXT_BRIGHT_MAGENTA); break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* clang-format on */
|
||||||
|
printf("%s\n", (uint8_t *)str);
|
||||||
|
printf(RTT_CTRL_RESET);
|
||||||
|
}
|
||||||
81
LVGL.Simulator/lvgl_mydemo/lib/drv_log.h
Normal file
81
LVGL.Simulator/lvgl_mydemo/lib/drv_log.h
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/************************************************************************
|
||||||
|
* FilePath : drv_log.h
|
||||||
|
* Author : GX.Duan
|
||||||
|
* Date : 2022-09-21 22:22:43
|
||||||
|
* LastEditTime : 2022-10-01 22:23:17
|
||||||
|
* LastEditors : ShallowGreen123 2608653986@qq.com
|
||||||
|
* Copyright (c): 2022 by GX.Duan, All Rights Reserved.
|
||||||
|
* Github : https://github.com/ShallowGreen123/lvgl_mydemo
|
||||||
|
************************************************************************/
|
||||||
|
#ifndef DRV_LOG_H
|
||||||
|
#define DRV_LOG_H
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* INCLUDES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* DEFINES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#ifdef __DRV_LOG_C__
|
||||||
|
# define DEF_EXTERN
|
||||||
|
#else
|
||||||
|
# define DEF_EXTERN extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* MACROS
|
||||||
|
* *******************************************************************************/
|
||||||
|
#define RTT_CTRL_RESET "\x1B[0m" // Reset to default colors
|
||||||
|
#define RTT_CTRL_CLEAR "\x1B[2J" // Clear screen, reposition cursor to top left
|
||||||
|
|
||||||
|
#define RTT_CTRL_TEXT_BLACK "\x1B[2;30m"
|
||||||
|
#define RTT_CTRL_TEXT_RED "\x1B[2;31m"
|
||||||
|
#define RTT_CTRL_TEXT_GREEN "\x1B[2;32m"
|
||||||
|
#define RTT_CTRL_TEXT_YELLOW "\x1B[2;33m"
|
||||||
|
#define RTT_CTRL_TEXT_BLUE "\x1B[2;34m"
|
||||||
|
#define RTT_CTRL_TEXT_MAGENTA "\x1B[2;35m"
|
||||||
|
#define RTT_CTRL_TEXT_CYAN "\x1B[2;36m"
|
||||||
|
#define RTT_CTRL_TEXT_WHITE "\x1B[2;37m"
|
||||||
|
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_BLACK "\x1B[1;30m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_RED "\x1B[1;31m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_GREEN "\x1B[1;32m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_YELLOW "\x1B[1;33m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_BLUE "\x1B[1;34m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_MAGENTA "\x1B[1;35m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_CYAN "\x1B[1;36m"
|
||||||
|
#define RTT_CTRL_TEXT_BRIGHT_WHITE "\x1B[1;37m"
|
||||||
|
|
||||||
|
#define RTT_CTRL_BG_BLACK "\x1B[24;40m"
|
||||||
|
#define RTT_CTRL_BG_RED "\x1B[24;41m"
|
||||||
|
#define RTT_CTRL_BG_GREEN "\x1B[24;42m"
|
||||||
|
#define RTT_CTRL_BG_YELLOW "\x1B[24;43m"
|
||||||
|
#define RTT_CTRL_BG_BLUE "\x1B[24;44m"
|
||||||
|
#define RTT_CTRL_BG_MAGENTA "\x1B[24;45m"
|
||||||
|
#define RTT_CTRL_BG_CYAN "\x1B[24;46m"
|
||||||
|
#define RTT_CTRL_BG_WHITE "\x1B[24;47m"
|
||||||
|
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_BLACK "\x1B[4;40m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_RED "\x1B[4;41m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_GREEN "\x1B[4;42m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_YELLOW "\x1B[4;43m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_BLUE "\x1B[4;44m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_MAGENTA "\x1B[4;45m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_CYAN "\x1B[4;46m"
|
||||||
|
#define RTT_CTRL_BG_BRIGHT_WHITE "\x1B[4;47m"
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* TYPEDEFS
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* GLOBAL PROTOTYPES
|
||||||
|
* *******************************************************************************/
|
||||||
|
DEF_EXTERN void Drv_LogPrintf(void *str);
|
||||||
|
DEF_EXTERN void Drv_LogColorPrintf(void *str, void *prefix);
|
||||||
|
|
||||||
|
#endif /* DRV_LOG_H */
|
||||||
464
LVGL.Simulator/lvgl_mydemo/lib/lib_log.c
Normal file
464
LVGL.Simulator/lvgl_mydemo/lib/lib_log.c
Normal file
@@ -0,0 +1,464 @@
|
|||||||
|
/************************************************************************
|
||||||
|
* FilePath : log.c
|
||||||
|
* Author : GX.Duan
|
||||||
|
* Date : 2022-09-18 20:31:59
|
||||||
|
* LastEditTime : 2022-09-18 20:33:48
|
||||||
|
* LastEditors : ShallowGreen123 2608653986@qq.com
|
||||||
|
* Copyright (c): 2022 by GX.Duan, All Rights Reserved.
|
||||||
|
* Github : https://github.com/ShallowGreen123/lvgl_mydemo
|
||||||
|
************************************************************************/
|
||||||
|
#define DEF_LIB_TRACE_MODULE
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* INCLUDES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#include "lib_log.h"
|
||||||
|
#include "drv_log.h"
|
||||||
|
#include "../../lvgl/lvgl.h"
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* DEFINES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#define DEF_LIB_TRACE_CIRCULAR_Q_REM_SIZE(q) (q->QBufSize - q->UsedSize)
|
||||||
|
|
||||||
|
#define DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, pos) ((0xFF & q->QBuf[pos]) | ((0xFF & q->QBuf[pos + 1]) << 8))
|
||||||
|
|
||||||
|
#define DEF_LIB_TRACE_MSG_Q_SIZE 4096
|
||||||
|
#define DEF_LIB_TRACE_MAX_WRITER_NBR 5
|
||||||
|
|
||||||
|
// #define DEF_LIB_TRACE_TIME_HANDLE &hlptim5
|
||||||
|
// #define DEF_LIB_TRACE_TIME_PERIOD 65535U
|
||||||
|
// #define DEF_LIB_TRACE_TIME_MS(x) (((x)*25000) / 128)
|
||||||
|
// #define DEF_LIB_TRACE_MAX_TIMEOUT_MS 335
|
||||||
|
// #define DEF_LIB_TRACE_USED_OS false
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* MACROS
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* TYPEDEFS
|
||||||
|
* *******************************************************************************/
|
||||||
|
typedef struct lib_log_circular_q_handle_t {
|
||||||
|
uint8_t *QBuf;
|
||||||
|
uint32_t QBufSize;
|
||||||
|
uint32_t FirstElement;
|
||||||
|
uint32_t LastElement;
|
||||||
|
uint32_t ElementCnt;
|
||||||
|
uint32_t UsedSize;
|
||||||
|
} LIB_TRACE_CIRCULAR_Q_HANDLE_T;
|
||||||
|
|
||||||
|
typedef struct lib_log_writer_handle_t {
|
||||||
|
uint8_t *LastLogElement;
|
||||||
|
uint32_t LastSeqNbr;
|
||||||
|
Lib_LogWr_Fn Wr;
|
||||||
|
bool PerifRdy;
|
||||||
|
} LIB_TRACE_WRITER_HANDLE_T;
|
||||||
|
|
||||||
|
typedef struct lib_log_handle_t {
|
||||||
|
bool InitDone;
|
||||||
|
uint32_t RdSeqNbr;
|
||||||
|
uint32_t WrSeqNbr;
|
||||||
|
LIB_TRACE_CIRCULAR_Q_HANDLE_T Q;
|
||||||
|
uint8_t WorkBuf[DEF_LIB_TRACE_MAX_MSG_SIZE];
|
||||||
|
LIB_TRACE_WRITER_HANDLE_T WriterArray[DEF_LIB_TRACE_MAX_WRITER_NBR];
|
||||||
|
} LIB_TRACE_HANDLE_T;
|
||||||
|
|
||||||
|
//
|
||||||
|
static uint8_t Lib_LogQBuf[DEF_LIB_TRACE_MSG_Q_SIZE];
|
||||||
|
static uint32_t Lib_LogSeqNbr = 0;
|
||||||
|
static LIB_TRACE_HANDLE_T Lib_LogHdl;
|
||||||
|
static volatile bool Lib_LogProcReq = false;
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* STATIC FUNCTION
|
||||||
|
* *******************************************************************************/
|
||||||
|
static int32_t Lib_LogCircularQInit(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *q_buf, uint32_t q_buf_size);
|
||||||
|
|
||||||
|
static bool Lib_LogCircularQChkSpace(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t need_size);
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPush(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *element, uint16_t element_size);
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPop(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t *element_size);
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPeek(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t *element_size);
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPeekAfterElement(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *element, uint16_t *element_size);
|
||||||
|
|
||||||
|
static int32_t Lib_LogCircularQClear(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q);
|
||||||
|
|
||||||
|
static uint32_t Lib_LogCircularQGetElementNbr(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q);
|
||||||
|
|
||||||
|
static int32_t Lib_LogCircularQInit(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *q_buf, uint32_t q_buf_size)
|
||||||
|
{
|
||||||
|
q->QBuf = q_buf;
|
||||||
|
q->QBufSize = q_buf_size;
|
||||||
|
q->FirstElement = 0;
|
||||||
|
q->LastElement = 0;
|
||||||
|
q->ElementCnt = 0;
|
||||||
|
q->UsedSize = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool Lib_LogCircularQChkSpace(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t need_size)
|
||||||
|
{
|
||||||
|
uint16_t sto_size = need_size + sizeof(uint16_t);
|
||||||
|
uint32_t last_element_sto_size = 0;
|
||||||
|
uint32_t buf_pos = 0;
|
||||||
|
|
||||||
|
if (DEF_LIB_TRACE_CIRCULAR_Q_REM_SIZE(q) < sto_size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q->ElementCnt > 0) {
|
||||||
|
last_element_sto_size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, q->LastElement) + sizeof(uint16_t);
|
||||||
|
buf_pos = q->LastElement + last_element_sto_size;
|
||||||
|
if (q->LastElement >= q->FirstElement) {
|
||||||
|
if ((q->QBufSize - buf_pos < sto_size) && (q->FirstElement < sto_size)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} else if (q->FirstElement - buf_pos < sto_size) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPush(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *element, uint16_t element_size)
|
||||||
|
{
|
||||||
|
uint16_t sto_size = element_size + sizeof(uint16_t);
|
||||||
|
uint32_t last_element_sto_size = 0;
|
||||||
|
uint32_t buf_pos = 0;
|
||||||
|
|
||||||
|
if (element == NULL || element_size == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DEF_LIB_TRACE_CIRCULAR_Q_REM_SIZE(q) < sto_size) {
|
||||||
|
// No enough space to store this element
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q->ElementCnt > 0) {
|
||||||
|
last_element_sto_size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, q->LastElement) + sizeof(uint16_t);
|
||||||
|
buf_pos = q->LastElement + last_element_sto_size;
|
||||||
|
if (q->LastElement >= q->FirstElement) {
|
||||||
|
if ((q->QBufSize - buf_pos < sto_size) && (q->FirstElement < sto_size)) {
|
||||||
|
// No enough space to store this element
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (q->QBufSize - buf_pos < sto_size) {
|
||||||
|
// Mark eof as unused
|
||||||
|
q->QBuf[buf_pos] = 0xFF;
|
||||||
|
q->QBuf[buf_pos + 1] = 0xFF;
|
||||||
|
buf_pos = 0;
|
||||||
|
}
|
||||||
|
} else if (q->FirstElement - buf_pos < sto_size) {
|
||||||
|
// No enough space to store this element
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
q->LastElement = buf_pos;
|
||||||
|
|
||||||
|
// Store size
|
||||||
|
q->QBuf[buf_pos++] = 0xFF & element_size;
|
||||||
|
q->QBuf[buf_pos++] = (0xFF00 & element_size) >> 8;
|
||||||
|
|
||||||
|
// Store data
|
||||||
|
memcpy((void *)&q->QBuf[buf_pos], element, element_size);
|
||||||
|
|
||||||
|
q->UsedSize += sto_size;
|
||||||
|
q->ElementCnt++;
|
||||||
|
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPop(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t *element_size)
|
||||||
|
{
|
||||||
|
uint8_t *data;
|
||||||
|
uint16_t sto_size;
|
||||||
|
|
||||||
|
if (q->ElementCnt == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*element_size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, q->FirstElement);
|
||||||
|
sto_size = *element_size + sizeof(uint16_t);
|
||||||
|
data = &q->QBuf[q->FirstElement + sizeof(uint16_t)];
|
||||||
|
q->FirstElement += sto_size;
|
||||||
|
if (DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, q->FirstElement) == 0xFFFF) {
|
||||||
|
// Eof mark
|
||||||
|
q->FirstElement = 0;
|
||||||
|
}
|
||||||
|
q->UsedSize -= sto_size;
|
||||||
|
q->ElementCnt--;
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPeek(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint16_t *element_size)
|
||||||
|
{
|
||||||
|
if (q->ElementCnt == 0) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*element_size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, q->FirstElement);
|
||||||
|
return &q->QBuf[q->FirstElement + sizeof(uint16_t)];
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8_t *Lib_LogCircularQPeekAfterElement(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q, uint8_t *element, uint16_t *element_size)
|
||||||
|
{
|
||||||
|
uint16_t size;
|
||||||
|
uint32_t offset = element - q->QBuf - 2;
|
||||||
|
|
||||||
|
if ((q->ElementCnt == 0) || (q->LastElement == offset)) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, offset);
|
||||||
|
offset += (size + sizeof(uint16_t));
|
||||||
|
size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, offset);
|
||||||
|
if (size == 0xFFFF) {
|
||||||
|
offset = 0;
|
||||||
|
size = DEF_LIB_TRACE_CIRCULAR_Q_ELEMENT_SIZE(q, offset);
|
||||||
|
}
|
||||||
|
*element_size = size;
|
||||||
|
return &q->QBuf[offset + sizeof(uint16_t)];
|
||||||
|
}
|
||||||
|
|
||||||
|
static int32_t Lib_LogCircularQClear(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q)
|
||||||
|
{
|
||||||
|
q->FirstElement = 0;
|
||||||
|
q->LastElement = 0;
|
||||||
|
q->ElementCnt = 0;
|
||||||
|
q->UsedSize = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t Lib_LogCircularQGetElementNbr(LIB_TRACE_CIRCULAR_Q_HANDLE_T *q)
|
||||||
|
{
|
||||||
|
return q->ElementCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void Lib_LogIntLock(void)
|
||||||
|
{
|
||||||
|
// IntLockFun();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void Lib_LogIntUnlock(void)
|
||||||
|
{
|
||||||
|
// UnlockFun();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline uint32_t Lib_LogGetTs(void)
|
||||||
|
{
|
||||||
|
// return GetTick();
|
||||||
|
return lv_tick_get();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void Lib_LogStartProcReq(void)
|
||||||
|
{
|
||||||
|
Lib_LogProcReq = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* GLOBAL FUNCTION
|
||||||
|
* *******************************************************************************/
|
||||||
|
void Lib_LogInit(void)
|
||||||
|
{
|
||||||
|
memset((void *)&Lib_LogHdl, 0, sizeof(Lib_LogHdl));
|
||||||
|
Lib_LogCircularQInit(&Lib_LogHdl.Q, Lib_LogQBuf, sizeof(Lib_LogQBuf));
|
||||||
|
Lib_LogHdl.InitDone = true;
|
||||||
|
|
||||||
|
#if !(DEF_LIB_TRACE_FORCE_PRINTF)
|
||||||
|
Drv_LogSetupPrintf();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
LIB_TRACE_WRITER_HDLR_T Lib_LogRegistWriter(Lib_LogWr_Fn wr_fnct)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
Lib_LogIntLock();
|
||||||
|
for (i = 0; i < DEF_LIB_TRACE_MAX_WRITER_NBR; i++) {
|
||||||
|
if (Lib_LogHdl.WriterArray[i].Wr == NULL) {
|
||||||
|
Lib_LogHdl.WriterArray[i].Wr = wr_fnct;
|
||||||
|
Lib_LogHdl.WriterArray[i].LastSeqNbr = Lib_LogHdl.RdSeqNbr;
|
||||||
|
Lib_LogHdl.WriterArray[i].PerifRdy = true;
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
return (LIB_TRACE_WRITER_HDLR_T)(&Lib_LogHdl.WriterArray[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Lib_LogUnregistWriter(LIB_TRACE_WRITER_HDLR_T writer_hdl)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
Lib_LogIntLock();
|
||||||
|
for (i = 0; i < DEF_LIB_TRACE_MAX_WRITER_NBR; i++) {
|
||||||
|
if (&Lib_LogHdl.WriterArray[i] == writer_hdl) {
|
||||||
|
Lib_LogHdl.WriterArray[i].Wr = NULL;
|
||||||
|
Lib_LogHdl.WriterArray[i].LastSeqNbr = 0;
|
||||||
|
Lib_LogHdl.WriterArray[i].PerifRdy = false;
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lib_LogWrDone(LIB_TRACE_WRITER_HDLR_T writer_hdl)
|
||||||
|
{
|
||||||
|
if (writer_hdl == NULL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Lib_LogIntLock();
|
||||||
|
((LIB_TRACE_WRITER_HANDLE_T *)writer_hdl)->PerifRdy = true;
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
Lib_LogStartProcReq();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lib_LogPrintf(uint8_t lv, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
LIB_TRACE_ITEM_HANDLE_T *log_element;
|
||||||
|
LIB_TRACE_CIRCULAR_Q_HANDLE_T *queue = &Lib_LogHdl.Q;
|
||||||
|
char *prefix;
|
||||||
|
va_list args;
|
||||||
|
int32_t ret;
|
||||||
|
uint32_t ts;
|
||||||
|
uint16_t element_size;
|
||||||
|
uint16_t tmp_size;
|
||||||
|
|
||||||
|
if (!Lib_LogHdl.InitDone) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (lv) {
|
||||||
|
case TRACE_LV_V:
|
||||||
|
prefix = "[V]";
|
||||||
|
break;
|
||||||
|
case TRACE_LV_DBG:
|
||||||
|
prefix = "[D]";
|
||||||
|
break;
|
||||||
|
case TRACE_LV_INFO:
|
||||||
|
prefix = "[I]";
|
||||||
|
break;
|
||||||
|
case TRACE_LV_WARN:
|
||||||
|
prefix = "[W]";
|
||||||
|
break;
|
||||||
|
case TRACE_LV_ERR:
|
||||||
|
prefix = "[E]";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
prefix = "[X]";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Lib_LogIntLock();
|
||||||
|
log_element = (LIB_TRACE_ITEM_HANDLE_T *)Lib_LogHdl.WorkBuf;
|
||||||
|
va_start(args, fmt);
|
||||||
|
ts = Lib_LogGetTs();
|
||||||
|
ret = snprintf((char *)log_element->Buf, DEF_LIB_TRACE_MAX_MSG_SIZE, "(%u) %s ", ts, prefix);
|
||||||
|
ret += vsnprintf((char *)log_element->Buf + ret, DEF_LIB_TRACE_MAX_MSG_SIZE - ret, fmt, args);
|
||||||
|
ret++; /* for terminating null character */
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (ret > 0) {
|
||||||
|
log_element->Lv = lv;
|
||||||
|
log_element->Len = ret;
|
||||||
|
log_element->Ts = ts;
|
||||||
|
log_element->SeqNbr = Lib_LogSeqNbr++;
|
||||||
|
element_size = ret + sizeof(LIB_TRACE_ITEM_HANDLE_T);
|
||||||
|
while (!Lib_LogCircularQChkSpace(queue, element_size)) {
|
||||||
|
Lib_LogCircularQPop(queue, &tmp_size);
|
||||||
|
Lib_LogHdl.RdSeqNbr++;
|
||||||
|
}
|
||||||
|
Lib_LogCircularQPush(queue, (uint8_t *)log_element, element_size);
|
||||||
|
Lib_LogHdl.WrSeqNbr = log_element->SeqNbr;
|
||||||
|
Lib_LogStartProcReq();
|
||||||
|
}
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
|
||||||
|
#if DEF_LIB_TRACE_FORCE_PRINTF
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if DEF_LOG_COLOR_PRINT_EN
|
||||||
|
Drv_LogColorPrintf(log_element->Buf, prefix);
|
||||||
|
#else
|
||||||
|
Drv_LogPrintf(log_element->Buf);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lib_LogHexArray(uint8_t *data, uint32_t len)
|
||||||
|
{
|
||||||
|
uint8_t buf[DEF_LIB_TRACE_HEX_ARRAY_LINE_LEN * DEF_LIB_TRACE_HEX_ARRAY_ITEM_LEN + 1];
|
||||||
|
uint8_t remain = len;
|
||||||
|
uint8_t *p = data;
|
||||||
|
uint8_t dump_len;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
while (remain > 0) {
|
||||||
|
if (remain > DEF_LIB_TRACE_HEX_ARRAY_LINE_LEN) {
|
||||||
|
dump_len = DEF_LIB_TRACE_HEX_ARRAY_LINE_LEN;
|
||||||
|
} else {
|
||||||
|
dump_len = remain;
|
||||||
|
}
|
||||||
|
for (i = 0; i < dump_len; i++) {
|
||||||
|
snprintf((char *)buf + i * DEF_LIB_TRACE_HEX_ARRAY_ITEM_LEN, sizeof(buf) - i * DEF_LIB_TRACE_HEX_ARRAY_ITEM_LEN, "%02X, ", *p++);
|
||||||
|
}
|
||||||
|
TRACE_I("%s\n", buf);
|
||||||
|
remain -= dump_len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Lib_LogProc(void)
|
||||||
|
{
|
||||||
|
LIB_TRACE_WRITER_HANDLE_T *writer;
|
||||||
|
uint8_t *element;
|
||||||
|
uint16_t element_size;
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
if (!Lib_LogProcReq) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Lib_LogProcReq = false;
|
||||||
|
for (i = 0; i < DEF_LIB_TRACE_MAX_WRITER_NBR; i++) {
|
||||||
|
Lib_LogIntLock();
|
||||||
|
writer = &Lib_LogHdl.WriterArray[i];
|
||||||
|
if ((writer->Wr == NULL) || (!writer->PerifRdy)) {
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ((!writer->LastLogElement) || (writer->LastSeqNbr < Lib_LogHdl.RdSeqNbr)) {
|
||||||
|
writer->LastSeqNbr = Lib_LogHdl.RdSeqNbr;
|
||||||
|
element = Lib_LogCircularQPeek(&Lib_LogHdl.Q, &element_size);
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
if (element) {
|
||||||
|
writer->PerifRdy = false;
|
||||||
|
if (writer->Wr((LIB_TRACE_ITEM_HANDLE_T *)element)) {
|
||||||
|
writer->LastLogElement = element;
|
||||||
|
} else {
|
||||||
|
writer->PerifRdy = true;
|
||||||
|
}
|
||||||
|
Lib_LogProcReq = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
element = Lib_LogCircularQPeekAfterElement(&Lib_LogHdl.Q, writer->LastLogElement, &element_size);
|
||||||
|
Lib_LogIntUnlock();
|
||||||
|
if (element) {
|
||||||
|
writer->PerifRdy = false;
|
||||||
|
if (writer->Wr((LIB_TRACE_ITEM_HANDLE_T *)element)) {
|
||||||
|
writer->LastSeqNbr++;
|
||||||
|
writer->LastLogElement = element;
|
||||||
|
} else {
|
||||||
|
writer->PerifRdy = true;
|
||||||
|
}
|
||||||
|
Lib_LogProcReq = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
129
LVGL.Simulator/lvgl_mydemo/lib/lib_log.h
Normal file
129
LVGL.Simulator/lvgl_mydemo/lib/lib_log.h
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
/************************************************************************
|
||||||
|
* FilePath : log.h
|
||||||
|
* Author : GX.Duan
|
||||||
|
* Date : 2022-09-18 17:49:09
|
||||||
|
* LastEditTime : 2022-09-21 21:55:55
|
||||||
|
* LastEditors : ShallowGreen123 2608653986@qq.com
|
||||||
|
* Copyright (c): 2022 by GX.Duan, All Rights Reserved.
|
||||||
|
* Github : https://github.com/ShallowGreen123/lvgl_mydemo
|
||||||
|
************************************************************************/
|
||||||
|
#ifndef __LIB_TRACE_H__
|
||||||
|
#define __LIB_TRACE_H__
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* INCLUDES
|
||||||
|
* *******************************************************************************/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* DEFINES
|
||||||
|
* *******************************************************************************/
|
||||||
|
|
||||||
|
#ifdef DEF_LIB_TRACE_MODULE
|
||||||
|
# define DEF_LIB_TRACE_EXT
|
||||||
|
#else
|
||||||
|
# define DEF_LIB_TRACE_EXT extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(_WIN32)
|
||||||
|
# ifndef __packed
|
||||||
|
# define __packed
|
||||||
|
# endif
|
||||||
|
# ifndef __aligned
|
||||||
|
# define __aligned(x) __declspec(align(x))
|
||||||
|
# endif
|
||||||
|
#else /* _WIN32 */
|
||||||
|
# include <sys/cdefs.h>
|
||||||
|
#endif /* _WIN32 */
|
||||||
|
/*********************************************************************************
|
||||||
|
* MACROS
|
||||||
|
* *******************************************************************************/
|
||||||
|
#define TRACE_LV_NONE 0
|
||||||
|
#define TRACE_LV_ERR 1
|
||||||
|
#define TRACE_LV_WARN 2
|
||||||
|
#define TRACE_LV_INFO 3
|
||||||
|
#define TRACE_LV_DBG 4
|
||||||
|
#define TRACE_LV_V 5
|
||||||
|
|
||||||
|
#define DEF_DBG_LV TRACE_LV_DBG
|
||||||
|
|
||||||
|
#define DEF_LIB_TRACE_FORCE_PRINTF 1
|
||||||
|
#define DEF_LOG_COLOR_PRINT_EN 1
|
||||||
|
|
||||||
|
#define DEF_LIB_TRACE_MAX_MSG_SIZE 256
|
||||||
|
|
||||||
|
#define DEF_LIB_TRACE_HEX_ARRAY_LINE_LEN 32
|
||||||
|
#define DEF_LIB_TRACE_HEX_ARRAY_ITEM_LEN 4
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_V)
|
||||||
|
# define TRACE_V(FMT, ...) Lib_LogPrintf(TRACE_LV_V, FMT, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define TRACE_V(FMT, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_DBG)
|
||||||
|
# define TRACE_D(FMT, ...) Lib_LogPrintf(TRACE_LV_DBG, FMT, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define TRACE_D(FMT, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_INFO)
|
||||||
|
# define TRACE_I(FMT, ...) Lib_LogPrintf(TRACE_LV_INFO, FMT, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define TRACE_I(FMT, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_WARN)
|
||||||
|
# define TRACE_W(FMT, ...) Lib_LogPrintf(TRACE_LV_WARN, FMT, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define TRACE_W(FMT, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_ERR)
|
||||||
|
# define TRACE_E(FMT, ...) Lib_LogPrintf(TRACE_LV_ERR, FMT, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
# define TRACE_E(FMT, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (DEF_DBG_LV >= TRACE_LV_INFO)
|
||||||
|
# define TRACE_HEX_ARRAY(data, data_len) Lib_LogHexArray((uint8_t *)(data), (uint32_t)(data_len))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* TYPEDEFS
|
||||||
|
* *******************************************************************************/
|
||||||
|
typedef struct lib_log_item_handle_t {
|
||||||
|
uint8_t Lv;
|
||||||
|
uint16_t Len;
|
||||||
|
uint32_t Ts;
|
||||||
|
uint32_t SeqNbr;
|
||||||
|
uint8_t Buf[0];
|
||||||
|
} __packed LIB_TRACE_ITEM_HANDLE_T;
|
||||||
|
|
||||||
|
typedef bool (*Lib_LogWr_Fn)(LIB_TRACE_ITEM_HANDLE_T *item);
|
||||||
|
|
||||||
|
typedef void *LIB_TRACE_WRITER_HDLR_T;
|
||||||
|
|
||||||
|
/*********************************************************************************
|
||||||
|
* GLOBAL PROTOTYPES
|
||||||
|
* *******************************************************************************/
|
||||||
|
DEF_LIB_TRACE_EXT void Lib_LogInit(void);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT LIB_TRACE_WRITER_HDLR_T Lib_LogRegistWriter(Lib_LogWr_Fn wr_fnct);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT bool Lib_LogUnregistWriter(LIB_TRACE_WRITER_HDLR_T writer_hdl);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT void Lib_LogWrDone(LIB_TRACE_WRITER_HDLR_T writer_hdl);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT void Lib_LogPrintf(uint8_t lv, const char *fmt, ...);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT void Lib_LogHexArray(uint8_t *data, uint32_t len);
|
||||||
|
|
||||||
|
DEF_LIB_TRACE_EXT void Lib_LogProc(void);
|
||||||
|
|
||||||
|
#endif /* __LIB_TRACE_H__ */
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
* *******************************************************************************/
|
* *******************************************************************************/
|
||||||
#include "../lvgl/lvgl.h"
|
#include "../lvgl/lvgl.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "log/lib_log.h"
|
#include "lib/lib_log.h"
|
||||||
#include "data/dataModel.h"
|
#include "data/dataModel.h"
|
||||||
#include "data/gui_scr_mgr.h"
|
#include "data/gui_scr_mgr.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user