⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 holley.h

📁 是zmac的协议的全部完整的解析.代码例子很全
💻 H
📖 第 1 页 / 共 2 页
字号:

	// 还有以下工作没完成:
	// 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 + -