feat:修改设备类型

feat:修改为红外转发设备,将中弘网关协议转换为主机红外协议
This commit is contained in:
yeyangwen
2026-02-09 17:32:59 +08:00
parent 2285326a47
commit 5a726f7378
1421 changed files with 47158 additions and 21011 deletions

336
Source/SYSTEM/eeprom.c Normal file
View File

@@ -0,0 +1,336 @@
#include "includes.h"
E_PARA_INFO g_eeprom;
E_MCU_DEV_INFO g_mcu_dev;
U8_T EEPROM_CheckSum(U8_T *data,U16_T len)
{
U8_T data_sum = 0;
for(U16_T i = 0;i<len;i++)
{
data_sum += data[i];
}
return data_sum;
}
void EEPROM_Init(void){
U8_T rev = 0;
EnIFCClk; //使能 IFC 时钟
IFC->MR |= 0x10002; //高速模式,延迟 2 个周期
delay_nms(10);
memset(&g_eeprom,0,sizeof(E_PARA_INFO));
rev = EEPROM_ReadParaInfo(&g_eeprom);
if(rev == 0x00){
//读取成功,开始校验以下参数
EEPROM_Validate_ParaInfo(&g_eeprom);
}else{
//读取失败,恢复默认参数
EEPROM_Default_ParaInfo(&g_eeprom);
Dbg_Println(DBG_BIT_SYS_STATUS,"Para Info Use Default:%d",g_eeprom.pipe_flag);
}
}
U8_T EEPROM_ReadParaInfo(E_PARA_INFO *info){
U8_T read_info[6];
U8_T para_data[EEPROM_APP_DATA_Size_Max];
U16_T read_len = 0;
memset(read_info,0,sizeof(read_info));
memset(para_data,0,sizeof(para_data));
ReadDataArry_U8(EEPROM_ParaInfo_Address,4,read_info);
if(read_info[0] == EEPROM_APP_SVAE_FLAG){
read_len = read_info[2];
read_len <<= 8;
read_len |= read_info[1];
if(read_len <= EEPROM_APP_DATA_Size_Max){
ReadDataArry_U8(EEPROM_ParaInfo_Address+EEPROM_Offset_Data,read_len,para_data);
if(EEPROM_CheckSum(para_data,sizeof(E_PARA_INFO)) == read_info[3]){
//校验成功
memcpy((uint8_t *)info,para_data,sizeof(E_PARA_INFO));
return 0x00;
}
}
}
return 0x01;
}
U8_T EEPROM_WriteParaInfo(E_PARA_INFO *info){
U8_T save_data[EEPROM_APP_DATA_Size_Max + 6];
U16_T save_len = sizeof(E_PARA_INFO);
if(save_len >= EEPROM_APP_DATA_Size_Max) save_len = EEPROM_APP_DATA_Size_Max;
save_data[0] = EEPROM_APP_SVAE_FLAG;
save_data[1] = save_len & 0xFF;
save_data[2] = (save_len >> 8) & 0xFF;
memcpy(&save_data[4],(uint8_t *)info,save_len);
save_data[3] = EEPROM_CheckSum(&save_data[4],save_len);
save_len+=4;
Page_ProgramData(EEPROM_ParaInfo_Address,save_len,save_data);
return 0;
}
U8_T EEPROM_ClearParaInfo(void){
U8_T save_data[EEPROM_APP_DATA_Size_Max+10];
UINT16 save_len = sizeof(E_PARA_INFO);
if(save_len >= EEPROM_APP_DATA_Size_Max) save_len = EEPROM_APP_DATA_Size_Max;
save_len += 4;
memset(save_data,0xFF,save_len);
Page_ProgramData(EEPROM_ParaInfo_Address,save_len,save_data);
return 0;
}
U8_T EEPROM_Validate_ParaInfo(E_PARA_INFO *info){
U8_T i=0;
//以下为本地参数
// //温差
// if(info->temp_diff > 18 ){
// info->temp_diff = EEPROM_TempDifference_Default; //默认
// }
// Dbg_Println(DBG_BIT_SYS_STATUS,"Para Info temp_diff %d",info->temp_diff);
//
// //温度显示单位
// if(info->temp_select > 0x02 ){
// info->temp_select = EEPROM_TempSelect_Default; //默认保护电流为10A
// }
//
//
// if(info->backlight_en >= 0x02)
// {
// info->backlight_en = 0x00;
// }
//
// if(info->pipe_flag > 0x02)
// {
// info->pipe_flag = 0x00;
// }
//
// if((info->dev_addr == 0x00) || (info->dev_addr == 0xff))
// {
// info->dev_addr = 0x01;
// }
//
// //按键灵敏度
// if(info->key_sens_level > 2)
// {
// info->key_sens_level = EEPROM_TouchLevel_Default; //默认中灵敏度
// }
//
// //显示语言
// if(info->langue_select > 2)
// {
// info->langue_select = EEPROM_LangueSelect_Default;//默认中英文混合
// }
//设备端口类型
if(info->dev_port > 2) //2024-12-16
{
info->dev_port = POLLING_PORT; //默认轮训端口
}
Dbg_Println(DBG_BIT_SYS_STATUS,"Para Info temp unit:%d backlight_en:%d key_sens_level:%d device_addr:%d device_port:%d",\
info->temp_select,info->backlight_en,info->key_sens_level,info->dev_addr,info->dev_port);
return 0;
}
/*恢复默认值*/
void EEPROM_Default_ParaInfo(E_PARA_INFO *info){
info->dev_addr = 0x01;
info->pipe_flag = 0x00;
info->temp_diff = EEPROM_TempDifference_Default;
info->temp_select = EEPROM_TempSelect_Default;
info->backlight_en = 0x00;
info->key_sens_level = EEPROM_TouchLevel_Default;
info->langue_select = EEPROM_LangueSelect_Default;
info->dev_port = POLLING_PORT; //2024-12-16
}
/*************<- boot ->****************/
/*******************************************************************************
* Function Name : EEPROM_ReadMCUDevInfo
* Description : 从EEPROM中读取设备信息
*******************************************************************************/
U8_T EEPROM_ReadMCUDevInfo(E_MCU_DEV_INFO *info)
{
U8_T read_info[6];
U8_T para_data[EEPROM_DATA_Size_Max];
U16_T read_len = 0;
memset(read_info,0,sizeof(read_info));
memset(para_data,0,sizeof(para_data));
ReadDataArry_U8(EEPROM_MCUDevInfo_Address,4,read_info);
if(read_info[0] == EEPROM_SVAE_FLAG){
read_len = read_info[2];
read_len <<= 8;
read_len |= read_info[1];
if(read_len <= EEPROM_DATA_Size_Max){
ReadDataArry_U8(EEPROM_MCUDevInfo_Address+EEPROM_Offset_Data,read_len,para_data);
if(EEPROM_CheckSum(para_data,sizeof(E_MCU_DEV_INFO)) == read_info[3]){
//校验成功
memcpy((uint8_t *)info,para_data,sizeof(E_MCU_DEV_INFO));
#if DBG_LOG_EN
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevAddr:%d",g_mcu_dev.dev_addr);
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevType:%d",g_mcu_dev.dev_type);
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevBootVer:%d",g_mcu_dev.dev_boot_ver);
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevAppVer:%d",g_mcu_dev.dev_app_ver);
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevNameLen:%d",g_mcu_dev.dev_name_len);
Dbg_Println(DBG_BIT_SYS_STATUS,"EE DevName:%s",g_mcu_dev.dev_name);
#endif
return 0x00;
}
}
}
return 0x01;
}
/*******************************************************************************
* Function Name : EEPROM_WriteMCUDevInfo
* Description : 将设备信息写入到EEPROM中
*******************************************************************************/
U8_T EEPROM_WriteMCUDevInfo(E_MCU_DEV_INFO *info)
{
U8_T save_data[EEPROM_DATA_Size_Max + 6];
U16_T save_len = sizeof(E_MCU_DEV_INFO);
if(save_len >= EEPROM_DATA_Size_Max) save_len = EEPROM_DATA_Size_Max;
save_data[0] = EEPROM_SVAE_FLAG;
save_data[1] = save_len & 0xFF;
save_data[2] = (save_len >> 8) & 0xFF;
memcpy(&save_data[4],(uint8_t *)info,save_len);
save_data[3] = EEPROM_CheckSum(&save_data[4],save_len);
save_len+=4;
Page_ProgramData(EEPROM_MCUDevInfo_Address,save_len,save_data);
return 0;
}
/*******************************************************************************
* Function Name : EEPROM_Default_MCUDevInfo
* Description : EEPROM中参数恢复默认值且将默认参数保存至EEPROM中
*******************************************************************************/
void EEPROM_Default_MCUDevInfo(E_MCU_DEV_INFO *info)
{
#if (Project_Area == 0x01)
/*Boot 区域*/
info->dev_addr = 0x00;
info->dev_type = 0x00;
info->dev_app_ver = 0x00;
info->dev_boot_ver = Project_FW_Version;
info->dev_name_len = sizeof(Peoject_Name);
memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size);
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
EEPROM_WriteMCUDevInfo(info);
#elif (Project_Area == 0x02)
/*APP 区域*/
info->dev_addr = 0x01;
info->dev_type = Project_Type;
info->dev_app_ver = Project_FW_Version;
info->dev_name_len = sizeof(Peoject_Name);
memset((char *)info->dev_name,0,EEPROM_DEV_NAME_Size);
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
EEPROM_WriteMCUDevInfo(info);
#endif
}
/*******************************************************************************
* Function Name : EEPROM_Validate_MCUDevInfo
* Description : 校验从EEPROM 中读取的参数是否正确,如果不正确的话,便将当前正确的参数写入
APP区域中判断APP参数与EEPROM中记录的是否一致
Boot区域中判断Boot参数与EEPROM中记录的是否一致
*******************************************************************************/
void EEPROM_Validate_MCUDevInfo(E_MCU_DEV_INFO *info)
{
#if (Project_Area == 0x01)
/*Boot 区域*/
U8_T save_flag = 0;
if(info->dev_boot_ver != Project_FW_Version)
{
info->dev_boot_ver = Project_FW_Version;
save_flag = 0x01;
}
if(save_flag == 0x01)
{
EEPROM_WriteMCUDevInfo(info);
}
#elif (Project_Area == 0x02)
/*APP 区域*/
U8_T save_flag = 0;
if(info->dev_app_ver != Project_FW_Version)
{
info->dev_app_ver = Project_FW_Version;
save_flag = 0x01;
}
if(info->dev_type != Project_Type)
{
info->dev_type = Project_Type;
save_flag = 0x01;
}
if(info->dev_name_len != sizeof(Peoject_Name))
{
info->dev_name_len = sizeof(Peoject_Name);
save_flag = 0x01;
}
if(strncmp((char *)info->dev_name,(char *)Peoject_Name,sizeof(Peoject_Name)))
{
memcpy((char *)info->dev_name,(char *)Peoject_Name,info->dev_name_len);
save_flag = 0x01;
}
if(save_flag == 0x01)
{
EEPROM_WriteMCUDevInfo(info);
}
#endif
}