diff --git a/.cproject b/.cproject index 80bf217..e791d79 100644 --- a/.cproject +++ b/.cproject @@ -72,7 +72,7 @@ diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index ac427ad..6196f13 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/BLV_485_Driver/blv_bus_dev_c5iofun.c b/BLV_485_Driver/blv_bus_dev_c5iofun.c index 71a5773..b8dc5f7 100644 --- a/BLV_485_Driver/blv_bus_dev_c5iofun.c +++ b/BLV_485_Driver/blv_bus_dev_c5iofun.c @@ -117,7 +117,7 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_CSIO_DI_For_Logic_Init( memset(&BUS_Public,0,sizeof(Device_Public_Information_G)); memset(&C5IO_Info,0,sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),csio_addr); + BLV_Device_PublicInfo_Read_To_Struct(csio_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),csio_addr+Dev_Privately); input_num = dev_info->input_num; @@ -198,10 +198,7 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_CSIO_DI_For_Logic_Init( temp_len += 4; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),csio_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),csio_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(csio_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); BLV_Nor_Dev_LVinput_Init(dev_info->addr,dev_info->input_num); } @@ -224,7 +221,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Cycle_Call(uint32_t Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); if((BUS_Public.port == Bus_port) && (BUS485_Info.BUS_Start == Baud_Wait)) { @@ -232,10 +229,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Cycle_Call(uint32_t //Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"切换波特率过程中,只发送询问数据"); BUS_C5IO_Inquire_Datasend(dev_addr,&C5IO_Info); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); return RS485OCCUPYTIME; } @@ -332,10 +326,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Cycle_Call(uint32_t C5IO_Info.DevSendCnt++; //发送次数累计 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); return RS485OCCUPYTIME; } @@ -413,7 +404,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Data_Processing(uin return 0x01; //和校验 } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); memset(deal_buff,0,sizeof(deal_buff)); @@ -482,7 +473,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Data_Processing(uin Device_Public_Information_G BUS_Public; C5IO_Info.DevOfflineLast = C5IO_Info.DevOffline; //更新上一次在线状态 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //保存设备在线状态到SRAM } if((DI_Init_flg == 0) && (deal_buff[PKT_PARA] != 0xF0)) //第一次轮询的回复 2024-04-01 避免第一包不是查询命令回复导致DI类型错误DI不可用问题 @@ -494,10 +485,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Data_Processing(uin Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"IO VERSION:%d", C5IO_Info.C5IO_Version); Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DI_Control_Flag:%X", C5IO_Info.DI_Control_Flag); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); return 0x00; } @@ -753,10 +741,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5IO_Data_Processing(uin LOG_Device_COMM_ASK_TO_Reply_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,(SysTick_1ms - C5IO_Info.inquire_tick),deal_buff,deal_len); } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); return 0x00; } @@ -1219,7 +1204,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Relay(uint32_t dev Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); @@ -1247,10 +1232,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Relay(uint32_t dev } } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } /******************************************************************************* @@ -1269,7 +1251,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Do(uint32_t dev_ad Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); if(temp1 < C5IO_DO_CH_MAX) @@ -1289,10 +1271,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Do(uint32_t dev_ad } } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } /******************************************************************************* @@ -1311,7 +1290,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Relay_Inching(uint Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); if(temp1 < C5IO_Relay_CH_MAX) @@ -1334,10 +1313,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Control_Relay_Inching(uint } } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } /******************************************************************************* @@ -1355,7 +1331,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5IO_Group_Control_Relay(uint32 Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); for(uint8_t i=0;i>= 1; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } /******************************************************************************* @@ -1397,16 +1370,13 @@ __attribute__((section(".non_0_wait"))) void BUS_CSIO_Set_RTC_Time(uint32_t dev_ Device_Public_Information_G BUS_Public; BUS_C5IO_INFO C5IO_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); /*将时间设置重新设置一下*/ C5IO_Info.rtc_set_flag = 0x01; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO)); } /******************************************************************************* diff --git a/BLV_485_Driver/blv_bus_dev_c5music.c b/BLV_485_Driver/blv_bus_dev_c5music.c index 31043fb..50b84ac 100644 --- a/BLV_485_Driver/blv_bus_dev_c5music.c +++ b/BLV_485_Driver/blv_bus_dev_c5music.c @@ -113,7 +113,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5MUSIC_Cycle_Call(uint3 // temp = SRAM_Read_Byte(dev_addr+Dev_Type); //判断设备类型 // if(temp != DEV_C5MUSIC_Type) return 0x01; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),dev_addr+Dev_Privately); if((BUS_Public.port == Bus_port) && (BUS485_Info.BUS_Start == Baud_Wait)) { @@ -122,10 +122,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5MUSIC_Cycle_Call(uint3 BUS_C5MUSIC_Playback_Status_Datasend(dev_addr,&C5Music_Info); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); return RS485OCCUPYTIME; } @@ -227,10 +224,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5MUSIC_Cycle_Call(uint3 C5Music_Info.DevSendCnt++; //发送次数累计 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); return RS485OCCUPYTIME; } @@ -253,7 +247,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5MUSIC_Data_Processing( Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),dev_addr+Dev_Privately); uint16_t deal_len = len; @@ -487,10 +481,8 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_BUS_C5MUSIC_Data_Processing( C5Music_Info.DevOfflineLast = C5Music_Info.DevOffline; //更新上一次在线状态 Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //保存设备在线状态到SRAM } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),dev_addr+Dev_Privately); + + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); return 0x00; } @@ -1201,16 +1193,13 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Playback_Mode(uint3 if(devaddr == 0x00) return; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); C5Music_Info.playback_mode = play_mode; C5Music_Info.control_flag |= C5MUSIC_Set_Loop_Mode_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } @@ -1230,7 +1219,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback(uint32_t devad Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); C5Music_Info.playback_fun = playback; @@ -1239,12 +1228,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback(uint32_t devad C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1260,7 +1244,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Doorbell_Dir(uint32_t d if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); C5Music_Info.assign_dir = BLV_C5MUSIC_Doorbell_Dir; @@ -1268,11 +1252,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Doorbell_Dir(uint32_t d C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } @@ -1290,7 +1270,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Warning_Dir(uint32_t de if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); C5Music_Info.playback_fun = start; @@ -1299,11 +1279,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Warning_Dir(uint32_t de C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } @@ -1321,23 +1297,17 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Greet_Dir(uint32_t deva if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - C5Music_Info.playback_fun = start; - C5Music_Info.assign_dir = BLV_C5MUSIC_Greet_Dir; C5Music_Info.assign_playback_idx = id; // C5Music_Info.set_playback_volume = 20; //欢迎词音量为15 C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } @@ -1355,7 +1325,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Helpsleep_Dir(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); /*静音模式下*/ @@ -1385,12 +1355,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Helpsleep_Dir(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1408,7 +1373,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Helpsleep_Dir(uint if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); /*静音模式下*/ @@ -1437,11 +1402,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Helpsleep_Dir(uint C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1458,7 +1419,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Helpsleep_Dir_Just(uint if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); /*静音模式下*/ @@ -1487,12 +1448,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Helpsleep_Dir_Just(uint C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1507,7 +1463,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Stop_Playback(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1517,11 +1473,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Stop_Playback(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } @@ -1537,7 +1489,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1559,14 +1511,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; -// C5Music_Info.playback_mode = BLV_C5MUSIC_Folder_Loop; -// C5Music_Info.control_flag |= C5MUSIC_Set_Loop_Mode_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1581,7 +1526,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback_Next(uint if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1600,11 +1545,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback_Next(uint C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s %d",__func__,C5Music_Info.assign_playback_idx); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1619,7 +1560,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback_Last(uint if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1640,11 +1581,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Play_Playback_Last(uint C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1659,7 +1596,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Pause_Playback(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1669,12 +1606,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Pause_Playback(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1691,7 +1623,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback_Next(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1701,12 +1633,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback_Next(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1723,7 +1650,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback_Prev(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1733,12 +1660,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Playback_Prev(uint32_t C5Music_Info.control_flag |= C5MUSIC_Specify_Play_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1753,7 +1675,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Plus(ui if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); //相对调节 - 音量加一 @@ -1766,12 +1688,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Plus(ui C5Music_Info.adjust_volume_loop = 0x03; //回路1与回路2 C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1786,7 +1703,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Subtrac if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); @@ -1800,11 +1717,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Subtrac C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1819,7 +1732,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_PlusVal if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); //相对调节 - 音量加value @@ -1839,11 +1752,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_PlusVal C5Music_Info.adjust_volume_type |= 0x10; C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1858,7 +1767,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Subtrac if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); //相对调节 - 音量减value @@ -1878,12 +1787,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Relative_Volume_Subtrac C5Music_Info.adjust_volume_type |= 0x10; C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1898,7 +1802,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Quiet_Mode(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); /*静音状态取反*/ @@ -1920,11 +1824,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Quiet_Mode(uint32_t C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1942,7 +1842,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Quiet_Mode2(uint32_ if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1962,11 +1862,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Quiet_Mode2(uint32_ } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -1983,7 +1879,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Global_Volume(uint3 if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); @@ -1999,11 +1895,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_Global_Volume(uint3 C5Music_Info.quiet_mode = 0x00; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -2024,7 +1916,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_LoopVolume(uint32_t if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); switch(loop) @@ -2046,11 +1938,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_LoopVolume(uint32_t break; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } /******************************************************************************* @@ -2071,7 +1959,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_LoopVolume_2(uint32 if(devaddr == 0x00) return; Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); if((loop & 0x01)) //音乐 @@ -2096,11 +1984,7 @@ __attribute__((section(".non_0_wait"))) void BUS_C5MUSIC_Set_LoopVolume_2(uint32 C5Music_Info.adjust_volume_type |= 0x10; C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); } } @@ -2125,7 +2009,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Get_BUS_C5MUSIC_Loop_Volume(uint Device_Public_Information_G BUS_Public; BUS_C5MUSIC_INFO C5Music_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),devaddr+Dev_Privately); switch(loop) @@ -2197,7 +2081,7 @@ __attribute__((section(".non_0_wait"))) void Logic_Music_Ctrl( return ; } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),DevAddrOut+Dev_Privately); if(DevOutputLoop >= MUSICLOOPMAX) @@ -2410,11 +2294,7 @@ __attribute__((section(".non_0_wait"))) void Logic_Music_Ctrl( C5Music_Info.control_flag |= C5MUSIC_Set_Volume_Flag; } - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&C5Music_Info, sizeof(BUS_C5MUSIC_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddrOut);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO),DevAddrOut+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(DevAddrOut,&BUS_Public,(uint8_t *)&C5Music_Info,sizeof(BUS_C5MUSIC_INFO)); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"BLV背景音乐音量调节: 音量:%d", C5Music_Info.BackMusicState[0].CtrlCont.CtrlVoice); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"BLV提示音乐音量调节: 音量:%d", C5Music_Info.BackMusicState[1].CtrlCont.CtrlVoice); diff --git a/BLV_485_Driver/blv_nor_dev_c5relay.c b/BLV_485_Driver/blv_nor_dev_c5relay.c new file mode 100644 index 0000000..2462487 --- /dev/null +++ b/BLV_485_Driver/blv_nor_dev_c5relay.c @@ -0,0 +1,197 @@ +/* + * blv_nor_dev_c5relay.c + * + * Created on: Jan 5, 2026 + * Author: cc + */ + +#include "blv_nor_dev_c5relay.h" +#include "blv_bus_dev_c5iofun.h" + + +#include "blv_dev_action.h" +#include "spi_sram.h" +#include "check_fun.h" +#include "debug.h" + +#define REPEATSENDTIMEMAX 0x03 //重发次数上限 +#define C5EXPANDTYPE 0xF1 //C5RELAY类型 +#define C5RelayAddrDefault 0x01 //默认为1地址 与外设通讯仍然用默认地址 + +#define C5RELAYSnMin 0x00 //最小Sn号 +#define C5RELAYSnMax 0x0F //最大Sn号 + + +/******************************************************************************* +* Function Name : BLW_RS485_C5RELAY_Data_Init +* Description : 添加设备到链表 - 轮询设备 +* Input : + type : 添加的设备类型 + addr : 添加的设备地址 + polling_cf :设备的轮询数据发送回调函数 + processing_cf :设备的数据处理回调函数 +* Return : None +*******************************************************************************/ +void BLW_RS485_C5RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo) +{ + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s",__func__); + + BUS_Public->polling_cf = (uint32_t)&BLW_C5RELAYCycleCtrl; + BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_C5RELAY_Check; + + /* 继电器需要知道CSIO的设备地址,才能控制继电器 + 现在将这个获取CSIO地址放到设备全部初始化完成后,在去查找CSIO的设备地址,保存到该继电器设备中。 + 查找函数:Dev_Coord_Get*/ + +} + +#define C5EXPANDCTRLLEN 13 //扩展板控制报文 +/** + * @name BLW 集中扩展板控制函数 + * @para + * dev_addr 设备起始地址 + * @return 无 + * @attention 发送循环里调用,变量已经被判断 + */ +void BLW_Rs485_C5RELAY_Ctrl(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO* DevHVoutInfo, BUS_C5IO_INFO *C5IO_Info) +{ + /*将控制数据拷贝到CSIO中*/ + if( DevHVoutInfo->HVoutLoopValidNum >= HVoutNumMAX ) DevHVoutInfo->HVoutLoopValidNum = HVoutNumMAX; //防止溢出 + + for(uint8_t i = 0; i < DevHVoutInfo->HVoutLoopValidNum; i++) + { + if( (DevHVoutInfo->DevChangeFlag & (0x01 << i)) != 0x00 ) + { + switch(DevHVoutInfo->DevHVoutState[i]) + { + case 0x01: + C5IO_Info->Relay_Control[i] = BUS_C5IO_OUT_HIGH; + C5IO_Info->Relay_Control_Flag |= 0x00000001<Relay_Control[i] = BUS_C5IO_OUT_LOW; + C5IO_Info->Relay_Control_Flag |= 0x00000001<DevChangeFlag &= ~(0x01< /*函数指针宏定义*/ typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo); //传递共用数据指针 私有数据指针 /*设备驱动宏定义开始*/ -#define RS485_DEV_PRO_FUN_01 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_C5RELAY_Flag, BLW_RS485_C5RELAY_Data_Init) //((DevFunP)NULL) // C5和C12自带继电器 +#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_HVout_C5RELAY_Flag, BLW_RS485_C5RELAY_Data_Init) // C5和C12自带继电器 #define RS485_DEV_PRO_FUN_02 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_A9RELAY_Flag, BLW_RS485_A9RELAY_Data_Init) //((DevFunP)NULL) //A9IO继电器 #define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_SwiRELAY_Flag, BLW_RS485_SwiRELAY_Data_Init) //((DevFunP)NULL) //强电开关继电器 #define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL) // @@ -46,6 +48,7 @@ __attribute__((section(".non_0_wait"))) void BLV_Nor_Dev_HVout_For_Logic_Init( if(ENUM_RS485_DEV_PRO_01 == dev_info->version) { + BUS_Public.retry_num = C5IO_REPEATSENDTIMEMAX; //设备数据重发次数 BUS_Public.wait_time = C5IO_SEND_WAIT_TIME; //设备数据发送等待回复时间 - 100ms }else{ @@ -68,6 +71,8 @@ __attribute__((section(".non_0_wait"))) void BLV_Nor_Dev_HVout_For_Logic_Init( DevHVoutInfo.HVoutLoopValidNum = dev_info->output_num; } + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"HVOUT loop:%d",DevHVoutInfo.HVoutLoopValidNum); + switch(BUS_Public.Protocol) { case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &DevHVoutInfo);break; // @@ -91,6 +96,7 @@ __attribute__((section(".non_0_wait"))) void BLV_Nor_Dev_HVout_For_Logic_Init( Poll485_Info.device_num += 1; break; case Bus_port: //总线端口 + BUS_Public.baud = 115200; BUS_Public.port = Bus_port; //设备发送端口 Add_BUS_Device_To_List(&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO)); BUS485_Info.device_num += 1; @@ -152,7 +158,7 @@ __attribute__((section(".non_0_wait"))) void BLW_HVout_Control_State( if(devaddr == 0x00) return; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); //拷贝所有共有数据 SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately); switch(start) @@ -191,10 +197,8 @@ __attribute__((section(".non_0_wait"))) void BLW_HVout_Control_State( { BLV_Active_Set_List_Addr(devaddr); //唯有主动才会优先处理 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately); + + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO)); } } @@ -224,7 +228,7 @@ __attribute__((section(".non_0_wait"))) void BLW_HVout_Group_Ctrl( if(devaddr == 0x00) return; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); //拷贝所有共有数据 SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately); if(CtrlNum >= DevHVoutInfo.HVoutLoopValidNum) @@ -270,10 +274,8 @@ __attribute__((section(".non_0_wait"))) void BLW_HVout_Group_Ctrl( { BLV_Active_Set_List_Addr(devaddr); } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevHVoutInfo, sizeof(NOR_HVOUT_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately); + + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO)); } } diff --git a/BLV_485_Driver/blv_nor_dev_lvoutput.c b/BLV_485_Driver/blv_nor_dev_lvoutput.c new file mode 100644 index 0000000..284a552 --- /dev/null +++ b/BLV_485_Driver/blv_nor_dev_lvoutput.c @@ -0,0 +1,210 @@ +/* + * blv_nor_dev_lvoutput.c + * + * Created on: Dec 31, 2025 + * Author: cc + */ +#include "includes.h" + +/*服务信息新增到普通设备链表*/ +void BLV_Nor_Dev_LVoutput_Init(uint8_t devaddr) +{ + Device_Public_Information_G BUS_Public; + NOR_LVOUTPUT_INFO DevLVoutputInfo; //服务信息局部变量 + + memset(&BUS_Public,0,sizeof(Device_Public_Information_G)); + memset(&DevLVoutputInfo,0,sizeof(NOR_LVOUTPUT_INFO)); + + BUS_Public.addr = devaddr; //设备地址 + BUS_Public.type = Dev_Host_LVoutput; //设备类型 +// BUS_Public.port = Active_Port; //设备发送端口 +// BUS_Public.baud = 9600; //设备发送波特率 +// BUS_Public.retry_num = 0x03; //设备数据重发次数 +// BUS_Public.wait_time = 0x0064; //设备数据发送等待回复时间 +// BUS_Public.polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis; +// BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check; + + BUS_Public.DevFunInfo.Dev_Data_Process = Dev_LVoutput_Dis; // + BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_LVoutput_Control_State; // + BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = LVoutput_Loop_State; // + + DevLVoutputInfo.LVoutputLoopValidNum = C1_LVOUTPUTNUMMAX; + DevLVoutputInfo.DevC5IOAddr = Find_AllDevice_List_Information(DEV_C5IO_Type, 0x00); + + Add_Nor_Device_To_List(&BUS_Public,(uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO)); +} + +/******************************************************************************* +* Function Name : LVoutput_Loop_State +* Description : 弱电输出 - 状态获取 +* Input : + devaddr : 设备信息地址 + loop :回路 回路都是从0 +* Return : 状态 0x01开 0x02关 +*******************************************************************************/ +uint16_t LVoutput_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop) +{ + NOR_LVOUTPUT_INFO DevLVoutputInfo; //服务信息局部变量 + + if(devaddr == 0x00) return 0x00; + + SRAM_DMA_Read_Buff((uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO),devaddr+Dev_Privately); + + if(DevOutputLoop >= DevLVoutputInfo.LVoutputLoopValidNum) return 0x00; + + if(DevLVoutputInfo.DevLVoutputState[DevOutputLoop] == 0x01) + { + return 0x01; + }else{ + return 0x02; + } + +} + +/******************************************************************************* +* Function Name : BLW_LVoutput_Control_State +* Description : BLW服务信息状态控制函数 +* Input : + devaddr : 设备信息地址 + loop :回路 回路都是从0 + start :状态 0x01开 0x02关 +* Return : 无 +* attention : temp1非0才会进行保存 +*******************************************************************************/ +void BLW_LVoutput_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t DevOutputType) +{ + uint8_t temp1 = 0; + uint8_t state; //0关 1开 + uint8_t CtrlWay; + Device_Public_Information_G BUS_Public; //共用 + NOR_LVOUTPUT_INFO DevLVoutputInfo; //弱电输出局部变量 + + if(devaddr == 0x00) return; + + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO),devaddr+Dev_Privately); + + if(DevOutputLoop >= DevLVoutputInfo.LVoutputLoopValidNum) return ; + + CtrlWay = DevOutputType&0x00ff; //取低字节 + + switch(CtrlWay) + { + case 0x01:state = 0x01;break; //开启 + case 0x02:state = 0x00;break; //关闭 + case 0x04: //闪烁 + if(0x01 == DevLVoutputInfo.DevLVoutputState[DevOutputLoop]) + { + state = 0x00; + }else{ + state = 0x01; + } + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"弱电输出闪烁赋值,start:%d",state); + break; + default:return; + } + + + if( DevLVoutputInfo.DevLVoutputState[DevOutputLoop] != state ) + { + switch(state) + { + case 0x00: //指定位清0 + DevLVoutputInfo.DevLVoutputState[DevOutputLoop] = 0x00; + break; + case 0x01: //指定位置一 + DevLVoutputInfo.DevLVoutputState[DevOutputLoop] = 0x01; + break; + } + + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LVoutput loop:%d,state:%d",DevOutputLoop,state); + temp1++; + } + + if(temp1 != 0x00) + { + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO)); + } +} + +void Dev_LVoutput_Dis(uint32_t DevAddr) +{ + Device_Public_Information_G BUS_PublicLVoutput; //共用 + NOR_LVOUTPUT_INFO DevLVoutputInfo; //继电器局部变量 + Device_Public_Information_G BUS_PublicC5IO; //共用 + BUS_C5IO_INFO C5IO_Info; + + uint8_t KeepFlag = 0x00; + + if(DevAddr == 0x00) return ; + + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_PublicLVoutput); + SRAM_DMA_Read_Buff((uint8_t *)&DevLVoutputInfo,sizeof(NOR_LVOUTPUT_INFO),DevAddr+Dev_Privately); + + if(DevLVoutputInfo.DevC5IOAddr == 0x00) return ; + + BLV_Device_PublicInfo_Read_To_Struct(DevLVoutputInfo.DevC5IOAddr,&BUS_PublicC5IO); + SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevLVoutputInfo.DevC5IOAddr+Dev_Privately); + + if( (DevLVoutputInfo.init_flag == 0x00) && (C5IO_Info.DI_Init_flag == 0x01) ){ + /*DI初始化完成 - 读取继电器状态,作为初始化状态*/ + DevLVoutputInfo.init_flag = 0x01; + + for(uint32_t i = 0; i < DevLVoutputInfo.LVoutputLoopValidNum; i++) + { + if( (C5IO_Info.Relay_Level_Actual_Start & (0x01<addr; //设备地址 + BUS_Public.type = Dev_Host_Service; //设备类型 + BUS_Public.port = dev_info->type; //设备发送端口 + BUS_Public.baud = dev_info->baud; //设备发送波特率 + BUS_Public.retry_num = dev_info->retry; //设备数据重发次数 + BUS_Public.wait_time = dev_info->writ_time; //设备数据发送等待回复时间 + BUS_Public.polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis; + BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check; + + BUS_Public.DevFunInfo.Dev_Data_Process = Dev_Service_Dis; + BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Service_InType_Get; + BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_Service_Control_State; + BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Service_Loop_State; + + DevServiceInfo.ServiceLoopValidNum = ServiceNumMAX; + DevServiceInfo.Loop_State[Service_Warning] = 0x01; //默认开启提示音 + + DevServiceInfo.Loop_State[Service_Dnd] = 0x02; //默认勿扰为关 + DevServiceInfo.Loop_State[Service_Clean] = 0x02; //默认清理关 + DevServiceInfo.Loop_State[Service_Luggage] = 0x02; //默认行李关 + DevServiceInfo.Loop_State[Service_Meals] = 0x02; //关闭9号服务 + DevServiceInfo.Loop_State[Service_CheckOut] = 0x02; //关闭退房 + DevServiceInfo.Loop_State[Service_Strong] = 0x02; //关闭保险箱 + DevServiceInfo.Loop_State[Service_Wait] = 0x02; //关闭稍后 + DevServiceInfo.Loop_State[Service_Sos] = 0x02; //默认关闭SOS服务 + + DevServiceInfo.Loop_State[Service_Call] = 0x02; //关闭呼叫 + DevServiceInfo.Loop_State[Service_22] = 0x02; //电视开关服务状态 + + DevServiceInfo.Loop_State_Last[Service_Call] = 0x02; //关闭呼叫 + DevServiceInfo.Loop_State_Last[Service_22] = 0x02; //电视开关服务状态 + + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"增加一个服务信息,私有数据长度:%d",sizeof(NOR_SERVICE_INFO)); + + /*RCU根据MCU复位状态进行设备初始化 - + 保存标志位成立的情况下,如果是看门狗复位、软件复位、外部手动复位,将之前保存的状态进行设备初始化 + 否则采用默认状态初始化(默认状态可通过RCU_POWER_Deivce_State_Init 宏定义 修改默认初始化状态) + */ + if( (DevActionGlobal.sram_save_flag == 0xA8) && ((SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x01) || (SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x03) || (SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x05)) ) + { + DevServiceInfo.Loop_State[Service_Ele] = DevActionGlobal.Last_EleState; + DevServiceInfo.Loop_State_Last[Service_Ele] = DevActionGlobal.Last_EleState; + }else { + +#if RCU_POWER_Deivce_State_Init + DevServiceInfo.Loop_State[Service_Ele] = 0x01; //默认开启入住服务 - 开 + DevServiceInfo.Loop_State_Last[Service_Ele] = 0x01; //默认开启入住服务 - 开 +#else + DevServiceInfo.Loop_State[Service_Ele] = 0x02; //默认开启入住服务 - 关 + DevServiceInfo.Loop_State_Last[Service_Ele] = 0x02; //默认开启入住服务 - 关 +#endif + } + + SRAM_Write_Byte(DevServiceInfo.Loop_State[Service_Ele],SRAM_UDP_ELEReport_EleState); //给UDP 上报取电状态使用 + SRAM_Write_Byte(DevServiceInfo.Loop_State[Service_Ele],SRAM_UDP_ELEReport_EleState_Last); //给UDP 上报取电状态使用 + + DevServiceInfo.is_first_power_on = 0x00; //上电默认 非首次取电标志位 + + Add_Nor_Device_To_List(&BUS_Public,(uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO)); + +} + +/******************************************************************************* +* Function Name : Service_Loop_State +* Description : 获取服务信息的回路状态 +*******************************************************************************/ +uint16_t Service_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop) +{ + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + + if(devaddr == 0x00) return 0x00; + + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),devaddr+Dev_Privately); + + if(DevOutputLoop >= DevServiceInfo.ServiceLoopValidNum) + { + return 0x00; + } + + return DevServiceInfo.Loop_State[DevOutputLoop]; +} + +/******************************************************************************* +* Function Name : BLW_Service_Control_State +* Description : BLW服务信息状态控制函数 +* Input : + devaddr : 设备信息地址 + loop :回路 回路都是从0 + start :状态 0x01开 0x02关 0x04清除首次标志位 0x04 +* Return : 无 +* attention : temp1非0才会进行保存 +*******************************************************************************/ +void BLW_Service_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t start) +{ +// uint16_t DataLen = 0; + uint8_t temp1 = 0; //crc_val = 0, + Device_Public_Information_G BUS_Public; //共用 + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + + if(devaddr == 0x00) return; + + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),devaddr+Dev_Privately); + + if(DevOutputLoop >= DevServiceInfo.ServiceLoopValidNum) + { + return ; + } + + switch(start) + { + case 0x01: + case 0x02: + if( DevServiceInfo.Loop_State[DevOutputLoop] != start ) + { + if((DevOutputLoop == Service_16) && (start == 0x01)) // + { + if(0x01 == DevActionGlobal.DevActionU64Cond.NeightFlag) //夜灯存在 + { + if(NightModeStart != DevActionGlobal.DevActionU64Cond.NeightState) + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备输出场景控制,有场景控制睡眠,进入起夜"); //有场景控制 + DevActionGlobal.DevActionU64Cond.NeightState = NightModeStart; //进入起夜 + } + } + } + + if((DevOutputLoop == Service_Dnd)&& (start == 0x01)) //2023-10-31 清理和勿扰服务互锁 + { + DevServiceInfo.Loop_State[DevOutputLoop+1] = 0x02; + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE loop:%d,start:%d",(DevOutputLoop+1),0x02); + } + else if((DevOutputLoop == Service_Clean)&& (start == 0x01)) + { + DevServiceInfo.Loop_State[DevOutputLoop-1] = 0x02; + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE loop:%d,start:%d",(DevOutputLoop-1),0x02); + } + else if((DevOutputLoop == Service_24) && (start == 0x01)) //2023-12-05 静音开 -- 疑问点:为啥服务信息24与服务信息14 静音 互锁?????? + { + DevServiceInfo.Loop_State[Service_Warning] = 0x02; + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE 静音开"); + } + else if((DevOutputLoop == Service_24) && (start == 0x02)) //2023-12-05 静音关 + { + DevServiceInfo.Loop_State[Service_Warning] = 0x01; + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE 静音关"); + } + else if((DevOutputLoop == Service_Ele)&& (start == 0x01)) //2024-04-29 + { + DevActionGlobal.CardInFlag = 0x01; + } + + if(DevOutputLoop == Service_Ele){ + /*取电服务信息 - 增加日志记录 2025-02-19*/ + + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE loop:%d,start:%d\r\n",DevOutputLoop,start); + LOG_LogicInfo_DebugRecord("DevService:loop:%d,start:%d",DevOutputLoop,start); + } + + DevServiceInfo.Loop_State[DevOutputLoop] = start;//当前动作清0 + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"SERVICE loop:%d,start:%d",DevOutputLoop,start); + temp1++; + } + break; + case 0x03: //首次取电标志位 置位 目前只针对于取电服务 + if( (DevOutputLoop == Service_Ele) && (DevServiceInfo.is_first_power_on == 0x00) ) + { + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Service_Ele Set first_power_on"); + DevServiceInfo.is_first_power_on = 0x01; + temp1++; + } + break; + case 0x04: //仅取电 + /* + 1、如果当前首次取电标志位还存在,便触发首次取电事件 + 2、如果当前首次取电标志位不存在,仅修改取电状态,不触发取电事件,且触发“仅取电”事件 + */ + + if( (DevOutputLoop == Service_Ele) && (DevServiceInfo.is_first_power_on == 0x01) ) + { + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"仅取电 首次取电"); + DevActionGlobal.CardInFlag = 0x01; + DevServiceInfo.Loop_State[DevOutputLoop] = 0x01; + temp1++; + }else if( DevOutputLoop == Service_Ele ){ + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"仅取电 非首次取电"); + DevActionGlobal.CardInFlag = 0x01; + DevServiceInfo.Loop_State[DevOutputLoop] = 0x01; + DevServiceInfo.Loop_State_Last[DevOutputLoop] = 0x01; + DevServiceInfo.DevChangeFlag[DevOutputLoop] = 0x04; //产生仅取电事件 + temp1++; + } + + break; + } + + if(temp1 != 0x00) + { + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO)); + } +} + +/******************************************************************************* +* Function Name : Dev_Service_InType_Get +* Description : 服务信息输入检测函数 +* Input : + devaddr : 设备地址 + DevInputLoop :回路输入地址 范围0~ServiceLoopValidNum + DevInputType :输入类型 +* Return : 无 +*******************************************************************************/ +uint8_t Dev_Service_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType) +{ + Device_Public_Information_G BUS_Public; //共用 + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + uint8_t Ret = CtrlInvalid; //控制无效 + + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),DevAddr+Dev_Privately); /*拷贝设备私有信息*/ + + if(DevInputLoop >= DevServiceInfo.ServiceLoopValidNum) + { + return Ret; + } + + if(DevInputType == DevServiceInfo.DevChangeFlag[DevInputLoop]) //输入类型对的上 1开 2关 + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"服务信息动作 %d - %d 清零",DevInputLoop,DevInputType); + + DevServiceInfo.DevChangeFlag[DevInputLoop] = 0x00; //当前动作清0 + Ret = CtrlValid; + } + + if(CtrlValid == Ret) + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"服务信息动作清空"); + + BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_Public,(uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO)); + } + + return Ret; +} + +/*服务条件同步*/ +void Dev_Action_CondService_Get(NOR_SERVICE_INFO *DevServiceInfo) +{ + DevActionGlobal.DevActionU64Cond.EleState = DevServiceInfo->Loop_State[Service_Ele]; + DevActionGlobal.DevActionU64Cond.DndState = DevServiceInfo->Loop_State[Service_Dnd]; + DevActionGlobal.DevActionU64Cond.CleanState = DevServiceInfo->Loop_State[Service_Clean]; + DevActionGlobal.DevActionU64Cond.CallState = DevServiceInfo->Loop_State[Service_Call]; + DevActionGlobal.DevActionU64Cond.WashState = DevServiceInfo->Loop_State[Service_Wash]; + DevActionGlobal.DevActionU64Cond.CheckOutState = DevServiceInfo->Loop_State[Service_CheckOut]; + DevActionGlobal.DevActionU64Cond.WaitState = DevServiceInfo->Loop_State[Service_Wait]; + DevActionGlobal.DevActionU64Cond.SosState = DevServiceInfo->Loop_State[Service_Sos]; + DevActionGlobal.DevActionU64Cond.RentState = DevServiceInfo->Loop_State[Service_Meals]; + DevActionGlobal.DevActionU64Cond.LockState = DevServiceInfo->Loop_State[Service_Food_Plate]; + DevActionGlobal.DevActionU64Cond.LuggageState = DevServiceInfo->Loop_State[Service_Luggage]; + DevActionGlobal.DevActionU64Cond.StrongState = DevServiceInfo->Loop_State[Service_Strong]; + DevActionGlobal.DevActionU64Cond.DoorState = DevServiceInfo->Loop_State[Service_Door]; + DevActionGlobal.DevActionU64Cond.WarningState = DevServiceInfo->Loop_State[Service_Warning]; + DevActionGlobal.Service_16 = DevServiceInfo->Loop_State[Service_16]; + + SRAM_Write_Byte(DevActionGlobal.DevActionU64Cond.EleState,SRAM_UDP_ELEReport_EleState); //给UDP 上报取电状态使用 +} + +/******************************************************************************* +* Function Name : Dev_Service_Dis +* Description : 服务信息扫描函数 拿到服务信息的状态,并转换为动作 +* Input : + devaddr : 设备地址 +* Return : 无 +*******************************************************************************/ +void Dev_Service_Dis(uint32_t DevAddr) +{ + Device_Public_Information_G BUS_Public; //共用 + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + uint8_t KeepFlag = 0x00; + + if(DevAddr == 0x00) return ; + + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),DevAddr+Dev_Privately); + + if( DevActionGlobal.SleepMode_State != 0x01 ) //2024-10-21 起夜关闭夜灯开启按键背光,同时调用16号服务进行暂停助眠音乐 + { + DevServiceInfo.Loop_State[Service_16] = 0x02; + KeepFlag = 0x01; + } + + for(uint16_t i = 0; i < DevServiceInfo.ServiceLoopValidNum; i++) + { + if(DevServiceInfo.Loop_State_Last[i] != DevServiceInfo.Loop_State[i]) + { + KeepFlag = 0x01; + DevServiceInfo.Loop_State_Last[i] = DevServiceInfo.Loop_State[i]; + + if( (i == Service_Ele) && ( DevServiceInfo.Loop_State[i] == 0x01 ) && (DevServiceInfo.is_first_power_on == 0x01) ) + { + DevServiceInfo.is_first_power_on = 0x00; + DevServiceInfo.DevChangeFlag[i] = 0x03; //产生首次取电事件 + }else { + DevServiceInfo.DevChangeFlag[i] = DevServiceInfo.Loop_State[i]; + } + + Udp_Addtion_Roomstate(Dev_Host_Service,0x00, i+1, DevServiceInfo.Loop_State[i]); //上报服务信息 + + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"准备同步服务信息的状态,回路:%d 状态:%d", i, DevServiceInfo.DevChangeFlag[i]); + } + } + + if(0x01 == KeepFlag) + { + Dev_Action_CondService_Get(&DevServiceInfo); //服务信息有变化,进行状态同步 + + BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_Public,(uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO)); + } +} + +/******************************************************************************* +* Function Name : ServiceInfo_Set_first_power_on +* Description : 服务信息 - 清楚首次取电标志位 +* Input : + state : 设置首次取电状态 +* Return : 无 +*******************************************************************************/ +uint8_t ServiceInfo_Set_first_power_on(uint8_t state) +{ + uint32_t dev_addr = Find_AllDevice_List_Information(Dev_Host_Service,0x00); + Device_Public_Information_G BUS_Public; //共用 + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + + if(dev_addr == 0x00) return 0x01; //未找到设备 + + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),dev_addr+Dev_Privately); + + if(DevServiceInfo.is_first_power_on != state) + { + DevServiceInfo.is_first_power_on = state; + + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO)); + } + + return 0x00; +} + +/******************************************************************************* +* Function Name : ServiceInfo_Get_ALL_Loop_State +* Description : 服务信息 - 获取全部回路的开关状态 +* Input : + read_buff : 读取状态存放的数组 +* Return : 无 +*******************************************************************************/ +uint8_t ServiceInfo_Get_ALL_Loop_State(uint8_t *read_buff) +{ + uint32_t dev_addr = Find_AllDevice_List_Information(Dev_Host_Service,0x00); + Device_Public_Information_G BUS_Public; //共用 + NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 + uint8_t loop_offset = 0; + uint8_t loop_ide = 0; + + if(dev_addr == 0x00) return 0x01; //未找到设备 + + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); + SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),dev_addr+Dev_Privately); + + if( DevServiceInfo.ServiceLoopValidNum >= ServiceNumMAX ) DevServiceInfo.ServiceLoopValidNum = ServiceNumMAX; + + for(uint8_t i=0;i= DevLVinputInfo.LVinputValidNum) @@ -85,11 +85,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_LVinput_InType_Get(uint32_t if(CtrlValid == Ret) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s %d: %d 动作清空",__func__,DevInputLoop, DevInputType); - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO)); } return Ret; @@ -113,7 +109,7 @@ __attribute__((section(".non_0_wait"))) void Dev_LVinput_Dis(uint32_t DevAddr) { return ; } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicLVinput,sizeof(Device_Public_Information_G),DevAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_PublicLVinput); SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately); if( (0x00000000 == DevLVinputInfo.DevC5IOAddr) || (0xFFFFFFFF == DevAddr) ) @@ -121,7 +117,7 @@ __attribute__((section(".non_0_wait"))) void Dev_LVinput_Dis(uint32_t DevAddr) return ; } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicC5IO,sizeof(Device_Public_Information_G),DevLVinputInfo.DevC5IOAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevLVinputInfo.DevC5IOAddr,&BUS_PublicC5IO); SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevLVinputInfo.DevC5IOAddr+Dev_Privately); for(uint8_t i = 0;i= Rs485LED.LEDLoopValidNum) //有效回路 @@ -216,10 +216,7 @@ __attribute__((section(".non_0_wait"))) void BLW_LED_Control_State(uint32_t CfgD { Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d",loop,start); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LED, sizeof(RS485_LED_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO)); } } @@ -292,7 +289,7 @@ __attribute__((section(".non_0_wait"))) void BLW_LED_Group_Ctrl(uint32_t CfgDevA // Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LED调光状态群控控制开始,当前回路标志:%04X 回路上限%d ", CtrlFlag, CtrlNum); - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately); if(CtrlNum >= Rs485LEDInfo.LEDLoopValidNum) @@ -426,10 +423,7 @@ __attribute__((section(".non_0_wait"))) void BLW_LED_Group_Ctrl(uint32_t CfgDevA } } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO)); } /******************************************************************************* @@ -455,7 +449,7 @@ __attribute__((section(".non_0_wait"))) uint16_t BLW_LED_Group_Read(uint32_t dev Device_Public_Information_G BUS_Public; RS485_LED_INFO Rs485LEDInfo; //继电器局部变量 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); + BLV_Device_PublicInfo_Read_To_Struct(devaddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately); if(ReadNum >= Rs485LEDInfo.LEDLoopValidNum) @@ -549,10 +543,7 @@ __attribute__((section(".non_0_wait"))) uint16_t BLW_LED_Group_Read(uint32_t dev if(tempflag!=0) { - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485LEDInfo, sizeof(RS485_LED_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),devaddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(devaddr,&BUS_Public,(uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO)); } return Ret; diff --git a/BLV_485_Driver/blv_rs485_dev_switchctrl.c b/BLV_485_Driver/blv_rs485_dev_switchctrl.c index fcf2850..d808282 100644 --- a/BLV_485_Driver/blv_rs485_dev_switchctrl.c +++ b/BLV_485_Driver/blv_rs485_dev_switchctrl.c @@ -133,7 +133,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_Swi_InType_Get(uint32_t DevA RS485_SWI_INFO Rs485SwiInfo; //开关局部变量 uint8_t Ret = CtrlInvalid; //控制无效 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*拷贝设备私有信息*/ if(DevInputLoop >= RS_SWITCH_CH_MAX) @@ -164,10 +164,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_Swi_InType_Get(uint32_t DevA Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"开关动作清空:%d",Ret); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); } return Ret; @@ -198,7 +195,7 @@ __attribute__((section(".non_0_wait"))) void Dev_Swi_Output_Ctrl(uint32_t CfgDev return ; } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevAddr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*拷贝设备私有信息*/ if(DevOutputLoop >= Rs485SwiInfo.SwtOutputValidNum) @@ -254,10 +251,8 @@ __attribute__((section(".non_0_wait"))) void Dev_Swi_Output_Ctrl(uint32_t CfgDev { BLV_Active_Set_List_Addr(DevAddr); //唯有主动设备优先处理 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately); + + BLV_Device_Info_Write_To_SRAM(DevAddr,&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); } // BLW_Touch_Switch_Feedback(DevAddr, DevOutputLoop, State); diff --git a/BLV_485_Driver/blv_rs485_dev_tempctrl.c b/BLV_485_Driver/blv_rs485_dev_tempctrl.c index 4c62817..778fe7e 100644 --- a/BLV_485_Driver/blv_rs485_dev_tempctrl.c +++ b/BLV_485_Driver/blv_rs485_dev_tempctrl.c @@ -160,7 +160,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_TEMPCTRL_InType_Get(uint32_t return 0; //就返回 } - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),CfgDevAddIn); + BLV_Device_PublicInfo_Read_To_Struct(CfgDevAddIn,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAddIn+Dev_Privately); Rs485Tem.TemCondCfg.IndoorFlag = DevInputType & 0x0001; @@ -303,10 +303,7 @@ __attribute__((section(".non_0_wait"))) uint8_t Dev_TEMPCTRL_InType_Get(uint32_t if(CtrlValid == Ret) { - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Tem, sizeof(RS485_TEMP_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),CfgDevAddIn);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAddIn+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(CfgDevAddIn,&BUS_Public,(uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO)); } return Ret; @@ -347,9 +344,9 @@ __attribute__((section(".non_0_wait"))) void Dev_TEMPCTRL_Ctrl(uint32_t CfgDevAd } /*拷贝设备私有信息*/ SRAM_DMA_Read_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAddOut+Dev_Privately); - SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicIn,sizeof(Device_Public_Information_G),CfgDevAddIn); + BLV_Device_PublicInfo_Read_To_Struct(CfgDevAddIn,&BUS_PublicIn); SRAM_DMA_Read_Buff((uint8_t *)&Rs485TemIn,sizeof(RS485_TEMP_INFO),CfgDevAddIn+Dev_Privately); - SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicOut,sizeof(Device_Public_Information_G),CfgDevAddOut); + BLV_Device_PublicInfo_Read_To_Struct(CfgDevAddOut,&BUS_PublicOut); // Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"温控器状态事先同步485地址:%d,控制状态:%4x,控制参数:%4x,在线状态:%d",BUS_PublicOut.addr, TEMSTATECONVER(Rs485Tem.TemStateCtrl), DevOutputType, Rs485Tem.DevOffline); Dev_Temp_State_Sync(&Rs485TemLoc,&Rs485Tem.TemStateCtrl); @@ -601,10 +598,7 @@ __attribute__((section(".non_0_wait"))) void Dev_TEMPCTRL_Ctrl(uint32_t CfgDevAd if(0x01 == KeepFlag) { - BUS_PublicOut.check = 0x00; - BUS_PublicOut.check = DoubleData_CheckSum((uint8_t *)&BUS_PublicOut, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Tem, sizeof(RS485_TEMP_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_PublicOut, sizeof(Device_Public_Information_G),CfgDevAddOut);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAddOut+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(CfgDevAddIn,&BUS_PublicOut,(uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO)); } } @@ -667,7 +661,7 @@ __attribute__((section(".non_0_wait"))) uint8_t TemSingleJudge(uint32_t CfgDevAd Device_Public_Information_G BUS_Public; RS485_TEMP_INFO Rs485TempT1; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),CfgDevAdd); + BLV_Device_PublicInfo_Read_To_Struct(CfgDevAdd,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),CfgDevAdd+Dev_Privately);/*拷贝设备私有信息*/ if(Rs485TempT1.TemStateCtrlLast.on_off != Rs485TempT1.TemStateCtrl.on_off) //开关机 @@ -799,10 +793,7 @@ __attribute__((section(".non_0_wait"))) uint8_t TemSingleJudge(uint32_t CfgDevAd Rs485TempT1.DevSendCnt++; //发送次数累计 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485TempT1, sizeof(RS485_TEMP_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),CfgDevAdd);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),CfgDevAdd+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(CfgDevAdd,&BUS_Public,(uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO)); } return Ret; @@ -826,7 +817,7 @@ __attribute__((section(".non_0_wait"))) uint8_t TemGlobalJudge(uint32_t CfgDevAd Device_Public_Information_G BUS_Public; RS485_TEMP_INFO Rs485Tem; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),CfgDevAdd); + BLV_Device_PublicInfo_Read_To_Struct(CfgDevAdd,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAdd+Dev_Privately);/*拷贝设备私有信息*/ if(Dev_Temp_State_Data(Rs485Tem.TemStateCtrlLast) != Dev_Temp_State_Data(Rs485Tem.TemStateCtrl)) //控制状态改变了 @@ -895,10 +886,7 @@ __attribute__((section(".non_0_wait"))) uint8_t TemGlobalJudge(uint32_t CfgDevAd Rs485Tem.DevSendCnt++; //发送次数累计 } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485Tem, sizeof(RS485_TEMP_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),CfgDevAdd);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO),CfgDevAdd+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(CfgDevAdd,&BUS_Public,(uint8_t *)&Rs485Tem,sizeof(RS485_TEMP_INFO)); } return Ret; diff --git a/BLV_485_Driver/blv_rs485_dev_touchswitch.c b/BLV_485_Driver/blv_rs485_dev_touchswitch.c index c2ebcc6..9ac104b 100644 --- a/BLV_485_Driver/blv_rs485_dev_touchswitch.c +++ b/BLV_485_Driver/blv_rs485_dev_touchswitch.c @@ -63,7 +63,7 @@ __attribute__((section(".non_0_wait"))) void BlwRelaySwtRecAsk(uint8_t *data) Device_Public_Information_G BUS_Public; //共用 NOR_HVOUT_INFO DevHVoutInfo; //继电器局部变量 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),device_addr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(device_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),device_addr+Dev_Privately); if(DevHVoutInfo.HVSwitchFlag==0x01) @@ -221,14 +221,14 @@ __attribute__((section(".non_0_wait"))) uint8_t BLW_Rs485_Touch_Swi_Check(uint32 if(data[0] == SRAM_Read_Byte(DevAdd+Dev_Addr)) //地址刚好匹配上BUS_Public.addr { Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"开关地址匹配上 DevAdd:%d,len:%d",data[0],DataLen); - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); + BLV_Device_PublicInfo_Read_To_Struct(DevAdd,&BUS_Public); } else //地址没有匹配上 { DevAdd = Find_AllDevice_List_Information2(Active_Port, 0x06, data[0]); //地址重新赋值 if( (0x00000000 != DevAdd) || (0xFFFFFFFF != DevAdd) ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); + BLV_Device_PublicInfo_Read_To_Struct(DevAdd,&BUS_Public); }else{ return ret; } @@ -250,10 +250,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLW_Rs485_Touch_Swi_Check(uint32 /*日志记录*/ LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,DataLen); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(DevAdd,&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); return ret; } @@ -333,7 +330,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLW_Touch_SwitchCycleDis(uint32_ uint8_t i; uint8_t Ret = RS485OCCUPYNOTIME; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); + BLV_Device_PublicInfo_Read_To_Struct(DevAdd,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);/*拷贝设备私有信息*/ if(DevActionGlobal.DevActionU64Cond.EleState==0x01) @@ -385,10 +382,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLW_Touch_SwitchCycleDis(uint32_ /*通讯统计记录*/ BLV_Communication_Record(&Rs485SwiInfo.comm_record,0x01,0x00); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(DevAdd,&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); } return Ret; diff --git a/BLV_485_Driver/blv_rs485_dev_touchtempt1.c b/BLV_485_Driver/blv_rs485_dev_touchtempt1.c index 5759c66..80b9625 100644 --- a/BLV_485_Driver/blv_rs485_dev_touchtempt1.c +++ b/BLV_485_Driver/blv_rs485_dev_touchtempt1.c @@ -412,7 +412,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLWOut_Rs485_TempT1_Check(uint32 return rev; //长度 } SRAM_DMA_Read_Buff(data,len,data_addr); //拷贝482数据 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),dev_addr+Dev_Privately); if(len < 6) return rev; @@ -490,10 +490,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLWOut_Rs485_TempT1_Check(uint32 break; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485TempT1, sizeof(RS485_TEMP_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO)); } return rev; diff --git a/BLV_485_Driver/inc/blv_nor_dev_c5relay.h b/BLV_485_Driver/inc/blv_nor_dev_c5relay.h new file mode 100644 index 0000000..7411e9e --- /dev/null +++ b/BLV_485_Driver/inc/blv_nor_dev_c5relay.h @@ -0,0 +1,20 @@ +/* + * blv_nor_dev_c5relay.h + * + * Created on: Jan 5, 2026 + * Author: cc + */ + +#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_C5RELAY_H_ +#define BLV_485_DRIVER_INC_BLV_NOR_DEV_C5RELAY_H_ + +#include +#include "blv_rs485_protocol.h" +#include "logic_file_function.h" +#include "blv_nor_dev_hvoutfun.h" + +void BLW_RS485_C5RELAY_Data_Init(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo); +uint8_t BLW_C5RELAYCycleCtrl(uint32_t dev_addr); +uint8_t BLW_Rs485_C5RELAY_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len); + +#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_C5RELAY_H_ */ diff --git a/BLV_485_Driver/inc/blv_nor_dev_lvoutput.h b/BLV_485_Driver/inc/blv_nor_dev_lvoutput.h new file mode 100644 index 0000000..1078e5f --- /dev/null +++ b/BLV_485_Driver/inc/blv_nor_dev_lvoutput.h @@ -0,0 +1,32 @@ +/* + * blv_nor_dev_lvoutput.h + * + * Created on: Dec 31, 2025 + * Author: cc + */ + +#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_LVOUTPUT_H_ +#define BLV_485_DRIVER_INC_BLV_NOR_DEV_LVOUTPUT_H_ + +#define LVoutputNumMAX 32 //强电继电器个数限制 +#define C1_LVOUTPUTNUMMAX 0x14 //C1为20路 + +typedef struct +{ + + uint8_t DevLVoutputState[LVoutputNumMAX]; //当前强电继电器的状态 结合设备状态变化标志,可以判断当前强电继电器是打开还是关闭 + uint8_t DevLVoutputStateLast[LVoutputNumMAX]; //当前强电继电器的上一个状态 + + uint8_t LVoutputLoopValidNum; //强电继电器有效回路数 + + uint8_t init_flag; //初始化标志位 + uint32_t DevC5IOAddr; //C5IO的地址 + +}NOR_LVOUTPUT_INFO; + +void BLV_Nor_Dev_LVoutput_Init(uint8_t devaddr); +uint16_t LVoutput_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop); +void BLW_LVoutput_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t DevOutputType); +void Dev_LVoutput_Dis(uint32_t DevAddr); + +#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_LVOUTPUT_H_ */ diff --git a/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h b/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h index e7072b6..e29424f 100644 --- a/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h +++ b/BLV_485_Driver/inc/blv_nor_dev_serviceinfo.h @@ -90,13 +90,20 @@ typedef enum // typedef struct { uint8_t DevChangeFlag[ServiceNumMAX]; //设备变化标志 1打开 2关闭 读完标志后,需要清空 - uint8_t DevServiceState[ServiceNumMAX]; //当前服务信息的状态 结合设备状态变化标志,可以判断当前服务信息是打开还是关闭 - uint8_t DevServiceStateLast[ServiceNumMAX]; //当前服务信息的上一个状态 + uint8_t Loop_State[ServiceNumMAX]; //当前服务信息的状态 结合设备状态变化标志,可以判断当前服务信息是打开还是关闭 + uint8_t Loop_State_Last[ServiceNumMAX]; //当前服务信息的上一个状态 uint8_t ServiceLoopValidNum; //服务信息有效回路数 uint8_t is_first_power_on; //首次取电标志位 }NOR_SERVICE_INFO; //服务信息的结构体参数 - - +void BLV_Nor_Dev_Service_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len); +uint16_t Service_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop); +void BLW_Service_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t start); +uint8_t Dev_Service_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType); +void Dev_Action_CondService_Get(NOR_SERVICE_INFO *DevServiceInfo); +void Dev_Service_Dis(uint32_t DevAddr); +uint8_t ServiceInfo_Set_first_power_on(uint8_t state); +uint8_t ServiceInfo_Get_ALL_Loop_State(uint8_t *read_buff); +uint8_t ServiceInfo_Set_RoomState(uint8_t state); #endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_SERVICEINFO_H_ */ diff --git a/BLV_485_Driver/inc/blv_nor_dec_virtualcard.h b/BLV_485_Driver/inc/blv_nor_dev_virtualcard.h similarity index 96% rename from BLV_485_Driver/inc/blv_nor_dec_virtualcard.h rename to BLV_485_Driver/inc/blv_nor_dev_virtualcard.h index ca4c8b9..217a928 100644 --- a/BLV_485_Driver/inc/blv_nor_dec_virtualcard.h +++ b/BLV_485_Driver/inc/blv_nor_dev_virtualcard.h @@ -5,8 +5,12 @@ * Author: cc */ -#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEC_VIRTUALCARD_H_ -#define BLV_485_DRIVER_INC_BLV_NOR_DEC_VIRTUALCARD_H_ +#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_VIRTUALCARD_H_ +#define BLV_485_DRIVER_INC_BLV_NOR_DEV_VIRTUALCARD_H_ + +#include +#include "blv_rs485_protocol.h" +#include "logic_file_function.h" #define VC_CONDGROUP_MAX 10 //条件组最大支持数 #define VC_CONDSUB_MAX 10 //每组条件最大支持数 @@ -47,8 +51,6 @@ #define VC_Event_BrieflyLeaving_Flag 0x40 //短暂人离事件:条件逻辑判断有人->无人中,短暂判定人离 #define VC_Event_LongTermLeaving_Flag 0x80 //短暂人离事件:条件逻辑判断有人->无人中,长时间判定人离 - - typedef struct { uint8_t HPort_Type; //映射端口类型 @@ -141,4 +143,4 @@ typedef struct void BLV_Nor_Dev_VirtualCard_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len); -#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEC_VIRTUALCARD_H_ */ +#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_VIRTUALCARD_H_ */ diff --git a/BLV_485_Driver/pc_devicetest_fun.c b/BLV_485_Driver/pc_devicetest_fun.c index ad6a5a9..db1aa90 100644 --- a/BLV_485_Driver/pc_devicetest_fun.c +++ b/BLV_485_Driver/pc_devicetest_fun.c @@ -54,7 +54,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_PC_DEVICE_TEST_Cycle_Call(ui Device_Public_Information_G BUS_Public; PC_TEST_DEVICE_INFO PC_Test_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); if((PC_Test_Info.test_flag == 0x01) || (PC_Test_Info.test_flag == 0x02) || (PC_Test_Info.test_flag == 0x11) || (PC_Test_Info.test_flag == 0x12)) //输入测试结束判断 @@ -66,11 +66,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_PC_DEVICE_TEST_Cycle_Call(ui Dbg_Println(DBG_OPT_DEVICE_STATUS,"PC Test - The Input Test END"); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&PC_Test_Info, sizeof(PC_TEST_DEVICE_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); - + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO)); } }else if((PC_Test_Info.test_flag == 0x03) || (PC_Test_Info.test_flag == 0x13)) //进入巡回测试,关闭端口1任务,开始定时发送数据 { @@ -103,10 +99,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_PC_DEVICE_TEST_Cycle_Call(ui g_pc_test.test_flag = PC_Test_Info.test_flag; Dbg_Println(DBG_OPT_DEVICE_STATUS,"PC Test TOUR DATAS END:%d num:%d SUCC:%d",PC_Test_Info.test_flag,g_pc_test.tour_num,g_pc_test.tour_succ); - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&PC_Test_Info, sizeof(PC_TEST_DEVICE_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO)); }else { g_pc_test.tour_num++; @@ -267,10 +260,9 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_PC_DEVICE_TEST_Data_Processi Device_Public_Information_G BUS_Public; PC_TEST_DEVICE_INFO PC_Test_Info; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); + BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); - /*校验巡回数据*/ if(BLV_PC_TEST_TOUR_DATACheck(data_addr,len) == 0x00) { @@ -518,10 +510,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_PC_DEVICE_TEST_Data_Processi default: break; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&PC_Test_Info, sizeof(PC_TEST_DEVICE_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO)); return 0; } diff --git a/MCU_Driver/blv_dev_action.c b/MCU_Driver/blv_dev_action.c index 6a2e8a0..3acbf6c 100644 --- a/MCU_Driver/blv_dev_action.c +++ b/MCU_Driver/blv_dev_action.c @@ -10,6 +10,209 @@ BLV_DevAction_Manage_G DevActionGlobal; // #define Action_Group_Ctrl_Num 30 //动作数据中单个类型 群控个数上限 + +/******************************************************************************* +* Function Name : Add_DevAction_To_List +* Description : 将设备动作信息添加到链表,保存到外部SRAM +* DevAction_Info 动作结构体 +*******************************************************************************/ +__attribute__((section(".non_0_wait"))) void Add_DevAction_To_List(DEV_ACTION_INFO *DevAction_Info) +{ + uint32_t list_addr = SRAM_DevAction_List_Start_Addr + DevActionGlobal.DevActionNum*SRAM_DevAction_List_Size; //获取设备信息保存地址 + + if(DevActionGlobal.DevActionNum >= SRAM_DevAction_List_Num) //设备总数超过范围就返回 + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作添加超过范围 动作上限: %d", SRAM_DevAction_List_Num); + return ; + } + DevActionGlobal.DevActionNum++; + + 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); //写入数据 +} + +__attribute__((section(".non_0_wait"))) void Logic_Action_Output_DataGet(DEV_ACTION_INFO *DevAction_Info, uint8_t *DevCtrlBuf) +{ + uint8_t i = 0; + uint8_t NeightLight = 0x00; + + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前设备动作个数:%d", DevAction_Info->DevCtrlNum); + + for(i = 0; i < DevAction_Info->DevCtrlNum; i++) + { + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType = DevCtrlBuf[i*DEVACTIONOUTCFGLEN]; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevAddr = DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 1]; + + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop = DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 3]; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop |= DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 2]; + + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState = DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 5]; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState <<= 8; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState |= DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 4]; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont = DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 6]; + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayWeight = DevCtrlBuf[i*DEVACTIONOUTCFGLEN + 7]; + + if(DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Host_Invalid) //类型不为场景 + { + if(DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop != 0x00) //且回路不为0 + { + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevOutputLoop--; + } + } + + if( ( (DEV_CTRLWAY_RELATESCENE == (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState&0x00ff)) //对应场景,目前仅有弱电输出 开关和窗帘 + ||(CFG_Dev_CtrlWay_Is_RelateBlink == (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState&0x00ff))) //对应闪烁 目前仅有弱电输出 开关 + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != DEV_RS485_HEATER) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != DEV_Virtual_ColorTemp) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != Dev_485_BLE_Music) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != DEV_Carbon_Saved) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Scene_Restore) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Energy_Monitor) + && (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Host_Service) ) //并且动作输出类型不是地暖类型 + { + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState &= 0x00ff; //高字节清0 + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState |= 0x6400; //高字节赋值 + } + + if(DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont == 0x00) + { + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont = 0x00; //内容和单位都清0 + DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayWeight = 0x00; //内容和单位都清0 + } + + Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"当前设备动作数据:",&DevCtrlBuf[i*DEVACTIONOUTCFGLEN], DEVACTIONOUTCFGLEN); + + Logic_Device_Action_Data_Analysis(&DevCtrlBuf[i*DEVACTIONOUTCFGLEN]); //解析动作 + + if( (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0x00ff) == DEV_CTRLWAY_OPEN ) + { + switch(DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType) //当前设备类型 + { + case Dev_Host_HVout: + case DEV_RS485_PWM: + case DEV_RS485_STRIP: + case Dev_Rs485_PB20: + case Dev_Rs485_PB20_LD: + case Dev_Rs485_PB20_LS: + case Dev_Rs485_PB20_Relay: + case DEV_Virtual_ColorTemp: + NeightLight = 0x01; + break; + } + } + + if( (DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevCtrlState&0x00ff) == 0x12 ) //只控制亮度 + { + switch(DevAction_Info->DevActionOutput[i].DevActionOutCfg.DevType) //当前设备类型 + { + case Dev_Rs485_PB20: + case Dev_Rs485_PB20_LD: + case Dev_Rs485_PB20_LS: + NeightLight = 0x01; + break; + } + } + } + + if( (ACTION_SCENE_SLEEP == DevAction_Info->DevActionCond.SceneExcute) && (0x01 == NeightLight) ) // + { + DevActionGlobal.DevActionU64Cond.NeightFlag = 0x01; //存在夜灯 即为1 + } + +} + +/******************************************************************************* +* Function Name : BLV_DevAction_Add +* Description : 设备动作1添加 将动作的结构体填满,然后保存到外部SRAM +* data 动作参数 +* len 动作长度 +*******************************************************************************/ +__attribute__((section(".non_0_wait"))) void Logic_DevAction_Add(uint8_t *data,uint16_t len) +{ + DEV_ACTION_INFO DevAction_Info; + + memset(&DevAction_Info,0,sizeof(DEV_ACTION_INFO)); //动作全部参数清空 + + memcpy((uint8_t *)&DevAction_Info.DevActionCore.ActionNo, &data[81], 2); //拷贝场景编号 + memcpy((uint8_t *)&DevAction_Info.DevActionCore.DevActionName, &data[49], 32); //填充别名 + + 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.inAddr--; //转换到配置 + } + DevAction_Info.DevActionInput.inType = 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); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:房态 RoomState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.RoomState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:取电服务控制 EleCtrlFlag: %d", DevAction_Info.DevActionCond.DevActionU64Cond.EleCtrlFlag); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:取电状态 EleState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.EleState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:勿扰状态 DndState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.DndState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:清理状态 CleanState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.CleanState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:呼叫状态 CallState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.CallState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:洗衣状态 WashState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.WashState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:退房状态 CheckOutState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.CheckOutState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:稍后状态 WaitState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.WaitState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:SOS状态 SosState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.SosState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:预约待租状态 RentState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.RentState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:开锁状态 LockState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.LockState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:行李状态 LuggageState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.LuggageState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:保险箱状态 StrongState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.StrongState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:门磁状态 DoorState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.DoorState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:提示音状态 WarningState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.WarningState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:背光状态 BacklightState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.BacklightState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:季节 SeasonState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.SeasonState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:时间 TimeState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.TimeState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:与夜灯有关 NeightFlag: %d", DevAction_Info.DevActionCond.DevActionU64Cond.NeightFlag); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:起夜状态 NeightState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.NeightState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:RCU锁定 RcuLockState: %d", DevAction_Info.DevActionCond.DevActionU64Cond.RcuLockState); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作条件:保留2位 Reserve1: %d", DevAction_Info.DevActionCond.DevActionU64Cond.Reserve1); + + DevAction_Info.DevActionCond.SceneExcute = data[48]; //动作执行方式 + if((ACTION_SCENE_SLEEP == DevAction_Info.DevActionCond.SceneExcute) && (0x00 == DevActionGlobal.SleepActionNo)) //场景执行方式为睡眠模式 未保存过睡眠编号 + { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"增加睡眠动作,动作编号:%d", DevAction_Info.DevActionCore.ActionNo); + DevActionGlobal.SleepActionNo = DevAction_Info.DevActionCore.ActionNo; //保存睡眠场景编号 + } + + if(data[115] > DevCtrlNumMax) + { + DevAction_Info.DevCtrlNum = DevCtrlNumMax; //最多 + }else{ + DevAction_Info.DevCtrlNum = data[115]; //动作数量拷贝 + } + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备存储地址:%x,设备输入事件:%X 动作执行方式:%d", \ + DevAction_Info.DevCtrlNum, \ + DevAction_Info.DevActionInput.DevType, \ + DevAction_Info.DevActionInput.DevAddr, \ + 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); + +} + /******************************************************************************* * Function Name : Expand_And_Dimm_Action_Get * Description : 扫描动作组中的继电器类型与调光类型的动作,将其添加到群控数组中 @@ -250,7 +453,7 @@ __attribute__((section(".non_0_wait"))) uint8_t BLV_DevAction_Cond_Judge(DEV_ACT __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *DevActionInfo) { uint8_t i = 0x00,j = 0x00; - uint32_t DevAddrOut = 0x00; //设备地址局部变量 + //uint32_t DevAddrOut = 0x00; //设备地址局部变量 uint8_t DevCtrlWay = 0x00; //执行方式 uint8_t DevCtrlCont = 0x00; //执行内容 uint8_t SceneState = DEV_STATE_OPEN; @@ -280,7 +483,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D { if(expand_type[j].ExpandReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevActionInfo->DevActionOutput[i].DevActionOutAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(NULL != BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr) { if(DEV_STATE_CLOSE == BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr(DevActionInfo->DevActionOutput[i].DevActionOutAddr, SceneType, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState)) @@ -302,7 +505,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D { if(0x00!=dimm_type[j].DimmReadFlag) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevActionInfo->DevActionOutput[i].DevActionOutAddr); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(NULL != BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr) { if(DEV_STATE_CLOSE == BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr(DevActionInfo->DevActionOutput[i].DevActionOutAddr, SceneType, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState)) @@ -335,13 +538,13 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D case Dev_Scene_Restore: if(DevActionInfo->DevActionCond.SceneExcute != ACTION_SCENE_SLEEP) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); //读取设备公共信息 + 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; @@ -352,13 +555,13 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D break; #if RS485_PB20_Relay_Flag case Dev_Rs485_PB20_Relay: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + 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; @@ -371,7 +574,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D case DEV_RS485_CURTAIN: //RS485设备 - 窗帘 if(DevActionInfo->DevActionCond.SceneExcute != ACTION_SCENE_SLEEP) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + 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; @@ -381,14 +584,14 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D || (DevCtrlWay == 0x15) \ || (DevCtrlWay == 0x16) ) { - 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; } }else if( (DevCtrlWay == CFG_Dev_CtrlWay_Is_TOGGLE) || (DevCtrlWay == 0x05) ) { - if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DEV_CTRLWAY_STOP) + if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != DEV_CTRLWAY_STOP) { SceneState = DEV_STATE_CLOSE; break; @@ -399,7 +602,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D break; #if Dev_Nor_ColorTemp case Dev_Nor_ColorTemp: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + 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; @@ -408,14 +611,14 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D if(DevCtrlWay == DEV_CTRLWAY_OPEN) { DevCtrlCont |= 0x80; - 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; } }else if(DevCtrlWay == DEV_CTRLWAY_CLOSE) { - if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != (DevCtrlCont & 0x80) ) + if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop) != (DevCtrlCont & 0x80) ) { SceneState = DEV_STATE_CLOSE; break; @@ -427,7 +630,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D case DEV_C5MUSIC_Type: if(DevActionInfo->DevActionCond.SceneExcute != ACTION_SCENE_SLEEP) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { DEV_MUSIC_CTRLSTATE DevMusicCtrlState; @@ -438,7 +641,7 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D if( (DevCtrlWay == DEV_CTRLWAY_OPEN) \ || (DevCtrlWay == DEV_CTRLWAY_CLOSE) ) { - if(DevCtrlWay != BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop)) + if(DevCtrlWay != BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop)) { SceneState = DEV_STATE_CLOSE; break; @@ -450,14 +653,14 @@ __attribute__((section(".non_0_wait"))) void Expand_State_Get(DEV_ACTION_INFO *D break; #if Dev_Nor_Carbon_Flag case DEV_Carbon_Saved: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); if(NULL != BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get) //非空 { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; //低字节 DevCtrlCont = ((DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)>>8)&0x00ff; //高字节 if(0x01 == DevCtrlWay) //且控制节能状态 开和关 { - if(DevCtrlCont != BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevAddrOut, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop)) + if(DevCtrlCont != BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get(DevActionInfo->DevActionOutput[i].DevActionOutAddr, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevOutputLoop)) { SceneState = DEV_STATE_CLOSE; //只要有一个状态不满足就跳出 此时场景状态为关 break; //跳出switch循环 @@ -508,7 +711,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De switch(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType) { case Dev_Host_HVout: //继电器 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&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) @@ -520,7 +723,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De break; #if RS485_LED_Flag case DEV_RS485_PWM: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&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) @@ -543,7 +746,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De switch(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType) { case Dev_Rs485_PB20_Relay: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; @@ -561,7 +764,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: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00 ) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState & 0x00ff); @@ -572,7 +775,7 @@ __attribute__((section(".non_0_wait"))) void Sleep_State_Get(DEV_ACTION_INFO *De } break; case DEV_Virtual_ColorTemp: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; @@ -634,7 +837,7 @@ __attribute__((section(".non_0_wait"))) void MainSwitch_Expand_State_Get(DEV_ACT { if(expand_type[j].ExpandReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr != 0x00) { if(BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr(DevAddrOut, DEV_STATE_CLOSE, expand_type[j].ExpandReadFlag, HVoutNumMAX, expand_type[j].ExpandReadState) == DEV_STATE_OPEN) @@ -656,7 +859,7 @@ __attribute__((section(".non_0_wait"))) void MainSwitch_Expand_State_Get(DEV_ACT { if( dimm_type[j].DimmReadFlag != 0x00 ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr != 0x00 ) { if( BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr(DevAddrOut, DEV_STATE_CLOSE, dimm_type[j].DimmReadFlag, LED_OUT_CH_MAX, dimm_type[j].DimmReadState) == DEV_STATE_OPEN ) @@ -686,7 +889,7 @@ __attribute__((section(".non_0_wait"))) void MainSwitch_Expand_State_Get(DEV_ACT case DEV_RS485_STRIP: case Dev_Rs485_PB20: case DEV_Virtual_ColorTemp: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00 ) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; @@ -703,7 +906,7 @@ __attribute__((section(".non_0_wait"))) void MainSwitch_Expand_State_Get(DEV_ACT } break; case Dev_Scene_Restore: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get != 0x00 ) { DevCtrlWay = (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState)&0x00ff; @@ -965,11 +1168,51 @@ __attribute__((section(".non_0_wait"))) uint8_t DevAddrCtr(DEV_ACTION_INFO *DevA memset((uint8_t *)&DevActionOutput, 0x00, sizeof(Dev_Action_Output)); + Dbg_Print_Buff(DBG_BIT_LOGIC_STATUS_bit,"DevAddrCtr : ",p,DataLen); + switch(DataLen) { case DevCtrlLen: case DevCtrlDlyLenAddr: - memcpy((uint8_t *)&DevActionOutput, p, DataLen); + + if(DataLen >= 6){ + DevActionOutput.DevActionOutCfg.DevType = p[0]; + DevActionOutput.DevActionOutCfg.DevAddr = p[1]; + DevActionOutput.DevActionOutCfg.DevOutputLoop = p[3]; + DevActionOutput.DevActionOutCfg.DevOutputLoop <<= 8; + DevActionOutput.DevActionOutCfg.DevOutputLoop |= p[2]; + + DevActionOutput.DevActionOutCfg.DevCtrlState = p[5]; + DevActionOutput.DevActionOutCfg.DevCtrlState <<= 8; + DevActionOutput.DevActionOutCfg.DevCtrlState |= p[4]; + + if(DataLen >= 8) + { + DevActionOutput.DevActionOutCfg.DevDlyValue.DelayCont = p[6]; + DevActionOutput.DevActionOutCfg.DevDlyValue.DelayWeight = p[7]; + + if(DataLen == 0x10) + { + DevActionOutput.DevActionOutAddr = p[11]; + DevActionOutput.DevActionOutAddr <<= 8; + DevActionOutput.DevActionOutAddr |= p[10]; + DevActionOutput.DevActionOutAddr <<= 8; + DevActionOutput.DevActionOutAddr |= p[9]; + DevActionOutput.DevActionOutAddr <<= 8; + DevActionOutput.DevActionOutAddr |= p[8]; + + DevActionOutput.DevDlyAddr = p[15]; + DevActionOutput.DevDlyAddr <<= 8; + DevActionOutput.DevDlyAddr |= p[14]; + DevActionOutput.DevDlyAddr <<= 8; + DevActionOutput.DevDlyAddr |= p[13]; + DevActionOutput.DevDlyAddr <<= 8; + DevActionOutput.DevDlyAddr |= p[12]; + + } + } + } + break; default: return Ret; @@ -978,6 +1221,7 @@ __attribute__((section(".non_0_wait"))) uint8_t DevAddrCtr(DEV_ACTION_INFO *DevA { case DevCtrlLen: //6字节 需要自己查设备 DevAddrOut = Find_AllDevice_List_Information(DevActionOutput.DevActionOutCfg.DevType, DevActionOutput.DevActionOutCfg.DevAddr); + break; case DevCtrlDlyLenAddr: //带延时,带地址控制,带延时设备地址 DevAddrOut = DevActionOutput.DevActionOutAddr; @@ -997,8 +1241,8 @@ __attribute__((section(".non_0_wait"))) uint8_t DevAddrCtr(DEV_ACTION_INFO *DevA DevActionOutput.DevActionOutCfg.DevCtrlState, DevActionOutput.DevActionOutCfg.DevDlyValue, 0x00); - - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"设备控制地址:%x",DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); switch(DevActionOutput.DevActionOutCfg.DevType) { case DEV_RS485_SWT: @@ -1183,7 +1427,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF { if( expand_type[j].ExpandReadFlag != 0x00 ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != 0x00 ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1213,7 +1457,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF { if( dimm_type[j].DimmReadFlag != 0x00 ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != 0x00 ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1276,7 +1520,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF case DEV_Carbon_Saved: case Dev_Scene_Restore: case Dev_Energy_Monitor: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != NULL) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1307,7 +1551,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF case DEV_RS485_STRIP: case DEV_Virtual_ColorTemp: case Dev_Virtual_GlobalSet: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { @@ -1337,7 +1581,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandCtrl(DEV_ACTION_INF } break; case DEV_RS485_MUSIC: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( ( DevActionInfo != NULL ) @@ -1426,7 +1670,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO { if( expand_type[j].ExpandReadFlag != 0x00 ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL ) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1456,7 +1700,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO { if( dimm_type[j].DimmReadFlag != 0x00 ) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1497,7 +1741,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: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1528,7 +1772,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightOpen(DEV_ACTIO case DEV_RS485_STRIP: case DEV_Virtual_ColorTemp: case Dev_Virtual_GlobalSet: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1618,7 +1862,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI { if(expand_type[j].ExpandReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1646,7 +1890,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI { if(dimm_type[j].DimmReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1693,7 +1937,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandLightClose(DEV_ACTI case DEV_Virtual_ColorTemp: case Dev_Scene_Restore: case Dev_Virtual_GlobalSet: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1724,7 +1968,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: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1801,7 +2045,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN { if(expand_type[j].ExpandReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1830,7 +2074,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN { if(dimm_type[j].DimmReadFlag != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl != NULL) { BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl( @@ -1877,7 +2121,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN case DEV_Virtual_ColorTemp: case Dev_Scene_Restore: case Dev_Virtual_GlobalSet: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { if( (DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00) ) @@ -1908,7 +2152,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: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) //非空 { if((DevActionInfo != 0x00) && (DevActionInfo->DevActionState.DevAddrIn != 0x00)) // @@ -1937,7 +2181,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN } break; case Dev_NodeCurtain: //窗帘开取反为窗帘停 窗帘关取反为窗帘停 窗帘停取反为窗帘开或关 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); //拷贝所有共有数据 + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { switch(ModeCtrl) @@ -1980,7 +2224,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN } break; case DEV_RS485_CURTAIN: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if( BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL ) { switch(ModeCtrl) @@ -2017,7 +2261,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandClose(DEV_ACTION_IN } break; case Dev_Host_Service: //睡眠控制服务信息 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); if(BUS_Public.DevFunInfo.Dev_Output_Ctrl != NULL) { switch(ModeCtrl) @@ -2089,7 +2333,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ExpandDlyClear(DEV_ACTION { if(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevType != Dev_Host_Invalid) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddrOut); + BLV_Device_PublicInfo_Read_To_Struct(DevAddrOut,&BUS_Public); } if( (DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevDlyValue.DelayCont != 0x00) && (DevActionInfo->DevActionOutput[i].DevDlyAddr != 0x00) ) @@ -2567,7 +2811,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_IndicateCtrl(DEV_ACTION_I { case DEV_STATE_OPEN: case DEV_STATE_CLOSE: - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevActionInfo->DevActionOutput[i].DevActionOutAddr); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"反馈灯控制顺便清延时执行,设备类型: %d 地址:%d,回路:%d,状态:%d", BUS_Public.type, @@ -2600,7 +2844,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_IndicateCtrl(DEV_ACTION_I switch(DevActionInfo->DevActionState.SceneState) { case DEV_STATE_OPEN: //开启闪烁 应先开指示灯 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevActionInfo->DevActionOutput[i].DevActionOutAddr); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开启闪烁,状态:%04X",CFG_Dev_CtrlWay_Is_TOGGLE |(DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevCtrlState&0xff00)); DevDly_InfoSet( DevActionInfo->DevActionOutput[i].DevDlyAddr, @@ -2643,7 +2887,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_IndicateCtrl(DEV_ACTION_I case DEV_CTRLWAY_OPEN: //开 case DEV_CTRLWAY_CLOSE: //关 case DEV_CTRLWAY_STOP: //停 - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevActionInfo->DevActionOutput[i].DevActionOutAddr); + BLV_Device_PublicInfo_Read_To_Struct(DevActionInfo->DevActionOutput[i].DevActionOutAddr,&BUS_Public); Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"反馈灯控制顺便清延时执行,设备类型: %d 地址:%d,回路:%d,状态:%d", BUS_Public.type, DevActionInfo->DevActionOutput[i].DevActionOutCfg.DevAddr, @@ -2684,6 +2928,8 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr uint16_t j = 0x00; //用于遍历动作存在 uint8_t BreakFlag = 0x00; //跳出循环标志 有设备控制执行 + //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__ ); + for(j = BUS_Public->ActionCoord; j < DevActionGlobal.DevActionNum; j++) //这里为啥需要这个循环???? - 疑问点 { DevActionAddr = SRAM_DevAction_List_Start_Addr + j*SRAM_DevAction_List_Size; @@ -2695,8 +2941,10 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Cycle(uint32_t Dev_pr if( Data_CheckSum((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO)) != 0x00 ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验未通过:%d"); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验未通过:%x",DevActionAddr); continue; + }else { + //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作参数校验通过:%x 输入触发节点:%x",DevActionAddr,Dev_processing_addr); } RcuLockState_Scan(); @@ -2869,6 +3117,8 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Task(void) { Dev_processing_addr = SRAM_Device_List_Start_Addr + DevActionGlobal.Devi*SRAM_Device_List_Size; + //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s:%x %d %d",__func__,Dev_processing_addr,DevActionGlobal.Devi,DevActionGlobal.DevNum); + switch(SRAM_Read_Byte(Dev_processing_addr+Dev_Type)) { case Dev_Host_LVinput: //虚拟设备 - 弱电输入 @@ -2885,8 +3135,14 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_Task(void) case DEV_Carbon_Saved: //虚拟设备 - 碳达人 case Dev_Scene_Restore: //虚拟设备 - 场景还原 BreakFlag = 0x01; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), Dev_processing_addr); //拷贝所有公有数据 - BLV_DevAction_Cycle(Dev_processing_addr, &BUS_Public); //找到输入节点,把地址和全局属性传进去 + if(BLV_Device_PublicInfo_Read_To_Struct(Dev_processing_addr,&BUS_Public) == 0x00) + { + //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s:%x %d Check Succ",__func__,Dev_processing_addr,SRAM_Read_Byte(Dev_processing_addr+Dev_Type) ); + BLV_DevAction_Cycle(Dev_processing_addr, &BUS_Public); //找到输入节点,把地址和全局属性传进去 + }else { + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s:%x %d Check error",__func__,Dev_processing_addr,SRAM_Read_Byte(Dev_processing_addr+Dev_Type) ); + + } break; } @@ -2916,12 +3172,12 @@ __attribute__((section(".non_0_wait"))) void DevAction_DevAddr_Ctrl( if( (DevActionAddr < SRAM_DevAction_List_Start_Addr) || (DevActionAddr >= SRAM_DevAction_List_End_Addr) ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景地址无效:%08X",DevActionAddr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景地址无效:%X",DevActionAddr); return ; } SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfo, sizeof(DEV_ACTION_INFO), DevActionAddr); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景控制,场景地址有效:%08X,场景号:%d",DevActionAddr, DevActionInfo.DevActionCore.ActionNo); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景控制,场景地址有效:%X,场景号:%d",DevActionAddr, DevActionInfo.DevActionCore.ActionNo); if( DevActionInfo.DevActionCore.ActionNo == ACTION_SCENE_SLEEP ) { @@ -2985,7 +3241,7 @@ __attribute__((section(".non_0_wait"))) void BLV_DevDly_Process(uint32_t dly_pro case Dev_485_BLE_Music: case DEV_Carbon_Saved: case Dev_Energy_Monitor: - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"延时设备执行类型:%d %d路 内容: %04X",DevDlyInfo.DevDlyCore.DevType, DevDlyInfo.DevDlyCore.DevOutputLoop ,DevDlyInfo.DevOutputType); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"延时设备执行类型:%d %d路 内容: %X",DevDlyInfo.DevDlyCore.DevType, DevDlyInfo.DevDlyCore.DevOutputLoop ,DevDlyInfo.DevOutputType); Dev_Output_Ctrl = (Dev_Output_Ctrl_ptr)SRAM_Read_DW(DevDlyInfo.DevDlyCore.DevDlyAddr + Dev_Output_Ctrl_0); if(Dev_Output_Ctrl != NULL) { @@ -2993,7 +3249,7 @@ __attribute__((section(".non_0_wait"))) void BLV_DevDly_Process(uint32_t dly_pro } break; case Dev_Host_Invalid: - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景延时执行到时间,场景地址:%08X 状态: %04X",DevDlyInfo.DevDlyCore.DevDlyAddr, DevDlyInfo.DevOutputType); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"场景延时执行到时间,场景地址:%X 状态: %X",DevDlyInfo.DevDlyCore.DevDlyAddr, DevDlyInfo.DevOutputType); DevAction_DevAddr_Ctrl(DevDlyInfo.DevDlyCore.DevDlyAddr, 0x01, NOR_MODE_CTRL, DevDlyInfo.DevOutputType); break; } @@ -3005,7 +3261,7 @@ __attribute__((section(".non_0_wait"))) void BLV_DevDly_Process(uint32_t dly_pro if( DevDlyInfo.DlyBlinkFlag == 0x01 ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前延时链表存在延时闪烁执行类型:%d %d路 内容: %04X",DevDlyInfo.DevDlyCore.DevType, DevDlyInfo.DevDlyCore.DevOutputLoop ,DevDlyInfo.DevOutputType); //继电器状态赋值 + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前延时链表存在延时闪烁执行类型:%d %d路 内容: %X",DevDlyInfo.DevDlyCore.DevType, DevDlyInfo.DevDlyCore.DevOutputLoop ,DevDlyInfo.DevOutputType); //继电器状态赋值 DevDly_InfoSet(dly_processing_addr, 0x01, DevDlyInfo.DevOutputType, DevDlyInfo.DlyBlinkTime, 0x01); }else if( DevDlyInfo.DlyBlinkFlag == 0x02 ) { diff --git a/MCU_Driver/blv_netcomm_function.c b/MCU_Driver/blv_netcomm_function.c index 36787e7..4c0c793 100644 --- a/MCU_Driver/blv_netcomm_function.c +++ b/MCU_Driver/blv_netcomm_function.c @@ -941,7 +941,7 @@ __attribute__((section(".non_0_wait"))) uint32_t Find_TempDevice_List_Informatio { if(Device_Data_Check(read_addr) == 0) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),read_addr); + BLV_Device_PublicInfo_Read_To_Struct(read_addr,&BUS_Public); SRAM_DMA_Read_Buff((uint8_t *)&Rs485Temp,sizeof(RS485_TEMP_INFO),read_addr+Dev_Privately); Dbg_Println(DBG_BIT_NET_STATUS_bit,"%s Type:%d Addr:%d",__func__,BUS_Public.type,BUS_Public.addr); @@ -1359,57 +1359,55 @@ __attribute__((section(".non_0_wait"))) uint8_t Udp_Internal_BLVPCTestDevice_Pro Device_Public_Information_G BUS_Public; PC_TEST_DEVICE_INFO PC_Test_Info; - - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); - SRAM_DMA_Read_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); - - /*测试数据内容*/ - temp1 = data[BLV_UDP_HEAD_LEN]; - if(temp1 == 0x01) //测试输入 - 同时检测时间 + if(BLV_Device_PublicInfo_Read_To_Struct(dev_addr,&BUS_Public) == 0x00) { - g_pc_test.test_flag = 0x11; + SRAM_DMA_Read_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); - g_pc_test.test_dev = data[BLV_UDP_HEAD_LEN + 1]; //输入检测设备类型 - g_pc_test.test_addr = data[BLV_UDP_HEAD_LEN + 2]; //输入检测设备地址 - PC_Test_Info.test_time = data[BLV_UDP_HEAD_LEN + 3]; //测试时间,单位:分钟 + /*测试数据内容*/ + temp1 = data[BLV_UDP_HEAD_LEN]; + if(temp1 == 0x01) //测试输入 - 同时检测时间 + { + g_pc_test.test_flag = 0x11; - PC_Test_Info.test_flag = g_pc_test.test_flag; - PC_Test_Info.test_tick = SysTick_1ms; - PC_Test_Info.test_time *= 60000; + g_pc_test.test_dev = data[BLV_UDP_HEAD_LEN + 1]; //输入检测设备类型 + g_pc_test.test_addr = data[BLV_UDP_HEAD_LEN + 2]; //输入检测设备地址 + PC_Test_Info.test_time = data[BLV_UDP_HEAD_LEN + 3]; //测试时间,单位:分钟 - g_pc_test.pc_ip[0] = ip[0]; //2022-07-12 - g_pc_test.pc_ip[1] = ip[1]; - g_pc_test.pc_ip[2] = ip[2]; - g_pc_test.pc_ip[3] = ip[3]; - g_pc_test.pc_port = port; + PC_Test_Info.test_flag = g_pc_test.test_flag; + PC_Test_Info.test_tick = SysTick_1ms; + PC_Test_Info.test_time *= 60000; + + g_pc_test.pc_ip[0] = ip[0]; //2022-07-12 + g_pc_test.pc_ip[1] = ip[1]; + g_pc_test.pc_ip[2] = ip[2]; + g_pc_test.pc_ip[3] = ip[3]; + g_pc_test.pc_port = port; + } + else if(temp1 == 0x02) //测试输出 + { + g_pc_test.test_flag = 0x12; + PC_Test_Info.test_flag = g_pc_test.test_flag; + PC_Test_Info.test_tick = SysTick_1ms; + PC_Test_Info.test_time = 120000; + + Udp_Internal_PC_Testing_DataDeal(data,DataLen,ip,port); + }else if(temp1 == 0x03) //开启巡回测试 - 测试485端口 + { + g_pc_test.test_flag = 0x13; + PC_Test_Info.test_flag = g_pc_test.test_flag; + g_pc_test.tour_num = 0; + g_pc_test.tour_succ = 0; + + + g_pc_test.pc_ip[0] = ip[0]; + g_pc_test.pc_ip[1] = ip[1]; + g_pc_test.pc_ip[2] = ip[2]; + g_pc_test.pc_ip[3] = ip[3]; + g_pc_test.pc_port = port; + } + + BLV_Device_Info_Write_To_SRAM(dev_addr,&BUS_Public,(uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO)); } - else if(temp1 == 0x02) //测试输出 - { - g_pc_test.test_flag = 0x12; - PC_Test_Info.test_flag = g_pc_test.test_flag; - PC_Test_Info.test_tick = SysTick_1ms; - PC_Test_Info.test_time = 120000; - - Udp_Internal_PC_Testing_DataDeal(data,DataLen,ip,port); - }else if(temp1 == 0x03) //开启巡回测试 - 测试485端口 - { - g_pc_test.test_flag = 0x13; - PC_Test_Info.test_flag = g_pc_test.test_flag; - g_pc_test.tour_num = 0; - g_pc_test.tour_succ = 0; - - - g_pc_test.pc_ip[0] = ip[0]; - g_pc_test.pc_ip[1] = ip[1]; - g_pc_test.pc_ip[2] = ip[2]; - g_pc_test.pc_ip[3] = ip[3]; - g_pc_test.pc_port = port; - } - - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&PC_Test_Info, sizeof(PC_TEST_DEVICE_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*将数据保存*/ - SRAM_DMA_Write_Buff((uint8_t *)&PC_Test_Info,sizeof(PC_TEST_DEVICE_INFO),dev_addr+Dev_Privately); return 0x00; } @@ -2066,37 +2064,6 @@ uint8_t Udp_Internal_RoomState_Process(uint8_t *data, uint16_t DataLen, uint8_t return 0x00; } -/******************************************************************************* -* Function Name : ServiceInfo_Get_ALL_Loop_State -* Description : 服务信息 - 获取全部回路的开关状态 -*******************************************************************************/ -uint8_t ServiceInfo_Get_ALL_Loop_State(uint8_t *read_buff) -{ - uint32_t dev_addr = Find_AllDevice_List_Information(Dev_Host_Service,0x00); - Device_Public_Information_G BUS_Public; //共用 - NOR_SERVICE_INFO DevServiceInfo; //服务信息局部变量 - uint8_t loop_offset = 0; - uint8_t loop_ide = 0; - - if(dev_addr == 0x00) return 0x01; //未找到设备 - - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //拷贝所有共有数据 - SRAM_DMA_Read_Buff((uint8_t *)&DevServiceInfo,sizeof(NOR_SERVICE_INFO),dev_addr+Dev_Privately); - - if( DevServiceInfo.ServiceLoopValidNum >= ServiceNumMAX ) DevServiceInfo.ServiceLoopValidNum = ServiceNumMAX; - - for(uint8_t i=0;i SRAM_Device_List_Size ) return 2; + + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s :%x",__func__,dev_addr); + + memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); + + //BLV_Device_Public_Info_Printf(dev_info); + + rs485_temp_buff[Dev_Type] = dev_info->type; + rs485_temp_buff[Dev_Addr] = dev_info->addr; + rs485_temp_buff[Dev_port] = dev_info->port; + + rs485_temp_buff[Dev_baud] = dev_info->baud & 0xFF; + rs485_temp_buff[Dev_baud_8] = ( dev_info->baud >> 8 ) & 0xFF; + rs485_temp_buff[Dev_baud_16] = ( dev_info->baud >> 16 ) & 0xFF; + rs485_temp_buff[Dev_baud_24] = ( dev_info->baud >> 24 ) & 0xFF; + + rs485_temp_buff[Dev_Retrynum] = dev_info->retry_num; + + rs485_temp_buff[Dev_WaitTime] = dev_info->wait_time & 0xFF; + rs485_temp_buff[Dev_WaitTime_8] = ( dev_info->wait_time >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Protocol] = dev_info->Protocol; + + rs485_temp_buff[Dev_Coord] = dev_info->DevCoord & 0xFF; + rs485_temp_buff[Dev_Coord_8] = ( dev_info->DevCoord >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_ActionCoord] = dev_info->ActionCoord & 0xFF; + rs485_temp_buff[Dev_ActionCoord_8] = ( dev_info->ActionCoord >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Polling_CF] = dev_info->polling_cf & 0xFF; + rs485_temp_buff[Dev_Polling_CF_8] = ( dev_info->polling_cf >> 8 ) & 0xFF; + rs485_temp_buff[Dev_Polling_CF_16] = ( dev_info->polling_cf >> 16 ) & 0xFF; + rs485_temp_buff[Dev_Polling_CF_24] = ( dev_info->polling_cf >> 24 ) & 0xFF; + + rs485_temp_buff[Dev_Processing_CF] = dev_info->processing_cf & 0xFF; + rs485_temp_buff[Dev_Processing_CF_8] = ( dev_info->processing_cf >> 8 ) & 0xFF; + rs485_temp_buff[Dev_Processing_CF_16] = ( dev_info->processing_cf >> 16 ) & 0xFF; + rs485_temp_buff[Dev_Processing_CF_24] = ( dev_info->processing_cf >> 24 ) & 0xFF; + + memcpy(&rs485_temp_buff[Dev_Data_Process_0],(uint8_t *)&(dev_info->DevFunInfo),Dev_Fun_Ptr_Len); + memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); + + dev_info->data_len = Dev_Privately + data_len; + rs485_temp_buff[Dev_DataLen] = dev_info->data_len & 0xFF; + rs485_temp_buff[Dev_DataLen_H] = ( dev_info->data_len >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Check] = 0x00; + rs485_temp_buff[Dev_Check] = Data_CheckSum(rs485_temp_buff,dev_info->data_len); + + //Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"W BLV_Device_Info : ",rs485_temp_buff,dev_info->data_len); + + SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,dev_addr); + return 0x00; +} + +/******************************************************************************* +* Function Name : BLV_Device_PublicInfo_Read_To_Struct +* Description : 设备数据读取到SRAM中 +*******************************************************************************/ +__attribute__((section(".non_0_wait"))) uint8_t BLV_Device_PublicInfo_Read_To_Struct( + uint32_t dev_addr, + Device_Public_Information_G *dev_info) +{ + if( (dev_info == NULL) || (dev_addr == 0x00) ) { + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s %x ptr_null",__func__,dev_addr); + return 1; + } + + //从外部SRAM中读取数据,赋值到设备信息 + memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); + + dev_info->data_len = SRAM_Read_Word(dev_addr + Dev_DataLen); + SRAM_DMA_Read_Buff(rs485_temp_buff,dev_info->data_len,dev_addr); + + if( dev_info->data_len > SRAM_Device_List_Size ) { + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s %x data_len error",__func__,dev_addr); + return 1; //数据长度不对,直接退出 + } + + if( Data_CheckSum(rs485_temp_buff,dev_info->data_len) != 0x00 ) { + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s %x Check error",__func__,dev_addr); + return 2; //数据校验失败,直接退出 + } + + //Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"R BLV_Device_Info : ",rs485_temp_buff,dev_info->data_len); + + dev_info->type = rs485_temp_buff[Dev_Type]; + dev_info->addr = rs485_temp_buff[Dev_Addr]; + dev_info->port = rs485_temp_buff[Dev_port]; + + dev_info->baud = rs485_temp_buff[Dev_baud_24]; + dev_info->baud <<= 8; + dev_info->baud |= rs485_temp_buff[Dev_baud_16]; + dev_info->baud <<= 8; + dev_info->baud |= rs485_temp_buff[Dev_baud_8]; + dev_info->baud <<= 8; + dev_info->baud |= rs485_temp_buff[Dev_baud]; + + dev_info->retry_num = rs485_temp_buff[Dev_Retrynum]; + + dev_info->wait_time = rs485_temp_buff[Dev_WaitTime_8]; + dev_info->wait_time <<= 8; + dev_info->wait_time |= rs485_temp_buff[Dev_WaitTime]; + + dev_info->Protocol = rs485_temp_buff[Dev_Protocol]; + + dev_info->DevCoord = rs485_temp_buff[Dev_Coord_8]; + dev_info->DevCoord <<= 8; + dev_info->DevCoord |= rs485_temp_buff[Dev_Coord]; + + dev_info->ActionCoord = rs485_temp_buff[Dev_ActionCoord_8]; + dev_info->ActionCoord <<= 8; + dev_info->ActionCoord |= rs485_temp_buff[Dev_ActionCoord]; + + dev_info->polling_cf = rs485_temp_buff[Dev_Polling_CF_24]; + dev_info->polling_cf <<= 8; + dev_info->polling_cf |= rs485_temp_buff[Dev_Polling_CF_16]; + dev_info->polling_cf <<= 8; + dev_info->polling_cf |= rs485_temp_buff[Dev_Polling_CF_8]; + dev_info->polling_cf <<= 8; + dev_info->polling_cf |= rs485_temp_buff[Dev_Polling_CF]; + + dev_info->processing_cf = rs485_temp_buff[Dev_Processing_CF_24]; + dev_info->processing_cf <<= 8; + dev_info->processing_cf |= rs485_temp_buff[Dev_Processing_CF_16]; + dev_info->processing_cf <<= 8; + dev_info->processing_cf |= rs485_temp_buff[Dev_Processing_CF_8]; + dev_info->processing_cf <<= 8; + dev_info->processing_cf |= rs485_temp_buff[Dev_Processing_CF]; + + memcpy((uint8_t *)&(dev_info->DevFunInfo),&rs485_temp_buff[Dev_Data_Process_0],Dev_Fun_Ptr_Len); + + //BLV_Device_Public_Info_Printf(dev_info); + + return 0x00; +} + +/******************************************************************************* +* Function Name : BLV_Device_PublicInfo_Update_To_Struct +* Description : 设备数据读取到SRAM中 +*******************************************************************************/ +__attribute__((section(".non_0_wait"))) uint8_t BLV_Device_PublicInfo_Update_To_Struct( + uint32_t dev_addr, + Device_Public_Information_G *dev_info) +{ + if( (dev_info == NULL) || (dev_addr == 0x00) ) return 1; + + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%s :%x",__func__,dev_addr); + + memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); + + dev_info->data_len = SRAM_Read_Word(dev_addr + Dev_DataLen); + SRAM_DMA_Read_Buff(rs485_temp_buff,dev_info->data_len,dev_addr); + + rs485_temp_buff[Dev_Type] = dev_info->type; + rs485_temp_buff[Dev_Addr] = dev_info->addr; + rs485_temp_buff[Dev_port] = dev_info->port; + + rs485_temp_buff[Dev_baud] = dev_info->baud & 0xFF; + rs485_temp_buff[Dev_baud_8] = ( dev_info->baud >> 8 ) & 0xFF; + rs485_temp_buff[Dev_baud_16] = ( dev_info->baud >> 16 ) & 0xFF; + rs485_temp_buff[Dev_baud_24] = ( dev_info->baud >> 24 ) & 0xFF; + + rs485_temp_buff[Dev_Retrynum] = dev_info->retry_num; + + rs485_temp_buff[Dev_WaitTime] = dev_info->wait_time & 0xFF; + rs485_temp_buff[Dev_WaitTime_8] = ( dev_info->wait_time >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Protocol] = dev_info->Protocol; + + rs485_temp_buff[Dev_Coord] = dev_info->DevCoord & 0xFF; + rs485_temp_buff[Dev_Coord_8] = ( dev_info->DevCoord >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_ActionCoord] = dev_info->ActionCoord & 0xFF; + rs485_temp_buff[Dev_ActionCoord_8] = ( dev_info->ActionCoord >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Polling_CF] = dev_info->polling_cf & 0xFF; + rs485_temp_buff[Dev_Polling_CF_8] = ( dev_info->polling_cf >> 8 ) & 0xFF; + rs485_temp_buff[Dev_Polling_CF_16] = ( dev_info->polling_cf >> 16 ) & 0xFF; + rs485_temp_buff[Dev_Polling_CF_24] = ( dev_info->polling_cf >> 24 ) & 0xFF; + + rs485_temp_buff[Dev_Processing_CF] = dev_info->processing_cf & 0xFF; + rs485_temp_buff[Dev_Processing_CF_8] = ( dev_info->processing_cf >> 8 ) & 0xFF; + rs485_temp_buff[Dev_Processing_CF_16] = ( dev_info->processing_cf >> 16 ) & 0xFF; + rs485_temp_buff[Dev_Processing_CF_24] = ( dev_info->processing_cf >> 24 ) & 0xFF; + + memcpy(&rs485_temp_buff[Dev_Data_Process_0],(uint8_t *)&(dev_info->DevFunInfo),Dev_Fun_Ptr_Len); + + rs485_temp_buff[Dev_DataLen] = dev_info->data_len & 0xFF; + rs485_temp_buff[Dev_DataLen_H] = ( dev_info->data_len >> 8 ) & 0xFF; + + rs485_temp_buff[Dev_Check] = 0x00; + rs485_temp_buff[Dev_Check] = Data_CheckSum(rs485_temp_buff,dev_info->data_len); + + //Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"W BLV_Device_Info : ",rs485_temp_buff,dev_info->data_len); + + SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,dev_addr); + + return 0x00; +} + +/******************************************************************************* +* Function Name : BLV_Device_Public_Info_Printf +* Description : 打印设备的公共信息 +* Input : + dev_info : 设备公共数据 +* Return : None +*******************************************************************************/ +void BLV_Device_Public_Info_Printf(Device_Public_Information_G *dev_info) +{ + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info type : %d",dev_info->type); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info addr : %d",dev_info->addr); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info port : %d",dev_info->port); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info baud : %d",dev_info->baud); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info retry_num : %d",dev_info->retry_num); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info wait_time : %d",dev_info->wait_time); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Protocol : %d",dev_info->Protocol); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info DevCoord : %d",dev_info->DevCoord); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info ActionCoord : %d",dev_info->ActionCoord); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info polling_cf : %x",dev_info->polling_cf); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info processing_cf : %x",dev_info->processing_cf); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Data_Process : %x",dev_info->DevFunInfo.Dev_Data_Process); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Input_Type_Get : %x",dev_info->DevFunInfo.Dev_Input_Type_Get); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Output_Ctrl : %x",dev_info->DevFunInfo.Dev_Output_Ctrl); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Output_Loop_State_Get : %x",dev_info->DevFunInfo.Dev_Output_Loop_State_Get); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Output_Group_Ctrl : %x",dev_info->DevFunInfo.Dev_Output_Group_Ctrl); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Dev Info Dev_Output_Loop_Group_State_Get_ptr : %x",dev_info->DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr); +} + /******************************************************************************* * Function Name : Add_BUS_Device_To_List * Description : 添加BUS设备到链表 @@ -33,31 +275,9 @@ __attribute__((section(".non_0_wait"))) void Add_BUS_Device_To_List( uint32_t list_addr = SRAM_Read_DW(SRAM_BUS_Device_List_Addr); //获取设备信息保存地址 if((list_addr < SRAM_Device_List_Start_Addr) || (list_addr > SRAM_Device_List_End_Addr)) list_addr = SRAM_Device_List_Start_Addr; - memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); + BLV_Device_Info_Write_To_SRAM(list_addr,dev_info,dev_data,data_len); - memcpy(rs485_temp_buff,(uint8_t *)dev_info,Dev_Privately); - memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); - - dev_info->check = 0x00; - dev_info->check = Data_CheckSum(rs485_temp_buff,dev_info->data_len); - SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,list_addr); - -// /*添加公有数据*/ -// SRAM_DMA_Write_Buff(rs485_temp_buff,Dev_Privately,list_addr); -// -// /*添加设备私有变量*/ -// SRAM_DMA_Write_Buff(dev_data,data_len,list_addr+Dev_Privately); -// -// /*计算校验值*/ -// check_val = Dev_CheckSum(list_addr,dev_info->data_len); -// SRAM_Write_Byte(check_val,list_addr+Dev_Check); //校验值重新写入 - -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"data_len :%d ,dev Buffer:" , write_len); -// for(uint16_t i = 0;i < write_len;i++) -// { -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%02X " , SRAM_Read_Byte(list_addr + i)); -// } -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"\r\n"); + BLV_Device_Public_Info_Printf(dev_info); /*设备添加完毕,设备链表地址偏移*/ list_addr += SRAM_Device_List_Size; @@ -91,42 +311,7 @@ __attribute__((section(".non_0_wait"))) void Add_POLL_Device_To_List( } if( (list_addr < Start_addr) || (list_addr > SRAM_Device_List_End_Addr)) list_addr = Start_addr; - memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); - - memcpy(rs485_temp_buff,(uint8_t *)dev_info,Dev_Privately); - memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); - - dev_info->check = 0x00; - dev_info->check = Data_CheckSum(rs485_temp_buff,dev_info->data_len); - SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,list_addr); - -// /*清空数据*/ -// for(uint16_t i = 0;ipolling_cf,list_addr+Dev_Polling_CF); -// -// SRAM_Write_DW(dev_info->processing_cf,list_addr+Dev_Processing_CF); -// -// /*添加设备私有变量*/ -// SRAM_DMA_Write_Buff(dev_data,data_len,list_addr+Dev_Privately); -// -// /*计算校验值*/ -// dev_info->check = Dev_CheckSum(list_addr,dev_info->data_len); -// SRAM_Write_Byte(dev_info->check,list_addr+Dev_Check); //校验值重新写入 - -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"data_len :%d ,dev Buffer:" , write_len); -// for(uint16_t i = 0;i < write_len;i++) -// { -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%02X " , SRAM_Read_Byte(list_addr + i)); -// } -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"\r\n"); + BLV_Device_Info_Write_To_SRAM(list_addr,dev_info,dev_data,data_len); /*设备添加完毕,设备链表地址偏移*/ list_addr += SRAM_Device_List_Size; @@ -161,41 +346,7 @@ __attribute__((section(".non_0_wait"))) void Add_ACT_Device_To_List( } if((list_addr < Start_addr) || (list_addr > SRAM_Device_List_End_Addr)) list_addr = Start_addr; - memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); - - memcpy(rs485_temp_buff,(uint8_t *)dev_info,Dev_Privately); - memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); - - dev_info->check = 0x00; - dev_info->check = Data_CheckSum(rs485_temp_buff,dev_info->data_len); - SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,list_addr); - -// /*清空数据*/ -// for(uint16_t i = 0;ipolling_cf,list_addr+Dev_Polling_CF); -// -// SRAM_Write_DW(dev_info->processing_cf,list_addr+Dev_Processing_CF); -// -// /*添加设备私有变量*/ -// SRAM_DMA_Write_Buff(dev_data,data_len,list_addr+Dev_Privately); -// -// /*计算校验值*/ -// dev_info->check = Dev_CheckSum(list_addr,dev_info->data_len); -// SRAM_Write_Byte(dev_info->check,list_addr+Dev_Check); //校验值重新写入 - -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"data_len :%d ,dev Buffer:" , write_len); -// for(uint16_t i = 0;i < write_len;i++) -// { -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%02X " , SRAM_Read_Byte(list_addr + i)); -// } -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"\r\n"); + BLV_Device_Info_Write_To_SRAM(list_addr,dev_info,dev_data,data_len); /*设备添加完毕,设备链表地址偏移*/ list_addr += SRAM_Device_List_Size; @@ -231,66 +382,13 @@ __attribute__((section(".non_0_wait"))) void Add_Nor_Device_To_List( } if((list_addr < Start_addr) || (list_addr > SRAM_Device_List_End_Addr)) list_addr = Start_addr; - memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); - - memcpy(rs485_temp_buff,(uint8_t *)dev_info,Dev_Privately); - memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); - - dev_info->check = 0x00; - dev_info->check = Data_CheckSum(rs485_temp_buff,dev_info->data_len); - SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,list_addr); - -// /*清空数据*/ -// for(uint16_t i = 0;icheck = Dev_CheckSum(list_addr,dev_info->data_len); -// SRAM_Write_Byte(dev_info->check,list_addr+Dev_Check); //校验值重新写入 - -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"data_len :%d ,dev Buffer:" , write_len); -// for(uint16_t i = 0;i < write_len;i++) -// { -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"%02X " , SRAM_Read_Byte(list_addr + i)); -// } -// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"\r\n"); + BLV_Device_Info_Write_To_SRAM(list_addr,dev_info,dev_data,data_len); /*设备添加完毕,设备链表地址偏移*/ list_addr += SRAM_Device_List_Size; SRAM_Write_DW(list_addr,SRAM_NORMAL_Device_List_Addr); } -/******************************************************************************* -* Function Name : BLV_Device_Info_Write_To_SRAM -* Description : 设备数据写入到SRAM中 -*******************************************************************************/ -__attribute__((section(".non_0_wait"))) uint8_t BLV_Device_Info_Write_To_SRAM( - uint32_t dev_addr, - Device_Public_Information_G *dev_info, - uint8_t *dev_data, - uint16_t data_len) -{ - if(dev_info == NULL) return 1; - - memset(rs485_temp_buff,0,sizeof(rs485_temp_buff)); - - memcpy(rs485_temp_buff,(uint8_t *)dev_info,Dev_Privately); - memcpy(&rs485_temp_buff[Dev_Privately],(uint8_t *)dev_data,data_len); - - dev_info->check = 0x00; - dev_info->check = Data_CheckSum(rs485_temp_buff,dev_info->data_len); - SRAM_DMA_Write_Buff(rs485_temp_buff,dev_info->data_len,dev_addr); - return 0x00; -} - /******************************************************************************* * Function Name : Device_Data_Check * Description : 设备链表数据校验 @@ -319,11 +417,11 @@ __attribute__((section(".non_0_wait"))) uint8_t Device_Data_Check(uint32_t sram_ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) { static uint32_t BLV_BUS_Wait = 0; - + Device_Public_Information_G dev_info; uint16_t data_len = 0; uint8_t rev = 0; - if(BUS485_Info.device_num == 0x00) return ; + if(BUS485_Info.device_num == 0x00) return ; switch(BUS485_Info.BUS_Start) { @@ -341,8 +439,8 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) BUS485_Info.n_list_read_addr = BUS485_Info.Last_list_addr; /*读取设备信息*/ - Device_Public_Information_G dev_info; - SRAM_DMA_Read_Buff((uint8_t *)&dev_info,sizeof(Device_Public_Information_G),BUS485_Info.n_list_read_addr); + BLV_Device_PublicInfo_Read_To_Struct(BUS485_Info.n_list_read_addr,&dev_info); + BUS485_Info.n_dev_type = dev_info.type; BUS485_Info.n_dev_addr = dev_info.addr; BUS485_Info.n_dev_datalen = dev_info.data_len; @@ -354,12 +452,11 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) BUS485_Info.Retry_Flag = 0x01; /*调用设备轮询发送函数*/ - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS_dev Polling"); - + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS_dev Polling %x %x",BUS485_Info.n_polling_cf,BUS485_Info.n_processing_cf); if(BUS485_Info.baud != dev_info.baud) //设备波特率与当前通讯波特率不符 { /*切换波特率*/ - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS_Port Baud:%ld,Change Baud:%ld\r\n",BUS485_Info.baud,dev_info.baud); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS_Port Baud:%d,Change Baud:%d\r\n",BUS485_Info.baud,dev_info.baud); BUS485_Info.baud = dev_info.baud; if(BUS485_Info.BaudRateCfg != NULL) BUS485_Info.BaudRateCfg(BUS485_Info.baud); @@ -374,7 +471,6 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) if(rev == RS485OCCUPYNOTIME) //切换到下一个设备 { BUS485_Info.BUS_Start = Change_Dev; - /*BUS485总线上有不需要发送轮询数据的设备,需要跳过等待回复阶段直接切换设备,因此重发标志位不需要置位 - 2022-05-04*/ BUS485_Info.Retry_Flag = 0x00; BUS485_Info.n_retry_num = 0x00; }else { //数据发送成功,等待回复 @@ -383,11 +479,11 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) } } }else { - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"[BLV_BUS_Polling_Task2]BLV_BUS_dev Check Fail:%08X",BUS485_Info.Last_list_addr); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS_dev Check Fail:%08X",BUS485_Info.Last_list_addr); BUS485_Info.BUS_Start = Change_Dev; } }else { - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS_dev Type Fail"); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS_dev Type Fail"); BUS485_Info.BUS_Start = Change_Dev; } @@ -395,15 +491,14 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) case Change_Dev: BUS485_Info.Last_list_addr += SRAM_Device_List_Size; //下一个设备 if(BUS485_Info.Last_list_addr >= SRAM_Read_DW(SRAM_BUS_Device_List_Addr)) BUS485_Info.Last_list_addr = SRAM_Device_List_Start_Addr; - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS Change_Dev"); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS Change_Dev %x %x",BUS485_Info.Last_list_addr,SRAM_Read_DW(SRAM_BUS_Device_List_Addr)); BUS485_Info.BUS_Start = B_Polling; break; case B_Retry: if((BUS485_Info.Retry_Flag == 0x01) && (BUS485_Info.n_retry_num != 0x00)) //重发标志未清零,表示没发送成功 { - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS Retransmitting Data:%d-%d-%08X...",BUS485_Info.n_dev_type,BUS485_Info.n_dev_addr,BUS485_Info.n_list_read_addr); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS Retransmitting Data:%d-%d-%08X...",BUS485_Info.n_dev_type,BUS485_Info.n_dev_addr,BUS485_Info.n_list_read_addr); - //修改时间:2022-07-12 if((BUS485_Info.n_polling_cf!=0x00000000) && (BUS485_Info.n_polling_cf!=0xFFFFFFFF)) rev = ((fun4_prt)BUS485_Info.n_polling_cf)(BUS485_Info.n_list_read_addr); //继续调用设备发送函数 if(rev == RS485OCCUPYNOTIME) //切换到下一个设备 @@ -431,19 +526,21 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) { data_len = SRAM_Read_Word(g_uart[UART_3].RX_Buffer_ReadAddr); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Reply Len:%d",data_len); + if((BUS485_Info.n_processing_cf!=0x00000000) && (BUS485_Info.n_processing_cf!=0xFFFFFFFF)) { BUS485_Info.Retry_Flag = ((fun2_prt)BUS485_Info.n_processing_cf)(BUS485_Info.n_list_read_addr,g_uart[UART_3].RX_Buffer_ReadAddr + 2,data_len); } if(BUS485_Info.Retry_Flag == 0x00) { - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Reply SUCC\r\n"); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Reply SUCC 1\r\n"); BUS485_Info.send_wait = SysTick_1ms; BUS485_Info.BUS_Start = B_Wait; //回复成功,等待总线空闲,便切换为下一个设备 } if(BUS485_Info.port_mode == Port_Monitoring_mode) //如果当前处于监控模式下,将数据发送至PC端 { - Udp_Internal_SeriaNet_Uploading(Bus_port,BUS485_Info.baud,g_uart[UART_3].RX_Buffer_ReadAddr); //上报 + Udp_Internal_SeriaNet_Uploading(Bus_port,BUS485_Info.baud,g_uart[UART_3].RX_Buffer_ReadAddr); } g_uart[UART_3].RX_Buffer_ReadAddr += SRAM_Uart_Buffer_Size; @@ -462,21 +559,19 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) } //BUS485_Info.BUS_Start = Change_Dev; break; - /*2021-11-24 : 调整C5IO波特率不准,发送数据前根据当前设备通讯波特率,切换发送波特率,切换完波特率后,等待10ms在进行发送数据 - 2022-07-19 : 调整切换波特率时,先通讯一次,接收回来的数据不做处理直接丢弃 - */ - case Baud_Wait: //切换波特率等待时间 if(SysTick_1ms - BUS485_Info.change_tick > BLV_BUS485_ChangeBaudWaitTime) { - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Wait"); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Wait %x",BUS485_Info.n_polling_cf); - if((BUS485_Info.n_polling_cf!=0x00000000) && (BUS485_Info.n_polling_cf!=0xFFFFFFFF)) rev = ((fun4_prt)BUS485_Info.n_polling_cf)(BUS485_Info.n_list_read_addr); //继续调用设备发送函数 + if((BUS485_Info.n_polling_cf != 0x00000000) && (BUS485_Info.n_polling_cf != 0xFFFFFFFF)) { + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS Baud_Wait -- n_polling_cf %x",BUS485_Info.n_polling_cf); + rev = ((fun4_prt)BUS485_Info.n_polling_cf)(BUS485_Info.n_list_read_addr); //继续调用设备发送函数 + } BUS485_Info.change_tick = SysTick_1ms; BUS485_Info.BUS_Start = Baud_Comm; } - break; case Baud_Comm: /*接收处理*/ @@ -491,12 +586,11 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) } if(BUS485_Info.Retry_Flag == 0x00) //回复成功,立即开始下一次通讯 { - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Comm3"); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Comm3"); BUS485_Info.BUS_Start = Baud_SendWait; BUS485_Info.change_tick = SysTick_1ms; } - if(BUS485_Info.port_mode == Port_Monitoring_mode) //如果当前处于监控模式下,将数据发送至PC端 { Udp_Internal_SeriaNet_Uploading(Bus_port,BUS485_Info.baud,g_uart[UART_3].RX_Buffer_ReadAddr); //上报 @@ -516,7 +610,7 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) break; case Baud_SendWait: if(SysTick_1ms - BUS485_Info.change_tick > BLV_BUS485_ChangeBaudSendWaitTime) { - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Comm2"); + //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- Baud_Comm1"); BUS485_Info.change_tick = SysTick_1ms; BUS485_Info.BUS_Start = B_Send; } @@ -524,10 +618,9 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) case B_Send: //发送函数 //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_BUS State -- send"); - //if((BUS485_Info.n_polling_cf!=0x00000000) && (BUS485_Info.n_polling_cf!=0xFFFFFFFF)) Convert_To_Fun_Prt(BUS485_Info.n_polling_cf,BUS485_Info.n_list_read_addr); - - //修改时间:2022-07-12 - if((BUS485_Info.n_polling_cf!=0x00000000) && (BUS485_Info.n_polling_cf!=0xFFFFFFFF)) rev = ((fun4_prt)BUS485_Info.n_polling_cf)(BUS485_Info.n_list_read_addr); //继续调用设备发送函数 + if( (BUS485_Info.n_polling_cf!=0x00000000) && (BUS485_Info.n_polling_cf!=0xFFFFFFFF) ) { + rev = ((fun4_prt)BUS485_Info.n_polling_cf)(BUS485_Info.n_list_read_addr); + } if(rev == RS485OCCUPYNOTIME) //切换到下一个设备 { @@ -552,7 +645,7 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS_Polling_Task(void) { if(SysTick_1s - BUS485_Info.mode_tick > BUS485_Info.mode_outtime) { - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Reply SUCC"); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS485 Mode:%d Outtime %d",BUS485_Info.port_mode,BUS485_Info.device_num); BUS485_Info.mode_tick = SysTick_1s; BUS485_Info.port_mode = Port_Normal_Mode; //正常模式 } @@ -649,9 +742,7 @@ __attribute__((section(".non_0_wait"))) void BLV_BUS485Port_ModeTask(void) break; case Port_Normal_Mode: case Port_Monitoring_mode: - BLV_BUS_Polling_Task(); //正常模式 以及正常模式下监控模式 - break; } } @@ -691,7 +782,7 @@ __attribute__((section(".non_0_wait"))) void BLV_PollPort_Task(void) }else { /*读取设备信息*/ Device_Public_Information_G dev_info; - SRAM_DMA_Read_Buff((uint8_t *)&dev_info,sizeof(Device_Public_Information_G),Poll485_Info.n_list_read_addr); + BLV_Device_PublicInfo_Read_To_Struct(Poll485_Info.n_list_read_addr,&dev_info); Poll485_Info.n_dev_type = dev_info.type; Poll485_Info.n_dev_addr = dev_info.addr; @@ -731,7 +822,7 @@ __attribute__((section(".non_0_wait"))) void BLV_PollPort_Task(void) /*读取设备信息*/ Device_Public_Information_G dev_info; - SRAM_DMA_Read_Buff((uint8_t *)&dev_info,sizeof(Device_Public_Information_G),Poll485_Info.n_list_read_addr); + BLV_Device_PublicInfo_Read_To_Struct(Poll485_Info.n_list_read_addr,&dev_info); Poll485_Info.n_dev_type = dev_info.type; Poll485_Info.n_dev_addr = dev_info.addr; @@ -795,7 +886,6 @@ __attribute__((section(".non_0_wait"))) void BLV_PollPort_Task(void) } if(Poll485_Info.Retry_Flag == 0x00) { - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Reply SUCC\r\n"); Poll485_Info.send_wait = SysTick_1ms; Poll485_Info.POLL_Start = B_Wait; //回复成功,等待总线空闲,便切换为下一个设备 } @@ -1100,7 +1190,7 @@ __attribute__((section(".non_0_wait"))) void BLV_ActivePort_Task(void) /*读取设备信息*/ Device_Public_Information_G dev_info; - SRAM_DMA_Read_Buff((uint8_t *)&dev_info,sizeof(Device_Public_Information_G),Act485_Info.Last_list_addr); + BLV_Device_PublicInfo_Read_To_Struct(Act485_Info.Last_list_addr,&dev_info); Act485_Info.n_polling_cf = dev_info.polling_cf; Act485_Info.n_processing_cf = dev_info.processing_cf; @@ -1119,7 +1209,7 @@ __attribute__((section(".non_0_wait"))) void BLV_ActivePort_Task(void) { /*读取设备信息*/ Device_Public_Information_G dev_info; - SRAM_DMA_Read_Buff((uint8_t *)&dev_info,sizeof(Device_Public_Information_G),Act485_Info.n_list_read_addr); + BLV_Device_PublicInfo_Read_To_Struct(Act485_Info.n_list_read_addr,&dev_info); Act485_Info.n_polling_cf = dev_info.polling_cf; Act485_Info.n_processing_cf = dev_info.processing_cf; diff --git a/MCU_Driver/debug.c b/MCU_Driver/debug.c index 8e9bf56..d2f40bc 100644 --- a/MCU_Driver/debug.c +++ b/MCU_Driver/debug.c @@ -221,7 +221,7 @@ __attribute__((section(".non_0_wait"))) void Dbg_NoTick_Print(int DbgOptBit ,con fmt++; } va_end(ap); - printf("\r\n"); + //printf("\r\n"); } } diff --git a/MCU_Driver/inc/blv_dev_action.h b/MCU_Driver/inc/blv_dev_action.h index de7393b..f67c22b 100644 --- a/MCU_Driver/inc/blv_dev_action.h +++ b/MCU_Driver/inc/blv_dev_action.h @@ -101,8 +101,8 @@ typedef struct }Dev_Action_U64Cond; //动作的场景执行条件 一共9个字节 typedef struct{ - Dev_Action_U64Cond DevActionU64Cond; //64位的条件 uint8_t SceneExcute; //执行方式 场景不可关闭 场景可关闭 + Dev_Action_U64Cond DevActionU64Cond; //64位的条件 }Dev_Action_Cond; //动作的场景执行条件 一共9个字节 typedef struct @@ -114,15 +114,15 @@ typedef struct typedef struct { /*配置设备输出信息开始*/ - uint8_t DevType; //设备类型 - uint8_t DevAddr; //设备地址 - uint16_t DevOutputLoop; //设备输出地址 - uint16_t DevCtrlState; //设备控制状态 - Dev_Dly_Value DevDlyValue; //设备延时信息 + uint8_t DevType; //设备类型 - 1Byte + uint8_t DevAddr; //设备地址 - 1Byte + uint16_t DevOutputLoop; //设备输出地址 - 2Byte + uint16_t DevCtrlState; //设备控制状态 - 2Byte + Dev_Dly_Value DevDlyValue; //设备延时信息 - 2Byte /*配置设备输出信息结束*/ }Dev_Action_OutCfg; //设备控制 长度8个字节 -#define DEVACTIONOUTCFGLEN sizeof(Dev_Action_OutCfg) //固定8个字节 +#define DEVACTIONOUTCFGLEN 0x08 //固定8个字节 Dev_Action_OutCfg结构体长度 typedef struct { @@ -159,68 +159,38 @@ typedef struct CFG_Action_Add }DEV_ACTION_INFO; //设备动作共用结构体 设备输入 条件 与输出 总长度49+11+4+448 = 512字节 typedef struct{ - uint16_t DevActionNum; //设备动作总数 范围0~(DevActionNumMax-1) - uint16_t DevActioni; //用于遍历所有动作的全局参数 范围0~(DevActionNumMax-1) - uint16_t DevDlyNum; //延时设备总数 - uint16_t DevDlyi; //用于遍历所有的延时设备 - uint16_t BlwMapDevNum; //宝来威映射表设备总数 2024-08-28 uint8_t 改 uint16_t - uint8_t BlwMapDevi; //用于遍历宝来威映射表设备 - - uint8_t DevNum; //设备总数 - uint8_t DevBusNum; //Bus总线设备个数 - uint8_t DevPollNum; //轮询总线设备个数 - uint8_t DevActiveNum; //主动总线设备个数 - uint8_t DevNorNum; //普通设备个数 - - uint8_t Devi; //用于遍历整个设备 - -/*时间变量声明开始*/ - uint8_t TimeGetFlag; //时间获取标志 每次拿到时间,就计数 比如从服务器获取到时间 -/*时间变量声明结束*/ - - Dev_Action_U64Cond DevActionU64Cond; //64位的条件参考 - uint16_t SleepActionNo; //睡眠场景编号 不为0,就算有效 - uint32_t DevLockAddr; //微信锁的设备地址 - uint8_t Lock485Addr; //微信锁485地址 - uint32_t pc_addr; //调试设备地址 - - uint16_t CheckMapDevNum; //2023-11-27 巡检数量 - uint8_t CheckTypeNum; //巡检设备类型总数 - uint8_t CheckMapList[4]; //巡检设备类型列表 - - uint8_t OffLineDevType; //离线设备类型 2023-10-08 - uint8_t OffLineDevAddr; //离线设备地址 2023-10-08 - uint8_t InputType; //输入设备类型 2023-10-08 - uint8_t InputAddr; //输入设备地址 2023-10-08 - uint8_t InputLoop; //输入设备回路 2023-10-08 - - uint8_t People_Flag; //有人无人标记 2024-03-01 - uint8_t ServerCtrl; //服务器控制 - uint8_t CardInFlag; //入住服务时开启标记清睡眠标记 2024-04-29 - - uint16_t DimGlobalValue; //调光全局亮度 - - uint8_t TimeSyncFlag; //时间同步标记 - uint8_t DayStart; //白天开始时间 - uint8_t DayEnd; //白天结束时间 - - uint8_t VC_ConNToSGruop; //无卡取电无人至有人条件组数 - uint8_t VC_ConNToSSubset; //无卡取电无人至有人子条件总数 - - uint8_t VC_ConSToNGruop; //无卡取电有人至无人条件组数 - uint8_t VC_ConSToNSubset; //无卡取电有人至无人子条件总数 - - uint8_t VC_PortNum; //无卡取电端口数 - - uint16_t CCTValue; //调光色温值 + uint8_t BlwMapDevi; //用于遍历宝来威映射表设备 + uint8_t DevNum; //设备总数 + uint8_t DevBusNum; //Bus总线设备个数 + uint8_t DevPollNum; //轮询总线设备个数 + uint8_t DevActiveNum; //主动总线设备个数 + uint8_t DevNorNum; //普通设备个数 + uint8_t Devi; //用于遍历整个设备 + uint8_t TimeGetFlag; //时间获取标志 每次拿到时间,就计数 比如从服务器获取到时间 + uint8_t Lock485Addr; //微信锁485地址 + uint8_t CheckTypeNum; //巡检设备类型总数 + uint8_t CheckMapList[4]; //巡检设备类型列表 + uint8_t OffLineDevType; //离线设备类型 2023-10-08 + uint8_t OffLineDevAddr; //离线设备地址 2023-10-08 + uint8_t InputType; //输入设备类型 2023-10-08 + uint8_t InputAddr; //输入设备地址 2023-10-08 + uint8_t InputLoop; //输入设备回路 2023-10-08 + uint8_t People_Flag; //有人无人标记 2024-03-01 + uint8_t ServerCtrl; //服务器控制 + uint8_t CardInFlag; //入住服务时开启标记清睡眠标记 2024-04-29 + uint8_t TimeSyncFlag; //时间同步标记 + uint8_t DayStart; //白天开始时间 + uint8_t DayEnd; //白天结束时间 + uint8_t VC_ConNToSGruop; //无卡取电无人至有人条件组数 + uint8_t VC_ConNToSSubset; //无卡取电无人至有人子条件总数 + uint8_t VC_ConSToNGruop; //无卡取电有人至无人条件组数 + uint8_t VC_ConSToNSubset; //无卡取电有人至无人子条件总数 + uint8_t VC_PortNum; //无卡取电端口数 uint8_t Dim_Lower_limit; //调光下限 uint8_t Dim_Upper_limit; //调光上限 - uint8_t Service_16; //服务16状态 - uint8_t sram_save_flag; //外部SRAM保存标志位 - uint8_t Last_EleState; //上一次取电状态 uint8_t SleepMode_State; uint8_t Last_SleepMode_State; @@ -229,9 +199,6 @@ typedef struct{ uint8_t Person_Detected; //无人取电中的 有人或无人状态 (插卡取电、按键触发、雷达感应也算) uint8_t Last_Person_Detected; - uint16_t Last_DimGlobalValue; //上次保存的调光值 - uint16_t Last_CCTValue; //上次保存的调光色温值 - uint8_t CardState; //插卡状态 uint8_t Last_CardState; @@ -239,6 +206,23 @@ typedef struct{ uint8_t Last_Rs485CardType; uint8_t Last_NeightState; + uint16_t SleepActionNo; //睡眠场景编号 不为0,就算有效 + uint16_t CheckMapDevNum; //2023-11-27 巡检数量 + uint16_t DimGlobalValue; //调光全局亮度 + uint16_t CCTValue; //调光色温值 + uint16_t Last_DimGlobalValue; //上次保存的调光值 + uint16_t Last_CCTValue; //上次保存的调光色温值 + uint16_t DevActionNum; //设备动作总数 范围0~(DevActionNumMax-1) + uint16_t DevActioni; //用于遍历所有动作的全局参数 范围0~(DevActionNumMax-1) + uint16_t DevDlyNum; //延时设备总数 + uint16_t DevDlyi; //用于遍历所有的延时设备 + uint16_t BlwMapDevNum; //宝来威映射表设备总数 2024-08-28 uint8_t 改 uint16_t + + uint32_t DevLockAddr; //微信锁的设备地址 + uint32_t pc_addr; //调试设备地址 + + Dev_Action_U64Cond DevActionU64Cond; //64位的条件参考 + }BLV_DevAction_Manage_G; #define DevDlyStructLen sizeof(Struct_Dev_Dly) //延时动作结构体长度 @@ -273,14 +257,14 @@ typedef struct typedef struct{ uint8_t Addr; - uint32_t ExpandReadFlag; uint16_t ExpandReadState[32]; + uint32_t ExpandReadFlag; }EXPAND_TYPE_G; //继电器群控状态结构体 typedef struct{ uint8_t Addr; - uint32_t DimmReadFlag; uint16_t DimmReadState[32]; + uint32_t DimmReadFlag; }DIMM_TYPE_G; //调光群控状态结构体 @@ -294,11 +278,14 @@ typedef struct{ extern BLV_DevAction_Manage_G DevActionGlobal; +void Logic_DevAction_Add(uint8_t *data,uint16_t len); + uint32_t DevAction_No_Get(uint16_t DevActionNo); uint32_t Add_DevDly_To_List(uint8_t DevType, uint32_t DevDlyAddr, uint16_t DevOutputLoop); uint32_t DevDlyAddr_Get(uint32_t DevDlyAddr, uint16_t DevOutputLoop); 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); #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 985ffb8..21b8b3a 100644 --- a/MCU_Driver/inc/blv_rs485_protocol.h +++ b/MCU_Driver/inc/blv_rs485_protocol.h @@ -172,7 +172,8 @@ typedef void (*Dev_Output_Group_Ctrl_ptr)(uint32_t CfgDevAddIn, uint16_t DevInpu typedef uint16_t (*Dev_Output_Loop_Group_State_Get_ptr)(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start); /*函数指针类型定义结束*/ -#define Dev_Fun_Ptr_Len sizeof(Struct_Dev_Fun_Info) //目前每个设备四个函数指针 一共16个字节 +#define Dev_Fun_Ptr_Len 24 //目前每个设备6个函数指针 一共24个字节 + typedef struct { @@ -226,30 +227,35 @@ typedef struct{ typedef struct{ uint8_t port_mode; //端口模式 - 0x01:正常模式 0x02:透传模式 0x03:监控模式 uint8_t pass_state; //透传状态机 + + uint8_t BUS_Start; //BUS状态机 + uint8_t device_num; //设备总数 + + uint8_t Process_Flag; //处理标志 + uint8_t Retry_Flag; //重发标记:发送之前置数,收到回复标记后标记清零, + + uint8_t n_dev_type; //当前设备类型 + uint8_t n_dev_addr; //当前设备地址 + + uint8_t n_retry_num; //当前设备重发数 + uint16_t n_dev_datalen; //当前设备数据长度 + + uint32_t send_wait; //发送等待时间 + uint32_t n_dev_waittime; //当前设备发送等待时间 + uint32_t n_list_read_addr; //当前读取的设备链表地址 + uint32_t Last_list_addr; //下一个设备链表地址 + + uint32_t change_tick; //切换波特率时间 uint32_t mode_tick; //模式当前时间戳 uint32_t mode_outtime; //模式超时时间 uint32_t pass_tick; //透传当前时间戳 uint32_t pass_outtime; //透传超时时间 uint32_t baud; //当前波特率 - fun4_prt BaudRateCfg; //波特率切换函数 - uint8_t BUS_Start; //BUS状态机 - uint8_t device_num; //设备总数 - uint32_t n_list_read_addr; //当前读取的设备链表地址 - uint32_t Last_list_addr; //下一个设备链表地址 - uint32_t send_wait; //发送等待时间 - uint8_t Process_Flag; //处理标志 - uint8_t Retry_Flag; //重发标记:发送之前置数,收到回复标记后标记清零, - uint32_t change_tick; //切换波特率时间 - - uint8_t n_dev_type; //当前设备类型 - uint8_t n_dev_addr; //当前设备地址 - uint16_t n_dev_datalen; //当前设备数据长度 - uint32_t n_dev_waittime; //当前设备发送等待时间 - uint8_t n_retry_num; //当前设备重发数 uint32_t n_polling_cf; //当前设备轮询发送回调函数指针 uint32_t n_processing_cf; //当前设备数据回调函数指针 + fun4_prt BaudRateCfg; //波特率切换函数 }BLV_BUS_Manage_G; typedef struct{ @@ -320,10 +326,16 @@ extern BLV_POLL_Manage_G Poll485_Info; extern BLV_ACTIVE_Manage_G Act485_Info; extern BLV_NORDEV_Manage_G NorDevInfoGlobal; +uint8_t BLV_Device_Info_Write_To_SRAM( uint32_t dev_addr, Device_Public_Information_G *dev_info, uint8_t *dev_data, uint16_t data_len); +uint8_t BLV_Device_PublicInfo_Read_To_Struct( uint32_t dev_addr, Device_Public_Information_G *dev_info); +void BLV_Device_Public_Info_Printf(Device_Public_Information_G *dev_info); +uint8_t BLV_Device_PublicInfo_Update_To_Struct( uint32_t dev_addr, Device_Public_Information_G *dev_info); + void Add_BUS_Device_To_List(Device_Public_Information_G *dev_info,uint8_t *dev_data,uint16_t data_len); void Add_POLL_Device_To_List(Device_Public_Information_G *dev_info,uint8_t *dev_data,uint16_t data_len); void Add_ACT_Device_To_List(Device_Public_Information_G *dev_info,uint8_t *dev_data,uint16_t data_len); void Add_Nor_Device_To_List(Device_Public_Information_G *dev_info,uint8_t *dev_data,uint16_t data_len); + uint8_t Device_Data_Check(uint32_t sram_addr); void BLV_BUS_Polling_Task(void); void BUS485Port_Passthrough_Task(void); diff --git a/MCU_Driver/inc/logic_file_function.h b/MCU_Driver/inc/logic_file_function.h index 2800ee2..0061dfb 100644 --- a/MCU_Driver/inc/logic_file_function.h +++ b/MCU_Driver/inc/logic_file_function.h @@ -73,10 +73,8 @@ typedef struct { uint8_t type; //设备类型 uint8_t addr; //设备地址 uint8_t port; //设备端口 - uint32_t baud; //设备波特率 uint8_t version; //设备协议版本 uint8_t retry; //通讯重发次数 - uint16_t writ_time; //通讯等待时间 uint8_t ipaddr[4]; //域控中控设备属性 uint8_t parent_type; //父设备类型 uint8_t parent_addr; //父设备地址 @@ -86,7 +84,9 @@ typedef struct { uint8_t remain[42]; //保留字节 uint16_t input_num; //输入回路 uint16_t output_num; //输出回路 -}LOGICFILE_DEVICE_INFO; //逻辑文件中 - 设备存在信息结构 + uint16_t writ_time; //通讯等待时间 + uint32_t baud; //设备波特率 +}LOGICFILE_DEVICE_INFO; //逻辑文件中 - 设备存在信息结构(注意保存Flash中保存的数据结构与定义的不相同) typedef struct{ uint64_t DevActionOutFlag:1; //动作输出使能 @@ -114,14 +114,15 @@ typedef struct{ uint64_t Reserve1:2; //保留2位 }LOGIC_ACTIVE_CONDITION_G; //逻辑文件中 - 设备条件结构 + typedef struct { uint8_t type; //动作设备类型 uint8_t addr; //动作设备地址 - uint16_t loop; //动作设备回路 uint8_t execute; //设备执行方式 uint8_t content; //设备执行内容 uint8_t delay_time; //执行延时时间 uint8_t delay_unit; //执行延时时间单位 + uint16_t loop; //动作设备回路 }LOGIC_DEVICE_ACTIVE_G; //逻辑动作数据结构 #if C8_TYPE @@ -163,6 +164,7 @@ typedef struct { void BLV_DevAction_AllData_Init(void); uint8_t Read_LogicFile_Information(uint8_t select,uint8_t *buff); +void Logic_Device_Action_Data_Analysis(uint8_t *data); uint8_t LOGIC_FILE_Check(void); diff --git a/MCU_Driver/inc/sram_mem_addr.h b/MCU_Driver/inc/sram_mem_addr.h index 1acc5aa..78d726c 100644 --- a/MCU_Driver/inc/sram_mem_addr.h +++ b/MCU_Driver/inc/sram_mem_addr.h @@ -234,6 +234,7 @@ /**********SRAM配置文件下发 相关定义 - 结束**********/ #define SRAM_DevAction_List_Size 0x0400 //每个设备动作节点存储空间大小 - 当前设备动作节点 +#define SRAM_DevAction_List_Num 950 #define SRAM_DevAction_List_Start_Addr 0x00100000 //设备动作链表起始地址 包含 一共960K #define SRAM_DevAction_List_End_Addr 0x001EFFFF //设备动作链表结束地址 不包含 diff --git a/MCU_Driver/logic_file_function.c b/MCU_Driver/logic_file_function.c index 38ee9d5..fbbef54 100644 --- a/MCU_Driver/logic_file_function.c +++ b/MCU_Driver/logic_file_function.c @@ -9,6 +9,8 @@ #include #include +#define LOGIC_DEBUG_INFO_EN 1 + /******************************************************************************* * Function Name : DevAction_CondData_Init * Description : 动作条件参数数据初始化 @@ -44,7 +46,7 @@ __attribute__((section(".non_0_wait"))) void Action_Coord_Get(uint32_t Dev_proce /******************************************************************************* * Function Name : Action_Coord_Get -* Description : 设备下标得到 +* Description : 设备下标得到 - 疑问点:干什么使用,作用在哪????? * Input : Dev_processing_addr :设备节点地址 BUS_Public :公有数据 @@ -58,33 +60,34 @@ __attribute__((section(".non_0_wait"))) void Dev_Coord_Get(void) for(i = 0; i < DevActionGlobal.DevNum; i++) { Dev_processing_addr = SRAM_Device_List_Start_Addr + i*SRAM_Device_List_Size; - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), Dev_processing_addr); //拷贝所有公有数据 + 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,"当前设备准备重新保存,地址:%08X,设备类型:%d,设备地址:%d,设备下标:%d,动作下标:%d", Dev_processing_addr, BUS_Public.type, BUS_Public.addr, BUS_Public.DevCoord, BUS_Public.ActionCoord); + 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:%08X", DevHVoutInfo.DevC5IOAddr); -// SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),Dev_processing_addr+Dev_Privately); //继电器私有数据重新写入 + NOR_HVOUT_INFO DevHVoutInfo; //继电器局部变量 + SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),Dev_processing_addr+Dev_Privately); + + DevHVoutInfo.DevC5IOAddr = Find_AllDevice_List_Information(DEV_C5IO_Type, 0x00); //拿到C5IO存储地址 + Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevHVoutInfo.DevC5IOAddr:%08X", DevHVoutInfo.DevC5IOAddr); + SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),Dev_processing_addr+Dev_Privately); //继电器私有数据重新写入 + + 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; } - /*重新保存当前设备*/ - BUS_Public.check = 0x00; - SRAM_Write_Byte(BUS_Public.check, Dev_processing_addr+Dev_Check); //清校验 - SRAM_Write_Word(BUS_Public.DevCoord, Dev_processing_addr+Dev_Coord); //重新写入设备下标 - SRAM_Write_Word(BUS_Public.ActionCoord, Dev_processing_addr+Dev_ActionCoord); //重新写入动作下标 - - BUS_Public.check = Log_CheckSum(Dev_processing_addr,BUS_Public.data_len); //重新计算整包校验 DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_Write_Byte(BUS_Public.check, Dev_processing_addr+Dev_Check); //重新写入校验 } } @@ -105,7 +108,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) list_addri = SRAM_DevAction_List_Start_Addr + i * SRAM_DevAction_List_Size; SRAM_DMA_Read_Buff((uint8_t *)&DevActionInfoi, sizeof(DEV_ACTION_INFO), list_addri); DevActionInfoi.DevActionState.DevAddrIn = Find_AllDevice_List_Information(DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备输入地址:%04x", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作设备数量:%d,设备输入类型:%d,设备输入地址:%d,设备输入地址:%x", DevActionInfoi.DevCtrlNum, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr, @@ -126,7 +129,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) && ( DevActionInfoi.DevActionInput.inAddr == DevActionInfoj.DevActionInput.inAddr ) && ( DevActionInfoi.DevActionInput.inType == DevActionInfoj.DevActionInput.inType ) ) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作地址:%08X,之前动作地址:%08X", list_addri, list_addrj); + 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) @@ -141,7 +144,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) DevActionInfoi.DevActionState.MultiSetFlag = 0x01; DevActionInfoi.DevActionState.MultiNumber = 0x01; DevActionInfoi.DevActionState.MultiValidNo++; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联起始地址:%08X 多联下标:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联起始地址:%X 多联下标:%d", DevActionInfoi.DevActionInput.DevAddr, DevActionInfoi.DevActionInput.inAddr, list_addri, @@ -158,7 +161,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) DevActionInfoj.DevActionState.MultiNumber = DevActionInfoi.DevActionState.MultiValidNo; DevActionInfoj.DevActionState.MultiSetFlag = 0x01; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联当前地址:%08X 多联下标:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开关:%d 回路:%d 多联当前地址:%X 多联下标:%d", DevActionInfoj.DevActionInput.DevAddr, DevActionInfoj.DevActionInput.inAddr, list_addrj, @@ -169,7 +172,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) { SRAM_Write_Byte(0x00,list_addrj+k); } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"因为多联下标置位准备重新保存,地址:%08X", list_addrj); + 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); @@ -178,17 +181,14 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) DevAdd = Find_AllDevice_List_Information2(Active_Port, DevActionInfoi.DevActionInput.DevType, DevActionInfoi.DevActionInput.DevAddr); if(DevAdd != 0x00) { - SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd); + 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.inAddr] = DevActionInfoi.DevActionState.MultiValidNo; } - BUS_Public.check = 0x00; - BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485SwiInfo, sizeof(RS485_SWI_INFO)); - SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAdd); - SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately); + 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, @@ -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,"当前动作包含场景,地址:%08X 场景地址:%08X 下标:%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,扩展设备存储地址:%04x", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"扩展设备输入类型:%d,扩展设备输入地址:%d,扩展设备回路地址:%d,扩展设备存储地址:%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,"当前动作包含延时设备准备重新保存,地址:%08X 下标:%d,延时节点:%08X 有涉及到延时设备地址:%08X, 回路:%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,"当前动作包含延时场景准备重新保存,地址:%08X 下标:%d,延时节点:%08X 有涉及到延时设备地址:%08X, 回路:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作包含延时场景准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", list_addri, i, DevActionInfoi.DevActionOutput[k].DevDlyAddr, @@ -261,7 +261,7 @@ __attribute__((section(".non_0_wait"))) void DevAction_ReuseFlag_Get(void) { SRAM_Write_Byte(0x00,list_addri+k); } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作因为复用标志置位准备重新保存,地址:%08X", list_addri); + 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); //写入数据 @@ -297,7 +297,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,"当前动作包含场景,准备重新保存,地址:%08X 场景地址:%08X 下标:%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); @@ -345,7 +345,7 @@ __attribute__((section(".non_0_wait"))) void Expand_Scene_Get(void) { SRAM_Write_Byte(0x00,list_addr+k); } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%08X", list_addr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%X", list_addr); DevActionInfo.CheckVal = 0x00; SRAM_DMA_Write_Buff((uint8_t *)&DevActionInfo, DevActionInfo.data_len, list_addr); //写入数据 @@ -368,7 +368,7 @@ __attribute__((section(".non_0_wait"))) void Expand_DevDly_Get(void) uint32_t list_addr = 0; DEV_ACTION_INFO DevActionInfo; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开始遍历所有的动作 动作个数:%d, 动作的起始地址:%08X",DevActionGlobal.DevActionNum, SRAM_DevAction_List_Start_Addr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"开始遍历所有的动作 动作个数:%d, 动作的起始地址:%X",DevActionGlobal.DevActionNum, SRAM_DevAction_List_Start_Addr); for(i = 0; i < DevActionGlobal.DevActionNum; i++) { @@ -383,7 +383,7 @@ __attribute__((section(".non_0_wait"))) void Expand_DevDly_Get(void) if(DevActionInfo.DevActionOutput[j].DevDlyAddr != 0x00) { KeepFlag = 0x01; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%08X 下标:%d,延时节点:%08X 有涉及到延时设备地址:%08X, 回路:%d", + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%X 下标:%d,延时节点:%X 有涉及到延时设备地址:%X, 回路:%d", list_addr, i, DevActionInfo.DevActionOutput[j].DevDlyAddr, @@ -399,7 +399,7 @@ __attribute__((section(".non_0_wait"))) void Expand_DevDly_Get(void) { SRAM_Write_Byte(0x00,list_addr+k); } - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%08X", list_addr); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作准备重新保存,地址:%X", list_addr); DevActionInfo.CheckVal = 0x00; //校验清0,再写入 SRAM_DMA_Write_Buff((uint8_t *)&DevActionInfo, DevActionInfo.data_len, list_addr); //写入数据 @@ -422,6 +422,8 @@ __attribute__((section(".non_0_wait"))) void BLV_DevAction_AllData_Init(void) 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(); //动作条件参数数据初始化 @@ -1041,7 +1043,7 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_LogicInfo_TempProce 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,"逻辑发布时间: %04d-%02d-%02d %02d:%02d:%02d \r\n",temp_data,temp_str[2],temp_str[3],temp_str[4],temp_str[5],temp_str[6]); + 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); @@ -1258,10 +1260,10 @@ __attribute__((section(".non_0_wait"))) uint8_t Read_LogicFile_Information(uint8 Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"CRC校验失败!"); } }else{ - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"读取数据长度不在范围内:%08X - %d",temp_len); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"读取数据长度不在范围内:%X - %d",temp_len); } }else { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"不是逻辑文件数据包头!%02X %02X",Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_L) , Flash_read_Byte(SPIFLASH_LOGIC_DataStart_ADDRESS+Logic_D_Hear_H)); + 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; @@ -1492,6 +1494,67 @@ __attribute__((section(".non_0_wait"))) uint8_t Logic_DeviceType_Legal_Judgment( 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 : 逻辑文件中 - 设备存在 临时处理 @@ -1505,11 +1568,13 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceExist_TempPro uint16_t len) { uint32_t temp_len = 0; - char temp_str[38] = {0}; + //char temp_str[38] = {0}; LOGICFILE_DEVICE_INFO temp_dev_info; Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); - memcpy(&temp_dev_info,data,sizeof(LOGICFILE_DEVICE_INFO)); + 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); @@ -1535,12 +1600,12 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceExist_TempPro temp_len += temp_dev_info.input_num*4; /*输出回路别名 - 输出回路*32Byte 2022-06-07 将别名长度改为32Byte*/ - for(uint16_t i=0;idevice_num += 1; @@ -1731,6 +1796,17 @@ __attribute__((section(".non_0_wait"))) void Logic_Device_Action_Data_Analysis(u 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); @@ -2426,7 +2502,7 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceAction_TempPr char temp_str[38] = {0}; uint32_t temp_len = 0; uint32_t temp_data = 0; - uint8_t temp_num = 0; + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s",__func__); Lfile_info->active_num += 1; @@ -2448,46 +2524,46 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceAction_TempPr temp_len += 2; temp_data = Data_Uint8_Convert_To_Uint16(&data[temp_len]); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输入事件:0x%04x",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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:%02X",temp_data); + 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,"动作执行方式:%02X",temp_data); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"动作执行方式:%X",temp_data); temp_len += 1; strncpy(temp_str,(const char *)&data[temp_len],32); @@ -2502,7 +2578,7 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceAction_TempPr temp_len += 32; //2022-05-29 保留 temp_data = data[temp_len]; - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输出动作数:%02X",temp_data); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输出动作数:%X",temp_data); temp_len += 1; if((temp_len + temp_data*8) > len) @@ -2510,18 +2586,8 @@ __attribute__((section(".non_0_wait"))) void Logic_FrameType_DeviceAction_TempPr Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"输出动作数长度不对:%d - %d",temp_len + temp_data*8,len); return ; } - temp_num = temp_data; - //解析动作 - for(uint16_t i=0;i= 0x70000)) { - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件长度不对:%08X",file_len); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"逻辑文件长度不对:%X",file_len); return 0x01; } @@ -3658,10 +3729,10 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) /*BLV_BUS端口初始化*/ UARTx_Init(UART_3,BUS485_Info.baud); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS485 Device Info Endaddr:%08X ---",SRAM_Read_DW(SRAM_BUS_Device_List_Addr)); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BUS485 Device Info Endaddr:%X ---",SRAM_Read_DW(SRAM_BUS_Device_List_Addr)); Poll485_Info.Last_list_addr = SRAM_Read_DW(SRAM_BUS_Device_List_Addr); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Poll485_Info addr:%08X ----",Poll485_Info.Last_list_addr); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Poll485_Info addr:%X ----",Poll485_Info.Last_list_addr); SRAM_Write_DW(Poll485_Info.Last_list_addr,SRAM_POLL_Device_List_Addr); //初始化Polling起始地址 @@ -3716,7 +3787,7 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) Dbg_Println(DBG_BIT_SYS_STATUS_bit,"轮询总线设备个数:%d", Poll485_Info.device_num); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_POLL_dev END:%08X",SRAM_Read_DW(SRAM_POLL_Device_List_Addr)); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"BLV_POLL_dev END:%X",SRAM_Read_DW(SRAM_POLL_Device_List_Addr)); /*端口初始化*/ Poll485_Info.port_mode = Port_Normal_Mode; @@ -3733,7 +3804,7 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) Act485_Info.Last_list_addr = SRAM_Read_DW(SRAM_POLL_Device_List_Addr); //主动设备起始地址 - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Act485_Info addr:%08X ----",Act485_Info.Last_list_addr); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Act485_Info addr:%X ----",Act485_Info.Last_list_addr); SRAM_Write_DW(Act485_Info.Last_list_addr,SRAM_ACTIVE_Device_List_Addr); //初始化主动设备信息起始地址 Act485_Info.device_num = 0; //添加主动设备 @@ -3781,15 +3852,15 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) } } /*增加测试接口*/ - //Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"默认添加PC调试接口 "); - //BLV_PC_DEVICE_TEST_Init(); - //Act485_Info.device_num += 1; + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"默认添加PC调试接口 "); + BLV_PC_DEVICE_TEST_Init(); + Act485_Info.device_num += 1; //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"默认添加主动插卡状态同步设备"); //BLW_RS485_CardState_AddTo_ActivePort(); //2023-10-31 Dbg_Println(DBG_BIT_SYS_STATUS_bit,"主动总线设备个数:%d", Act485_Info.device_num); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Active Device End List:%08X" , SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr)); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Active Device End List:%X" , SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr)); Act485_Info.Act_Start = B_IDLE; Act485_Info.baud = 9600; @@ -3798,12 +3869,11 @@ __attribute__((section(".non_0_wait"))) uint8_t LOGIC_FILE_Check(void) /*初始化主动端口*/ UARTx_Init(UART_2,Act485_Info.baud); - temp = SRAM_Read_DW(SRAM_ACTIVE_Device_List_Addr); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Act485 Device Info Endaddr:%08X ----",temp); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"Act485 Device Info Endaddr:%X ----",temp); SRAM_Write_DW(temp,SRAM_NORMAL_Device_List_Addr); - Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"普通设备存在:%08X",temp); + Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"普通设备存在:%X",temp); //添加普通设备 for(uint8_t i=0;i> 8) & 0xFF),g_uart[UART_0].RX_Buffer_WriteAddr+1); + SRAM_DMA_Write_Buff(g_uart[UART_0].RecvBuffer,g_uart[UART_0].RecvLen,g_uart[UART_0].RX_Buffer_WriteAddr+2); + + g_uart[UART_0].RX_Buffer_WriteAddr += SRAM_Uart_Buffer_Size; + if( g_uart[UART_0].RX_Buffer_WriteAddr > SRAM_UART0_RecvBuffer_End_Addr ) g_uart[UART_0].RX_Buffer_WriteAddr = SRAM_UART0_RecvBuffer_Start_Addr; g_uart[UART_0].RecvLen = 0; - g_uart[UART_0].Receiving = 0; } } } @@ -270,7 +294,10 @@ __attribute__((section(".non_0_wait"))) void UART1_RECEIVE(void) Dbg_Println(DBG_BIT_SYS_STATUS_bit,"UART_1 Len %d ",g_uart[UART_1].RecvLen); Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"UART_1 Buff:", g_uart[UART_1].RecvBuffer,g_uart[UART_1].RecvLen); + g_uart[UART_1].Receiving = 0; + //将数据存入SRAM数据处理缓冲区 - 数据接收完毕在数据头写入数据长度 + if( g_uart[UART_1].RX_Buffer_WriteAddr < SRAM_UART1_RecvBuffer_Start_Addr) g_uart[UART_1].RX_Buffer_WriteAddr = SRAM_UART1_RecvBuffer_Start_Addr; SRAM_Write_Byte((uint8_t)(g_uart[UART_1].RecvLen & 0xFF),g_uart[UART_1].RX_Buffer_WriteAddr); SRAM_Write_Byte((uint8_t)((g_uart[UART_1].RecvLen >> 8) & 0xFF),g_uart[UART_1].RX_Buffer_WriteAddr+1); SRAM_DMA_Write_Buff(g_uart[UART_1].RecvBuffer,g_uart[UART_1].RecvLen,g_uart[UART_1].RX_Buffer_WriteAddr+2); @@ -279,7 +306,6 @@ __attribute__((section(".non_0_wait"))) void UART1_RECEIVE(void) if(g_uart[UART_1].RX_Buffer_WriteAddr > SRAM_UART1_RecvBuffer_End_Addr) g_uart[UART_1].RX_Buffer_WriteAddr = SRAM_UART1_RecvBuffer_Start_Addr; g_uart[UART_1].RecvLen = 0; - g_uart[UART_1].Receiving = 0; } } } @@ -304,10 +330,19 @@ __attribute__((section(".non_0_wait"))) void UART2_RECEIVE(void) Dbg_Println(DBG_BIT_SYS_STATUS_bit,"UART_2 Len %d ",g_uart[UART_2].RecvLen); Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"UART_2 Buff:", g_uart[UART_2].RecvBuffer,g_uart[UART_2].RecvLen); + g_uart[UART_2].Receiving = 0; + //将数据存入SRAM数据处理缓冲区 - 数据接收完毕在数据头写入数据长度 + if( g_uart[UART_2].RX_Buffer_WriteAddr < SRAM_UART2_RecvBuffer_Start_Addr) g_uart[UART_2].RX_Buffer_WriteAddr = SRAM_UART2_RecvBuffer_Start_Addr; + SRAM_Write_Byte((uint8_t)(g_uart[UART_2].RecvLen & 0xFF),g_uart[UART_2].RX_Buffer_WriteAddr); + SRAM_Write_Byte((uint8_t)((g_uart[UART_2].RecvLen >> 8) & 0xFF),g_uart[UART_2].RX_Buffer_WriteAddr+1); + SRAM_DMA_Write_Buff(g_uart[UART_2].RecvBuffer,g_uart[UART_2].RecvLen,g_uart[UART_2].RX_Buffer_WriteAddr+2); + + g_uart[UART_2].RX_Buffer_WriteAddr += SRAM_Uart_Buffer_Size; + if(g_uart[UART_2].RX_Buffer_WriteAddr > SRAM_UART2_RecvBuffer_End_Addr) g_uart[UART_2].RX_Buffer_WriteAddr = SRAM_UART2_RecvBuffer_Start_Addr; g_uart[UART_2].RecvLen = 0; - g_uart[UART_2].Receiving = 0; + } } } @@ -329,13 +364,21 @@ __attribute__((section(".non_0_wait"))) void UART3_RECEIVE(void) { g_uart[UART_3].RecvIdleTiming = SysTick_1ms; - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"UART_3 Len %d ",g_uart[UART_3].RecvLen); - Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"UART_3 Buff:", g_uart[UART_3].RecvBuffer,g_uart[UART_3].RecvLen); +// Dbg_Println(DBG_BIT_SYS_STATUS_bit,"UART_3 Len %d ",g_uart[UART_3].RecvLen); +// Dbg_Print_Buff(DBG_BIT_SYS_STATUS_bit,"UART_3 Buff:", g_uart[UART_3].RecvBuffer,g_uart[UART_3].RecvLen); + g_uart[UART_3].Receiving = 0; + //将数据存入SRAM数据处理缓冲区 - 数据接收完毕在数据头写入数据长度 + if( g_uart[UART_3].RX_Buffer_WriteAddr < SRAM_UART3_RecvBuffer_Start_Addr) g_uart[UART_3].RX_Buffer_WriteAddr = SRAM_UART3_RecvBuffer_Start_Addr; + SRAM_Write_Byte((uint8_t)(g_uart[UART_3].RecvLen & 0xFF),g_uart[UART_3].RX_Buffer_WriteAddr); + SRAM_Write_Byte((uint8_t)((g_uart[UART_3].RecvLen >> 8) & 0xFF),g_uart[UART_3].RX_Buffer_WriteAddr+1); + SRAM_DMA_Write_Buff(g_uart[UART_3].RecvBuffer,g_uart[UART_3].RecvLen,g_uart[UART_3].RX_Buffer_WriteAddr+2); + + g_uart[UART_3].RX_Buffer_WriteAddr += SRAM_Uart_Buffer_Size; + if(g_uart[UART_3].RX_Buffer_WriteAddr > SRAM_UART3_RecvBuffer_End_Addr) g_uart[UART_3].RX_Buffer_WriteAddr = SRAM_UART3_RecvBuffer_Start_Addr; g_uart[UART_3].RecvLen = 0; - g_uart[UART_3].Receiving = 0; } } } diff --git a/Readme.md b/Readme.md index 96e5761..de61477 100644 --- a/Readme.md +++ b/Readme.md @@ -1,3 +1,15 @@ +#### 2026-01-05 + +鈥 1銆丆SIO 缁х數鍣ㄥ崟鐙竴涓澶囧瓨鏀惧湪BUS璁惧鍒楄〃涓紝搴旇灏嗚繖涓澶囧瓨鏀惧埌铏氭嫙璁惧涓 - 涓嶅悎鐞嗙殑鍦版柟锛屽緟淇敼 + +鈥 2銆佽皟璇旴US鎬荤嚎閫氳 - OK + +鈥 3銆佸姩浣滄墽琛 - 缃戠粶鎺у埗缁х數鍣 OK + +鈥 4銆佸鍔燙5缁х數鍣ㄨ澶 + + + #### 2025-12-25 鈥 1銆乀FTP鍗囩骇 - 閰嶇疆鏂囦欢鍒濇娴嬭瘯娌¢棶棰 diff --git a/User/includes.h b/User/includes.h index 3530c12..fd37f32 100644 --- a/User/includes.h +++ b/User/includes.h @@ -8,6 +8,7 @@ #ifndef USER_INCLUDES_H_ #define USER_INCLUDES_H_ +#include #include "ch564.h" #include "system_ch564.h" @@ -46,9 +47,10 @@ #include "blv_rs485_dev_c12dimming.h" #include "blv_rs485_dev_touchswitch.h" #include "blv_rs485_dev_touchtempt1.h" -#include "blv_nor_dec_virtualcard.h" #include "blv_nor_dev_hvoutfun.h" +#include "blv_nor_dev_c5relay.h" #include "blv_nor_dev_lvinput.h" +#include "blv_nor_dev_lvoutput.h" #include "blv_nor_dev_serviceinfo.h" #include "blv_rs485_dev_energymonitor.h" diff --git a/User/main.c b/User/main.c index a6cd346..64cec61 100644 --- a/User/main.c +++ b/User/main.c @@ -43,9 +43,11 @@ int main(void) WCHNET_LIB_Init(); - Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU Start!! 2025-11-03-10:42\r\n"); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"MCU Start!! \r\n"); Dbg_Println(DBG_BIT_SYS_STATUS_bit,"SystemClk:%d\r\n", SystemCoreClock); + Dbg_Println(DBG_BIT_SYS_STATUS_bit,"DEV_ACTION_INFO Size:%d \r\n",sizeof(DEV_ACTION_INFO)); + BLV_DevAction_AllData_Init(); while (1) @@ -57,12 +59,15 @@ int main(void) UART2_RECEIVE(); UART3_RECEIVE(); - if(SysTick_1ms - test_tick >= 10000){ - test_tick = SysTick_1ms; + BLV_BUS485Port_ModeTask(); - //Dbg_Println(DBG_BIT_SYS_STATUS_bit,"RUN PYH:%x...\r\n",ETH_ReadPHYRegister(PHY_ADDRESS, PHY_BSR)); + BLV_PollPort_ModeTask(); - } + BLV_ActivePort_ModeTask(); + + //BLV_Nor_Dev_ModeTask(); + + BLV_DevAction_Task(); NetWork_Task();