You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
5.5 KiB
246 lines
5.5 KiB
2 years ago
|
/*
|
||
|
* This file is part of the EasyLogger Library.
|
||
|
*
|
||
|
* Created on: 2015-04-28
|
||
|
* Modified By Pophu 2023-08-22
|
||
|
*/
|
||
|
|
||
|
#if 1
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <elog.h>
|
||
|
#include "main.h"
|
||
|
#include "cmsis_os2.h"
|
||
|
#include "FreeRTOSConfig.h"
|
||
|
#include "usart.h"
|
||
|
|
||
|
// extern UART_HandleTypeDef huart1;
|
||
|
extern void elog_entry(void *para);
|
||
|
extern void Init_Logger();
|
||
|
|
||
|
#define pLogMenuHuart &huart2
|
||
|
|
||
|
/* **************** 信号量 SemaPhore **************** */
|
||
|
osSemaphoreId_t elog_lockHandle;
|
||
|
const osSemaphoreAttr_t elog_lock_attributes = {
|
||
|
.name = "elog_lock"};
|
||
|
|
||
|
osSemaphoreId_t elog_dma_lockHandle;
|
||
|
const osSemaphoreAttr_t elog_dma_lock_attributes = {
|
||
|
.name = "elog_dma_lock"};
|
||
|
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
osSemaphoreId_t elog_asyncHandle;
|
||
|
const osSemaphoreAttr_t elog_async_attributes = {
|
||
|
.name = "elog_async"};
|
||
|
#endif
|
||
|
|
||
|
/* **************** Easylogger 任务 **************** */
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
osThreadId_t elogHandle;
|
||
|
const osThreadAttr_t elog_attributes = {
|
||
|
.name = "elog",
|
||
|
.stack_size = 256*4,
|
||
|
.priority = (osPriority_t)osPriorityLow,
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
// extern osSemaphoreId_t elog_lockHandle;
|
||
|
// extern osSemaphoreId_t elog_asyncHandle;
|
||
|
// extern osSemaphoreId_t elog_dma_lockHandle;
|
||
|
// extern osSemaphoreId_t elog_menuHandle;
|
||
|
|
||
|
volatile uint16_t asyncflag = 0;
|
||
|
|
||
|
/**
|
||
|
* EasyLogger port initialize
|
||
|
*
|
||
|
* @return result
|
||
|
*/
|
||
|
ElogErrCode elog_port_init(void)
|
||
|
{
|
||
|
ElogErrCode result = ELOG_NO_ERR;
|
||
|
|
||
|
// osSemaphoreRelease(elog_lockHandle);
|
||
|
// osSemaphoreRelease(elog_dma_lockHandle);
|
||
|
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* EasyLogger port deinitialize
|
||
|
*
|
||
|
*/
|
||
|
void elog_port_deinit(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* output log port interface
|
||
|
*
|
||
|
* @param log output of log
|
||
|
* @param size log size
|
||
|
*/
|
||
|
void elog_port_output(const char *log, size_t size)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
HAL_UART_Transmit_DMA(pLogMenuHuart, (uint8_t *) log, size);
|
||
|
// HAL_UART_Transmit(&huart1, (uint8_t *) log, size,0xFF);
|
||
|
// printf((uint8_t *)log, size);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* output lock
|
||
|
*/
|
||
|
void elog_port_output_lock(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
osSemaphoreAcquire(elog_lockHandle, osWaitForever);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* output unlock
|
||
|
*/
|
||
|
void elog_port_output_unlock(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
osSemaphoreRelease(elog_lockHandle);
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get current time interface
|
||
|
*
|
||
|
* @return current time
|
||
|
*/
|
||
|
const char *elog_port_get_time(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
static char cur_system_time[16] = "";
|
||
|
snprintf(cur_system_time, 16, "%lu", osKernelGetTickCount());
|
||
|
return cur_system_time;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get current process name interface
|
||
|
*
|
||
|
* @return current process name
|
||
|
*/
|
||
|
const char *elog_port_get_p_info(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* get current thread name interface
|
||
|
*
|
||
|
* @return current thread name
|
||
|
*/
|
||
|
const char *elog_port_get_t_info(void)
|
||
|
{
|
||
|
|
||
|
/* add your code here */
|
||
|
return "";
|
||
|
}
|
||
|
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
void elog_async_output_notice(void)
|
||
|
{
|
||
|
asyncflag++;
|
||
|
osSemaphoreRelease(elog_asyncHandle);
|
||
|
}
|
||
|
|
||
|
/* 借助串口发送完成中断,形成闭环,否则会阻塞 */
|
||
|
void elog_entry(void *para)
|
||
|
{
|
||
|
size_t get_log_size = 0;
|
||
|
static char poll_get_buf[ELOG_LINE_BUF_SIZE - 4];
|
||
|
|
||
|
if (elog_port_init() != ELOG_NO_ERR)
|
||
|
{
|
||
|
goto fail;
|
||
|
}
|
||
|
|
||
|
while (1)
|
||
|
{
|
||
|
|
||
|
if (osOK == osSemaphoreAcquire(elog_asyncHandle, osWaitForever))
|
||
|
{
|
||
|
// printf(" elog_asyncHandle acq ok... \r\n");
|
||
|
while (1)
|
||
|
{
|
||
|
if (osOK == osSemaphoreAcquire(elog_dma_lockHandle, osWaitForever))
|
||
|
{
|
||
|
asyncflag--;
|
||
|
get_log_size = elog_async_get_line_log(poll_get_buf, sizeof(poll_get_buf));
|
||
|
if (get_log_size)
|
||
|
{
|
||
|
elog_port_output(poll_get_buf, get_log_size);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
osSemaphoreRelease(elog_dma_lockHandle);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// osDelay(10);
|
||
|
}
|
||
|
|
||
|
fail:
|
||
|
osThreadExit();
|
||
|
}
|
||
|
|
||
|
#endif
|
||
|
|
||
|
void Init_Logger()
|
||
|
{
|
||
|
elog_lockHandle = osSemaphoreNew(1, 1, &elog_lock_attributes);
|
||
|
osSemaphoreRelease(elog_lockHandle);
|
||
|
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
elog_asyncHandle = osSemaphoreNew(1, 1, &elog_async_attributes);
|
||
|
elog_dma_lockHandle = osSemaphoreNew(1, 1, &elog_dma_lock_attributes);
|
||
|
osSemaphoreRelease(elog_dma_lockHandle);
|
||
|
#endif
|
||
|
|
||
|
elog_init();
|
||
|
// elog_set_filter_lvl(ELOG_LVL_INFO);
|
||
|
elog_set_output_enabled(ENABLE);
|
||
|
#ifdef ELOG_BUF_OUTPUT_ENABLE
|
||
|
elog_buf_enabled(ENABLE);
|
||
|
#endif
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
elog_async_enabled(ENABLE);
|
||
|
#endif
|
||
|
elog_set_text_color_enabled(ENABLE);
|
||
|
elog_output_lock_enabled(ENABLE);
|
||
|
/* set EasyLogger log format */
|
||
|
elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
|
||
|
elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
|
||
|
elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
|
||
|
elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
|
||
|
elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_LVL | ELOG_FMT_TAG | ELOG_FMT_TIME | ELOG_FMT_FUNC | ELOG_FMT_LINE);
|
||
|
/* start EasyLogger */
|
||
|
|
||
|
// elog_set_filter_tag("Modbus");
|
||
|
elog_start();
|
||
|
|
||
|
#ifdef ELOG_ASYNC_OUTPUT_ENABLE
|
||
|
elogHandle = osThreadNew(elog_entry, NULL, &elog_attributes);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif
|