123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- /**************************************************************************************************
- Filename: mac_main.h
- Revised: $Date: 2009-08-12 14:34:18 -0700 (Wed, 12 Aug 2009) $
- Revision: $Revision: 20549 $
- Description: Internal interface file for the MAC.
- Copyright 2005-2009 Texas Instruments Incorporated. All rights reserved.
- IMPORTANT: Your use of this Software is limited to those specific rights
- granted under the terms of a software license agreement between the user
- who downloaded the software, his/her employer (which must be your employer)
- and Texas Instruments Incorporated (the "License"). You may not use this
- Software unless you agree to abide by the terms of the License. The License
- limits your use, and you acknowledge, that the Software may not be modified,
- copied or distributed unless embedded on a Texas Instruments microcontroller
- or used solely and exclusively in conjunction with a Texas Instruments radio
- frequency transceiver, which is integrated into your product. Other than for
- the foregoing purpose, you may not use, reproduce, copy, prepare derivative
- works of, modify, distribute, perform, display or sell this Software and/or
- its documentation for any purpose.
- YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
- PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
- INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
- NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
- TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
- NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
- LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
- INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
- OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
- OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
- (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
- Should you have any questions regarding your right to use this Software,
- contact Texas Instruments Incorporated at www.TI.com.
- **************************************************************************************************/
- #ifndef MAC_MAIN_H
- #define MAC_MAIN_H
- /* ------------------------------------------------------------------------------------------------
- * Includes
- * ------------------------------------------------------------------------------------------------
- */
- #include "mac_high_level.h"
- /* ------------------------------------------------------------------------------------------------
- * Constants
- * ------------------------------------------------------------------------------------------------
- */
- /* State machine states */
- enum
- {
- MAC_IDLE_ST, /* Idle state */
- MAC_ASSOCIATING_ST, /* MAC device is performing the association procedure */
- MAC_POLLING_ST, /* MAC device is polling coordinator for data */
- MAC_SCANNING_ST, /* MAC device or coordinator is performing a scan procedure */
- MAC_STARTING_ST /* MAC coordinator is starting a network */
- };
- /* State machine events */
- 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
- };
- /* This must be set to the last API event in the enumeration */
- #define MAC_API_EVT_MAX MAC_API_PWR_ON_REQ_EVT
- /* Enumeration of action function table sets; maximum of 16 */
- 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
- };
- /* these macros process the action enumeration value */
- #define MAC_ACTION_INIT(n) ((n) << 4)
- #define MAC_ACTION_SET(n) ((n) >> 4)
- #define MAC_ACTION_ID(n) ((n) & 0x0F)
- /* Enumeration of action functions; maximum of 16 per set */
- enum
- {
- /* Mgmt set 1 */
- 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,
- /* Mgmt set 2 */
- 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,
- /* Scan */
- 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,
- /* Device set 1 */
- 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,
- /* Device set 2 */
- 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,
- /* Coordinator set 1 */
- MAC_API_START_REQ = MAC_ACTION_INIT(MAC_COORD_ACTION_1),
- MAC_START_CONTINUE,
- /* Coordinator set 2 */
- 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,
- /* Coordinator set 3 */
- MAC_API_ORPHAN_RSP = MAC_ACTION_INIT(MAC_COORD_ACTION_3),
- MAC_API_PURGE_REQ,
- MAC_RX_ORPHAN,
- MAC_RX_PAN_CONFLICT,
- /* Beacon device */
- 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
- };
- /* Special hdr.event mask value used to mark buffer as reserved (do not deallocate) */
- #define MAC_BUF_RESERVED 0x80
- /* OSAL task events (as uint8) */
- #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
- /* State table format */
- #define MAC_ACTION_POS 0 /* action position */
- #define MAC_NEXT_STATE_POS 1 /* next state position */
- #define MAC_NUM_COLS 2 /* number of columns in state tables */
- /* Configurable features */
- 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
- };
- /* Configurable feature masks */
- #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)
- /* RX enable/disable masks */
- #define MAC_RX_POLL 0x01 /* polling/associating */
- #define MAC_RX_WHEN_IDLE 0x02 /* PIB rxOnWhenIdle */
- #define MAC_RX_SCAN 0x04 /* scanning */
- #define MAC_RX_BROADCAST_PEND 0x10 /* pending broadcast */
- #define MAC_RX_BEACON_DEVICE 0x20 /* beacon tracking */
- #define MAC_RX_BEACON_NETWORK 0x40 /* beacon network */
- #define MAC_RX_BEACON_SYNC 0x80 /* beacon sync */
- /* TX mode masks */
- #define MAC_TX_MODE_NON_CSMA 0x01 /* frame tx without CSMA */
- #define MAC_TX_MODE_SLOTTED 0x02 /* frame tx in slotted mode */
- #define MAC_TX_MODE_INTERNAL 0x08 /* frame is for internal purposes */
- #define MAC_TX_MODE_SCAN_RELATED 0x10 /* frame is scan related */
- #define MAC_TX_MODE_BROADCAST 0x20 /* broadcast frame in beacon network */
- #define MAC_TX_MODE_BEACON 0x40 /* beacon tx in beacon network */
- #define MAC_TX_MODE_REQUESTED 0x80 /* indirect frame was requested in beacon network */
- /* TX schedule masks */
- #define MAC_TX_SCHED_OUTGOING_CAP 0x01 /* outgoing CAP (default) */
- #define MAC_TX_SCHED_INCOMING_CAP 0x02 /* incoming CAP */
- #define MAC_TX_SCHED_INDIRECT_NO_ACK 0x04 /* frame is indirect and not acked */
- #define MAC_TX_SCHED_READY 0x10 /* frame scheduled as ready to tx */
- #define MAC_TX_SCHED_SCAN_RELATED 0x20 /* frame is scan related */
- #define MAC_TX_SCHED_MARKED 0x40 /* frame is marked for pending address list */
- #define MAC_TX_SCHED_INDIRECT 0x80 /* frame is indirect */
- #define MAC_TX_SCHED_INACTIVE 0xFF /* inactive portion of the superframe */
- /* ------------------------------------------------------------------------------------------------
- * Macros
- * ------------------------------------------------------------------------------------------------
- */
- /* API parameter checking macro */
- #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
- /* ------------------------------------------------------------------------------------------------
- * Typedefs
- * ------------------------------------------------------------------------------------------------
- */
- /* State table type */
- typedef const uint8 (CODE * macStateTbl_t)[MAC_NUM_COLS];
- /* Event structure for API events with buffer for command frame */
- 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;
- /* MLME purge request type */
- typedef struct
- {
- uint8 msduHandle;
- } macMcpsPurgeReq_t;
- /* Event structure for API events */
- typedef struct
- {
- macEventHdr_t hdr;
- union
- {
- macMlmeScanReq_t scanReq;
- macMlmeStartReq_t startReq;
- macMlmeSyncReq_t syncReq;
- macMlmePollReq_t pollReq;
- macMcpsPurgeReq_t purgeReq;
- } mac;
- } macApiEvent_t;
- /* Union of event structures */
- 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;
- /* Action function type */
- typedef void (*macAction_t)(macEvent_t *pEvent);
- /* Action function set type */
- typedef const macAction_t CODE * macActionSet_t;
- /* Type for mac_main data */
- typedef struct
- {
- macEvent_t *pPending; /* pointer to pending buffer */
- uint8 *pBuf;
- uint16 featureMask; /* mask of initialized features */
- uint8 state; /* state machine state */
- } macMain_t;
- /* Type for module reset functions */
- typedef void (*macReset_t)(void);
- /* ------------------------------------------------------------------------------------------------
- * Global Variables
- * ------------------------------------------------------------------------------------------------
- */
- /* state tables */
- 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];
- /* state table array */
- extern macStateTbl_t macStateTbl[];
- /* OSAL task id */
- extern uint8 macTaskId;
- /* mac_main data */
- extern macMain_t macMain;
- /* module reset functions */
- extern macReset_t macReset[MAC_FEAT_MAX];
- /* state machine action function table pointers */
- extern macActionSet_t macActionSet[MAC_ACTION_SET_MAX];
- /* configurable parameters */
- extern const macCfg_t macCfg;
- /* ------------------------------------------------------------------------------------------------
- * Function Prototypes
- * ------------------------------------------------------------------------------------------------
- */
- 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 /* MAC_MAIN_H */
|