wip: added MAC responses
This commit is contained in:
parent
6f4172fbc1
commit
67b14e6e7a
@ -11,6 +11,7 @@ pub trait MacCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME ASSOCIATE Request used to request an association
|
/// MLME ASSOCIATE Request used to request an association
|
||||||
|
#[repr(C)]
|
||||||
pub struct AssociateRequest {
|
pub struct AssociateRequest {
|
||||||
/// the logical channel on which to attempt association
|
/// the logical channel on which to attempt association
|
||||||
pub channel_number: u8,
|
pub channel_number: u8,
|
||||||
@ -40,6 +41,7 @@ impl MacCommand for AssociateRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME DISASSOCIATE Request sed to request a disassociation
|
/// MLME DISASSOCIATE Request sed to request a disassociation
|
||||||
|
#[repr(C)]
|
||||||
pub struct DisassociateRequest {
|
pub struct DisassociateRequest {
|
||||||
/// device addressing mode used
|
/// device addressing mode used
|
||||||
pub device_addr_mode: AddressMode,
|
pub device_addr_mode: AddressMode,
|
||||||
@ -67,6 +69,7 @@ impl MacCommand for DisassociateRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME GET Request used to request a PIB value
|
/// MLME GET Request used to request a PIB value
|
||||||
|
#[repr(C)]
|
||||||
pub struct GetRequest {
|
pub struct GetRequest {
|
||||||
/// the name of the PIB attribute to read
|
/// the name of the PIB attribute to read
|
||||||
pub pib_attribute: PibId,
|
pub pib_attribute: PibId,
|
||||||
@ -78,6 +81,7 @@ impl MacCommand for GetRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME GTS Request used to request and maintain GTSs
|
/// MLME GTS Request used to request and maintain GTSs
|
||||||
|
#[repr(C)]
|
||||||
pub struct GtsRequest {
|
pub struct GtsRequest {
|
||||||
/// the characteristics of the GTS
|
/// the characteristics of the GTS
|
||||||
pub characteristics: GtsCharacteristics,
|
pub characteristics: GtsCharacteristics,
|
||||||
@ -96,6 +100,7 @@ impl MacCommand for GtsRequest {
|
|||||||
const SIZE: usize = 12;
|
const SIZE: usize = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[repr(C)]
|
||||||
pub struct ResetRequest {
|
pub struct ResetRequest {
|
||||||
/// MAC PIB attributes are set to their default values or not during reset
|
/// MAC PIB attributes are set to their default values or not during reset
|
||||||
pub set_default_pib: bool,
|
pub set_default_pib: bool,
|
||||||
@ -108,6 +113,7 @@ impl MacCommand for ResetRequest {
|
|||||||
|
|
||||||
/// MLME RX ENABLE Request used to request that the receiver is either enabled
|
/// MLME RX ENABLE Request used to request that the receiver is either enabled
|
||||||
/// for a finite period of time or disabled
|
/// for a finite period of time or disabled
|
||||||
|
#[repr(C)]
|
||||||
pub struct RxEnableRequest {
|
pub struct RxEnableRequest {
|
||||||
/// the request operation can be deferred or not
|
/// the request operation can be deferred or not
|
||||||
pub defer_permit: bool,
|
pub defer_permit: bool,
|
||||||
@ -138,6 +144,7 @@ impl MacCommand for RxEnableRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME SCAN Request used to initiate a channel scan over a given list of channels
|
/// MLME SCAN Request used to initiate a channel scan over a given list of channels
|
||||||
|
#[repr(C)]
|
||||||
pub struct ScanRequest {
|
pub struct ScanRequest {
|
||||||
/// the type of scan to be performed
|
/// the type of scan to be performed
|
||||||
pub scan_type: u8,
|
pub scan_type: u8,
|
||||||
@ -179,6 +186,7 @@ impl MacCommand for SetRequest {
|
|||||||
/// MLME START Request used by the FFDs to intiate a new PAN or to begin using a new superframe
|
/// MLME START Request used by the FFDs to intiate a new PAN or to begin using a new superframe
|
||||||
/// configuration
|
/// configuration
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
|
#[repr(C)]
|
||||||
pub struct StartRequest {
|
pub struct StartRequest {
|
||||||
/// PAN indentifier to used by the device
|
/// PAN indentifier to used by the device
|
||||||
pub pan_id: [u8; 2],
|
pub pan_id: [u8; 2],
|
||||||
@ -221,6 +229,7 @@ impl MacCommand for StartRequest {
|
|||||||
|
|
||||||
/// MLME SYNC Request used to synchronize with the coordinator by acquiring and, if
|
/// MLME SYNC Request used to synchronize with the coordinator by acquiring and, if
|
||||||
/// specified, tracking its beacons
|
/// specified, tracking its beacons
|
||||||
|
#[repr(C)]
|
||||||
pub struct SyncRequest {
|
pub struct SyncRequest {
|
||||||
/// the channel number on which to attempt coordinator synchronization
|
/// the channel number on which to attempt coordinator synchronization
|
||||||
pub channel_number: u8,
|
pub channel_number: u8,
|
||||||
@ -239,6 +248,7 @@ impl MacCommand for SyncRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME POLL Request propmts the device to request data from the coordinator
|
/// MLME POLL Request propmts the device to request data from the coordinator
|
||||||
|
#[repr(C)]
|
||||||
pub struct PollRequest {
|
pub struct PollRequest {
|
||||||
/// addressing mode of the coordinator
|
/// addressing mode of the coordinator
|
||||||
pub coord_addr_mode: AddressMode,
|
pub coord_addr_mode: AddressMode,
|
||||||
@ -263,6 +273,7 @@ impl MacCommand for PollRequest {
|
|||||||
|
|
||||||
/// MLME DPS Request allows the next higher layer to request that the PHY utilize a
|
/// MLME DPS Request allows the next higher layer to request that the PHY utilize a
|
||||||
/// given pair of preamble codes for a single use pending expiration of the DPSIndexDuration
|
/// given pair of preamble codes for a single use pending expiration of the DPSIndexDuration
|
||||||
|
#[repr(C)]
|
||||||
pub struct DpsRequest {
|
pub struct DpsRequest {
|
||||||
/// the index value for the transmitter
|
/// the index value for the transmitter
|
||||||
tx_dps_index: u8,
|
tx_dps_index: u8,
|
||||||
@ -280,6 +291,7 @@ impl MacCommand for DpsRequest {
|
|||||||
|
|
||||||
/// MLME SOUNDING request primitive which is used by the next higher layer to request that
|
/// MLME SOUNDING request primitive which is used by the next higher layer to request that
|
||||||
/// the PHY respond with channel sounding information
|
/// the PHY respond with channel sounding information
|
||||||
|
#[repr(C)]
|
||||||
pub struct SoundingRequest;
|
pub struct SoundingRequest;
|
||||||
|
|
||||||
impl MacCommand for SoundingRequest {
|
impl MacCommand for SoundingRequest {
|
||||||
@ -289,6 +301,7 @@ impl MacCommand for SoundingRequest {
|
|||||||
|
|
||||||
/// MLME CALIBRATE request primitive which used to obtain the results of a ranging
|
/// MLME CALIBRATE request primitive which used to obtain the results of a ranging
|
||||||
/// calibration request from an RDEV
|
/// calibration request from an RDEV
|
||||||
|
#[repr(C)]
|
||||||
pub struct CalibrateRequest;
|
pub struct CalibrateRequest;
|
||||||
|
|
||||||
impl MacCommand for CalibrateRequest {
|
impl MacCommand for CalibrateRequest {
|
||||||
@ -297,6 +310,7 @@ impl MacCommand for CalibrateRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MCPS DATA Request used for MAC data related requests from the application
|
/// MCPS DATA Request used for MAC data related requests from the application
|
||||||
|
#[repr(C)]
|
||||||
pub struct DataRequest {
|
pub struct DataRequest {
|
||||||
/// the handle assocated with the MSDU to be transmitted
|
/// the handle assocated with the MSDU to be transmitted
|
||||||
pub msdu_ptr: *const u8,
|
pub msdu_ptr: *const u8,
|
||||||
@ -344,6 +358,7 @@ impl MacCommand for DataRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// for MCPS PURGE Request used to purge an MSDU from the transaction queue
|
/// for MCPS PURGE Request used to purge an MSDU from the transaction queue
|
||||||
|
#[repr(C)]
|
||||||
pub struct PurgeRequest {
|
pub struct PurgeRequest {
|
||||||
/// the handle associated with the MSDU to be purged from the transaction
|
/// the handle associated with the MSDU to be purged from the transaction
|
||||||
/// queue
|
/// queue
|
||||||
@ -356,6 +371,7 @@ impl MacCommand for PurgeRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME ASSOCIATE Response used to initiate a response to an MLME-ASSOCIATE.indication
|
/// MLME ASSOCIATE Response used to initiate a response to an MLME-ASSOCIATE.indication
|
||||||
|
#[repr(C)]
|
||||||
pub struct AssociateResponse {
|
pub struct AssociateResponse {
|
||||||
/// extended address of the device requesting association
|
/// extended address of the device requesting association
|
||||||
pub device_address: [u8; 8],
|
pub device_address: [u8; 8],
|
||||||
@ -380,6 +396,7 @@ impl MacCommand for AssociateResponse {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// MLME ORPHAN Response used to respond to the MLME ORPHAN Indication
|
/// MLME ORPHAN Response used to respond to the MLME ORPHAN Indication
|
||||||
|
#[repr(C)]
|
||||||
pub struct OrphanResponse {
|
pub struct OrphanResponse {
|
||||||
/// extended address of the orphaned device
|
/// extended address of the orphaned device
|
||||||
pub orphan_address: [u8; 8],
|
pub orphan_address: [u8; 8],
|
||||||
|
3
embassy-stm32-wpan/src/sub/mac/consts.rs
Normal file
3
embassy-stm32-wpan/src/sub/mac/consts.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
pub const MAX_ED_SCAN_RESULTS_SUPPORTED: usize = 16;
|
||||||
|
pub const MAX_PAN_DESC_SUPPORTED: usize = 6;
|
||||||
|
pub const MAX_SOUNDING_LIST_SUPPORTED: usize = 6;
|
@ -16,8 +16,9 @@ use crate::evt::{EvtBox, EvtPacket};
|
|||||||
use crate::tables::{MAC_802_15_4_CMD_BUFFER, MAC_802_15_4_NOTIF_RSP_EVT_BUFFER};
|
use crate::tables::{MAC_802_15_4_CMD_BUFFER, MAC_802_15_4_NOTIF_RSP_EVT_BUFFER};
|
||||||
use crate::{channels, evt};
|
use crate::{channels, evt};
|
||||||
|
|
||||||
mod opcodes;
|
|
||||||
pub mod commands;
|
pub mod commands;
|
||||||
|
mod consts;
|
||||||
|
mod opcodes;
|
||||||
pub mod responses;
|
pub mod responses;
|
||||||
pub mod typedefs;
|
pub mod typedefs;
|
||||||
|
|
||||||
|
@ -0,0 +1,168 @@
|
|||||||
|
use super::consts::{MAX_ED_SCAN_RESULTS_SUPPORTED, MAX_PAN_DESC_SUPPORTED, MAX_SOUNDING_LIST_SUPPORTED};
|
||||||
|
use super::typedefs::{AddressMode, MacAddress, PanDescriptor};
|
||||||
|
|
||||||
|
pub trait MacResponse {
|
||||||
|
const SIZE: usize;
|
||||||
|
|
||||||
|
fn parse(buf: &[u8]) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME ASSOCIATE Confirm used to inform of the initiating device whether
|
||||||
|
/// its request to associate was successful or unsuccessful
|
||||||
|
pub struct AssociateConfirm {
|
||||||
|
/// short address allocated by the coordinator on successful association
|
||||||
|
pub assoc_short_address: [u8; 2],
|
||||||
|
/// status of the association request
|
||||||
|
pub status: u8,
|
||||||
|
/// security level to be used
|
||||||
|
pub security_level: u8,
|
||||||
|
/// the originator of the key to be used
|
||||||
|
pub key_source: [u8; 8],
|
||||||
|
/// the mode used to identify the key to be used
|
||||||
|
pub key_id_mode: u8,
|
||||||
|
/// the index of the key to be used
|
||||||
|
pub key_index: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME DISASSOCIATE Confirm used to send disassociation Confirmation to the application.
|
||||||
|
pub struct DisassociateConfirm {
|
||||||
|
/// status of the disassociation attempt
|
||||||
|
pub status: u8,
|
||||||
|
/// device addressing mode used
|
||||||
|
pub device_addr_mode: AddressMode,
|
||||||
|
/// the identifier of the PAN of the device
|
||||||
|
pub device_pan_id: [u8; 2],
|
||||||
|
/// device address
|
||||||
|
pub device_address: MacAddress,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME GET Confirm which requests information about a given PIB attribute
|
||||||
|
pub struct GetConfirm {
|
||||||
|
/// The pointer to the value of the PIB attribute attempted to read
|
||||||
|
pub pib_attribute_value_ptr: *const u8,
|
||||||
|
/// Status of the GET attempt
|
||||||
|
pub status: u8,
|
||||||
|
/// The name of the PIB attribute attempted to read
|
||||||
|
pub pib_attribute: u8,
|
||||||
|
/// The lenght of the PIB attribute Value return
|
||||||
|
pub pib_attribute_value_len: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME GTS Confirm which eports the results of a request to allocate a new GTS
|
||||||
|
/// or to deallocate an existing GTS
|
||||||
|
pub struct GtsConfirm {
|
||||||
|
/// The characteristics of the GTS
|
||||||
|
pub gts_characteristics: u8,
|
||||||
|
/// The status of the GTS reques
|
||||||
|
pub status: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME RESET Confirm which is used to report the results of the reset operation
|
||||||
|
pub struct ResetConfirm {
|
||||||
|
/// The result of the reset operation
|
||||||
|
status: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME RX ENABLE Confirm which is used to report the results of the attempt
|
||||||
|
/// to enable or disable the receiver
|
||||||
|
pub struct RxEnableConfirm {
|
||||||
|
/// Result of the request to enable or disable the receiver
|
||||||
|
status: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME SCAN Confirm which is used to report the result of the channel scan request
|
||||||
|
pub struct ScanConfirm {
|
||||||
|
/// Status of the scan request
|
||||||
|
pub status: u8,
|
||||||
|
/// The type of scan performed
|
||||||
|
pub scan_type: u8,
|
||||||
|
/// Channel page on which the scan was performed
|
||||||
|
pub channel_page: u8,
|
||||||
|
/// Channels given in the request which were not scanned
|
||||||
|
pub unscanned_channels: [u8; 4],
|
||||||
|
/// Number of elements returned in the appropriate result lists
|
||||||
|
pub result_list_size: u8,
|
||||||
|
/// List of energy measurements
|
||||||
|
pub energy_detect_list: [u8; MAX_ED_SCAN_RESULTS_SUPPORTED],
|
||||||
|
/// List of PAN descriptors
|
||||||
|
pub pan_descriptor_list: [PanDescriptor; MAX_PAN_DESC_SUPPORTED],
|
||||||
|
/// Categorization of energy detected in channel
|
||||||
|
pub detected_category: u8,
|
||||||
|
/// For UWB PHYs, the list of energy measurements taken
|
||||||
|
pub uwb_energy_detect_list: [u8; MAX_ED_SCAN_RESULTS_SUPPORTED],
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME SET Confirm which reports the result of an attempt to write a value to a PIB attribute
|
||||||
|
pub struct SetConfirm {
|
||||||
|
/// The result of the set operation
|
||||||
|
pub status: u8,
|
||||||
|
/// The name of the PIB attribute that was written
|
||||||
|
pub pin_attribute: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME START Confirm which is used to report the results of the attempt to
|
||||||
|
/// start using a new superframe configuration
|
||||||
|
pub struct StartConfirm {
|
||||||
|
/// Result of the attempt to start using an updated superframe configuration
|
||||||
|
pub status: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME POLL Confirm which is used to report the result of a request to poll the coordinator for data
|
||||||
|
pub struct PollConfirm {
|
||||||
|
/// The status of the data request
|
||||||
|
pub status: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME SOUNDING Confirm which reports the result of a request to the PHY to provide
|
||||||
|
/// channel sounding information
|
||||||
|
pub struct SoundingConfirm {
|
||||||
|
/// Results of the sounding measurement
|
||||||
|
sounding_list: [u8; MAX_SOUNDING_LIST_SUPPORTED],
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MLME CALIBRATE Confirm which reports the result of a request to the PHY
|
||||||
|
/// to provide internal propagation path information
|
||||||
|
pub struct CalibrateConfirm {
|
||||||
|
/// The status of the attempt to return sounding data
|
||||||
|
pub status: u8,
|
||||||
|
/// A count of the propagation time from the ranging counter
|
||||||
|
/// to the transmit antenna
|
||||||
|
pub cal_tx_rmaker_offset: u32,
|
||||||
|
/// A count of the propagation time from the receive antenna
|
||||||
|
/// to the ranging counter
|
||||||
|
pub cal_rx_rmaker_offset: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MCPS DATA Confirm which will be used for reporting the results of
|
||||||
|
/// MAC data related requests from the application
|
||||||
|
pub struct DataConfirm {
|
||||||
|
/// The handle associated with the MSDU being confirmed
|
||||||
|
pub msdu_handle: u8,
|
||||||
|
/// The time, in symbols, at which the data were transmitted
|
||||||
|
pub a_time_stamp: [u8; 4],
|
||||||
|
/// ranging status
|
||||||
|
pub ranging_received: u8,
|
||||||
|
/// The status of the last MSDU transmission
|
||||||
|
pub status: u8,
|
||||||
|
/// time units corresponding to an RMARKER at the antenna at
|
||||||
|
/// the beginning of a ranging exchange
|
||||||
|
pub ranging_counter_start: u32,
|
||||||
|
/// time units corresponding to an RMARKER at the antenna
|
||||||
|
/// at the end of a ranging exchange
|
||||||
|
pub ranging_counter_stop: u32,
|
||||||
|
/// time units in a message exchange over which the tracking offset was measured
|
||||||
|
pub ranging_tracking_interval: u32,
|
||||||
|
/// time units slipped or advanced by the radio tracking system
|
||||||
|
pub ranging_offset: u32,
|
||||||
|
/// The FoM characterizing the ranging measurement
|
||||||
|
pub ranging_fom: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// MCPS PURGE Confirm which will be used by the MAC to notify the application of
|
||||||
|
/// the status of its request to purge an MSDU from the transaction queue
|
||||||
|
pub struct PurgeConfirm {
|
||||||
|
/// Handle associated with the MSDU requested to be purged from the transaction queue
|
||||||
|
pub msdu_handle: u8,
|
||||||
|
/// The status of the request
|
||||||
|
pub status: u8,
|
||||||
|
}
|
@ -95,3 +95,30 @@ pub union MacAddress {
|
|||||||
pub struct GtsCharacteristics {
|
pub struct GtsCharacteristics {
|
||||||
pub fields: u8,
|
pub fields: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// MAC PAN Descriptor which contains the network details of the device from
|
||||||
|
/// which the beacon is received
|
||||||
|
pub struct PanDescriptor {
|
||||||
|
/// PAN identifier of the coordinator
|
||||||
|
pub a_coord_pan_id: [u8; 2],
|
||||||
|
/// Coordinator addressing mode
|
||||||
|
pub coord_addr_mode: AddressMode,
|
||||||
|
/// The current logical channel occupied by the network
|
||||||
|
pub logical_channel: u8,
|
||||||
|
/// Coordinator address
|
||||||
|
pub coord_addr: MacAddress,
|
||||||
|
/// The current channel page occupied by the network
|
||||||
|
pub channel_page: u8,
|
||||||
|
/// PAN coordinator is accepting GTS requests or not
|
||||||
|
pub gts_permit: bool,
|
||||||
|
/// Superframe specification as specified in the received beacon frame
|
||||||
|
pub a_superframe_spec: [u8; 2],
|
||||||
|
/// The time at which the beacon frame was received, in symbols
|
||||||
|
pub a_time_stamp: [u8; 4],
|
||||||
|
/// The LQI at which the network beacon was received
|
||||||
|
pub link_quality: u8,
|
||||||
|
/// Security level purportedly used by the received beacon frame
|
||||||
|
pub security_level: u8,
|
||||||
|
/// Byte Stuffing to keep 32 bit alignment
|
||||||
|
pub a_stuffing: [u8; 2],
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user