Files
RCU_C1P_Module/MCU_Driver/rw_logging.c

341 lines
14 KiB
C
Raw Normal View History

/*
* rw_logging.c
*
* Created on: Jul 29, 2025
* Author: cc
*/
#include "includes.h"
#include <string.h>
/*<2A><>ȡSRAM<41><4D><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ǰд<C7B0><D0B4><EFBFBD><EFBFBD>ַ*/
__attribute__((section(".non_0_wait"))) uint32_t Get_Log_Current_Address(void)
{
uint32_t Last_addr = 0;
uint8_t temp_d = 0;
temp_d = SRAM_Read_Byte(SRAM_LOG_Start_Address+3);
Last_addr = temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_LOG_Start_Address+2);
Last_addr |= temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_LOG_Start_Address+1);
Last_addr |= temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_LOG_Start_Address);
Last_addr |= temp_d;
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
return Last_addr;
}
/*<2A><><EFBFBD><EFBFBD>SRAM<41><4D><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ǰд<C7B0><D0B4><EFBFBD><EFBFBD>ַ*/
__attribute__((section(".non_0_wait"))) void Set_Log_Current_Address(uint32_t W_addr)
{
uint32_t Last_addr = W_addr;
uint8_t temp = 0;
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
temp = Last_addr & 0xFF;
SRAM_Write_Byte(temp,SRAM_LOG_Start_Address);
temp = (Last_addr >> 8) & 0xFF;
SRAM_Write_Byte(temp,SRAM_LOG_Start_Address+1);
temp = (Last_addr >> 16) & 0xFF;
SRAM_Write_Byte(temp,SRAM_LOG_Start_Address+2);
temp = (Last_addr >> 24) & 0xFF;
SRAM_Write_Byte(temp,SRAM_LOG_Start_Address+3);
}
/*<2A><><EFBFBD><EFBFBD>SRAM<41><4D>TFTP<54><50>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ַ*/
__attribute__((section(".non_0_wait"))) void SRAM_Set_TFTP_READ_LOG_Address(uint32_t r_addr)
{
uint32_t Last_addr = r_addr;
uint8_t temp = 0;
/*<2A>жϵ<D0B6>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD>*/
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
temp = Last_addr & 0xFF;
SRAM_Write_Byte(temp,SRAM_TFTP_LOG_READ_Address);
temp = (Last_addr >> 8) & 0xFF;
SRAM_Write_Byte(temp,SRAM_TFTP_LOG_READ_Address+1);
temp = (Last_addr >> 16) & 0xFF;
SRAM_Write_Byte(temp,SRAM_TFTP_LOG_READ_Address+2);
temp = (Last_addr >> 24) & 0xFF;
SRAM_Write_Byte(temp,SRAM_TFTP_LOG_READ_Address+3);
}
/*<2A><>ȡSRAM<41><4D>TFTP<54><50>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ַ*/
__attribute__((section(".non_0_wait"))) uint32_t SRAM_Get_TFTP_READ_Log_Address(void)
{
uint32_t Last_addr = 0;
uint8_t temp_d = 0;
temp_d = SRAM_Read_Byte(SRAM_TFTP_LOG_READ_Address+3);
Last_addr = temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_TFTP_LOG_READ_Address+2);
Last_addr |= temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_TFTP_LOG_READ_Address+1);
Last_addr |= temp_d;
Last_addr <<= 8;
temp_d = SRAM_Read_Byte(SRAM_TFTP_LOG_READ_Address);
Last_addr |= temp_d;
if((Last_addr < SRAM_LOG_DATA_Address) || (Last_addr > SRAM_LOG_End_Address)) Last_addr = SRAM_LOG_DATA_Address;
return Last_addr;
}
/*******************************************************************************
* Function Name : <EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Description : <EFBFBD><EFBFBD>־ÿһ<EFBFBD><EFBFBD>Сʱ<EFBFBD><EFBFBD>SRAM<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>з<EFBFBD>װ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ֻ<EFBFBD>Ǽ<EFBFBD><EFBFBD>ϰ<EFBFBD>ͷ<EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Log_write_sram(uint8_t data_type,uint8_t *buff,uint16_t len)
{
uint16_t temp_date = 0;
uint32_t Last_add = 0;
uint32_t Log_Hour_Tick = SysTick_1ms - Log_Time_ms; //2021-09-23 Log_Time_ms<6D>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>н<EFBFBD><D0BD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹȫ<D6B9>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>while<6C><65>ͬʱ<CDAC><CAB1>д
Log_Hour_Tick += HEX_Conversion_To_DEC(RTC_Raw_Data.minute)*60000;
Log_Hour_Tick += HEX_Conversion_To_DEC(RTC_Raw_Data.hour)*3600000;
uint8_t temp = 0;
uint16_t data_len = len;
if(data_len >= Log_Data_Len_MAX) data_len = Log_Data_Len_MAX; //<2F>޶<EFBFBD><DEB6><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
uint16_t write_len = S_Log_Data + data_len + 1;
/*<2A><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>־д<D6BE><D0B4><EFBFBD><EFBFBD>ַ*/
Last_add = Get_Log_Current_Address();
//<2F><>ǰ<EFBFBD><C7B0>ַ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>ҿ<EFBFBD><D2BF>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
if((Last_add + write_len) >= SRAM_LOG_End_Address)
{
Dbg_Println(DBG_BIT_SYS_STATUS_bit," SRAM Space is not enough");
Last_add = SRAM_LOG_DATA_Address;
}
/*<2A>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־*/
SRAM_Write_Byte(LOG_Data_Hand,Last_add + S_Log_Hand); //<2F><><EFBFBD><EFBFBD>ͷ
temp = SRAM_Read_Byte(SRAM_Flash_Serial_Number);
SRAM_Write_Byte(temp,Last_add + S_Log_SN); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>
temp++;
SRAM_Write_Byte(temp,SRAM_Flash_Serial_Number); //<2F><><EFBFBD><EFBFBD><EFBFBD>к<EFBFBD>ˢ<EFBFBD>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_Write_Word(write_len,Last_add + S_Log_Len); //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD> 2Byte
SRAM_Write_Byte(0x00,Last_add + S_Log_Check); //У<><D0A3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
temp_date = (HEX_Conversion_To_DEC(RTC_Raw_Data.year) << 10) + (HEX_Conversion_To_DEC(RTC_Raw_Data.month) << 5) + HEX_Conversion_To_DEC(RTC_Raw_Data.day);
temp = (temp_date >> 8) & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Date_H); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>H - <20>꣺4bit <20>£<EFBFBD>4bit
temp = temp_date & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Date_L); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>L - <20>գ<EFBFBD>4bit ʱ<><CAB1>4bit
SRAM_Write_Byte(data_type,Last_add + S_Log_Type); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp = Log_Hour_Tick & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Time8B); //ʱ<><CAB1><EFBFBD><EFBFBD>
temp = (Log_Hour_Tick >> 8) & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Time16B);
temp = (Log_Hour_Tick >> 16) & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Time24B);
temp = (Log_Hour_Tick >> 24) & 0xFF;
SRAM_Write_Byte(temp,Last_add + S_Log_Time32B);
SRAM_DMA_Write_Buff(buff,data_len,Last_add + S_Log_Data); //<2F><><EFBFBD><EFBFBD>
SRAM_Write_Byte(Log_Data_End,Last_add + S_Log_Data + data_len); //<2F><><EFBFBD><EFBFBD>β
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3>*/
temp = Log_CheckSum(Last_add,write_len);
SRAM_Write_Byte(temp,Last_add + S_Log_Check); //У<><D0A3>ֵ
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD>־д<D6BE><D0B4><EFBFBD><EFBFBD>ַ*/
Last_add = Last_add + write_len;
Set_Log_Current_Address(Last_add);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"SRAM LOG Addr : %08X",Last_add);
return 0;
}
/*******************************************************************************
* Function Name : Retain_Flash_Register_Data
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void Retain_Flash_Register_Data(void)
{
uint8_t temp = 0,temp1 = 0;
uint16_t i = 0;
memset(Global_Large_Buff,0,Register_OFFSET_LEN);
Flash_Read(Global_Large_Buff,Register_OFFSET_LEN,FLASH_Register_Start_ADDRESS);
for(i = 0;i<Register_OFFSET_LEN;i++)
{
temp1 = SRAM_Read_Byte(SRAM_Register_Start_ADDRESS+i);
if(temp1 != Global_Large_Buff[i])
{
Global_Large_Buff[i] = temp1;
temp++;
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>浽Flash<73><68>*/
if(temp != 0x00)
{
Flash_Write(Global_Large_Buff,Register_OFFSET_LEN,FLASH_Register_Start_ADDRESS);
}
}
/*******************************************************************************
* Function Name : Read_Flash_Register_Data
* Description : <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>Ŀ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ֵ
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void Read_Flash_Register_Data(void)
{
memset(Global_Large_Buff,0,Register_OFFSET_LEN);
Flash_Read(Global_Large_Buff,Register_OFFSET_LEN,FLASH_Register_Start_ADDRESS);
SRAM_DMA_Write_Buff(Global_Large_Buff,Register_OFFSET_LEN,SRAM_Register_Start_ADDRESS);
}
/*******************************************************************************
* Function Name : LOG_Save_Global_Parameters
* Description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֲ<EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void LOG_Save_Global_Parameters(void)
{
static uint32_t polling_tick = 0;
uint8_t log_len = 0;
uint8_t log_buff[22];
memset(log_buff,0,22);
/*2025-09-08 <20>޸<EFBFBD>
ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ȡ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>˯<EFBFBD><EFBFBD>ģʽ״̬<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD>ɫ<EFBFBD>¡<EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>޿<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*/
if(SysTick_1ms - polling_tick >= 2000)
{
polling_tick = SysTick_1ms;
if( (DevActionGlobal.DevActionU64Cond.EleState != DevActionGlobal.Last_EleState)
|| (DevActionGlobal.DimGlobalValue != DevActionGlobal.Last_DimGlobalValue)
|| (DevActionGlobal.CCTValue != DevActionGlobal.Last_CCTValue)
|| (DevActionGlobal.SleepMode_State != DevActionGlobal.Last_SleepMode_State)
|| (DevActionGlobal.SleepLight_State != DevActionGlobal.Last_SleepLight_State)
|| (DevActionGlobal.Person_Detected != DevActionGlobal.Last_Person_Detected)
|| (DevActionGlobal.CardState != DevActionGlobal.Last_CardState)
|| (DevActionGlobal.Rs485CardType != DevActionGlobal.Last_Rs485CardType)
|| (DevActionGlobal.DevActionU64Cond.NeightState != DevActionGlobal.Last_NeightState) )
{
DevActionGlobal.Last_EleState = DevActionGlobal.DevActionU64Cond.EleState;
DevActionGlobal.Last_DimGlobalValue = DevActionGlobal.DimGlobalValue ;
DevActionGlobal.Last_CCTValue = DevActionGlobal.CCTValue;
DevActionGlobal.Last_SleepMode_State = DevActionGlobal.SleepMode_State;
DevActionGlobal.Last_SleepLight_State = DevActionGlobal.SleepLight_State;
DevActionGlobal.Last_Person_Detected = DevActionGlobal.Person_Detected;
DevActionGlobal.Last_CardState = DevActionGlobal.CardState;
DevActionGlobal.Last_Rs485CardType = DevActionGlobal.Rs485CardType;
log_len = 0x00;
log_buff[log_len++] = 0xA8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
log_buff[log_len++] = 0x00; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
log_buff[log_len++] = 0x00; //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>λ
log_buff[log_len++] = DevActionGlobal.Last_EleState; //ȡ<><C8A1>״̬
log_buff[log_len++] = (DevActionGlobal.Last_DimGlobalValue & 0xFF); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
log_buff[log_len++] = ((DevActionGlobal.Last_DimGlobalValue >> 8) & 0xFF); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
log_buff[log_len++] = (DevActionGlobal.Last_CCTValue & 0xFF); //ȫ<><C8AB>ɫ<EFBFBD><C9AB>
log_buff[log_len++] = ((DevActionGlobal.Last_CCTValue >> 8) & 0xFF); //ȫ<><C8AB>ɫ<EFBFBD><C9AB>
log_buff[log_len++] = DevActionGlobal.Last_SleepMode_State; //˯<><CBAF>ģʽ
log_buff[log_len++] = DevActionGlobal.Last_SleepLight_State; //˯<>ߵƹ<DFB5>״̬
log_buff[log_len++] = DevActionGlobal.Last_Person_Detected; //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
log_buff[log_len++] = DevActionGlobal.Last_CardState;
log_buff[log_len++] = DevActionGlobal.Last_Rs485CardType;
log_buff[log_len++] = DevActionGlobal.Last_NeightState;
log_buff[1] = log_len; //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
log_buff[2] = Data_CheckSum(log_buff,log_len); //<2F><><EFBFBD><EFBFBD>У<EFBFBD><D0A3>ֵ
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s %d",__func__,DevActionGlobal.Last_Person_Detected);
SRAM_DMA_Write_Buff(log_buff,log_len,SRAM_PowerOn_Restore_StartAddr );
}
}
}
/*<2A>ϵ<EFBFBD><CFB5>󣬶<EFBFBD>ȡ<EFBFBD>ⲿSRAM<41>еIJ<D0B5><C4B2><EFBFBD><EFBFBD><EFBFBD>Ϣ */
__attribute__((section(".non_0_wait"))) uint8_t SRAM_PowerOn_Restore_ParaInfo(void)
{
uint8_t log_len = 0;
uint8_t log_buff[22];
uint16_t temp_val = 0;
memset(log_buff,0,22);
SRAM_DMA_Read_Buff(log_buff,20,SRAM_PowerOn_Restore_StartAddr );
if(log_buff[0] == 0xA8) //У<><D0A3><EFBFBD><EFBFBD>־λ
{
if(log_buff[1] == 0x0E) //У<><D0A3><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
{
if(Data_CheckSum(log_buff,0x0E) == 0x00)
{
log_len = 0x03;
DevActionGlobal.Last_EleState = log_buff[log_len++];
temp_val = log_buff[log_len++];
temp_val <<= 8;
temp_val |= log_buff[log_len++];
DevActionGlobal.Last_DimGlobalValue = temp_val;
temp_val = log_buff[log_len++];
temp_val <<= 8;
temp_val |= log_buff[log_len++];
DevActionGlobal.Last_CCTValue = temp_val;
DevActionGlobal.Last_SleepMode_State = log_buff[log_len++];
DevActionGlobal.Last_SleepLight_State = log_buff[log_len++];
DevActionGlobal.Last_Person_Detected = log_buff[log_len++];
DevActionGlobal.Last_CardState = log_buff[log_len++];
DevActionGlobal.Last_Rs485CardType = log_buff[log_len++];
DevActionGlobal.Last_NeightState = log_buff[log_len++];
DevActionGlobal.DevActionU64Cond.EleState = DevActionGlobal.Last_EleState;
DevActionGlobal.DimGlobalValue = DevActionGlobal.Last_DimGlobalValue;
DevActionGlobal.CCTValue = DevActionGlobal.Last_CCTValue;
DevActionGlobal.SleepMode_State = DevActionGlobal.Last_SleepMode_State;
DevActionGlobal.SleepLight_State = DevActionGlobal.Last_SleepLight_State;
DevActionGlobal.Person_Detected = DevActionGlobal.Last_Person_Detected;
DevActionGlobal.CardState= DevActionGlobal.Last_CardState;
DevActionGlobal.Rs485CardType= DevActionGlobal.Last_Rs485CardType;
DevActionGlobal.DevActionU64Cond.NeightState = DevActionGlobal.Last_NeightState;
DevActionGlobal.sram_save_flag = 0xA8;
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_EleState:%d ",DevActionGlobal.Last_EleState);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_DimGlobalValue:%d ",DevActionGlobal.Last_DimGlobalValue);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_CCTValue:%d ",DevActionGlobal.Last_CCTValue);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_SleepMode_State:%d ",DevActionGlobal.Last_SleepMode_State);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_SleepLight_State:%d ",DevActionGlobal.Last_SleepLight_State);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_Person_Detected:%d ",DevActionGlobal.Last_Person_Detected);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_CardState:%d ",DevActionGlobal.Last_CardState);
Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Last_NeightState:%d ",DevActionGlobal.Last_NeightState);
return 0x00;
}
}
}
return 0x01;
}