123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- #ifndef MAC_SPEC_H
- #define MAC_SPEC_H
- #define MAC_PHY_SHR_LEN 5
- #define MAC_PHY_PHR_LEN 1
- #define MAC_FCF_FIELD_LEN 2
- #define MAC_SEQ_NUM_FIELD_LEN 1
- #define MAC_PAN_ID_FIELD_LEN 2
- #define MAC_EXT_ADDR_FIELD_LEN 8
- #define MAC_SHORT_ADDR_FIELD_LEN 2
- #define MAC_FCS_FIELD_LEN 2
- #define MAC_SEC_CONTROL_FIELD_LEN 1
- #define MAC_FCF_OFFSET 0
- #define MAC_SEQ_NUM_OFFSET 2
- #define MAC_DEST_PAN_ID_OFFSET 3
- #define MAC_DEST_ADDR_OFFSET 5
- #define MAC_FCF_FRAME_TYPE_MASK 0x0007
- #define MAC_FCF_SEC_ENABLED_MASK 0x0008
- #define MAC_FCF_FRAME_PENDING_MASK 0x0010
- #define MAC_FCF_ACK_REQUEST_MASK 0x0020
- #define MAC_FCF_INTRA_PAN_MASK 0x0040
- #define MAC_FCF_DST_ADDR_MODE_MASK 0x0C00
- #define MAC_FCF_FRAME_VERSION_MASK 0x3000
- #define MAC_FCF_SRC_ADDR_MODE_MASK 0xC000
- #define MAC_FCF_FRAME_TYPE_POS 0
- #define MAC_FCF_SEC_ENABLED_POS 3
- #define MAC_FCF_FRAME_PENDING_POS 4
- #define MAC_FCF_ACK_REQUEST_POS 5
- #define MAC_FCF_INTRA_PAN_POS 6
- #define MAC_FCF_DST_ADDR_MODE_POS 10
- #define MAC_FCF_FRAME_VERSION_POS 12
- #define MAC_FCF_SRC_ADDR_MODE_POS 14
- #define MAC_SCF_SECURITY_LEVEL_MASK 0x07
- #define MAC_SCF_KEY_IDENTIFIER_MASK 0x18
- #define MAC_SCF_SECURITY_LEVEL_POS 0
- #define MAC_SCF_KEY_IDENTIFIER_POS 3
- #define MAC_SFS_OFFSET 0
- #define MAC_PENDING_ADDR_OFFSET 3
- #define MAC_SFS_BEACON_ORDER_POS 0
- #define MAC_SFS_SUPERFRAME_ORDER_POS 4
- #define MAC_SFS_FINAL_CAP_SLOT_POS 0
- #define MAC_SFS_BATT_LIFE_EXT_POS 4
- #define MAC_SFS_PAN_COORD_POS 6
- #define MAC_SFS_ASSOC_PERMIT_POS 7
- #define MAC_FRAME_TYPE_BEACON 0
- #define MAC_FRAME_TYPE_DATA 1
- #define MAC_FRAME_TYPE_ACK 2
- #define MAC_FRAME_TYPE_COMMAND 3
- #define MAC_FRAME_TYPE_MAX_VALID MAC_FRAME_TYPE_COMMAND
- #define MAC_ASSOC_REQ_FRAME 1
- #define MAC_ASSOC_RSP_FRAME 2
- #define MAC_DISASSOC_NOTIF_FRAME 3
- #define MAC_DATA_REQ_FRAME 4
- #define MAC_PAN_CONFLICT_FRAME 5
- #define MAC_ORPHAN_NOTIF_FRAME 6
- #define MAC_BEACON_REQ_FRAME 7
- #define MAC_COORD_REALIGN_FRAME 8
- #define MAC_GTS_REQ_FRAME 9
- #define MAC_ZERO_DATA_PAYLOAD 0
- #define MAC_ASSOC_REQ_PAYLOAD 2
- #define MAC_ASSOC_RSP_PAYLOAD 4
- #define MAC_DISASSOC_NOTIF_PAYLOAD 2
- #define MAC_DATA_REQ_PAYLOAD 1
- #define MAC_PAN_CONFLICT_PAYLOAD 1
- #define MAC_ORPHAN_NOTIF_PAYLOAD 1
- #define MAC_BEACON_REQ_PAYLOAD 1
- #define MAC_COORD_REALIGN_PAYLOAD 9
- #define MAC_GTS_REQ_PAYLOAD 2
- #define MAC_ZERO_DATA_FRAME_LEN (21 + MAC_ZERO_DATA_PAYLOAD)
- #define MAC_ASSOC_REQ_FRAME_LEN (23 + MAC_ASSOC_REQ_PAYLOAD)
- #define MAC_ASSOC_RSP_FRAME_LEN (23 + MAC_ASSOC_RSP_PAYLOAD)
- #define MAC_DISASSOC_NOTIF_FRAME_LEN (17 + MAC_DISASSOC_NOTIF_PAYLOAD)
- #define MAC_DATA_REQ_FRAME_LEN (23 + MAC_DATA_REQ_PAYLOAD)
- #define MAC_PAN_CONFLICT_FRAME_LEN (23 + MAC_PAN_CONFLICT_PAYLOAD)
- #define MAC_ORPHAN_NOTIF_FRAME_LEN (17 + MAC_ORPHAN_NOTIF_PAYLOAD)
- #define MAC_BEACON_REQ_FRAME_LEN (7 + MAC_BEACON_REQ_PAYLOAD)
- #define MAC_COORD_REALIGN_FRAME_LEN (23 + MAC_COORD_REALIGN_PAYLOAD)
- #define MAC_GTS_REQ_FRAME_LEN (7 + MAC_GTS_REQ_PAYLOAD)
- #define MAC_BEACON_FRAME_BASE_LEN (13 + 4)
- #define MAC_PEND_ADDR_MAX 7
- #define MAC_ASSOC_SUCCESS 0
- #define MAC_ASSOC_CAPACITY 1
- #define MAC_ASSOC_DENIED 2
- #define MAC_BO_NON_BEACON 15
- #define MAC_SO_NONE 15
- #define MAC_PAN_ID_BROADCAST 0xFFFF
- #define MAC_SYMBOLS_PER_OCTET 2
- #define MAC_A_MAX_PHY_PACKET_SIZE 127
- #define MAC_A_TURNAROUND_TIME 12
- #define MAC_A_BASE_SLOT_DURATION 3
- #define MAC_A_BASE_SUPERFRAME_DURATION (MAC_A_BASE_SLOT_DURATION * MAC_A_NUM_SUPERFRAME_SLOTS)
- #define MAC_A_MAX_BEACON_OVERHEAD 75
- #define MAC_A_MAX_BEACON_PAYLOAD_LENGTH (MAC_A_MAX_PHY_PACKET_SIZE - MAC_A_MAX_BEACON_OVERHEAD)
- #define MAC_A_GTS_DESC_PERSISTENCE_TIME 4
- #define MAC_A_MAX_FRAME_OVERHEAD 25
- #define MAC_A_MAX_LOST_BEACONS 4
- #define MAC_A_MAX_FRAME_SIZE (MAC_A_MAX_PHY_PACKET_SIZE - MAC_A_MAX_FRAME_OVERHEAD)
- #define MAC_A_MAX_SIFS_FRAME_SIZE 18
- #define MAC_A_MIN_CAP_LENGTH 440
- #define MAC_A_MIN_LIFS_PERIOD 40
- #define MAC_A_MIN_SIFS_PERIOD 12
- #define MAC_A_NUM_SUPERFRAME_SLOTS 16
- #define MAC_A_UNIT_BACKOFF_PERIOD 20
- #define MAC_SPEC_ED_MAX 0xFF
- #define MAC_SPEC_ED_MIN_DBM_ABOVE_RECEIVER_SENSITIVITY 10
- #define MAC_SPEC_MIN_RECEIVER_SENSITIVITY -85
- #define MAC_SPEC_PREAMBLE_FIELD_LENGTH 8
- #define MAC_SPEC_SFD_FIELD_LENGTH 2
- #define MAC_SPEC_USECS_PER_SYMBOL 16
- #define MAC_SPEC_USECS_PER_BACKOFF (MAC_SPEC_USECS_PER_SYMBOL * MAC_A_UNIT_BACKOFF_PERIOD)
- #define MAC_SPEC_OCTETS_PER_SYMBOL 2
- #define MAC_GTS_FIELDS_LEN(gtsSpec) ((uint8)((((gtsSpec) & 0x07) * 3) + (((gtsSpec) & 0x07) ? 1 : 0)))
- #define MAC_FRAME_TYPE(p) ((p)[MAC_FCF_OFFSET+0] & 0x07)
- #define MAC_SEC_ENABLED(p) ((p)[MAC_FCF_OFFSET+0] & 0x08)
- #define MAC_FRAME_PENDING(p) ((p)[MAC_FCF_OFFSET+0] & 0x10)
- #define MAC_ACK_REQUEST(p) ((p)[MAC_FCF_OFFSET+0] & 0x20)
- #define MAC_INTRA_PAN(p) ((p)[MAC_FCF_OFFSET+0] & 0x40)
- #define MAC_DEST_ADDR_MODE(p) (((p)[MAC_FCF_OFFSET+1] >> 2) & 0x3)
- #define MAC_FRAME_VERSION(p) (((p)[MAC_FCF_OFFSET+1] >> 4) & 0x3)
- #define MAC_SRC_ADDR_MODE(p) (((p)[MAC_FCF_OFFSET+1] >> 6) & 0x3)
- #define MAC_SEQ_NUMBER(p) ((p)[MAC_SEQ_NUM_OFFSET])
- #endif
|