📄 porttopcaps.h
字号:
#ifndef PORTTOPCAPS_H
#define PORTTOPCAPS_H
#define APS_HEADER_LENGTH 10;
//typedef enum {
// LRWPAN_STATUS_SUCCESS = 0,
// LRWPAN_STATUS_PHY_FAILED,
// LRWPAN_STATUS_PHY_INPROGRESS, //still working for splitphase operations
// LRWPAN_STATUS_PHY_RADIO_INIT_FAILED,
// LRWPAN_STATUS_PHY_TX_PKT_TOO_BIG,
// LRWPAN_STATUS_PHY_TX_START_FAILED,
// LRWPAN_STATUS_PHY_TX_FINISH_FAILED,
// LRWPAN_STATUS_PHY_CHANNEL_BUSY,
// LRWPAN_STATUS_MAC_FAILED,
// LRWPAN_STATUS_MAC_NOT_ASSOCIATED,
// LRWPAN_STATUS_MAC_INPROGRESS, //still working for splitphase operations
// LRWPAN_STATUS_MAC_MAX_RETRIES_EXCEEDED, //exceeded max retries
// LRWPAN_STATUS_MAC_TX_FAILED, //MAC Tx Failed, retry count exceeded
// LRWPAN_STATUS_MAC_ASSOCIATION_TIMEOUT, //association request timedout
// LRWPAN_STATUS_MAC_ORPHAN_TIMEOUT, //ophan notify timedout
// LRWPAN_STATUS_NWK_INPROGRESS,
// LRWPAN_STATUS_NWK_JOIN_TIMEOUT,
// LRWPAN_STATUS_NWK_PACKET_UNROUTABLE,
// LRWPAN_STATUS_NWK_RADIUS_EXCEEDED,
// LRWPAN_STATUS_APS_INPROGRESS,
// LRWPAN_STATUS_APS_MAX_RETRIES_EXCEEDED,
// LRWPAN_STATUS_APS_ILLEGAL_ENDPOINT,
// LRWPAN_STATUS_APS_MAX_ENDPOINTS_EXCEEDED,
// LRWPAN_STATUS_INDIRECT_BUFFER_FULL,
// LRPAN_STATUS_ZEP_FAILED,
// LRPAN_STATUS_ZEPCALLBACK_FAILED,
// LRPAN_STATUS_USRCALLBACK_FAILED,
// LRWPAN_STATUS_HEAPFULL
//}LRWPAN_STATUS_ENUM;
typedef struct _MACPKT {
BYTE *data;
BYTE rssi;
}MACPKT;
typedef struct {
MACPKT orgpkt;
BYTE apsOffset;
BYTE afOffset;
union _APS_RX_DATA_FLAGS{
BYTE val;
struct {
unsigned srcEP:1;
unsigned dstEP:1;
}bits;
}flags;
//parse these out of the packet for reference
BYTE dstEP;
BYTE srcEP;
BYTE cluster;
UINT16 profile;
SADDR dstSADDR; //used for indirect msgs
SADDR srcSADDR;
BYTE af_fcf;
BYTE aps_fcf;
//these fields are for AF MSG data
BYTE tsn;
BYTE *usrPload;
BYTE usrPlen;
}APS_RX_DATA;
#define APS_FRM_TYPE_DATA 0
#define APS_FRM_TYPE_CMD 1
#define APS_FRM_TYPE_ACK 2
#define APS_FRM_TYPE_RSV 3
#define APS_FRM_TYPE_MASK 3
#define APS_GET_FRM_TYPE(x) (x&APS_FRM_TYPE_MASK)
#define APS_IS_CMD(x) ((APS_GET_FRM_TYPE(x)) == APS_FRM_TYPE_CMD)
#define APS_IS_DATA(x) ((APS_GET_FRM_TYPE(x)) == APS_FRM_TYPE_DATA)
#define APS_IS_ACK(x) ((APS_GET_FRM_TYPE(x)) == APS_FRM_TYPE_ACK)
#define APS_IS_RSV(x) ((APS_GET_FRM_TYPE(x)) == APS_FRM_TYPE_RSV)
#define APS_FRM_DLVRMODE_NORMAL 0
#define APS_FRM_DLVRMODE_INDIRECT (1<<2)
#define APS_FRM_DLVRMODE_BCAST (2<<2)
#define APS_FRM_DLVRMODE_RSV (3<<2)
#define APS_FRM_DLVRMODE_MASK (3<<2)
#define APS_GET_FRM_DLVRMODE(x) (x&APS_FRM_DLVRMODE_MASK)
//The indirect submode bit is used for indirect frames
//and distiguishes before and after the indirect binding is resolved.
//if the submode is '1', only the srcEP is included and the packet
//is traveling to the coordinator to get the binding resolved.
//If the submode is '1', only the dstEP is included and the packet
//is traveling to the destination EP.
#define APS_FRM_INDIRECT_SUBMODE_MASK (1<<4)
#define APS_GET_FRM_INDIRECT_SUBMODE(x) (x&(APS_FRM_INDIRECT_SUBMODE_MASK))
#define APS_FRM_SECURITY_MASK (1<<5)
#define APS_GET_FRM_SECURITY(x) (x&(APS_FRM_SECURITY_MASK))
#define APS_FRM_ACKREQ_MASK (1<<6)
#define APS_GET_FRM_ACKREQ(x) (x&(APS_FRM_ACKREQ_MASK))
#define AF_TRANS_COUNT_MASK (0xF)
#define AF_GET_TRANS_COUNT(x) (x &(AF_TRANS_COUNT_MASK))
#define AF_FRM_TYPE_MASK (0xF <<4)
#define AF_GET_FRM_TYPE(x) (x & (AF_FRM_TYPE_MASK))
#define AF_FRM_TYPE_KVP (1 <<4)
#define AF_FRM_TYPE_MSG (2<<4)
#define APS_RXBUFF_SIZE LRWPAN_MAX_INDIRECT_RX_PKTS
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// void apsdeDataRequest(UINT8 dstAddrMode,ADDRESS *dstAddress,UINT8 dstEndpoint,UINT16 profiled,UINT8 clusterID,UINT8 srcEndpoint,UINT8 asduLength,BYTE *asdu,BYTE txOptions,UINT8 discoverRoute,UINT8 radiusCounter);
//
// DESCRIPTION:
// The aps layer use this function to transmit a data packet.
//
// PARAMETERS:
// ........
//
// NOTE:this function will be used in ping_pong_modify.c .
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void apsdeDataRequest(UINT8 dstAddrMode,ADDRESS *dstAddress,UINT8 dstEndpoint,UINT16 profiled,UINT8 clusterID,UINT8 srcEndpoint,UINT8 asduLength,BYTE *asdu,BYTE txOptions,UINT8 discoverRoute,UINT8 radiusCounter);
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// void aplFormNetwork();
//
// DESCRIPTION:
// The aps layer use this function to form a network and wait other devices to join!
// PARAMETER:
// There should be some parameters,but I am in portting and testing so the parameters are ignored.
// RETURN-VALUE:
// NONE.
//-------------------------------------------------------------------------------------------------------------------------------------------------
void aplFormNetwork();
//------------------------------------------------------------------------------------------------
// void aplJoinNetwork();
//
// DESCRIPTION:
// The aps layer use this function to join a formed network.
// PARAMETER:
// There should be some parameters,but I am in portting and testing so the parameters are ignored.
// RETURN-VALUE:
// NONE.
//-----------------------------------------------------------------------------------------------------------
void aplJoinNetwork();
//------------------------------------------------------------------------------------------------
// void aplRejoinNetwork();
//
// DESCRIPTION:
// The aps layer use this function to join a formed network.
// PARAMETER:
// There should be some parameters,but I am in portting and testing so the parameters are ignored.
// RETURN-VALUE:
// NONE.
//-----------------------------------------------------------------------------------------------------------
void aplRejoinNetwork();
//---------------------------------------------------------------------------------------------------
// LRWPAN_STATUS_ENUM aplGetStatus();
//
// DESCRIPTION:
// The aps layer use this function to return the status of aps layer.
// PARAMETER:
// This function doesn't need any parameter.
// RETURN-VALUE:
// LRWPAN_STATUS_ENUM:aplStatus.--indicates if the operation is successful.
// The apsStatus should be a global variable.
//------------------------------------------------------------------------------------------------
LRWPAN_STATUS_ENUM aplGetStatus();
//----------------------------------------------------------------------------------------------------
// LRWPAN_STATUS_ENUM usrRxPacketCallback(void) ;
//
// DESCRIPTION:
// This should be the apsdeDataIndication();called by network,but implemented by APS.
// PARAMETER:
// NONE.--It is temp,there should be some parameters.
// RETURN-VALUE:
// LRWPAN_STATUS_ENUM--indicates if the operation is successful.
// NOTE:
// callback from NWK (shoule be APS) when packet is received,user must do something with data as it is freed
//------------------------------------------------------------------------------------------------
LRWPAN_STATUS_ENUM usrRxPacketCallback(void) ;
//#define aplGetLastTxTime() (phy_pib.txStartTime)
//---------------------------------------------------------------------------------------------------
// UINT32 aplGetLastTxTime();
//
// DESCRIPTION:
// This function is used to return the tx time of last transmitted packet!
// PARAMETER:
// NONE;
// RETURN-VALUE:
// UINT32;
//---------------------------------------------------------------------------------------------------
UINT32 aplGetLastTxTime();
//#define apsBusy() (apsState != APS_STATE_IDLE)
//-------------------------------------------------------------------------------------------------
// ZBOOL apsBusy();
//
// DESCRIPTION:
// This function is used to justify if the aps layer is in operation!
// PARAMETER:
// NONE;
// RETURN-VALUE:
// NONE;
//---------------------------------------------------------------------------------------------------
ZBOOL apsBusy();
//#define aplSetMacMaxFrameRetries(x) (mac_pib.macMaxAckRetries=x)
void aplSetMacMaxFrameRetries();
//#define aplGetParentShortAddress() (mac_pib.macCoordShortAddress)
UINT16 aplGetParentShortAddress();
BYTE * aplGetParentLongAddress();
//#define aplGetMyShortAddress() (macGetShortAddr())
UINT16 aplGetMyShortAddress();
#define aplGetRxDstEp() (a_aps_rx_data.dstEP)
#define aplGetRxCluster() (a_aps_rx_data.cluster)
#define aplGetRxSrcEp() (a_aps_rx_data.srcEP)
#define aplGetRxSrcSADDR() (a_aps_rx_data.srcSADDR)
#define aplGetRxMsgLen() (a_aps_rx_data.usrPlen)
#define aplGetRxMsgData() (a_aps_rx_data.usrPload)
#define aplGetRxRSSI() (a_aps_rx_data.orgpkt.rssi)
//#define aplGetLastTxTime() (phy_pib.txStartTime)
void aplInit();
BOOL macRxBuffFull(void);
#define NWK_ROUTE_MASK (3 << 6)
#define NWK_GET_ROUTE(x) (x & NWK_ROUTE_MASK)
//this value of zero means that our packets will not
//be recognized as Zibee SPEC packets which is what we
//want. Do not want these packets confused with packets
//from Zigbee compliant devices.
#define NWK_PROTOCOL (0<<2)
#define NWK_PROTOCOL_MASK (15 << 2)
#define NWK_GET_PROTOCOL(x) ((x & NWK_PROTOCOL_MASK) >> 2)
#define NWK_FRM_TYPE_DATA 0
#define NWK_FRM_TYPE_CMD 1
#define NWK_FRM_TYPE_MASK 3
#define NWK_IS_DATA(x) ((x & NWK_FRM_TYPE_MASK)==NWK_FRM_TYPE_DATA)
#define NWK_IS_CMD(x) ((x & NWK_FRM_TYPE_MASK)==NWK_FRM_TYPE_CMD)
typedef enum {
APS_STATE_IDLE,
APS_STATE_COMMAND_START,
APS_STATE_GENERIC_TX_WAIT,
APS_STATE_NWK_PASSTHRU_WAIT,
APS_STATE_INDIRECT_GETDST,
APS_STATE_INDIRECT_TX,
#ifdef LRWPAN_COORDINATOR
APS_STATE_INJECT_INDIRECT,
#endif
APS_STATE_ACK_SEND_START,
APS_STATE_INDIRECT_TX_WAIT,
APS_STATE_INJECT_LOOPBACK,
APS_STATE_INDIRECT_LOOPBACK
} APS_STATE_ENUM;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -