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();