12#include "core_riscv.h"
16#define EVENT_LOG_BAUD 115200U
17#define EVENT_LOG_LINE_SIZE 96U
18#define EVENT_LOG_RING_SIZE 48U
83 while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {
85 USART_SendData(USART1, (uint16_t)(uint8_t)ch);
114 GPIO_InitTypeDef gpio = {0};
115 USART_InitTypeDef usart = {0};
117 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE);
118 GPIO_PinRemapConfig(GPIO_PartialRemap2_USART1, ENABLE);
120 gpio.GPIO_Pin = GPIO_Pin_6;
121 gpio.GPIO_Speed = GPIO_Speed_30MHz;
122 gpio.GPIO_Mode = GPIO_Mode_AF_PP;
123 GPIO_Init(GPIOD, &gpio);
125 USART_DeInit(USART1);
127 usart.USART_WordLength = USART_WordLength_8b;
128 usart.USART_StopBits = USART_StopBits_1;
129 usart.USART_Parity = USART_Parity_No;
130 usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
131 usart.USART_Mode = USART_Mode_Tx;
132 USART_Init(USART1, &usart);
133 USART_Cmd(USART1, ENABLE);
213 default:
return "UNKNOWN";
272 "[%lu] I2C CMD 0x%02X param=0x%02X\r\n",
273 (
unsigned long)
s_seq, rec->
a, rec->
b);
276 "[%lu] I2C CMD 0x%02X\r\n",
277 (
unsigned long)
s_seq, rec->
a);
283 "[%lu] I2C READ arm cmd=0x%02X\r\n",
284 (
unsigned long)
s_seq, rec->
a);
289 "[%lu] ERROR %s (0x%02X)\r\n",
296 "[%lu] NVM cache_write %s\r\n",
298 }
else if (rec->
a == 2U) {
300 "[%lu] NVM commit %s\r\n",
302 }
else if (rec->
a == 3U) {
304 "[%lu] NVM factory_reset cache %s\r\n",
308 "[%lu] NVM event tag=%u st=%u\r\n",
309 (
unsigned long)
s_seq, rec->
a, rec->
b);
316 "[%lu] SYS reboot requested\r\n", (
unsigned long)
s_seq);
317 }
else if (rec->
a == 2U) {
319 "[%lu] SYS IWDG armed (~2 s)\r\n", (
unsigned long)
s_seq);
322 "[%lu] SYS tag=%u\r\n", (
unsigned long)
s_seq, rec->
a);
328 "[%lu] EVT id=%u a=%u b=%u c=%u\r\n",
329 (
unsigned long)
s_seq, rec->
id, rec->
a, rec->
b, rec->
c);
399 "\r\n=== LCM event log USART1 PD6 %u 8N1 ===\r\n"
400 "MCU CH32V003F4P6 LCM_ID=0x%02X\r\n",
417 "[%lu] BOOT LCM addr=0x%02X groups=%02X %02X %02X %02X relay=0x%02X\r\n",
418 (
unsigned long)(++
s_seq),
420 (
unsigned)group_mask[0], (
unsigned)group_mask[1],
421 (
unsigned)group_mask[2], (
unsigned)group_mask[3],
422 (
unsigned)relay_state);
457void EventLog_LcmConfig(uint8_t i2c_addr,
const uint8_t *group_mask, uint8_t relay_state)
465 (void)cmd; (void)param; (void)has_param;
469void EventLog_PushNvm(uint8_t tag, uint8_t status) { (void)tag; (void)status; }
#define EVENT_LOG_RING_SIZE
#define EVENT_LOG_LINE_SIZE
void EventLog_PushI2cReadArm(uint8_t cmd)
static void EventLog_UartWrite(const char *s)
void EventLog_Process(void)
void EventLog_PushNvm(uint8_t tag, uint8_t status)
void EventLog_PushSystem(uint8_t tag)
static const char * EventLog_UserDataName(uint8_t st)
static const char * EventLog_LcmErrName(uint8_t code)
void EventLog_UserDataInit(UserData_Status st)
static EventLog_Rec s_ring[EVENT_LOG_RING_SIZE]
static char s_line[EVENT_LOG_LINE_SIZE]
void EventLog_BootBanner(void)
void EventLog_LcmConfig(uint8_t i2c_addr, const uint8_t group_mask[4], uint8_t relay_state)
static void EventLog_FormatRecord(const EventLog_Rec *rec)
static void EventLog_PushRaw(uint8_t id, uint8_t a, uint8_t b, uint8_t c)
void EventLog_PushI2cCmd(uint8_t cmd, uint8_t param, uint8_t has_param)
void EventLog_Printf(const char *fmt,...)
static volatile uint8_t s_ring_head
static volatile uint8_t s_ring_tail
void EventLog_PushLcmError(uint8_t lcm_err_code)
static void EventLog_UartInit(void)
static void EventLog_UartPutChar(char ch)
#define LCM_ERR_USER_DATA_RANGE
#define LCM_ERR_BAD_PARAM
#define LCM_ERR_GPIO_INIT
#define LCM_ERR_USER_DATA_BUSY
#define LCM_ERR_GPIO_CLEAR_ALL
#define LCM_ERR_USER_DATA_PARAM
#define LCM_ERR_UNKNOWN_CMD
#define LCM_ERR_USER_DATA_COMMIT
#define LCM_ERR_USER_DATA_FLASH
#define LCM_ERR_GPIO_CLEAR
#define LCM_ERR_GPIO_SET_ALL