wip: added MAC responses

This commit is contained in:
goueslati 2023-07-11 16:54:48 +01:00
parent 6f4172fbc1
commit 67b14e6e7a
5 changed files with 217 additions and 1 deletions

View File

@ -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],

View 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;

View File

@ -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;

View File

@ -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,
}

View File

@ -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],
}