📄 holley.h
字号:
// 还有以下工作没完成:
// 1. neighbor table 的处理, 2006-12-6已完成
// 2. 加密/是否需要
// 3. 压缩
// 4. 数据冻结
// 5. 集中抄表命令,点抄命令
// 6. 随机延时, 2006-12-25
// 7. 流控, 2006-12-15已完成
// 8. 时间同步, 2006-12-6已完成
// 9. 随机延时多长时间较为合适, 2006-12-25
// 10.增加1000索引,读操作可以获得 neighbor table 等信息, 2006-12-25
// 11.write_od/read_od时,如果sub_index为0,需要逐一判断各个参数的可读可写性, 2006-12-8完成
// 12.转发的帧结构中, 数据总长度改为2个字节, 2006-12-25
// 13.电表号的自动搜索, 2006-12-25
// 14.可配置:[1]是电表应用还是终端应用;2006-12-25
// [2]采集器是通过RS485还是RF与电表连接;
// [3]在响应广播时,是否进行随机延时;2006-12-25
// [4]随机延时左移的位数, 2006-12-25
// 15.增加CTS控制, 2006-12-25
// 16.MEMSET, MEMCOPY 时, 注意对长度的判断, 2006-12-25
#ifndef HOLLEY_H
#define HOLLEY_H
#ifndef TOKEN_INCLUDE
#include "app/sensor/common.h"
#endif
typedef unsigned char BOOL;
/************************************************************************/
/* 原先在 common.h 中定义的宏 */
/************************************************************************/
#define APP_CHANNEL 13
#define APP_PANID 0x01f0
#define APP_POWER 3
// #define APP_POWER (-1)
/************************************************************************/
/* 条件编译宏定义 */
/************************************************************************/
#define HL_OUTPUT_DEBUG_INFO_VIA_SERIAL
// #define EXCHANGE_INT
/************************************************************************/
/* UART 口接收和发送数据帧的格式为 */
/* ----------------------------------- */
/* | * | L | ... PayLoad ... | S | # | */
/* ----------------------------------- */
/* 其中: */
/* *: 帧头 */
/* L: 数据长度, 仅是 PayLoad 部分数据的长度 */
/* PayLoad: 数据 */
/* S: 校验和, 仅是 PayLoad 部分数据之和 */
/* #: 帧尾 */
/* HL_UART_MAX_FRAME_LENGTH : SINK 或终端从串口接收 UART 数据 */
/* 帧最大长度 */
/************************************************************************/
#define HL_UART_FRAME_HEADER 0x2a
#define HL_UART_FRAME_END 0x23
#define HL_UART_MAX_FRAME_LENGTH 80
/************************************************************************/
/* 集中器端一些常量宏定义 */
/* HL_COLLECTOR_BAUD_RATE :集中器端串口波特率 */
/* HL_COLLECTOR_UART_FRAME_GAP :集中器端串口数据帧与数据帧之间 */
/* 的时间间隔, 单位是毫秒 */
/* HL_BIND_TABLE_RELEASE_GAP :绑定表释放时间,如果在这个时间 */
/* 内没有接收到数据,则释放绑定表 */
/* 单位是秒*4. 120 即 30 秒 */
/* HL_BROADCAST_RADIUS :广播发送半径 */
/* 0 means EMBER_MAX_HOPS */
/************************************************************************/
#define HL_COLLECTOR_BAUD_RATE BAUD_19200
#define HL_COLLECTOR_UART_FRAME_GAP 30
#define HL_BIND_TABLE_RELEASE_GAP 120
#ifdef HANDSET_APP
#define HL_BROADCAST_RADIUS 1
#else
#define HL_BROADCAST_RADIUS 0
#endif
/************************************************************************/
/* 采集器端一些常量宏定义 */
/* HL_RF_PAYLOAD_LENGTH :在分包发送时,单包数据的长度 */
/* HL_UNICAST_AD_BIND_INDEX :Sensor 端应答广告时 Unicast */
/* 使用的绑定表索引 */
/* HL_UNICAST_DATA_BIND_INDEX :Sensor 端应答转发命令时 Unicast */
/* 使用的绑定表索引 */
/* HL_LONG_ADDRESS_IN_FRAME :在带地址的广播帧中, 最大带有长 */
/* 地址的个数 */
/* HL_SHORT_ADDRESS_IN_FRAME :在带地址的广播帧中, 最大带有短 */
/* 地址的个数 */
/************************************************************************/
#define HL_RF_PAYLOAD_LENGTH 50
#define HL_UNICAST_AD_BIND_INDEX 0
#define HL_UNICAST_DATA_BIND_INDEX 1
#define HL_LONG_ADDRESS_IN_FRAME 7
#define HL_SHORT_ADDRESS_IN_FRAME 31
/************************************************************************/
/* 命令字定义 */
/************************************************************************/
#define HL_CMD_GET_OD 0x00
#define HL_CMD_READ_OD 0x01
#define HL_CMD_WRITE_OD 0x02
#define HL_CMD_STATEMENT 0x05
#define HL_CMD_STATEMENT_ACK 0x05
#define HL_CMD_COLLECT_DATA 0x06
#define HL_CMD_TRANSFER_MTR 0x07
#define HL_CMD_FORCE_SEND_AD 0x21
#define HL_CMD_FORCE_RESET 0x22
#define HL_CMD_BUF_STATUS 0x23
#define HL_CMD_RESET_TOKEN 0x24
// #define HL_CMD_STATEMENT_ACK 0x45
#define HL_CMD_TRANSFER_TMNL 0x47
#define HL_CMD_READ_OD_ERR 0x81
#define HL_CMD_WRITE_OD_ERR 0x82
#define HL_CMD_COLLECT_DATA_ERR 0x86
#define HL_CMD_TRANSFER_MTR_ERR 0x87
/************************************************************************/
/* 日期、时间格式定义 */
/************************************************************************/
typedef struct
{
int8u ucDate;
int8u ucHour;
} HL_Short_Time;
typedef struct
{
int8u ucMonth;
int8u ucDate;
int8u ucHour;
int8u ucMinute;
} HL_Mid_Time;
/************************************************************************/
/* 缓冲区大小定义 */
/* HL_SWAM_SIZE 通用缓冲区的大小 */
/* HL_BUFFER_SIZE UART, RF 的接收缓冲区大小 */
/* HL_UART_BUFFER_SIZE 仪表侧 UART 缓冲区大小 */
/* HL_MAX_PACKAGE_NUMBER 最大可缓存 RF 包的个数 */
/************************************************************************/
#define HL_SWAM_SIZE 128
#define HL_BUFFER_SIZE 256
#define HL_UART_BUFFER_SIZE 200
#define HL_MAX_PACKAGE_NUMBER 10
typedef struct
{
int8u acBuffer[HL_BUFFER_SIZE]; /* 接收到的数据缓冲区 */
int16u uiPoint; /* 数据指针 */
int16u uiValid_Frames; /* 缓冲区中有效的数据帧数 */
int16u uiStart_Of_First_Frame; /* 第一个有效帧的帧头 */
int16u uiEnd_Of_Last_Frame; /* 最后一个有效帧的帧尾 */
} HL_Buffered_Data;
/************************************************************************/
/* 设备信息参数定义 OD 索引 HL_DEVICE_INFO_INDEX = 0 */
/************************************************************************/
typedef struct
{
int8u aucSoftware_Version[4];
int8u aucHardware_Version[4];
int8u aucOD_Version[4];
int8u aucManufacture[12];
int16u uiProfile_ID;
int8u aucReserved[22];
} HL_Device_Info;
/************************************************************************/
/* 网络参数定义 OD 索引 HL_NETWORK_PARAMETER_INDEX = 1001 */
/************************************************************************/
typedef struct
{
int8u ucCurrent_Channel;
BOOL bCompress_Enable;
BOOL bEncrypt_Enable;
int8s cTransmit_Power;
int8u aucPWD[16];
int16u uiPAN_ID;
int8u ucGroup_ID; // 2007-2-7 lvyong add
int8u aucReserved[25];
} HL_Network_Para;
/************************************************************************/
/* 当前时间参数定义 OD 索引 HL_CURRENT_TIME_INDEX = 1002 */
/************************************************************************/
typedef struct
{
int8u ucYear;
int8u ucMonth;
int8u ucDate;
int8u ucWeek;
int8u ucHour;
int8u ucMinute;
int8u ucSecond;
int8u ucReserved;
} HL_Full_Time;
/************************************************************************/
/* 邻居表参数定义 OD 索引 HL_NEIGHBOR_TABLE_INDEX = 1003 */
/************************************************************************/
typedef struct
{
int8u aucLong_Address[8];
int16u uiShort_Address;
int8u ucNeighbor_Numb;
int8u ucReserved;
int8u aucNeighbor_Table[36];
} HL_Neighbor_Table;
/************************************************************************/
/* 集中器参数缺省常量定义 */
/* HL_RESP_TEMPERATURE 要求仪表侧返回当前温度 */
/* HL_RESP_NEIGHBOR_TABLE 要求仪表侧返回邻居表 */
/* HL_RESP_OD_VERSION 要求返回 OD 版本号 */
/* HL_RESP_SW_VERSION 要求返回软件版本号 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -