feat:新建项目文件

BLV主机C1P模块
This commit is contained in:
caocong
2025-12-06 13:49:01 +08:00
commit d2d8800788
118 changed files with 47572 additions and 0 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,392 @@
/*
* blv_nor_dev_hvoutfun.c
*
* Created on: Nov 13, 2025
* Author: cc
*/
#include "blv_nor_dev_hvoutfun.h"
#include "blv_dev_action.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "debug.h"
#include "blv_bus_dev_c5iofun.h"
#include <string.h>
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, NOR_HVOUT_INFO *DevHVoutInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_C5RELAY_Flag, BLW_RS485_C5RELAY_Data_Init) //((DevFunP)NULL) // C5<43><35>C12<31>Դ<EFBFBD><D4B4>̵<EFBFBD><CCB5><EFBFBD>
#define RS485_DEV_PRO_FUN_02 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_A9RELAY_Flag, BLW_RS485_A9RELAY_Data_Init) //((DevFunP)NULL) //A9IO<49>̵<EFBFBD><CCB5><EFBFBD>
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL) //DevExistJudgge(RS485_HVout_SwiRELAY_Flag, BLW_RS485_SwiRELAY_Data_Init) //((DevFunP)NULL) //ǿ<><EFBFBD>ؼ̵<D8BC><CCB5><EFBFBD>
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL) //
#define RS485_DEV_PRO_FUN_05 ((DevFunP)NULL) //
#define RS485_DEV_PRO_FUN_06 ((DevFunP)NULL)
/*******************************************************************************
* Function Name : BLV_Nor_Dev_HVout_For_Logic_Init
* Description : <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_Nor_Dev_HVout_For_Logic_Init(
LOGICFILE_DEVICE_INFO *dev_info,
uint8_t *data,
uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevHVoutInfo,0,sizeof(NOR_HVOUT_INFO)); //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.Protocol = dev_info->version;
if(ENUM_RS485_DEV_PRO_01 == dev_info->version)
{
BUS_Public.retry_num = C5IO_REPEATSENDTIMEMAX; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = C5IO_SEND_WAIT_TIME; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
}else{
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
}
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_HVout_Control_State; //
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = HVout_Loop_State; //
BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl = BLW_HVout_Group_Ctrl; //
BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr = BLW_HVout_Group_Read; //
if(dev_info->output_num > C1_HVOUTNUMMAX)
{
DevHVoutInfo.HVoutLoopValidNum = C1_HVOUTNUMMAX;
}else if(0x00 == dev_info->output_num)
{
DevHVoutInfo.HVoutLoopValidNum = 0x01; //<2F><>·Ϊ0<CEAA><30><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>·
}else{
DevHVoutInfo.HVoutLoopValidNum = dev_info->output_num;
}
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; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &DevHVoutInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &DevHVoutInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &DevHVoutInfo);break;
case ENUM_RS485_DEV_PRO_05: if(NULL!=RS485_DEV_PRO_FUN_05) RS485_DEV_PRO_FUN_05(&BUS_Public, &DevHVoutInfo);break;
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &DevHVoutInfo);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List(&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List(&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List(&BUS_Public,(uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO));
BUS485_Info.device_num += 1;
break;
}
}
/*******************************************************************************
* Function Name : HVout_Loop_State
* Description : ָ<><D6B8><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4>õ<EFBFBD>
* Input :
* devaddr - <20><>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
* DevOutputLoop - <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ҵļ̵<C4BC><CCB5><EFBFBD><EFBFBD><EFBFBD>·
* Return :
* <20><>·״̬<D7B4><CCAC><EFBFBD>أ<EFBFBD> 0x01 <20><> ,0x02<30><32>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint16_t HVout_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop)
{
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00) return 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
if(DevOutputLoop >= DevHVoutInfo.HVoutLoopValidNum)
{
return 0x00;
}
if(DevHVoutInfo.DevHVoutState[DevOutputLoop] == 0x01) //
{
return 0x01;
}else{
return 0x02;
}
}
/*******************************************************************************
* Function Name : BLW_HVout_Control_State
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>· <20><>·<EFBFBD><C2B7><EFBFBD>Ǵ<EFBFBD>0
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_HVout_Control_State(
uint32_t CfgDevAddIn,
uint16_t DevInputAddr,
uint32_t devaddr,
uint16_t DevOutputLoop,
uint16_t start)
{
uint8_t temp1 = 0;
uint8_t state; //0<><30> 1<><31>
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
switch(start)
{
case 0x01:state = HVout_State_Open;break;
case 0x02:state = HVout_State_Close;break;
default:return;
}
if(DevOutputLoop >= DevHVoutInfo.HVoutLoopValidNum) return ;
if( DevHVoutInfo.DevHVoutState[DevOutputLoop] != state )
{
switch(state)
{
case 0x00: //ָ<><D6B8>λ<EFBFBD><CEBB>0
DevHVoutInfo.DevHVoutState[DevOutputLoop] = 0x00;
break;
case 0x01: //ָ<><D6B8>λ<EFBFBD><CEBB>һ
DevHVoutInfo.DevHVoutState[DevOutputLoop] = 0x01;
break;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"HVOUT loop:%d,start:%d",DevOutputLoop,start);
temp1++;
}
else if(0x01 == DevHVoutInfo.HVSwitchFlag) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><E7BFAA>
{
temp1 = 0x01;
DevHVoutInfo.HVSwitchCtrlFlag = 0x01; //<2F><>Ȼ<EFBFBD><C8BB>һ
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"HVDevSendBuf loop:%d,start:%d",DevOutputLoop,start);
}
if(temp1 != 0x00)
{
if(Active_Port == BUS_Public.port)
{
BLV_Active_Set_List_Addr(devaddr); //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
}
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_HVout_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_HVout_Group_Ctrl(
uint32_t CfgDevAddIn,
uint16_t DevInputAddr,
uint32_t devaddr,
uint32_t CtrlFlag,
uint8_t CtrlNum,
uint16_t *start)
{
uint8_t temp1 = 0;
uint8_t i = 0;
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
if(CtrlNum >= DevHVoutInfo.HVoutLoopValidNum)
{
CtrlNum = DevHVoutInfo.HVoutLoopValidNum;
}
for(i = 0; i < CtrlNum; i++)
{
if(CtrlFlag&(0x0001<<i)) //<2F><><30><CEAA><EFBFBD><EFBFBD>
{
switch(start[i])
{
case 0x01: //<2F><><EFBFBD>ƿ<EFBFBD>
if(DevHVoutInfo.DevHVoutState[i] != 0x01) //<2F><>Ϊ1
{
temp1++;
DevHVoutInfo.DevHVoutState[i] = 0x01;
}
break;
case 0x02: //<2F><><EFBFBD>ƹ<EFBFBD>
if(DevHVoutInfo.DevHVoutState[i] != 0x00) //<2F><>Ϊ0
{
temp1++;
DevHVoutInfo.DevHVoutState[i] = 0x00;
}
break;
}
}
}
if((0x00 == temp1) && (0x01 == DevHVoutInfo.HVSwitchFlag)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>б<20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><E7BFAA>
{
if(0x00 == DevHVoutInfo.HVSwitchCtrlFlag) //Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><C2B1><EFBFBD>Ϊ1
{
temp1 = 0x01;
DevHVoutInfo.HVSwitchCtrlFlag = 0x01; //<2F><>Ȼ<EFBFBD><C8BB>һ
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"HVDevSendBuf loopCtrl");
}
if(temp1 != 0x00)
{
if(Active_Port == BUS_Public.port)
{
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_HVout_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> <20><><EFBFBD>ؿ<EFBFBD> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ع<EFBFBD>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint16_t BLW_HVout_Group_Read(
uint32_t devaddr,
uint8_t SceneType,
uint32_t ReadFlag,
uint8_t ReadNum,
uint16_t *start)
{
uint8_t i;
uint8_t Ret = 0x00;
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00) return 0x00;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>̵<EFBFBD><CCB5><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>·<EFBFBD><C2B7>־:%08X ", ReadFlag);
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
if(ReadNum >= DevHVoutInfo.HVoutLoopValidNum)
{
ReadNum = DevHVoutInfo.HVoutLoopValidNum;
}
switch(SceneType)
{
case 0x01:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
switch(start[i])
{
case 0x01: //״̬<D7B4><CCAC>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>̵<EFBFBD><CCB5><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD>:%04X ", start[i]);
if( DevHVoutInfo.DevHVoutState[i] != 0x01 ) //<2F><>Ϊ1
{
Ret = DEV_STATE_CLOSE;
}
break;
case 0x02: //״̬<D7B4><CCAC>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22>̵<EFBFBD><CCB5><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD>:%04X ", start[i]);
if(DevHVoutInfo.DevHVoutState[i] != 0x00 ) //<2F><>Ϊ0
{
Ret = DEV_STATE_CLOSE;
}
break;
}
}
}
break;
case 0x02:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
if(0x01 == start[i])//״̬<D7B4><CCAC>
{
if( DevHVoutInfo.DevHVoutState[i] != 0x01 ) //<2F><>Ϊ1
{
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD><E2B3A1><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>%d״̬:%04X ", i, start[i]);
Ret = DEV_STATE_OPEN;
break;
}
}
}
}
break;
}
if(0x00 == Ret)
{
switch(SceneType)
{
case 0x01:
Ret = DEV_STATE_OPEN;
break;
case 0x02:
Ret = DEV_STATE_CLOSE;
break;
}
}
return Ret;
}
/*******************************************************************************
* Function Name : Get_BLV485_Expand_Online_Status
* Description : <20><>ȡ<EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* Return : <20><><EFBFBD><EFBFBD>״̬
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Get_BLV485_Expand_Online_Status(uint32_t devaddr)
{
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),devaddr+Dev_Privately);
if(DevHVoutInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,256 @@
/*
* blv_not_dev_lvinput.c
*
* Created on: Nov 17, 2025
* Author: cc
*/
#include "blv_nor_dev_lvinput.h"
#include "blv_bus_dev_c5iofun.h"
#include "blv_rs485_dev_switchctrl.h"
#include "pc_devicetest_fun.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "ch564.h"
#include "blv_netcomm_function.h"
#include <string.h>
/*******************************************************************************
* Function Name : BLV_Nor_Dev_LVinput_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_Nor_Dev_LVinput_Init(uint8_t devaddr, uint16_t LoopMax)
{
Device_Public_Information_G BUS_Public;
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&DevLVinputInfo,0,sizeof(NOR_LVINPUT_INFO));
BUS_Public.addr = devaddr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = Dev_Host_LVinput; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.DevFunInfo.Dev_Data_Process = Dev_LVinput_Dis;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_LVinput_InType_Get;
if(LoopMax > LVINPUTNUMMAX)
{
DevLVinputInfo.LVinputValidNum = LVINPUTNUMMAX;
}else{
DevLVinputInfo.LVinputValidNum = LoopMax;
}
DevLVinputInfo.DevC5IOAddr = Find_AllDevice_List_Information(DEV_C5IO_Type, 0x00);
Add_Nor_Device_To_List(&BUS_Public,(uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO));
}
/*******************************************************************************
* Function Name : Dev_LVinput_InType_Get
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
* Input :
DevAddr : <20><EFBFBD><E8B1B8>ַ
DevInputLoop : <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
DevInputType <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Dev_LVinput_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately); /*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevInputLoop >= DevLVinputInfo.LVinputValidNum)
{
return Ret;
}
if(DevInputType == DevLVinputInfo.DevReadBuf[DevInputLoop]) //<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>
{
DevLVinputInfo.DevReadBuf[DevInputLoop] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = CtrlValid;
}
if(CtrlValid == Ret)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s %d: %d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",__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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : Dev_LVinput_Dis
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><EFBFBD><E8BAAF>
* Input :
DevAddr : <20><EFBFBD><E8B1B8>ַ
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void Dev_LVinput_Dis(uint32_t DevAddr)
{
Device_Public_Information_G BUS_PublicLVinput; //<2F><><EFBFBD><EFBFBD>
NOR_LVINPUT_INFO DevLVinputInfo; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
Device_Public_Information_G BUS_PublicC5IO; //<2F><><EFBFBD><EFBFBD>
BUS_C5IO_INFO C5IO_Info;
uint8_t KeepFlag = 0x00;
if( (0x00000000 == DevAddr) || (0xFFFFFFFF == DevAddr) )
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicLVinput,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);
if( (0x00000000 == DevLVinputInfo.DevC5IOAddr) || (0xFFFFFFFF == DevAddr) )
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_PublicC5IO,sizeof(Device_Public_Information_G),DevLVinputInfo.DevC5IOAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevLVinputInfo.DevC5IOAddr+Dev_Privately);
for(uint8_t i = 0;i<C5IO_DI_CH_MAX;i++)
{
switch((C5IO_Info.DI_Type[i] & 0x0F))
{
case BUS_C5IO_DI_Key_Type:
if(C5IO_Info.DI_Start[i] != 0x00) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
KeepFlag = 0x01;
DevActionGlobal.Devi = BUS_PublicLVinput.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s Key_Type:%d <20><>·:%d ״̬:%d",__func__, (C5IO_Info.DI_Type[i] & 0x0F), i, C5IO_Info.DI_Start[i]);
DevLVinputInfo.DevReadBuf[i] = C5IO_Info.DI_Start[i];
DevLVinputInfo.DevReadBufLast[i] = C5IO_Info.DI_Start[i];
if(C5IO_Info.DI_Start[i]==0x02) //2023-10-09
{
DevActionGlobal.InputType = BUS_PublicLVinput.type;
DevActionGlobal.InputAddr = BUS_PublicLVinput.addr;
DevActionGlobal.InputLoop = i;
}else if(C5IO_Info.DI_Start[i]==0x03)
{
DevActionGlobal.InputType = 0xff;
DevActionGlobal.InputAddr = 0x00;
DevActionGlobal.InputLoop = 0x00;
}
/*<2A><><EFBFBD><EFBFBD>״̬<D7B4>ϱ<EFBFBD>*/
if(g_pc_test.test_flag == 0x01)
{
uint8_t ack_buff[5] = {0};
ack_buff[(i/4)] = (C5IO_Info.DI_Start[i]&0x03) << (i%4)*2;
//Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"<22>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>\r\n");
BLV_PC_Testing_Data_Reported2(0x01,DEV_C5IO_Type,0x00,ack_buff,4);
}else if(g_pc_test.test_flag == 0x11)
{
uint8_t ack_buff[8] = {0};
ack_buff[0] = g_pc_test.test_flag;
ack_buff[1] = DEV_C5IO_Type;
ack_buff[2] = 0x00;
ack_buff[3 + (i/4)] = (C5IO_Info.DI_Start[i]&0x03) << (i%4)*2;
//Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"<22>ϱ<EFBFBD>PC<50><43><EFBFBD><EFBFBD>\r\n");
Udp_Internal_PC_Testing_Reported(ack_buff,0x07,g_pc_test.pc_ip,g_pc_test.pc_port);
}
C5IO_Info.DI_Start[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case BUS_C5IO_DI_Pir_Type:
case BUS_C5IO_DI_Dry_Type:
if(C5IO_Info.DI_Start[i] != C5IO_Info.DI_LastStart[i])
{
KeepFlag = 0x01;
C5IO_Info.DI_LastStart[i] = C5IO_Info.DI_Start[i];
switch(C5IO_Info.DI_Start[i])
{
case 0x00: //<2F>ͷ<EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s,Loop:%d Release",__func__, i);
DevActionGlobal.Devi = BUS_PublicLVinput.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo.DevReadBuf[i] = KeyRelease;
DevLVinputInfo.DevReadBufLast[i] = KeyRelease;
DevActionGlobal.InputType = 0xff; //2023-10-09
DevActionGlobal.InputAddr = 0x00; //2023-10-09
DevActionGlobal.InputLoop = 0x00; //2023-10-09
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s,Loop:%d Press",__func__, i);
DevActionGlobal.Devi = BUS_PublicLVinput.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
DevLVinputInfo.DevReadBuf[i] = KeyPress;
DevLVinputInfo.DevReadBufLast[i] = KeyPress;
DevLVinputInfo.HoldTick[i] = SysTick_1s;
DevActionGlobal.InputType = BUS_PublicLVinput.type; //2023-10-09
DevActionGlobal.InputAddr = BUS_PublicLVinput.addr; //2023-10-09
DevActionGlobal.InputLoop = i; //2023-10-09
break;
}
/*<2A><><EFBFBD><EFBFBD>״̬<D7B4>ϱ<EFBFBD>*/
if(g_pc_test.test_flag == 0x01)
{
uint8_t ack_buff[5] = {0};
ack_buff[(i/4)] = (C5IO_Info.DI_Start[i]&0x03) << (i%4)*2;
BLV_PC_Testing_Data_Reported2(0x01,DEV_C5IO_Type,0x00,ack_buff,4);
}else if(g_pc_test.test_flag == 0x11)
{
uint8_t ack_buff[8] = {0};
ack_buff[0] = g_pc_test.test_flag;
ack_buff[1] = DEV_C5IO_Type;
ack_buff[2] = 0x00;
ack_buff[3 + (i/4)] = (C5IO_Info.DI_Start[i]&0x03) << (i%4)*2;
//Dbg_Print(DBG_BIT_LOGIC_STATUS_bit,"<22>ϱ<EFBFBD>PC<50><43><EFBFBD><EFBFBD>\r\n");
Udp_Internal_PC_Testing_Reported(ack_buff,0x07,g_pc_test.pc_ip,g_pc_test.pc_port);
}
}
break;
}
//2024-06-13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ըɽӵ㴥<D3B5><E3B4A5>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>1s<31><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
if( ( ( (C5IO_Info.DI_Type[i] & 0x0F) == BUS_C5IO_DI_Dry_Type ) && (DevLVinputInfo.DevReadBuf[i] == 0x00) \
&& (SysTick_1s > DevLVinputInfo.HoldTick[i] + 1) && (DevLVinputInfo.DevReadBufLast[i] == KeyPress) ) )
{
DevLVinputInfo.HoldTick[i] = SysTick_1s;
DevLVinputInfo.DevReadBuf[i] = KeyHold;
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s Loop:%d Hold",__func__,i);
KeepFlag = 0x01;
}
}
if(0x01 == KeepFlag)
{
BUS_PublicLVinput.check = 0x00;
BUS_PublicLVinput.check = DoubleData_CheckSum((uint8_t *)&BUS_PublicLVinput, sizeof(Device_Public_Information_G), (uint8_t *)&DevLVinputInfo, sizeof(NOR_LVINPUT_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_PublicLVinput, sizeof(Device_Public_Information_G),DevAddr); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&DevLVinputInfo,sizeof(NOR_LVINPUT_INFO),DevAddr+Dev_Privately);
/*<2A><><EFBFBD><EFBFBD>C5IO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
BUS_PublicC5IO.check = 0x00;
BUS_PublicC5IO.check = DoubleData_CheckSum((uint8_t *)&BUS_PublicC5IO, sizeof(Device_Public_Information_G), (uint8_t *)&C5IO_Info, sizeof(BUS_C5IO_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_PublicC5IO, sizeof(Device_Public_Information_G),DevLVinputInfo.DevC5IOAddr); /*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&C5IO_Info,sizeof(BUS_C5IO_INFO),DevLVinputInfo.DevC5IOAddr+Dev_Privately);
}
}

View File

@@ -0,0 +1,468 @@
/*
* blv_rs485_dev_c12dimming.c
*
* Created on: Nov 17, 2025
* Author: cc
*/
#include "blv_rs485_dev_c12dimming.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "ch564.h"
#include <string.h>
#define C12Rs485AddrDefault 0x01 //Ĭ<><C4AC>Ϊ1<CEAA><31>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6>Ȼ<EFBFBD><C8BB>Ĭ<EFBFBD>ϵ<EFBFBD>ַ
#define DEVC12DimTYPE 0x03 //C12DimͨѶЭ<D1B6><D0AD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
/*******************************************************************************
* Function Name : BLW_RS485_C12Dim_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_RS485_C12Dim_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum)
{
BUS_Public->polling_cf = (uint32_t)&BLW_C12DimCycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_C12Dim_Check;
if(LoopNum >= C12DIM_OUT_CH_MAX) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = C12DIM_OUT_CH_MAX;
}
else if(0x00 == LoopNum)
{
Rs485LED->LEDLoopValidNum = 0x01;
}
else //δ<><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
{
Rs485LED->LEDLoopValidNum = LoopNum;
}
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>C12Dim<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·:%d", Rs485LED->LEDLoopValidNum);
Rs485LED->LEDCtrlFlag = 0x01;
}
/*******************************************************************************
* Function Name : BLW_LEDCycleCtrl
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLW_C12DimCycleCtrl(uint32_t dev_addr)
{
uint8_t i; //<2F><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>·
uint8_t Ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
uint8_t KeepFlag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevSendBuf_last[i] != Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.LEDCtrlFlag = 0x01;
Rs485LEDInfo.LEDCtrlCnt = BUS_Public.retry_num;
Rs485LEDInfo.DevReadBuf[i] = 0x01; //״̬<D7B4><EFBFBD><E4BBAF>һ
memcpy(Rs485LEDInfo.DevSendBuf_last, Rs485LEDInfo.DevSendBuf, Rs485LEDInfo.LEDLoopValidNum); //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
}
for(i = 0; i < Rs485LEDInfo.LEDLoopValidNum; i++)
{
if(Rs485LEDInfo.DevCtrlWayBuf_last[i] != Rs485LEDInfo.DevCtrlWayBuf[i]) // 0x00
{
Rs485LEDInfo.LEDWayCtrlFlag |=(0x01<<i); //<2F><>Ӧ<EFBFBD>ķ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE>һ
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ<EFBFBD><EFBFBD>λ:%d <20><>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>%d\r\n",Rs485LEDInfo.LEDWayCtrlFlag,Rs485LEDInfo.LEDLoopValidNum); //
Rs485LEDInfo.LEDWayCtrlCnt = BUS_Public.retry_num;
Rs485LEDInfo.DevCtrlWayBuf_last[i] = Rs485LEDInfo.DevCtrlWayBuf[i];//<2F><>ʽ<EFBFBD><CABD><EFBFBD>ƣ<EFBFBD>ֻ<EFBFBD><D6BB>һ·һ·<D2BB><C2B7><EFBFBD><EFBFBD>
}
}
if(Rs485LEDInfo.Dim_Global_Value != DevActionGlobal.DimGlobalValue) //2025-07-15,YYW,ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȱȽ<C8B1>
{
Rs485LEDInfo.Dim_Global_Value = DevActionGlobal.DimGlobalValue;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12DimFun--ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ȸı<C8B8>:",Rs485LEDInfo.Dim_Global_Value);
}
if(Rs485LEDInfo.Dim_Global_Value_Last != Rs485LEDInfo.Dim_Global_Value) //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.Dim_Global_Value_Last = Rs485LEDInfo.Dim_Global_Value;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<7);
}
if((Rs485LEDInfo.LEDUpLightLimitLast != Rs485LEDInfo.LEDUpLightLimit) || (Rs485LEDInfo.LEDDownLightLimitLast != Rs485LEDInfo.LEDDownLightLimit)) //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
{
Rs485LEDInfo.LEDUpLightLimitLast = Rs485LEDInfo.LEDUpLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<6);
Rs485LEDInfo.LEDDownLightLimitLast = Rs485LEDInfo.LEDDownLightLimit;
Rs485LEDInfo.Dim_GV_Flag |= (0x01<<5);
}
if(0x00 != Rs485LEDInfo.Dim_GV_Flag) //2024-1-30
{
BLW_C12_GlobalValue_Set(&BUS_Public, &Rs485LEDInfo); //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x01 == Rs485LEDInfo.LEDCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDCtrlCnt)
{
Rs485LEDInfo.LEDCtrlCnt--;
}else{
Rs485LEDInfo.LEDCtrlFlag = 0x00;
}
BLW_Rs485_C12Dim_Ctrl(&BUS_Public, &Rs485LEDInfo); //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME;
}
else if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
if(0x00 != Rs485LEDInfo.LEDWayCtrlCnt)
{
Rs485LEDInfo.LEDWayCtrlCnt--;
}else{
Rs485LEDInfo.LEDWayCtrlFlag = 0x00;
}
if(0x00 != Rs485LEDInfo.LEDWayCtrlFlag)
{
BLW_Rs485_C12Dim_Way_Ctrl(&BUS_Public, &Rs485LEDInfo); //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
Ret = RS485OCCUPYTIME; //<2F><>0<EFBFBD><30><EFBFBD><EFBFBD>
}else{
KeepFlag = 0x01; //Ϊ0<CEAA><30><EFBFBD><EFBFBD>
}
}else {
BLW_Rs485_C12Dim_Read(&BUS_Public, &Rs485LEDInfo); //<2F><>ȡ
Ret = RS485OCCUPYTIME;
}
if(RS485OCCUPYTIME == Ret)
{
KeepFlag = 0x01;
if(Rs485LEDInfo.DevSendCnt > BUS_Public.retry_num)
{
if(Rs485LEDInfo.DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485 C12 LED DEV_IS_OFFLINE");
LOG_Device_Online_Record(DEV_RS485_PWM,BUS_Public.addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LEDInfo.DevOffline = DEV_IS_OFFLINE; //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevOffline != Rs485LEDInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LEDInfo.DevOfflineLast = Rs485LEDInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(0x00 != Rs485LEDInfo.Dim_GV_Flag)
{
Rs485LEDInfo.Dim_GV_Flag = 0x00;
}
}else{
Rs485LEDInfo.DevSendCnt++; //
}
Rs485LEDInfo.inquire_tick = SysTick_1ms;
/*ͨѶͳ<D1B6><CDB3>*/
BLV_Communication_Record(&Rs485LEDInfo.comm_record,0x01,0x00);
}
if(0x01 == KeepFlag)
{
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),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : BLW_Rs485_LED_Check
* Description : BLWLED<45><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <20><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLW_Rs485_C12Dim_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t rev = 0x01;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
uint8_t data[0x20];
if(len > 0x20)
{
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
if(( data[0] != C12Rs485AddrDefault ) || ( DEVC12DimTYPE != data[2] ) //
|| ( len != (data[4] ) )
) //<2F><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dim <20><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>");
return rev; //У<><D0A3><EFBFBD>ļ<EFBFBD>ͷ
}
if(data[5] == CheckSum_Overlook_Check(data, len, 5)) //У<><D0A3>ͨ<EFBFBD><CDA8>
{
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
switch(data[6])
{
case 0x30: //<2F><>ȡ<EFBFBD>ظ<EFBFBD>
case 0x31: //<2F><><EFBFBD>ƻظ<C6BB>
case 0x32: //<2F><>ʽ<EFBFBD>ظ<EFBFBD>
case 0x33: //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB>
rev = 0x00;
if(Rs485LED.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485LED DEV_IS_ONLINE");
LOG_Device_Online_Record(DEV_RS485_PWM,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485LED.DevSendCnt = 0x00;
Rs485LED.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485LED.DevOffline != Rs485LED.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485LED.DevOfflineLast = Rs485LED.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
BLV_Communication_Record(&Rs485LED.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
break;
}
switch(data[6])
{
case 0x31:
Rs485LED.LEDCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x32:
Rs485LED.LEDWayCtrlFlag = 0x00;
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port,BUS_Public.baud,data,len);
break;
case 0x30:
/*<2A><><EFBFBD>⵽״̬<D7B4>ı<C4B1>ű<EFBFBD><C5B1><EFBFBD>*/
Rs485LED.LEDLightnessReadFlag = 0x00;
//Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming Recv:",data,len);
if( Rs485LED.init_flag == 0x00)
{
/*<2A><>ȡ״̬ - <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>״̬*/
for(uint8_t i = 0; i < Rs485LED.LEDLoopValidNum; i++)
{
Rs485LED.DevSendBuf[i] = data[8 + i] & 0x7F;
Rs485LED.DevSendBuf[i] = 0x00; //2025-11-05 <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
Rs485LED.DevSendBuf_last[i] = Rs485LED.DevSendBuf[i];
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming CH%d Init State:%d",i,Rs485LED.DevSendBuf[i]);
}
Rs485LED.init_flag = 1;
}
break;
case 0x33:
Rs485LED.Dim_GV_Flag = 0x00;
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"C12 Global Set Ack:",data,len);
break;
}
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),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),dev_addr+Dev_Privately);
}
return rev;
}
#define C12DimCTRLSENDLEN 22 //C12<31><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
/**
* @name BLW 12· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* @para
* dev_addr <20><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC>ַ
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
__attribute__((section(".non_0_wait"))) void BLW_Rs485_C12Dim_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> <20><><EFBFBD><EFBFBD>0.1s <20><><EFBFBD><EFBFBD> CH4 CH3 CH2 CH1
uint8_t SendBuf[24];// = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimCTRLSENDLEN, 0x18, 0x21, 0x0f, 0x64, 0x00, 0x50, 0x50, 0x50, 0x50};
SendBuf[0] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
SendBuf[1] = 0x00; //<2F><>0
if(Rs485LEDInfo->LEDSn > 0x0F) Rs485LEDInfo->LEDSn = 0x00;
SendBuf[1] = Rs485LEDInfo->LEDSn;
SendBuf[2] = DEVC12DimTYPE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault; //Ĭ<><C4AC>1<EFBFBD><31>ַ
SendBuf[4] = C12DimCTRLSENDLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x21; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = 0xff; //<2F><><EFBFBD><EFBFBD><38><CDA8>
SendBuf[8] = 0x0f; //<2F><><EFBFBD><EFBFBD><34><CDA8>
SendBuf[9] = Rs485LEDInfo->C12_Set_Time; //<2F><><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>:%d \r\n",Rs485LEDInfo->C12_Set_Time);
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
SendBuf[21-i] = Rs485LEDInfo->DevSendBuf[i] & 0x7F;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"C12Dimming CH%d:%d \r\n",i,Rs485LEDInfo->DevSendBuf[i]);
}
// memcpy(&SendBuf[14], &Rs485LEDInfo->DevSendBuf[0], Rs485LEDInfo->LEDLoopValidNum); //ָʾ<D6B8>ƿ<EFBFBD><C6BF><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimCTRLSENDLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimCTRLSENDLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,C12DimCTRLSENDLEN);
}
#define C12DimWAYCTRLLEN 12
/**
* @name BLW 4· <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* PBLEDLoop <20><>·<EFBFBD><C2B7>ַ 0~3
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> У<><D0A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> mask
* 00 09 03 01 0B 51 22 0F 01 00 64
*/
__attribute__((section(".non_0_wait"))) void BLW_Rs485_C12Dim_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t i;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD>ͣ<EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD <20><><34><CDA8> ģʽ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t SendBuf[C12DimWAYCTRLLEN];// = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimWAYCTRLLEN, 0xBD, 0x24, 0x00, 0x01, 0x02, 0x01};
SendBuf[0] = 0x00;
if(Rs485LEDInfo->LEDSn > 0x0F) Rs485LEDInfo->LEDSn = 0x00;
SendBuf[1] = Rs485LEDInfo->LEDSn; //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = 0x01;
SendBuf[4] = C12DimWAYCTRLLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x22; //<2F><><EFBFBD><EFBFBD><EEA3AC>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[7] = Rs485LEDInfo->LEDWayCtrlFlag&0xFF;
SendBuf[8] = (Rs485LEDInfo->LEDWayCtrlFlag>>8)&0xFF;
for(i = 0; i < Rs485LEDInfo->LEDLoopValidNum; i++)
{
if((Rs485LEDInfo->LEDWayCtrlFlag>>i)&0x01)
{
switch(Rs485LEDInfo->DevCtrlWayBuf_last[i])
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[9] = 0x01; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
SendBuf[10] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_CycleDown: //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
SendBuf[9] = 0x01;
SendBuf[10] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
SendBuf[9] = 0x00;
SendBuf[10] = 0x01;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
SendBuf[9] = 0x00;
SendBuf[10] = 0x00;
break;
case CFG_Dev_CtrlWay_Is_Dim_Stop: //ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
SendBuf[9] = 0x02;
SendBuf[10] = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
}
break; //ֻ<><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
}
}
SendBuf[11] = Rs485LEDInfo->DevCtrlWayContect[i]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimWAYCTRLLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimWAYCTRLLEN);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,C12DimCTRLSENDLEN);
}
#define C12DimREADLEN 7
/**
* @name BLW 4· <20><><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* @para
* CfgDevAdd <20><EFBFBD>ڵ<EFBFBD>
* @return <20><>
* @attention <20><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD>ж<EFBFBD>
*/
__attribute__((section(".non_0_wait"))) void BLW_Rs485_C12Dim_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20>շ<EFBFBD><D5B7><EFBFBD>ַ LEN У<><D0A3><EFBFBD><EFBFBD> CMD
uint8_t SendBuf[C12DimREADLEN]; // = {0x00, 0x00, DEVC12DimTYPE, 0x01, C12DimREADLEN, 0xD8, 0x20};
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
if(Rs485LEDInfo->LEDSn > 0x0F) Rs485LEDInfo->LEDSn = 0x00;
SendBuf[1] = Rs485LEDInfo->LEDSn; //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault;
SendBuf[4] = C12DimREADLEN; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x20;
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, C12DimREADLEN, 5);
MCU485_SendString(BUS_Public->port,SendBuf,C12DimREADLEN);
}
//ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
__attribute__((section(".non_0_wait"))) void BLW_C12_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo)
{
uint8_t lens = 0x0B;
uint8_t SendBuf[15];
memset(SendBuf,0,sizeof(SendBuf));
SendBuf[0] = 0x00; //<2F>ѷ<EFBFBD><D1B7><EFBFBD>ַ
if(Rs485LEDInfo->LEDSn > 0x0F) Rs485LEDInfo->LEDSn = 0x00;
SendBuf[1] = Rs485LEDInfo->LEDSn; //֡
SendBuf[2] = DEVC12DimTYPE; //<2F><><EFBFBD><EFBFBD>
SendBuf[3] = C12Rs485AddrDefault;
SendBuf[4] = lens; //<2F><><EFBFBD><EFBFBD>
SendBuf[6] = 0x23; //Cmd
SendBuf[7] = Rs485LEDInfo->Dim_GV_Flag;
SendBuf[8] = Rs485LEDInfo->Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SendBuf[9] = Rs485LEDInfo->LEDUpLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[10] = Rs485LEDInfo->LEDDownLightLimit; //<2F>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
SendBuf[5] = CheckSum_Overlook_Check(SendBuf, lens, 5);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLW_C12_GlobalValue_Set Buff",SendBuf,lens);
MCU485_SendString(BUS_Public->port,SendBuf,lens);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,SendBuf,lens);
}

View File

@@ -0,0 +1,472 @@
/*
* blv_rs485_dev_cardctrl.c
*
* Created on: Nov 14, 2025
* Author: cc
*/
#include "blv_rs485_dev_cardctrl.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "sram_mem_addr.h"
#include "ch564.h"
#include <string.h>
#define CARDACTIONCONVER(data) (*(uint16_t *)&data) //ʵ<><CAB5>u16<31><36>ֵ <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȽϺ͸<CFBA>ֵ
#define REPEATSENDTIMEMAX 0x03 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define READ_LEN 0x09
#define Dev_Card_RecvData_Len_Max 0x20
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo);
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(Dev_485_Card_Polling_Flag,BLV_RS485_Card_Polling_Init) //<2F><>ѵ<EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_02 DevExistJudgge(Dev_485_Card_Active_Flag,BLV_RS485_Card_Active_Init) //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*******************************************************************************
* Function Name : BLV_RS485_Card_Active_Init
* Description : BLV<4C>忨ȡ<E5BFA8><C8A1> <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_RS485_Card_Active_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_Card_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_Rs485_Card_Check;
Rs485CardInfo->DevPort = Active_Port; //2025-08-21 <20><>Ŀ2164 <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>
//<2F>˿ڴ<CBBF><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>£<EFBFBD>Ĭ<EFBFBD><C4AC>״̬Ϊ<CCAC>忨״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϢĬ<CFA2><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
Rs485CardInfo->Rs485CardFlag = 0x01;
Rs485CardInfo->Rs485CardType = CARD_Guest_Identity;
Rs485CardInfo->Rs485CardFlagLast = Rs485CardInfo->Rs485CardFlag;
Rs485CardInfo->Rs485CardTypeLast = Rs485CardInfo->Rs485CardType;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڲ忨ȡ<EFBFBD><EFBFBD>:%d",Rs485CardInfo->DevPort);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Polling_Init
* Description : BLV<4C>忨ȡ<E5BFA8><C8A1> <20><>ѯ<EFBFBD>˿<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_RS485_Card_Polling_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLV_RS485_Card_Cycle_Dis;
BUS_Public->processing_cf = (uint32_t)&BLV_Rs485_Card_Check;
Rs485CardInfo->DevPort = Polling_Port;
Rs485CardInfo->DevInitFlag = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵ<EFBFBD>˿ڲ忨ȡ<EFBFBD><EFBFBD>:%d",Rs485CardInfo->DevPort);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Data_For_Logic_Init
* Description : <20>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_RS485_Card_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_CARD_INFO Rs485CardInfo;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485CardInfo,0,sizeof(RS485_CARD_INFO));
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.port = dev_info->port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
BUS_Public.baud = 9600; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x03; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 0x0064; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485CardInfo.DevOffline = Rs485CardInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD>߳<EFBFBD>ʼ<EFBFBD><CABC>
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Rs485_Card_InType_Get;
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485CardInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485CardInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485CardInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485CardInfo);break;
default:
break;
}
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿ڲ忨ȡ<E5BFA8><C8A1>_111:%d",Rs485CardInfo.DevPort);
if((DevActionGlobal.sram_save_flag == 0xA8) && ((SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x05) || (SRAM_Read_DW(SRAM_LOG_RCU_Reboot_Reason) == 0x01) ) )
{
Rs485CardInfo.Rs485CardFlag = DevActionGlobal.CardState;
Rs485CardInfo.Rs485CardFlagLast = DevActionGlobal.CardState;
Rs485CardInfo.Rs485CardType = DevActionGlobal.Rs485CardType;
Rs485CardInfo.Rs485CardTypeLast = DevActionGlobal.Rs485CardType;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"card init");
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"card init end");
//<2F><>ʼ<EFBFBD><CABC>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardFlag,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardFlag,SRAM_UDP_ELEReport_CardState_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType_Last); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List(&BUS_Public,(uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List(&BUS_Public,(uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO));
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
default:
break;
}
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Polling_Send
* Description : <20><>ѵ<EFBFBD>˿<EFBFBD><CBBF><EFBFBD>ѵ<EFBFBD><D1B5><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_RS485_Card_Polling_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
uint8_t Cbuf[READ_LEN] = {0x55,0x55,0xee, 0x06, 0x07, 0x00, 0x01,0x00,0x00}; //0x18, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
Cbuf[5] = BUS_Public->addr;
NetCRC16(&Cbuf[3],Cbuf[3]);
MCU485_SendString(BUS_Public->port,Cbuf,READ_LEN);
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
Rs485CardInfo->inquire_tick = SysTick_1ms;
BLV_Communication_Record(&Rs485CardInfo->comm_record,0x01,0x00);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_PortType_Send
* Description : <20><><EFBFBD>ò忨ȡ<E5BFA8><C8A1><EFBFBD>Ķ˿<C4B6><CBBF><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_RS485_Card_PortType_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo)
{
uint8_t lens = 0x0A;
uint8_t data[10];
data[0] = 0x55;
data[1] = 0x55;
data[2] = 0xee;
data[3] = lens - 3; //<2F><>ȥ<EFBFBD><C8A5>ͷ3<CDB7><33><EFBFBD>ֽ<EFBFBD>
data[4] = 0x07; //Type
data[5] = BUS_Public->addr;
data[6] = 0x07; //CMD
data[7] = Rs485CardInfo->DevPort;
NetCRC16(&data[3],data[3]);
MCU485_SendString(BUS_Public->port,data,lens);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_RS485_Card_PortType_Send:",data,lens);
}
/*******************************************************************************
* Function Name : BLV_RS485_Card_Cycle_Dis
* Description : <20>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
* Return :
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLV_RS485_Card_Cycle_Dis(uint32_t dev_addr)
{
uint8_t ret = RS485OCCUPYNOTIME;
Device_Public_Information_G BUS_Public;
RS485_CARD_INFO Rs485CardInfo;
uint8_t keepflag = 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
if(Rs485CardInfo.DevPort != Rs485CardInfo.DevPort_Last)
{
Rs485CardInfo.DevPort_Last = Rs485CardInfo.DevPort;
Rs485CardInfo.DevPort_Flag = 0x01;
keepflag = 0x01;
}
if(Rs485CardInfo.DevPort_Flag == 0x01)
{
BLV_RS485_Card_PortType_Send(&BUS_Public,&Rs485CardInfo);
ret = RS485OCCUPYTIME;
}
else
{
if(BUS_Public.port == Polling_Port)
{
BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
ret = RS485OCCUPYTIME;
}
}
if(ret == RS485OCCUPYTIME)
{
keepflag = 0x01;
if(Rs485CardInfo.DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485CardInfo.DevOffline != DEV_IS_OFFLINE) //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>¼
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card LogInfo_Device_Offline...........");
LOG_Device_Online_Record(DEV_RS485_CARD,SRAM_Read_Byte(dev_addr+Dev_Addr),LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485CardInfo.DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
if(Rs485CardInfo.DevOffline != Rs485CardInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CardInfo.DevOfflineLast = Rs485CardInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
Rs485CardInfo.DevPort_Flag = 0x00;
}else{
Rs485CardInfo.DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
}
if(keepflag == 0x01)
{
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardInfo, sizeof(RS485_CARD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
}
return ret;
}
/*******************************************************************************
* Function Name : BLV_Rs485_Card_Check
* Description : BLV<4C>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <20><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
ͷ LEN TYPE ADDR FUN <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>L <20><><EFBFBD><EFBFBD>H <20><> <20><>Ԫ ¥<><C2A5> <20><><EFBFBD><EFBFBD> У<><D0A3>
55 55 EE 0E 07 01 01 01 00 00 00 00 00 00 00 0A 38
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLV_Rs485_Card_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t data[Dev_Card_RecvData_Len_Max];
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_CARD_INFO Rs485CardInfo;
if(len > Dev_Card_RecvData_Len_Max)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card Check_Len Fail!");
return 0x01; //<2F><>У<EFBFBD><D0A3>
}
if(len < 0x07) {
return 0x01;
}
memset(data,0,sizeof(Dev_Card_RecvData_Len_Max));
SRAM_DMA_Read_Buff(data, len, data_addr);
if((data[0] != 0x55) || (data[1] != 0x55) || (data[2] != 0xEE) || ((data[3] + 0x03) != len) \
|| (data[4] != 0x07) || (data[5] != 0x01) \
|| ((data[len-2] + (data[len-1]<<8)) != NetCRC16_2(&data[3], len - 5))
)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"У<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>!!");
return 0x01;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
if(Rs485CardInfo.DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_Card LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_CARD,BUS_Public.addr, LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485CardInfo.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Rs485CardInfo.DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Rs485CardInfo.DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485CardInfo.DevOffline != Rs485CardInfo.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485CardInfo.DevOfflineLast = Rs485CardInfo.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
if(data[6] == 0x01)
{
if(len >= 8)
{
if(BUS_Public.port == Active_Port)
{
BLV_RS485_Card_Polling_Send(&BUS_Public,&Rs485CardInfo);
}
switch(data[7])
{
case 0x02: //<2F><><EFBFBD><EFBFBD> 2025-09-03 <20><>ȡ<EFBFBD><C8A1>M0<4D><30>
Rs485CardInfo.Rs485CardFlag = 0x01;
break;
case 0x01: //<2F><><EFBFBD><EFBFBD> 2025-09-03 <20><>ȡ<EFBFBD><C8A1>M1<4D><31>
Rs485CardInfo.Rs485CardFlag = 0x01;
break;
case 0x00: //<2F><><EFBFBD><EFBFBD>
Rs485CardInfo.Rs485CardFlag = 0x00;
break;
default: //<2F><><EFBFBD><EFBFBD> 2025-09-26 <20>ϱ<EFBFBD>δ֪״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Rs485CardInfo.Rs485CardFlag = 0x00;
break;
}
Rs485CardInfo.Rs485CardType = data[8];
/*2025-08-04 <20>Ե<EFBFBD>һ<EFBFBD><D2BB>ͨѶ<CDA8><D1B6>ȡ״̬Ϊ<CCAC><CEAA>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>Ҳ<EFBFBD>ִ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>*/
if( (BUS_Public.port == Polling_Port) && (Rs485CardInfo.DevInitFlag == 0x00) )
{
Rs485CardInfo.DevInitFlag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>ͨѶ %d %d %d",DevActionGlobal.DevActionU64Cond.EleState,Rs485CardInfo.Rs485CardType,Rs485CardInfo.Rs485CardTypeLast);
Rs485CardInfo.Rs485CardFlagLast = Rs485CardInfo.Rs485CardFlag;
Rs485CardInfo.Rs485CardTypeLast = Rs485CardInfo.Rs485CardType;
}
}
}
else if(data[6] == 0x07)
{
Rs485CardInfo.DevPort_Flag = 0x00;
}
/*<2A>忨ȡ<E5BFA8><EFBFBD><E7B6AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
if( (Rs485CardInfo.DevInitFlag == 0x01)
&& ( (Rs485CardInfo.Rs485CardFlag != Rs485CardInfo.Rs485CardFlagLast)
|| (Rs485CardInfo.Rs485CardTypeLast != Rs485CardInfo.Rs485CardType) ) ) //<2F><>״̬<D7B4>Ƚ<EFBFBD>
{
Rs485CardInfo.Rs485CardFlagLast = Rs485CardInfo.Rs485CardFlag;
Rs485CardInfo.Rs485CardTypeLast = Rs485CardInfo.Rs485CardType;
DevActionGlobal.Rs485CardType = Rs485CardInfo.Rs485CardType;
DevActionGlobal.CardState = Rs485CardInfo.Rs485CardFlag;
SRAM_Write_Byte(Rs485CardInfo.Rs485CardFlag,SRAM_UDP_ELEReport_CardState); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
SRAM_Write_Byte(Rs485CardInfo.Rs485CardType,SRAM_UDP_ELEReport_CardType); //<2F><>UDP <20>ϱ<EFBFBD>ȡ<EFBFBD><C8A1>״̬ʹ<CCAC><CAB9>
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ仯<EFBFBD><EFBFBD>",data,len);
LOG_Device_COMM_ASK_TO_Reply_Record2(dev_addr+Dev_port,dev_addr+Dev_baud,(SysTick_1ms - Rs485CardInfo.inquire_tick),data,len);
DevActionGlobal.Devi = BUS_Public.DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
if(Rs485CardInfo.Rs485CardFlag == 0x01)
{
if(Rs485CardInfo.Rs485CardType != 0x00)
{
Rs485CardInfo.Rs485CardAction = 0x02 + Rs485CardInfo.Rs485CardType; //
}else {
Rs485CardInfo.Rs485CardAction = 0x01; //<2F><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
}
}else {
Rs485CardInfo.Rs485CardAction = 0x02; //<2F>ο<EFBFBD><CEBF>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>
}
}
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>*/
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardInfo, sizeof(RS485_CARD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),dev_addr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),dev_addr+Dev_Privately);
return 0x00;
}
/*******************************************************************************
* Function Name : Get_BLV485_CARD_Online_Status
* Description : <20><>ȡRS485<38>忨״̬
* Input :
* DevAddr - <20><EFBFBD><E8B1B8>ַ
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Get_BLV485_CARD_Online_Status(uint32_t devaddr)
{
RS485_CARD_INFO Rs485CardInfo;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),devaddr+Dev_Privately);
if(Rs485CardInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/*******************************************************************************
* Function Name : Dev_Rs485_Card_InType_Get
* Description : <20>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2BAAF>
* Input :
* DevAddr - <20><EFBFBD><E8B1B8>ַ
* DevInputLoop - <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
* DevInputType - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Dev_Rs485_Card_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_CARD_INFO Rs485CardInfo; //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),DevAddr+Dev_Privately);
if(Rs485CardInfo.Rs485CardAction == DevInputType)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d ",Rs485CardInfo.Rs485CardAction);
Rs485CardInfo.Rs485CardAction = 0x00;
Ret = CtrlValid;
}
if(CtrlValid == Ret)
{
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD>忨ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
BUS_Public.check = 0x00;
BUS_Public.check = DoubleData_CheckSum((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G), (uint8_t *)&Rs485CardInfo, sizeof(RS485_CARD_INFO));
SRAM_DMA_Write_Buff((uint8_t *)&BUS_Public, sizeof(Device_Public_Information_G),DevAddr);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485CardInfo,sizeof(RS485_CARD_INFO),DevAddr+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,561 @@
/*
* blv_rs485_dev_ledctrl.c
*
* Created on: Nov 17, 2025
* Author: cc
*/
#include "blv_rs485_dev_ledcrtl.h"
#include "ch564.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "ch564.h"
#include "blv_netcomm_function.h"
#include <string.h>
/*<2A><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EAB6A8>*/
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
/*<2A><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_DEV_PRO_FUN_01 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_02 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_05 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_06 ((DevFunP)NULL)
/*******************************************************************************
* Function Name : BLW_RS485_LED_For_Logic_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_RS485_LED_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485LED,0,sizeof(RS485_LED_INFO));
BUS_Public.addr = dev_info->addr; //<2F>豸485<38><35>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud;; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>9600
BUS_Public.retry_num = dev_info->retry; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = dev_info->writ_time; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1> - 100ms
BUS_Public.Protocol = dev_info->version;
Rs485LED.PWM_Set_Time=30;
Rs485LED.RGB_Set_Time=30;
Rs485LED.A8PB_Set_Time=30;
Rs485LED.A9LD_Set_Time=30;
Rs485LED.C12_Set_Time=30;
Rs485LED.Dim_Global_Value = 100;
DevActionGlobal.DimGlobalValue = Rs485LED.Dim_Global_Value;
DevActionGlobal.Dim_Upper_limit = 100;
DevActionGlobal.Dim_Lower_limit = 0;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = BLW_LED_Control_State;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = BLW_LED_Read_State;
BUS_Public.DevFunInfo.Dev_Output_Group_Ctrl = BLW_LED_Group_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_Group_State_Get_ptr = BLW_LED_Group_Read;
Rs485LED.DevOffline = Rs485LED.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(BUS_Public.Protocol) //Э<><D0AD><EFBFBD>
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485LED, dev_info->output_num);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485LED, dev_info->output_num);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485LED, dev_info->output_num);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485LED, dev_info->output_num);break;
case ENUM_RS485_DEV_PRO_05: if(NULL!=RS485_DEV_PRO_FUN_05) RS485_DEV_PRO_FUN_05(&BUS_Public, &Rs485LED, dev_info->output_num);break;
case ENUM_RS485_DEV_PRO_06: if(NULL!=RS485_DEV_PRO_FUN_06) RS485_DEV_PRO_FUN_06(&BUS_Public, &Rs485LED, dev_info->output_num);break;
default: return ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>豸ֱ<E8B1B8><D6B1><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
BUS_Public.port = Bus_port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_BUS_Device_To_List(&BUS_Public,(uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO));
BUS485_Info.device_num += 1;
break;
}
}
/*******************************************************************************
* Function Name : BLW_LED_Control_State
* Description : BLWLED<45><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
start <20><>״̬
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_LED_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start)
{
uint8_t temp1 = 0;
uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
uint8_t CtrlContect;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LED;
if(devaddr == 0x00) return;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(loop >= Rs485LED.LEDLoopValidNum) //<2F><>Ч<EFBFBD><D0A7>·
{
return ;
}
CtrlMode = start&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_Stop:
case CFG_Dev_CtrlWay_Is_Dim_Up:
case CFG_Dev_CtrlWay_Is_Dim_Down:
Rs485LED.LEDLightnessReadFlag = 0x01; //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD><C2A3>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Rs485LED.LEDLightnessReadCnt = BUS_Public.retry_num;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ:%d <20><>ȡ<EFBFBD><C8A1>־:%d", CtrlMode, Rs485LED.LEDLightnessReadFlag); //
temp1++;
break;
}
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Stop:
Rs485LED.DevCtrlWayBuf[loop] = CtrlMode; // - CFG_Dev_CtrlWay_Is_LED_START + 1
Rs485LED.DevCtrlWayContect[loop] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Close:
Rs485LED.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
if(0x00 != Rs485LED.LEDLightRelease[loop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
{
CtrlContect = Rs485LED.LEDLightRelease[loop]; //<2F><> <20><>
}else{
CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Rs485LED.DevSendBuf[loop] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] + CtrlContect <= 100)
{
Rs485LED.DevSendBuf[loop] += CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] >= CtrlContect)
{
Rs485LED.DevSendBuf[loop] -= CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
temp1++;
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Limit: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(0x00 != Rs485LED.DevSendBuf[loop])
{
if(Rs485LED.DevSendBuf[loop] + CtrlContect <= 100)
{
Rs485LED.DevSendBuf[loop] += CtrlContect;
}
else
{
Rs485LED.DevSendBuf[loop] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
temp1++;
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down_Limit: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LED.DevSendBuf[loop] > CtrlContect)
{
Rs485LED.DevSendBuf[loop] -= CtrlContect;
temp1++;
}
break;
}
if(temp1 != 0x00)
{
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
}
/*******************************************************************************
* Function Name : BLW_LED_Read_State
* Description : BLWLED<45><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
loop <20><><EFBFBD><EFBFBD>·
* Return : <20><>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint16_t BLW_LED_Read_State(uint32_t devaddr,uint16_t loop)
{
if(devaddr == 0x00)
return 0x00;
RS485_LED_INFO Rs485LED;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(loop >= Rs485LED.LEDLoopValidNum)
{
return 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>0
}
return Rs485LED.DevSendBuf[loop];
}
/*******************************************************************************
* Function Name : BLW_LED_Read_State
* Description : BLWLED<45><44><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* Return : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ - 0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Get_BLV485_LED_Online_Status(uint32_t devaddr)
{
RS485_LED_INFO Rs485LED;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LED,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(Rs485LED.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/*******************************************************************************
* Function Name : BLW_LED_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start)
{
// uint8_t crc_val = 0;//,temp1 = 0;
// uint1_t state; //0<><30> 1<><31>
uint8_t i;
uint8_t CtrlMode = 0,CtrlContect = 0;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo;
if(devaddr == 0x00) return;
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"LED<45><44><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ؿ<EFBFBD><D8BF>ƿ<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>־<EFBFBD><D6BE>%04X <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>%d ", CtrlFlag, CtrlNum);
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(CtrlNum >= Rs485LEDInfo.LEDLoopValidNum)
{
CtrlNum = Rs485LEDInfo.LEDLoopValidNum;
}
for(i = 0; i < CtrlNum; i++)
{
if(CtrlFlag&(0x0001<<i)) //<2F><><30><CEAA><EFBFBD><EFBFBD>
{
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s <20><>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ",__func__, i+1, start[i]);
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_Stop: //Ψ<><CEA8>ֹͣ<CDA3><D6B9><EFBFBD>Żᷢ<C5BB>Ͷ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
Rs485LEDInfo.LEDLightnessReadFlag = 0x01;
Rs485LEDInfo.LEDLightnessReadCnt = BUS_Public.retry_num;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ģʽ:%d<><64><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>־:%d", CtrlMode, Rs485LEDInfo.LEDLightnessReadFlag); //
break;
}
switch(CtrlMode)
{
case CFG_Dev_CtrlWay_Is_Dim_CycleUp: //<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Dim_CycleDown:
case CFG_Dev_CtrlWay_Is_Dim_Stop:
Rs485LEDInfo.DevCtrlWayBuf[i] = CtrlMode;
Rs485LEDInfo.DevCtrlWayContect[i] = CtrlContect; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
break;
case CFG_Dev_CtrlWay_Is_Open: //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
case CFG_Dev_CtrlWay_Is_Close:
Rs485LEDInfo.DevSendBuf[i] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD>
if(0x00 != Rs485LEDInfo.LEDLightRelease[i]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ֵ
{
CtrlContect = Rs485LEDInfo.LEDLightRelease[i]; //<2F><> <20><>
}else{
CtrlContect = 0x64; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
Rs485LEDInfo.DevSendBuf[i] = CtrlContect; //<2F><><EFBFBD>ȸ<EFBFBD>ֵ
break;
case CFG_Dev_CtrlWay_Is_Dim_Up: //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect <= 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}else
{
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down: //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] >= CtrlContect)
{
Rs485LEDInfo.DevSendBuf[i] -= CtrlContect;
}else{
Rs485LEDInfo.DevSendBuf[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Limit: //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(0x00 != Rs485LEDInfo.DevSendBuf[i])
{
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect <= 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}else{
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Down_Limit: //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if(0x00 != Rs485LEDInfo.DevSendBuf[i])
{
if(Rs485LEDInfo.DevSendBuf[i] > CtrlContect)
{
Rs485LEDInfo.DevSendBuf[i] -= CtrlContect;
}else{
Rs485LEDInfo.DevSendBuf[i] = 0x01; //2024-11-25
}
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Up_Step_Cycle: //<2F>㰴ѭ<E3B0B4><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
switch(Rs485LEDInfo.LedUpDown[i])
{
case 0x00: //<2F><><EFBFBD><EFBFBD>
if(Rs485LEDInfo.DevSendBuf[i] + CtrlContect < 100)
{
Rs485LEDInfo.DevSendBuf[i] += CtrlContect;
}else{
Rs485LEDInfo.LedUpDown[i] = 0x01;
Rs485LEDInfo.DevSendBuf[i] = 100; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
break;
case 0x01: //<2F><><EFBFBD><EFBFBD>
Rs485LEDInfo.LedUpDown[i] = 0x00;
Rs485LEDInfo.DevSendBuf[i] = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
break;
default:
Rs485LEDInfo.LedUpDown[i] = 0x00;
break;
}
break;
case CFG_Dev_CtrlWay_Is_PWM_Set_Time:
Rs485LEDInfo.PWM_Set_Time=CtrlContect;
break;
case CFG_Dev_CtrlWay_Is_A9LD_Set_Time:
Rs485LEDInfo.A9LD_Set_Time=CtrlContect;
break;
case CFG_Dev_CtrlWay_Is_A8PB_Set_Time:
Rs485LEDInfo.A8PB_Set_Time=CtrlContect;
break;
case CFG_Dev_CtrlWay_Is_C12_Set_Time:
Rs485LEDInfo.C12_Set_Time=CtrlContect;
break;
case CFG_Dev_CtrlWay_Is_RGB_Set_Time:
Rs485LEDInfo.RGB_Set_Time=CtrlContect;
break;
case Dim_Global_Value_Cmd:
DevActionGlobal.DimGlobalValue = CtrlContect; //2025-08-22
break;
case Dim_UpLimit_Value_Cmd:
DevActionGlobal.Dim_Upper_limit = CtrlContect; //2024-11-01 <20><><EFBFBD>ÿɵ<C3BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
break;
case Dim_DnLimit_Value_Cmd:
DevActionGlobal.Dim_Lower_limit = CtrlContect; //2024-11-01 <20><><EFBFBD>ÿɵ<C3BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
break;
}
}
}
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
/*******************************************************************************
* Function Name : BLW_C12Dimming_Group_Ctrl
* Description : BLW<4C>̵<EFBFBD><CCB5><EFBFBD>Ⱥ<EFBFBD><C8BA>
* Input :
devaddr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
CtrlFlag<61><67><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־ <20><><EFBFBD>ܳ<EFBFBD><DCB3><EFBFBD>32·
CtrlNum : <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ϊ׼
start <20><>״̬ 0x01<30><31> 0x02<30><32>
* Return : <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> <20><><EFBFBD>ؿ<EFBFBD> <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ع<EFBFBD>
* attention : temp1<70><31>0<EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint16_t BLW_LED_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start)
{
uint8_t i = 0;
uint8_t Ret = 0x00;
uint8_t CtrlMode = 0,CtrlContect = 0;
uint8_t tempflag =0x00;
if(devaddr == 0x00) return 0x00;
Device_Public_Information_G BUS_Public;
RS485_LED_INFO Rs485LEDInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),devaddr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
if(ReadNum >= Rs485LEDInfo.LEDLoopValidNum)
{
ReadNum = Rs485LEDInfo.LEDLoopValidNum;
}
switch(SceneType)
{
case 0x01:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ", i+1, start[i]);
switch(CtrlMode)
{
case 0x01: //״̬<D7B4><CCAC>
case 0x02: //״̬<D7B4><CCAC>
if(Rs485LEDInfo.DevSendBuf[i] != CtrlContect)
{
Ret = DEV_STATE_CLOSE;
}
break;
case CFG_Dev_CtrlWay_Is_Dim_Open: //<2F><><EFBFBD><20><>ǰ״̬<D7B4>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if((0x00 != Rs485LEDInfo.LEDLightRelease[i]) && (Rs485LEDInfo.LEDLightRelease[i] != Rs485LEDInfo.DevSendBuf[i]))
{
Ret = DEV_STATE_CLOSE;
}
else if((0x00 == Rs485LEDInfo.LEDLightRelease[i]) && (Rs485LEDInfo.DevSendBuf[i] != CtrlContect))
{
Ret = DEV_STATE_CLOSE;
}
break;
}
}
}
break;
case 0x02:
for(i = 0; i < ReadNum; i++)
{
if(ReadFlag&(0x0001<<i)) //<2F><><30><CEAA>ȡ<EFBFBD>ж<EFBFBD>
{
CtrlMode = start[i]&0x00ff; //<2F><><EFBFBD><EFBFBD>ģʽ
CtrlContect = start[i]>>8; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<22><><EFBFBD><EFBFBD>״̬Ⱥ<CCAC>ض<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7>%d<><64><EFBFBD><EFBFBD>:%04X ", i+1, start[i]);
if(0x01 == CtrlMode) //״̬<D7B4><CCAC>
{
if(Rs485LEDInfo.DevSendBuf[i] == CtrlContect)
{
Ret = DEV_STATE_OPEN;
break;
}
}
}
}
break;
}
if(0x00 == Ret) //
{
switch(SceneType)
{
case 0x01:
Ret = DEV_STATE_OPEN;
break;
case 0x02:
Ret = DEV_STATE_CLOSE;
break;
}
}
for(i = 0; i < ReadNum; i++)
{
if(Rs485LEDInfo.DevSaveBuf[i]!=Rs485LEDInfo.DevSendBuf[i])
{
Rs485LEDInfo.DevSaveBuf[i] = Rs485LEDInfo.DevSendBuf[i];
if(Rs485LEDInfo.DevSendBuf[i]==0)
{
Udp_Addtion_Roomstate(DEV_RS485_PWM,BUS_Public.addr,i+1,((Rs485LEDInfo.DevSendBuf[i]<<8)|0x0002));
}else{
Udp_Addtion_Roomstate(DEV_RS485_PWM,BUS_Public.addr,i+1,((Rs485LEDInfo.DevSendBuf[i]<<8)|0x0001));
}
tempflag++;
}
}
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485LEDInfo,sizeof(RS485_LED_INFO),devaddr+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,295 @@
/*
* blv_rs485_dev_switchctrl.c
*
* Created on: Nov 13, 2025
* Author: cc
*/
#include "blv_rs485_dev_switchctrl.h"
#include "blv_rs485_dev_touchswitch.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "ch564.h"
#include <string.h>
typedef void (*DevFunP)(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo); //<2F><><EFBFBD>ݹ<EFBFBD><DDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8> ˽<><CBBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
#define RS485_DEV_PRO_FUN_01 DevExistJudgge(RS485_Switch_Touch_Flag, BLV_485_Dev_Touch_Switch_Init) //((DevFunP)NULL) //T1<54><31><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_02 ((DevFunP)NULL)
#define RS485_DEV_PRO_FUN_03 ((DevFunP)NULL) //DevExistJudgge(RS485_Switch_A9IO_Flag, BLV_485_Dev_A9IO_Switch_Init) //((DevFunP)NULL) //A9IO<49><4F><EFBFBD><EFBFBD>
#define RS485_DEV_PRO_FUN_04 ((DevFunP)NULL)
/*******************************************************************************
* Function Name : BLW_RS485_Switch_For_Logic_Init
* Description : <20><><EFBFBD>س<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_RS485_Switch_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
memset(&BUS_Public,0,sizeof(Device_Public_Information_G));
memset(&Rs485SwiInfo,0,sizeof(RS485_SWI_INFO));
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"%s -%d",__func__,dev_info->addr);
BUS_Public.addr = dev_info->addr; //<2F><EFBFBD><E8B1B8>ַ
BUS_Public.type = dev_info->type; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BUS_Public.baud = dev_info->baud; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.retry_num = 0x00; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
BUS_Public.wait_time = 100; //<2F><EFBFBD><E8B1B8><EFBFBD>ݷ<EFBFBD><DDB7>͵ȴ<CDB5><C8B4>ظ<EFBFBD>ʱ<EFBFBD><CAB1>
// BUS_Public.polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis;
// BUS_Public.processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check;
BUS_Public.Protocol = dev_info->version;
BUS_Public.DevFunInfo.Dev_Input_Type_Get = Dev_Swi_InType_Get;
BUS_Public.DevFunInfo.Dev_Output_Ctrl = Dev_Swi_Output_Ctrl;
BUS_Public.DevFunInfo.Dev_Output_Loop_State_Get = Dev_Swi_Loop_State;
if(dev_info->input_num >= Key_BUFF_Size) Rs485SwiInfo.SwtInputValidNum = Key_BUFF_Size;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else Rs485SwiInfo.SwtInputValidNum = dev_info->input_num;
if(dev_info->output_num >= Key_BUFF_Size) Rs485SwiInfo.SwtOutputValidNum = Key_BUFF_Size;//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else Rs485SwiInfo.SwtOutputValidNum = dev_info->output_num;
Rs485SwiInfo.DevOffline = Rs485SwiInfo.DevOfflineLast = DEV_IS_LINEUNINIT; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ʼ<EFBFBD><CABC>
switch(Rs485SwiInfo.SwtInputValidNum)
{
case 0x06: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ6
Rs485SwiInfo.DevSendBuf[6] = 0x01; //<2F>򿪱<EFBFBD><F2BFAAB1><EFBFBD>
break;
case 0x05:
Rs485SwiInfo.DevSendBuf[5] = 0x01; //<2F>򿪱<EFBFBD><F2BFAAB1><EFBFBD> /*5<><35><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>6<EFBFBD><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>*/
break;
case 0x08: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ8
Rs485SwiInfo.DevSendBuf[8] = 0x01; //<2F>򿪱<EFBFBD><F2BFAAB1><EFBFBD> /*8<><38><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>9<EFBFBD><39><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>*/
break;
case 25: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ25
Rs485SwiInfo.DevSendBuf[25] = 0x01; //<2F>򿪱<EFBFBD><F2BFAAB1><EFBFBD>
break;
}
switch(BUS_Public.Protocol)
{
case ENUM_RS485_DEV_PRO_01: if(NULL!=RS485_DEV_PRO_FUN_01) RS485_DEV_PRO_FUN_01(&BUS_Public, &Rs485SwiInfo);break; //
case ENUM_RS485_DEV_PRO_02: if(NULL!=RS485_DEV_PRO_FUN_02) RS485_DEV_PRO_FUN_02(&BUS_Public, &Rs485SwiInfo);break; //
case ENUM_RS485_DEV_PRO_03: if(NULL!=RS485_DEV_PRO_FUN_03) RS485_DEV_PRO_FUN_03(&BUS_Public, &Rs485SwiInfo);break; //3
case ENUM_RS485_DEV_PRO_04: if(NULL!=RS485_DEV_PRO_FUN_04) RS485_DEV_PRO_FUN_04(&BUS_Public, &Rs485SwiInfo);break;
}
switch(dev_info->port)
{
case Active_Port: //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
BUS_Public.port = Active_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_ACT_Device_To_List(&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO));
Act485_Info.device_num += 1;
break;
case Polling_Port: //<2F><>ѯ<EFBFBD>˿<EFBFBD>
BUS_Public.port = Polling_Port; //<2F><EFBFBD><E8B1B8><EFBFBD>Ͷ˿<CDB6>
Add_POLL_Device_To_List(&BUS_Public,(uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO)); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>
Poll485_Info.device_num += 1;
break;
case Bus_port: //<2F><><EFBFBD>߶˿<DFB6>
break;
}
}
/*******************************************************************************
* Function Name : Get_Switch_Online_Status
* Description : <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Get_Switch_Online_Status(uint32_t devaddr)
{
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),devaddr+Dev_Privately);
if(Rs485SwiInfo.DevOffline == DEV_IS_ONLINE)
{
return 0x01;
}
return 0x02;
}
/*******************************************************************************
* Function Name : Dev_Swi_InType_Get
* Description : <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
* Input :
* DevAddr - <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
* DevInputLoop - <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ <20><>Χ1~RS_SWITCH_CH_MAX
* DevInputType - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t Dev_Swi_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType)
{
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t Ret = CtrlInvalid; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevInputLoop >= RS_SWITCH_CH_MAX)
{
return Ret;
}
if((Rs485SwiInfo.MultiValidNo[DevInputLoop] > 0) && (Rs485SwiInfo.MultiValidNo[DevInputLoop] < 127)) //<2F><>ǰ<EFBFBD><C7B0>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч 2024-05-23
{
Rs485SwiInfo.MultiNumber[DevInputLoop]++;
if(Rs485SwiInfo.MultiNumber[DevInputLoop] > Rs485SwiInfo.MultiValidNo[DevInputLoop]) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
Rs485SwiInfo.MultiNumber[DevInputLoop] = 0x01;
}
}
if(DevInputType == Rs485SwiInfo.DevReadBuf[DevInputLoop])
{
Rs485SwiInfo.DevReadBuf[DevInputLoop] = KeyNoAction;
Ret = CtrlValid|(Rs485SwiInfo.MultiNumber[DevInputLoop]<<1);
if(Ret > 1)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%d<><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>·:%d <20><><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>:%d",BUS_Public.addr,DevInputLoop,Rs485SwiInfo.MultiNumber[DevInputLoop]);
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD>%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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);
}
return Ret;
}
/*******************************************************************************
* Function Name : Dev_Swi_Output_Ctrl
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* Input :
* CfgDevAddIn -
* DevInputAddr -
* DevAddr -
* DevOutputLoop
* DevOutputType -
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void Dev_Swi_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType)
{
uint8_t start = 0x00;
uint8_t CtrlWay;
// uint8_t val_check = 0;
// uint16_t dev_datalen = 0x00;
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t KeepFlag = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
if( (0x00000000 == DevAddr) || (0xFFFFFFFF == DevAddr) )
{
return ;
}
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAddr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevOutputLoop >= Rs485SwiInfo.SwtOutputValidNum)
{
return ;
}
CtrlWay = DevOutputType&0x00ff; //ȡ<><C8A1><EFBFBD>ֽ<EFBFBD>
switch(CtrlWay) //<2F><>Ϊ0
{
case 0x01:
start = 0x01;
if(DevOutputLoop == (Rs485SwiInfo.SwtOutputValidNum - 1))
{
DevActionGlobal.SleepMode_State = 0x00; //<2F>˳<EFBFBD>˯<EFBFBD><CBAF>ģʽ 2025-09-05
DevActionGlobal.SleepLight_State = 0x01;
}
break;
case 0x02:
start = 0x00;
if(DevOutputLoop == (Rs485SwiInfo.SwtOutputValidNum - 1))
{
DevActionGlobal.SleepMode_State = 0x01; //<2F><><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>ģʽ 2025-09-05
DevActionGlobal.SleepLight_State = 0x00;
}
break;
case 0x04: //<2F><>˸
start = Rs485SwiInfo.DevSendBuf[DevOutputLoop];
if(0x01 == start)
{
start = 0x00;
}
else
{
start = 0x01;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"485<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD><EFBFBD>ֵ,start:%d\r\n",start);
break;
default: return; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
if(Rs485SwiInfo.DevSendBuf[DevOutputLoop] != start)//
{
Rs485SwiInfo.DevSendBuf[DevOutputLoop] = start;
KeepFlag = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"DevSendBuf loop:%d,start:%d\r\n",DevOutputLoop,start);
}
if(0x01 == KeepFlag)
{
if(Active_Port == BUS_Public.port)
{
BLV_Active_Set_List_Addr(DevAddr); //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
}
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAddr+Dev_Privately);
}
// BLW_Touch_Switch_Feedback(DevAddr, DevOutputLoop, State);
}
/*******************************************************************************
* Function Name : Dev_Swi_Loop_State
* Description : ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·״̬<D7B4>õ<EFBFBD>
* Input :
* devaddr - <20><>ǰ<EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
* DevOutputLoop - <20><>Ҫ<EFBFBD><D2AA><EFBFBD>ҵķ<D2B5><C4B7><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>·
* Return : <20><>·״̬<D7B4><CCAC><EFBFBD><EFBFBD> 1 <20><> 2<><32><30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint16_t Dev_Swi_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop)
{
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(devaddr == 0x00) return 0x00;
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),devaddr+Dev_Privately);
if(DevOutputLoop >= Rs485SwiInfo.SwtOutputValidNum)
{
return 0x00;
}
if(Rs485SwiInfo.DevSendBuf[DevOutputLoop])
{
return 0x01;
}else{
return 0x02;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,401 @@
/*
* blv_rs485_dev_touchswitch.c
*
* Created on: Nov 13, 2025
* Author: cc
*/
#include "blv_rs485_dev_switchctrl.h" //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "blv_rs485_dev_touchswitch.h"
#include "blv_nor_dev_hvoutfun.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include <string.h>
#include "blv_netcomm_function.h"
#define RS485_TOUCH_INPUT_QUERY(data,x) (((data&(0x03<<((x%4)*2)))>>(x%4)*2)) //ÿ<><C3BF><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>λ
#define REPEATSENDTIMEMAX 0x03 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLWTOUCHCTRLTIMEOUT 100 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>Ƴ<EFBFBD>ʱʱ<CAB1><CAB1>
#define BLWTOUCHASKTIMEOUT 10 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD>ƻظ<C6BB><D8B8><EFBFBD>ʱʱ<CAB1><CAB1>
#define BLW_TOUCH_LOOPIN_NUM 26 //<2F><><EFBFBD>豸RS485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> 6
#define BLW_TOUCH_LOOPOUT_NUM 26 //<2F><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7> 7
#define BLW_SWT_ASK_LEN_M 12 //(((BLW_TOUCH_LOOPOUT_NUM+7)/4)+3)
#define BLW_SWT_BUF_LEN 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9B3A4>Ϊ5 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16<31><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLW_SWT_BUF_LEN_M 8 //(((BLW_TOUCH_LOOPOUT_NUM+7)/8)+3)
#define Dev_TouchSwitch_RecvData_Len_Max 0x18
/*******************************************************************************
* Function Name : BlwTouchSwtRecAsk
* Description : 485<38>豸 - T1<54><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_485_Dev_Touch_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
BUS_Public->polling_cf = (uint32_t)&BLW_Touch_SwitchCycleDis;
BUS_Public->processing_cf = (uint32_t)&BLW_Rs485_Touch_Swi_Check;
Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<EFBFBD><EFBFBD><EFBFBD><EFBFBD>T1<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ַ: %d",BUS_Public->addr);
}
/*******************************************************************************
* Function Name : BlwTouchSwtRecAsk
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
* Input :
DevAdd : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
DataLen <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BlwRelaySwtRecAsk(uint8_t *data)
{
uint8_t SendBuf[5];
uint32_t device_addr = 0x00;
device_addr = Find_AllDevice_List_Information2(Active_Port, 0x01, data[0]);
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
NOR_HVOUT_INFO DevHVoutInfo; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),device_addr); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&DevHVoutInfo,sizeof(NOR_HVOUT_INFO),device_addr+Dev_Privately);
if(DevHVoutInfo.HVSwitchFlag==0x01)
{
SendBuf[0] = data[0];
SendBuf[1] = 0x04;
SendBuf[2] = data[2];
SendBuf[3] = data[3];
SendBuf[4] = SOR_CRC(SendBuf,4);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
MCU485_SendString(0x02,SendBuf,5);
// Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"ǿ<><EFBFBD>ػظ<D8BB><D8B8><EFBFBD><EFBFBD><EFBFBD>\r\n");
}
}
/*******************************************************************************
* Function Name : BlwTouchSwtRecAsk
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
* Input :
DevAdd : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
data : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
DataLen <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BlwTouchSwtRecAsk(uint32_t DevAdd, uint8_t *data, uint16_t DataLen)
{
uint8_t SendBuf[BLW_SWT_ASK_LEN_M];
uint8_t port_id = SRAM_Read_Byte(DevAdd+Dev_port);
if(DataLen > BLW_SWT_ASK_LEN_M)
{
return ;
}
memcpy(SendBuf, data, DataLen);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
MCU485_SendString(port_id,SendBuf,DataLen);
}
/*******************************************************************************
* Function Name : BLW_Touch_Rs485_Swi_Pro
* Description : BLW_Touch<63><68><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
* Input :
data_addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
Switch_Info : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLW_Touch_Rs485_Swi_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Switch_Info, uint8_t lens)
{
uint8_t KeyValue = 0x00;
uint8_t i;
uint8_t temp = 0,temp2 = 0;
uint8_t loopnum = 0x00;
if(Switch_Info->DevOffline == DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_TouchSwitch LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_SWT,BUS_Public->addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
DevActionGlobal.OffLineDevType = 0xff;
}
BLV_Communication_Record(&Switch_Info->comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Switch_Info->DevSendCnt = 0x00; //<2F>յ<EFBFBD><D5B5>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Switch_Info->DevOffline = DEV_IS_ONLINE; //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Switch_Info->DevOffline != Switch_Info->DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Switch_Info->DevOfflineLast = Switch_Info->DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public->type,BUS_Public->addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
loopnum = (lens - 3) * 4; //<2F><>ȥ<EFBFBD><C8A5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD> һ<><D2BB><EFBFBD>ֽڱ<D6BD>ʾ4<CABE><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"T1 switch Input Num:%d",loopnum);
switch(data[1]) //<2F><>
{
case 0x03:
for(i = 0; i < loopnum; i++) //6·<36><C2B7><EFBFBD><EFBFBD>״̬<D7B4><CCAC>ֵ
{
temp = data[i/4+2]; //SRAM_Read_Byte(data_addr + (i/4+2));
KeyValue = RS485_TOUCH_INPUT_QUERY(temp, i); //<2F>±<EFBFBD><C2B1><EFBFBD>2<EFBFBD><32>ʼ
switch(KeyValue&0x03)
{
case 1:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyPress Coord:%d",BUS_Public->addr, (i + 1), BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = KeyPress; //<2F><>ַ<EFBFBD><D6B7>1<EFBFBD><31>ʼ
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
temp2++;
Udp_Addtion_Roomstate(DEV_RS485_SWT,BUS_Public->addr,i,KeyPress);
break;
case 2:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyRelease Coord:%d",BUS_Public->addr, (i + 1), BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = KeyRelease;
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
temp2++;
Udp_Addtion_Roomstate(DEV_RS485_SWT,BUS_Public->addr,i,KeyRelease);
break;
case 3:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch%d Dev%02X KeyHold Coord:%d",BUS_Public->addr, (i + 1), BUS_Public->DevCoord);
Switch_Info->DevReadBuf[i] = KeyHold;
DevActionGlobal.Devi = BUS_Public->DevCoord; //ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>
temp2++;
Udp_Addtion_Roomstate(DEV_RS485_SWT,BUS_Public->addr,i,KeyHold);
break;
default:
break;
}
KeyValue = 0;
}
DevActionGlobal.People_Flag = 0x01;
break;
case 0x06:
Switch_Info->SwtRelayLedCtrlFlag = 0x00;
Switch_Info->SwtRelayLedCtrlCnt = REPEATSENDTIMEMAX;
break;
default:
break;
}
}
#define RECDATALENMAX 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
/*******************************************************************************
* Function Name : BLW_Rs485_Touch_Swi_Check
* Description : BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD>ʧ<EFBFBD><CAA7>
0x00<30><30><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ɹ<EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLW_Rs485_Touch_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen)
{
uint8_t ret = 0x01;
uint8_t data[RECDATALENMAX];
Device_Public_Information_G BUS_Public; //<2F><><EFBFBD><EFBFBD>
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
if(DataLen > RECDATALENMAX)
{
//Dbg_Print(DBG_BIT_DEVICE_STATUS_bit,"Rs485_Touch<63><68><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return ret; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,DataLen,Data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
if((DataLen < 0x05)||((data[1] != 0x03)&&(data[1] != 0x06))||(data[DataLen - 1] != SOR_CRC(data, DataLen-1))) //ƥ<><EFBFBD>ص<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>DevAdd:%d,len:%d",BUS_Public.addr,DataLen);
return ret; //<2F><><EFBFBD>Ǿ<EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
}
if(data[0] == SRAM_Read_Byte(DevAdd+Dev_Addr)) //<2F><>ַ<EFBFBD>պ<EFBFBD>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>BUS_Public.addr
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ַƥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> DevAdd:%d,len:%d",data[0],DataLen);
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
}
else //<2F><>ַû<D6B7><C3BB>ƥ<EFBFBD><C6A5><EFBFBD><EFBFBD>
{
DevAdd = Find_AllDevice_List_Information2(Active_Port, 0x06, data[0]); //<2F><>ַ<EFBFBD><D6B7><EFBFBD>¸<EFBFBD>ֵ
if( (0x00000000 != DevAdd) || (0xFFFFFFFF != DevAdd) )
{
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
}else{
return ret;
}
}
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
if(data[1] == 0x03)
{
BlwRelaySwtRecAsk(data);
}
if( (data[1] == 0x03) || (data[1] == 0x06) )
{
ret = 0x00;
BLW_Touch_Rs485_Swi_Pro(&BUS_Public, data, &Rs485SwiInfo,DataLen);
}
/*<2A><>־<EFBFBD><D6BE>¼*/
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
return ret;
}
__attribute__((section(".non_0_wait"))) void BLW_Touch_Switch_ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo)
{
uint8_t i;
uint8_t SendLen;
//<2F><>ַ <20><><EFBFBD><EFBFBD> <20>Ĵ<EFBFBD><C4B4><EFBFBD>
uint8_t BLW_swt_buf[BLW_SWT_BUF_LEN_M]; // = {0x01, 0x06, 0x00, 0x00, 0x00}; //<2F><><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
BLW_swt_buf[0] = BUS_Public->addr;//SRAM_Read_Byte(DevAdd + Dev_Addr); //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ص<EFBFBD>ת<EFBFBD><D7AA>
BLW_swt_buf[1] = 0x06; //д
BLW_swt_buf[2] = 0x00; //ָʾ<D6B8><CABE>
BLW_swt_buf[3] = 0x00; //ָʾ<D6B8><CABE>
for(i = 0; i < Rs485SwiInfo->SwtOutputValidNum; i++)
{
if(0x00 != Rs485SwiInfo->DevSendBuf[i]) //<2F><>Ϊ0
{
BLW_swt_buf[2+i/8] |= 0x01<<(i%8);
}else{
BLW_swt_buf[2+i/8] &= ~(0x01<<(i%8));
}
}
if(Rs485SwiInfo->SwtOutputValidNum <= 16)
{
SendLen = BLW_SWT_BUF_LEN;
}else{
SendLen = ((Rs485SwiInfo->SwtOutputValidNum+7)/8)+3; //<2F><><EFBFBD><EFBFBD>16·<36><C2B7><EFBFBD><EFBFBD>ʵ<EFBFBD>ʻ<EFBFBD>·<EFBFBD><C2B7>Ϊ׼
}
BLW_swt_buf[SendLen-1] = SOR_CRC(BLW_swt_buf,SendLen-1);
/*<2A><><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>*/
//Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"switch send data---\r\n");
MCU485_SendString(BUS_Public->port,BLW_swt_buf,SendLen);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,BLW_swt_buf,SendLen);
if(Rs485SwiInfo->DevSendCnt > REPEATSENDTIMEMAX)
{
if(Rs485SwiInfo->DevOffline != DEV_IS_OFFLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Dev_TouchSwitch LogInfo_Device_Offline.....");
LOG_Device_Online_Record(DEV_RS485_SWT, BUS_Public->addr,LogInfo_Device_Offline); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
Rs485SwiInfo->DevOffline = DEV_IS_OFFLINE; //<2F><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
DevActionGlobal.OffLineDevType = BUS_Public->type; //2023-10-08
DevActionGlobal.OffLineDevAddr = BUS_Public->addr; //2023-10-08
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"TouchSwitch Offline,type:%d addr:%d",BUS_Public->type,BUS_Public->addr);
if(Rs485SwiInfo->DevOffline != Rs485SwiInfo->DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485SwiInfo->DevOfflineLast = Rs485SwiInfo->DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public->type,BUS_Public->addr,In_ErrFun_LineState,DEV_IS_OFFLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
}else{
Rs485SwiInfo->DevSendCnt++; //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD>ۼ<EFBFBD>
}
}
/*******************************************************************************
* Function Name : BLW_Touch_SwitchCycleDis
* Description : BLW<4C><57><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>485<38><35><EFBFBD>ݷ<EFBFBD><DDB7>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD>
* Return :
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
0x00<30><30>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLW_Touch_SwitchCycleDis(uint32_t DevAdd)
{
Device_Public_Information_G BUS_Public;
RS485_SWI_INFO Rs485SwiInfo; //<2F><><EFBFBD>ؾֲ<D8BE><D6B2><EFBFBD><EFBFBD><EFBFBD>
uint8_t i;
uint8_t Ret = RS485OCCUPYNOTIME;
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),DevAdd);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);/*<2A><><EFBFBD><EFBFBD><EFBFBD>豸˽<E8B1B8><CBBD><EFBFBD><EFBFBD>Ϣ*/
if(DevActionGlobal.DevActionU64Cond.EleState==0x01)
{
if( DevActionGlobal.SleepMode_State == 0x01 )
{
Rs485SwiInfo.DevSendBuf[Rs485SwiInfo.SwtOutputValidNum-1] = 0x00; //˯<><CBAF>ģʽ<C4A3>ر<EFBFBD><D8B1><EFBFBD>
}else{
Rs485SwiInfo.DevSendBuf[Rs485SwiInfo.SwtOutputValidNum-1] = 0x01; //<2F><EFBFBD><E5BFA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
else if(DevActionGlobal.DevActionU64Cond.EleState==0x02)
{
Rs485SwiInfo.DevSendBuf[Rs485SwiInfo.SwtOutputValidNum-1] = 0x00; //<2F>ο<EFBFBD><CEBF>ر<EFBFBD><D8B1><EFBFBD>
}
else
{
if( DevActionGlobal.SleepMode_State == 0x01 )
{
Rs485SwiInfo.DevSendBuf[Rs485SwiInfo.SwtOutputValidNum-1] = 0x00; //˯<><CBAF>ģʽ<C4A3>ر<EFBFBD><D8B1><EFBFBD>
}else{
Rs485SwiInfo.DevSendBuf[Rs485SwiInfo.SwtOutputValidNum-1] = 0x01;
}
}
/*<2A>ж<EFBFBD><D0B6><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>*/
for(i = 0; i < Rs485SwiInfo.SwtOutputValidNum; i++)
{
if(Rs485SwiInfo.DevSendBuf_last[i] != Rs485SwiInfo.DevSendBuf[i])
{
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x01;
memcpy(Rs485SwiInfo.DevSendBuf_last, Rs485SwiInfo.DevSendBuf, Rs485SwiInfo.SwtOutputValidNum);
break;
}
}
if(0x01 == Rs485SwiInfo.SwtRelayLedCtrlFlag)
{
if(0x00 != Rs485SwiInfo.SwtRelayLedCtrlCnt)
{
Rs485SwiInfo.SwtRelayLedCtrlCnt--;
}else{
Rs485SwiInfo.SwtRelayLedCtrlCnt = REPEATSENDTIMEMAX;
Rs485SwiInfo.SwtRelayLedCtrlFlag = 0x00;
}
BLW_Touch_Switch_ctrl(&BUS_Public, &Rs485SwiInfo);
Ret = RS485OCCUPYTIME;
/*ͨѶͳ<D1B6>Ƽ<EFBFBD>¼*/
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485SwiInfo,sizeof(RS485_SWI_INFO),DevAdd+Dev_Privately);
}
return Ret;
}

View File

@@ -0,0 +1,514 @@
/*
* blv_rs485_dev_touchtempt1.c
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> T1 <20><><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Created on: Nov 14, 2025
* Author: cc
*/
#include "blv_rs485_dev_touchtempt1.h"
#include "blv_dev_action.h"
#include "blv_device_type.h"
#include "blv_device_option.h"
#include "debug.h"
#include "uart.h"
#include "spi_sram.h"
#include "check_fun.h"
#include "log_api.h"
#include "sram_mem_addr.h"
#include "rtc.h"
#include "ch564.h"
#include "blv_netcomm_function.h"
#include <string.h>
uint8_t BLWOut_TempT1CycleCtrl(uint32_t dev_addr);
uint8_t BLWOut_Rs485_TempT1_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
/*******************************************************************************
* Function Name : BLWOut_RS485_TempT1_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_RS485_TempT1_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1)
{
BUS_Public->polling_cf = (uint32_t)&BLWOut_TempT1CycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLWOut_Rs485_TempT1_Check;
Rs485TempT1->ValveSameFlag = 0x01; //<2F><><EFBFBD>ȷ<EFBFBD>һ<EFBFBD><D2BB> 2023-04-17
Rs485TempT1->DevPort = Polling_Port; //2024-11-05 <20><>ѵ<EFBFBD>˿<EFBFBD><CBBF>
}
/*******************************************************************************
* Function Name : BLWOut_RS485_TempT1D_Data_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѯ<EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_RS485_TempT1D_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1)
{
BUS_Public->polling_cf = (uint32_t)&BLWOut_TempT1CycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLWOut_Rs485_TempT1_Check;
Rs485TempT1->ValveSameFlag = 0x02; //<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>һ<EFBFBD><D2BB> 2023-04-17
Rs485TempT1->DevPort = Polling_Port; //2024-11-05 <20><>ѵ<EFBFBD>˿<EFBFBD><CBBF>
}
/*******************************************************************************
* Function Name : BLWOut_RS485_TempT1_Activ_Init
* Description : <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD>
* Input :
type : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
addr : <20><><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><E8B1B8>ַ
polling_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ݷ<EFBFBD><DDB7>ͻص<CDBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
processing_cf <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
* Return : None
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_RS485_TempT1_Activ_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1)
{
BUS_Public->polling_cf = (uint32_t)&BLWOut_TempT1CycleCtrl;
BUS_Public->processing_cf = (uint32_t)&BLWOut_Rs485_TempT1_Check;
Rs485TempT1->ValveSameFlag = 0x02; //<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>һ<EFBFBD><D2BB> 2023-04-17
Rs485TempT1->DevPort = Active_Port; //2024-11-05 <20><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF>
}
/*******************************************************************************
* Function Name : BLWOut_TempT1CycleCtrl
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_TempT1Ctrl(Device_Public_Information_G *BUS_Public,RS485_TEMP_INFO *Rs485Tem,uint8_t CtrlWay)
{
// ͷ LEN Type Addr <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
uint8_t CtrlSend[10] = {0x55, 0x55, 0xee, 0x07, 0x03, 0x01, 0x00, 0x00};
CtrlSend[5] = BUS_Public->addr;
switch(CtrlWay)
{
case 0: //<2F><><EFBFBD>ػ<EFBFBD>
CtrlSend[6] = 0x01;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s:<3A><><EFBFBD>ػ<EFBFBD>״̬:%d", __func__,Rs485Tem->TemStateCtrl.on_off);
switch(Rs485Tem->TemStateCtrl.on_off) //<2F><><EFBFBD>ػ<EFBFBD>
{
case TEMP_STATE_ON: //<2F><><EFBFBD><EFBFBD>
CtrlSend[7] = 0x01;
break;
case TEMP_STATE_OFF: //<2F>ػ<EFBFBD>
CtrlSend[7] = 0x00;
break;
}
break;
case 1: //ģʽ
CtrlSend[6] = 0x02;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s:ģʽ״̬:%d",__func__, Rs485Tem->TemStateCtrl.mode);
switch(Rs485Tem->TemStateCtrl.mode)
{
case TEMP_COLD: CtrlSend[7] = 0x01; break; //<2F><>
case TEMP_HOT: CtrlSend[7] = 0x02; break; //<2F><>
case TEMP_WIND: CtrlSend[7] = 0x03; break; //ͨ<><CDA8>
}
break;
case 3: //<2F><><EFBFBD><EFBFBD>
CtrlSend[6] = 0x04;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s:<3A><><EFBFBD><EFBFBD>״̬:%d", __func__,Rs485Tem->TemStateCtrl.fan);
switch(Rs485Tem->TemStateCtrl.fan)
{
// case 0: CtrlSend[5] = 0x03; break; //ֹͣ
case TEMP_LOW: CtrlSend[7] = 0x03; break; //<2F><><EFBFBD><EFBFBD>
case TEMP_MID: CtrlSend[7] = 0x02; break; //<2F><><EFBFBD><EFBFBD>
case TEMP_HIGH: CtrlSend[7] = 0x01; break; //<2F><><EFBFBD><EFBFBD>
case TEMP_FANAUTO: CtrlSend[7] = 0x00; break; //<2F>Զ<EFBFBD>
}
break;
case 2: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CtrlSend[6] = 0x03;
CtrlSend[7] = TEMTEMPCONVER(Rs485Tem->TemStateCtrl.set_t); //
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s:<3A><EFBFBD>:%d", __func__,CtrlSend[7]);
break;
}
NetCRC16(&CtrlSend[3],7);
Rs485Tem->DevOffline = DEV_IS_LINEUNINIT; //<2F>豸״̬δȷ<CEB4><C8B7>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(BUS_Public->port,CtrlSend,10);
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Send_Control_Record(BUS_Public->port,BUS_Public->baud,CtrlSend,10);
}
/*******************************************************************************
* Function Name : BLWOut_tempCycle
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_tempT1Cycle(Device_Public_Information_G *BUS_Public)
{
// ͷ LEN Type Addr CMD
uint8_t t_send[9] = {0x55, 0x55, 0xEE, 0x06, 0x03, 0x01, 0x0A}; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
t_send[5] = BUS_Public->addr; // SRAM_Read_Byte(dev_addr+Dev_Addr);
NetCRC16(&t_send[3],6);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(BUS_Public->port,t_send,9);
}
/*******************************************************************************
* Function Name : BLWOut_tempT1CardCtrl
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD>忨״̬ͬ<CCAC><CDAC><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLWOut_tempT1CardCtrl(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485Tem)
{
// ͷ LEN Type Addr CMD
uint8_t t_send[10] = {0x55, 0x55, 0xEE, 0x07, 0x03, 0x01, 0x11 , 0x00 ,0x00, 0x00}; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
t_send[5] = BUS_Public->addr;
t_send[7] = Rs485Tem->CardEn;
NetCRC16(&t_send[3],7);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLWOut_tempT1CardCtrl",t_send,10);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(BUS_Public->port,t_send,10);
}
/*******************************************************************************
* Function Name : BLV_T1Temp_PortSet_Send
* Description : BLV T1<54>¿ض˿<D8B6><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) void BLV_T1Temp_PortSet_Send(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485Tem)
{
// ͷ LEN Type Addr CMD
uint8_t t_send[10] = {0x55, 0x55, 0xEE, 0x07, 0x03, 0x01, 0x12 , 0x00 ,0x00, 0x00}; //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
t_send[5] = BUS_Public->addr;
t_send[7] = Rs485Tem->DevPort;
NetCRC16(&t_send[3],7);
Dbg_Print_Buff(DBG_BIT_DEVICE_STATUS_bit,"BLV_T1Temp_PortSet_Send",t_send,10);
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
MCU485_SendString(BUS_Public->port,t_send,10);
}
/*******************************************************************************
* Function Name : BLWOut_TempT1CycleCtrl
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7>ͺ<EFBFBD><CDBA><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLWOut_TempT1CycleCtrl(uint32_t dev_addr)
{
return TemSingleJudge(dev_addr, BLWOut_TempT1Ctrl, BLWOut_tempT1Cycle);
}
/*******************************************************************************
* Function Name : BLWOut_TempT1CtrDataProc
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLWOut_TempT1CtrDataProc(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_TEMP_INFO *Rs485Tem)
{
RS485_TEMP_BASIC Rs485TemRecBuf; //<2F><><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD>ֲ<EFBFBD><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t temp = 0;
switch(data[4])
{
case 0x01: //<2F><><EFBFBD><EFBFBD>
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_ON;
break;
case 0x00: //<2F>ػ<EFBFBD>
Rs485TemRecBuf.TemState.on_off = TEMP_STATE_OFF;
break;
}
switch(data[6])
{
case 1: //<2F><><EFBFBD><EFBFBD>
Rs485TemRecBuf.TemState.mode = TEMP_COLD;
break;
case 2: //<2F><><EFBFBD><EFBFBD>
Rs485TemRecBuf.TemState.mode = TEMP_HOT;
break;
case 3: //<2F>ͷ<EFBFBD>
Rs485TemRecBuf.TemState.mode = TEMP_WIND;
break;
}
Rs485TemRecBuf.TemState.set_t = data[7];
switch(data[10])
{
case 1:
Rs485TemRecBuf.TemState.fan = TEMP_HIGH;
break; //<2F><><EFBFBD><EFBFBD>
case 2:
Rs485TemRecBuf.TemState.fan = TEMP_MID;
break; //<2F><><EFBFBD><EFBFBD>
case 3:
Rs485TemRecBuf.TemState.fan = TEMP_LOW;
break; //<2F><><EFBFBD><EFBFBD>
case 0:
Rs485TemRecBuf.TemState.fan = TEMP_FANAUTO;
break; //<2F>Զ<EFBFBD>
}
if((data[13] & 0x08)) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>||(temp & 0x10)
{
Rs485TemRecBuf.TemState.valve = TEMP_VALVE_OPEN;
}else{
Rs485TemRecBuf.TemState.valve = TEMP_VALVE_CLOSE; //<2F><><EFBFBD><EFBFBD>
}
if(0x00 != (data[13]&0x07)) //<2F><>0 <20>Ͱ<EFBFBD><CDB0>ն<EFBFBD><D5B6><EFBFBD>ȥ<EFBFBD><C8A5>
{
Rs485TemRecBuf.FanAutoRelay = (data[13]&0x07); //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB>õ<EFBFBD> ֻ<><D6BB>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}else{
Rs485TemRecBuf.FanAutoRelay = 0x00; //<2F><>֧<EFBFBD><D6A7><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
}
Rs485TemRecBuf.TemState.indoor_t = data[17];//SRAM_Read_Byte(data_addr + 17); //
if((Rs485TemRecBuf.TemState.on_off != Rs485Tem->TemState.on_off) || (Rs485TemRecBuf.TemState.mode != Rs485Tem->TemState.mode) ||
(Rs485TemRecBuf.TemState.fan != Rs485Tem->TemState.fan) || (Rs485TemRecBuf.TemState.valve != Rs485Tem->TemState.valve)||
(Rs485TemRecBuf.FanAutoRelay != Rs485Tem->FanAutoRelay) ||
(Rs485TemRecBuf.TemState.set_t != Rs485Tem->TemState.set_t)||(Rs485TemRecBuf.TemState.indoor_t != Rs485Tem->TemState.indoor_t))//<2F><><EFBFBD>ػ<EFBFBD> ģʽ <20><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EBB4A2><EFBFBD>IJ<EFBFBD>һ<EFBFBD><D2BB>
{
Temp_Action_Set(&Rs485TemRecBuf, Rs485Tem); //ͬ<><CDAC>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ:%d ״̬<D7B4><CCAC>", BUS_Public->addr); //
switch(Rs485Tem->TemState.on_off)
{
case TEMP_STATE_OFF:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ػ<EFBFBD>");
break;
case TEMP_STATE_ON:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
switch(Rs485Tem->TemState.mode)
{
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x02:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x03:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>ͷ<EFBFBD>");
break;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d", Rs485Tem->FanAutoRelay);
switch(Rs485Tem->TemState.fan)
{
case 0x00:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>Զ<EFBFBD>");
break;
case 0x01:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x02:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case 0x03:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
switch(Rs485Tem->TemState.valve)
{
case TEMP_VALVE_OPEN:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
case TEMP_VALVE_CLOSE:
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
break;
}
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:%d\r\n",Rs485Tem->TemState.set_t,Rs485TemRecBuf.TemState.indoor_t);
temp++;
}
if(Rs485Tem->TemState.on_off == Rs485Tem->control_start) //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>Ƴɹ<C6B3><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>־");
Rs485Tem->control_start = 0xFF;
temp++;
}
/*<2A>ȶԷ<C8B6><D4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>״̬ - <20>Ƿ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>־
2025-10-13 <20>޸<EFBFBD>
1<><31>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¶ȱ仯<C8B1><E4BBAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
2<><32><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹͣ<CDA3><D6B9>30S<30><53><EFBFBD><EFBFBD><EFBFBD>ٽ<EFBFBD><D9BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>
*/
if( (Rs485Tem->TemStateLast.on_off != Rs485Tem->TemState.on_off) \
|| (Rs485Tem->TemStateLast.mode != Rs485Tem->TemState.mode) \
|| (Rs485Tem->TemStateLast.fan != Rs485Tem->TemState.fan) \
|| (Rs485Tem->TemStateLast.valve != Rs485Tem->TemState.valve) \
|| (Rs485Tem->TemStateLast.set_t != Rs485Tem->TemState.set_t) )
{
Dev_Temp_State_Sync(&Rs485Tem->TemStateLast,&Rs485Tem->TemState);
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>:%04x",Dev_Temp_State_Data(Rs485Tem->TemState));
Rs485Tem->udp_flag = 0x01;
Rs485Tem->udp_tick = SysTick_1ms;
temp++;
}
if(Rs485Tem->udp_flag == 0x01)
{
if( SysTick_1ms - Rs485Tem->udp_tick >= 30000)
{
Rs485Tem->udp_tick = SysTick_1ms;
Rs485Tem->udp_flag = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־:%04x",Dev_Temp_State_Data(Rs485Tem->TemStateLast));
temp++;
//д<><D0B4><EFBFBD><EFBFBD>־
Udp_Addtion_Roomstate(DEV_RS485_TEMP,BUS_Public->addr,0x0000,Dev_Temp_State_Data(Rs485Tem->TemStateLast));
}
}
return temp;
}
#define RECDATALENMAX 24 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>
/*******************************************************************************
* Function Name : BLWOut_Rs485_Tem_Check
* Description : BLWOut<75>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* Input :
dev_addr : <20><EFBFBD><E8B1B8>Ϣ<EFBFBD><CFA2>ַ
data_addr : <20><><EFBFBD>ݵ<EFBFBD>ַ
len <20><><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
* Return :
0x00<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
*******************************************************************************/
__attribute__((section(".non_0_wait"))) uint8_t BLWOut_Rs485_TempT1_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len)
{
uint8_t temp_1 = 0;
uint8_t rev = 0x01;
uint8_t data[RECDATALENMAX];
uint16_t crc_val = 0;
RS485_TEMP_INFO Rs485TempT1;
Device_Public_Information_G BUS_Public;
memset(data,0x00,RECDATALENMAX);
if(len > RECDATALENMAX)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"T1 Temp <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD>Χ!!\r\n");
return rev; //<2F><><EFBFBD><EFBFBD>
}
SRAM_DMA_Read_Buff(data,len,data_addr); //<2F><><EFBFBD><EFBFBD>482<38><32><EFBFBD><EFBFBD>
SRAM_DMA_Read_Buff((uint8_t *)&BUS_Public,sizeof(Device_Public_Information_G),dev_addr);
SRAM_DMA_Read_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),dev_addr+Dev_Privately);
if(len < 6) return rev;
if((data[0] != 0x55) || (data[1] != 0x55) || (data[2] != 0xee) || (len != data[3] + 0x03) || (0x03 != data[4]) ||BUS_Public.addr!=data[5] )
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"%s Addr:%d Check Error",__func__,BUS_Public.addr);
return rev;
}
crc_val = data[len-2] + (data[len-1]<<8);
if(crc_val == NetCRC16_2(&data[3],len - 5))
{
rev = 0x00;
if(Rs485TempT1.DevOffline != DEV_IS_ONLINE)
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"Rs485TempT1 LogInfo_Device_Online...........");
LOG_Device_Online_Record(DEV_RS485_TEMP,BUS_Public.addr,LogInfo_Device_Online); //<2F><>¼<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
}
BLV_Communication_Record(&Rs485TempT1.comm_record,0x02,0x01); //<2F><>¼ͨѶ<CDA8>ɹ<EFBFBD>
Rs485TempT1.DevSendCnt = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
switch(data[3]) //<2F><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
case 0x15://<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
Rs485TempT1.DevOffline = DEV_IS_ONLINE; //Ψ<><CEA8><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
if(Rs485TempT1.DevOffline != Rs485TempT1.DevOfflineLast) //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
{
Rs485TempT1.DevOfflineLast = Rs485TempT1.DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
Write_Device_Fault_State(BUS_Public.type,BUS_Public.addr,In_ErrFun_LineState,DEV_IS_ONLINE); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>״̬<D7B4><CCAC>SRAM
}
temp_1 = BLWOut_TempT1CtrDataProc(&BUS_Public, &data[3], &Rs485TempT1);
if(temp_1 != 0x00) //<2F><>ѯ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б
{
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"BLV Rs485 TempT1 Reply Change");
LOG_Device_COMM_ASK_TO_Reply_Record(BUS_Public.port, BUS_Public.baud,(SysTick_1ms - Rs485TempT1.inquire_tick),data,len);
}
if(BUS_Public.port == Active_Port) //2024-11-26
{
BLWOut_tempT1Cycle(&BUS_Public);
}
break;
case 0x07: //<2F><><EFBFBD>ƿ<EFBFBD><C6BF>ػ<EFBFBD>
switch(data[6]) //SRAM_Read_Byte(data_addr + 6)
{
case 0x01: //<2F><><EFBFBD>ػ<EFBFBD><D8BB>ظ<EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
Rs485TempT1.TemStateCtrlFlag.TemOnOffCtrlVar = 0x00; //<2F><><EFBFBD>տ<EFBFBD><D5BF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
break;
case 0x02: //ģʽ
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD>ģʽ<C4A3>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־", BUS_Public.addr);
Rs485TempT1.TemStateCtrlFlag.TemModeCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־
break;
case 0x04: //<2F><><EFBFBD><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ٻظ<D9BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٿ<EFBFBD><D9BF>Ʊ<EFBFBD>־", BUS_Public.addr);
Rs485TempT1.TemStateCtrlFlag.TemFanCtrlVar = 0x00; //<2F><><EFBFBD>շ<EFBFBD><D5B7>ٿ<EFBFBD><D9BF>Ʊ<EFBFBD>־
break;
case 0x03: //<2F><EFBFBD>
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD><D5B5>¶Ȼظ<C8BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD>ñ<EFBFBD>־", BUS_Public.addr);
Rs485TempT1.TemStateCtrlFlag.TemSetTCtrlVar = 0x00; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȿ<C2B6><C8BF>Ʊ<EFBFBD>־
break;
case 0x11:
Rs485TempT1.CardFlag = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD><D5B5>忨״̬<D7B4><CCAC><EFBFBD>ûظ<C3BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־", BUS_Public.addr);
break;
case 0x12:
Rs485TempT1.DevPort_Flag = 0x00;
Dbg_Println(DBG_BIT_DEVICE_STATUS_bit,"<EFBFBD>¿<EFBFBD><EFBFBD><EFBFBD>:%d <20>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ö˿<C3B6><CBBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ûظ<C3BB><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD>־", BUS_Public.addr);
break;
}
/*<2A><>־<EFBFBD><D6BE>¼*/
LOG_Device_COMM_Control_Reply_Record(BUS_Public.port, BUS_Public.baud,data,len);
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);/*<2A><><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>*/
SRAM_DMA_Write_Buff((uint8_t *)&Rs485TempT1,sizeof(RS485_TEMP_INFO),dev_addr+Dev_Privately);
}
return rev;
}

View File

@@ -0,0 +1,192 @@
/*
* blv_bus_dev_c5iofun.h
*
* Created on: Nov 11, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_BUS_DEV_C5IOFUN_H_
#define BLV_485_DRIVER_INC_BLV_BUS_DEV_C5IOFUN_H_
#include <stdint.h>
#include "ch564.h"
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define C5IOTYPE 0xF1 //C5IO<49><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>BLV_BUSЭ<53><D0AD>ͨѶʹ<D1B6><CAB9>
#define DEV_C5IO_Type 0xF1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define C5IO_REPEATSENDTIMEMAX 0x02 //<2F>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define C5IO_SEND_WAIT_TIME 0x28 //<2F>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> 2024-02-23
#define C5IO_RecvData_Len_MAX 0x28 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>Ŀǰ<C4BF>30Byte
#define BLV_C5IO_Inquire_CMD 0x20
#define BLV_C5IO_Set_Relay_CMD 0x21
#define BLV_C5IO_Set_Relay_Inching_CMD 0x22
#define BLV_C5IO_Set_Do_CMD 0x23
#define BLV_C5IO_Set_Do_Inching_CMD 0x24
#define BLV_C5IO_Set_Di_CMD 0x25
#define BLV_C5IO_SetRTC_CMD 0x27
#define BLV_C5IO_Reply_CMD 0xA0
#define BLV_C5IO_Reply_Result 0x00
#define BLV_C5IO_Relay_Result 0x01
#define BLV_C5IO_Relay_Inching_Result 0x02
#define BLV_C5IO_Do_Result 0x03
#define BLV_C5IO_Do_Inching_Result 0x04
#define BLV_C5IO_Di_Result 0x05
#define BLV_C5IO_Error_Result 0xF0
#define BUS_C5IO_DI_Key_Type 0x01 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BUS_C5IO_DI_Pir_Type 0x02 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - PIR<49><52><EFBFBD><EFBFBD>
#define BUS_C5IO_DI_Dry_Type 0x03 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20>ɽӵ<C9BD>
#define BUS_C5IO_DI_Level_HIGH 0x20 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ
#define BUS_C5IO_DI_Level_LOW 0x10 //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ
#define BUS_C5IO_DO_Common_Mode 0x00 //DO<44><4F><EFBFBD><EFBFBD>ģʽ - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
#define BUS_C5IO_DO_Inching_Mode 0x01 //DO<44><4F><EFBFBD><EFBFBD>ģʽ - <20><EFBFBD><E3B6AF><EFBFBD><EFBFBD>ģʽ
#define BUS_C5IO_OUT_LOW 0x01
#define BUS_C5IO_OUT_HIGH 0x02
#define BUS_C5IO_OUT_TOGGLE 0x03
#define BUS_C5IO_Right_Inching 0x01
#define BUS_C5IO_Reverse_Inching 0x02
#define BUS_C5IO_Toggle_Inching 0x03
typedef enum{
C5IO_Relay_CH1,
C5IO_Relay_CH2,
C5IO_Relay_CH3,
C5IO_Relay_CH4,
C5IO_Relay_CH5,
C5IO_Relay_CH6,
C5IO_Relay_CH7,
C5IO_Relay_CH8,
C5IO_Relay_CH9,
C5IO_Relay_CH10,
C5IO_Relay_CH11,
C5IO_Relay_CH12,
C5IO_Relay_CH13,
C5IO_Relay_CH14,
C5IO_Relay_CH15,
C5IO_Relay_CH16,
C5IO_Relay_CH17,
C5IO_Relay_CH18,
C5IO_Relay_CH19,
C5IO_Relay_CH20,
C5IO_Relay_CH21,
C5IO_Relay_CH22,
C5IO_Relay_CH23,
C5IO_Relay_CH24,
C5IO_Relay_CH_MAX,
}BUS_C5IO_RELAY_NUM_E;
typedef enum{
C5IO_DO_CH1,
C5IO_DO_CH2,
C5IO_DO_CH3,
C5IO_DO_CH4,
C5IO_DO_CH5,
C5IO_DO_CH_MAX,
}BUS_C5IO_DO_NUM_E;
typedef enum{
C5IO_DI_CH1,
C5IO_DI_CH2,
C5IO_DI_CH3,
C5IO_DI_CH4,
C5IO_DI_CH5,
C5IO_DI_CH6,
C5IO_DI_CH7,
C5IO_DI_CH8,
C5IO_DI_CH9,
C5IO_DI_CH10,
C5IO_DI_CH11,
C5IO_DI_CH12,
C5IO_DI_CH13,
C5IO_DI_CH_MAX,
}BUS_C5IO_DI_NUM_E;
typedef struct{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DO_Mode[C5IO_DO_CH_MAX]; //DO<44><4F><EFBFBD><EFBFBD>ģʽ
uint8_t DO_Control[C5IO_DO_CH_MAX]; //Do<44><6F><EFBFBD><EFBFBD>
uint16_t Last_DO_Level_Start; //֮ǰDOʵ<4F>ʵ<EFBFBD>ƽ״̬
uint16_t DO_Level_Actual_Start; //DOʵ<4F>ʵ<EFBFBD>ƽ״̬
uint16_t DO_Level_Perfect_Start; //DO<44><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ״̬
uint16_t DO_Inching_Tick[C5IO_DO_CH_MAX]; //DO<44>㶯ʱ<E3B6AF><CAB1><EFBFBD><EFBFBD>
uint16_t DO_Inching_Time[C5IO_DO_CH_MAX]; //DO<44>㶯ʱ<E3B6AF><CAB1>
uint8_t Relay_Mode[C5IO_Relay_CH_MAX]; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
uint8_t Relay_Control[C5IO_Relay_CH_MAX]; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t Last_Relay_Level_Start; //֮ǰ<D6AE>̵<EFBFBD><CCB5><EFBFBD>ʵ<EFBFBD>ʵ<EFBFBD>ƽ״̬
uint32_t Relay_Level_Actual_Start; //<2F>̵<EFBFBD><CCB5><EFBFBD>ʵ<EFBFBD><CAB5>״̬
uint32_t Relay_Level_Perfect_Start; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint16_t Relay_Inching_Tick[C5IO_Relay_CH_MAX]; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>㶯ʱ<E3B6AF><CAB1><EFBFBD><EFBFBD>
uint16_t Relay_Inching_Time[C5IO_Relay_CH_MAX]; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>㶯ʱ<E3B6AF><CAB1>
uint8_t Relay_feedback; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־λ
uint8_t DI_Type[C5IO_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0~3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4~7:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ
uint16_t DI_Level_Actual_Start;
uint32_t DI_Actual_State;
uint32_t DI_Perfect_State;
uint8_t DI_Start[C5IO_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>״̬
uint8_t DI_LastStart[C5IO_DI_CH_MAX];
uint8_t DI_Detection_Time[C5IO_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t Send_Type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t DI_Control_Flag; //DI<44><49><EFBFBD>Ʊ<EFBFBD>־λ
uint16_t Last_DI_Control_Flag; //DI<44>ϴο<CFB4><CEBF>Ʊ<EFBFBD>־λ
uint8_t DO_Control_Flag; //DO<44><4F><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t Last_DO_Control_Flag; //DO<44>ϴο<CFB4><CEBF>Ʊ<EFBFBD>־λ
uint8_t DO_Inching_Control_Flag; //DO<44><EFBFBD><E3B6AF><EFBFBD>Ʊ<EFBFBD>־
uint8_t Last_DO_Inching_Control_Flag; //DO<44><EFBFBD>ϴο<CFB4><CEBF>Ʊ<EFBFBD>־
uint32_t Relay_Control_Flag; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint32_t Last_Relay_Control_Flag; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>ϴο<CFB4><CEBF>Ʊ<EFBFBD>־
uint32_t Relay_Inching_Control_Flag; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><E3B6AF><EFBFBD>Ʊ<EFBFBD>־λ
uint32_t Last_Relay_Inching_Control_Flag; //<2F>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>ϴο<CFB4><CEBF>Ʊ<EFBFBD>־λ
uint8_t C5IO_Version; //IO<49><4F><EFBFBD><EFBFBD><EFBFBD>汾 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C5 C12 CSIO
uint8_t comm_version; //CSIOͨѶЭ<D1B6><D0AD><EFBFBD><EFBFBD> - <20>Դ<EFBFBD><D4B4>İ汾<C4B0><E6B1BE>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint16_t CxIO_DI_Control_Flag; //<2F><>¼<EFBFBD><C2BC>Ҫ<EFBFBD><D2AA><EFBFBD>õ<EFBFBD>DI<44><49>·
uint8_t DI_Reset_Flag; //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t DI_Reset_Tick; //DI<44><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint8_t Relay_Reset_Flag; //<2F>̵<EFBFBD><CCB5><EFBFBD>״̬<D7B4>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
uint8_t rtc_set_flag;
uint8_t DI_Init_flag; //DI<44><49>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ 2025-08-07 <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>󣬲<EFBFBD><F3A3ACB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}BUS_C5IO_INFO;
void BLV_BUS_CSIO_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLV_BUS_CSIO_DI_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t BLV_BUS_C5IO_Cycle_Call(uint32_t dev_addr);
uint8_t BLV_CSIO_RTC_TimeValid(uint8_t *date);
uint8_t BLV_BUS_C5IO_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BUS_C5IO_DI_Control_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_DO_Control_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_DO_Inching_Control_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_Relay_Control_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_Relay_Inching_Control_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_CSIO_SetRTCTime_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_Inquire_Datasend(uint32_t dev_addr,BUS_C5IO_INFO *Dev_Info);
void BUS_C5IO_Control_Relay(uint32_t dev_addr,uint8_t loop,uint8_t start);
void BUS_C5IO_Control_Do(uint32_t dev_addr,uint8_t loop,uint8_t start);
void BUS_C5IO_Control_Relay_Inching(uint32_t dev_addr,uint8_t loop,uint8_t start,uint16_t d_time);
void BUS_C5IO_Group_Control_Relay(uint32_t dev_addr,uint32_t loop,uint32_t start);
void BUS_CSIO_Set_RTC_Time(uint32_t dev_addr);
uint32_t Get_BUS_C5IO_Realy_Status(uint32_t devaddr);
uint8_t Get_BUS_C5IO_Online_Status(uint32_t devaddr);
uint8_t Get_Bus_C5IO_COMM_State(uint32_t devaddr);
uint8_t Get_Bus_CSIO_COMM_Version(uint32_t devaddr);
#endif /* BLV_485_DRIVER_INC_BLV_BUS_DEV_C5IOFUN_H_ */

View File

@@ -0,0 +1,250 @@
/*
* blv_bus_dev_c5music.h
*
* Created on: Nov 11, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_BUS_DEV_C5MUSIC_H_
#define BLV_485_DRIVER_INC_BLV_BUS_DEV_C5MUSIC_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define C5MUSICTYPE 0x01 //C5IO<49><EFBFBD><E8B1B8><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>BLV_BUSЭ<53><D0AD>ͨѶʹ<D1B6><CAB9>
#define DEV_C5MUSIC_Type 0x15 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define C5MUSIC_REPEATSENDTIMEMAX 0x04 //<2F><><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define C5MUSIC_SEND_WAIT_TIME 0x0020 //C5MUSIC<49><43><EFBFBD>͵ȴ<CDB5>ʱ<EFBFBD><CAB1> - 32ms
#define BLV_C5MUSIC_Playback_Status_CMD 0x20 //<2F><>ѯ<EFBFBD><D1AF>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Set_Default_Volume_CMD 0x21 //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Specify_Play_CMD 0x22 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Set_Volume_CMD 0x23 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Query_Default_Volume_CMD 0x24 //<2F><>ѯĬ<D1AF><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Query_Volume_CMD 0x26 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Set_Loop_Mode_CMD 0x29 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Query_Loop_Mode_CMD 0x2A //<2F><>ѯѭ<D1AF><D1AD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Query_Filenum_CMD 0x2B //<2F><>ѯ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Query_Versions_CMD 0x2C //<2F><>ѯ<EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Write_FILEHEAD_CMD 0x2D //д<>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Write_FILEData_CMD 0x2E //д<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Read_FILEHEAD_CMD 0x2F //<2F><><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Read_FILEData_CMD 0x40 //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Playback_Status_Reply 0x30 //<2F><>ѯ<EFBFBD><D1AF>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬<D7B4>ظ<EFBFBD>
#define BLV_C5MUSIC_Set_Default_Volume_Reply 0x31 //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Specify_Play_Reply 0x32 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4>ظ<EFBFBD>
#define BLV_C5MUSIC_Set_Volume_Reply 0x33 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Query_Default_Volume_Reply 0x34 //<2F><>ѯĬ<D1AF><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Query_Volume_Reply 0x36 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Set_Loop_Mode_Reply 0x39 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ<C4A3>ظ<EFBFBD>
#define BLV_C5MUSIC_Query_Loop_Mode_Reply 0x3A //<2F><>ѯѭ<D1AF><D1AD>ģʽ<C4A3>ظ<EFBFBD>
#define BLV_C5MUSIC_Query_Filenum_Reply 0x3B //<2F><>ѯ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29>ظ<EFBFBD>
#define BLV_C5MUSIC_Query_Versions_Reply 0x3C //<2F><>ѯ<EFBFBD><EFBFBD>Żظ<C5BB>
#define BLV_C5MUSIC_Write_FILEHEAD_Reply 0x3D //д<>ļ<EFBFBD>ͷ<EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Write_FILEData_Reply 0x3E //д<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݻظ<DDBB>
#define BLV_C5MUSIC_Read_FILEHEAD_Reply 0x3F //<2F><><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD>ظ<EFBFBD>
#define BLV_C5MUSIC_Read_FILEData_Reply 0x50 //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݻظ<DDBB>
#define C5MUSIC_Control_Num 13 //13<31>ֿ<EFBFBD><D6BF><EFBFBD>
#define C5MUSIC_Set_Default_Volume_Flag 0x0001 //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Set_Volume_Flag 0x0002 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Set_Loop_Mode_Flag 0x0004 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Specify_Play_Flag 0x0008 //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Query_Default_Volume_Flag 0x0010 //<2F><>ѯĬ<D1AF><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Query_Volume_Flag 0x0020 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Query_Loop_Mode_Flag 0x0040 //<2F><>ѯѭ<D1AF><D1AD>ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Query_Filenum_Flag 0x0080 //<2F><>ѯ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<29><><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Query_Versions_Flag 0x0100 //<2F><>ѯ<EFBFBD><EFBFBD>ſ<EFBFBD><C5BF>Ʊ<EFBFBD>־λ
#define C5MUSIC_Write_FILEHEAD_Flag 0x0200 //д<>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Write_FILEData_Flag 0x0400 //д<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>Ʊ<EFBFBD>־λ
#define C5MUSIC_Read_FILEHEAD_Flag 0x0800 //<2F><><EFBFBD>ļ<EFBFBD>ͷ<EFBFBD><CDB7><EFBFBD>Ʊ<EFBFBD>־λ
#define C5MUSIC_Read_FILEData_Flag 0x1000 //<2F><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݻظ<DDBB><D8B8><EFBFBD>־λ
#define BLV_C5MUSIC_Relay_SUCC 0xE0 //<2F>޴<EFBFBD><DEB4><EFBFBD>
#define BLV_C5MUSIC_Relay_Check_Error 0xE1 //CRCУ<43><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Relay_CMD_Error 0xE2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Relay_Para_Error 0xE3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Relay_Other_Error 0xE4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Music_Dir 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define BLV_C5MUSIC_Warning_Dir 0x01 //<2F><>ʾ<EFBFBD><CABE><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define BLV_C5MUSIC_Helpsleep_Dir 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define BLV_C5MUSIC_Doorbell_Dir 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define BLV_C5MUSIC_Greet_Dir 0x04 //<2F><>ӭ<EFBFBD><D3AD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
#define BLV_C5MUSIC_Helpsleep1_Dir 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>_1_ڤ<5F><DAA4>
#define BLV_C5MUSIC_Helpsleep2_Dir 0x06 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>_2_<32><5F><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Helpsleep3_Dir 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>_3_ɭ<5F><C9AD>
#define BLV_C5MUSIC_Full_Loop 0x00 //ȫ<><C8AB>ѭ<EFBFBD><D1AD>
#define BLV_C5MUSIC_Single_Cycle 0x01 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
#define BLV_C5MUSIC_Folder_Loop 0x02 //<2F>ļ<EFBFBD><C4BC><EFBFBD>ѭ<EFBFBD><D1AD>
#define BLV_C5MUSIC_Random_Cycle 0x03 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
#define BLV_C5MUSIC_Order_CyCle 0x05 //˳<><CBB3>ѭ<EFBFBD><D1AD>
#define BLV_C5MUSIC_Playing 0x00 //<2F><><EFBFBD><EFBFBD>״̬
#define BLV_C5MUSIC_Halted 0x01 //<2F><>ͣ״̬
#define BLV_C5MUSIC_Stopped 0x02 //ֹͣ״̬
#define BLV_C5MUSIC_Next_Song 0x03 //<2F><>һ<EFBFBD><D2BB>
#define BLV_C5MUSIC_Prev_Song 0x04 //<2F><>һ<EFBFBD><D2BB>
#define BLV_C5MUSIC_Fast_Forward 0x05 //<2F><><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Rewind 0x06 //<2F><><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Single_Play 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Forestall 0x08 //<2F><><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD>
#define BLV_C5MUSIC_Volume_MAX 30 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Volume_MIN 0 //<2F><>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_Default_Volume 25 //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_C5MUSIC_HelpSleep_Start_Volume 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺ궨<D6BA>ʼ*/
#define MUSICLOOPMAX 0x05 //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
#define CtrlDirectOpen 0x01 //<2F><>
#define CtrlDirectClose 0x02 //<2F><>
typedef struct{
uint8_t CtrlDirect; //<2F><><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD> <20><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>:0x00<30><30><EFBFBD><EFBFBD> 0x01<30><31><EFBFBD><EFBFBD> 0x02<30>ػ<EFBFBD> 0x03<30><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x04<30>ز<EFBFBD><D8B2><EFBFBD>
uint8_t CtrlDir; //<2F><><EFBFBD><EFBFBD>Ŀ¼ <20><>CtrlDirectΪ0x03ʱ CtrlDir<69><72>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> CtrlCont<6E><74>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> <20><>CtrlDirectΪ0x00ʱ CtrlDirΪ1<CEAA><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> CtrlDirΪ2<CEAA><32>ʾ<EFBFBD><CABE>ͣ
}DEV_MUSIC_CTRLWAY; //<2F><><EFBFBD>Ʒ<EFBFBD>ʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ֽڴ<D6BD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>ػ<EFBFBD>
typedef struct{
uint8_t CtrlMode; //<2F><><EFBFBD><EFBFBD>ģʽ
uint8_t CtrlVoice; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}DEV_MUSIC_CTRLCONT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct{
DEV_MUSIC_CTRLWAY DevMusicCtrlWay; //<2F><><EFBFBD>Ʒ<EFBFBD>ʽ
DEV_MUSIC_CTRLCONT CtrlCont; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}DEV_MUSIC_CTRLSTATE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֺ궨<D6BA><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
typedef struct{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t now_playback_status_num; //<2F><><EFBFBD><EFBFBD>״̬<D7B4>ı<EFBFBD><C4B1><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ״̬<D7B4><CCAC><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ÿ<EFBFBD>ֵ״̬
uint8_t now_playback_type; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 0x01:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>0x02:ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD>֡<EFBFBD>0x03:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>֡<EFBFBD>0x04:<3A><><EFBFBD>塢0x05<30><35><EFBFBD>Ż<EFBFBD>ӭ<EFBFBD><D3AD>
uint8_t now_playback_status; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬ - <20><><EFBFBD>ţ<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
uint8_t last_playback_status;
uint8_t now_playback_volume; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t last_playback_volume;
uint8_t now_mute_status; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>״̬
uint8_t now_global_volume; //<2F><>ǰȫ<C7B0>ְٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>
uint8_t now_music_volume; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t now_tone_volume; //<2F><>ǰ<EFBFBD><C7B0>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t now_door_volume; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t now_helpsleep_volume; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2022-12-16
uint8_t now_playback_mode; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ģʽ - 0x00:ȫ<><C8AB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>0x01:<3A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>0x02:<3A>ļ<EFBFBD><C4BC><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>0x03:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>0x05:˳<>򲥷<EFBFBD>
uint8_t now_playback_dir; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
uint8_t last_playback_dir;
uint16_t now_playback_idx; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t last_playback_idx;
uint8_t assign_dir; //0x00:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x01:<3A><>ʾ<EFBFBD><CABE><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x02:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x03:<3A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> 0x04:<3A><>ӭ<EFBFBD><D3AD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
uint16_t assign_playback_path; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
uint16_t assign_playback_idx; //ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
uint8_t adjust_volume_type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0x01:<3A><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD> 0x02:<3A><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>
uint8_t adjust_volume_operate; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x01 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>0x02 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ
uint8_t adjust_volume_loop; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·
uint8_t set_playback_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_music_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_tone_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_door_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_helpsleep_volume;
uint8_t set_global_volume; //<2F><><EFBFBD><EFBFBD>ȫ<EFBFBD>ְٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>
uint16_t fade_time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> - <20><>λ<EFBFBD><CEBB>100ms
uint16_t helpsleep_time; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> - <20><>λ<EFBFBD><CEBB>1S
uint32_t helpsleep_tick; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint8_t playback_type; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - 0x01:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>0x02:ϴ<>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD>֡<EFBFBD>0x03:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>֡<EFBFBD>0x04:<3A><><EFBFBD>塢0x05<30><35><EFBFBD>Ż<EFBFBD>ӭ<EFBFBD><D3AD>
uint8_t playback_fun; //<2F><><EFBFBD>Ź<EFBFBD><C5B9><EFBFBD> - 0x00:<3A><><EFBFBD>š<EFBFBD>0x01:<3A><>ͣ<EFBFBD><CDA3>0x02:ֹͣ<CDA3><D6B9>0x03:<3A><>һ<EFBFBD>ס<EFBFBD>0x04:<3A><>һ<EFBFBD>ס<EFBFBD>0x05:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x06:<3A><><EFBFBD>ˡ<EFBFBD>0x07:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t playback_mode; //<2F><><EFBFBD><EFBFBD>ģʽ - 0x00:ȫ<><C8AB>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>0x01:<3A><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>0x02:<3A>ļ<EFBFBD><C4BC><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD>0x03:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>0x05:˳<>򲥷<EFBFBD>
uint8_t quiet_mode; //<2F><><EFBFBD><EFBFBD>ģʽ - 0x00:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x01:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_quiet_status; //<2F><><EFBFBD>þ<EFBFBD><C3BE><EFBFBD>״̬ - 0x00:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0x01:<3A>رվ<D8B1><D5BE><EFBFBD>
uint8_t quite_flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>Ʊ<EFBFBD>־λ
uint8_t global_volume; //ȫ<>ְٷֱ<D9B7><D6B1><EFBFBD><EFBFBD><EFBFBD>
uint8_t default_volume; //Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t helpsleep_volume; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t playback_volume_max; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t playback_volume_min; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>ʼ*/
DEV_MUSIC_CTRLSTATE BackMusicState[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ǰ״̬
DEV_MUSIC_CTRLSTATE BackMusicStateLast[MUSICLOOPMAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
/*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
uint16_t file_block; //<2F>ļ<EFBFBD><C4BC><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
uint16_t file_block_num; //<2F>ļ<EFBFBD><C4BC>ܿ<EFBFBD><DCBF><EFBFBD>
uint16_t file_size; //<2F>ļ<EFBFBD><C4BC><EFBFBD>С
uint32_t file_start_addr; //<2F>ļ<EFBFBD><C4BC><EFBFBD>ʼ<EFBFBD><CABC>ַ
uint32_t file_end_addr; //<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
uint16_t playback_num; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t dev_versions; //<2F><EFBFBD><EFBFBD><E6B1BE>
uint32_t control_flag; //<2F><><EFBFBD>Ʊ<EFBFBD>־λ
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}BUS_C5MUSIC_INFO;
void BLV_BUS_C5MUSIC_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t BLV_BUS_C5MUSIC_Cycle_Call(uint32_t dev_addr);
uint8_t BLV_BUS_C5MUSIC_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BUS_C5MUSIC_Playback_Status_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Set_Default_Volume_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Specify_Play_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Set_Volume_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Query_Default_Volume_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Query_Volume_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Set_Loop_Mode_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Query_Loop_Mode_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Query_Filenum_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Query_Versions_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Write_FILEHEAD_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Write_FILEData_Datasend(uint32_t dev_addr,BUS_C5MUSIC_INFO *Dev_Info);
void BUS_C5MUSIC_Set_Playback_Mode(uint32_t devaddr,uint8_t play_mode);
void BUS_C5MUSIC_Playback(uint32_t devaddr,uint8_t play_dir,uint8_t playback,uint8_t play_id);
void BUS_C5MUSIC_Doorbell_Dir(uint32_t devaddr,uint8_t id);
void BUS_C5MUSIC_Warning_Dir(uint32_t devaddr,uint8_t id,uint8_t start);
void BUS_C5MUSIC_Greet_Dir(uint32_t devaddr,uint8_t id,uint8_t start);
void BUS_C5MUSIC_Helpsleep_Dir(uint32_t devaddr,uint8_t dir,uint8_t id);
void BUS_C5MUSIC_Play_Helpsleep_Dir(uint32_t devaddr,uint8_t dir,uint8_t id, uint16_t time);
void BUS_C5MUSIC_Helpsleep_Dir_Just(uint32_t devaddr,uint8_t dir,uint8_t id);
void BUS_C5MUSIC_Stop_Playback(uint32_t devaddr);
void BUS_C5MUSIC_Play_Playback(uint32_t devaddr);
void BUS_C5MUSIC_Play_Playback_Next(uint32_t devaddr);
void BUS_C5MUSIC_Play_Playback_Last(uint32_t devaddr);
void BUS_C5MUSIC_Pause_Playback(uint32_t devaddr);
void BUS_C5MUSIC_Playback_Next(uint32_t devaddr, uint8_t dir);
void BUS_C5MUSIC_Playback_Prev(uint32_t devaddr, uint8_t dir);
void BUS_C5MUSIC_Relative_Volume_Plus(uint32_t devaddr);
void BUS_C5MUSIC_Relative_Volume_Subtraction(uint32_t devaddr);
void BUS_C5MUSIC_Relative_Volume_PlusValue(uint32_t devaddr, uint8_t value);
void BUS_C5MUSIC_Relative_Volume_SubtractionValue(uint32_t devaddr, uint8_t value);
void BUS_C5MUSIC_Set_Quiet_Mode(uint32_t devaddr);
void BUS_C5MUSIC_Set_Quiet_Mode2(uint32_t devaddr,uint8_t status);
void BUS_C5MUSIC_Set_Global_Volume(uint32_t devaddr,uint8_t vel);
void BUS_C5MUSIC_Set_LoopVolume(uint32_t devaddr,uint8_t loop,uint8_t vel);
void BUS_C5MUSIC_Set_LoopVolume_2(uint32_t devaddr,uint8_t loop,uint8_t vel);
uint8_t Get_BUS_C5MUSIC_Loop_Volume(uint32_t devaddr,uint8_t loop);
uint8_t Get_BUS_C5MUSIC_Online_Status(uint32_t devaddr);
void BLV_Music_CtrlState_Get(DEV_MUSIC_CTRLSTATE *music_state,uint16_t Output_state );
void Logic_Music_Ctrl(uint32_t DevAddrIn, uint16_t DevInputLoop, uint32_t DevAddrOut, uint16_t DevOutputLoop, uint16_t DevOutputType);
uint16_t Dev_Music_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
#endif /* BLV_485_DRIVER_INC_BLV_BUS_DEV_C5MUSIC_H_ */

View File

@@ -0,0 +1,133 @@
/*
* blv_device_option.h
*
* Created on: Nov 13, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_DEVICE_OPTION_H_
#define BLV_485_DRIVER_INC_BLV_DEVICE_OPTION_H_
#define ProCode NULL //<2F><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> - uint32_t
#define HouseType NULL //<2F><><EFBFBD><EFBFBD>
#define ProName "ͨ<><CDA8>APP<50>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>MQTT,֧<><D6A7>Luancher<65><72>V04<30><34>" //<2F><>Ŀ˵<C4BF><CBB5> -64Bytes
#define C8_TYPE 0x00 //C8<43><38><EFBFBD><EFBFBD>
#define FLash_Fix_Data 0x00 //Flashij<68><C4B3><EFBFBD>ڴ<EFBFBD><DAB4>̶<EFBFBD>FF
#define UDPServer_Internal_Flag 0x00 //<2F><>UDP<44><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶʹ<D1B6>ܱ<EFBFBD>־λ
//#define LOGIC_FILE_EN 0x01 //ʹ<><CAB9><EFBFBD>߼<EFBFBD><DFBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
#define Restart_Address_EN 0x01 //APP<50><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ - 0x00:Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַΪ0x8000,0x01:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַΪ0x5000
#define NET_DHCP_Optimized_INIT_EN 0x00 //<2F><><EFBFBD><EFBFBD>DHCP<43><50><EFBFBD><EFBFBD><EFBFBD>Ż<EFBFBD><C5BB><EFBFBD><EFBFBD><EFBFBD>DHCP<43><50><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50>Ϊ0.0.0.0 2022-07-19
#define DevExistJudgge(Flag, FunName) ((0x01 == Flag)?FunName:NULL) //<2F><>־λΪ1<CEAA>ͷ<EFBFBD><CDB7>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>򷵻ؿ<F2B7B5BB>
/*<2A>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_HVout_C5RELAY_Flag 0x01 //C5<43>̵<EFBFBD><CCB5><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_HVout_A9RELAY_Flag 0x00 //A9<41>̵<EFBFBD><CCB5><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_HVout_SwiRELAY_Flag 0x01 //ǿ<><EFBFBD>ؼ̵<D8BC><CCB5><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
/*<2A>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_Switch_Touch_Flag 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_Switch_A9IO_Flag 0x00 //A9IO<49><4F><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_Switch_Rotary_Flag 0x00 //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_Switch_Rotary_P1_Flag 0x00 //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>1
#define RS485_Switch_Rotary_P2_Flag 0x00 //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>2
/*485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_Temp_T1_Flag 0x01 //T1<54>¿<EFBFBD><C2BF><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_Temp_T1_Flag_Si 0x01 //T1<54>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĺܣ<C4B9>
#define RS485_Temp_T1_Active_Flag 0x01 //T1<54>¿<EFBFBD><C2BF><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ĺ<EFBFBD>
#define RS485_Temp_C7T_Flag 0x00 //C7T<37>¿<EFBFBD><C2BF><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
/*485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_LED_Flag 0x01 //485PWM<57><4D><EFBFBD><EFBFBD><EFBFBD>ܱ<EFBFBD><DCB1><EFBFBD>
#define RS485_LED_PWM_Flag 0x00 //PWM0~10V<30><56><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_LED_A9LD_Flag 0x00 //A9LD<4C><44><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_LED_Slider_Flag 0x00 //Slider<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_LED_A8PB_Flag 0x00 //A8PB<50><42><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_LED_C12Dim_Flag 0x01 //C12Dim<69><6D><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_LED_RGB_Flag 0x00 //RGB<47><42><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
/*485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
/*485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_MUSIC_BLW_Flag 0x00 //С<><D0A1><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_MUSIC_HES_Flag 0x00 //485<38><35><EFBFBD><EFBFBD>˼<EFBFBD><CBBC><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
/*485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define RS485_RFGatewayHost_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>BLW΢<57><CEA2><EFBFBD><EFBFBD>
/*485΢<35><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ*/
#define RS485_WxLock_Flag 0x00 //΢<><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_WxLock_BLW_Flag 0x00 //BLW΢<57><CEA2><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_WxLock_FreeGo_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_WxLock_CJia_Flag 0x00 //<2F><><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
/*485΢<35><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EAB6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
#define RS485_AirDetect_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
#define RS485_AirReveal_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>־
#define RS485_TimeCtrl_Flag 0x00 //ʱ<><CAB1><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define RS485_Curtain_Flag 0x01 //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_DOOYA_Curtain_Flag 0x00 //<2F><><EFBFBD>Ǵ<EFBFBD><C7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_BinShen_Curtain_Flag 0x01 //<2F><><EFBFBD><EFBFBD><EAB4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_CardState_Flag 0x01 //<2F>忨״̬ͬ<CCAC><CDAC>
#define RS485_FreshAir_Flag 0x00 //<2F>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_FloorHeat_Flag 0x00 //<2F><>ů<EFBFBD><C5AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RS485_BLW_FreshAir_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_BLW_FloorHeat_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ů 1Ϊ<31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_CLED_FreshAir_Flag 0x00 //CLED<45>·<EFBFBD><31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#define RS485_CLED_FloorHeat_Flag 0x00 //CLED<45><44>ů 1Ϊ<31><CEAA><EFBFBD><EFBFBD><30>ر<EFBFBD>
#if C8_TYPE
#define RS485_PB20Fun_Flag 0x01 //PB20
#define RS485_PB20_LD_Flag 0x00 //PB20-LD
#define RS485_PB20_LS_Flag 0x01 //PB20-LS
#define RS485_PB20_Relay_Flag 0x01 //PB20-Relay
#define RS485_LCD_1602_Flag 0x01 //LCD
#else
#define RS485_PB20Fun_Flag 0x00 //PB20
#define RS485_PB20_LD_Flag 0x00 //PB20-LD
#define RS485_PB20_LS_Flag 0x00 //PB20-LS
#define RS485_PB20_Relay_Flag 0x00 //PB20-Relay
#define RS485_LCD_1602_Flag 0x00 //LCD
#endif
#define Dev_Nor_NoCard_Flag 0x00 //<2F>޿<EFBFBD><DEBF>ϵ<EFBFBD><CFB5>
#define Dev_Nor_VirtualCard_Flag 0x01 //<2F>޿<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>
#define RS485_Dev_IN_CH6 0x00 //<2F><><EFBFBD><EFBFBD><36><C2B7><EFBFBD><EFBFBD>
#define Dev_485_Pir_Flag 0x00 //485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ
#define Dev_Nor_ColorTemp 0x01 //ɫ<><C9AB>ģ<EFBFBD><C4A3>
#define Dev_485_Card_Polling_Flag 0x01 //<2F><>ѵ<EFBFBD>˿<EFBFBD>485<38>忨ȡ<E5BFA8><C8A1>
#define Dev_485_Card_Active_Flag 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>485<38>忨ȡ<E5BFA8><C8A1>
#define Dev_485_IrSend_Polling_Flag 0x01 //<2F><>ѵ<EFBFBD>˿ں<CBBF><DABA><EFBFBD>ת<EFBFBD><D7AA>
#define Dev_485_IrSend_Active_Flag 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF><DABA><EFBFBD>ת<EFBFBD><D7AA>
#define Dev_485_BLE_Music_Flag 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
#define Dev_Nor_Carbon_Flag 0x01 //̼<><CCBC><EFBFBD><EFBFBD>
#define Dev_Nor_Scene_Restore_Flag 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滹ԭ
#define Dev_Nor_GlobalSet_Flag 0x01 //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2025-07-14,YYW
#endif /* BLV_485_DRIVER_INC_BLV_DEVICE_OPTION_H_ */

View File

@@ -0,0 +1,92 @@
/*
* blv_device_type.h
*
* Created on: Nov 13, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_DEVICE_TYPE_H_
#define BLV_485_DRIVER_INC_BLV_DEVICE_TYPE_H_
typedef enum
{
Dev_Host_Invalid = 0, //0 - <20><>Ч<EFBFBD>豸 Ҳ<><D2B2><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>Ϊ<EFBFBD>dz<EFBFBD><C7B3><EFBFBD>
Dev_Host_HVout, //1 - ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
Dev_Host_LVinput, //2 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
Dev_Host_LVoutput, //3 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
Dev_Host_Service, //4 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
Dev_NodeCurtain, //5 - <20>ɽڵ㴰<DAB5><E3B4B0> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
/*485<38><EFBFBD><E8B1B8><EFBFBD>Ϳ<EFBFBD>ʼ*/
DEV_RS485_SWT, //6 - <20><><EFBFBD><EFBFBD>ָʾ<D6B8><CABE> <20><><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD>״̬ 485<38><EFBFBD>׵<EFBFBD>ַ
DEV_RS485_TEMP, //7 - <20>յ<EFBFBD>1 <20>յ<EFBFBD>״̬
DEV_RS485_INFRARED, //8 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ <20><><EFBFBD><EFBFBD>
DEV_RS485_AirDetect, //9 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD>
DEV_RS485_CARD, //10 - <20>忨ȡ<E5BFA8><C8A1> ȡ<><C8A1>״̬
DEV_RS485_HEATER, //11 - <20><>ů <20><>ů״̬
Dev_RCU_NET, //12 - RCU<43><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
DEV_RS485_CURTAIN, //13 - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
DEV_RS485_RELAY, //14 - <20>̵<EFBFBD><CCB5><EFBFBD> <20>̵<EFBFBD><CCB5><EFBFBD>״̬
DEV_RS485_IR_SEND, //15 - <20><><EFBFBD><EFBFBD><E2B7A2> <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>״̬
DEV_RS485_DIMMING, //16 - ֱ<><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>״̬
DEV_RS485_TRAIC, //17 - <20>ɿع<C9BF><D8B9><EFBFBD><EFBFBD><EFBFBD> <20>ɿع<C9BF>״̬
DEV_RS485_STRIP, //18 - <20>ƴ<EFBFBD> <20>ƴ<EFBFBD>״̬ --2025-11-24 ȡ<><C8A1>
DEV_RS485_CoreCtrl, //19 - <20>п<EFBFBD>
DEV_RS485_WxLock, //20 - ΢<><CEA2><EFBFBD><EFBFBD> ΢<><CEA2><EFBFBD><EFBFBD>״̬ <20><><EFBFBD>𹷵<EFBFBD><F0B9B7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>0<EFBFBD><30>ַ
DEV_RS485_MUSIC, //21 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
/*485<38><EFBFBD><E8B1B8><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>*/
DEV_NET_ROOMSTATE, //22 - <20><>̬<EFBFBD>·<EFBFBD>
Dev_Host_PWMLight, //23 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
DEV_RS485_PWM, //24 - 485PWM<57><4D><EFBFBD><EFBFBD> PWM<57><4D><EFBFBD><EFBFBD>״̬
DEV_PB_LED, //25 - <20><><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD> PBLED<45><44><EFBFBD><EFBFBD>״̬
DEV_RCU_POWER, //26 - RCU<43><55>Դ
DEV_RS485_A9_IO_SWT, //27 - A9IO<49><4F><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>û<EFBFBD><C3BB>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_RS485_A9_IO_EXP, //28 - A9IO<49><4F>չ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9>û<EFBFBD><C3BB>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_RS485_A9_IO_POWER, //29 - A9IO<49><4F>Դ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>û<EFBFBD><C3BB>Э<EFBFBD><D0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_RS485_RFGatewayCycle, //30 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ú<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
DEV_RS485_RFGatewayHost, //31 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_RS485_RFGatewayDoor, //32 - <20><><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>
DEV_RS485_AirReveal, //33 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>
DEV_RS485_RFGatewayRelayPir, //34 - <20><><EFBFBD>߼̵<DFBC><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ̵<DABC><CCB5><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD><D5B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dev_Host_TimeCtrl, //35 - ʱ<><CAB1>ͬ<EFBFBD><CDAC>
Dev_Rs458_MonitorCtrl, //36 - <20><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>
Dev_Rs458_RotaryCtrl, //37 - <20><>ť<EFBFBD><C5A5><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>
Dev_BUS_C5IO, //38 - C5IO - <20><><EFBFBD><EFBFBD>
Dev_RS485_CardState, //39 - <20>忨״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>
DEV_RS485_FreshAir, //40 - 485<38>·<EFBFBD><C2B7>
DEV_RS485_FaceMach, //41 - 485<38><35><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DEV_Center_Control, //42 - <20>п<EFBFBD>
DEV_Domain_Control, //43 - <20><><EFBFBD><EFBFBD>
DEV_RS485_LCD, //44 - LCD
DEV_Virtual_NoCard, //45 - <20>޿<EFBFBD><DEBF>ϵ<EFBFBD> --2025-11-24 ȡ<><C8A1>
DEV_Virtual_Card, //46 - <20>޿<EFBFBD>ȡ<EFBFBD><C8A1>2
DEV_Virtual_Time, //47 - <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>
Dev_Rs485_PB20 = 0x30,
Dev_Rs485_PB20_LD = 0x31,
Dev_Rs485_PB20_LS = 0x32,
Dev_Rs485_PB20_Relay = 0x33,
DEV_Virtual_ColorTemp, //52 - ɫ<>µ<EFBFBD><C2B5>ڹ<EFBFBD><DAB9><EFBFBD>
Dev_485_BLE_Music, //53 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ
DEV_Carbon_Saved, //54 - ̼<><CCBC><EFBFBD><EFBFBD>
Dev_Scene_Restore, //55 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ
Dev_Virtual_GlobalSet, //56 - ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Dev_Energy_Monitor, //57 - <20>ܺļ<DCBA><C4BC><EFBFBD>
Dev_Num_MAX, //<2F><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}Enum_Dev_Type; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>
#endif /* BLV_485_DRIVER_INC_BLV_DEVICE_TYPE_H_ */

View File

@@ -0,0 +1,144 @@
/*
* blv_nor_dec_virtualcard.h
*
* Created on: Nov 11, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEC_VIRTUALCARD_H_
#define BLV_485_DRIVER_INC_BLV_NOR_DEC_VIRTUALCARD_H_
#define VC_CONDGROUP_MAX 10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>
#define VC_CONDSUB_MAX 10 //ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7><EFBFBD><EFBFBD>
#define VIRTUAL_PORT_MAX 11 //<2F><><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD>
#define SOMEONE 1 //<2F><><EFBFBD><EFBFBD>
#define NOONE 2 //<2F><><EFBFBD><EFBFBD>
#define VC_CONDGROUP_Default_StartGroup 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ĭ<><C4AC><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x01
#define VC_CONDGROUP_SomeOne_Type 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define VC_CONDGROUP_NoOne_Type 0x02
#define VC_CONDGROUP_BrieflyLeaving_Type 0x03
#define VC_CONDGROUP_LongTermLeaving_Type 0x04
#define DETECTION_Window_Time_Max 43200 //<2F><>ʱ<EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><E4A3AC>λ<EFBFBD><CEBB>S
//<2F>¼<EFBFBD>ID
#define VC_EventID_DoorSensor 0x01 //<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
#define VC_EventID_CardedPersonLeft 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD>ˣ<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define VC_EventID_UncardedPersonLeft 0x03 //<2F>޿<EFBFBD><DEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>޿<EFBFBD>
#define VC_EventID_RadarPersonDetected 0x04 //<2F>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
#define VC_EventID_RadarPersonLeft 0x05 //<2F>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define VC_EventID_RS485ButtonPress 0x06 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC>⵽RS485 <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
#define VC_EventID_BrieflyLeaving 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define VC_EventID_LongTermLeaving 0x08 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
//<2F><>־λ
#define VC_Event_DoorSensor_Flag 0x01 //<2F><><EFBFBD>Ž<EFBFBD><C5BD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
#define VC_Event_CardedPersonLeft_Flag 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD>ˣ<EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define VC_Event_UncardedPersonLeft_Flag 0x04 //<2F>޿<EFBFBD><DEBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD>޿<EFBFBD>
#define VC_Event_RadarPersonDetected_Flag 0x08 //<2F>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
#define VC_Event_RadarPersonLeft_Flag 0x10 //<2F>״<EFBFBD><D7B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define VC_Event_RS485ButtonPress_Flag 0x20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC>⵽RS485 <20><><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
#define VC_Event_BrieflyLeaving_Flag 0x40 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
#define VC_Event_LongTermLeaving_Flag 0x80 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
typedef struct
{
uint8_t HPort_Type; //ӳ<><D3B3><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
uint8_t HPort_Addr; //ӳ<><D3B3><EFBFBD>˿<EFBFBD>485<38><35>ַ
uint16_t HPort_Loop; //ӳ<><D3B3><EFBFBD>˿ڻ<CBBF>·
uint8_t PortIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
uint8_t PortEnFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·ͳ<C2B7><CDB3><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
}VPORT_STRUCT; //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD>Խṹ<D4BD><E1B9B9>
typedef struct
{
uint8_t HPort_Type; //ӳ<><D3B3><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
uint8_t HPort_Addr; //ӳ<><D3B3><EFBFBD>˿<EFBFBD>485<38><35>ַ
uint16_t HPort_Loop; //ӳ<><D3B3><EFBFBD>˿ڻ<CBBF>·
uint8_t Release_Thres; //<2F>ͷ<EFBFBD><CDB7><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
uint8_t PortIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
uint8_t PortEnFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint16_t Judgment_Time; //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ʱ<EFBFBD><CAB1>
uint8_t Judgment_Unit; //<2F><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ʱ<EFBFBD>䵥λ
uint8_t Trigger_Thres; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
}VPORT_INFO_STRUCT; //<2F>˿<EFBFBD><CBBF><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9> - <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>д洢<D0B4><E6B4A2><EFBFBD>ݽṹ
typedef struct
{
uint8_t Exist_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˱<EFBFBD><CBB1><EFBFBD> 1:<3A><><EFBFBD><EFBFBD> 2:<3A><><EFBFBD><EFBFBD> 3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4:<3A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Condi_Gruop; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Condi_Subset; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint16_t Judgment_Time; //<2F><><EFBFBD><EFBFBD> - <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint8_t Judgment_Unit; //<2F><><EFBFBD><EFBFBD> - <20>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䵥λ
uint8_t Port_State[VIRTUAL_PORT_MAX]; //0:<3A><><EFBFBD>ж<EFBFBD> 1:<3A><><EFBFBD><EFBFBD> 2:<3A>ͷ<EFBFBD>
uint16_t Timeout_Time; //<2F><><EFBFBD><EFBFBD> - <20>ж<EFBFBD><D0B6><EFBFBD>ʱʱ<CAB1><CAB1>
uint8_t Timeout_Unit; //<2F><><EFBFBD><EFBFBD> - <20>ж<EFBFBD><D0B6><EFBFBD>ʱʱ<CAB1>䵥λ
uint8_t Trigger_Flag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t Trigger_Tick; //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}CONDITION_STRUCT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B9B9>
typedef struct
{
uint8_t Det1sTime; //1s<31><73><EFBFBD>⵱ǰ<E2B5B1><C7B0><EFBFBD><EFBFBD>
uint8_t Det30sTime; //30s дһ<D0B4><D2BB><EFBFBD><EFBFBD>־
uint8_t TriggerNum[VIRTUAL_PORT_MAX]; //1s<31>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t FullFlag[VIRTUAL_PORT_MAX]; //<2F><><EFBFBD><EFBFBD><E2B4B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>־λ
uint8_t Trigger_Thres[VIRTUAL_PORT_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
uint8_t Release_Thres[VIRTUAL_PORT_MAX]; //<2F>ͷ<EFBFBD><CDB7><EFBFBD>ֵ <20><><EFBFBD><EFBFBD>-><3E><><EFBFBD><EFBFBD>
uint16_t DetWinTotalNum[VIRTUAL_PORT_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> Ĭ<><C4AC>12Сʱ(43200<30><30>) <20><>λ<EFBFBD><CEBB>S
uint16_t DetWinTrigger[VIRTUAL_PORT_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>(<28><>)
uint16_t DetWinIdex[VIRTUAL_PORT_MAX]; //<2F><><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
}DETECT_STRUCT; //89B
typedef struct
{
uint32_t PortTick; //<2F>˿ڼ<CBBF><DABC><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD> 4
uint8_t PortInit_Flag; //<2F>˿<EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1
VPORT_STRUCT Port_Info[VIRTUAL_PORT_MAX]; //ӳ<><D3B3><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD> 77
uint8_t PortState[VIRTUAL_PORT_MAX]; //<2F>˿<EFBFBD>״̬ 11
uint8_t PortStateLast[VIRTUAL_PORT_MAX]; //<2F><>һ<EFBFBD>ζ˿<CEB6>״̬ 11
uint8_t PortStateAct[VIRTUAL_PORT_MAX]; //<2F>˿ڶ<CBBF><DAB6><EFBFBD>״̬ 11 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ʹ<EFBFBD><CAB9>
uint32_t PortTiggleTick[VIRTUAL_PORT_MAX]; //<2F>˿ڼ<CBBF>¼<EFBFBD>㰴ʱ<E3B0B4><CAB1><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD>A9IO<49><4F><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>״̬ 44
DETECT_STRUCT DetInfo; //<2F><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ 102
float ActThreshold[VIRTUAL_PORT_MAX]; //ʵ<>ʴ<EFBFBD><CAB4><EFBFBD><EFBFBD><EFBFBD>ֵ 44
uint8_t ExistState; //<2F><><EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t ExistState_Last;
uint8_t ConGroupIndx; //<2F><>ǰ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD>
uint8_t Action; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t CardState; //<2F>п<EFBFBD>״̬
uint8_t CardStateLast; //
uint8_t DetNum; //<2F><><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD><EFBFBD>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
uint8_t Last_ConGroupType; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBA1A2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>¼<EFBFBD>
uint32_t Condition_Trigger_Tick;
uint32_t Last_Trigger_Tick; //<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}VIRTUALCARD_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_ */

View File

@@ -0,0 +1,55 @@
/*
* blv_rs485_dev_hvoutfun.h
*
* Created on: Nov 13, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_HVOUTFUN_H_
#define BLV_485_DRIVER_INC_BLV_NOR_DEV_HVOUTFUN_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define HVoutNumMAX 32 //ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define C1_HVOUTNUMMAX 0x18 //C1Ϊ20·
#define HVout_State_Open 0x01 //ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>״̬ - <20><>
#define HVout_State_Close 0x00 //ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD>״̬ - <20><>
typedef struct
{
uint8_t DevHVoutState[HVoutNumMAX]; //<2F><>ǰǿ<C7B0><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD>豸״̬<D7B4><EFBFBD><E4BBAF>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϵ<D0B6>ǰǿ<C7B0><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>Ǵ򿪻<C7B4><F2BFAABB>ǹر<C7B9>
uint8_t DevHVoutStateLast[HVoutNumMAX]; //<2F><>ǰǿ<C7B0><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevHVoutSaveState[HVoutNumMAX]; //״̬<D7B4><CCAC><EFBFBD><EFBFBD>
uint8_t A9Relay_ReadFlag;
uint8_t HVoutLoopValidNum; //ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t HVoutCtrlCnt; //<2F><><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t HVSwitchFlag; //ǿ<><EFBFBD>ر<EFBFBD>־ 1<><31>ǿ<EFBFBD><EFBFBD><E7BFAA> 0<><30><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ü̵<C3BC><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>Ŀ<EFBFBD><C4BF>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><EFBFBD><E7BFAA>
uint8_t HVSwitchCtrlFlag; //ǿ<><EFBFBD>ؿ<EFBFBD><D8BF>Ʊ<EFBFBD>־ <20><>ǿ<EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD>Ʊ<EFBFBD><C6B1><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD><E4BBAF><EFBFBD>ô˱<C3B4>־
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t RELAYSn; //<2F><>չ<EFBFBD><D5B9>Sn<53><6E>
uint8_t init_flag; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
uint32_t DevC5IOAddr; //C5IO<49><4F><EFBFBD><EFBFBD><E8B1B8>ַ
uint32_t DevChangeFlag; //<2F><EFBFBD><EFBFBD><E4BBAF>־ Ϊ1<CEAA><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
}NOR_HVOUT_INFO; //ǿ<><C7BF><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLV_Nor_Dev_HVout_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint16_t HVout_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
void BLW_HVout_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t DevOutputLoop,uint16_t start);
void BLW_HVout_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
uint16_t BLW_HVout_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start);
uint8_t Get_BLV485_Expand_Online_Status(uint32_t devaddr);
#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_HVOUTFUN_H_ */

View File

@@ -0,0 +1,102 @@
/*
* blv_nor_dev_lvinput.h
*
* Created on: Nov 17, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_NOR_DEV_LVINPUT_H_
#define BLV_485_DRIVER_INC_BLV_NOR_DEV_LVINPUT_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define LVINPUTNUMMAX 20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define C1_LVINPUTNUMMAX 0x07 //C1Ϊ7·
typedef struct{
uint64_t LVinputCH01:2; //1
uint64_t LVinputCH02:2; //2
uint64_t LVinputCH03:2; //3
uint64_t LVinputCH04:2; //4
uint64_t LVinputCH05:2; //5
uint64_t LVinputCH06:2; //6
uint64_t LVinputCH07:2; //7
uint64_t LVinputCH08:2; //8
uint64_t LVinputCH09:2; //9
uint64_t LVinputCH10:2; //10
uint64_t LVinputCH11:2; //11
uint64_t LVinputCH12:2; //12
uint64_t LVinputCH13:2; //13
uint64_t LVinputCH14:2; //14
uint64_t LVinputCH15:2; //15
uint64_t LVinputCH16:2; //16 //<2F><><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڿ<EFBFBD><DABF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint64_t LVinputCH17:2; //17
uint64_t LVinputCH18:2; //18
uint64_t LVinputCH19:2; //19
uint64_t LVinputCH20:2; //20
uint64_t LVinputCH21:2; //21
uint64_t LVinputCH22:2; //22
uint64_t LVinputCH23:2; //23
uint64_t LVinputCH24:2; //24
uint64_t LVinputCH25:2; //25
uint64_t LVinputCH26:2; //26
uint64_t LVinputCH27:2; //27
uint64_t LVinputCH28:2; //28
uint64_t LVinputCH29:2; //29
uint64_t LVinputCH30:2; //30
uint64_t LVinputCH31:2; //31
uint64_t LVinputCH32:2; //32
}DEV_LVINPUTDATA_TYPE; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define INCH6_DI_CH_MAX 0x06
typedef struct
{
uint8_t DevReadBuf[LVINPUTNUMMAX]; //ÿ<><C3BF>λ<EFBFBD><EFBFBD><E6B0B4><EFBFBD><EFBFBD>״̬ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevReadBufLast[LVINPUTNUMMAX]; //ÿ<><C3BF>λ<EFBFBD><EFBFBD><E6B0B4><EFBFBD><EFBFBD>״̬ <20><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD>
uint8_t LVinputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t DevSendCnt; //<2F><><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>
uint8_t DevOffline; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevSn; //<2F>豸Sn<53><6E>
uint8_t Dev_Init_Flag; //<2F><EFBFBD><E8B1B8>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ 2025-09-26
uint8_t Send_Type;
uint8_t DI_Type[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0~3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4~7:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ
uint8_t DI_Start[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>״̬
uint8_t DI_Report_En[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t DI_LastStart[INCH6_DI_CH_MAX];
uint8_t DI_Detection_Time[INCH6_DI_CH_MAX]; //DI<44><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint16_t Version; //IO<49><4F><EFBFBD><EFBFBD><EFBFBD>
uint16_t control_flag; //<2F><><EFBFBD>Ʊ<EFBFBD>־λ
uint16_t DI_set_flag; //DI<44><49><EFBFBD>ñ<EFBFBD>־λ
uint16_t Last_DI_set_flag;
uint16_t DI_Level_Actual_Start;
uint32_t DevC5IOAddr; //C5IO<49><4F><EFBFBD><EFBFBD><E8B1B8>ַ
uint32_t DI_Actual_State;
uint32_t DI_Perfect_State;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>֧<EFBFBD><D6A7>30<33><30><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t HoldTick[LVINPUTNUMMAX];
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
}NOR_LVINPUT_INFO; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ľṹ<C4BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLV_Nor_Dev_LVinput_Init(uint8_t devaddr, uint16_t LoopMax);
uint8_t Dev_LVinput_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
void Dev_LVinput_Dis(uint32_t DevAddr);
#endif /* BLV_485_DRIVER_INC_BLV_NOR_DEV_LVINPUT_H_ */

View File

@@ -0,0 +1,29 @@
/*
* blv_rs485_dev_c12dimming.h
*
* Created on: Nov 17, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_C12DIMMING_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_C12DIMMING_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#include "blv_rs485_dev_ledcrtl.h"
#define C12DIM_OUT_CH_MAX 0x0C //C12Dim<69><6D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>12·
#define C12_SET_LIGHT_CMD 0x21 //<2F>ٷֱ<D9B7><D6B1><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_RS485_C12Dim_Data_Init(Device_Public_Information_G *BUS_Public, RS485_LED_INFO *Rs485LED, uint16_t LoopNum);
uint8_t BLW_C12DimCycleCtrl(uint32_t dev_addr);
uint8_t BLW_Rs485_C12Dim_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
void BLW_Rs485_C12Dim_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo);
void BLW_Rs485_C12Dim_Way_Ctrl(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo);
void BLW_Rs485_C12Dim_Read(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo);
void BLW_C12_GlobalValue_Set(Device_Public_Information_G *BUS_Public, RS485_LED_INFO* Rs485LEDInfo);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_C12DIMMING_H_ */

View File

@@ -0,0 +1,56 @@
/*
* blv_rs485_dev_cardctrl.h
*
* Created on: Nov 14, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_CARDCTRL_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_CARDCTRL_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define CARD_Anonymous_Identity 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define CARD_Guest_Identity 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CARD_Staff_Identity 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>
#define CARD_Identity_3 0x03 //<2F><><EFBFBD><EFBFBD>3
#define CARD_Identity_4 0x04 //<2F><><EFBFBD><EFBFBD>4
#define CARD_Identity_5 0x05 //<2F><><EFBFBD><EFBFBD>5
typedef struct
{
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t Rs485CardAction; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Rs485CardFlag; //<2F>忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>־<EFBFBD><D6BE> <20><><EFBFBD><EFBFBD>
uint8_t Rs485CardFlagLast; //<2F><>һ<EFBFBD>β忨ȡ<E5BFA8><C8A1><EFBFBD><EFBFBD>־λ
uint8_t Rs485CardTypeLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t Rs485CardType; //<2F><>״̬ <20><><EFBFBD><EFBFBD>
uint8_t DevPort; //2024-11-05
uint8_t DevPort_Last; //2024-11-05
uint8_t DevPort_Flag; //2024-11-05
uint8_t DevInitFlag; //2025-08-04 <20>Ե<EFBFBD>һ<EFBFBD><D2BB>ͨѶ<CDA8>Ķ<EFBFBD>ȡ״̬<D7B4><CCAC>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC>״̬<D7B4><CCAC><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ִ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
}RS485_CARD_INFO;
void BLV_RS485_Card_Active_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo);
void BLV_RS485_Card_Polling_Init(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo);
void BLV_RS485_Card_Data_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLV_RS485_Card_Polling_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo);
void BLV_RS485_Card_PortType_Send(Device_Public_Information_G *BUS_Public, RS485_CARD_INFO *Rs485CardInfo);
uint8_t BLV_RS485_Card_Cycle_Dis(uint32_t dev_addr);
uint8_t BLV_Rs485_Card_Check(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
uint8_t Get_BLV485_CARD_Online_Status(uint32_t devaddr);
uint8_t Dev_Rs485_Card_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_CARDCTRL_H_ */

View File

@@ -0,0 +1,158 @@
/*
* blv_rs485_dev_ledcrtl.h
*
* Created on: Nov 17, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_LEDCRTL_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_LEDCRTL_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define CFG_Dev_CtrlWay_Is_Open 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ִ<E8B1B8>з<EFBFBD>ʽΪ<CABD><CEAA>
#define CFG_Dev_CtrlWay_Is_Close 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ִ<E8B1B8>з<EFBFBD>ʽΪ<CABD><CEAA>
#define CFG_Dev_CtrlWay_Is_TOGGLE 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ִ<E8B1B8>з<EFBFBD>ʽΪȡ<CEAA><C8A1>
#define CFG_Dev_CtrlWay_Is_Dim_CycleUp 0x07 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
#define CFG_Dev_CtrlWay_Is_Dim_CycleDown 0x08 //<2F><><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD>
#define CFG_Dev_CtrlWay_Is_Dim_Stop 0x09 //<2F><><EFBFBD><EFBFBD>ֹͣ
#define CFG_Dev_CtrlWay_Is_Dim_Up 0x0A //<2F><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Down 0x0B //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Open 0x0C //<2F><EFBFBD><E3B0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Close 0x0D //<2F><EFBFBD><E3B0B4><EFBFBD>ر<EFBFBD>
#define CFG_Dev_CtrlWay_Is_RelateBlink 0x0E //<2F><><EFBFBD><EFBFBD><EFBFBD>豸ִ<E8B1B8>з<EFBFBD>ʽΪ<CABD><CEAA>Ӧ<EFBFBD><D3A6>˸ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ר<EFBFBD><D7A8><EFBFBD><EFBFBD><EFBFBD>ɽڵ<C9BD><DAB5><EFBFBD><EFBFBD><EFBFBD>485
#define CFG_Dev_CtrlWay_Is_Dim_Up_Step_Cycle 0x0F //<2F><><EFBFBD>ϵ㰴ѭ<E3B0B4><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_OnlySwitch 0x11 //ֻ<><D6BB><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>
#define CFG_Dev_CtrlWay_Is_OnlyBright 0x12 //ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Up_Limit 0x1A //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Down_Limit 0x1B //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_Dim_Up_Step_Cycle_Limit 0x1F //Ψ<><CEA8><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD> <20><><EFBFBD>ϵ㰴ѭ<E3B0B4><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define CFG_Dev_CtrlWay_Is_PWM_Set_Time 0x20 //PWM<57><4D><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
#define CFG_Dev_CtrlWay_Is_A9LD_Set_Time 0x21 //A9LD<4C><44><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
#define CFG_Dev_CtrlWay_Is_A8PB_Set_Time 0x22 //A8PB<50><42><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
#define CFG_Dev_CtrlWay_Is_C12_Set_Time 0x23 //C12<31><32><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
#define CFG_Dev_CtrlWay_Is_RGB_Set_Time 0x24 //RGB<47><42><EFBFBD><EFBFBD><E2BDA5>ʱ<EFBFBD><CAB1>
#define Dim_Global_Value_Cmd 0x30 //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dim_UpLimit_Value_Cmd 0x31 //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Dim_DnLimit_Value_Cmd 0x32 //ȫ<>ֿɵ<D6BF><C9B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef enum{
LED_OUT_CH01,
LED_OUT_CH02,
LED_OUT_CH03,
LED_OUT_CH04,
LED_OUT_CH05,
LED_OUT_CH06,
LED_OUT_CH07,
LED_OUT_CH08,
LED_OUT_CH09,
LED_OUT_CH10,
LED_OUT_CH11,
LED_OUT_CH12,
LED_OUT_CH13,
LED_OUT_CH14,
LED_OUT_CH15,
LED_OUT_CH16,
LED_OUT_CH17,
LED_OUT_CH18,
LED_OUT_CH19,
LED_OUT_CH20,
LED_OUT_CH21,
LED_OUT_CH22,
LED_OUT_CH23,
LED_OUT_CH24,
LED_OUT_CH25,
LED_OUT_CH26,
LED_OUT_CH27,
LED_OUT_CH28,
LED_OUT_CH29,
LED_OUT_CH30,
LED_OUT_CH31,
LED_OUT_CH32,
LED_OUT_CH_MAX,
}RS485_LED_OUT_NUM_E;
#define LED_BUFF_Size LED_OUT_CH_MAX //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
uint8_t DevSendBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7>״̬
uint8_t DevSendBuf_last[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B4A2><EFBFBD>л<EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevSendBufNext[LED_BUFF_Size]; //<2F>޸<EFBFBD>Ϊȫ<CEAA><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t DevSaveBuf[LED_BUFF_Size];
uint8_t DevReadBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·״̬<D7B4><EFBFBD><E4BBAF><EFBFBD>Ʊ<EFBFBD>־
uint8_t DevRecBuf[LED_BUFF_Size]; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD>
uint8_t DevRecBufLast[LED_BUFF_Size]; //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
uint8_t LEDSn; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ʾSn<53><6E>
uint8_t WayCtrli; //<2F><>ʽ<EFBFBD><CABD><EFBFBD>Ƶ<EFBFBD><C6B5>±<EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t LEDUpLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDUpLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDDownLightLimit; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDDownLightLimitLast; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_Global_Value; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_Global_Value_Last; //<2F>ϴ<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t Dim_GV_Flag; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t PWM_Set_Time;
uint8_t A9LD_Set_Time;
uint8_t A8PB_Set_Time;
uint8_t C12_Set_Time;
uint8_t RGB_Set_Time;
uint8_t LEDCtrlCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t LEDLoopValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>·<EFBFBD><C2B7>
uint8_t LEDLightRelease[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD><C9BF><EFBFBD><EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD>
uint8_t LedUpDown[LED_BUFF_Size]; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B7BD>
uint8_t LEDLightnessReadFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t LEDLightnessReadCnt; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȶ<EFBFBD>ȡ<EFBFBD><C8A1>־
uint8_t LEDCycleStep; //<2F><><EFBFBD><EFBFBD>״̬<D7B4><CCAC>
uint8_t DevCtrlWayBuf[LED_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>ʽ
uint8_t DevCtrlWayBuf_last[LED_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t DevCtrlWayContect[LED_BUFF_Size]; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t LEDWayCtrlCnt; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t init_flag; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
uint16_t LEDCtrlFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF>Ʊ<EFBFBD>־
uint16_t LEDWayCtrlFlag; //<2F><><EFBFBD>ʽ<E2B7BD><CABD><EFBFBD>Ʊ<EFBFBD>־
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}RS485_LED_INFO; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_LED_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void BLW_LED_Control_State(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t devaddr,uint16_t loop,uint16_t start);
uint16_t BLW_LED_Read_State(uint32_t devaddr,uint16_t loop);
uint8_t Get_BLV485_LED_Online_Status(uint32_t devaddr);
void BLW_LED_Group_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr,uint32_t devaddr, uint32_t CtrlFlag, uint8_t CtrlNum,uint16_t *start);
uint16_t BLW_LED_Group_Read(uint32_t devaddr, uint8_t SceneType, uint32_t ReadFlag, uint8_t ReadNum,uint16_t *start);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_LEDCRTL_H_ */

View File

@@ -0,0 +1,127 @@
/*
* blv_rs485_dev_switchctrl.h
*
* Created on: Nov 12, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_SWITCHCTRL_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_SWITCHCTRL_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define Key_BUFF_Size 32
#define KeyHoldJudgeTime 400
#define SWI_KEY_LONG_PERIOD 200
#define SWIOUTUPEXIST 0x00 //<2F><><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־
typedef enum{
RS_SWITCH_CH1 = 0x00,
RS_SWITCH_CH2,
RS_SWITCH_CH3,
RS_SWITCH_CH4,
RS_SWITCH_CH5,
RS_SWITCH_CH6,
RS_SWITCH_CH7,
RS_SWITCH_CH8,
RS_SWITCH_CH9,
RS_SWITCH_CH10,
RS_SWITCH_CH11,
RS_SWITCH_CH12,
RS_SWITCH_CH13,
RS_SWITCH_CH14,
RS_SWITCH_CH15,
RS_SWITCH_CH16,
RS_SWITCH_CH17,
RS_SWITCH_CH18,
RS_SWITCH_CH19,
RS_SWITCH_CH20,
RS_SWITCH_CH21,
RS_SWITCH_CH22,
RS_SWITCH_CH23,
RS_SWITCH_CH24,
RS_SWITCH_CH25,
RS_SWITCH_CH26,
RS_SWITCH_CH27,
RS_SWITCH_CH28,
RS_SWITCH_CH29,
RS_SWITCH_CH30,
RS_SWITCH_CH_MAX,
}RS485_SWITCH_NUM_E;
typedef enum
{
KeyNoAction = 0x00, //<2F><><EFBFBD><EFBFBD><EFBFBD>޶<EFBFBD><DEB6><EFBFBD>
KeyPress = 0x01, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̰<EFBFBD>
KeyRelease = 0x02, //<2F><><EFBFBD><EFBFBD><EFBFBD>ɿ<EFBFBD> <20>ͷ<EFBFBD>
KeyHold = 0x03, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
RotaryLight = 0x04, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RotaryVol = 0x05, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
RotaryTemp = 0x06, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
RotaryCCT = 0x07, //<2F><>ת<EFBFBD><D7AA>ɫ<EFBFBD><C9AB>
RotaryOther = 0x08, //<2F><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}keyState_Typedef; //<2F><><EFBFBD><EFBFBD><EBB0B4>״̬ö<CCAC><C3B6>
typedef struct
{
uint8_t DevReadBuf[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ水<DAB4><E6B0B4><EFBFBD><EFBFBD>״̬
uint8_t DevReadBuf_last[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ水<DAB4><E6B0B4><EFBFBD><EFBFBD>״̬
uint8_t DevSendBuf[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD>״̬
uint8_t DevSendBuf_last[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>飬ÿ<E9A3AC><C3BF><EFBFBD>ֽڴ<D6BD>ָʾ<D6B8>Ƶ<EFBFBD><C6B5><EFBFBD>һ<EFBFBD><D2BB>״̬
uint8_t A9IORepeatFlag; //A9IO<49>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD>յ<EFBFBD><D5B5><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE>һ<EFBFBD><D2BB>Sn<53>Ų<EFBFBD><C5B2><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD>ط<EFBFBD><D8B7><EFBFBD>־<EFBFBD><D6BE>0<EFBFBD><30>Sn<53><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtInputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtOutputValidNum; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t SwtRelayLedCtrlFlag; //<2F><><EFBFBD><EFBFBD>ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ʊ<EFBFBD>־
uint8_t SwtRelayLedCtrlCnt; //ָʾ<D6B8>ƿ<EFBFBD><C6BF>Ƽ<EFBFBD><C6BC><EFBFBD>
uint8_t KeyCntChangFlag; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t SwtCycleStep; //<2F><><EFBFBD>ؿ<EFBFBD><D8BF><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ؿ<EFBFBD><D8BF>ƿ<EFBFBD><C6BF><EFBFBD>
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t SwitchSn; //<2F><><EFBFBD><EFBFBD>Sn<53><6E>
uint8_t MultiValidNo[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD> 2024-05-23
uint8_t MultiNumber[Key_BUFF_Size]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ǰִ<C7B0><D6B4><EFBFBD>±<EFBFBD> 2024-05-23
uint8_t RotaryValue_Flag; //<2F><>ťֵ<C5A5><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t RotaryBL; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>״̬
uint8_t RotaryBL_Last; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>״̬
uint8_t RotaryBL_Flag; //<2F><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>
uint8_t RotaryCCTValue_Flag; //<2F><>ťɫ<C5A5><C9AB>ֵ<EFBFBD><EFBFBD><E4BBAF><EFBFBD><EFBFBD>,2025-07-10,YYW
uint8_t RL_Upper_limit; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Upper_limit_Last; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Lower_limit; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Lower_limit_Last; //<2F><><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t RL_Limit_Flag;
uint8_t Rotary_PageFlag; //<2F><>ťҳ<C5A5><D2B3><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD><C3B7>ͱ<EFBFBD><CDB1><EFBFBD>
uint16_t RotaryValue[5]; //<2F><>ť<EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>ֵ
uint32_t Rotary_PageEn; //<2F><>ťҳ<C5A5><D2B3><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint32_t Rotary_PageEnLast;
uint32_t KeyBitValue; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>ֵ 32<33><32>λ<EFBFBD><CEBB><EFBFBD>Ա<EFBFBD>ʾ32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>λ<EFBFBD><CEBB>ʼ<EFBFBD>洢 OCY<43><59><EFBFBD>أ<EFBFBD>1<EFBFBD><31>ʾ<EFBFBD>г<EFBFBD><D0B3><EFBFBD> 0<><30>ʾ<EFBFBD>޳<EFBFBD><DEB3><EFBFBD>
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
}RS485_SWI_INFO; //485<38><35><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
void BLW_RS485_Switch_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
uint8_t Get_Switch_Online_Status(uint32_t devaddr);
uint8_t Dev_Swi_InType_Get(uint32_t DevAddr, uint16_t DevInputLoop, uint16_t DevInputType);
void Dev_Swi_Output_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t DevAddr, uint16_t DevOutputLoop, uint16_t DevOutputType);
uint16_t Dev_Swi_Loop_State(uint32_t devaddr, uint16_t DevOutputLoop);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_SWITCHCTRL_H_ */

View File

@@ -0,0 +1,175 @@
/*
* blv_rs485_dev_tempfun.h
*
* Created on: Nov 13, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_TEMPCTRL_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_TEMPCTRL_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#define TMEP_TYPE_IR 0 //<2F><><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ٲ<EFBFBD><D9B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ̵<C6BC><CCB5><EFBFBD>
#define TEMP_TYPE_VALVE 1 //<2F><><EFBFBD>ŷ<EFBFBD><C5B7>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ٻ<EFBFBD><D9BB><EFBFBD><EFBFBD>Ƽ̵<C6BC><CCB5><EFBFBD>
#define TEM_DecTem 15 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEM_AddTem 33 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEM_DecFan 14 //<2F><><EFBFBD>ٷ<EFBFBD><D9B7><EFBFBD>
#define TEM_AddFan 34 //<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD>
#define TEM_MIN_SET 0x10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEM_MAX_SET 0x20 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_ONOFF_CTRL_MAX 0x03 //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_VALVE_OPEN 0x01 //<2F><><EFBFBD><EFBFBD>
#define TEMP_VALVE_CLOSE 0x00 //<2F><><EFBFBD><EFBFBD>
#define TEMP_ON 0x01 //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_OFF 0x02 //<2F>յ<EFBFBD><D5B5>ػ<EFBFBD>
#define TEMP_STATE_ON 0x01 //<2F>յ<EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD>
#define TEMP_STATE_OFF 0x00 //<2F>յ<EFBFBD>״̬<D7B4>ػ<EFBFBD>
#define TEMP_HIGH 0x03 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_MID 0x02 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_LOW 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_FANAUTO 0x00 //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>
#define TEMP_COLD 0x01 //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_HOT 0x02 //<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>
#define TEMP_WIND 0x03 //<2F>յ<EFBFBD><D5B5>ͷ<EFBFBD>
#define TEMP_MODEAUTO 0x00 //<2F>յ<EFBFBD>ģʽ<C4A3>Զ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>Ψ<EFBFBD><CEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD>ƿյ<C6BF>ʱ <20>Ŵ<EFBFBD><C5B4><EFBFBD> <20>ϱ<EFBFBD><CFB1>յ<EFBFBD><D5B5><EFBFBD>״̬<D7B4><CCAC>û<EFBFBD><C3BB><EFBFBD>Զ<EFBFBD>
#define TEMTEMPCONVER(data) ((0x00 == data)?TEM_MAX_SET:data) //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32<33><32>
typedef struct
{
uint8_t indoor_t ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t set_t ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t valve ; // 1<><31><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD>
uint8_t fan ; // 1<><31><EFBFBD><EFBFBD>,2<><32><EFBFBD><EFBFBD>,3<><33><EFBFBD><EFBFBD>,0ֹͣ,4<>Զ<EFBFBD>
uint8_t mode ; // 1<><31><EFBFBD><EFBFBD>,2<><32><EFBFBD><EFBFBD>,3<>ͷ<EFBFBD>,0<>Զ<EFBFBD>
uint8_t on_off ; // 1<><31>,2<><32>
}TemState_Struct;
typedef struct
{
uint8_t IndoorFlag:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6>жϱ<D0B6>־
uint8_t SetTFlag:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><C2B6>жϱ<D0B6>־
uint8_t ValveFlag:1; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
uint8_t FanFlag:1; //<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
uint8_t ModeFlag:1; //ģʽ<C4A3>жϱ<D0B6>־
uint8_t OnOffFlag:1; //<2F><><EFBFBD>ػ<EFBFBD><D8BB>жϱ<D0B6>־
uint8_t IndoorState:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t SetTState:1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t HValveFlag:1; //<2F>ȷ<EFBFBD><C8B7>жϱ<D0B6>־
uint8_t HValveState:1; //<2F>ȷ<EFBFBD>״̬
uint8_t ValveState:1; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t FanState:2; //<2F><><EFBFBD><EFBFBD>״̬
uint8_t ModeState:2; //ģʽ״̬
uint8_t OnOffState:1; //<2F><><EFBFBD>ػ<EFBFBD>״̬
}TemCond_Struct; //<2F><>һ<EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>״̬һ<CCAC><D2BB><EFBFBD>ж<EFBFBD> <20>ǵ<EFBFBD>һ<EFBFBD>ж<EFBFBD>ʱ<EFBFBD><CAB1>ֻ<EFBFBD><D6BB><EFBFBD>жϱ<D0B6>־λ
typedef struct
{
uint8_t TemIndoorCtrlVar ; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȿ<C2B6><C8BF>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t TemSetTCtrlVar ; //<2F><><EFBFBD><EFBFBD><EFBFBD>¶ȿ<C2B6><C8BF>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t TemValveCtrlVar ; //<2F><><EFBFBD>ſ<EFBFBD><C5BF>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t TemFanCtrlVar ; //<2F><><EFBFBD>ٿ<EFBFBD><D9BF>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t TemModeCtrlVar ; //ģʽ<C4A3><CABD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t TemOnOffCtrlVar ; //<2F><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD>Ʊ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}TemStateCtrlVar_Struct;
typedef struct
{
BLV_COMM_RECORD_G comm_record; //ͨѶ<CDA8><D1B6>¼
TemState_Struct TemState;
TemState_Struct TemStateCtrl; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD>״̬
TemState_Struct TemStateCtrlLast; //<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>һ<EFBFBD><D2BB>״̬
TemStateCtrlVar_Struct TemStateCtrlFlag; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʊ<EFBFBD>־
TemStateCtrlVar_Struct TemStateCtrlCnt; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƽ<EFBFBD><C6BC><EFBFBD>
TemCond_Struct TemCondCfg; //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>һ<CEBB><D2BB>Ϊ1ʱ<31><CAB1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>һ<EFBFBD><D2BB><EFBFBD><EFBFBD> <20><>6λ2<CEBB><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1ʱ<31><CAB1>Ϊ<EFBFBD>ǵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TemCond_Struct TemCondRec; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ղ<EFBFBD><D5B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>6λΪ<CEBB><CEAA><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD> <20><>10λΪ<CEBB><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t FanAutoRelay; //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>״̬
uint8_t FanAutoFlag; //Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>٣<EFBFBD>Ϊ1<CEAA><31><EFBFBD><EFBFBD>Э<EFBFBD><D0AD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
uint8_t relay_out; //0λ<30><CEBB><EFBFBD><EFBFBD><31><CEBB><EFBFBD><EFBFBD><32><CEBB><EFBFBD><EFBFBD><33>ȷ<EFBFBD><34>
uint8_t ValveSameFlag; //<2F><><EFBFBD>ȷ<EFBFBD>һ<EFBFBD><D2BB>Ϊ1 <20><>һ<EFBFBD><D2BB>Ϊ2 //2023-04-17
uint8_t control_start; //<2F><><EFBFBD>ؿ<EFBFBD><D8BF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>״̬
TemState_Struct TemStateVir; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD>״̬<D7B4><EFBFBD>Ƚ<EFBFBD> <20><>δ<EFBFBD><CEB4>
TemState_Struct TemStateLast; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>״̬ <20><><EFBFBD><EFBFBD>״̬<D7B4><EFBFBD>ϱ<EFBFBD>
TemState_Struct TemKeepState;
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD> ռ
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t DevOfflineLast; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> ռ
uint8_t TemCycleCnt; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LF<4C>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ר<EFBFBD><D7A8>
uint8_t TemDataChangeFlag; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸı<DDB8><C4B1><EFBFBD>־
uint8_t TempType; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м̵<D0BC><CCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5>ŷ<EFBFBD><C5B7>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><30><CEAA><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><31><CEAA><EFBFBD>ŷ<EFBFBD><C5B7>¿<EFBFBD><C2BF><EFBFBD>
uint8_t TempComSetFlag; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>ñ<EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊ1<CEAA><31>C43<34><33><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>²
uint8_t TempComSetCnt; //<2F>¿<EFBFBD><C2BF><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD><EFBFBD>ü<EFBFBD><C3BC><EFBFBD>
uint8_t CardEn; //2023-12-26 <20>忨״̬ͬ<CCAC><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>
uint8_t CardFlag; //2023-12-26 <20>忨״̬ͬ<CCAC><CDAC><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD>
uint8_t CardCnt; //2023-12-26 <20>忨״̬ͬ<CCAC><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t ValveNoExist; //2024-06-27 ˮ<><CBAE><EFBFBD>޷<EFBFBD><DEB7><EFBFBD><EFBFBD><EFBFBD>
uint8_t DevPort; //2024-11-05
uint8_t DevPort_Last; //2024-11-05
uint8_t DevPort_Flag; //2024-11-05
uint8_t inif_flag; //2025-08-21 <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>־λ
uint8_t Carbon_Set_Temp; //2025-10-13 <20><>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
uint8_t udp_flag; //2025-10-13 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϱ<EFBFBD><CFB1><EFBFBD>־λ
uint32_t udp_tick; //2025-10-13
uint32_t inquire_tick; //ѯ<><D1AF>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}RS485_TEMP_INFO; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBBAAF>
typedef struct
{
TemState_Struct TemState; //
uint8_t FanAutoRelay; //<2F><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>̵<EFBFBD><CCB5><EFBFBD><EFBFBD><EFBFBD>״̬
}RS485_TEMP_BASIC; //485<38>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef void (*RS485_Tem_CycleCtrl_ptr)(Device_Public_Information_G *BUS_Public); //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef void (*RS485_Tem_Ctrl_ptr)(Device_Public_Information_G *BUS_Public,RS485_TEMP_INFO *Rs485Tem, uint8_t CtrlWay); //<2F><><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void BLW_RS485_TempFun_For_Logic_Init(LOGICFILE_DEVICE_INFO *dev_info,uint8_t *data,uint16_t data_len);
void Dev_Temp_State_Sync(TemState_Struct *temp,TemState_Struct *sync_temp);
uint16_t Dev_Temp_State_Data(TemState_Struct temp);
uint8_t Dev_TEMPCTRL_InType_Get(uint32_t CfgDevAddIn, uint16_t DevInputLoop, uint16_t DevInputType);
void Dev_TEMPCTRL_Ctrl(uint32_t CfgDevAddIn, uint16_t DevInputAddr, uint32_t CfgDevAddOut, uint16_t DevOutputLoop, uint16_t DevOutputType);
uint8_t Get_BLV485_TEMP_Online_Status(uint32_t devaddr);
uint16_t Get_BLV485_TEMP_Status(uint32_t devaddr,uint16_t loop);
uint8_t TemSingleJudge(uint32_t CfgDevAdd, RS485_Tem_Ctrl_ptr Rs485TemCtrl, RS485_Tem_CycleCtrl_ptr Rs485TemCycle);
uint8_t TemGlobalJudge(uint32_t CfgDevAdd, RS485_Tem_Ctrl_ptr Rs485TemCtrl, RS485_Tem_CycleCtrl_ptr Rs485TemCycle);
void Temp_Action_Set(RS485_TEMP_BASIC *Rs485TemRecBuf, RS485_TEMP_INFO *Rs485Tem);
void Temp_Action_Set(RS485_TEMP_BASIC *Rs485TemRecBuf, RS485_TEMP_INFO *Rs485Tem);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_TEMPCTRL_H_ */

View File

@@ -0,0 +1,27 @@
/*
* blv_rs485_dev_touchswitch.h
*
* Created on: Nov 13, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHSWITCH_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHSWITCH_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "logic_file_function.h"
#include "blv_rs485_dev_switchctrl.h"
void BLV_485_Dev_Touch_Switch_Init(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo);
void BlwRelaySwtRecAsk(uint8_t *data);
void BlwTouchSwtRecAsk(uint32_t DevAdd, uint8_t *data, uint16_t DataLen);
void BLW_Touch_Rs485_Swi_Pro(Device_Public_Information_G* BUS_Public, uint8_t *data, RS485_SWI_INFO *Switch_Info, uint8_t lens);
uint8_t BLW_Rs485_Touch_Swi_Check(uint32_t DevAdd ,uint32_t Data_addr, uint16_t DataLen);
void BLW_Touch_Switch_ctrl(Device_Public_Information_G *BUS_Public, RS485_SWI_INFO *Rs485SwiInfo);
uint8_t BLW_Touch_SwitchCycleDis(uint32_t DevAdd);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHSWITCH_H_ */

View File

@@ -0,0 +1,24 @@
/*
* blv_rs485_dev_touchtempt1.h
*
* Created on: Nov 14, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHTEMPT1_H_
#define BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHTEMPT1_H_
#include <stdint.h>
#include "blv_rs485_protocol.h"
#include "blv_rs485_dev_tempctrl.h"
void BLWOut_RS485_TempT1_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1);
void BLWOut_RS485_TempT1D_Data_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1);
void BLWOut_RS485_TempT1_Activ_Init(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485TempT1);
void BLWOut_tempT1CardCtrl(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485Tem);
void BLV_T1Temp_PortSet_Send(Device_Public_Information_G *BUS_Public, RS485_TEMP_INFO *Rs485Tem);
#endif /* BLV_485_DRIVER_INC_BLV_RS485_DEV_TOUCHTEMPT1_H_ */

View File

@@ -0,0 +1,114 @@
/*
* pc_devicetest_fun.h
*
* Created on: Nov 10, 2025
* Author: cc
*/
#ifndef BLV_485_DRIVER_INC_PC_DEVICETEST_FUN_H_
#define BLV_485_DRIVER_INC_PC_DEVICETEST_FUN_H_
#include <stdint.h>
#define PCTESTTYPE 0xF2 //<2F>豸Э<E8B1B8><D0AD> - <20><><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>ͨѶЭ<D1B6><D0AD>ʹ<EFBFBD><CAB9>
#define DEV_PCTEST_TYPE 0xF2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define DEV_PCTEST_Addr 0xFC //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1>е<EFBFBD><D0B5><EFBFBD><E8B1B8>ַ
#define BLV_PC_TEST_SearchMCU_CMD 0x01 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_SyncTime_CMD 0x02 //ͬ<><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define BLV_PC_TEST_QueryTime_CMD 0x03 //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define BLV_PC_TEST_ConfigInfo_CMD 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>·<EFBFBD> - <20>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_PC_TEST_ReadRegister_CMD 0x05 //<2F><>ȡӳ<C8A1><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_WriteRegister_CMD 0x06 //дӳ<D0B4><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_StartTesting_CMD 0x07 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define BLV_PC_TEST_SetBaud_CMD 0x08 //<2F><><EFBFBD><EFBFBD>PC<50>˿ڽ<CBBF><DABD><EFBFBD>
#define BLV_PC_SET_DEBUG_CMD 0x09 //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>0 - Debug<75><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_PC_TEST_GPIO_CMD 0x0A //<2F><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD>
#define BLV_PC_SET_MCU_Revision_CMD 0x0B //<2F><><EFBFBD><EFBFBD>MCU<43><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>Flash<73><68>
#define BLV_PC_READ_MCU_Revision_CMD 0x0C //<2F><>ȡMCU<43><EFBFBD><E6B1BE>
#define BLV_PC_SET_MQTT_CMD 0x0D //<2F><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD>
#define BLV_PC_READ_MQTT_CMD 0x0E //<2F><>ȡMQTT<54><54><EFBFBD><EFBFBD>
#define BLV_PC_CORE_TEST_CMD 0x0F //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_READ_RCU_Data_CMD 0x10 //<2F><>ȡRCU<43><55><EFBFBD><EFBFBD> - 2022-06-06 <20><><EFBFBD><EFBFBD>
#define BLV_PC_READ_Device_Data_CMD 0x21 //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ
#define BLV_PC_READ_RCU_VERSION_CMD 0x22 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>laucher<65><72><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>
#define BLV_PC_TEST_SearchMCU_Relay 0x11 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_SyncTime_Relay 0x12 //<2F>ظ<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define BLV_PC_TEST_QueryTime_Relay 0x13 //<2F>ظ<EFBFBD><D8B8><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define BLV_PC_TEST_ConfigInfo_Relay 0x14 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>·<EFBFBD> - <20>·<EFBFBD><C2B7><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_PC_TEST_ReadRegister_Relay 0x15 //<2F>ظ<EFBFBD><D8B8><EFBFBD>ȡӳ<C8A1><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_WriteRegister_Relay 0x16 //<2F>ظ<EFBFBD>дӳ<D0B4><D3B3><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define BLV_PC_TEST_StartTesting_Relay 0x17 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define BLV_PC_TEST_SetBaud_Relay 0x18 //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>PC<50>˿ڲ<CBBF><DAB2><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ+
#define BLV_PC_SET_DEBUG_Relay 0x19 //<2F><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>0 - Debug<75><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
#define BLV_PC_TEST_GPIO_Relay 0x1A //<2F><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD>
#define BLV_PC_SET_MCU_Revision_Relay 0x1B //<2F><><EFBFBD><EFBFBD>MCU<43><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD>Flash<73><68>
#define BLV_PC_READ_MCU_Revision_Relay 0x1C //<2F><>ȡMCU<43><EFBFBD><E6B1BE>
#define BLV_PC_SET_MQTT_Relay 0x1D //<2F><><EFBFBD><EFBFBD>MQTT<54><54><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_PC_READ_MQTT_Relay 0x1E //<2F><>ȡMQTT<54><54><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>
#define BLV_PC_CORE_TEST_Relay 0x1F //<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>Իظ<D4BB>
#define BLV_PC_READ_RCU_Data_Relay 0x20 //<2F><>ȡRCU<43><55><EFBFBD>ݻظ<DDBB> - 2022-06-06 <20><><EFBFBD><EFBFBD>
#define BLV_PC_READ_Device_Data_Relay 0x31 //<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ<EFBFBD>ظ<EFBFBD> - 2024-05-22 <20><><EFBFBD><EFBFBD>
#define BLV_PC_READ_RCU_VERSION_Relay 0x32 //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>̼<EFBFBD><CCBC><EFBFBD>laucher<65><72><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD> - 2025-07-05 <20><><EFBFBD><EFBFBD>
typedef struct{
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t link_port; //PC <20><><EFBFBD>Ӷ˿<D3B6>
uint8_t link_flag; //PC <20><><EFBFBD>ӱ<EFBFBD>־λ
uint8_t test_flag; //PC <20><><EFBFBD>Ա<EFBFBD>־λ - 0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,0x03Ѳ<33>ز<EFBFBD><D8B2><EFBFBD>
uint8_t test_dev; //PC <20><><EFBFBD><EFBFBD><EFBFBD>
uint8_t test_addr; //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8B1B8>ַ
uint8_t tour_num; //Ѳ<>ش<EFBFBD><D8B4><EFBFBD>
uint8_t tour_succ; //Ѳ<>سɹ<D8B3><C9B9><EFBFBD><EFBFBD><EFBFBD>
uint8_t pc_ip[4]; //PC<50><43>IP<49><50>ַ
uint16_t pc_port; //PC<50>Ķ˿<C4B6>
uint32_t tour_tick; //Ѳ<>ز<EFBFBD><D8B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t core_tick; //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
uint32_t link_baud; //PC ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}PC_TEST_FLAG_G;
typedef struct
{
uint8_t DevSendCnt; //<2F><EFBFBD><E8B1B8><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>лظ<D0BB><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
uint8_t DevOffline; //<2F><EFBFBD><E8B1B8><EFBFBD>߱<EFBFBD>־ 1<><31><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> 0<><30><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
uint8_t DevSendSN; //<2F><><EFBFBD><EFBFBD>SN<53><4E>
uint8_t send_flag;
uint8_t test_flag; //PC <20><><EFBFBD>Ա<EFBFBD>־λ - 0x01<30><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>0x02<30><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint32_t test_time; //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
uint32_t test_tick; //PC <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
}PC_TEST_DEVICE_INFO;
extern PC_TEST_FLAG_G g_pc_test;
void BLV_PC_DEVICE_TEST_Init(void);
uint8_t BLV_PC_DEVICE_TEST_Cycle_Call(uint32_t dev_addr);
uint8_t BLV_PC_DEVICE_TEST_Data_Processing(uint32_t dev_addr,uint32_t data_addr,uint16_t len);
uint8_t BLV_PC_ReadRegister_DataDeal(uint32_t data_addr,uint16_t len);
uint8_t BLV_PC_WriteRegister_DataDeal(uint32_t data_addr,uint16_t len);
uint8_t BLV_PC_Testing_DataDeal(uint32_t data_addr,uint16_t len);
uint8_t BLV_PC_Testing_Data_Reported(uint8_t type,uint8_t dev_type,uint8_t dev_addr,uint32_t data_addr,uint8_t data_len);
uint8_t BLV_PC_Testing_Data_Reported2(uint8_t type,uint8_t dev_type,uint8_t dev_addr,uint8_t *data_buff,uint8_t data_len);
uint8_t BLV_PC_TEST_TOUR_DATASEND(void);
uint8_t BLV_PC_TEST_TOUR_DATASEND2(void);
uint8_t BLV_PC_TEST_TOUR_DATACheck(uint32_t data_addr,uint16_t len);
uint8_t BLV_PC_TEST_TOUR_ACKSend(uint8_t ack_data);
uint8_t BLV_PC_SET_MCU_Revision_Data_Reported(uint32_t data_addr,uint8_t data_len);
uint8_t BLV_PC_READ_MCU_Revision_Data_Reported(uint32_t data_addr,uint8_t data_len);
uint8_t BLV_PC_READ_RCU_Data_Reported(uint32_t data_addr,uint8_t data_len);
uint8_t BLV_PC_READ_RCU_VERSION_Reported(uint32_t data_addr,uint8_t data_len);
uint8_t BLV_PC_READ_Device_Data_Reported(uint32_t data_addr,uint8_t data_len);
uint8_t SyncTime_DATA_Processing(uint32_t data_addr,uint16_t data_len);
uint16_t QueryTime_Relay_DATA_Packaging(uint32_t data_addr,uint16_t data_len);
uint8_t TEST_GPIO_Relay_Fail(void);
#endif /* BLV_485_DRIVER_INC_PC_DEVICETEST_FUN_H_ */

File diff suppressed because it is too large Load Diff