zaps_type.h

来自「ZIGBEE 2006协议栈 BAT测试代码 RADIO PULSE MG245」· C头文件 代码 · 共 444 行

H
444
字号


////////////////////////////////////////////////////////////////
/////////////////////// APS Primitive ID Code /////////////////////
////////////////////////////////////////////////////////////////

	#define	aID_REQ		0x00
	#define	aID_RSP			0x01
	#define	aID_CON		0x02
	#define	aID_IND			0x03

	#define	aID_DATA		0x00
	#define	aID_BIND		0x10
	#define	aID_UNBIND		0x20
	#define	aID_SET			0x30
	#define	aID_GET		0x40
	#define	aID_ADD_GRP	0x50
	#define	aID_RM_GRP		0x60
	#define	aID_RM_ALL_GRP	0x70

////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////

	#define	apscMaxAddrMapEntry		1			// Minimum 1
	#define	apscMaxDescSize			64
	#define	apscMaxDiscoverSize		64
	#define	apscMaxFrameRetry			3
	#define	apscAckWaitDuration			5		// 0.05 * (2*nwkcMaxDepth) + (security encrypt delay)
	#define	apscMinRejectTableSize		1

	#define	aib_AddrMap		0xC0
	#define	aib_BindTable		0xC1
	#define	aib_GroupTable		0xC2

	#define	aSTA_SUCCESS			0x00
	#define 	aSTA_NO_ACK			0xA1
	#define 	aSTA_NO_BOUND_DEVICE	0xA2
	#define 	aSTA_SECURITY_FAIL	0xA3
	#define 	aSTA_ILLEGAL_DEVICE	0xA4
	#define 	aSTA_INVALID_BINDING	0xA5
	#define 	aSTA_NOT_SUPPORTED	0xA6
	#define 	aSTA_ILLEGAL_REQUEST	0xA7

	#define	aSTA_RP_AQ_BUSY		0xAB	// by RadioPulse
	#define	aSTA_RP_NSDU_OVER	0xAC	// by RadioPulse

	#define	aAQ_IDLE	0x00
	#define	aAQ_STATE1	0x01
	#define	aAQ_STATE2	0x02
	#define	aAQ_STATE3	0x03
	#define	aAQ_STATE4	0x04
	#define	aAQ_STATE5	0x05
	#define	aAQ_STATE6	0x06	

	#define	aCID_Nwk_Addr_Req			0x0000
	#define	aCID_IEEE_Addr_Req		0x0001
	#define	aCID_Node_Desc_Req		0x0002
	#define	aCID_Power_Desc_Req		0x0003
	#define	aCID_Simp_Desc_Req		0x0004
	#define	aCID_Active_EP_Req			0x0005
	#define	aCID_Match_Desc_Req		0x0006
	#define	aCID_Comp_Desc_Req		0x0010
	#define	aCID_User_Desc_Req		0x0011
	#define	aCID_Disc_Cache_Req		0x0012	
	#define	aCID_End_Device_Ann		0x0013
	#define	aCID_User_Desc_Set			0x0014
	#define	aCID_Sys_Serv_Disc_Req		0x0015
	#define	aCID_Disc_Store_Req		0x0016
	#define	aCID_Node_Desc_Store_Req	0x0017
	#define	aCID_Power_Desc_Store_Req	0x0018
	#define	aCID_Active_EP_Store_Req	0x0019
	#define	aCID_Simp_Desc_Store_Req	0x001A
	#define	aCID_Rm_Node_Cache_Req	0x001B
	#define	aCID_Find_Node_Cache_Req	0x001C
	
	#define	aCID_End_Device_Bind_Req	0x0020
	#define	aCID_Bind_Req				0x0021
	#define	aCID_Unbind_Req			0x0022
	#define	aCID_Bind_Register_Req		0x0023
	#define	aCID_Replace_Device_Req	0x0024
	#define	aCID_Store_Back_Bind_Entry_Req	0x0025
	#define	aCID_Rm_Back_Bind_Entry_Req		0x0026
	#define	aCID_Back_Bind_Table_Req	0x0027
	#define	aCID_Reco_Bind_Table_Req	0x0028
	#define	aCID_Back_Src_Bind_Req		0x0029
	#define	aCID_Reco_Src_Bind_Req		0x002A

	#define	aCID_Mgmt_Nwk_Disc_Req	0x0030
	#define	aCID_Mgmt_LQI_Req			0x0031
	#define	aCID_Mgmt_Rtg_Req			0x0032
	#define	aCID_Mgmt_Bind_Req		0x0033
	#define	aCID_Mgmt_Leave_Req		0x0034
	#define	aCID_Mgmt_Direct_Join_Req	0x0035
	#define	aCID_Mgmt_Permit_Join_Req	0x0036
	#define	aCID_Mgmt_Cache_Req		0x0037

	#define	aCID_Nwk_Addr_Rsp			0x8000
	#define	aCID_IEEE_Addr_Rsp			0x8001
	#define	aCID_Node_Desc_Rsp		0x8002
	#define	aCID_Power_Desc_Rsp		0x8003
	#define	aCID_Simp_Desc_Rsp		0x8004
	#define	aCID_Active_EP_Rsp			0x8005
	#define	aCID_Match_Desc_Rsp		0x8006
	#define	aCID_Comp_Desc_Rsp		0x8010
	#define	aCID_User_Desc_Rsp			0x8011
	#define	aCID_User_Desc_Conf		0x8014
	#define	aCID_Sys_Serv_Disc_Rsp		0x8015
	#define	aCID_Disc_Store_Rsp		0x8016
	#define	aCID_Node_Desc_Store_Rsp	0x8017
	#define	aCID_Power_Desc_Store_Rsp	0x8018
	#define	aCID_Active_EP_Store_Rsp	0x8019
	#define	aCID_Simp_Desc_Store_Rsp	0x801A
	#define	aCID_Rm_Node_Cache_Rsp	0x801B
	#define	aCID_Find_Node_Cache_Rsp	0x801C

	#define	aCID_End_Device_Bind_Rsp	0x8020
	#define	aCID_Bind_Rsp				0x8021
	#define	aCID_Unbind_Rsp			0x8022
	#define	aCID_Bind_Register_Rsp		0x8023
	#define	aCID_Replace_Device_Rsp	0x8024
	#define	aCID_Store_Back_Bind_Entry_Rsp		0x8025
	#define	aCID_Rm_Back_Bind_Entry_Rsp		0x8026
	#define	aCID_Back_Bind_Table_Rsp	0x8027
	#define	aCID_Reco_Bind_Table_Rsp	0x8028
	#define	aCID_Back_Src_Bind_Rsp		0x8029
	#define	aCID_Reco_Src_Bind_Rsp		0x802A

	#define	aCID_Mgmt_Nwk_Disc_Rsp	0x8030
	#define	aCID_Mgmt_LQI_Rsp			0x8031
	#define	aCID_Mgmt_Rtg_Rsp			0x8032
	#define	aCID_Mgmt_Bind_Rsp		0x8033
	#define	aCID_Mgmt_Leave_Rsp		0x8034
	#define	aCID_Mgmt_Direct_Join_Rsp	0x8035
	#define	aCID_Mgmt_Permit_Join_Rsp	0x8036
	#define	aCID_Mgmt_Cache_Rsp		0x8037

	
typedef union
{
	UINT8	Ext[8];
	UINT16	Short;
} APS_AD;


typedef struct
{
	UINT16	GroupID;
	UINT8	EP_Count;		// out of spec. by RadioPulse. the num of valid EP[]
	UINT8	*pEP;
	UINT8	EnaGT;			// out of spec. by RadioPulse
} AS_GROUP_TABLE;

typedef struct
{
	//- 	DstMode
	// 1	: DstAddr_U is GroupID. DstEP field is invalid
	// 3	: DstAddr_U is 64bit Ext Address. DstEP field is present
	UINT8	Mode;
	APS_AD	Add_U;
	UINT8	EP;
} AS_BIND_Dst;		// Bind Dst Info

typedef struct
{
	APS_AD	SrcAdd_U;
	UINT8	SrcEP;
	UINT16	ClusID;
	UINT8	Dst_Count;		// out of spec. by RadioPulse. the num of valid DstAddr[], DstEP[]	
	AS_BIND_Dst	*pDst;		// out of soec. by RadioPulse.
	UINT8	EnaBT;			// out of spec. by RadioPulse
} AS_BIND_TABLE;

typedef struct
{
	UINT8	IEEEAddr[8];
	UINT16	NwkAddr;
	UINT8	EnaAM;			// out of spec. by RadioPulse
} AS_ADDR_MAP;

typedef struct
{
	AS_ADDR_MAP	*papsAddrMap;	
	AS_BIND_TABLE	*papsBindTable;	
	AS_GROUP_TABLE	*papsGroupTable;
} APS_PIB;

typedef struct
{
	UINT8	DSN;
	UINT8	SIZE_AM;		// Size of Address Map
	UINT8	SIZE_BT;		// Size of Binding Table
	UINT8	SIZE_BT_DST;	// Size of Binding Table's Destination List
	UINT8	SIZE_GT;		// Size of Group Address Table
	UINT8	SIZE_GT_EP;	// Size of Group Address Table's EP List

	UINT8	AQ0_PS;
} APS_PARA;

typedef struct
{	
	//-- DstMode
	//	0	: DstAddr = not present. 		DstEP not present
	// 	1	: DstAddr = 16 bit Group Addr. 	DstEP not present
	//	2	: DstAddr = 16 bit Addr. 		DstEP present
	//	3	: DstAddr = 64 bit Addr. 		DstEP present
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
	UINT16	ProfileID;		// Profile ID
	UINT16	ClusID;			// Cluster ID
	UINT8	SrcEP;		
	UINT8	asduLen;		// length	
	//--	TxOption
	// bit[7:4]	: OOB Code. by RadioPulse
	// bit[3]		: MAC Security. by RadioPulse
	// bit[2]		: AckReq 
	// bit[1]		: Use NWK Key
	// bit[0]		: Security
	UINT8	TxOption;
	UINT8	Radius;
	UINT8	*pasdu;
} APSDE_DATA_req;

typedef struct
{
	//-- DstMode
	//	0	: DstAddr = not present. 		DstEP not present
	// 	1	: DstAddr = 16 bit Group Addr. 	DstEP not present
	//	2	: DstAddr = 16 bit Addr. 		DstEP present
	//	3	: DstAddr = 64 bit Addr. 		DstEP present
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
	UINT8	SrcEP;
	UINT8	Sta;
} APSDE_DATA_con;

typedef struct
{
	//-- DstMode
	//	0	: DstAddr = not present. 		DstEP not present
	// 	1	: DstAddr = 16 bit Group Addr. 	DstEP not present
	//	2	: DstAddr = 16 bit Addr. 		DstEP present
	//	3	: DstAddr = 64 bit Addr. 		DstEP present
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
	//-- SrcMode
	//	0	: SrcAddr = not present.		SrcEP not present
	// 	1	: rsv
	//	2	: SrcAddr = 16 bit SrcAddr.		SrcEP present
	//	3	: SrcAddr = 64 bit SrcAddr.		SrcEP present
	UINT8	SrcMode;
	APS_AD	SrcAdd_U;
	UINT8	SrcEP;	
	UINT16	ProfileID;	// Profile ID
	UINT16	ClusID;		// Cluster ID
	UINT8	asduLen;	// length	
	UINT8	Broadcast;
	UINT8	Secure;
	//UINT8	LQI;			// out of spec. by RadioPulse
	INT8		dBm;		// out of spec. by RadioPulse
	UINT8	*pasdu;
} APSME_DATA_ind;

typedef struct
{
	APS_AD	SrcAdd_U;
	UINT8	SrcEP;
	UINT16	ClusID;
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
} APSME_BIND_req;

typedef struct
{
	UINT8	Sta;
	APS_AD	SrcAdd_U;	
	UINT8	SrcEP;
	UINT16	ClusID;
	UINT8	DstMode;
	APS_AD	DstAdd_U;	
	UINT8	DstEP;
} APSME_BIND_con;

typedef struct
{
	APS_AD	SrcAdd_U;
	UINT8	SrcEP;
	UINT16	ClusID;
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
} APSME_UNBIND_req;

typedef struct
{	
	UINT8	Sta;
	APS_AD	SrcAdd_U;	
	UINT8	SrcEP;
	UINT16	ClusID;
	UINT8	DstMode;
	APS_AD	DstAdd_U;
	UINT8	DstEP;
} APSME_UNBIND_con;

typedef struct
{
	UINT8	Attribute;
} APSME_GET_req;

typedef struct
{
	UINT8	Sta;
	UINT8	Attribute;
	UINT8	AttributeLength;		// length of entry
	UINT8	*pAttributeValue;
} APSME_GET_con;


typedef struct
{
	UINT8	Attribute;
	UINT8	AttributeLength;
	UINT8	*pAttributeValue;
} APSME_SET_req;

typedef struct
{
	UINT8	Sta;
	UINT8	Attribute;
} APSME_SET_con;

typedef struct
{
	UINT16	GroupAddr;
	UINT8	EndPoint;
} APSME_ADD_GROUP_req;

typedef struct
{
	UINT8	Sta;
	UINT16	GroupAddr;
	UINT8	EndPoint;
} APSME_ADD_GROUP_con;

typedef struct
{
	UINT16	GroupAddr;
	UINT8	EndPoint;
} APSME_REMOVE_GROUP_req;

typedef struct
{
	UINT8	Sta;
	UINT16	GroupAddr;
	UINT8	EndPoint;
} APSME_REMOVE_GROUP_con;

typedef struct
{
	UINT8	EndPoint;
} APSME_REMOVE_ALL_GROUP_req;

typedef struct
{
	UINT8	Sta;
	UINT8	EndPoint;
} APSME_REMOVE_ALL_GROUP_con;


typedef union
{
	APSDE_DATA_req			DATA_REQ;
	APSDE_DATA_con			DATA_CON;
	APSME_DATA_ind			DATA_IND;
	APSME_BIND_req			BIND_REQ;
	APSME_BIND_con			BIND_CON;
	APSME_UNBIND_req		UNBIND_REQ;
	APSME_UNBIND_con		UNBIND_CON;
	APSME_GET_req			GET_REQ;
	APSME_GET_con			GET_CON;
	APSME_SET_req			SET_REQ;
	APSME_SET_con			SET_CON;
	APSME_ADD_GROUP_req	ADD_GROUP_REQ;
	APSME_ADD_GROUP_con	ADD_GROUP_CON;
	APSME_REMOVE_GROUP_req		REMOVE_GROUP_REQ;
	APSME_REMOVE_GROUP_con		REMOVE_GROUP_CON;
	APSME_REMOVE_ALL_GROUP_req		REMOVE_ALL_GROUP_REQ;
	APSME_REMOVE_ALL_GROUP_con	REMOVE_ALL_GROUP_CON;
} APSDME_PKT;

//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

typedef struct
{
	UINT8	FT	: 2 	;
	UINT8	DM	: 2 	;
	UINT8	IAM	: 1 	;
	UINT8	Sec	: 1 	;
	UINT8	Ack	: 1 	;
	UINT8	Rsv	: 1 	;	
} AS_FC_Sub;

typedef union
{
	UINT8		All;
	AS_FC_Sub	b;	
} AS_FC;

typedef struct
{
	//--Frame Control --
	//	bit[7]	: rsv
	// 	bit[6]	: AckReq
	//	bit[5]	: Security
	// 	bit[4]	: Indirect Mode. When Delivery Mode=1 --> 0=SrcEP is not present, 1=DstEP is not present
	//	bit[3:2]	: Delivery Mode. 0=Normal, 1=Indirect, 2=Broadcast, 3=Group
	//	bit[1:0]	: Frame Type. 0=Data, 1=Command, 2=Ack
	UINT8	FC;	
	UINT8	DstEP;
	UINT16	GroupAddr;
	UINT16	ClusID;
	UINT16	ProfileID;
	UINT8	SrcEP;
	UINT8	DSN;

	// bit[4]	: SrcEP is present
	// bit[3]	: Profile ID is present		
	// bit[2] 	: ClusID is present
	// bit[1] 	: GroupAddress is present
	// bit[0] 	: DstEP is present
	UINT8	FieldPresent;
} AS_HEAD;



⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?