📄 holley_d.c
字号:
#include "app/sensor/common.h"
#include "Holley.h"
#ifdef SINK_APP
HL_Buffered_Data sUart_Buffer;
int16u ticksSinceLastHeard[EMBER_BINDING_TABLE_SIZE-1];
int16u timeBeforeSinkAdvertise;
#endif
#ifdef SENSOR_APP
int8u aucUart_Buffer[HL_UART_BUFFER_SIZE];
int16u uiUart_Point;
BOOL bUART_Frame_To_Process; // 从串口接收到完整数据,等待处理
int8u ucProcessed_Package; // 在分包发送时,已经处理完毕的包数
int16u uiUART_Last_Output_Time;// 串口上一帧数据输出时间
BOOL bWaiting_UART_Respond; // 从串口发送数据后,等待回应
int16u uiUart_Resp_Time_Out; // 等待串口响应超时时间
int8u ucSensor_Back_Off_State;// 等待随机延时的状态
int16u uiBack_Off_Start_Time; // 随机延时开始时间
int16u uiBack_Off_Time; // 随机延时的时间长度
int16u uiMeter_Disc_Sequence; // 电表发现的进程
int8u ucFreeze_Meter_Sequence;// 数据冻结的电表进程
int8u ucFreeze_ID_Sequence; // 数据冻结的数据标识进程
int8u aucFrozen_Data[HL_MAX_FROZEN_DATA_LENGTH];
int8u ucSensor_State; // 当前状态, 包含电表发现和数据冻结状态
#endif
int8u ucReset_Token = 0;
int8u ucCurrent_MSG = 0;
int8u aucRF_MSG_Index[HL_MAX_PACKAGE_NUMBER]; // RF 数据在 LinkedBuffers
// 中的索引
int8u aucSwam[HL_SWAM_SIZE];
int16u uiUART_Last_Receive_Time= 0; // 串口上一次数据接收时间
HL_Full_Time sCurrent_Time; // 当前时间
HL_Device_Info PGM sHL_Device_Info = {
{'0','2','0','1'}, // aucSoftware_Version[4]
{'0','1','2','0'}, // aucHardware_Version[4]
{'0','1','1','0'}, // aucOD_Version[4]
{'H','O','L','L','E', // aucManufacture[12]
'Y',' ','M','E','T',
'E','R'
},
PROFILE_ID, // uiProfile_ID
{ 0,0,0,0,0,0,0,0,0,0, // aucReserved[22]
0,0,0,0,0,0,0,0,0,0,
0,0
}
};
/************************************************************************/
/* 以下是 Token 数据的缺省值 */
/************************************************************************/
HL_Network_Para PGM sHL_Network_Para =
{
APP_CHANNEL, // ucCurrent_Channel
FALSE, // bCompress_Enable
FALSE, // bEncrypt_Enable
APP_POWER, // ucTransmit_Power
{ 0,0,0,0,0,0,0,0, // aucPWD[16]
0,0,0,0,0,0,0,0
},
APP_PANID, // uiPAN_ID
0, // ucGroup_ID
{ 0,0,0,0,0,0,0,0,0,0, // aucReserved[25]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0
}
};
#ifdef SINK_APP
HL_AMR_Para_Gateway PGM sHL_AMR_Para_Gateway =
{
900, // uiAD_Cycle
3, // ucRespond_Timeout
3, // ucRepeat_Time
{1, 1, 0, 0}, // sUp_Load_Time
24, // ucCollect_Cycle
1, // ucRequire_Resp
HL_RESP_SW_VERSION, // ucResp_Contents
HL_BROADCAST_RADIUS, // ucAD_Radius
0, // bReturn_Flow_Ctrl
{0,0,0,0,0,0,0,0,0,0, // aucReserved[27]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0
}
};
#endif
#ifdef SENSOR_APP
HL_AMR_Para_Config PGM sHL_AMR_Para_Config =
{
3, // ucBaud_Rate = 1200
0, // ucReserved
480, // uiRead_Cycle= 480 min
{ 1, 1, 0, 0 }, // sTime_Stamp
50, // uiUART_Frame_Gap
200, // uiUART_Resp_Timeout
HL_METER_APPLICATION, // ucApplication, HL_METER_APPLICATION = 0 - 电表
HL_CONN_TO_METER_RS485, // ucConnection_To_Meter, HL_CONN_TO_METER_RS485 = 0 - RS485
4, // ucRandom_Delay_Scale, 4 - 右移4位,相当于除16
{0,0,0,0,0,0,0,0,0,0, // aucReserved[13]
0,0,0
}
};
HL_AMR_Data_IDs PGM sHL_AMR_Data_IDs =
{
0, // ucData_ID_Numb
{ 0, 0, 0 }, // aucReserved[3]
{ 0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0, // aucData_IDs[24]
0,0,0,0
}
};
HL_AMR_Meter_Addr_Low PGM sHL_AMR_Meter_Addr_Low =
{
0, // ucMeter_Numb
FALSE, // bDiscover_Meter
{ 0,0 }, // aucReserved[2]
{ 0,0,0,0,0,0,0,0,0,0, // aucMeter_Addr_Low_A[48]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
},
{ 0,0,0,0,0,0,0,0,0,0, // aucMeter_Addr_Low_B[48]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
}
};
HL_AMR_Meter_Addr_High PGM sHL_AMR_Meter_Addr_High =
{
0, // ucMeter_Numb
{ 0,0,0 }, // aucReserved[3]
{ 0,0,0,0,0,0,0,0,0,0, // aucMeter_Addr_High_A[48]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
},
{ 0,0,0,0,0,0,0,0,0,0, // aucMeter_Addr_High_B[48]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
}
};
HL_AMR_Unrespond_Meters PGM sHL_AMR_Unrespond_Meters =
{
0, // ucMeter_Numb
{ 0,0,0 }, // aucReserved[3]
{ 0,0,0,0,0,0,0,0,0,0, // aucMeter_Addr_Low[36]
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0
}
};
#endif // #ifdef SENSOR_APP
/************************************************************************/
/* 以下是 OD 描述数据 */
/************************************************************************/
Struct_OD PGM sHL_Device_Info_OD = // HL_Device_Info 的描述
{
HL_DEVICE_INFO_INDEX, // uiIndex = 0
(void*)&sHL_Device_Info, // pvLocal_Address
6, // ucElement_Number
{
{ // aucSoftware_Version[4]
HL_DT_VIS_STRING, // ucElement_Type
0, // ucElement_Unit
4, // ucElement_Length
0, // ucDecimal_Point
HL_RO_ACCESS // ucAccess
},
{ HL_DT_VIS_STRING, 0, 4, 0, HL_RO_ACCESS }, // aucHardware_Version[4]
{ HL_DT_VIS_STRING, 0, 4, 0, HL_RO_ACCESS }, // aucOD_Version[4]
{ HL_DT_VIS_STRING, 0, 12,0, HL_RO_ACCESS }, // aucManufacture[12]
{ HL_DT_INTEGER_16, 0, 2, 0, HL_RO_ACCESS }, // uiProfile_ID
{ HL_DT_VIS_STRING, 0, 22,0, HL_NON_ACCESS}, // aucReserved[22]
}
};
Struct_OD PGM sHL_Network_Para_OD = // HL_Network_Para 的描述
{
HL_NETWORK_PARAMETER_INDEX, // uiIndex = 1001
0, // pvLocal_Address
8, // ucElement_Number
{
{ // ucCurrent_Channel
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_BOOL, 0, 1, 0, HL_RW_ACCESS }, // bCompress_Enable
{ HL_DT_BOOL, 0, 1, 0, HL_RW_ACCESS }, // bEncrypt_Enable
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // cTransmit_Power
{ HL_DT_VIS_STRING, 0, 16,0, HL_WO_ACCESS }, // aucPWD[16]
{ HL_DT_INTEGER_16, 0, 2, 0, HL_RW_ACCESS }, // uiPAN_ID
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucGroup_ID
{ HL_DT_VIS_STRING, 0, 25,0, HL_NON_ACCESS}, // aucReserved[25]
}
};
Struct_OD PGM sCurrent_Time_OD = // HL_Full_Time 的描述
{
HL_CURRENT_TIME_INDEX, // uiIndex = 1002
(void*)&sCurrent_Time, // pvLocal_Address
8, // ucElement_Number
{
{ // ucYear
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucMonth
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucDate
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucWeek
{ HL_DT_INTEGER_8, 0, 1 ,0, HL_RW_ACCESS }, // ucHour
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucMinute
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucSecond
{ HL_DT_INTEGER_8, 0, 1, 0, HL_NON_ACCESS},// ucReserved
}
};
Struct_OD PGM sHL_Neighbor_Table_OD = // HL_Neighbor_Table 的描述
{
HL_NEIGHBOR_TABLE_INDEX, // uiIndex = 1003
0, // pvLocal_Address
5, // ucElement_Number
{
{ // aucLong_Address[8]
HL_DT_VIS_STRING, // ucElement_Type
0, // ucElement_Unit
8, // ucElement_Length
0, // ucDecimal_Point
HL_RO_ACCESS // ucAccess
},
{ HL_DT_INTEGER_16,0, 2, 0, HL_RO_ACCESS }, // uiShort_Address
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RO_ACCESS }, // ucNeighbor_Numb
{ HL_DT_INTEGER_8, 0, 1, 0, HL_NON_ACCESS}, // ucReserved
{ HL_DT_VIS_STRING,0, 36, 0, HL_RO_ACCESS }, // aucNeighbor_Table[36]
}
};
#ifdef SINK_APP
Struct_OD PGM sHL_AMR_Para_Gateway_OD = // HL_AMR_Para_Gateway 的描述
{
HL_AMR_PARA_GATEWAY_INDEX, // uiIndex = 1005
0, // pvLocal_Address
10, // ucElement_Number
{
{ // uiAD_Cycle
HL_DT_INTEGER_16, // ucElement_Type
HL_UT_SECOND, // ucElement_Unit
2, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_INTEGER_8, HL_UT_MINUTE,1, 0, HL_RW_ACCESS }, // ucRespond_Timeout
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucRepeat_Time
{ HL_DT_MID_TIME, 0, 4, 0, HL_RW_ACCESS }, // sUp_Load_Time
{ HL_DT_INTEGER_8, HL_UT_HOUR, 1, 0, HL_RW_ACCESS }, // ucCollect_Cycle
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucRequire_Resp
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucResp_Contents
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucAD_Radius
{ HL_DT_BOOL, 0, 1, 0, HL_RW_ACCESS }, // bReturn_Flow_Ctrl
{ HL_DT_VIS_STRING,0, 27, 0, HL_NON_ACCESS} // aucReserved[27]
}
};
OD_Entry PGM sOD_Entry[HL_OD_ENTRY_NUMBER] =
{
{ HL_STRUCT_OD, HL_DEVICE_INFO_INDEX, ( void* )&sHL_Device_Info_OD },
{ HL_STRUCT_OD, HL_NETWORK_PARAMETER_INDEX, ( void* )&sHL_Network_Para_OD },
{ HL_STRUCT_OD, HL_CURRENT_TIME_INDEX, ( void* )&sCurrent_Time_OD },
{ HL_STRUCT_OD, HL_NEIGHBOR_TABLE_INDEX, ( void* )&sHL_Neighbor_Table_OD },
{ HL_STRUCT_OD, HL_AMR_PARA_GATEWAY_INDEX, ( void* )&sHL_AMR_Para_Gateway_OD }
};
#endif
#ifdef SENSOR_APP
Struct_OD PGM sHL_AMR_Para_Config_OD = // HL_AMR_Para_Config 的描述
{
HL_AMR_PARA_CONFIG_INDEX, // uiIndex = 1006
0, // pvLocal_Address
10, // ucElement_Number
{
{ // ucBaud_Rate
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_INTEGER_8, 0, 1, 0, HL_NON_ACCESS}, // ucReserved
{ HL_DT_INTEGER_16, HL_UT_MINUTE, 2, 0, HL_RW_ACCESS }, // uiRead_Cycle
{ HL_DT_MID_TIME, 0, 4, 0, HL_RW_ACCESS }, // sTime_Stamp
{ HL_DT_INTEGER_16, HL_UT_MILLI_SCND, 2, 0, HL_RW_ACCESS }, // uiUART_Frame_Gap
{ HL_DT_INTEGER_16, HL_UT_MILLI_SCND, 2, 0, HL_RW_ACCESS }, // uiUART_Resp_Timeout
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucApplication
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucConnection_To_Meter
{ HL_DT_INTEGER_8, 0, 1, 0, HL_RW_ACCESS }, // ucRandom_Delay_Scale
{ HL_DT_VIS_STRING, 0, 13, 0, HL_NON_ACCESS} // aucReserved[13]
}
};
Struct_OD PGM sHL_AMR_Data_IDs_OD = // HL_AMR_Data_IDs 的描述
{
HL_AMR_DATA_IDS_INDEX, // uiIndex = 1007
0, // pvLocal_Address
3, // ucElement_Number
{
{ // ucData_ID_Numb
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_VIS_STRING, 0, 3, 0, HL_NON_ACCESS}, // aucReserved[3]
{ HL_DT_VIS_STRING, 0, 24, 0, HL_RW_ACCESS }, // aucData_IDs[24]
}
};
Struct_OD PGM sHL_AMR_Meter_Addr_Low_OD = // HL_AMR_Meter_Addr_Low 的描述
{
HL_AMR_METER_ADDR_LOW_INDEX, // uiIndex = 1008
0, // pvLocal_Address
5, // ucElement_Number
{
{ // ucMeter_Numb
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_BOOL, 0, 1, 0, HL_RW_ACCESS }, // bDiscover_Meter
{ HL_DT_VIS_STRING, 0, 2, 0, HL_NON_ACCESS}, // aucReserved[2]
{ HL_DT_VIS_STRING, 0, 48, 0, HL_RW_ACCESS }, // aucMeter_Addr_Low_A[48]
{ HL_DT_VIS_STRING, 0, 48, 0, HL_RW_ACCESS }, // aucMeter_Addr_Low_B[48]
}
};
Struct_OD PGM sHL_AMR_Meter_Addr_High_OD = // HL_AMR_Meter_Addr_High 的描述
{
HL_AMR_METER_ADDR_HIGH_INDEX, // uiIndex = 1009
0, // pvLocal_Address
4, // ucElement_Number
{
{ // ucMeter_Numb
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_VIS_STRING, 0, 3, 0, HL_NON_ACCESS}, // aucReserved[3]
{ HL_DT_VIS_STRING, 0, 48, 0, HL_RW_ACCESS }, // aucMeter_Addr_High_A[48]
{ HL_DT_VIS_STRING, 0, 48, 0, HL_RW_ACCESS }, // aucMeter_Addr_High_B[48]
}
};
Struct_OD PGM sHL_AMR_Unrespond_Meters_OD = // HL_AMR_Unrespond_Meters 的描述
{
HL_AMR_UNRESPOND_METERS_INDEX, // uiIndex = 1010
0, // pvLocal_Address
3, // ucElement_Number
{
{ // ucUnrespond_Numb
HL_DT_INTEGER_8, // ucElement_Type
0, // ucElement_Unit
1, // ucElement_Length
0, // ucDecimal_Point
HL_RW_ACCESS // ucAccess
},
{ HL_DT_VIS_STRING, 0, 3, 0, HL_NON_ACCESS}, // aucReserved[3]
{ HL_DT_VIS_STRING, 0, 36, 0, HL_RW_ACCESS }, // aucMeter_Addr_Low[36]
}
};
OD_Entry PGM sOD_Entry[HL_OD_ENTRY_NUMBER] =
{
{ HL_STRUCT_OD, HL_DEVICE_INFO_INDEX, ( void* )&sHL_Device_Info_OD },
{ HL_STRUCT_OD, HL_NETWORK_PARAMETER_INDEX, ( void* )&sHL_Network_Para_OD },
{ HL_STRUCT_OD, HL_CURRENT_TIME_INDEX, ( void* )&sCurrent_Time_OD },
{ HL_STRUCT_OD, HL_NEIGHBOR_TABLE_INDEX, ( void* )&sHL_Neighbor_Table_OD },
{ HL_STRUCT_OD, HL_AMR_PARA_CONFIG_INDEX, ( void* )&sHL_AMR_Para_Config_OD },
{ HL_STRUCT_OD, HL_AMR_DATA_IDS_INDEX, ( void* )&sHL_AMR_Data_IDs_OD },
{ HL_STRUCT_OD, HL_AMR_METER_ADDR_LOW_INDEX, ( void* )&sHL_AMR_Meter_Addr_Low_OD },
{ HL_STRUCT_OD, HL_AMR_METER_ADDR_HIGH_INDEX, ( void* )&sHL_AMR_Meter_Addr_High_OD },
{ HL_STRUCT_OD, HL_AMR_UNRESPOND_METERS_INDEX, ( void* )&sHL_AMR_Unrespond_Meters_OD }
};
#endif // #ifdef SENSOR_APP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -