📄 mac_tx_engine.h
字号:
#ifndef MAC_TX_ENGINE_H
#define MAC_TX_ENGINE_H
/*******************************************************************************************************
*******************************************************************************************************
************************** CONSTANTS AND MACROS **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// Bits to be used with MAC_TX_PACKET.txMode
#define MTX_MODE_USE_CSMACA_BM 0x01 /* Transmitted using CSMA-CA */
#define MTX_MODE_FORCE_UNSLOTTED_BM 0x02 /* Force unslotted transmission in a beacon network */
#define MTX_MODE_MAC_INTERNAL_BM 0x04 /* The packet is transmitted by the MAC layer */
#define MTX_MODE_SCAN_RELATED_BM 0x08 /* This packet is related to channel scanning */
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** STATE MACHINES **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// Return values for csmaSetStartupTime(...)
#define MTX_SST_SUCCESS 0
#define MTX_SST_RESOURCE_SHORTAGE 1
#define MTX_SST_INDIRECT_PACKET_TOO_LATE 2
// mtxScheduleTransmission
#define MTX_STATE_INIT_TRANSMISSION 0
#define MTX_STATE_INIT_CSMACA 1
#define MTX_STATE_SET_STARTUP_TIME 2
#define MTX_STATE_WAIT 3
// mtxStartTransmission
#define MTX_STATE_TURN_ON_RX 0
#define MTX_STATE_PREPARE 1
#define MTX_STATE_CCA 2
#define MTX_STATE_START_TRANSMISSION 3
// TX status
#define MTX_STATUS_WAITING 0
#define MTX_STATUS_TRANSMISSION_STARTED 1
#define MTX_STATUS_TX_FINISHED 2
#define MTX_STATUS_CHANNEL_ACCESS_FAILURE 3
#define MTX_STATUS_ACK_TIMEOUT 4
#define MTX_STATUS_ACK_RECEIVED 5
#define MTX_STATUS_ACK_HANDLER_CREATED 6
#define MTX_STATUS_FINISHED 7
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** MODULE DATA **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// Internal module data
typedef struct {
// A pointer to the active packet (this pointer can be used by mcpsPurgeRequest() to check
// whether or not the packet is in the CSMA-CA mechanism
MAC_TX_PACKET *pPacket;
// CSMA-CA "state machine"
UINT8 be; // Backoff exponent
UINT8 nb; // Number of backoffs
// The status which is reported after the packet has been scheduled
UINT8 status;
/* Variables used when the CSMA-CA mechanism is resumed after the beacon*/
ZBOOL waitForBeacon;
ZBOOL searchForBeacon; // The TX engine has initiated a search for the beacon
INT8 randomBackoff;
// A permanently reserved task used to start the transmission (mtxStartTransmission(...))
UINT8 startTxTask;
} MAC_TX_INFO;
//-------------------------------------------------------------------------------------------------------
/*******************************************************************************************************
*******************************************************************************************************
************************** FUNCTION PROTOTYPES **************************
*******************************************************************************************************
*******************************************************************************************************/
//-------------------------------------------------------------------------------------------------------
// msecFindSecurityMaterial and msecProcessSecurityCounters function prototypes. Moved from
// mac_security.h because of type definition conflicts between these files and function headers
void msecFindTxSecurityMaterial(MAC_TX_PACKET *pPacket, ZBOOL securityEnable, BYTE addrMode, WORD panId, ADDRESS *pAddr);
UINT8 msecProcessSecurityCounters(MAC_TX_PACKET *pPacket, BYTE *pPayload);
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
// Entry function
void mtxScheduleTransmission(void *pTask);
void mtxFinishTransmission(MAC_ENUM status, MAC_TX_PACKET *pPacket);
// Transmission functions (CCA + TX on + FIFO writing)
void mtxStartTransmission(void *pTask);
// Beacon location (when not tracking in a beacon network)
void mtxLocateBeaconTimeout(void);
// Startup time
void mtxCreateStartTask(void);
ZBOOL mtxStartAfterDelay(UINT8 delay);
BYTE mtxSetStartupTime(void);
// Timeout
void mtxPacketTimeout(void);
// Resume transmission after beacon reception/transmission (out of CAP in the last superframe)
void mtxResumeAfterBeacon(void);
void mtxResumeAfterBeaconCallback(void);
void mtxResumeAfterBeaconTask(void *pTask);
// Generates a properly formatted comm-status indication (for TX) to the higher layer
void mtxCommStatusIndication(MAC_TX_PACKET *pPacket, BYTE status);
//-------------------------------------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -