diff --git a/BLV_485_Driver/blv_nor_dev_lvoutput.c b/BLV_485_Driver/blv_nor_dev_lvoutput.c index 284a552..fbd0808 100644 --- a/BLV_485_Driver/blv_nor_dev_lvoutput.c +++ b/BLV_485_Driver/blv_nor_dev_lvoutput.c @@ -201,7 +201,7 @@ void Dev_LVoutput_Dis(uint32_t DevAddr) BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_PublicLVoutput,(uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO)); - BLV_Device_Info_Write_To_SRAM(DevLVoutputInfo.DevC5IOAddr+Dev_Privately,&BUS_PublicC5IO,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); + BLV_Device_Info_Write_To_SRAM(DevLVoutputInfo.DevC5IOAddr,&BUS_PublicC5IO,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } diff --git a/BLV_485_Driver/blv_not_dev_lvinput.c b/BLV_485_Driver/blv_not_dev_lvinput.c index 0b9b1d4..7972b22 100644 --- a/BLV_485_Driver/blv_not_dev_lvinput.c +++ b/BLV_485_Driver/blv_not_dev_lvinput.c @@ -78,6 +78,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_LVinput_InType_Get(uint32_t if(DevInputType == DevLVinputInfo.DevReadBuf[DevInputLoop]) //找到类型 { + DevLVinputInfo.DevReadBuf[DevInputLoop] = 0x00; //将动作清空 Ret = CtrlValid; } @@ -239,7 +240,7 @@ __attribute__((section(".non_0_wait"))) void Dev_LVinput_Dis(uint32_t DevAddr) BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_PublicLVinput,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO)); /*保存C5IO的数据*/ - BLV_Device_Info_Write_To_SRAM(DevLVinputInfo.DevC5IOAddr+Dev_Privately,&BUS_PublicC5IO,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); + BLV_Device_Info_Write_To_SRAM(DevLVinputInfo.DevC5IOAddr,&BUS_PublicC5IO,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } } diff --git a/MCU_Driver/blv_dev_action.c b/MCU_Driver/blv_dev_action.c index 3acbf6c..7f32b05 100644 --- a/MCU_Driver/blv_dev_action.c +++ b/MCU_Driver/blv_dev_action.c @@ -11,6 +11,220 @@ BLV_DevAction_Manage_G DevActionGlobal; // #define Action_Group_Ctrl_Num 30 //动作数据中单个类型 群控个数上限 + +/******************************************************************************* +* Function Name : DevAction_Info_Write_To_SRAM +* Description : 将设备动作信息结构体,保存到外部SRAM +* DevAction_Info 动作结构体 +*******************************************************************************/ +uint8_t DevAction_Info_Write_To_SRAM(uint32_t addr,DEV_ACTION_INFO *DevAction_Info) +{ + uint16_t temp_len = 0; + memset(Global_Large_Buff,0,sizeof(Global_Large_Buff)); + + //场景结构体数据长度 - 2Byte + Global_Large_Buff[temp_len++] = 0x00; + Global_Large_Buff[temp_len++] = 0x00; + //场景结构体校验位 - 1Byte + Global_Large_Buff[temp_len++] = 0x00; + + //场景编号 - 2Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionCore.ActionNo & 0xFF); + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionCore.ActionNo >> 8) & 0xFF; + //场景名称 - 32Byte + memcpy(&Global_Large_Buff[temp_len],DevAction_Info->DevActionCore.DevActionName,DevActionNameLenMax); + temp_len += DevActionNameLenMax; + //触发场景的设备类型 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionInput.DevType; + //触发场景的设备地址 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionInput.DevAddr; + //触发场景的设备回路 - 2Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionInput.DevLoop & 0xFF); + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionInput.DevLoop >> 8) & 0xFF; + //触发场景的设备事件 - 2Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionInput.DevEvent & 0xFF); + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionInput.DevEvent >> 8) & 0xFF; + //场景执行方式 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionCond.SceneExcute; + //场景执行的条件 - 8Byte + memcpy(&Global_Large_Buff[temp_len],(uint8_t *)&DevAction_Info->DevActionCond.DevActionU64Cond,sizeof(Dev_Action_U64Cond)); + temp_len += sizeof(Dev_Action_U64Cond); + //场景状态 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.SceneState; + //场景之前状态 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.SceneStateLast; + //场景复用标志位 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.SceneReuseFlag; + //场景下标设置标记 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.MultiSetFlag; + //当前动作所处多联场景下标 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.MultiNumber; + //有效的多联场景总数 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.MultiValidNo; + //场景判断标志 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionState.SceneTypeFlag; + //设备地址输入 - 4Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionState.DevAddrIn & 0xFF); + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionState.DevAddrIn >> 8) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionState.DevAddrIn >> 16) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionState.DevAddrIn >> 24) & 0xFF; + //场景控制设备数 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevCtrlNum; + //场景中控制设备内容 - 16Byte*50 + for(uint8_t i=0;iDevActionOutput[i].DevActionOutCfg.DevType; //控制设备类型 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevAddr; //控制设备地址 - 1Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop & 0xFF); //控制设备回路 - 2Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop >> 8) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0xFF); //控制设备状态 - 2Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState >> 8) & 0xFF; + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont; //控制设备延时 - 1Byte + Global_Large_Buff[temp_len++] = DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayWeight; //控制设备延时单位 - 1Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutAddr & 0xFF); //控制设备链表SRAM地址 - 4Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutAddr >> 8) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutAddr >> 16) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevActionOutAddr >> 24) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevDlyAddr & 0xFF); //对应的延时地址(SRAM地址) - 4Byte + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevDlyAddr >> 8) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevDlyAddr >> 16) & 0xFF; + Global_Large_Buff[temp_len++] = (DevAction_Info->DevActionOutput[i].DevDlyAddr >> 24) & 0xFF; + } + + //数据长度是固定 864Byte 2025-01-06 + Global_Large_Buff[0] = temp_len & 0xFF; + Global_Large_Buff[1] = (temp_len >> 8) & 0xFF; + + Global_Large_Buff[2] = Data_CheckSum(Global_Large_Buff,temp_len); + +// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"W 场景动作地址: %x 长度: %d", addr,temp_len); +// Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"W 场景动作数据 :",Global_Large_Buff,temp_len); + + SRAM_DMA_Write_Buff(Global_Large_Buff,SRAM_DevAction_List_Size,addr); + + return 0; +} + +/******************************************************************************* +* Function Name : DevAction_Info_Read_To_Struct +* Description : 将设备动作信息 从外部SRAM中读取到结构体中 +* addr 读取地址 +* DevAction_Info 动作结构体 +*******************************************************************************/ +uint8_t DevAction_Info_Read_To_Struct(uint32_t addr,DEV_ACTION_INFO *DevAction_Info) +{ + uint16_t temp_len = SRAM_Read_Word(addr); + + if(temp_len >= SRAM_DevAction_List_Size) temp_len = SRAM_DevAction_List_Size; + + SRAM_DMA_Read_Buff(Global_Large_Buff, temp_len, addr); + +// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"R 场景动作地址: %x 长度: %d", addr,temp_len); +// Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"R 场景动作数据 :",Global_Large_Buff,temp_len); + + if(Data_CheckSum(Global_Large_Buff,temp_len) != 0x00 ) { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验失败: %x", addr); + return 0x01; + } + + if( temp_len < DEV_ACTION_INFO_Size) return 0x02; + + temp_len = 0x00; + //场景结构体数据长度 - 2Byte + DevAction_Info->data_len = Global_Large_Buff[temp_len + 1]; + DevAction_Info->data_len <<= 8; + DevAction_Info->data_len |= Global_Large_Buff[temp_len]; + temp_len += 2; + //场景结构体校验位 - 1Byte + DevAction_Info->CheckVal = Global_Large_Buff[temp_len++]; + //场景编号 - 2Byte + DevAction_Info->DevActionCore.ActionNo = Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionCore.ActionNo <<= 8; + DevAction_Info->DevActionCore.ActionNo |= Global_Large_Buff[temp_len]; + temp_len += 2; + //场景名称 - 32Byte + memcpy(DevAction_Info->DevActionCore.DevActionName,&Global_Large_Buff[temp_len],DevActionNameLenMax); + temp_len += DevActionNameLenMax; + //触发场景的设备类型 - 1Byte + DevAction_Info->DevActionInput.DevType = Global_Large_Buff[temp_len++]; + //触发场景的设备地址 - 1Byte + DevAction_Info->DevActionInput.DevAddr = Global_Large_Buff[temp_len++]; + //触发场景的设备回路 - 2Byte + DevAction_Info->DevActionInput.DevLoop = Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionInput.DevLoop <<= 8; + DevAction_Info->DevActionInput.DevLoop |= Global_Large_Buff[temp_len]; + temp_len += 0x02; + //触发场景的设备事件 - 2Byte + DevAction_Info->DevActionInput.DevEvent = Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionInput.DevEvent <<= 8; + DevAction_Info->DevActionInput.DevEvent |= Global_Large_Buff[temp_len]; + temp_len += 0x02; + //场景执行方式 - 1Byte + DevAction_Info->DevActionCond.SceneExcute = Global_Large_Buff[temp_len++]; + //场景执行的条件 - 8Byte + memcpy((uint8_t *)&DevAction_Info->DevActionCond.DevActionU64Cond,&Global_Large_Buff[temp_len],sizeof(Dev_Action_U64Cond)); + temp_len += sizeof(Dev_Action_U64Cond); + //场景状态 - 1Byte + DevAction_Info->DevActionState.SceneState = Global_Large_Buff[temp_len++]; + //场景之前状态 - 1Byte + DevAction_Info->DevActionState.SceneStateLast = Global_Large_Buff[temp_len++]; + //场景复用标志位 - 1Byte + DevAction_Info->DevActionState.SceneReuseFlag = Global_Large_Buff[temp_len++]; + //场景下标设置标记 - 1Byte + DevAction_Info->DevActionState.MultiSetFlag = Global_Large_Buff[temp_len++]; + //当前动作所处多联场景下标 - 1Byte + DevAction_Info->DevActionState.MultiNumber = Global_Large_Buff[temp_len++]; + //有效的多联场景总数 - 1Byte + DevAction_Info->DevActionState.MultiValidNo = Global_Large_Buff[temp_len++]; + //场景判断标志 - 1Byte + DevAction_Info->DevActionState.SceneTypeFlag = Global_Large_Buff[temp_len++]; + //设备地址输入 - 4Byte + DevAction_Info->DevActionState.DevAddrIn = Global_Large_Buff[temp_len + 3]; + DevAction_Info->DevActionState.DevAddrIn <<= 8; + DevAction_Info->DevActionState.DevAddrIn |= Global_Large_Buff[temp_len + 2]; + DevAction_Info->DevActionState.DevAddrIn <<= 8; + DevAction_Info->DevActionState.DevAddrIn |= Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionState.DevAddrIn <<= 8; + DevAction_Info->DevActionState.DevAddrIn |= Global_Large_Buff[temp_len]; + temp_len += 4; + //场景控制设备数 - 1Byte + DevAction_Info->DevCtrlNum = Global_Large_Buff[temp_len++]; + //场景中控制设备内容 - 16Byte*50 + for(uint8_t i=0;iDevActionOutput[i].DevActionOutCfg.DevType = Global_Large_Buff[temp_len++]; //控制设备类型 - 1Byte + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevAddr = Global_Large_Buff[temp_len++]; //控制设备地址 - 1Byte + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop = Global_Large_Buff[temp_len + 1]; //控制设备回路 - 2Byte + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop |= Global_Large_Buff[temp_len]; + temp_len += 2; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState = Global_Large_Buff[temp_len + 1]; //控制设备状态 - 2Byte + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState |= Global_Large_Buff[temp_len]; + temp_len += 2; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont = Global_Large_Buff[temp_len++]; //控制设备延时 - 1Byte + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayWeight = Global_Large_Buff[temp_len++]; //控制设备延时单位 - 1Byte + DevAction_Info->DevActionOutput[i].DevActionOutAddr = Global_Large_Buff[temp_len + 3]; //控制设备链表SRAM地址 - 4Byte + DevAction_Info->DevActionOutput[i].DevActionOutAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutAddr |= Global_Large_Buff[temp_len + 2]; + DevAction_Info->DevActionOutput[i].DevActionOutAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutAddr |= Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionOutput[i].DevActionOutAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutAddr |= Global_Large_Buff[temp_len]; + temp_len += 4; + DevAction_Info->DevActionOutput[i].DevDlyAddr = Global_Large_Buff[temp_len + 3]; //对应的延时地址(SRAM地址) - 4Byte + DevAction_Info->DevActionOutput[i].DevDlyAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevDlyAddr |= Global_Large_Buff[temp_len + 2]; + DevAction_Info->DevActionOutput[i].DevDlyAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevDlyAddr |= Global_Large_Buff[temp_len + 1]; + DevAction_Info->DevActionOutput[i].DevDlyAddr <<= 8; + DevAction_Info->DevActionOutput[i].DevDlyAddr |= Global_Large_Buff[temp_len]; + temp_len += 4; + } + + return 0x00; +} + /******************************************************************************* * Function Name : Add_DevAction_To_List * Description : 将设备动作信息添加到链表,保存到外部SRAM @@ -29,21 +243,10 @@ __attribute__((section(".non_0_wait"))) void Add_DevAction_To_List(DEV_ACTION_IN Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作添加成功,当前动作个数:%d 当前动作地址: %X", DevActionGlobal.DevActionNum, list_addr); - /*清空数据*/ - for(uint16_t i = 0;idata_len); - - DevAction_Info->CheckVal = 0x00; - DevAction_Info->CheckVal = DevAction_CheckSum(list_addr,DevAction_Info->data_len); //计算整包校验 - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"计算校验:%d", DevAction_Info->CheckVal); - - SRAM_DMA_Write_Buff((uint8_t *)DevAction_Info, DevAction_Info->data_len, list_addr); //写入数据 + DevAction_Info_Write_To_SRAM(list_addr,DevAction_Info); //写入数据 } + __attribute__((section(".non_0_wait"))) void Logic_Action_Output_DataGet(DEV_ACTION_INFO *DevAction_Info, uint8_t *DevCtrlBuf) { uint8_t i = 0; @@ -152,12 +355,12 @@ __attribute__((section(".non_0_wait"))) void Logic_DevAction_Add(uint8_t *data,u DevAction_Info.DevActionInput.DevType = data[0]; //设备类型 DevAction_Info.DevActionInput.DevAddr = data[1]; //设备地址 - DevAction_Info.DevActionInput.inAddr = data[4] + (data[5]<<8); //输入回路 - if(0x00 != DevAction_Info.DevActionInput.inAddr) + DevAction_Info.DevActionInput.DevLoop = data[4] + (data[5]<<8); //输入回路 + if(0x00 != DevAction_Info.DevActionInput.DevLoop) { - DevAction_Info.DevActionInput.inAddr--; //转换到配置 + DevAction_Info.DevActionInput.DevLoop--; //转换到配置 } - DevAction_Info.DevActionInput.inType = data[6] + (data[7]<<8); + DevAction_Info.DevActionInput.DevEvent = data[6] + (data[7]<<8); memcpy(&DevAction_Info.DevActionCond.DevActionU64Cond, &data[8], sizeof(Dev_Action_U64Cond)); //动作条件拷贝 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:动作输出使能 DevActionOutFlag: %d", DevAction_Info.DevActionCond.DevActionU64Cond.DevActionOutFlag); @@ -198,19 +401,18 @@ __attribute__((section(".non_0_wait"))) void Logic_DevAction_Add(uint8_t *data,u }else{ DevAction_Info.DevCtrlNum = data[115]; //动作数量拷贝 } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备存储地址:%x,设备输入事件:%X 动作执行方式:%d", \ + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作控制数量:%d,场景对应触发的设备类型:%d,地址:%d,回路:%d,事件:%X,SRAM地址:%x,动作执行方式:%d", \ DevAction_Info.DevCtrlNum, \ DevAction_Info.DevActionInput.DevType, \ DevAction_Info.DevActionInput.DevAddr, \ + DevAction_Info.DevActionInput.DevLoop, \ + DevAction_Info.DevActionInput.DevEvent, \ DevAction_Info.DevActionState.DevAddrIn, \ - DevAction_Info.DevActionInput.inType, \ DevAction_Info.DevActionCond.SceneExcute); Logic_Action_Output_DataGet(&DevAction_Info, &data[116]); //动作输出拷贝,以及设备节点得到 - DevAction_Info.data_len = sizeof(DEV_ACTION_INFO) ; Add_DevAction_To_List(&DevAction_Info); - } /******************************************************************************* @@ -692,7 +894,6 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De { uint8_t i;//,j; - uint32_t DevAddrOut = 0x00; //设备地址局部变量 Device_Public_Information_G BUS_Public; //共用 uint8_t DevCtrlWay = 0x00; //执行方式 uint8_t DevCtrlCont = 0x00; //执行内容 @@ -705,16 +906,15 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De for(i = 0; i < DevActionInfo->DevCtrlNum; i++) { - DevAddrOut = DevActionInfo->DevActionOutput[i].DevActionOutAddr; if(DevActionInfo->DevActionOutput[i].DevActionOutAddr != 0x00) { switch(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType) { case Dev_Host_HVout: //继电器 - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { - if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) == DEV_STATE_OPEN) + if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) == DEV_STATE_OPEN) { SceneState = DEV_STATE_CLOSE; //只赋值关 break; @@ -723,10 +923,10 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De break; #if RS485_LED_Flag case DEV_RS485_PWM: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { - if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != 0x00) + if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != 0x00) { SceneState = DEV_STATE_CLOSE; break; @@ -746,14 +946,14 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De switch(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType) { case Dev_Rs485_PB20_Relay: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; if( (DevCtrlWay == DEV_CTRLWAY_OPEN) || (DevCtrlWay == DEV_CTRLWAY_CLOSE) || (DevCtrlWay == DEV_CTRLWAY_STOP) ) { - if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DevCtrlWay ) + if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DevCtrlWay ) { SceneState = DEV_STATE_CLOSE; break; @@ -764,7 +964,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De case Dev_Rs485_PB20: case Dev_Rs485_PB20_LD: case Dev_Rs485_PB20_LS: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00 ) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0x00ff); @@ -775,7 +975,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De } break; case DEV_Virtual_ColorTemp: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; @@ -783,7 +983,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De if( (DevCtrlWay == DEV_CTRLWAY_OPEN) || (DevCtrlWay == DEV_CTRLWAY_CLOSE) ) { - if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DevCtrlCont ) + if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DevCtrlCont ) { SceneState = DEV_STATE_CLOSE; break; @@ -1146,7 +1346,7 @@ __attribute__((section(".non_0_wait"))) uint32_t Add_DevDly_To_List(uint8_t DevT SRAM_DMA_Write_Buff((uint8_t *)&DevDlyCore, sizeof(Struct_Dev_Dly_Core), list_addr); DevActionGlobal.DevDlyNum++; //延时节点计数增加 - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"延时设备添加成功当前延时节点地址:%08X 当前延时设备计数:%d 延时设备地址: %08X 延时设备回路:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"延时控制添加成功,当前延时节点地址:%X 当前延时设备计数:%d 延时设备地址: %X 延时设备回路:%d", list_addr , DevActionGlobal.DevDlyNum, DevDlyCore.DevDlyAddr, @@ -1270,7 +1470,7 @@ __attribute__((section(".non_0_wait"))) uint8_t DevAddrCtr(DEV_ACTION_INFO *DevA BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, + DevActionInfo->DevActionInput.DevLoop, DevAddrOut, DevActionOutput.DevActionOutCfg.DevOutputLoop, DevActionOutput.DevActionOutCfg.DevCtrlState); @@ -1305,7 +1505,7 @@ __attribute__((section(".non_0_wait"))) uint8_t DevAddrCtr(DEV_ACTION_INFO *DevA BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, + DevActionInfo->DevActionInput.DevLoop, DevAddrOut, DevActionOutput.DevActionOutCfg.DevOutputLoop, DevActionOutput.DevActionOutCfg.DevCtrlState); @@ -1406,7 +1606,6 @@ __attribute__((section(".non_0_wait"))) void Ele_Ctrl_OpenClose(uint8_t Ctrl) __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INFO *DevActionInfo) { uint8_t i = 0,j = 0; - uint32_t DevAddrOut = 0x00; //设备地址局部变量 Device_Public_Information_G BUS_Public; EXPAND_TYPE_G expand_type[Action_Group_Ctrl_Num]={0}; @@ -1416,7 +1615,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF for(i = 0; i < DevActionInfo->DevCtrlNum; i++) { - if(DevActionInfo->DevActionOutput[i].DevActionOutAddr != DevAddrOut) + if(DevActionInfo->DevActionOutput[i].DevActionOutAddr != 0x00) { switch(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType) { @@ -1427,13 +1626,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF { if( expand_type[j].ExpandReadFlag != 0x00 ) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != 0x00 ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState); @@ -1457,13 +1656,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF { if( dimm_type[j].DimmReadFlag != 0x00 ) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != 0x00 ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState); @@ -1520,7 +1719,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF case DEV_Carbon_Saved: case Dev_Scene_Restore: case Dev_Energy_Monitor: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != NULL) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1528,21 +1727,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); //服务信息状态赋值 BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); } @@ -1551,7 +1750,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF case DEV_RS485_STRIP: case DEV_Virtual_ColorTemp: case Dev_Virtual_GlobalSet: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { @@ -1560,28 +1759,28 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); //服务信息状态赋值 BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); } } break; case DEV_RS485_MUSIC: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( ( DevActionInfo != NULL ) @@ -1597,7 +1796,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); //执行开场景指定播放 break; @@ -1608,7 +1807,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); //执行开场景指定播放 break; @@ -1649,7 +1848,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTION_INFO *DevActionInfo) { uint8_t i = 0,j = 0; - uint32_t DevAddrOut = 0; + //uint32_t DevAddrOut = 0; Device_Public_Information_G BUS_Public; EXPAND_TYPE_G expand_type[Action_Group_Ctrl_Num]={0}; @@ -1670,13 +1869,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO { if( expand_type[j].ExpandReadFlag != 0x00 ) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState); @@ -1700,13 +1899,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO { if( dimm_type[j].DimmReadFlag != 0x00 ) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState); @@ -1741,7 +1940,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO case Dev_Rs485_PB20_LS: case Dev_Rs485_PB20_Relay: case Dev_Scene_Restore: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1749,21 +1948,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); }else{ BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); } @@ -1772,7 +1971,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO case DEV_RS485_STRIP: case DEV_Virtual_ColorTemp: case Dev_Virtual_GlobalSet: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1780,21 +1979,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); } @@ -1841,7 +2040,6 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTION_INFO *DevActionInfo) { uint8_t i = 0x00,j = 0x00; - uint32_t DevAddrOut = 0x00; Device_Public_Information_G BUS_Public; EXPAND_TYPE_G expand_type[Action_Group_Ctrl_Num]={0}; @@ -1862,13 +2060,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI { if(expand_type[j].ExpandReadFlag != 0x00) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState); @@ -1890,13 +2088,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI { if(dimm_type[j].DimmReadFlag != 0x00) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState); @@ -1937,7 +2135,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI case DEV_Virtual_ColorTemp: case Dev_Scene_Restore: case Dev_Virtual_GlobalSet: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1945,21 +2143,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); } @@ -1968,7 +2166,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI case Dev_Rs485_PB20: case Dev_Rs485_PB20_LD: case Dev_Rs485_PB20_LS: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1976,21 +2174,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); } @@ -2026,7 +2224,6 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_INFO *DevActionInfo, uint8_t ModeCtrl) { uint8_t i = 0x00,j = 0x00; - uint32_t DevAddrOut = 0x00; Device_Public_Information_G BUS_Public; EXPAND_TYPE_G expand_type[Action_Group_Ctrl_Num]={0}; @@ -2045,13 +2242,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN { if(expand_type[j].ExpandReadFlag != 0x00) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState); @@ -2074,13 +2271,13 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN { if(dimm_type[j].DimmReadFlag != 0x00) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState); @@ -2121,7 +2318,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN case DEV_Virtual_ColorTemp: case Dev_Scene_Restore: case Dev_Virtual_GlobalSet: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -2129,21 +2326,21 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); }else { BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); } @@ -2152,7 +2349,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN case Dev_Rs485_PB20: case Dev_Rs485_PB20_LD: case Dev_Rs485_PB20_LS: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) //非空 { if((DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00)) // @@ -2160,28 +2357,28 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入设备地址:%04X 设备类型:%d 地址:%04X %d路 控制状态: %04X", DevActionInfo->DevActionState.DevAddrIn, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); }else{ BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x0012); } } break; case Dev_NodeCurtain: //窗帘开取反为窗帘停 窗帘关取反为窗帘停 窗帘停取反为窗帘开或关 - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { switch(ModeCtrl) @@ -2195,7 +2392,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_STOP); break; @@ -2204,7 +2401,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, 0x17); break; @@ -2216,7 +2413,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); break; @@ -2224,7 +2421,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN } break; case DEV_RS485_CURTAIN: - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { switch(ModeCtrl) @@ -2238,8 +2435,8 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN case 0x05: BUS_Public.DevFunInfo.Dev_Output_Ctrl( DevActionInfo->DevActionState.DevAddrIn, - DevActionInfo->DevActionInput.inAddr, - DevAddrOut, + DevActionInfo->DevActionInput.DevLoop, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_STOP); @@ -2253,7 +2450,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); break; @@ -2261,7 +2458,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN } break; case Dev_Host_Service: //睡眠控制服务信息 - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { switch(ModeCtrl) @@ -2274,7 +2471,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DEV_CTRLWAY_CLOSE); break; @@ -2284,7 +2481,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN BUS_Public.DevFunInfo.Dev_Output_Ctrl( 0x00, 0x00, - DevAddrOut, + DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState); break; @@ -2324,7 +2521,6 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN __attribute__((section(".non_0_wait"))) void DevAction_ExpandDlyClear(DEV_ACTION_INFO *DevActionInfo) { uint8_t i = 0; - uint32_t DevAddrOut = 0x00; Device_Public_Information_G BUS_Public; for(i = 0; i < DevActionInfo->DevCtrlNum; i++) @@ -2333,7 +2529,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandDlyClear(DEV_ACTION { if(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Host_Invalid) { - BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); } if( (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont != 0x00) && (DevActionInfo->DevActionOutput[i].DevDlyAddr != 0x00) ) @@ -2374,11 +2570,16 @@ __attribute__((section(".non_0_wait"))) uint32_t DevAction_No_Get(uint16_t DevAc for(i = 0; i < DevActionGlobal.DevActionNum; i++ ) { 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); - if(DevActionInfo.DevActionCore.ActionNo == DevActionNo) + + if( DevAction_Info_Read_To_Struct(list_addr, &DevActionInfo) == 0x00 ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"遍历所有动作,找到相应的场景编号:%d 场景名%s", DevActionNo, DevActionInfo.DevActionCore.DevActionName); - return list_addr; //返回当前动作的地址 + if(DevActionInfo.DevActionCore.ActionNo == DevActionNo) + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"找到场景动作:%d - %s", DevActionNo, DevActionInfo.DevActionCore.DevActionName); + return list_addr; //返回当前动作的地址 + } + }else { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作%x 校验失败", list_addr); } } @@ -2450,56 +2651,58 @@ __attribute__((section(".non_0_wait"))) void DevAction_No_Ctrl(uint16_t DevActio if(DevActionNo == 0x00) return ; //直接退出 - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"遍历所有动作,准备执行场景编号:%d", DevActionNo); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"遍历所有场景,准备执行场景编号:%d", DevActionNo); for(i = 0; i < DevActionGlobal.DevActionNum; i++) { 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); - if(DevActionInfo.DevActionCore.ActionNo == DevActionNo) + if( DevAction_Info_Read_To_Struct(list_addr, &DevActionInfo) == 0x00 ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"找到相应的场景编号:%d 场景名%s,场景存储地址:%08X,立即执行,并清延时执行标志", \ - DevActionNo, \ - DevActionInfo.DevActionCore.DevActionName, \ - list_addr); - - Temp_Dly.DelayCont = 0x00; - Temp_Dly.DelayWeight = 0x00; - DevDly_InfoSet(DevDlyAddr_Get(list_addr, DevActionNo), 0x00, 0x00, Temp_Dly, 0x00);//置延时执行标志位 先拿到延时节点的地址 - - if( (DevActionNo == ACTION_SCENE_SLEEP) || (DevActionInfo.DevActionCond.SceneExcute == ACTION_SCENE_SLEEP) ) + if( DevActionInfo.DevActionCore.ActionNo == DevActionNo ) { - DevAction_Mode_Ctrl(&DevActionInfo, Mode, SLEEP_MODE_CTRL, CtrlState); - }else { - DevAction_Mode_Ctrl(&DevActionInfo, Mode, NOR_MODE_CTRL, CtrlState); - } + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"找到场景编号:%d - %s,场景地址:%X,立即执行,并清延时执行标志", \ + DevActionNo, \ + DevActionInfo.DevActionCore.DevActionName, \ + list_addr); - if( DevActionGlobal.ServerCtrl == 0x01 ) - { - DevActionGlobal.ServerCtrl = 0x00; - if( DevActionInfo.DevActionCond.SceneExcute == ACTION_SCENE_SLEEP ) + Temp_Dly.DelayCont = 0x00; + Temp_Dly.DelayWeight = 0x00; + DevDly_InfoSet(DevDlyAddr_Get(list_addr, DevActionNo), 0x00, 0x00, Temp_Dly, 0x00);//置延时执行标志位 先拿到延时节点的地址 + + if( (DevActionNo == ACTION_SCENE_SLEEP) || (DevActionInfo.DevActionCond.SceneExcute == ACTION_SCENE_SLEEP) ) { - if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) //与夜灯有关,且夜灯存在 - { - if( DevActionGlobal.DevActionU64Cond.NeightState != NightModeStart) - { - DevActionGlobal.DevActionU64Cond.NeightState = NightModeStart; - } - } - DevActionGlobal.SleepMode_State = 0x01; //睡眠模式开 - DevActionGlobal.SleepLight_State = 0x00; //熄灭背光,关背光 - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"进入睡眠场景"); + DevAction_Mode_Ctrl(&DevActionInfo, Mode, SLEEP_MODE_CTRL, CtrlState); }else { - if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) //与夜灯有关,且夜灯存在 - { - DevActionGlobal.DevActionU64Cond.NeightState = NightModeClose; - } - DevActionGlobal.SleepMode_State = 0x00; //睡眠模式关 - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退出睡眠场景"); + DevAction_Mode_Ctrl(&DevActionInfo, Mode, NOR_MODE_CTRL, CtrlState); } + + if( DevActionGlobal.ServerCtrl == 0x01 ) + { + DevActionGlobal.ServerCtrl = 0x00; + if( DevActionInfo.DevActionCond.SceneExcute == ACTION_SCENE_SLEEP ) + { + if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) //与夜灯有关,且夜灯存在 + { + if( DevActionGlobal.DevActionU64Cond.NeightState != NightModeStart) + { + DevActionGlobal.DevActionU64Cond.NeightState = NightModeStart; + } + } + DevActionGlobal.SleepMode_State = 0x01; //睡眠模式开 + DevActionGlobal.SleepLight_State = 0x00; //熄灭背光,关背光 + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"进入睡眠场景"); + }else { + if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) //与夜灯有关,且夜灯存在 + { + DevActionGlobal.DevActionU64Cond.NeightState = NightModeClose; + } + DevActionGlobal.SleepMode_State = 0x00; //睡眠模式关 + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"退出睡眠场景"); + } + } + break; } - break; } } } @@ -2882,7 +3085,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_IndicateCtrl(DEV_ACTION_I { if( DevActionInfo->DevActionState.SceneState == DEV_STATE_OPEN ) { - switch(DevActionInfo->DevActionInput.inType) + switch(DevActionInfo->DevActionInput.DevEvent) { case DEV_CTRLWAY_OPEN: //开 case DEV_CTRLWAY_CLOSE: //关 @@ -2901,7 +3104,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_IndicateCtrl(DEV_ACTION_I 0x00, DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop, - DevActionInfo->DevActionInput.inType); + DevActionInfo->DevActionInput.DevEvent); } break; } @@ -2933,18 +3136,16 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr for(j = BUS_Public->ActionCoord; j < DevActionGlobal.DevActionNum; j++) //这里为啥需要这个循环???? - 疑问点 { DevActionAddr = SRAM_DevAction_List_Start_Addr + j*SRAM_DevAction_List_Size; - temp_offset = DevActionAddr + sizeof(Dev_Action_Core) + sizeof(Dev_Action_Input) + sizeof(Dev_Action_Cond) + sizeof(Dev_Action_State) - 4; + temp_offset = DevActionAddr + DevActionInfo_DevActionState_DevAddrIn_Index; if(SRAM_Read_DW(temp_offset) == Dev_processing_addr) //拥有相同的输入触发节点 DevActionInfo.DevActionState.DevAddrIn { - SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), DevActionAddr); //完整拷贝设备动作信息 根据设备输出数量去执行控制 - - if( Data_CheckSum((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO)) != 0x00 ) + if(DevAction_Info_Read_To_Struct(DevActionAddr, &DevActionInfo) != 0x00) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验未通过:%x",DevActionAddr); continue; }else { - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验通过:%x 输入触发节点:%x",DevActionAddr,Dev_processing_addr); + //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验通过:%x",DevActionAddr); } RcuLockState_Scan(); @@ -2956,25 +3157,25 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr if( DevActionInfo.DevActionState.SceneReuseFlag == 0x00 ) //场景状态 - 复用标志位不成立 疑问点:复用标志位的作用是什么??? { if( (BUS_Public->DevFunInfo.Dev_Input_Type_Get != NULL) - && (BUS_Public->DevFunInfo.Dev_Input_Type_Get(DevActionInfo.DevActionState.DevAddrIn, DevActionInfo.DevActionInput.inAddr, DevActionInfo.DevActionInput.inType) == CtrlValid) ) + && (BUS_Public->DevFunInfo.Dev_Input_Type_Get(DevActionInfo.DevActionState.DevAddrIn, DevActionInfo.DevActionInput.DevLoop, DevActionInfo.DevActionInput.DevEvent) == CtrlValid) ) { if(BLV_DevAction_Cond_Judge(&DevActionInfo) == CondIsPass) { BreakFlag = 0x01; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备类型:%d 设备地址%d 输入地址:%d 地址编号:%d 动作地址:%08X通过", \ + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"类型:%d 地址%d 回路:%d 场景编号:%d 动作地址:%X通过", \ DevActionInfo.DevActionInput.DevType, \ DevActionInfo.DevActionInput.DevAddr, \ - DevActionInfo.DevActionInput.inAddr, \ + DevActionInfo.DevActionInput.DevLoop, \ DevActionInfo.DevActionCore.ActionNo, \ DevActionAddr); DevAction_Output(&DevActionInfo); //执行输出控制 }else if(DevActionInfo.DevActionCond.DevActionU64Cond.EleCtrlFlag == 0x01) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备类型:%d 设备地址%d 输入地址:%d 地址编号:%d 动作地址:%08X未通过,但是有控取电开标志", - DevActionInfo.DevActionInput.DevType, - DevActionInfo.DevActionInput.DevAddr, - DevActionInfo.DevActionInput.inAddr, - DevActionInfo.DevActionCore.ActionNo, + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"类型:%d 地址%d 回路:%d 场景编号:%d 动作地址:%X未通过,但是有控取电开标志", + DevActionInfo.DevActionInput.DevType, \ + DevActionInfo.DevActionInput.DevAddr, \ + DevActionInfo.DevActionInput.DevLoop, \ + DevActionInfo.DevActionCore.ActionNo, \ DevActionAddr); if(0x00 == Get_Authorize_Lock_Status()) //授权锁定判断 @@ -2990,7 +3191,7 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr { if( (CondIsPass == BLV_DevAction_Cond_Judge(&DevActionInfo)) && (BUS_Public->DevFunInfo.Dev_Input_Type_Get != NULL) ) { - uint8_t ret = BUS_Public->DevFunInfo.Dev_Input_Type_Get(DevActionInfo.DevActionState.DevAddrIn, DevActionInfo.DevActionInput.inAddr, DevActionInfo.DevActionInput.inType); + uint8_t ret = BUS_Public->DevFunInfo.Dev_Input_Type_Get(DevActionInfo.DevActionState.DevAddrIn, DevActionInfo.DevActionInput.DevLoop, DevActionInfo.DevActionInput.DevEvent); if( (ret & 0x01) == CtrlValid ) { @@ -2998,11 +3199,11 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr { BreakFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"多联场景别名:%s,设备类型复用:%d 设备地址%d 输入地址:%d 动作编号:%d 动作地址:%08X通过", - DevActionInfo.DevActionCore.DevActionName, - DevActionInfo.DevActionInput.DevType, - DevActionInfo.DevActionInput.DevAddr, - DevActionInfo.DevActionInput.inAddr, - DevActionInfo.DevActionCore.ActionNo, + DevActionInfo.DevActionCore.DevActionName, \ + DevActionInfo.DevActionInput.DevType, \ + DevActionInfo.DevActionInput.DevAddr, \ + DevActionInfo.DevActionInput.DevLoop, \ + DevActionInfo.DevActionCore.ActionNo, \ DevActionAddr); DevAction_Output(&DevActionInfo); //执行输出控制 @@ -3024,23 +3225,22 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr } } - deal_addr = TempAddr+sizeof(Dev_Action_Core)+sizeof(Dev_Action_Input)+sizeof(Dev_Action_Cond)+sizeof(Dev_Action_State) - 4 ; + deal_addr = TempAddr + DevActionInfo_DevActionState_DevAddrIn_Index; if( (TempAddr != 0x00) && (SRAM_Read_DW(deal_addr) == Dev_processing_addr) ) { - SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), TempAddr); - if( Data_CheckSum( (uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO) ) != 0x00 ) + if(DevAction_Info_Read_To_Struct(TempAddr, &DevActionInfo) != 0x00) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验未通过:%d"); - continue ; + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验未通过:%x",DevActionAddr); + continue; } BreakFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"多联场景别名:%s,设备类型复用:%d 设备地址%d 输入地址:%d 动作编号:%d 动作地址:%08X通过", - DevActionInfo.DevActionCore.DevActionName, - DevActionInfo.DevActionInput.DevType, - DevActionInfo.DevActionInput.DevAddr, - DevActionInfo.DevActionInput.inAddr, - DevActionInfo.DevActionCore.ActionNo, + DevActionInfo.DevActionCore.DevActionName, \ + DevActionInfo.DevActionInput.DevType, \ + DevActionInfo.DevActionInput.DevAddr, \ + DevActionInfo.DevActionInput.DevLoop, \ + DevActionInfo.DevActionCore.ActionNo, \ DevActionAddr); DevAction_Output(&DevActionInfo); //执行输出控制 } @@ -3052,22 +3252,25 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr && (BUS_Public->DevFunInfo.Dev_Input_Type_Get != NULL) && ( BUS_Public->DevFunInfo.Dev_Input_Type_Get( DevActionInfo.DevActionState.DevAddrIn, - DevActionInfo.DevActionInput.inAddr, - DevActionInfo.DevActionInput.inType ) == CtrlValid ) ) + DevActionInfo.DevActionInput.DevLoop, + DevActionInfo.DevActionInput.DevEvent ) == CtrlValid ) ) { BreakFlag = 0x01; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景别名:%s,设备类型复用:%d 设备地址%d 输入地址:%d 动作编号:%d 动作地址:%08X通过", - DevActionInfo.DevActionCore.DevActionName, - DevActionInfo.DevActionInput.DevType, - DevActionInfo.DevActionInput.DevAddr, - DevActionInfo.DevActionInput.inAddr, - DevActionInfo.DevActionCore.ActionNo, + DevActionInfo.DevActionCore.DevActionName, \ + DevActionInfo.DevActionInput.DevType, \ + DevActionInfo.DevActionInput.DevAddr, \ + DevActionInfo.DevActionInput.DevLoop, \ + DevActionInfo.DevActionCore.ActionNo, \ DevActionAddr); DevAction_Output(&DevActionInfo); //执行输出控制 } } } + }else { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前场景动作未启用 "); + } if(BreakFlag == 0x01) //本地产生事件,就立即刷新场景状态 @@ -3081,9 +3284,7 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr DevActionInfo.DevActionState.SceneStateLast = DevActionInfo.DevActionState.SceneState; DevAction_IndicateCtrl(&DevActionInfo); - DevActionInfo.CheckVal = 0x00; - DevActionInfo.CheckVal = Data_CheckSum((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), DevActionAddr); + DevAction_Info_Write_To_SRAM(DevActionAddr, &DevActionInfo); } if(BreakFlag == 0x01) @@ -3176,23 +3377,29 @@ __attribute__((section(".non_0_wait"))) void DevAction_DevAddr_Ctrl( return ; } - SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), DevActionAddr); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景控制,场景地址有效:%X,场景号:%d",DevActionAddr, DevActionInfo.DevActionCore.ActionNo); - - if( DevActionInfo.DevActionCore.ActionNo == ACTION_SCENE_SLEEP ) + if(DevAction_Info_Read_To_Struct(DevActionAddr, &DevActionInfo) == 0x00) { - if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景控制,场景地址有效:%X,场景号:%d",DevActionAddr, DevActionInfo.DevActionCore.ActionNo); + + if( DevActionInfo.DevActionCore.ActionNo == ACTION_SCENE_SLEEP ) { - if( DevActionGlobal.DevActionU64Cond.NeightState != NightModeStart ) + if( DevActionGlobal.DevActionU64Cond.NeightFlag == 0x01 ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输出场景控制,有场景控制睡眠,进入起夜"); - DevActionGlobal.DevActionU64Cond.NeightState = NightModeStart; + if( DevActionGlobal.DevActionU64Cond.NeightState != NightModeStart ) + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输出场景控制,有场景控制睡眠,进入起夜"); + DevActionGlobal.DevActionU64Cond.NeightState = NightModeStart; + } } + DevAction_Mode_Ctrl(&DevActionInfo, LIGHT_MODE_CTRL, SLEEP_MODE_CTRL, DEV_CTRLWAY_CLOSE); + }else { + DevAction_Mode_Ctrl(&DevActionInfo, Mode, SceneMode, CtrlState); } - DevAction_Mode_Ctrl(&DevActionInfo, LIGHT_MODE_CTRL, SLEEP_MODE_CTRL, DEV_CTRLWAY_CLOSE); }else { - DevAction_Mode_Ctrl(&DevActionInfo, Mode, SceneMode, CtrlState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景动作校验未通过:%x",DevActionAddr); } + + } /******************************************************************************* diff --git a/MCU_Driver/blv_netcomm_function.c b/MCU_Driver/blv_netcomm_function.c index 4c0c793..d424a79 100644 --- a/MCU_Driver/blv_netcomm_function.c +++ b/MCU_Driver/blv_netcomm_function.c @@ -7,7 +7,7 @@ #include "includes.h" #include -uint8_t Global_Large_Buff[1100] = {0}; //用于套接字通讯组包、读写外部SRAM映射寄存器 +uint8_t Global_Large_Buff[1100] = {0}; //用于套接字通讯组包、读写外部SRAM映射寄存器、读写设备动作信息 uint32_t ProjectCode = 1001; //模拟项目编码 uint8_t Versions[4] = {0,0,0,0}; //模拟配置版本 diff --git a/MCU_Driver/blv_rs485_protocol.c b/MCU_Driver/blv_rs485_protocol.c index e8209aa..fb7185d 100644 --- a/MCU_Driver/blv_rs485_protocol.c +++ b/MCU_Driver/blv_rs485_protocol.c @@ -1344,6 +1344,75 @@ __attribute__((section(".non_0_wait"))) void BLV_ActivePort_ModeTask(void) } } +/******************************************************************************* +* Function Name : BLV_Nor_Dev_Polling_Task +* Description : 普通设备扫描任务 之后会用一个函数遍历所有的设备 +*******************************************************************************/ +void BLV_Nor_Dev_Polling_Task(void) +{ + uint16_t i; + uint32_t Start_addr = SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr); //获取主动设备信息起始地址 + uint32_t List_addr; + static uint8_t FlagDis = 0x01; + + if(0x01 == FlagDis) + { + FlagDis = 0x00; + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"普通设备遍历开始:%08X,设备个数:%d",Start_addr,NorDevInfoGlobal.NorDeviceNum); + + } + + for(i = 0; i < NorDevInfoGlobal.NorDeviceNum; i++) //遍历所有普通设备 + { + List_addr = Start_addr + i*SRAM_Device_List_Size; + { + Device_Public_Information_G BUS_Public; //共用 + + if(BLV_Device_PublicInfo_Read_To_Struct(List_addr,&BUS_Public) == 0x00) + { + switch(BUS_Public.type) + { + // case Dev_Host_HVout: //强电继电器 输出状态 + case Dev_Host_LVinput: //弱电输入 输入状态 + case Dev_Host_LVoutput: //弱电输出 输出状态 + case Dev_Host_Service: //服务信息 可配置数量 输出状态 + case Dev_NodeCurtain: //干节点窗帘 可配置数量 输出状态 + case Dev_Rs485_PB20_LD: + case Dev_Rs485_PB20_LS: + case Dev_Rs485_PB20_Relay: + case DEV_Virtual_NoCard: + case DEV_Virtual_Time: + case DEV_Virtual_Card: + case DEV_Virtual_ColorTemp: + case DEV_Carbon_Saved: + case Dev_Scene_Restore: + case Dev_Virtual_GlobalSet: + if(NULL != BUS_Public.DevFunInfo.Dev_Data_Process) //函数指针不为0 + { + BUS_Public.DevFunInfo.Dev_Data_Process(List_addr); //就跳转 + } + } + } + + } + } +} + +/******************************************************************************* +* Function Name : BLV_NormalPort_ModeTask +* Description : +*******************************************************************************/ +void BLV_Nor_Dev_ModeTask(void) +{ + static uint32_t dev_Nor_processing_tick = 0; + + if( SysTick_1ms - dev_Nor_processing_tick > 4) //5ms处理一个设备 + { + dev_Nor_processing_tick = SysTick_1ms; + BLV_Nor_Dev_Polling_Task(); + } +} + /******************************************************************************* * Function Name : BLV_Active_Set_List_Addr * Description : ActivePort 设置链表地址 @@ -1572,7 +1641,7 @@ __attribute__((section(".non_0_wait"))) void Write_Device_Fault_State( SRAM_Write_DW(read_addr,SRAM_DEVICE_ONLINE_STATE_TEMP_ADDR); } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s SRAM addr:%08X",__func__, write_addr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s SRAM addr:%X",__func__, write_addr); memset(data,0x00,6); //设备故障信息清0 @@ -1583,7 +1652,7 @@ __attribute__((section(".non_0_wait"))) void Write_Device_Fault_State( if( (write_addr + 0x06) > SRAM_DEVICE_ONLINE_STATE_END_ADDR ) { - Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s overstep_1 %08X!!!",__func__,write_addr); + Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s overstep_1 %X!!!",__func__,write_addr); len = SRAM_DEVICE_ONLINE_STATE_END_ADDR - write_addr; SRAM_DMA_Write_Buff(data,len,write_addr); write_addr = SRAM_DEVICE_ONLINE_STATE_START_ADDR; @@ -1596,7 +1665,7 @@ __attribute__((section(".non_0_wait"))) void Write_Device_Fault_State( if(write_addr > SRAM_DEVICE_ONLINE_STATE_END_ADDR) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s overstep:%08X",__func__,write_addr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s overstep:%X",__func__,write_addr); write_addr = SRAM_DEVICE_ONLINE_STATE_START_ADDR; } diff --git a/MCU_Driver/inc/blv_dev_action.h b/MCU_Driver/inc/blv_dev_action.h index f67c22b..aebb342 100644 --- a/MCU_Driver/inc/blv_dev_action.h +++ b/MCU_Driver/inc/blv_dev_action.h @@ -57,6 +57,9 @@ #define DevCtrlDlyLen 0x08 //设备控制长度带延时固定8个字节 需要自己查找设备和延时节点 #define DevCtrlDlyLenAddr 0x10 //设备控制长度带设备地址固定16个字节 此项主要用于内部使用 +#define DEV_ACTION_INFO_Size 864 //场景动作信息总长 864Byte +#define DevActionInfo_DevActionState_DevAddrIn_Index 59 //场景动作中输入设备地址下标 + typedef struct { uint16_t ActionNo; //场景编号 @@ -67,8 +70,8 @@ typedef struct { uint8_t DevType; //设备类型 uint8_t DevAddr; //设备地址 - uint16_t inAddr; //输入地址 - uint16_t inType; //输入类型 根据设备类型,来识别输入类型 + uint16_t DevLoop; //设备回路 + uint16_t DevEvent; //设备事件 }Dev_Action_Input; //动作输入与输入类型 一共6个字节 typedef struct @@ -150,7 +153,6 @@ typedef struct CFG_Action_Add Dev_Action_Cond DevActionCond; //设备输入的条件 一共9字节 /* 新增动作结构体长度结束 数据拷贝总长49字节 */ - Dev_Action_State DevActionState; //场景状态参数 一共11个字节 uint8_t CheckVal; //当前设备动作校验 1个字节 uint16_t data_len; //设备长度 2个字节 @@ -251,10 +253,6 @@ typedef struct Dev_Dly_Value DlyBlinkTime; //闪烁频率 0201 为1S切换 0202 为2S切换 若为动作 为当前需要执行的扩展设备下标 }Struct_Dev_Dly; //设备延时结构体,针对所有带延时的扩展属性设备 固定16个字节 - - - - typedef struct{ uint8_t Addr; uint16_t ExpandReadState[32]; @@ -269,15 +267,10 @@ typedef struct{ - - - - - - - extern BLV_DevAction_Manage_G DevActionGlobal; +uint8_t DevAction_Info_Write_To_SRAM(uint32_t addr,DEV_ACTION_INFO *DevAction_Info); +uint8_t DevAction_Info_Read_To_Struct(uint32_t addr,DEV_ACTION_INFO *DevAction_Info); void Logic_DevAction_Add(uint8_t *data,uint16_t len); uint32_t DevAction_No_Get(uint16_t DevActionNo); @@ -287,5 +280,6 @@ void DevAction_No_Ctrl(uint16_t DevActionNo, uint8_t Mode, uint16_t CtrlState); uint8_t DevActionCtrl(uint8_t *p, uint8_t DataLen); void BLV_DevAction_Task(void); +void BLV_DevDly_Task(void); #endif /* MCU_DRIVER_INC_BLV_DEV_ACTION_H_ */ diff --git a/MCU_Driver/inc/blv_rs485_protocol.h b/MCU_Driver/inc/blv_rs485_protocol.h index 21b8b3a..3c0c71d 100644 --- a/MCU_Driver/inc/blv_rs485_protocol.h +++ b/MCU_Driver/inc/blv_rs485_protocol.h @@ -346,6 +346,8 @@ void BLV_PollPort_ModeTask(void); void BLV_ActivePort_Task(void); void Act485Port_Passthrough_Task(void); void BLV_ActivePort_ModeTask(void); +void BLV_Nor_Dev_ModeTask(void); + void BLV_Active_Set_List_Addr(uint32_t addr); uint32_t Find_Device_List_Information(uint8_t dev_type,uint8_t addr); uint32_t Find_AllDevice_List_Information(uint8_t dev_type,uint8_t addr); diff --git a/MCU_Driver/logic_file_function.c b/MCU_Driver/logic_file_function.c index fbbef54..83c7fa2 100644 --- a/MCU_Driver/logic_file_function.c +++ b/MCU_Driver/logic_file_function.c @@ -34,11 +34,12 @@ __attribute__((section(".non_0_wait"))) void Action_Coord_Get(uint32_t Dev_proce for(i = 0; i < DevActionGlobal.DevActionNum; i++) // { - DevActionAddr = SRAM_DevAction_List_Start_Addr + i*SRAM_DevAction_List_Size; + DevActionAddr = SRAM_DevAction_List_Start_Addr + i*SRAM_DevAction_List_Size + DevActionInfo_DevActionState_DevAddrIn_Index; - 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) + if(SRAM_Read_DW(DevActionAddr) == Dev_processing_addr) { BUS_Public->ActionCoord = i; //当前第一个触发节点与设备输入节点一致的动作 + break; } } @@ -74,8 +75,7 @@ __attribute__((section(".non_0_wait"))) void Dev_Coord_Get(void) 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); //继电器私有数据重新写入 + 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 { @@ -106,28 +106,36 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) 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); + 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.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(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.inAddr == DevActionInfoj.DevActionInput.inAddr ) - && ( DevActionInfoi.DevActionInput.inType == DevActionInfoj.DevActionInput.inType ) ) + && ( 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; @@ -146,7 +154,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) DevActionInfoi.DevActionState.MultiValidNo++; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联起始地址:%X 多联下标:%d", DevActionInfoi.DevActionInput.DevAddr, - DevActionInfoi.DevActionInput.inAddr, + DevActionInfoi.DevActionInput.DevLoop, list_addri, DevActionInfoi.DevActionState.MultiNumber); } @@ -163,20 +171,12 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联当前地址:%X 多联下标:%d", DevActionInfoj.DevActionInput.DevAddr, - DevActionInfoj.DevActionInput.inAddr, + DevActionInfoj.DevActionInput.DevLoop, 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,"因为多联下标置位准备重新保存,地址:%X", 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) ) ); + DevAction_Info_Write_To_SRAM(list_addrj, &DevActionInfoj); //保存动作数据 DevAdd = Find_AllDevice_List_Information2(Active_Port, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); if(DevAdd != 0x00) @@ -185,15 +185,15 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) 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; + 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.inAddr, - Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.inAddr]); + DevActionInfoi.DevActionInput.DevLoop, + Rs485SwiInfo.MultiValidNo[DevActionInfoi.DevActionInput.DevLoop]); } } } @@ -210,7 +210,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) { DevActionInfoi.DevActionOutput[k].DevActionOutAddr = DevAction_No_Get(DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevOutputLoop); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含场景,地址:%X 场景地址:%X 下标:%d 回路:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前场景动作包含场景,地址:%X 包含的场景地址:%X 下标:%d 回路:%d", list_addri, DevActionInfoi.DevActionOutput[k].DevActionOutAddr, i, @@ -221,7 +221,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType, DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevAddr); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"扩展设备输入类型:%d,扩展设备输入地址:%d,扩展设备回路地址:%d,扩展设备存储地址:%x", + 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, @@ -238,14 +238,14 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) if(Dev_Host_Invalid != DevActionInfoi.DevActionOutput[k].DevActionOutCfg.DevType) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含延时设备准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", + 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", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前场景动作包含延时场景控制,准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", list_addri, i, DevActionInfoi.DevActionOutput[k].DevDlyAddr, @@ -257,17 +257,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) } } - for(k = 0; k < SRAM_DevAction_List_Size; k++) - { - SRAM_Write_Byte(0x00,list_addri+k); - } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作因为复用标志置位准备重新保存,地址:%X", 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)) ); //校验值重新写入 + DevAction_Info_Write_To_SRAM(list_addri, &DevActionInfoi); //保存动作数据 } } @@ -287,7 +277,11 @@ __attribute__((section(".non_0_wait"))) void Expand_Scene_Get(void) { 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); + 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++) { @@ -297,7 +291,7 @@ __attribute__((section(".non_0_wait"))) void Expand_Scene_Get(void) if( DevActionInfo.DevActionOutput[j].DevActionOutAddr != 0x00 ) { KeepFlag = 0x01; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含场景,准备重新保存,地址:%X 场景地址:%X 下标:%d 回路:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前场景动作包含场景,准备重新保存,地址:%X 场景地址:%X 下标:%d 回路:%d", list_addr,DevActionInfo.DevActionOutput[j].DevActionOutAddr, i, DevActionInfo.DevActionOutput[j].DevActionOutCfg.DevOutputLoop); @@ -341,17 +335,7 @@ __attribute__((section(".non_0_wait"))) void Expand_Scene_Get(void) if( KeepFlag == 0x01 ) { - for(uint16_t k = 0;k