123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- #ifndef MAC_MAIN_H
- #define MAC_MAIN_H
- #include "mac_high_level.h"
- enum
- {
- MAC_IDLE_ST,
- MAC_ASSOCIATING_ST,
- MAC_POLLING_ST,
- MAC_SCANNING_ST,
- MAC_STARTING_ST
- };
- enum
- {
- MAC_API_DATA_REQ_EVT,
- MAC_API_PURGE_REQ_EVT,
- MAC_API_ASSOCIATE_REQ_EVT,
- MAC_API_ASSOCIATE_RSP_EVT,
- MAC_API_DISASSOCIATE_REQ_EVT,
- MAC_API_ORPHAN_RSP_EVT,
- MAC_API_POLL_REQ_EVT,
- MAC_API_SCAN_REQ_EVT,
- MAC_API_START_REQ_EVT,
- MAC_API_SYNC_REQ_EVT,
- MAC_API_PWR_ON_REQ_EVT,
- MAC_RX_ASSOC_REQ_EVT,
- MAC_RX_ASSOC_RSP_EVT,
- MAC_RX_DISASSOC_EVT,
- MAC_RX_DATA_REQ_EVT,
- MAC_RX_PAN_CONFLICT_EVT,
- MAC_RX_ORPHAN_EVT,
- MAC_RX_BEACON_REQ_EVT,
- MAC_RX_REALIGN_EVT,
- MAC_RX_GTS_REQ_EVT,
- MAC_RX_BEACON_EVT,
- MAC_RX_DATA_IND_EVT,
- MAC_TX_ASSOC_REQ_OK_EVT,
- MAC_TX_ASSOC_REQ_FAIL_EVT,
- MAC_TX_ASSOC_RSP_EVT,
- MAC_TX_DISASSOC_EVT,
- MAC_TX_ORPHAN_OK_EVT,
- MAC_TX_ORPHAN_FAIL_EVT,
- MAC_TX_BEACON_REQ_OK_EVT,
- MAC_TX_BEACON_REQ_FAIL_EVT,
- MAC_TX_REALIGN_OK_EVT,
- MAC_TX_REALIGN_FAIL_EVT,
- MAC_TX_DATA_REQ_OK_EVT,
- MAC_TX_DATA_REQ_FAIL_EVT,
- MAC_TX_DATA_REQ_PEND_EVT,
- MAC_TX_CONFLICT_OK_EVT,
- MAC_TIM_RESPONSE_WAIT_EVT,
- MAC_TIM_FRAME_RESPONSE_EVT,
- MAC_TIM_SCAN_EVT,
- MAC_TIM_SYNC_EVT,
- MAC_TIM_EXP_INDIRECT_EVT,
- MAC_INT_SCAN_COMPLETE_EVT,
- MAC_INT_ASSOC_FAILED_EVT,
- MAC_INT_AUTO_POLL_EVT,
- MAC_INT_START_COMPLETE_EVT,
- MAC_INT_TX_COMPLETE_EVT,
- MAC_INT_BEACON_RESP_TIM_EVT,
- MAC_INT_BROADCAST_PEND_EVT,
- MAC_NO_ACTION_EVT
- };
- #define MAC_API_EVT_MAX MAC_API_PWR_ON_REQ_EVT
- enum
- {
- MAC_MGMT_ACTION_1,
- MAC_MGMT_ACTION_2,
- MAC_SCAN_ACTION,
- MAC_DEVICE_ACTION_1,
- MAC_DEVICE_ACTION_2,
- MAC_COORD_ACTION_1,
- MAC_COORD_ACTION_2,
- MAC_COORD_ACTION_3,
- MAC_BEACON_DEVICE_ACTION,
- MAC_ACTION_SET_MAX
- };
- #define MAC_ACTION_INIT(n) ((n) << 4)
- #define MAC_ACTION_SET(n) ((n) >> 4)
- #define MAC_ACTION_ID(n) ((n) & 0x0F)
- enum
- {
-
- MAC_NO_ACTION = MAC_ACTION_INIT(MAC_MGMT_ACTION_1),
- MAC_API_BAD_STATE,
- MAC_API_PENDING,
- MAC_API_DATA_REQ,
- MAC_COMM_STATUS_IND,
- MAC_DATA_SEND,
- MAC_DATA_RX_IND,
-
- MAC_API_PWR_ON_REQ = MAC_ACTION_INIT(MAC_MGMT_ACTION_2),
- MAC_API_DISASSOCIATE_REQ,
- MAC_DISASSOC_COMPLETE,
- MAC_RX_BEACON,
- MAC_RX_DISASSOC,
-
- MAC_API_SCAN_REQ = MAC_ACTION_INIT(MAC_SCAN_ACTION),
- MAC_SCAN_COMPLETE,
- MAC_SCAN_FAILED_IN_PROGRESS,
- MAC_SCAN_NEXT_CHAN,
- MAC_SCAN_RX_BEACON,
- MAC_SCAN_START_TIMER,
-
- MAC_API_ASSOCIATE_REQ = MAC_ACTION_INIT(MAC_DEVICE_ACTION_1),
- MAC_API_POLL_REQ,
- MAC_ASSOC_DATA_REQ,
- MAC_ASSOC_DATA_REQ_COMPLETE,
- MAC_ASSOC_DATA_RX_IND,
- MAC_ASSOC_FAILED,
- MAC_ASSOC_FRAME_RESPONSE_TIMEOUT,
- MAC_POLL_DATA_REQ_COMPLETE,
- MAC_POLL_DATA_RX_IND,
- MAC_POLL_FRAME_RESPONSE_TIMEOUT,
- MAC_POLL_RX_ASSOC_RSP,
- MAC_RX_ASSOC_RSP,
- MAC_START_FRAME_RESPONSE_TIMER,
- MAC_START_RESPONSE_TIMER,
-
- MAC_ASSOC_RX_DISASSOC = MAC_ACTION_INIT(MAC_DEVICE_ACTION_2),
- MAC_POLL_RX_DISASSOC,
- MAC_SCAN_RX_COORD_REALIGN,
- MAC_RX_COORD_REALIGN,
- MAC_PAN_CONFLICT_COMPLETE,
-
- MAC_API_START_REQ = MAC_ACTION_INIT(MAC_COORD_ACTION_1),
- MAC_START_CONTINUE,
-
- MAC_API_ASSOCIATE_RSP = MAC_ACTION_INIT(MAC_COORD_ACTION_2),
- MAC_RX_ASSOC_REQ,
- MAC_RX_BEACON_REQ,
- MAC_RX_DATA_REQ,
- MAC_START_COMPLETE,
- MAC_INDIRECT_EXPIRE,
-
- MAC_API_ORPHAN_RSP = MAC_ACTION_INIT(MAC_COORD_ACTION_3),
- MAC_API_PURGE_REQ,
- MAC_RX_ORPHAN,
- MAC_RX_PAN_CONFLICT,
-
- MAC_API_SYNC_REQ = MAC_ACTION_INIT(MAC_BEACON_DEVICE_ACTION),
- MAC_AUTO_POLL,
- MAC_BEACON_START_FRAME_RSP_TIMER,
- MAC_START_BROADCAST_PEND_TIMER
- };
- #define MAC_BUF_RESERVED 0x80
- #define MAC_RESPONSE_WAIT_TASK_EVT 0x01
- #define MAC_FRAME_RESPONSE_TASK_EVT 0x02
- #define MAC_SCAN_TASK_EVT 0x04
- #define MAC_EXP_INDIRECT_TASK_EVT 0x08
- #define MAC_TX_COMPLETE_TASK_EVT 0x10
- #define MAC_RX_QUEUE_TASK_EVT 0x20
- #define MAC_START_COMPLETE_TASK_EVT 0x40
- #define MAC_BROADCAST_PEND_TASK_EVT 0x80
- #define MAC_ACTION_POS 0
- #define MAC_NEXT_STATE_POS 1
- #define MAC_NUM_COLS 2
- enum
- {
- MAC_FEAT_DEVICE,
- MAC_FEAT_COORD,
- MAC_FEAT_SECURITY,
- MAC_FEAT_BEACON_COORD,
- MAC_FEAT_BEACON_DEVICE,
- MAC_FEAT_GTS_CLIENT,
- MAC_FEAT_GTS_SERVER,
- MAC_FEAT_MAX
- };
- #define MAC_FEAT_DEVICE_MASK ((uint16) 1 << MAC_FEAT_DEVICE)
- #define MAC_FEAT_COORD_MASK ((uint16) 1 << MAC_FEAT_COORD)
- #define MAC_FEAT_SECURITY_MASK ((uint16) 1 << MAC_FEAT_SECURITY)
- #define MAC_FEAT_BEACON_COORD_MASK ((uint16) 1 << MAC_FEAT_BEACON_COORD)
- #define MAC_FEAT_BEACON_DEVICE_MASK ((uint16) 1 << MAC_FEAT_BEACON_DEVICE)
- #define MAC_FEAT_GTS_CLIENT_MASK ((uint16) 1 << MAC_FEAT_GTS_CLIENT)
- #define MAC_FEAT_GTS_SERVER_MASK ((uint16) 1 << MAC_FEAT_GTS_SERVER)
- #define MAC_FEAT_GTS_MASK (MAC_FEAT_GTS_CLIENT_MASK | MAC_FEAT_GTS_SERVER_MASK)
- #define MAC_RX_POLL 0x01
- #define MAC_RX_WHEN_IDLE 0x02
- #define MAC_RX_SCAN 0x04
- #define MAC_RX_BROADCAST_PEND 0x10
- #define MAC_RX_BEACON_DEVICE 0x20
- #define MAC_RX_BEACON_NETWORK 0x40
- #define MAC_RX_BEACON_SYNC 0x80
- #define MAC_TX_MODE_NON_CSMA 0x01
- #define MAC_TX_MODE_SLOTTED 0x02
- #define MAC_TX_MODE_INTERNAL 0x08
- #define MAC_TX_MODE_SCAN_RELATED 0x10
- #define MAC_TX_MODE_BROADCAST 0x20
- #define MAC_TX_MODE_BEACON 0x40
- #define MAC_TX_MODE_REQUESTED 0x80
- #define MAC_TX_SCHED_OUTGOING_CAP 0x01
- #define MAC_TX_SCHED_INCOMING_CAP 0x02
- #define MAC_TX_SCHED_INDIRECT_NO_ACK 0x04
- #define MAC_TX_SCHED_READY 0x10
- #define MAC_TX_SCHED_SCAN_RELATED 0x20
- #define MAC_TX_SCHED_MARKED 0x40
- #define MAC_TX_SCHED_INDIRECT 0x80
- #define MAC_TX_SCHED_INACTIVE 0xFF
- #if defined(MAC_NO_PARAM_CHECK) && MAC_NO_PARAM_CHECK == TRUE
- #define MAC_PARAM_STATUS(expr, status)
- #else
- #define MAC_PARAM_STATUS(expr, status) if ((expr) == FALSE) status = MAC_INVALID_PARAMETER
- #endif
- typedef const uint8 (CODE * macStateTbl_t)[MAC_NUM_COLS];
- typedef struct
- {
- macEventHdr_t hdr;
- sData_t mpdu;
- macTxIntData_t internal;
- union
- {
- macMlmeAssociateReq_t associateReq;
- macMlmeAssociateRsp_t associateRsp;
- macMlmeDisassociateReq_t disassociateReq;
- macMlmeOrphanRsp_t orphanRsp;
- } mac;
- } macApiDataEvent_t;
- typedef struct
- {
- uint8 msduHandle;
- } macMcpsPurgeReq_t;
- typedef struct
- {
- macEventHdr_t hdr;
- union
- {
- macMlmeScanReq_t scanReq;
- macMlmeStartReq_t startReq;
- macMlmeSyncReq_t syncReq;
- macMlmePollReq_t pollReq;
- macMcpsPurgeReq_t purgeReq;
- } mac;
- } macApiEvent_t;
- typedef union
- {
- macEventHdr_t hdr;
- macApiEvent_t api;
- macApiDataEvent_t apiData;
- macMcpsDataReq_t dataReq;
- macMcpsDataInd_t dataInd;
- macTx_t tx;
- macRx_t rx;
- macMlmeBeaconNotifyInd_t beaconNotify;
- } macEvent_t;
- typedef void (*macAction_t)(macEvent_t *pEvent);
- typedef const macAction_t CODE * macActionSet_t;
- typedef struct
- {
- macEvent_t *pPending;
- uint8 *pBuf;
- uint16 featureMask;
- uint8 state;
- } macMain_t;
- typedef void (*macReset_t)(void);
- extern const uint8 CODE macIdleSt[][MAC_NUM_COLS];
- extern const uint8 CODE macAssociatingSt[][MAC_NUM_COLS];
- extern const uint8 CODE macPollingSt[][MAC_NUM_COLS];
- extern const uint8 CODE macScanningSt[][MAC_NUM_COLS];
- extern const uint8 CODE macStartingSt[][MAC_NUM_COLS];
- extern macStateTbl_t macStateTbl[];
- extern uint8 macTaskId;
- extern macMain_t macMain;
- extern macReset_t macReset[MAC_FEAT_MAX];
- extern macActionSet_t macActionSet[MAC_ACTION_SET_MAX];
- extern const macCfg_t macCfg;
- MAC_INTERNAL_API void macMainReset(void);
- MAC_INTERNAL_API void macSetEvent(uint8 event);
- MAC_INTERNAL_API void macCbackForEvent(macEvent_t *pEvent, uint8 status);
- MAC_INTERNAL_API bool macStateIdle(void);
- MAC_INTERNAL_API bool macStateIdleOrPolling(void);
- MAC_INTERNAL_API bool macStateScanning(void);
- MAC_INTERNAL_API void macExecute(macEvent_t *pEvent);
- MAC_INTERNAL_API void macSendMsg(uint8 event, void *pData);
- MAC_INTERNAL_API uint8 macSendDataMsg(uint8 event, bool security, void *pData);
- MAC_INTERNAL_API void macMainReserve(uint8 *ptr);
- MAC_INTERNAL_API void mac_msg_deallocate(uint8 **msg_ptr);
- #endif
|