/* * logic_file_function.c * * Created on: Nov 11, 2025 * Author: cc */ #include "includes.h" #include #include /******************************************************************************* * Function Name : DevAction_CondData_Init * Description : 动作条件参数数据初始化 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void DevAction_CondData_Init(void) { DevActionGlobal.DevActionU64Cond.RcuLockState = Get_Authorize_Lock_Status(); } /******************************************************************************* * Function Name : Action_Coord_Get * Description : 动作下标得到 * Input : Dev_processing_addr :设备节点地址 BUS_Public :公有数据 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Action_Coord_Get(uint32_t Dev_processing_addr, Device_Public_Information_G *BUS_Public) { uint16_t i; uint32_t DevActionAddr; for(i = 0; i < DevActionGlobal.DevActionNum; i++) // { DevActionAddr = SRAM_DevAction_List_Start_Addr + i*SRAM_DevAction_List_Size; if(SRAM_Read_DW(DevActionAddr+sizeof(Dev_Action_Core)+sizeof(Dev_Action_Input)+sizeof(Dev_Action_Cond)+sizeof(Dev_Action_State)-4) == Dev_processing_addr) { BUS_Public->ActionCoord = i; //当前第一个触发节点与设备输入节点一致的动作 break; } } } /******************************************************************************* * Function Name : Action_Coord_Get * Description : 设备下标得到 * Input : Dev_processing_addr :设备节点地址 BUS_Public :公有数据 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Dev_Coord_Get(void) { uint16_t i; //遍历设备 uint32_t Dev_processing_addr; Device_Public_Information_G BUS_Public; //公有全局数据 for(i = 0; i < DevActionGlobal.DevNum; i++) { Dev_processing_addr = SRAM_Device_List_Start_Addr + i*SRAM_Device_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), Dev_processing_addr); //拷贝所有公有数据 BUS_Public.DevCoord = i; //拿到设备下标 Action_Coord_Get(Dev_processing_addr, &BUS_Public); //拿到动作下标 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前设备准备重新保存,地址:%08X,设备类型:%d,设备地址:%d,设备下标:%d,动作下标:%d", Dev_processing_addr, BUS_Public.type, BUS_Public.addr, BUS_Public.DevCoord, BUS_Public.ActionCoord); switch(BUS_Public.type) { case Dev_Host_HVout: //类型为继电器 if((ENUM_RS485_DEV_PRO_01 == BUS_Public.Protocol)&&(0x00 == BUS_Public.addr)) //1号协议 地址为0 { // NOR_HVOUT_INFO DevHVoutInfo; //继电器局部变量 // SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),Dev_processing_addr+Dev_Privately); // // DevHVoutInfo.DevC5IOAddr = Find_AllDevice_List_Information(DEV_C5IO_Type, 0x00); //拿到C5IO存储地址 // Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevHVoutInfo.DevC5IOAddr:%08X", DevHVoutInfo.DevC5IOAddr); // SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),Dev_processing_addr+Dev_Privately); //继电器私有数据重新写入 } break; } /*重新保存当前设备*/ BUS_Public.check = 0x00; SRAM_Write_Byte(BUS_Public.check, Dev_processing_addr+Dev_Check); //清校验 SRAM_Write_Word(BUS_Public.DevCoord, Dev_processing_addr+Dev_Coord); //重新写入设备下标 SRAM_Write_Word(BUS_Public.ActionCoord, Dev_processing_addr+Dev_ActionCoord); //重新写入动作下标 BUS_Public.check = Log_CheckSum(Dev_processing_addr,BUS_Public.data_len); //重新计算整包校验 DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); SRAM_Write_Byte(BUS_Public.check, Dev_processing_addr+Dev_Check); //重新写入校验 } } /******************************************************************************* * Function Name : DevAction_ReuseFlag_Get * Description : 为复用动作复用标志得到 * 每个动作遍历所有的动作 相同的输入节点和回路,该动作的复用标志就置一。置一后,扫描动作时会先判断 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) { uint16_t i = 0x00,j = 0x00,k = 0x00; //用于遍历所有动作 uint32_t list_addri = 0x00,list_addrj = 0x00; DEV_ACTION_INFO DevActionInfoi; //当前设备动作全部信息 DEV_ACTION_INFO DevActionInfoj; //当前设备动作全部信息 for(i = 0; i < DevActionGlobal.DevActionNum; i++) { list_addri = SRAM_DevAction_List_Start_Addr + i * SRAM_DevAction_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfoi, sizeof(DEV_ACTION_INFO), list_addri); DevActionInfoi.DevActionState.DevAddrIn = Find_AllDevice_List_Information(DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备输入地址:%04x", DevActionInfoi.DevCtrlNum, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionState.DevAddrIn); Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"当前动作数据打印:",(uint8_t *)&DevActionInfoi,sizeof(Dev_Action_Core) + sizeof(Dev_Action_Input)+sizeof(Dev_Action_Cond)+sizeof(Dev_Action_State)); for(j = 0; j < DevActionGlobal.DevActionNum ; j++) { if( j != i ) { list_addrj = SRAM_DevAction_List_Start_Addr + j * SRAM_DevAction_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfoj, sizeof(DEV_ACTION_INFO), list_addrj); if( ( DevActionInfoi.DevActionCond.DevActionU64Cond.DevActionOutFlag == 0x00 ) && ( DevActionInfoj.DevActionCond.DevActionU64Cond.DevActionOutFlag == 0x00 ) && ( DevActionInfoi.DevActionInput.DevType == DevActionInfoj.DevActionInput.DevType ) && ( DevActionInfoi.DevActionInput.DevAddr == DevActionInfoj.DevActionInput.DevAddr ) && ( DevActionInfoi.DevActionInput.inAddr == DevActionInfoj.DevActionInput.inAddr ) && ( DevActionInfoi.DevActionInput.inType == DevActionInfoj.DevActionInput.inType ) ) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作地址:%08X,之前动作地址:%08X", list_addri, list_addrj); DevActionInfoi.DevActionState.SceneReuseFlag = 0x01; if( (DevActionInfoi.DevActionInput.DevType == DEV_RS485_SWT) && (DevActionInfoi.DevActionCond.SceneExcute == ACTION_SCENE_MULTI) && (DevActionInfoj.DevActionInput.DevType == DEV_RS485_SWT) && (DevActionInfoj.DevActionCond.SceneExcute == ACTION_SCENE_MULTI) ) { if( j > i ) { if( (DevActionInfoi.DevActionState.MultiValidNo == 0x00) && (DevActionInfoi.DevActionState.MultiSetFlag == 0x00) ) { DevActionInfoi.DevActionState.MultiSetFlag = 0x01; DevActionInfoi.DevActionState.MultiNumber = 0x01; DevActionInfoi.DevActionState.MultiValidNo++; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联起始地址:%08X 多联下标:%d", DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionInput.inAddr, list_addri, DevActionInfoi.DevActionState.MultiNumber); } if(DevActionInfoj.DevActionState.MultiSetFlag == 0x00) { Device_Public_Information_G BUS_Public; RS485_SWI_INFO Rs485SwiInfo; uint32_t DevAdd = 0x00; DevActionInfoi.DevActionState.MultiValidNo++; DevActionInfoj.DevActionState.MultiNumber = DevActionInfoi.DevActionState.MultiValidNo; DevActionInfoj.DevActionState.MultiSetFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联当前地址:%08X 多联下标:%d", DevActionInfoj.DevActionInput.DevAddr, DevActionInfoj.DevActionInput.inAddr, list_addrj, DevActionInfoj.DevActionState.MultiNumber); //待优化, for(k = 0; k < SRAM_DevAction_List_Size; k++) { SRAM_Write_Byte(0x00,list_addrj+k); } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"因为多联下标置位准备重新保存,地址:%08X", list_addrj); DevActionInfoj.CheckVal = 0x00; SRAM_DMA_Write_Buff((uint8_t *)&DevActionInfoj, DevActionInfoj.data_len, list_addrj); DevActionInfoj.CheckVal = DevAction_CheckSum(list_addrj,DevActionInfoj.data_len); SRAM_Write_Byte(DevActionInfoj.CheckVal, ( list_addrj + sizeof(Dev_Action_Core) + sizeof(Dev_Action_Input) + sizeof(Dev_Action_Cond) + sizeof(Dev_Action_State) ) ); DevAdd = Find_AllDevice_List_Information2(Active_Port, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); if(DevAdd != 0x00) { SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); if(DevActionInfoi.DevActionState.MultiValidNo <= 127) { Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.inAddr] = DevActionInfoi.DevActionState.MultiValidNo; } BUS_Public.check = 0x00; BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd); SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%d 多联开关,回路:%d 有效联数:%d", DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionInput.inAddr, Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.inAddr]); } } } }else { break; } } } } for( k = 0; k < DevActionInfoi.DevCtrlNum; k++ ) { if(DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType == Dev_Host_Invalid) //唯有场景 { DevActionInfoi.DevActionOutput[k].DevActionOutAddr = DevAction_No_Get(DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含场景,地址:%08X 场景地址:%08X 下标:%d 回路:%d", list_addri, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, i, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); }else { DevActionInfoi.DevActionOutput[k].DevActionOutAddr = Find_AllDevice_List_Information( DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevAddr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"扩展设备输入类型:%d,扩展设备输入地址:%d,扩展设备回路地址:%d,扩展设备存储地址:%04x", DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevAddr, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop, DevActionInfoi.DevActionOutput[k].DevActionOutAddr); } if(DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevDlyValue.DelayCont != 0x00) { DevActionInfoi.DevActionOutput[k].DevDlyAddr = Add_DevDly_To_List( DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); if(Dev_Host_Invalid != DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含延时设备准备重新保存,地址:%08X 下标:%d,延时节点:%08X 有涉及到延时设备地址:%08X, 回路:%d", list_addri, i, DevActionInfoi.DevActionOutput[k].DevDlyAddr, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); }else{ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含延时场景准备重新保存,地址:%08X 下标:%d,延时节点:%08X 有涉及到延时设备地址:%08X, 回路:%d", list_addri, i, DevActionInfoi.DevActionOutput[k].DevDlyAddr, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); } }else { DevActionInfoi.DevActionOutput[k].DevDlyAddr = 0x00; //控制扩展设备未延时的,先清空延时节点。后面再重新遍历,再赋值延时设备信息 } } for(k = 0; k < SRAM_DevAction_List_Size; k++) { SRAM_Write_Byte(0x00,list_addri+k); } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作因为复用标志置位准备重新保存,地址:%08X", list_addri); DevActionInfoi.CheckVal = 0x00; SRAM_DMA_Write_Buff((uint8_t *)&DevActionInfoi, DevActionInfoi.data_len, list_addri); //写入数据 DevActionInfoi.CheckVal = DevAction_CheckSum(list_addri,DevActionInfoi.data_len); //计算整包校验 SRAM_Write_Byte(DevActionInfoi.CheckVal,(list_addri + sizeof(Dev_Action_Core) + sizeof(Dev_Action_Input) + sizeof(Dev_Action_Cond) + sizeof(Dev_Action_State)) ); //校验值重新写入 } } /******************************************************************************* * Function Name : Expand_Scene_Get * Description : 为控制场景的设备进行地址得到 * 当动作初始化,以及延时链表完成之后,重新遍历动作链表,每个动作中的每个扩展设备,进行赋值 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Expand_Scene_Get(void) { uint8_t KeepFlag = 0,CtrlWay = 0; uint16_t i = 0,j = 0; uint32_t list_addr = 0; DEV_ACTION_INFO DevActionInfo; for(i = 0; i < DevActionGlobal.DevActionNum; i++ ) { KeepFlag = 0x00; list_addr = SRAM_DevAction_List_Start_Addr + i*SRAM_DevAction_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), list_addr); for(j = 0; j < DevActionInfo.DevCtrlNum; j++) { if( DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevType == Dev_Host_Invalid ) { DevActionInfo.DevActionOutput[j].DevActionOutAddr = DevAction_No_Get(DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevOutputLoop); if( DevActionInfo.DevActionOutput[j].DevActionOutAddr != 0x00 ) { KeepFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含场景,准备重新保存,地址:%08X 场景地址:%08X 下标:%d 回路:%d", list_addr,DevActionInfo.DevActionOutput[j].DevActionOutAddr, i, DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevOutputLoop); } } switch(DevActionInfo.DevActionOutput[i].DevActionOutCfg.DevType) { case DEV_RS485_SWT: case Dev_Host_LVoutput: CtrlWay = DevActionInfo.DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0x00ff; //执行方式 switch(CtrlWay) { case DEV_CTRLWAY_RELATESCENE: //对应场景 case CFG_Dev_CtrlWay_Is_RelateBlink: //对应闪烁 DevActionInfo.DevActionState.SceneTypeFlag = 0x01; KeepFlag = 0x01; //当前动作需要重新保存 break; } break; case Dev_NodeCurtain: if(DEV_CTRLWAY_RELATESCENE == (DevActionInfo.DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0x00ff)) { KeepFlag = 0x01; //当前动作需要重新保存 DevActionInfo.DevActionState.SceneTypeFlag = 0x01; } break; } switch(DevActionInfo.DevActionCond.SceneExcute) { case ACTION_SCENE_TWO: case ACTION_SCENE_SLEEP: case ACTION_SCENE_MAINSWITCH: case ACTION_SCENE_HELPSLEEP: KeepFlag = 0x01; //当前动作需要重新保存 DevActionInfo.DevActionState.SceneTypeFlag = 0x01; break; } } if( KeepFlag == 0x01 ) { for(uint16_t k = 0;k 0x70000)) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件长度不对:%08X",file_len); return 0x01; } MD5Digest_FLASH(SPIFLASH_LOGIC_DataStart_ADDRESS, file_len,(char *)&md5[0]); if(0==strncmp((const char *)md5,(const char *)&file_info[8],16)) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5校验成功!"); }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5校验错误,不作处理 Len:%08X",file_len); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"升级配置失败,Md5错误:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"File Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X",\ file_info[8],file_info[9],\ file_info[10],file_info[11],\ file_info[12],file_info[13],\ file_info[14],file_info[15],\ file_info[16],file_info[17],\ file_info[18],file_info[19],\ file_info[21],file_info[21],\ file_info[22],file_info[23]); /*擦除Flash中的配置文件标志位和MD5值*/ memset(file_info,0,sizeof(file_info)); Flash_Write(file_info,24,SPIFLASH_LOGIC_DataFlag_ADDRESS); return 0x01; } if((Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_L) == 0xCC) && (Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_H) == 0xC0)) { uint8_t temp_data[4]; uint16_t temp_len = 0; Flash_Read(temp_data,4,SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Len_L); temp_len = temp_data[1]; temp_len <<= 8; temp_len |= temp_data[0]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"找到文件,读取数据长度:%d",temp_len); if((temp_len <= file_len) && (temp_len <= 1024)) //目前包长最大1024 { uint16_t temp_crc = 0,data_crc = 0; uint16_t data_frame = 0,data_sn = 0; uint8_t temp_buff[temp_len]; memset(temp_buff,0,sizeof(temp_buff)); Flash_Read(temp_buff,temp_len,SPIFLASH_LOGIC_DataStart_ADDRESS); temp_crc = NetCRC16_Data(temp_buff ,temp_len,Logic_D_CRC_L); data_crc = temp_buff[Logic_D_CRC_H]; data_crc <<= 8; data_crc |= temp_buff[Logic_D_CRC_L]; if(data_crc == temp_crc) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CRC校验成功"); data_frame = temp_buff[Logic_D_FrameNum_H]; data_frame <<= 8; data_frame |= temp_buff[Logic_D_FrameNum_L]; data_sn = temp_buff[Logic_D_Frame_H]; data_sn <<= 8; data_sn |= temp_buff[Logic_D_Frame_L]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic Data SN:%d,NUM:%d",data_sn,data_frame); Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"逻辑帧数据" ,temp_buff,temp_len); if(temp_buff[Logic_D_FrameType] == Logic_FrameType_LogicInfo) { switch(select) { case 0x00: //查询全部信息 memcpy(buff,&temp_buff[Logic_D_Para],LogicFile_InfoDetails_Len); rev = 0x00; break; case 0x01: //查询发布作者 - 32Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_InfoDetails_Author_Offset],32); rev = 0x00; break; case 0x02: //查询软件版本 - 4Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_SWVersion_Offset],4); rev = 0x00; break; case 0x03: //查询发布时间 - 7Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_ReleaseDate_Offset],7); rev = 0x00; break; case 0x04: //查询酒店名称 - 32Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_HotelName_Offset],32); rev = 0x00; break; case 0x05: //查询酒店代号 - 4Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_HotelCode_Offset],4); rev = 0x00; break; case 0x06: //查询项目分组 - 32Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_HotelGroupName_Offset],32); rev = 0x00; break; case 0x07: //查询房型别名 - 32Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_HomeName_Offset],32); rev = 0x00; break; case 0x08: //查询版本号 - 3Byte memcpy(buff,&temp_buff[Logic_D_Para + LogicFile_Infodetails_Version_Offset],3); rev = 0x00; break; } } }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CRC校验失败!"); } }else{ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"读取数据长度不在范围内:%08X - %d",temp_len); } }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"不是逻辑文件数据包头!%02X %02X",Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_L) , Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_H)); } return rev; } /******************************************************************************* * Function Name : Logic_FrameType_Global_TempProcessing * Description : 逻辑文件中 - 全局信息 临时处理 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_Global_TempProcessing(uint8_t *data,uint16_t len) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); } /******************************************************************************* * Function Name : Logic_FrameType_DeviceAction_TempProcessing * Description : 逻辑文件中 - 设备存在协议支持判断 * Input : * Return : 0x00 :有对应的协议 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t Logic_DeviceType_Legal_Judgment(LOGICFILE_DEVICE_INFO *dev_info) { uint8_t rev = 0x01; switch(dev_info->type) { case Dev_Host_Invalid: //场景 if((dev_info->version == 0x00) && (dev_info->port == 0x00)) rev = 0x00; break; case Dev_Host_HVout: //强电继电器 if((dev_info->version == 0x01) && (dev_info->port == Bus_port)) rev = 0x00; //BLV_Cx主机继电器 else if((dev_info->version == 0x02) && (dev_info->port == Polling_Port)) rev = 0x00; //A9IO继电器 else if((dev_info->version == 0x03) && (dev_info->port == Active_Port)) rev = 0x00; //强电开关 break; case Dev_Host_LVinput: //弱电输入 if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //BLV_Cx主机弱电输入 - 普通设备 else if((dev_info->version == 0x02) && (dev_info->port == Polling_Port)) rev = 0x00; //485红外感应 else if((dev_info->version == 0x03) && (dev_info->port == Active_Port)) rev = 0x00; //6路弱电输入 break; case Dev_Host_LVoutput: //弱电输出 if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //BLV_Cx主机弱电输出 - 普通设备 break; case Dev_Host_Service: //服务信息 if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //服务信息设备 break; case Dev_NodeCurtain: //干接点窗帘 if((dev_info->version == 0x00) && (dev_info->port == 0x00)) rev = 0x00; //干接点窗帘设备 break; case DEV_RS485_SWT: //开关 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //T1触摸开关 else if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //C7T/C43开关 else if((dev_info->version == 0x03) && (dev_info->port == Polling_Port)) rev = 0x00; //A9IO开关 break; case DEV_RS485_TEMP: //空调 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //T1温控器 else if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //C7T/C43温控器 else if((dev_info->version == 0x03) && (dev_info->port == Polling_Port)) rev = 0x00; //T1四管温控器 else if((dev_info->version == 0x04) && (dev_info->port == Active_Port)) rev = 0x00; //T1主动温控器 break; case DEV_RS485_INFRARED: //红外 //这个设备暂时没有对接 break; case DEV_RS485_AirDetect: //空气检测 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //M702空气质量检测 break; case DEV_RS485_CARD: //插卡取电 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //BLW插卡取电(轮训) else if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //BLW插卡取电(主动) break; case DEV_RS485_HEATER: //地暖 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //宝来威地暖 if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //CLED地暖 break; case Dev_RCU_NET: //RCU设备网络 //这个设备暂时没有对接 break; case DEV_RS485_CURTAIN: //485窗帘 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //杜亚窗帘 if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //丙申窗帘 break; case DEV_RS485_RELAY: //继电器 //这个设备预计取消 break; case DEV_RS485_IR_SEND: //红外发送 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //轮训红外转发设备 if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //主动红外转发设备 break; case DEV_RS485_DIMMING: //直流调光 //这个设备预计取消 - 合并到485PWM调光中 break; case DEV_RS485_TRAIC: //可控硅调光 //这个设备预计取消 - 合并到485PWM调光中 break; case DEV_RS485_STRIP: //灯带 // if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //合并到PWM调光里面 break; case DEV_RS485_CoreCtrl: //中控 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //小宝语音 break; case DEV_RS485_WxLock: //微信锁 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //BLW微信锁 else if((dev_info->version == 0x02) && (dev_info->port == Polling_Port)) rev = 0x00; //福瑞狗微信锁 else if((dev_info->version == 0x03) && (dev_info->port == Polling_Port)) rev = 0x00; //创佳微信锁 break; case DEV_RS485_MUSIC: //背景音乐 if((dev_info->version == 0x01) && (dev_info->port == Bus_port)) rev = 0x00; //BLV_Cx背景音乐 else if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //BLW背景音乐和小宝音乐 else if((dev_info->version == 0x06) && (dev_info->port == Polling_Port)) rev = 0x00; //华尔思音乐 break; case DEV_NET_ROOMSTATE: //房态下发 //这个设备暂时没有对接 break; case Dev_Host_PWMLight: //主机本地调光 //这个设备预计取消 break; case DEV_RS485_PWM: //485PWM调光 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //PWM调光 else if((dev_info->version == 0x02) && (dev_info->port == Polling_Port)) rev = 0x00; //A9LD调光 else if((dev_info->version == 0x03) && (dev_info->port == Active_Port)) rev = 0x00; //C7T滑动条调光 else if((dev_info->version == 0x04) && (dev_info->port == Polling_Port)) rev = 0x00; //A8PB调光 else if((dev_info->version == 0x05) && (dev_info->port == Bus_port)) rev = 0x00; //C12调光 else if((dev_info->version == 0x06) && (dev_info->port == Polling_Port)) rev = 0x00; //宝来威灯带调光 break; case DEV_PB_LED: //总线调光 //这个设备预计取消 break; case DEV_RCU_POWER: //RCU电源 //这个设备预计取消 break; case DEV_RS485_A9_IO_SWT: //A9IO开关 //这个设备预计取消 break; case DEV_RS485_A9_IO_EXP: //A9IO扩展 //这个设备预计取消 break; case DEV_RS485_A9_IO_POWER: //A9IO电源 //这个设备预计取消 break; case DEV_RS485_RFGatewayCycle: //无线网关轮询 //这个设备预计取消 break; case DEV_RS485_RFGatewayHost: //无线网关主动 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //RF主网关 break; case DEV_RS485_RFGatewayDoor: //无线门磁 //这个设备预计取消 break; case DEV_RS485_AirReveal: //空气参数显示 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //C7T空气质量显示 break; case DEV_RS485_RFGatewayRelayPir: //无线继电器红外 //这个设备预计取消 break; case Dev_Host_TimeCtrl: //时间同步 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //C7T时间同步 break; case Dev_Rs458_MonitorCtrl: //监控控制 //这个设备预计取消 break; case Dev_Rs458_RotaryCtrl: //旋钮开关控制 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //旋钮开关 协议1 if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //旋钮开关 协议2 break; case Dev_BUS_C5IO: //BLV_CSIO if((dev_info->version == 0x01) && (dev_info->port == Bus_port)) rev = 0x00; //BLV_CxIO设备 break; case Dev_RS485_CardState: if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //主动端口插卡同步 if((dev_info->version == 0x02) && (dev_info->port == Polling_Port)) rev = 0x00; //轮询端口插卡同步 break; case DEV_RS485_FreshAir: //485新风 if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //宝来威新风 if((dev_info->version == 0x02) && (dev_info->port == Active_Port)) rev = 0x00; //CLED新风 break; case DEV_RS485_LCD: //LCD1602 if((dev_info->version == 0x01) && (dev_info->port == Bus_port)) rev = 0x00; //LCD1602 break; case Dev_Rs485_PB20: if((dev_info->version == 0x01) && (dev_info->port == Bus_port)) rev = 0x00; //PB20 break; case Dev_Rs485_PB20_LD: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //PB20_LED break; case Dev_Rs485_PB20_LS: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //PB20_LightStrip break; case Dev_Rs485_PB20_Relay: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //PB20_Relay break; case DEV_Virtual_NoCard: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //虚拟断电设备 break; case DEV_Virtual_Card: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //虚拟无卡取电设备 break; case DEV_Virtual_ColorTemp: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //色温调节 break; #if Dev_485_BLE_Music_Flag case Dev_485_BLE_Music: if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //蓝牙音频 break; #endif #if Dev_Nor_Carbon_Flag case DEV_Carbon_Saved: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //碳达人 break; #endif #if Dev_Nor_Scene_Restore_Flag case Dev_Scene_Restore: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //场景还原 break; #endif #if Dev_Nor_GlobalSet_Flag //2025-07-15,YYW,全局设置 case Dev_Virtual_GlobalSet: if((dev_info->version == 0x01) && (dev_info->port == 0x00)) rev = 0x00; //全局设置 break; #endif case Dev_Energy_Monitor: if((dev_info->version == 0x01) && (dev_info->port == Polling_Port)) rev = 0x00; //能耗监测 if((dev_info->version == 0x01) && (dev_info->port == Active_Port)) rev = 0x00; //能耗监测 break; } return rev; } /******************************************************************************* * Function Name : Logic_FrameType_DeviceExist_TempProcessing * Description : 逻辑文件中 - 设备存在 临时处理 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceExist_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; char temp_str[38] = {0}; LOGICFILE_DEVICE_INFO temp_dev_info; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); memcpy(&temp_dev_info,data,sizeof(LOGICFILE_DEVICE_INFO)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备类型:%d - %s",temp_dev_info.type,Logic_Info_DeviceType_To_String(temp_dev_info.type)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备地址:%d",temp_dev_info.addr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备端口:%d - %s",temp_dev_info.port,Logic_Info_DevicePort_To_String(temp_dev_info.port)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备波特率:%d",temp_dev_info.baud); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备协议版本:%d",temp_dev_info.version); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备通讯重发次数:%d",temp_dev_info.retry); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备通讯等待时间:%dms",temp_dev_info.writ_time); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输入回路数:%d",temp_dev_info.input_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输出回路数:%d",temp_dev_info.output_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"父设备类型:%d",temp_dev_info.parent_type); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"父设备地址:%d",temp_dev_info.parent_addr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"父设备端口:%d",temp_dev_info.parent_port); temp_len += sizeof(LOGICFILE_DEVICE_INFO); if((temp_len + temp_dev_info.input_num*4 + temp_dev_info.output_num*32) > len) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输出回路别名长度不对:%d - %d",temp_len + temp_dev_info.input_num*4 + temp_dev_info.output_num*16,len); } /*输入回路设置信息 - 输入回路*4Byte*/ temp_len += temp_dev_info.input_num*4; /*输出回路别名 - 输出回路*32Byte 2022-06-07 将别名长度改为32Byte*/ for(uint16_t i=0;idevice_num += 1; switch(temp_dev_info.port) { case Bus_port: if(Logic_DeviceType_Legal_Judgment(&temp_dev_info) == 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"该设备有对应处理协议--"); if(Lfile_info->Bus_device_num < BusDevice_NumMax) { Lfile_info->Bus_device_addr[Lfile_info->Bus_device_num] = data_addr; Lfile_info->Bus_device_num += 1; } } break; case Polling_Port: if(Logic_DeviceType_Legal_Judgment(&temp_dev_info) == 0x00){ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"该设备有对应处理协议--"); if(Lfile_info->Polling_device_num < PollingDevice_NumMax) { Lfile_info->Polling_device_addr[Lfile_info->Polling_device_num] = data_addr; Lfile_info->Polling_device_num += 1; } } break; case Active_Port: if(Logic_DeviceType_Legal_Judgment(&temp_dev_info) == 0x00){ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"该设备有对应处理协议--"); if(Lfile_info->Active_device_num < ActiveDevice_NumMax) { Lfile_info->Active_device_addr[Lfile_info->Active_device_num] = data_addr; Lfile_info->Active_device_num += 1; } } break; case 0x00: //特殊设备 - 普通设备 if(Logic_DeviceType_Legal_Judgment(&temp_dev_info) == 0x00){ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"该设备有对应处理协议--"); if(Lfile_info->Nor_device_num < NorDevice_NumMax) { Lfile_info->Nor_device_addr[Lfile_info->Nor_device_num] = data_addr; Lfile_info->Nor_device_num += 1; } } break; default: break; } } __attribute__((section(".non_0_wait"))) char *Logic_Device_DelayUnit_To_String(uint8_t type) { memset(device_temp_string,0,sizeof(device_temp_string)); #if LOGIC_DEBUG_INFO_EN switch(type) { case 0x01: strncpy(device_temp_string,(const char *)"ms",sizeof("ms")); break; case 0x02: strncpy(device_temp_string,(const char *)"s",sizeof("s")); break; case 0x03: strncpy(device_temp_string,(const char *)"min",sizeof("min")); break; } #endif return device_temp_string; } __attribute__((section(".non_0_wait"))) char *Logic_Data_Service_Info_To_String(uint8_t id) { memset(device_temp_string,0,sizeof(device_temp_string)); #if LOGIC_DEBUG_INFO_EN switch(id) { case 0x01: strncpy(device_temp_string,(const char *)"入住服务",sizeof("入住服务")); break; case 0x02: strncpy(device_temp_string,(const char *)"勿扰服务",sizeof("勿扰服务")); break; case 0x03: strncpy(device_temp_string,(const char *)"清理服务",sizeof("清理服务")); break; case 0x04: strncpy(device_temp_string,(const char *)"呼叫服务",sizeof("呼叫服务")); break; case 0x05: strncpy(device_temp_string,(const char *)"洗衣服务",sizeof("洗衣服务")); break; case 0x06: strncpy(device_temp_string,(const char *)"退房服务",sizeof("退房服务")); break; case 0x07: strncpy(device_temp_string,(const char *)"稍后服务",sizeof("稍后服务")); break; case 0x08: strncpy(device_temp_string,(const char *)"SOS服务",sizeof("SOS服务")); break; case 0x09: strncpy(device_temp_string,(const char *)"送餐服务",sizeof("送餐服务")); break; case 0x0A: strncpy(device_temp_string,(const char *)"开锁服务",sizeof("开锁服务")); break; case 0x0B: strncpy(device_temp_string,(const char *)"行李服务",sizeof("行李服务")); break; case 0x0C: strncpy(device_temp_string,(const char *)"保险箱服务",sizeof("保险箱服务")); break; case 0x0D: strncpy(device_temp_string,(const char *)"门磁服务",sizeof("门磁服务")); break; default: strncpy(device_temp_string,(const char *)"自定义服务",sizeof("自定义服务")); break; } #endif return device_temp_string; } __attribute__((section(".non_0_wait"))) char *Logic_Data_Music_folder_To_String(uint8_t id) { memset(device_temp_string,0,sizeof(device_temp_string)); #if LOGIC_DEBUG_INFO_EN switch(id) { case BLV_C5MUSIC_Music_Dir: strncpy(device_temp_string,(const char *)"音乐",sizeof("音乐")); break; case BLV_C5MUSIC_Warning_Dir: strncpy(device_temp_string,(const char *)"提示音",sizeof("提示音")); break; case BLV_C5MUSIC_Helpsleep_Dir: strncpy(device_temp_string,(const char *)"助眠",sizeof("助眠")); break; case BLV_C5MUSIC_Doorbell_Dir: strncpy(device_temp_string,(const char *)"门铃",sizeof("门铃")); break; case BLV_C5MUSIC_Greet_Dir: strncpy(device_temp_string,(const char *)"欢迎词",sizeof("欢迎词")); break; case BLV_C5MUSIC_Helpsleep1_Dir: strncpy(device_temp_string,(const char *)"助眠冥想",sizeof("助眠冥想")); break; case BLV_C5MUSIC_Helpsleep2_Dir: strncpy(device_temp_string,(const char *)"助眠海浪",sizeof("助眠海浪")); break; case BLV_C5MUSIC_Helpsleep3_Dir: strncpy(device_temp_string,(const char *)"助眠森林",sizeof("助眠森林")); break; default: strncpy(device_temp_string,(const char *)"未知文件夹",sizeof("未知文件夹")); break; } #endif return device_temp_string; } /******************************************************************************* * Function Name : Logic_FrameType_DeviceAction_TempProcessing * Description : 逻辑文件中 - 设备动作数据解析 - 8Byte * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_Device_Action_Data_Analysis(uint8_t *data) { #if LOGIC_DEBUG_INFO_EN LOGIC_DEVICE_ACTIVE_G temp_active; memcpy(&temp_active,data,sizeof(LOGIC_DEVICE_ACTIVE_G)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"****************************"); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制设备类型:%d - %s",temp_active.type,Logic_Info_DeviceType_To_String(temp_active.type)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制设备地址:%d",temp_active.addr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制回路:%d",temp_active.loop); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制设备执行方式:%d",temp_active.execute); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制设备执行内容:%d",temp_active.content); Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"控制动作详细解析:",temp_active.addr); switch(temp_active.type) { case Dev_Host_Invalid: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开\r\n"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关\r\n"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case Dev_Host_HVout: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开\r\n"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关\r\n"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case Dev_Host_LVinput: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"弱电输入没有控制内容\r\n"); break; case Dev_Host_LVoutput: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 调光亮度值:%d\r\n",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 调光亮度值:%d\r\n",temp_active.content); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"对应场景 调光亮度值:%d\r\n",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case Dev_Host_Service: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"%s ",Logic_Data_Service_Info_To_String(temp_active.loop)); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开\r\n",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关\r\n",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case Dev_NodeCurtain: switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"窗帘开\r\n",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"窗帘关\r\n",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case DEV_RS485_SWT: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开关背光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 调光亮度值:%d\r\n",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 调光亮度值:%d\r\n",temp_active.content); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"与场景有关 调光亮度值:%d\r\n",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case DEV_RS485_TEMP: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"空调控制状态:"); { uint8_t temp_1 = 0; uint8_t tempstate = temp_active.execute; temp_1 = (tempstate >> 6) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开机 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关机"); break; } temp_1 = (tempstate >> 4) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"制冷 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"制热 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"送风 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } temp_1 = (tempstate >> 2) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"低速 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"中速 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"高速 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } temp_1 = (tempstate >> 0) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"低速 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"中速 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"高速 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"设置温度:%d\r\n",temp_active.content); } break; case DEV_RS485_INFRARED: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"红外感应没有控制内容\r\n"); break; case DEV_RS485_AirDetect: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"空气检测没有控制内容\r\n"); break; case DEV_RS485_CARD: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"插卡取电没有控制内容\r\n"); break; case DEV_RS485_HEATER: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"地暖控制状态:"); { uint8_t temp_1 = 0; uint8_t tempstate = temp_active.execute; temp_1 = (tempstate >> 6) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开机 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关机"); break; } temp_1 = (tempstate >> 4) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"制冷 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"制热 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"送风 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } temp_1 = (tempstate >> 2) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"低速 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"中速 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"高速 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } temp_1 = (tempstate >> 0) & 0x03; switch(temp_1) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"低速 "); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"中速 "); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"高速 "); break; case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"自动 "); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"设置温度:%d\r\n",temp_active.content); } break; case Dev_RCU_NET: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"RCU设备网络没有控制内容\r\n"); break; case DEV_RS485_CURTAIN: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"窗帘没有控制内容\r\n"); break; case DEV_RS485_RELAY: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"继电器回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开\r\n"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关\r\n"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误\r\n"); break; } break; case DEV_RS485_IR_SEND: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"红外发送-%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 "); switch(temp_active.content) { case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"转发内容"); break; case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"静音"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"待机"); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量加"); break; case 0x04: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量减"); break; case 0x05: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"频道加"); break; case 0x06: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"频道减"); break; case 0x07: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"上"); break; case 0x08: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"下"); break; case 0x09: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"左"); break; case 0x0A: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"右"); break; case 0x0B: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"OK"); break; case 0x0C: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"主页"); break; case 0x0D: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"菜单"); break; case 0x0E: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"信源"); break; case 0x0F: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"回看"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"参数错误"); break; } break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 "); switch(temp_active.content) { case 0x00: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"转发内容"); break; case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"静音"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"待机"); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量加"); break; case 0x04: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量减"); break; case 0x05: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"频道加"); break; case 0x06: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"频道减"); break; case 0x07: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"上"); break; case 0x08: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"下"); break; case 0x09: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"左"); break; case 0x0A: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"右"); break; case 0x0B: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"OK"); break; case 0x0C: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"主页"); break; case 0x0D: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"菜单"); break; case 0x0E: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"信源"); break; case 0x0F: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"回看"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"内容不对"); break; } break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"匹配 "); switch(temp_active.content) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"空调"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"电视"); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"内容不对"); break; } break; case 0x04: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"电视 "); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"频道:%d ",temp_active.content); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_DIMMING: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"直流调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; case 0x07: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向上循环"); break; case 0x08: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向下循环"); break; case 0x09: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"停止调光"); break; case 0x0A: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向上调光 亮度:%d",temp_active.content); break; case 0x0B: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向下调光 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_TRAIC: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"可控硅调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_STRIP: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"灯带调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_CoreCtrl: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"中控没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_WxLock: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"微信锁没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_MUSIC: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"背景音乐:%d ",temp_active.loop); { uint8_t function = temp_active.execute & 0x0F; uint8_t function_para = (temp_active.execute >> 4) & 0x0F; switch(function) { case 0x00: switch(function_para) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开始播放"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"停止播放"); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"上一曲"); break; case 0x04: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"下一曲"); break; case 0x05: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量加"); break; case 0x06: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"音量减"); break; case 0x07: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"设置音乐音量:%d",temp_active.content); break; case 0x08: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"设置提示音音量:%d",temp_active.content); break; case 0x09: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"设置门铃音量:%d",temp_active.content); break; } break; case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开机"); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关机"); break; case 0x03: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"场景开时播放 %s-%d",Logic_Data_Music_folder_To_String(function_para),temp_active.content); break; case 0x04: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"场景关时播放 %s-%d",Logic_Data_Music_folder_To_String(function_para),temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_NET_ROOMSTATE: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"房态下发没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case Dev_Host_PWMLight: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"主机本地调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_PWM: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"485PWM调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; case 0x07: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向上循环"); break; case 0x08: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向下调光"); break; case 0x09: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"停止调光"); break; case 0x0A: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向上调光 亮度:%d",temp_active.content); break; case 0x0B: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"向下调光 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_PB_LED: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"PB总线调光回路:%d ",temp_active.loop); switch(temp_active.execute) { case 0x01: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"开 亮度:%d",temp_active.content); break; case 0x02: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"关 亮度:%d",temp_active.content); break; default: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"执行方式与内容不对"); break; } Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RCU_POWER: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"RCU电源没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_A9_IO_SWT: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"A9IO开关没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_A9_IO_EXP: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"A9IO扩展没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_A9_IO_POWER: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"A9IO电源没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_RFGatewayCycle: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"无线网关轮询没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_RFGatewayHost: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"无线网关主动没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_RFGatewayDoor: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"无线门磁没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_AirReveal: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"空气参数没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case DEV_RS485_RFGatewayRelayPir: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"无线继电器红外没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case Dev_Host_TimeCtrl: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"时间同步没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case Dev_Rs458_MonitorCtrl: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"监控控制没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case Dev_Rs458_RotaryCtrl: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"旋钮开关控制没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; case Dev_BUS_C5IO: Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"BLV_CSIO没有控制内容"); Dbg_NoTick_Print(DBG_BIT_LOGIC_STATUS_bit,"\r\n"); break; } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"执行延时时间:%d%s",temp_active.delay_time,Logic_Device_DelayUnit_To_String(temp_active.delay_unit)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"****************************"); #endif } /******************************************************************************* * Function Name : Logic_FrameType_DeviceAction_TempProcessing * Description : 逻辑文件中 - 设备动作 临时处理 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceAction_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { char temp_str[38] = {0}; uint32_t temp_len = 0; uint32_t temp_data = 0; uint8_t temp_num = 0; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); Lfile_info->active_num += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备类型:%d - %s",temp_data,Logic_Info_DeviceType_To_String(temp_data)); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备地址:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"事件编号:%d",temp_data); temp_len += 2; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入回路:%d",temp_data); temp_len += 2; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入事件:0x%04x",temp_data); temp_len += 2; temp_data = data[temp_len]; Logic_Info_DeviceAction_Condition_To_String(&data[temp_len]); //动作条件解析 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件1:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件2:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件3:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件4:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件5:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件6:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件7:%02X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件8:%02X",temp_data); temp_len += 1; temp_len += 32; //2022-05-29 增加条件保留32Byte temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行方式:%02X",temp_data); temp_len += 1; strncpy(temp_str,(const char *)&data[temp_len],32); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作别名:%s",temp_str); Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"动作别名数据" ,&data[temp_len],32); temp_len += 32; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景编号:%d",temp_data); temp_len += 2; //场景编号 temp_len += 32; //2022-05-29 保留 temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输出动作数:%02X",temp_data); temp_len += 1; if((temp_len + temp_data*8) > len) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输出动作数长度不对:%d - %d",temp_len + temp_data*8,len); return ; } temp_num = temp_data; //解析动作 for(uint16_t i=0;ivoicemap_num += 1; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); // temp_data = data[temp_len]; // Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"词条总数:%d ",temp_data); // temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"词条输入类型:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"词条输入地址:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制类型:%d - %s",temp_data,Logic_Info_DeviceType_To_String(temp_data)); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制地址:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"控制回路:%d",temp_data); temp_len += 2; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前词条下标:%d",Lfile_info->voicemap_num); Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit, "当前词条对应关系:", data, 6); if(Dev_Host_Invalid != data[0]) //不是场景 { if( (0x00 != data[4]) && (data[2]!=Dev_Host_Invalid) ) { data[4]--; } } //Voice_Map_Dev_Add(&data[0]); } #if RS485_PB20Fun_Flag /******************************************************************************* * Function Name : Logic_FrameType_DevCheckMap_TempProcessing * Description : 逻辑文件中 - 巡检设备回路添加 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DevCheckMap_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; uint32_t temp_data = 0; Lfile_info->devcheckmap_num += 1; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"巡检设备类型:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"巡检设备地址:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"巡检设备回路:%d",temp_data); temp_len += 2; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备功率下限:%d W",temp_data); temp_len += 2; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备功率上限:%d W",temp_data); temp_len += 2; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前巡检下标:%d",Lfile_info->devcheckmap_num); Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit, "当前巡检设备详情:", data, 8); Dev_Check_Map_Add(&data[0]); } #endif /******************************************************************************* * Function Name : Logic_FrameType_VCCondition_TempProcessing * Description : 逻辑文件中 - 无卡取电条件信息添加 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_VCCondition_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; uint32_t temp_data = 0; uint32_t list_addr = 0; uint8_t condata[len + 4]; //条件信息 + 4个字节时间戳 memset(condata, 0 , sizeof(condata)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 有人无人标记:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 条件组:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 条件序号:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 延时时间:%d",temp_data); temp_len += 2; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 延时单位:%d",temp_data); temp_len += 1; for(uint8_t i = 0; i < 11; i++) { temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 端口%02d状态:%d",i,temp_data); temp_len += 1; } temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 超时时间:%d",temp_data); temp_len += 2; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电条件 超时单位:%d",temp_data); temp_len += 1; if(data[0] == 0x01) //无人至有人逻辑标记 { if(DevActionGlobal.VC_ConNToSSubset < (VC_CONDSUB_MAX * VC_CONDGROUP_MAX / 2)) { list_addr = SRAM_VCard_ConNToS_Start_Addr + DevActionGlobal.VC_ConNToSSubset * sizeof(CONDITION_STRUCT); //拿到新地址 memcpy(condata,data,len); SRAM_DMA_Write_Buff(condata, sizeof(CONDITION_STRUCT), list_addr); //接着写入数据 DevActionGlobal.VC_ConNToSSubset++; if((data[1] > DevActionGlobal.VC_ConNToSGruop) && (data[1] <= VC_CONDGROUP_MAX)) { DevActionGlobal.VC_ConNToSGruop = data[1]; } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 无人至有人条件添加成功,当前条件地址:%08X 当前条件计数:%d ",list_addr ,DevActionGlobal.VC_ConNToSSubset); } else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 无人至有人条件超过数量上限"); } } else if( (data[0] == 0x02) || (data[0] == 0x03) || (data[0] == 0x04) ) //有人至无人逻辑标记 { if(DevActionGlobal.VC_ConSToNSubset < (VC_CONDSUB_MAX * VC_CONDGROUP_MAX / 2)) { list_addr = SRAM_VCard_ConSToN_Start_Addr + DevActionGlobal.VC_ConSToNSubset * sizeof(CONDITION_STRUCT); //拿到新地址 memcpy(condata,data,len); SRAM_DMA_Write_Buff(condata, sizeof(CONDITION_STRUCT), list_addr); //接着写入数据 DevActionGlobal.VC_ConSToNSubset++; if((data[1] > DevActionGlobal.VC_ConSToNGruop) && (data[1] <= VC_CONDGROUP_MAX)) { DevActionGlobal.VC_ConSToNGruop = data[1]; } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 有人至无人条件添加成功,当前条件地址:%08X 当前条件计数:%d ",list_addr ,DevActionGlobal.VC_ConSToNSubset); } else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 有人至无人条件超过数量上限"); } } } /******************************************************************************* * Function Name : Logic_FrameType_VCPortInfor_TempProcessing * Description : 逻辑文件中 - 无卡取电映射端口信息添加 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_VCPortInfor_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; uint32_t temp_data = 0; uint32_t list_addr = 0; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 映射端口类型:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 映射端口地址:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 映射端口回路:%d",temp_data); temp_len += 2; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 端口触发阈值:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 虚拟端口号:%d",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 启用统计标记:%d",temp_data); temp_len += 1; if(DevActionGlobal.VC_PortNum < VIRTUAL_PORT_MAX) { list_addr = SRAM_VCard_PortInf_Start_Addr + DevActionGlobal.VC_PortNum * sizeof(VPORT_INFO_STRUCT); //拿到新地址 SRAM_DMA_Write_Buff(data,sizeof(VPORT_INFO_STRUCT), list_addr); //接着写入数据 DevActionGlobal.VC_PortNum++; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 映射添加成功,当前端口地址:%08X 当前端口计数:%d ",list_addr ,DevActionGlobal.VC_PortNum); // } else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电映射端口超过数量上限: %d", VIRTUAL_PORT_MAX); } } /******************************************************************************* * Function Name : Logic_FrameType_VCProperty_TempProcessing * Description : 逻辑文件中 - 无卡取电公共属性添加 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_VCProperty_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; uint32_t temp_data = 0; uint32_t list_addr = 0; uint8_t tempflag = 0x00; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 窗口检测启用标记:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 窗口检测时间:%d",temp_data); temp_len += 2; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 检测时间单位:%d",temp_data); temp_len += 1; /*窗口检测时间 不超过10个小时*/ switch(data[3]) { case 0x01: //秒 if(Data_Uint8_Convert_To_Uint16(&data[1]) <= (60 * 60 * 10)) { tempflag = 0x01; } break; case 0x02: //分 if(Data_Uint8_Convert_To_Uint16(&data[1]) <= (60 * 10)) { tempflag = 0x01; } break; case 0x03: //时 if(Data_Uint8_Convert_To_Uint16(&data[1]) <= 10) { tempflag = 0x01; } break; } temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 按键触发无人至有人启用标志:%d",temp_data); temp_len += 1; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 最后一步超时时间:%d",temp_data); temp_len += 2; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电 最后一步超时时间单位:%d",temp_data); temp_len += 1; if(tempflag == 0x01) { list_addr = SRAM_VCard_Property_Start_Addr; if(len < 1024) { SRAM_DMA_Write_Buff(data, len, list_addr); //接着写入数据 } } else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"无卡取电检测时间超过上限"); } } /******************************************************************************* * Description : 逻辑文件中 - 色温调节端口映射信息 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_ColorTempMap_TempProcessing( uint32_t data_addr, LOGICFILE_Content_Of_Statistical *Lfile_info, uint8_t *data, uint16_t len) { uint32_t temp_len = 0; uint32_t temp_data = 0; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); Lfile_info->ColorTemp_Map_Addr = data_addr; //将该包数据先记录下来,等设备初始化完成后,在进行添加 temp_data = data[temp_len++]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"色温设备地址:%d",temp_data); temp_data = data[temp_len++]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"色温回路映射数量:%d",temp_data); } /******************************************************************************* * Function Name : LOGIC_FILE_Analysis * Description : 逻辑文件读取到SRAM中 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void LOGIC_FILE_Analysis(LOGICFILE_Content_Of_Statistical *Lfile_info,uint32_t data_len) { uint32_t read_addr = 0; uint8_t temp_data[4] = {0}; uint16_t temp_frame_num = 0; //逻辑总包数 uint16_t temp_frame_id = 0; //逻辑当前数 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LOGIC_FILE_Analysis Len:%d",data_len); read_addr = SPIFLASH_LOGIC_DataStart_ADDRESS; for(uint32_t i=0;idevice_num <= device_Init_num) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"Logic File 设备初始化完毕"); break; } } read_addr+=temp_len-1; i+=temp_len - 1; }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CRC校验失败!"); } }else{ Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"读取数据长度不在范围内:%08X - %d",read_addr,temp_len); } }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"不是逻辑文件数据包头! %d - %08x",i,read_addr); } read_addr++; } } /******************************************************************************* * Function Name : SRAM_Dev_Data_Check * Description : SRAM 设备数据校验 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void SRAM_Dev_Data_Check(void) { uint16_t i; //遍历设备 uint32_t Dev_processing_addr; Device_Public_Information_G BUS_Public; //公有全局数据 for(i = 0; i < DevActionGlobal.DevNum; i++) { Dev_processing_addr = SRAM_Device_List_Start_Addr + i*SRAM_Device_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), Dev_processing_addr); //拷贝所有公有数据 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前设备下标:%d,地址:%08X,设备类型:%d,设备地址:%d", i, Dev_processing_addr, BUS_Public.type, BUS_Public.addr); Dbg_Print_Buff(DBG_BIT_NET_STATUS_bit,"BUS_Public Data:",(uint8_t *)&BUS_Public, sizeof(BUS_Public)); } } /******************************************************************************* * Function Name : LOGIC_FILE_Check * Description : 逻辑文件读取到SRAM中 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) { uint32_t temp = 0; uint32_t file_len = 0; uint8_t file_info[24]; uint8_t md5[16]; LOGICFILE_Content_Of_Statistical Lfile_stat; memset(md5,0,sizeof(md5)); memset(file_info,0,sizeof(file_info)); memset(&Lfile_stat,0,sizeof(LOGICFILE_Content_Of_Statistical)); //文件统计 //读取MD5值并校验 Flash_Read(file_info,24,SPIFLASH_LOGIC_DataFlag_ADDRESS); temp = file_info[3]; temp <<= 8; temp |= file_info[2]; temp <<= 8; temp |= file_info[1]; temp <<= 8; temp |= file_info[0]; if(temp == LOGIC_DataFlag) { file_len = file_info[7]; file_len <<= 8; file_len |= file_info[6]; file_len <<= 8; file_len |= file_info[5]; file_len <<= 8; file_len |= file_info[4]; if((file_len != 0x00) &&(file_len >= 0x70000)) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件长度不对:%08X",file_len); return 0x01; } MD5Digest_FLASH(SPIFLASH_LOGIC_DataStart_ADDRESS, file_len,(char *)&md5[0]); if(0==strncmp((const char *)md5,(const char *)&file_info[8],16)) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5校验成功!"); }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"MD5校验错误,不作处理 Len:%08X",file_len); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"升级配置失败,Md5错误:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X%02X,%02X,%02X,%02X,%02X,%02X",md5[0],md5[1],md5[2],md5[3],md5[4],md5[5],md5[6],md5[7],md5[8],md5[9],md5[10],md5[11],md5[12],md5[13],md5[14],md5[15]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"UDP Md5:%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X",\ file_info[8],file_info[9],\ file_info[10],file_info[11],\ file_info[12],file_info[13],\ file_info[14],file_info[15],\ file_info[16],file_info[17],\ file_info[18],file_info[19],\ file_info[21],file_info[21],\ file_info[22],file_info[23]); return 0x01; } /*文件解析 - 先全部遍历一遍,找到所以的数据类型*/ LOGIC_FILE_Analysis(&Lfile_stat,file_len); }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件标志位不符,不作处理:%08X",temp); } Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--------------------"); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备存在总数:%d",Lfile_stat.device_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--BUS设备存在:%d",Lfile_stat.Bus_device_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--Polling设备存在:%d",Lfile_stat.Polling_device_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--Active设备存在:%d",Lfile_stat.Active_device_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--普通设备存在:%d",Lfile_stat.Nor_device_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--------------------"); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备动作总数:%d",Lfile_stat.active_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--------------------"); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"映射表总数:%d",Lfile_stat.voicemap_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"巡检表总数:%d",Lfile_stat.devcheckmap_num); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"--------------------"); /*将逻辑表中的设备进行初始化*/ memset((void *)&BUS485_Info,0,sizeof(BLV_BUS_Manage_G)); memset((void *)&Poll485_Info,0,sizeof(BLV_POLL_Manage_G)); memset((void *)&Act485_Info,0,sizeof(BLV_ACTIVE_Manage_G)); SRAM_Write_DW(SRAM_Device_List_Start_Addr,SRAM_BUS_Device_List_Addr); //添加BUS设备 for(uint8_t i=0;i