wireless/ieee802154: Defines more data types/macros. Some renaming and cleanup

This commit is contained in:
Anthony Merlino 2017-04-05 15:03:47 -04:00
parent 240a871af1
commit aada26f903
2 changed files with 417 additions and 206 deletions

View File

@ -2,7 +2,13 @@
* include/nuttx/wireless/ieee802154/ieee802154_mac.h
*
* Copyright (C) 2016 Sebastien Lorquet. All rights reserved.
* Copyright (C) 2017 Verge Inc. All rights reserved.
*
* Author: Sebastien Lorquet <sebastien@lorquet.fr>
* Author: Anthony Merlino <anthony@vergeaero.com>
*
* The naming and comments for various fields are taken directly
* from the IEEE 802.15.4 2011 standard.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@ -142,29 +148,40 @@
/* IEEE 802.15.4 PHY constants */
#define IEEE802154_aMaxPHYPacketSize 127
#define IEEE802154_aTurnaroundTime 12 /*symbol periods*/
#define IEEE802154_MAX_PHY_PACKET_SIZE 127
#define IEEE802154_TURN_AROUND_TIME 12 /*symbol periods*/
/* IEEE 802.15.4 MAC constants */
#define IEEE802154_aBaseSlotDuration 60
#define IEEE802154_aNumSuperframeSlots 16
#define IEEE802154_aBaseSuperframeDuration (IEEE802154_aBaseSlotDuration * IEEE802154_aNumSuperframeSlots)
#define IEEE802154_aMaxBE 5
#define IEEE802154_aMaxBeaconOverhead 75
#define IEEE802154_aMaxBeaconPayloadLength (IEEE802154_aMaxPHYPacketSize - IEEE802154_aMaxBeaconOverhead)
#define IEEE802154_aGTSDescPersistenceTime 4
#define IEEE802154_aMaxFrameOverhead 25
#define IEEE802154_aMaxFrameResponseTime 1220
#define IEEE802154_aMaxFrameRetries 3
#define IEEE802154_aMaxLostBeacons 4
#define IEEE802154_aMaxMACFrameSize (IEEE802154_aMaxPHYPacketSize - IEEE802154_aMaxFrameOverhead)
#define IEEE802154_aMaxSIFSFrameSize 18
#define IEEE802154_aMinCAPLength 440
#define IEEE802154_aMinLIFSPeriod 40
#define IEEE802154_aMinSIFSPeriod 12
#define IEEE802154_aResponseWaitTime (32 * IEEE802154_aBaseSuperframeDuration)
#define IEEE802154_aUnitBackoffPeriod 20
#define IEEE802154_BASE_SLOT_DURATION 60
#define IEEE802154_NUM_SUPERFRAME_SLOTS 16
#define IEEE802154_BASE_SUPERFRAME_DURATION \
(IEEE802154_BASE_SLOT_DURATION * IEEE802154_NUM_SUPERFRAME_SLOTS)
#define IEEE802154_GTS_DESC_PERSISTENCE_TIME 4
#define IEEE802154_MAX_BEACON_OVERHEAD 75
#define IEEE802154_MAX_BEACON_PAYLOAD_LENGTH \
(IEEE802154_MAX_PHY_PACKET_SIZE - IEEE802154_MAX_BEACON_OVERHEAD)
#define IEEE802154_MAX_LOST_BEACONS 4
#define IEEE802514_MIN_MPDU_OVERHEAD 9
#define IEEE802154_MAX_MPDU_UNSEC_OVERHEAD 25
#define IEEE802154_MAX_SAFE_MAC_PAYLOAD_SIZE \
(IEEE802154_MAX_PHY_PACKET_SIZE - IEEE802154_MAX_MPDU_UNSEC_OVERHEAD)
#define IEEE802154_MAX_MAC_PAYLOAD_SIZE \
(IEEE802154_MAX_PHY_PACKET_SIZE - IEEE802154_MIN_MPDU_OVERHEAD)
#define IEEE802154_MAX_SIFS_FRAME_SIZE 18
#define IEEE802154_MIN_CAP_LENGTH 440
#define IEEE802154_UNIT_BACKOFF_PERIOD 20
/* IEEE 802.15.4 MAC PIB Attribut Defaults */
// TODO: Add macros
/****************************************************************************
* Public Types
@ -200,41 +217,100 @@ enum ieee802154_status_e
/* IEEE 802.15.4 PHY/MAC PIB attributes IDs */
enum
enum ieee802154_pib_attr_e
{
IEEE802154_phyCurrentChannel = 0x00,
IEEE802154_phyChannelsSupported,
IEEE802154_phyTransmitPower,
IEEE802154_phyCCAMode,
IEEE802154_macAckWaitDuration = 0x40,
IEEE802154_macAssociationPermit,
IEEE802154_macAutoRequest,
IEEE802154_macBattLifeExt,
IEEE802154_macBattLifeExtPeriods,
IEEE802154_macBeaconPayload,
IEEE802154_macBeaconPayloadLength,
IEEE802154_macBeaconOrder,
IEEE802154_macBeaconTxTime,
IEEE802154_macBSN,
IEEE802154_macCoordExtendedAddress,
IEEE802154_macCoordShortAddress,
IEEE802154_macDSN,
IEEE802154_macGTSPermit,
IEEE802154_macMaxCSMABackoffs,
IEEE802154_macMinBE,
IEEE802154_macPANId,
IEEE802154_macPromiscuousMode,
IEEE802154_macRxOnWhenIdle,
IEEE802154_macShortAddress,
IEEE802154_macSuperframeOrder,
IEEE802154_macTransactionPersistenceTime,
IEEE802154_macACLEntryDescriptorSet = 0x70,
IEEE802154_macACLEntryDescriptorSetSize,
IEEE802154_macDefaultSecurity,
IEEE802154_macDefaultSecurityMaterialLength,
IEEE802154_macDefaultSecurityMaterial,
IEEE802154_macDefaultSecuritySuite,
IEEE802154_macSecurityMode
/* PHY PIB Attributes */
IEEE802154_PIB_PHY_CURRENT_CHANNEL = 0x00,
IEEE802154_PIB_PHY_CHANNELS_SUPPORTED,
IEEE802154_PIB_PHY_TX_POWER_TOLERANCE,
IEEE802154_PIB_PHY_TX_POWER,
IEEE802154_PIB_PHY_CCA_MODE,
IEEE802154_PIB_PHY_CURRENT_PAGE,
IEEE802154_PIB_PHY_MAX_FRAME_DURATION,
IEEE802154_PIB_PHY_SHR_DURATION,
IEEE802154_PIB_PHY_SYM_PER_OCTET,
IEEE802154_PIB_PHY_PREAMBLE_SYM_LEN,
IEEE802154_PIB_PHY_UWB_DATARATES_SUP,
IEEE802154_PIB_PHY_CSS_LOW_DATARATE_SUP,
IEEE802154_PIB_PHY_UWB_COU_PULSES_SUP,
IEEE802154_PIB_PHY_UWB_CS_PULSES_SUP,
IEEE802154_PIB_PHY_UWB_LCP_PULSES_SUP,
IEEE802154_PIB_PHY_UWB_CURR_PULSE_SHAPE,
IEEE802154_PIB_PHY_UWB_COU_PULSE,
IEEE802154_PIB_PHY_UWB_CS_PULSE,
IEEE802154_PIB_PHY_UWB_LCP_WEIGHT1,
IEEE802154_PIB_PHY_UWB_LCP_WEIGHT2,
IEEE802154_PIB_PHY_UWB_LCP_WEIGHT3,
IEEE802154_PIB_PHY_UWB_LCP_WEIGHT4,
IEEE802154_PIB_PHY_UWB_LCP_DELAY2,
IEEE802154_PIB_PHY_UWB_LCP_DELAY3,
IEEE802154_PIB_PHY_UWB_LCP_DELAY4,
IEEE802154_PIB_PHY_RANGING,
IEEE802154_PIB_PHY_RANGING_CRYSTAL_OFFSET,
IEEE802154_PIB_PHY_RANGING_DPS,
IEEE802154_PIB_PHY_CURRENT_CODE,
IEEE802154_PIB_PHY_NATIVE_PRF,
IEEE802154_PIB_PHY_UWB_SCAN_BINS_PER_CHAN,
IEEE802154_PIB_PHY_UWB_INS_PREAMBLE_INTERVAL,
IEEE802154_PIB_PHY_UWB_TX_RMARKER,
IEEE802154_PIB_PHY_UWB_RX_RMARKER,
IEEE802154_PIB_PHY_RFRAME_PROC_TIME,
IEEE802154_PIB_PHY_CCA_DURATION,
/* MAC PIB Attributes */
IEEE802154_PIB_MAC_EXTENDED_ADDR = 0x40,
IEEE802154_PIB_MAC_ACK_WAIT_DUR,
IEEE802154_PIB_MAC_ASSOCIATED_PANCOORD,
IEEE802154_PIB_MAC_ASSOCIATION_PERMIT,
IEEE802154_PIB_MAC_AUTO_REQUEST,
IEEE802154_PIB_MAC_BATT_LIFE_EXT,
IEEE802154_PIB_MAC_BATT_LIFE_EXT_PERIODS,
IEEE802154_PIB_MAC_BEACON_PAYLOAD,
IEEE802154_PIB_MAC_BEACON_PAYLOAD_LEN,
IEEE802154_PIB_MAC_BEACON_ORDER,
IEEE802154_PIB_MAC_BEACON_TX_TIME,
IEEE802154_PIB_MAC_BSN,
IEEE802154_PIB_MAC_COORD_EXT_ADDR,
IEEE802154_PIB_MAC_COORD_SHORT_ADDR,
IEEE802154_PIB_MAC_DSN,
IEEE802154_PIB_MAC_GTS_PERMIT,
IEEE802154_PIB_MAC_MAX_BE,
IEEE802154_PIB_MAC_MAX_CSMA_BACKOFFS,
IEEE802154_PIB_MAC_FRAME_TOTAL_WAIT_TIME,
IEEE802154_PIB_MAC_MAX_FRAME_RETRIES,
IEEE802154_PIB_MAC_MIN_BE,
IEEE802154_PIB_MAC_LIFS_PERIOD,
IEEE802154_PIB_MAC_SIFS_PERIOD,
IEEE802154_PIB_MAC_PAN_ID,
IEEE802154_PIB_MAC_PROMISCUOUS_MODE,
IEEE802154_PIB_MAC_RANGING_SUPPORT,
IEEE802154_PIB_MAC_RESPONSE_WAIT_TIME,
IEEE802154_PIB_MAC_RX_ON_WHEN_IDLE,
IEEE802154_PIB_MAC_SECURITY_ENABLED,
IEEE802154_PIB_MAC_SHORT_ADDRESS,
IEEE802154_PIB_MAC_SUPERFRAME_ORDER,
IEEE802154_PIB_MAC_SYNC_SYMBOL_OFFSET,
IEEE802154_PIB_MAC_TIMESTAMP_SUPPORT,
IEEE802154_PIB_MAC_TRANSACTION_PERSIST_TIME,
IEEE802154_PIB_MAC_TX_CTRL_ACTIVE_DUR,
IEEE802154_PIB_MAC_TX_CTRL_PAUSE_DUR,
IEEE802154_PIB_MAC_TX_TOTAL_DUR,
/* MAC Security Attributes */
IEEE802154_PIB_MAC_KEY_TABLE = 0x70,
IEEE802154_PIB_MAC_DEV_TABLE,
IEEE802154_PIB_MAC_SEC_LVL_TABLE,
IEEE802154_PIB_MAC_FRAME_COUNTER,
IEEE802154_PIB_MAC_AUTOREQ_SEC_LVL,
IEEE802154_PIB_MAC_AUTOREQ_KEY_ID_MODE,
IEEE802154_PIB_MAC_AUTOREQ_KEY_SOURCE,
IEEE802154_PIB_MAC_AUTOREQ_KEY_INDEX,
IEEE802154_PIB_MAC_DEFAULT_KEY_SRC,
IEEE802154_PIB_MAC_PANCOORD_EXT_ADDR,
IEEE802154_PIB_MAC_PANCOORD_SHORT_ADDR,
};
/* IEEE 802.15.4 Device address
@ -253,12 +329,15 @@ enum ieee802154_addr_mode_e
struct ieee802154_addr_s
{
enum ieee802154_addr_mode_e ia_mode; /* Address mode. Short or Extended */
uint16_t ia_panid; /* PAN identifier, can be IEEE802154_PAN_UNSPEC */
/* Address mode. Short or Extended */
enum ieee802154_addr_mode_e ia_mode;
uint16_t ia_panid; /* PAN identifier, can be IEEE802154_PAN_UNSPEC */
union
{
uint16_t _ia_saddr; /* short address */
uint8_t _ia_eaddr[8]; /* extended address */
uint16_t _ia_saddr; /* short address */
uint8_t _ia_eaddr[8]; /* extended address */
} ia_addr;
#define ia_saddr ia_addr._ia_saddr
@ -305,6 +384,42 @@ struct ieee802154_framecontrol_s
uint16_t src_addr_mode : 2;
};
#ifdef CONFIG_IEEE802154_SECURITY
struct ieee802154_security_s
{
uint8_t level; /* Security level to be used */
uint8_t key_id_mode; /* Mode used to identify the key to be used */
uint8_t key_source[8]; /* Originator of the key to be used */
uint8_t key_index; /* Index of the key to be used */
};
#endif
#ifdef CONFIG_IEEE802154_UWB
enum ieee802154_uwbprf_e
{
IEEE802154_UWBPRF_OFF = 0,
IEEE802154_UWBPRF_4M,
IEEE802154_UWBPRF_16M,
IEEE802154_UWBPRF_64M
};
enum ieee802154_uwb_datarate_e
{
IEEE802154_UWB_DATARATE_0 = 0,
IEEE802154_UWB_DATARATE_16,
IEEE802154_UWB_DATARATE_64,
IEEE802154_UWB_DATARATE_1024,
IEEE802154_UWB_DATARATE_4096
};
#endif
enum ieee802154_ranging_e
{
IEEE802154_NON_RANGING = 0,
IEEE802154_ALL_RANGING,
IEEE802154_PHY_HEADER_ONLY
};
struct ieee802154_frame_s
{
struct ieee802154_framecontrol_s frame_control;
@ -318,6 +433,99 @@ struct ieee802154_frame_s
uint16_t fcs;
};
struct ieee802154_data_req_s
{
enum ieee802154_addr_mode_e src_addr_mode; /* Source Address Mode */
struct ieee802154_addr_s dest__addr; /* Destination Address */
/* Number of bytes contained in the MAC Service Data Unit (MSDU)
* to be transmitted by the MAC sublayer enitity
* Note: This could be a uint8_t but if anyone ever wants to use
* non-standard frame lengths, they may want a length larger than
* a uint8_t */
uint16_t msdu_length;
uint8_t msdu_handle; /* Handle assoc. with MSDU */
struct {
uint8_t ack_tx : 1; /* Acknowledge TX? */
uint8_t gts_tx : 1; /* 1=GTS used for TX, 0=CAP used for TX */
uint8_t indirect_tx : 1; /* Should indirect transmission be used? */
};
#ifdef CONFIG_IEEE802154_SECURITY
/* Security information if enabled */
struct ieee802154_security_s security;
#endif
#ifdef CONFIG_IEEE802154_UWB
/* The UWB Pulse Repetion Frequency to be used for the transmission */
enum ieee802154_uwbprf_e uwb_prf;
/* The UWB preamble symbol repititions
* Should be one of:
* 0, 16, 64, 1024, 4096 */
uint16_t uwb_presym_rep;
/* The UWB Data Rate to be used for the transmission */
enum ieee802154_uwb_datarate_e data_rate;
#endif
enum ieee802154_ranging_e ranging;
/* The MAC service data unit array that is to be transmitted
* This must be at the end of the struct to allow the array
* to continue and make the struct "variable length" */
uint8_t msdu[1];
};
#define SIZEOF_IEEE802154_DATA_REQ_S(n) \
(sizeof(struct ieee802154_data_req_s) + (n))
struct ieee802154_data_conf_s
{
uint8_t msdu_handle; /* Handle assoc. with MSDU */
/* The time, in symbols, at which the data were transmitted */
uint32_t timestamp;
enum ieee802154_status_e status; /* The status of the MSDU transmission */
#ifdef CONFIG_IEEE802154_RANGING
bool rng_rcvd; /* Ranging indicated by MSDU */
/* A count of the time units corresponding to an RMARKER at the antenna at
* the beginning of the ranging exchange */
uint32_t rng_counter_start;
/* A count of the time units corresponding to an RMARKER at the antenna at
* end of the ranging exchange */
uint32_t rng_counter_stop;
/* A count of the time units in a message exchange over which the tracking
* offset was measured */
uint34_t rng_tracking_interval;
/* A count of the time units slipped or advanced by the radio tracking
* system over the course of the entire tracking interval */
uint32_t rng_offset;
/* The Figure of Merit (FoM) characterizing the ranging measurement */
uint8_t rng_fom;
#endif
};
struct ieee802154_capability_info_s
{
uint8_t reserved_0 : 1; /* Reserved */
@ -331,16 +539,6 @@ struct ieee802154_capability_info_s
* 0=otherwise */
};
#ifdef CONFIG_IEEE802154_SECURITY
struct ieee802154_security_s
{
uint8_t level; /* Security level to be used */
uint8_t key_id_mode; /* Mode used to identify the key to be used */
uint8_t key_source[8]; /* Originator of the key to be used */
uint8_t key_index; /* Index of the key to be used */
};
#endif
struct ieee802154_superframe_spec_s
{
uint16_t beacon_order : 4; /* Transmission interval of beacon */
@ -367,7 +565,7 @@ struct ieee802154_pan_desc_s
uint8_t gts_permit; /* 0=No GTS requests allowed
* 1=GTS request allowed */
uint8_t link_quality; /* LQI at which beacon was received */
uint8_t lqi; /* Link Quality Indication of the beacon */
uint32_t timestamp; /* Time at which the beacon frame was received
* in symbols */
};
@ -390,7 +588,7 @@ struct ieee802154_pend_addr_s
/* Primitive Semantics */
struct ieee802154_assoc_request_s
struct ieee802154_assoc_req_s
{
uint8_t channel; /* Channel number to attempt association */
uint8_t channel_page; /* Channel page to attempt association */
@ -410,7 +608,7 @@ struct ieee802154_assoc_request_s
#endif
};
struct ieee802154_assoc_indication_s
struct ieee802154_assoc_ind_s
{
/* Address of device requesting association. Always in extended mode */
@ -427,7 +625,7 @@ struct ieee802154_assoc_indication_s
#endif
};
struct ieee802154_assoc_response_s
struct ieee802154_assoc_rsp_s
{
/* Address of device requesting association. Always in extended mode */
@ -444,7 +642,7 @@ struct ieee802154_assoc_response_s
#endif
};
struct ieee802154_assoc_confirm_s
struct ieee802154_assoc_conf_s
{
/* Associated device address ALWAYS passed in short address mode. The
* address will be IEEE802154_SADDR_UNSPEC if association was unsuccessful */
@ -462,7 +660,7 @@ struct ieee802154_assoc_confirm_s
#endif
};
struct ieee802154_disassoc_request_s
struct ieee802154_disassoc_req_s
{
/* Address of device to send disassociation notification */
@ -481,7 +679,7 @@ struct ieee802154_disassoc_request_s
#endif
};
struct ieee802154_disassoc_indication_s
struct ieee802154_disassoc_ind_s
{
/* Address of device requesting disassociation. Always extended mode */
@ -498,7 +696,7 @@ struct ieee802154_disassoc_indication_s
#endif
};
struct ieee802154_disassoc_confirm_s
struct ieee802154_disassoc_conf_s
{
/* Status of the disassociation attempt */
@ -509,7 +707,7 @@ struct ieee802154_disassoc_confirm_s
struct ieee802154_addr_s dev_addr;
};
struct ieee802154_beaconnotify_indication_s
struct ieee802154_beaconnotify_ind_s
{
uint8_t bsn; /* Beacon sequence number */
@ -526,8 +724,11 @@ struct ieee802154_beaconnotify_indication_s
/* Beacon payload */
uint8_t sdu[IEEE802154_aMaxBeaconPayloadLength];
uint8_t sdu[IEEE802154_MAX_BEACON_PAYLOAD_LENGTH];
};
#define SIZEOF_IEEE802154_BEACONNOTIFY_IND_S(n) \
(sizeof(struct ieee802154_beaconnotify_ind_s) \
- IEEE802154_MAX_BEACON_PAYLOAD_LENGTH + (n))
/* Operations */
@ -539,8 +740,8 @@ struct ieee802154_macops_s
/* Transmit a data frame */
CODE int (*req_data)(FAR struct ieee802154_mac_s *mac, uint8_t handle,
FAR uint8_t *buf, int len);
CODE int (*req_data)(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_data_req_s *req);
/* Cancel transmission of a data frame */
@ -549,16 +750,17 @@ struct ieee802154_macops_s
/* Start association with coordinator */
CODE int (*req_associate)(FAR struct ieee802154_mac_s *mac,
uint16_t panid, FAR uint8_t *coordeadr);
FAR struct ieee802154_assoc_req_s *req);
/* Start disassociation with coordinator */
CODE int (*req_disassociate)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *eadr, uint8_t reason);
FAR struct ieee802154_disassoc_req_s *req);
/* Read the PIB */
CODE int (*req_get)(FAR struct ieee802154_mac_s *mac, int attribute);
CODE int (*req_get)(FAR struct ieee802154_mac_s *mac,
enum ieee802154_pib_attr_e attr);
/* Allocate or deallocate a GTS */
@ -612,94 +814,98 @@ struct ieee802154_macops_s
struct ieee802154_maccb_s
{
/* Context arg for handling callback */
FAR void *cb_context;
/* Asynchronous confirmations to requests */
/* Data frame was received by remote device */
CODE int (*conf_data)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *buf, int len);
CODE void (*conf_data)(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_data_conf_s *conf);
/* Data frame was purged */
CODE int (*conf_purge)(FAR struct ieee802154_mac_s *mac, uint8_t handle,
int status);
CODE void (*conf_purge)(FAR struct ieee802154_mac_s *mac, uint8_t handle,
int status);
/* Association request completed */
CODE int (*conf_associate)(FAR struct ieee802154_mac_s *mac,
uint16_t saddr, int status);
CODE void (*conf_associate)(FAR struct ieee802154_mac_s *mac,
uint16_t saddr, int status);
/* Disassociation request completed */
CODE int (*conf_disassociate)(FAR struct ieee802154_mac_s *mac,
int status);
CODE void (*conf_disassociate)(FAR struct ieee802154_mac_s *mac,
int status);
/* PIB data returned */
/* PIvoata returned */
CODE int (*conf_get)(FAR struct ieee802154_mac_s *mac, int status,
int attribute, FAR uint8_t *value,
int valuelen);
CODE void (*conf_get)(FAR struct ieee802154_mac_s *mac, int status,
int attribute, FAR uint8_t *value,
int valuelen);
/* GTS management completed */
/* GTvoanagement completed */
CODE int (*conf_gts)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *characteristics, int status);
CODE void (*conf_gts)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *characteristics, int status);
/* MAC reset completed */
/* MAveset completed */
CODE int (*conf_reset)(FAR struct ieee802154_mac_s *mac, int status);
CODE void (*conf_reset)(FAR struct ieee802154_mac_s *mac, int status);
CODE int (*conf_rxenable)(FAR struct ieee802154_mac_s *mac, int status);
CODE void (*conf_rxenable)(FAR struct ieee802154_mac_s *mac, int status);
CODE int (*conf_scan)(FAR struct ieee802154_mac_s *mac, int status,
uint8_t type, uint32_t unscanned, int rsltsize,
FAR uint8_t *edlist, FAR uint8_t *pandescs);
CODE void (*conf_scan)(FAR struct ieee802154_mac_s *mac, int status,
uint8_t type, uint32_t unscanned, int rsltsize,
FAR uint8_t *edlist, FAR uint8_t *pandescs);
CODE int (*conf_set)(FAR struct ieee802154_mac_s *mac, int status,
int attribute);
CODE void (*conf_set)(FAR struct ieee802154_mac_s *mac, int status,
int attribute);
CODE int (*conf_start)(FAR struct ieee802154_mac_s *mac, int status);
CODE void (*conf_start)(FAR struct ieee802154_mac_s *mac, int status);
CODE int (*conf_poll)(FAR struct ieee802154_mac_s *mac, int status);
CODE void (*conf_poll)(FAR struct ieee802154_mac_s *mac, int status);
/* Asynchronous event indications, replied to synchronously with responses */
/* Data frame received */
CODE int (*ind_data)(FAR struct ieee802154_mac_s *mac, FAR uint8_t *buf,
int len);
CODE void (*ind_data)(FAR struct ieee802154_mac_s *mac, FAR uint8_t *buf,
int len);
/* Association request received */
CODE int (*ind_associate)(FAR struct ieee802154_mac_s *mac,
uint16_t clipanid, FAR uint8_t *clieaddr);
CODE void (*ind_associate)(FAR struct ieee802154_mac_s *mac,
uint16_t clipanid, FAR uint8_t *clieaddr);
/* Disassociation request received */
CODE int (*ind_disassociate)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *eadr, uint8_t reason);
CODE void (*ind_disassociate)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *eadr, uint8_t reason);
/* Beacon notification */
CODE int (*ind_beaconnotify)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *bsn, FAR struct ieee802154_pan_desc_s *pandesc,
FAR uint8_t *sdu, int sdulen);
CODE void (*ind_beaconnotify)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *bsn, FAR struct ieee802154_pan_desc_s *pandesc,
FAR uint8_t *sdu, int sdulen);
/* GTS management request received */
CODE int (*ind_gts)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *devaddr, FAR uint8_t *characteristics);
CODE void (*ind_gts)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *devaddr, FAR uint8_t *characteristics);
/* Orphan device detected */
CODE int (*ind_orphan)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *orphanaddr);
CODE void (*ind_orphan)(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *orphanaddr);
CODE int (*ind_commstatus)(FAR struct ieee802154_mac_s *mac,
uint16_t panid, FAR uint8_t *src,
FAR uint8_t *dst, int status);
CODE void (*ind_commstatus)(FAR struct ieee802154_mac_s *mac,
uint16_t panid, FAR uint8_t *src,
FAR uint8_t *dst, int status);
CODE int (*ind_syncloss)(FAR struct ieee802154_mac_s *mac, int reason);
CODE void (*ind_syncloss)(FAR struct ieee802154_mac_s *mac, int reason);
};
struct ieee802154_radio_s; /* Forware reference */

View File

@ -81,7 +81,7 @@ struct ieee802154_privmac_s
uint32_t macPad : 3;
/* 0x48 */ uint32_t macBeaconTxTime : 24;
/* 0x45 */ uint8_t macBeaconPayload[IEEE802154_aMaxBeaconPayloadLength];
/* 0x45 */ uint8_t macBeaconPayload[IEEE802154_MAX_BEACON_PAYLOAD_LENGTH];
/* 0x46 */ uint8_t macBeaconPayloadLength;
/* 0x49 */ uint8_t macBSN;
/* 0x4A */ uint8_t macCoordExtendedAddress[8];
@ -106,36 +106,41 @@ struct ieee802154_privmac_s
* Private Function Prototypes
****************************************************************************/
static int mac802154_reqdata(FAR struct ieee802154_mac_s *mac,
uint8_t handle, FAR uint8_t *buf, int len);
static int mac802154_reqpurge(FAR struct ieee802154_mac_s *mac,
uint8_t handle);
static int mac802154_reqassociate(FAR struct ieee802154_mac_s *mac,
uint16_t panid, FAR uint8_t *coordeadr);
static int mac802154_reqdisassociate(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *eadr, uint8_t reason);
static int mac802154_reqget(FAR struct ieee802154_mac_s *mac,
int attribute);
static int mac802154_reqgts(FAR struct ieee802154_mac_s *mac,
/* MAC Data Service (MCPS) functions */
static int mac802154_req_data(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_data_req_s *req);
static int mac802154_req_purge(FAR struct ieee802154_mac_s *mac,
uint8_t handle);
/* MAC Sublayer Management Entity (MLME) functions */
static int mac802154_req_associate(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_assoc_req_s *req);
static int mac802154_req_disassociate(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_disassoc_req_s *req);
static int mac802154_req_get(FAR struct ieee802154_mac_s *mac,
enum ieee802154_pib_attr_e attr);
static int mac802154_req_gts(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *characteristics);
static int mac802154_reqreset(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_reset(FAR struct ieee802154_mac_s *mac,
bool setdefaults);
static int mac802154_reqrxenable(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_rxenable(FAR struct ieee802154_mac_s *mac,
bool deferrable, int ontime, int duration);
static int mac802154_reqscan(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_scan(FAR struct ieee802154_mac_s *mac,
uint8_t type, uint32_t channels, int duration);
static int mac802154_reqset(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_set(FAR struct ieee802154_mac_s *mac,
int attribute, FAR uint8_t *value, int valuelen);
static int mac802154_reqstart(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_start(FAR struct ieee802154_mac_s *mac,
uint16_t panid, int channel, uint8_t bo, uint8_t fo,
bool coord, bool batext, bool realign);
static int mac802154_reqsync(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_sync(FAR struct ieee802154_mac_s *mac,
int channel, bool track);
static int mac802154_reqpoll(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_poll(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *coordaddr);
static int mac802154_rspassociate(FAR struct ieee802154_mac_s *mac,
static int mac802154_rsp_associate(FAR struct ieee802154_mac_s *mac,
uint8_t eadr, uint16_t saddr, int status);
static int mac802154_rsporphan(FAR struct ieee802154_mac_s *mac,
static int mac802154_rsp_orphan(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *orphanaddr, uint16_t saddr, bool associated);
@ -145,21 +150,21 @@ static int mac802154_rsporphan(FAR struct ieee802154_mac_s *mac,
static const struct ieee802154_macops_s mac802154ops =
{
.req_data = mac802154_reqdata,
.req_purge = mac802154_reqpurge,
.req_associate = mac802154_reqassociate,
.req_disassociate = mac802154_reqdisassociate,
.req_get = mac802154_reqget,
.req_gts = mac802154_reqgts,
.req_reset = mac802154_reqreset,
.req_rxenable = mac802154_reqrxenable,
.req_scan = mac802154_reqscan,
.req_set = mac802154_reqset,
.req_start = mac802154_reqstart,
.req_sync = mac802154_reqsync,
.req_poll = mac802154_reqpoll,
.rsp_associate = mac802154_rspassociate,
.rsp_orphan = mac802154_rsporphan,
.req_data = mac802154_req_data,
.req_purge = mac802154_req_purge,
.req_associate = mac802154_req_associate,
.req_disassociate = mac802154_req_disassociate,
.req_get = mac802154_req_get,
.req_gts = mac802154_req_gts,
.req_reset = mac802154_req_reset,
.req_rxenable = mac802154_req_rxenable,
.req_scan = mac802154_req_scan,
.req_set = mac802154_req_set,
.req_start = mac802154_req_start,
.req_sync = mac802154_req_sync,
.req_poll = mac802154_req_poll,
.rsp_associate = mac802154_rsp_associate,
.rsp_orphan = mac802154_rsp_orphan,
};
/****************************************************************************
@ -244,8 +249,8 @@ static int mac802154_applymib(FAR struct ieee802154_privmac_s *priv)
*
****************************************************************************/
static int mac802154_reqdata(FAR struct ieee802154_mac_s *mac,
uint8_t handle, FAR uint8_t *buf, int len)
static int mac802154_req_data(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_data_req_s *req)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
@ -261,7 +266,7 @@ static int mac802154_reqdata(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqpurge(FAR struct ieee802154_mac_s *mac,
static int mac802154_req_purge(FAR struct ieee802154_mac_s *mac,
uint8_t handle)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
@ -269,7 +274,7 @@ static int mac802154_reqpurge(FAR struct ieee802154_mac_s *mac,
}
/****************************************************************************
* Name: mac802154_reqassociate
* Name: mac802154_req_associate
*
* Description:
* The MLME-ASSOCIATE.request primitive allows a device to request an
@ -278,15 +283,15 @@ static int mac802154_reqpurge(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqassociate(FAR struct ieee802154_mac_s *mac,
uint16_t panid, FAR uint8_t *coordeadr)
static int mac802154_req_associate(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_assoc_req_s *req)
{
FAR struct ieee802154_privmac_s * priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqdisassociate
* Name: mac802154_req_disassociate
*
* Description:
* The MLME-DISASSOCIATE.request primitive is used by an associated device to
@ -297,15 +302,15 @@ static int mac802154_reqassociate(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqdisassociate(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *eadr, uint8_t reason)
static int mac802154_req_disassociate(FAR struct ieee802154_mac_s *mac,
FAR struct ieee802154_disassoc_req_s *req)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqget
* Name: mac802154_req_get
*
* Description:
* The MLME-GET.request primitive requests information about a given PIB
@ -314,15 +319,15 @@ static int mac802154_reqdisassociate(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqget(FAR struct ieee802154_mac_s *mac,
int attribute)
static int mac802154_req_get(FAR struct ieee802154_mac_s *mac,
enum ieee802154_pib_attr_e attr)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqgts
* Name: mac802154_req_gts
*
* Description:
* The MLME-GTS.request primitive allows a device to send a request to the PAN
@ -332,15 +337,15 @@ static int mac802154_reqget(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqgts(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *characteristics)
static int mac802154_req_gts(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *characteristics)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqreset
* Name: mac802154_req_reset
*
* Description:
* The MLME-RESET.request primitive allows the next higher layer to request
@ -349,15 +354,15 @@ static int mac802154_reqgts(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqreset(FAR struct ieee802154_mac_s *mac,
bool setdefaults)
static int mac802154_req_reset(FAR struct ieee802154_mac_s *mac,
bool setdefaults)
{
FAR struct ieee802154_privmac_s * priv = (FAR struct ieee802154_privmac_s *) mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqrxenable
* Name: mac802154_req_rxenable
*
* Description:
* The MLME-RX-ENABLE.request primitive allows the next higher layer to
@ -367,15 +372,15 @@ static int mac802154_reqreset(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqrxenable(FAR struct ieee802154_mac_s *mac,
bool deferrable, int ontime, int duration)
static int mac802154_req_rxenable(FAR struct ieee802154_mac_s *mac,
bool deferrable, int ontime, int duration)
{
FAR struct ieee802154_privmac_s * priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqscan
* Name: mac802154_req_scan
*
* Description:
* The MLME-SCAN.request primitive is used to initiate a channel scan over a
@ -389,15 +394,15 @@ static int mac802154_reqrxenable(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqscan(FAR struct ieee802154_mac_s *mac,
uint8_t type, uint32_t channels, int duration)
static int mac802154_req_scan(FAR struct ieee802154_mac_s *mac,
uint8_t type, uint32_t channels, int duration)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqset
* Name: mac802154_req_set
*
* Description:
* The MLME-SET.request primitive attempts to write the given value to the
@ -406,15 +411,15 @@ static int mac802154_reqscan(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqset(FAR struct ieee802154_mac_s *mac,
int attribute, FAR uint8_t *value, int valuelen)
static int mac802154_req_set(FAR struct ieee802154_mac_s *mac,
int attribute, FAR uint8_t *value, int valuelen)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqstart
* Name: mac802154_req_start
*
* Description:
* The MLME-START.request primitive makes a request for the device to start
@ -423,17 +428,17 @@ static int mac802154_reqset(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqstart(FAR struct ieee802154_mac_s *mac,
uint16_t panid, int channel, uint8_t bo,
uint8_t fo, bool coord, bool batext,
bool realign)
static int mac802154_req_start(FAR struct ieee802154_mac_s *mac,
uint16_t panid, int channel, uint8_t bo,
uint8_t fo, bool coord, bool batext,
bool realign)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqsync
* Name: mac802154_req_sync
*
* Description:
* The MLME-SYNC.request primitive requests to synchronize with the
@ -443,15 +448,15 @@ static int mac802154_reqstart(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqsync(FAR struct ieee802154_mac_s *mac,
int channel, bool track)
static int mac802154_req_sync(FAR struct ieee802154_mac_s *mac,
int channel, bool track)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_reqpoll
* Name: mac802154_req_poll
*
* Description:
* The MLME-POLL.request primitive prompts the device to request data from the
@ -461,15 +466,15 @@ static int mac802154_reqsync(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_reqpoll(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *coordaddr)
static int mac802154_req_poll(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *coordaddr)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_rspassociate
* Name: mac802154_rsp_associate
*
* Description:
* The MLME-ASSOCIATE.response primitive is used to initiate a response to an
@ -477,15 +482,15 @@ static int mac802154_reqpoll(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_rspassociate(FAR struct ieee802154_mac_s *mac,
uint8_t eadr, uint16_t saddr, int status)
static int mac802154_rsp_associate(FAR struct ieee802154_mac_s *mac,
uint8_t eadr, uint16_t saddr, int status)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;
}
/****************************************************************************
* Name: mac802154_rsporphan
* Name: mac802154_rsp_orphan
*
* Description:
* The MLME-ORPHAN.response primitive allows the next higher layer of a
@ -493,9 +498,9 @@ static int mac802154_rspassociate(FAR struct ieee802154_mac_s *mac,
*
****************************************************************************/
static int mac802154_rsporphan(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *orphanaddr, uint16_t saddr,
bool associated)
static int mac802154_rsp_orphan(FAR struct ieee802154_mac_s *mac,
FAR uint8_t *orphanaddr, uint16_t saddr,
bool associated)
{
FAR struct ieee802154_privmac_s *priv = (FAR struct ieee802154_privmac_s *)mac;
return -ENOTTY;