/* * logic_file_function.c * * Created on: Nov 11, 2025 * Author: cc */ #include "includes.h" #include #include #define LOGIC_DEBUG_INFO_EN 1 /******************************************************************************* * 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 + DevActionInfo_DevActionState_DevAddrIn_Index; if(SRAM_Read_DW(DevActionAddr) == 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; BLV_Device_PublicInfo_Read_To_Struct(Dev_processing_addr,&BUS_Public); BUS_Public.DevCoord = i; //拿到设备下标 Action_Coord_Get(Dev_processing_addr, &BUS_Public); //拿到动作下标 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前设备准备重新保存,地址:%X,设备类型:%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:%X", DevHVoutInfo.DevC5IOAddr); BLV_Device_Info_Write_To_SRAM(Dev_processing_addr, &BUS_Public, (uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO)); }else { BLV_Device_PublicInfo_Update_To_Struct(Dev_processing_addr,&BUS_Public); } break; default: /*重新保存当前设备*/ BLV_Device_PublicInfo_Update_To_Struct(Dev_processing_addr,&BUS_Public); break; } } } /******************************************************************************* * 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; if(DevAction_Info_Read_To_Struct(list_addri, &DevActionInfoi) != 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验未通过:%x",list_addri); continue; } DevActionInfoi.DevActionState.DevAddrIn = Find_AllDevice_List_Information(DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备输入地址:%x", DevActionInfoi.DevCtrlNum, \ DevActionInfoi.DevActionInput.DevType, \ DevActionInfoi.DevActionInput.DevAddr, \ DevActionInfoi.DevActionState.DevAddrIn); for(j = 0; j < DevActionGlobal.DevActionNum ; j++) { if( j != i ) { list_addrj = SRAM_DevAction_List_Start_Addr + j * SRAM_DevAction_List_Size; if(DevAction_Info_Read_To_Struct(list_addrj, &DevActionInfoj) != 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验未通过:%x",list_addrj); continue; } 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.DevLoop == DevActionInfoj.DevActionInput.DevLoop ) && ( DevActionInfoi.DevActionInput.DevEvent == DevActionInfoj.DevActionInput.DevEvent ) ) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作地址:%X,之前动作地址:%X", 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 多联起始地址:%X 多联下标:%d", DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionInput.DevLoop, 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 多联当前地址:%X 多联下标:%d", DevActionInfoj.DevActionInput.DevAddr, DevActionInfoj.DevActionInput.DevLoop, list_addrj, DevActionInfoj.DevActionState.MultiNumber); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"因为多联下标置位准备重新保存,地址:%X", list_addrj); DevAction_Info_Write_To_SRAM(list_addrj, &DevActionInfoj); //保存动作数据 DevAdd = Find_AllDevice_List_Information2(Active_Port, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); if(DevAdd != 0x00) { BLV_Device_PublicInfo_Read_To_Struct(DevAdd,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); if(DevActionInfoi.DevActionState.MultiValidNo <= 127) { Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.DevLoop] = DevActionInfoi.DevActionState.MultiValidNo; } BLV_Device_Info_Write_To_SRAM(DevAdd,&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%d 多联开关,回路:%d 有效联数:%d", DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionInput.DevLoop, Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.DevLoop]); } } } }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,"当前场景动作包含场景,地址:%X 包含的场景地址:%X 下标:%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,SRAM存储地址:%x", 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,"当前场景动作包含延时控制,准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%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,"当前场景动作包含延时场景控制,准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", list_addri, i, DevActionInfoi.DevActionOutput[k].DevDlyAddr, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); } }else { DevActionInfoi.DevActionOutput[k].DevDlyAddr = 0x00; //控制扩展设备未延时的,先清空延时节点。后面再重新遍历,再赋值延时设备信息 } } DevAction_Info_Write_To_SRAM(list_addri, &DevActionInfoi); //保存动作数据 } } /******************************************************************************* * 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; if(DevAction_Info_Read_To_Struct(list_addr, &DevActionInfo) != 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验未通过:%x",list_addr); continue; } 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,"当前场景动作包含场景,准备重新保存,地址:%X 场景地址:%X 下标:%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 ) { DevAction_Info_Write_To_SRAM(list_addr, &DevActionInfo); //保存动作数据 } } } /******************************************************************************* * Function Name : Expand_DevDly_Get * Description : 设备动作数据初始化 * 为不带延时的的扩展设备进行延时节点赋值,为带延时的场景,进行地址赋值。 为控制场景的设备进行地址得到 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Expand_DevDly_Get(void) { uint8_t KeepFlag = 0x00; uint16_t i = 0,j = 0; uint32_t list_addr = 0; DEV_ACTION_INFO DevActionInfo; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开始遍历所有的动作 动作个数:%d, 动作的起始地址:%X",DevActionGlobal.DevActionNum, SRAM_DevAction_List_Start_Addr); for(i = 0; i < DevActionGlobal.DevActionNum; i++) { KeepFlag = 0x00; list_addr = SRAM_DevAction_List_Start_Addr + i*SRAM_DevAction_List_Size; if(DevAction_Info_Read_To_Struct(list_addr, &DevActionInfo) != 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验未通过:%x",list_addr); continue; }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验通过:%x",list_addr); } for(j = 0; j < DevActionInfo.DevCtrlNum; j++) { if( DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevDlyValue.DelayCont == 0x00 ) { DevActionInfo.DevActionOutput[j].DevDlyAddr = DevDlyAddr_Get(DevActionInfo.DevActionOutput[j].DevActionOutAddr, DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevOutputLoop); if(DevActionInfo.DevActionOutput[j].DevDlyAddr != 0x00) { KeepFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", list_addr, i, DevActionInfo.DevActionOutput[j].DevDlyAddr, DevActionInfo.DevActionOutput[j].DevActionOutAddr, DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevOutputLoop); } } } if(KeepFlag == 0x01) { DevAction_Info_Write_To_SRAM(list_addr, &DevActionInfo); //保存动作数据 } } } /******************************************************************************* * Function Name : BLV_DevAction_AllData_Init * Description : 设备动作数据初始化 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void BLV_DevAction_AllData_Init(void) { memset((void *)&BUS485_Info,0,sizeof(BLV_BUS_Manage_G)); memset(&Poll485_Info,0,sizeof(BLV_POLL_Manage_G)); memset((void *)&Act485_Info,0,sizeof(BLV_ACTIVE_Manage_G)); memset((void *)&NorDevInfoGlobal,0,sizeof(BLV_NORDEV_Manage_G)); memset((void *)&DevActionGlobal,0,sizeof(BLV_DevAction_Manage_G)); //全局参数全部清0 BUS485_Info.port_mode = Port_Normal_Mode; //SRAM_PowerOn_Restore_ParaInfo(); DevAction_CondData_Init(); //动作条件参数数据初始化 LOGIC_FILE_Check(); DevAction_ReuseFlag_Get(); //复用标志置位 触发节点和扩展设备重新得到 带延时的扩展设备 需要新增到设备链表 Expand_DevDly_Get(); /*为不带延时的的扩展设备进行延时节点赋值*/ Dev_Coord_Get(); //拿到设备下标和动作下标 DevActionGlobal.DevLockAddr = Find_AllDevice_List_Information(DEV_RS485_WxLock, DevActionGlobal.Lock485Addr); // DevActionGlobal.pc_addr = Find_Device_List_Information(DEV_PCTEST_TYPE,DEV_PCTEST_Addr); } /******************************************************************************* * Function Name : Flash_read_Byte * Description : 从外部SPI Flash中读取一个字节 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t Flash_read_Byte(uint32_t addr) { uint8_t data[2] = {0}; Flash_Read(data,1,addr); return data[0]; } /******************************************************************************* * Function Name : Data_Uint8_Convert_To_Uint32 * Description : 将uint8_t 数组转换为uint32_t *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint32_t Data_Uint8_Convert_To_Uint32(uint8_t *data) { uint32_t rev_data = 0; rev_data = data[3]; rev_data <<= 8; rev_data |= data[2]; rev_data <<= 8; rev_data |= data[1]; rev_data <<= 8; rev_data |= data[0]; return rev_data; } /******************************************************************************* * Function Name : Data_Uint8_Convert_To_Uint16 * Description : 将uint8_t 数组转换为uint16_t *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint16_t Data_Uint8_Convert_To_Uint16(uint8_t *data) { uint16_t rev_data = 0; rev_data = data[1]; rev_data<<=8; rev_data |= data[0]; return rev_data; } /******************************************************************************* * Function Name : Logic_Info_DeviceType_To_String * Description : 配置逻辑-设备类型转换为字符串 *******************************************************************************/ char device_temp_string[32] = {0}; __attribute__((section(".non_0_wait"))) char *Logic_Info_DeviceType_To_String(uint8_t type) { memset(device_temp_string,0,sizeof(device_temp_string)); #if LOGIC_DEBUG_INFO_EN switch(type) { case Dev_Host_Invalid: strncpy(device_temp_string,(const char *)"场景",sizeof("场景")); break; case Dev_Host_HVout: strncpy(device_temp_string,(const char *)"强电继电器",sizeof("强电继电器")); break; case Dev_Host_LVinput: strncpy(device_temp_string,(const char *)"弱电输入",sizeof("弱电输入")); break; case Dev_Host_LVoutput: strncpy(device_temp_string,(const char *)"弱电输出",sizeof("弱电输出")); break; case Dev_Host_Service: strncpy(device_temp_string,(const char *)"服务信息",sizeof("服务信息")); break; case Dev_NodeCurtain: strncpy(device_temp_string,(const char *)"干节点窗帘",sizeof("干节点窗帘")); break; case DEV_RS485_SWT: strncpy(device_temp_string,(const char *)"开关",sizeof("开关")); break; case DEV_RS485_TEMP: strncpy(device_temp_string,(const char *)"空调",sizeof("空调")); break; case DEV_RS485_INFRARED: strncpy(device_temp_string,(const char *)"红外",sizeof("红外")); break; case DEV_RS485_AirDetect: strncpy(device_temp_string,(const char *)"空气检测",sizeof("空气检测")); break; case DEV_RS485_CARD: strncpy(device_temp_string,(const char *)"插卡取电",sizeof("插卡取电")); break; case DEV_RS485_HEATER: strncpy(device_temp_string,(const char *)"地暖",sizeof("地暖")); break; case Dev_RCU_NET: strncpy(device_temp_string,(const char *)"RCU设备网络",sizeof("RCU设备网络")); break; case DEV_RS485_CURTAIN: strncpy(device_temp_string,(const char *)"窗帘",sizeof("窗帘")); break; case DEV_RS485_RELAY: strncpy(device_temp_string,(const char *)"继电器",sizeof("继电器")); break; case DEV_RS485_IR_SEND: strncpy(device_temp_string,(const char *)"红外发送",sizeof("红外发送")); break; case DEV_RS485_DIMMING: strncpy(device_temp_string,(const char *)"直流调光",sizeof("直流调光")); break; case DEV_RS485_TRAIC: strncpy(device_temp_string,(const char *)"可控硅调光",sizeof("可控硅调光")); break; case DEV_RS485_STRIP: strncpy(device_temp_string,(const char *)"灯带",sizeof("灯带")); break; case DEV_RS485_CoreCtrl: strncpy(device_temp_string,(const char *)"中控",sizeof("中控")); break; case DEV_RS485_WxLock: strncpy(device_temp_string,(const char *)"微信锁",sizeof("微信锁")); break; case DEV_RS485_MUSIC: strncpy(device_temp_string,(const char *)"背景音乐",sizeof("背景音乐")); break; case DEV_NET_ROOMSTATE: strncpy(device_temp_string,(const char *)"房态下发",sizeof("房态下发")); break; case Dev_Host_PWMLight: strncpy(device_temp_string,(const char *)"主机本地调光",sizeof("主机本地调光")); break; case DEV_RS485_PWM: strncpy(device_temp_string,(const char *)"485PWM调光",sizeof("485PWM调光")); break; case DEV_PB_LED: strncpy(device_temp_string,(const char *)"总线调光",sizeof("总线调光")); break; case DEV_RCU_POWER: strncpy(device_temp_string,(const char *)"RCU电源",sizeof("RCU电源")); break; case DEV_RS485_A9_IO_SWT: strncpy(device_temp_string,(const char *)"A9IO开关",sizeof("A9IO开关")); break; case DEV_RS485_A9_IO_EXP: strncpy(device_temp_string,(const char *)"A9IO扩展",sizeof("A9IO扩展")); break; case DEV_RS485_A9_IO_POWER: strncpy(device_temp_string,(const char *)"A9IO电源",sizeof("A9IO电源")); break; case DEV_RS485_RFGatewayCycle: strncpy(device_temp_string,(const char *)"无线网关轮询",sizeof("无线网关轮询")); break; case DEV_RS485_RFGatewayHost: strncpy(device_temp_string,(const char *)"无线网关主动",sizeof("无线网关主动")); break; case DEV_RS485_RFGatewayDoor: strncpy(device_temp_string,(const char *)"无线门磁",sizeof("无线门磁")); break; case DEV_RS485_AirReveal: strncpy(device_temp_string,(const char *)"空气参数显示",sizeof("空气参数显示")); break; case DEV_RS485_RFGatewayRelayPir: strncpy(device_temp_string,(const char *)"无线继电器红外",sizeof("无线继电器红外")); break; case Dev_Host_TimeCtrl: strncpy(device_temp_string,(const char *)"时间同步",sizeof("时间同步")); break; case Dev_Rs458_MonitorCtrl: strncpy(device_temp_string,(const char *)"监控控制",sizeof("监控控制")); break; case Dev_Rs458_RotaryCtrl: strncpy(device_temp_string,(const char *)"旋钮开关控制",sizeof("旋钮开关控制")); break; case Dev_BUS_C5IO: strncpy(device_temp_string,(const char *)"BLV_CSIO",sizeof("BLV_CSIO")); break; } #endif return device_temp_string; } /******************************************************************************* * Function Name : Logic_Info_DevicePort_To_String * Description : 配置逻辑-设备端口转换为字符串 *******************************************************************************/ __attribute__((section(".non_0_wait"))) char *Logic_Info_DevicePort_To_String(uint8_t type) { memset(device_temp_string,0,sizeof(device_temp_string)); #if LOGIC_DEBUG_INFO_EN switch(type) { case Polling_Port: strncpy(device_temp_string,(const char *)"Polling_Port",sizeof("Polling_Port")); break; case Active_Port: strncpy(device_temp_string,(const char *)"Active_Port",sizeof("Active_Port")); break; case Bus_port: strncpy(device_temp_string,(const char *)"Bus_port",sizeof("Bus_port")); break; } #endif return device_temp_string; } /******************************************************************************* * Function Name : Logic_Info_DeviceAction_Condition_To_String * Description : 配置逻辑-动作条件转换为字符串 *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_Info_DeviceAction_Condition_To_String(uint8_t *data) { LOGIC_ACTIVE_CONDITION_G temp_condition; memset(&temp_condition,0,sizeof(LOGIC_ACTIVE_CONDITION_G)); memcpy((char *)&temp_condition,(const char *)data,sizeof(LOGIC_ACTIVE_CONDITION_G)); #if LOGIC_DEBUG_INFO_EN switch(temp_condition.DevActionOutFlag) //动作输出使能 { case 0x00: //正常 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作输出使能 - 正常"); break; case 0x01: //锁定 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作输出使能 - 锁定"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作输出使能 - Error:%d",temp_condition.DevActionOutFlag); break; } switch(temp_condition.RoomState) //房态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - 不判断"); break; case 0x01: //出租 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - 出租"); break; case 0x02: //退房 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - 退房"); break; case 0x03: //待租 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - 待租"); break; case 0x04: //空房 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - 空房"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房态 - Error:%d",temp_condition.RoomState); break; } switch(temp_condition.EleCtrlFlag) //取电服务控制 { case 0x00: //不执行 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电服务控制 - 不执行"); break; case 0x01: //执行 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电服务控制 - 执行"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电服务控制 - Error:%d",temp_condition.EleCtrlFlag); break; } switch(temp_condition.EleState) //取电状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"取电状态 - Error:%d",temp_condition.EleState); break; } switch(temp_condition.DndState) //勿扰状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"勿扰状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"勿扰状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"勿扰状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"勿扰状态 - Error:%d",temp_condition.DndState); break; } switch(temp_condition.CleanState) //清理状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"清理状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"清理状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"清理状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"清理状态 - Error:%d",temp_condition.CleanState); break; } switch(temp_condition.CallState) //呼叫状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"呼叫状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"呼叫状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"呼叫状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"呼叫状态 - Error:%d",temp_condition.CallState); break; } switch(temp_condition.WashState) //洗衣状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"洗衣状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"洗衣状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"洗衣状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"洗衣状态 - Error:%d",temp_condition.WashState); break; } switch(temp_condition.CheckOutState) //退房状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退房状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退房状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退房状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退房状态 - Error:%d",temp_condition.CheckOutState); break; } switch(temp_condition.WaitState) //稍后状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"稍后状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"稍后状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"稍后状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"稍后状态 - Error:%d",temp_condition.WaitState); break; } switch(temp_condition.SosState) //SOS状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"SOS状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"SOS状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"SOS状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"SOS状态 - Error:%d",temp_condition.SosState); break; } switch(temp_condition.RentState) //预约待租状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"预约待租状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"预约待租状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"预约待租状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"预约待租状态 - Error:%d",temp_condition.RentState); break; } switch(temp_condition.LockState) //开锁状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开锁状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开锁状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开锁状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开锁状态 - Error:%d",temp_condition.LockState); break; } switch(temp_condition.LuggageState) //行李状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"行李状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"行李状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"行李状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"行李状态 - Error:%d",temp_condition.LuggageState); break; } switch(temp_condition.StrongState) //保险箱状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"保险箱状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"保险箱状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"保险箱状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"保险箱状态 - Error:%d",temp_condition.StrongState); break; } switch(temp_condition.DoorState) //门磁状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"门磁状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"门磁状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"门磁状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"门磁状态 - Error:%d",temp_condition.DoorState); break; } switch(temp_condition.WarningState) //提示音状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"提示音状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"提示音状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"提示音状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"提示音状态 - Error:%d",temp_condition.WarningState); break; } switch(temp_condition.BacklightState) //背光状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"背光状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"背光状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"背光状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"背光状态 - Error:%d",temp_condition.BacklightState); break; } switch(temp_condition.SeasonState) //季节 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - 不判断"); break; case 0x01: //春 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - 春"); break; case 0x02: //夏 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - 夏"); break; case 0x03: //秋 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - 秋"); break; case 0x04: //冬 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - 冬"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"季节 - Error:%d",temp_condition.SeasonState); break; } switch(temp_condition.TimeState) //时间 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时间 - 不判断"); break; case 0x01: //全天 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时间 - 全天"); break; case 0x02: //白天 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时间 - 白天"); break; case 0x03: //黑夜 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时间 - 黑夜"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时间 - Error:%d",temp_condition.TimeState); break; } switch(temp_condition.NeightState) //起夜状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"起夜状态 - 不判断"); break; case 0x01: //开 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"起夜状态 - 开"); break; case 0x02: //关 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"起夜状态 - 关"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"起夜状态 - Error:%d",temp_condition.NeightState); break; } switch(temp_condition.RcuLockState) //锁定状态 { case 0x00: //不判断 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"锁定状态 - 不判断"); break; case 0x01: //锁定 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"锁定状态 - 锁定"); break; case 0x02: //正常 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"锁定状态 - 正常"); break; default: Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"锁定状态 - Error:%d",temp_condition.RcuLockState); break; } #endif } /******************************************************************************* * Function Name : Logic_FrameType_LogicInfo_TempProcessing * Description : 逻辑文件中 - 逻辑信息 临时处理 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_LogicInfo_TempProcessing(uint8_t *data,uint16_t len) { uint16_t temp_len = 0; uint32_t temp_data = 0; char temp_str[36]; memset(temp_str,0,sizeof(temp_str)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); // #if LOGIC_DEBUG_INFO_EN strncpy(temp_str,(const char *)&data[temp_len],32); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑发布作者:%s",temp_str); temp_len += 32; memcpy(temp_str,&data[temp_len],4); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"配置软件版本:%d-%d-%d-%d",temp_str[0],temp_str[1],temp_str[2],temp_str[3]); temp_len += 4; strncpy(temp_str,(const char *)&data[temp_len],7); temp_data = temp_str[0]*256+temp_str[1]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑发布时间: %d-%d-%d %d:%d:%d \r\n",temp_data,temp_str[2],temp_str[3],temp_str[4],temp_str[5],temp_str[6]); temp_len += 7; strncpy(temp_str,(const char *)&data[temp_len],32); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"项目名称:%s",temp_str); temp_len += 32; temp_data = Data_Uint8_Convert_To_Uint32(&data[temp_len]); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"项目编号:%d",temp_data); temp_len += 4; strncpy(temp_str,(const char *)&data[temp_len],32); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"项目分组:%s",temp_str); temp_len += 32; strncpy(temp_str,(const char *)&data[temp_len],32); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"房型别名:%s",temp_str); temp_len += 32; strncpy(temp_str,(const char *)&data[temp_len],3); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑数据版本:%d-%d-%d",temp_str[0],temp_str[1],temp_str[2]); temp_len += 3; //机型名称 - 64Byte // strncpy(temp_str,(const char *)&data[temp_len],3); // Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑数据版本:%d-%d-%d",temp_str[0],temp_str[1],temp_str[2]); temp_len += 64; //时间偏移量 - 2Byte g_time_info.timezone = data[temp_len+1]; g_time_info.timezone <<= 8; g_time_info.timezone |= data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"时区偏移量:%d",g_time_info.timezone); // #endif } /******************************************************************************* * Function Name : Read_LogicFile_Information * Description : 读取逻辑文件信息 - 这个在Flash存储第一条数据便是这数据信息 - 有就有,没有那就没有 特别注意传递进来的buff数组够大,否则会导致数组越界 * Input : select : 0x00:查询全部信息 0x01:查询发布作者 - 32Byte 0x02:查询软件版本 - 4Byte 0x03:查询发布时间 - 7Byte 0x04:查询酒店名称 - 32Byte 0x05:查询酒店代号 - 4Byte 0x06:查询项目分组 - 32Byte 0x07:查询房型别名 - 32Byte 0x08:查询版本号 - 3Byte buff :存放数据地址 * Return : 0x00:查询成功 0x01:查询失败 *******************************************************************************/ #define LogicFile_InfoDetails_Len 0x92 #define LogicFile_InfoDetails_Author_Offset 0x0000 //发布作者 - 32Byte #define LogicFile_Infodetails_SWVersion_Offset 0x0020 //软件版本 - 4Byte #define LogicFile_Infodetails_ReleaseDate_Offset 0x0026 //发布时间 - 7Byte #define LogicFile_Infodetails_HotelName_Offset 0x002B //酒店名称 - 32Byte #define LogicFile_Infodetails_HotelCode_Offset 0x004B //酒店代号 - 4Byte #define LogicFile_Infodetails_HotelGroupName_Offset 0x004F //项目分组 - 32Byte #define LogicFile_Infodetails_HomeName_Offset 0x006F //房型别名 - 32Byte #define LogicFile_Infodetails_Version_Offset 0x008F //版本号 - 3Byte __attribute__((section(".non_0_wait"))) uint8_t Read_LogicFile_Information(uint8_t select,uint8_t *buff) { uint32_t temp = 0,file_len = 0; uint8_t md5[16]; uint8_t file_info[30]; uint8_t rev= 0x01; memset(file_info,0,sizeof(file_info)); memset(md5,0,sizeof(md5)); /*1、先读取逻辑文件标志位*/ 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) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件标志位不符,不作处理:%X",temp); return 0x01; } 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,"逻辑文件长度不对:%X",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:%X",file_len); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"升级配置失败,Md5错误:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X%X,%X,%X,%X,%X,%X",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:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ 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,"读取数据长度不在范围内:%X - %d",temp_len); } }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"不是逻辑文件数据包头!%X %X",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 : LogicFile_Device_Info_Struct_Assignment * Description : 逻辑文件中 - 设备存在信息结构体赋值 - *设备类型 - 1Byte - *设备地址 - 1Byte - *设备端口 - 1Byte - *设备波特率 - 4Byte - *设备协议版本 - 1Byte - *设备通讯重发次数 - 1Byte - *设备通讯等待时间 - 2Byte - *域控中控设备属性 - 4Byte - *父设备类型 - 1Byte - *父设备地址 - 1Byte - *父设备端口 - 1Byte - *无卡断电检测回路 - 5Byte - *私有属性 - 10Byte - *保留字节 - 42Byte - *设备输入回路数 - 1Byte - *设备输出回路数 - 1Byte * Return : *******************************************************************************/ uint8_t LogicFile_Device_Info_Struct_Assignment(uint8_t *data,LOGICFILE_DEVICE_INFO *dev_info) { dev_info->type = data[0]; dev_info->addr = data[1]; dev_info->port = data[2]; dev_info->baud = data[6]; dev_info->baud <<= 8; dev_info->baud |= data[5]; dev_info->baud <<= 8; dev_info->baud |= data[4]; dev_info->baud <<= 8; dev_info->baud |= data[3]; dev_info->version = data[7]; dev_info->retry = data[8]; dev_info->writ_time = data[10]; dev_info->writ_time <<= 8; dev_info->writ_time |= data[9]; memcpy(dev_info->ipaddr,&data[11],4); dev_info->parent_type = data[15]; dev_info->parent_addr = data[16]; dev_info->parent_port = data[17]; memcpy(dev_info->lin,&data[18],5); memcpy(dev_info->priproperty,&data[23],10); memcpy(dev_info->remain,&data[33],42); dev_info->input_num = data[76]; dev_info->input_num <<= 8; dev_info->input_num |= data[75]; dev_info->output_num = data[78]; dev_info->output_num <<= 8; dev_info->output_num |= data[77]; return 0x00; } /******************************************************************************* * 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__); if(len < LogicFile_DeviceInfo_InputSet) return; LogicFile_Device_Info_Struct_Assignment(data,&temp_dev_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)); temp_active.type = data[0]; temp_active.addr = data[1]; temp_active.loop = data[3]; temp_active.loop <<= 8; temp_active.loop |= data[2]; temp_active.execute = data[4]; temp_active.content = data[5]; temp_active.delay_time = data[6]; temp_active.delay_unit = data[7]; 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; 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%x",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:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件2:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件3:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件4:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件5:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件6:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件7:%X",temp_data); temp_len += 1; temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行条件8:%X",temp_data); temp_len += 1; temp_len += 32; //2022-05-29 增加条件保留32Byte temp_data = data[temp_len]; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行方式:%X",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,"输出动作数:%X",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 ; } Logic_DevAction_Add(data, len); } /******************************************************************************* * Function Name : Logic_FrameType_VoiceMap_TempProcessing * Description : 逻辑文件中 - 语音映射表 临时处理 * Input : * Return : *******************************************************************************/ __attribute__((section(".non_0_wait"))) void Logic_FrameType_VoiceMap_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->voicemap_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,"无卡取电条件 端口%d状态:%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,"无卡取电 无人至有人条件添加成功,当前条件地址:%X 当前条件计数:%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,"无卡取电 有人至无人条件添加成功,当前条件地址:%X 当前条件计数:%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,"无卡取电 映射添加成功,当前端口地址:%X 当前端口计数:%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,"读取数据长度不在范围内:%X - %d",read_addr,temp_len); } }else { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"不是逻辑文件数据包头! %d - %x",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; BLV_Device_PublicInfo_Read_To_Struct(Dev_processing_addr,&BUS_Public); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前设备下标:%d,地址:%X,设备类型:%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,"逻辑文件长度不对:%X",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:%X",file_len); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"升级配置失败,Md5错误:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",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:%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X,%X",\ 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