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

📄 porttopcaps.h

📁 ucos在NEC平台下的移植
💻 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 + -