Base class for MAC80211-based NICs that support CSI extraction. More...
#include <MAC80211CSIExtractableFrontEnd.hxx>
Public Member Functions | |
MAC80211CSIExtractableFrontEnd (const std::string &referredInterfaceName) | |
Constructor for CSI-capable front-end. | |
int | startRx () override |
Start the CSI reception service. | |
virtual void | setFrameTypeFilter (const std::vector< uint8_t > &frameTypes) |
Set frame type filter for CSI collection. | |
![]() | |
int | startTx () override |
Start transmission service. | |
int | stopTx () override |
Stop transmission service. | |
int | startRx () override |
Start reception service. | |
int | stopRx () override |
Stop reception service. | |
int | transmit (const ModularPicoScenesTxFrame &frame) override |
Transmit a single frame. | |
int | transmitFramesInBatch (const std::vector< const ModularPicoScenesTxFrame * > &frames, uint32_t repeat) override |
Transmit multiple frames in batch mode. | |
int | transmitFramesInBatch (const std::vector< ModularPicoScenesTxFrame > &frames, uint32_t repeat) override |
Transmit multiple frames in batch mode (vector version) | |
~MAC80211InjectionOnlyFrontEnd () override | |
Destructor. | |
const std::string & | getDevId () const |
Get device interface identifier. | |
const std::string & | getMonId () const |
Get monitor interface identifier. | |
uint16_t | getPhyIdNumber () const |
Get physical interface number. | |
const std::string & | getPhyPath () const |
Get physical interface path. | |
const std::array< uint8_t, 6 > & | getMacAddressMon () const |
Get monitor interface MAC address. | |
const std::array< uint8_t, 6 > & | getMacAddressDev () const |
Get device interface MAC address. | |
std::tuple< double, double, double > | getChannelAndBandwidth () override |
Get current channel and bandwidth configuration. | |
int | setChannelAndBandwidth (double control, double bw, double center) override |
Set channel and bandwidth configuration. | |
int | setChannelAndBandwidth (std::optional< double > control, std::optional< double > bw, std::optional< double > center) override |
Set channel and bandwidth with optional parameters. | |
double | getCarrierFrequency () override |
Get carrier frequency. | |
void | setCarrierFrequency (double carrierFrequency) override |
Set carrier frequency. | |
double | getSamplingRate () override |
Get sampling rate. | |
void | setSamplingRate (double samplingRate) override |
Set sampling rate. | |
double | getControlChannelFrequency () override |
Get control channel frequency. | |
void | setControlChannelFrequency (double controlFrequency) override |
Set control channel frequency. | |
double | getRxChannelBandwidth () override |
Get receive channel bandwidth. | |
void | setRxChannelBandwidth (double rxcbw) override |
Set receive channel bandwidth. | |
double | getTxpower () override |
Get transmit power. | |
void | setTxpower (double txpower) override |
Set transmit power. | |
double | getRxGain () override |
Get receive gain. | |
void | setRxGain (double rxGain) override |
Set receive gain. | |
void | setRxGain (double rxGain, uint8_t channel) override |
Set receive gain for specific channel. | |
uint8_t | getTxChainMask () override |
Get transmit chain mask. | |
void | setTxChainMask (uint8_t txChainMask) override |
Set transmit chain mask. | |
uint8_t | getRxChainMask () override |
Get receive chain mask. | |
void | setRxChainMask (uint8_t rxChainMask) override |
Set receive chain mask. | |
std::vector< size_t > | getTxChannels () override |
Get active transmit channels. | |
void | setTxChannels (const std::vector< size_t > &txChannels) override |
Set active transmit channels. | |
std::vector< size_t > | getRxChannels () override |
Get active receive channels. | |
void | setRxChannels (const std::vector< size_t > &rxChannels) override |
Set active receive channels. | |
uint16_t | getChannelFlags () override |
Get channel flags. | |
ExtraInfo | buildExtraInfo () override |
Build extra information about the frontend. | |
const std::vector< double > & | getSystemSupportedFrequencies () const |
Get system supported frequencies. | |
bool | isMAC80211SupportedCarrierFrequency (double frequency) const |
Check if frequency is supported by MAC80211. | |
void | printStatus () override |
Print current frontend status. | |
![]() | |
AbstractFrontEnd (const std::string &referredInterfaceName) | |
Create AbstractFrontEnd object according to the user-specified frontend name referredInterfaceName . | |
virtual bool | isTxServiceStarted () const |
Returns whether Tx service is started. | |
virtual int | pauseTx () |
Pause Tx service loop. | |
virtual int | resumeTx () |
Resume Tx service loop. | |
template<int repeat = 1, typename ... Frames, typename = std::enable_if_t<(std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame *> &&...) || (std::is_same_v<std::remove_cvref_t<Frames>, ModularPicoScenesTxFrame> &&...) || ((std::is_same_v<std::remove_cvref_t<Frames>, std::shared_ptr<ModularPicoScenesTxFrame>> || std::is_same_v<std::remove_cvref_t<Frames>, std::unique_ptr<ModularPicoScenesTxFrame>>) &&...)>> | |
int | transmitFramesInBatch (Frames &&... frames) |
virtual int | pauseRx () |
Pause the Rx service loop, set rxPaused to true. | |
virtual int | resumeRx () |
Resuase the paused Rx service loop, set rxPaused to false. | |
void | registerRxHandle (const std::function< void(const ModularPicoScenesRxFrame &)> &rxHandle) |
Register a handler for the received ModularPicoScenesRxFrame frames. | |
const std::string & | getReferredInterfaceName () const |
Get the user-specified frontend name. | |
void | setReferredInterfaceName (const std::string &name) |
Set the user-specified frontend name. | |
const std::string & | getPhyId () const |
Return the PhyId for NIC frontend. This is a undefined behavior for SDR frontend. | |
PicoScenesDeviceType | getFrontEndType () const |
Return the PicoScenesDeviceType of this frontend. | |
PicoScenesDeviceSubtype | getFrontEndSubtype () const |
Return the PicoScenesDeviceType subtype of this frontend. | |
const std::array< uint8_t, 6 > & | getMacAddressPhy () const |
Return the MAC address of this frontend. For SDR frontend, this method should generate a pseudo-MAC address. | |
PicoScenesFrameTxParameters & | getUserSpecifiedTxParameters () |
ModularPicoScenesTxFrame | initializeTxFrame () override |
virtual | ~AbstractFrontEnd ()=default |
![]() | |
virtual | ~FrontEndConfigurations ()=default |
virtual bool | isHardwareSupportedPreset (const std::string &presetName)=0 |
Check if a preset configuration is supported by the hardware. | |
virtual void | applyPreset (const std::string &presetName, bool skipChangeRate=false)=0 |
Apply a preset configuration to the frontend hardware. | |
void | setNumTxChannels (const uint8_t numTxChannels) |
Set the number of Tx channels, the active channels start from 0. | |
void | setNumRxChannels (const uint8_t numRxChannels) |
Set the number of Rx channels, the active channels start from 0. | |
std::vector< size_t > | getAllChannels () |
virtual void | setSourceMACAddressFilter (const std::vector< std::array< uint8_t, 6 > > &addresses) |
Set the SOURCE addresses that will be blocked by the frontend. | |
virtual void | setDestinationMACAddressFilter (const std::vector< std::array< uint8_t, 6 > > &addresses) |
Set the DESTINATION addresses that will be blocked by the frontend. | |
virtual uint16_t | getAndIncreasePerFrontEndTxFrameSequenceNumber () |
Protected Member Functions | |
virtual void | startCSIExtractionAndParsingLoop ()=0 |
Start the CSI extraction and parsing loop. | |
![]() | |
MAC80211InjectionOnlyFrontEnd (const std::string &referredName) | |
Protected constructor. | |
Protected Attributes | |
int | csiPathPointer {} |
< File descriptor for CSI data port | |
![]() | |
std::string | devId |
Device interface identifier. | |
std::string | monId |
Monitor interface identifier. | |
uint16_t | phyIdNumber = 0 |
Physical interface number. | |
std::string | phyPath |
Path to physical interface. | |
std::shared_ptr< uint8_t > | txContext |
Transmission context. | |
std::array< uint8_t, 6 > | macAddress_MON {0, 0, 0, 0, 0, 0} |
Monitor interface MAC address. | |
std::array< uint8_t, 6 > | macAddress_DEV {0, 0, 0, 0, 0, 0} |
Device interface MAC address. | |
std::vector< double > | systemSupportedFrequencies |
List of supported frequencies. | |
![]() | |
std::string | referredInterfaceName |
the user specified frontend name | |
std::string | phyId |
phyId | |
std::array< uint8_t, 6 > | macAddress_PHY {0, 0, 0, 0, 0, 0} |
macAddress of the frontend | |
PicoScenesDeviceType | frontEndType = PicoScenesDeviceType::Unknown |
frontend type | |
PicoScenesDeviceSubtype | frontEndSubtype = PicoScenesDeviceSubtype::Unknown |
frontend subtype | |
bool | txServiceStarted = false |
indicate whether Tx service is running | |
PicoScenesFrameTxParameters | userSpecifiedTxParameters |
user-specified Tx parameters | |
std::mutex | txPauseMutex |
std::condition_variable | txPauseCV |
bool | txPaused = false |
indicate whether Tx serivce is paused | |
std::function< void(const ModularPicoScenesRxFrame &)> | rxHandle = nullptr |
The Rx frame handler. | |
bool | rxPaused = false |
indicate whether Rx service loop is paused | |
bool | rxServiceStarted = false |
indicate whether Rx service loop is running | |
![]() | |
std::vector< std::array< uint8_t, 6 > > | sourceAddressFilterList |
the source addresses to be filtered | |
std::vector< std::array< uint8_t, 6 > > | destinationAddressFilterList |
the destination addressed to be filtered | |
uint16_t | currentTxSequenceNumber {0} |
current Tx sequence number | |
Additional Inherited Members | |
![]() | |
static bool | isMAC80211CompatibleFrontEnd (const std::string &referredInterfaceName) |
Check if a given interface is compatible with MAC80211. | |
Base class for MAC80211-based NICs that support CSI extraction.
This class extends MAC80211InjectionOnlyFrontEnd to add CSI (Channel State Information) extraction capabilities. It provides:
Definition at line 20 of file MAC80211CSIExtractableFrontEnd.hxx.
|
inlineexplicit |
Constructor for CSI-capable front-end.
referredInterfaceName | Name or identifier of the network interface |
Definition at line 28 of file MAC80211CSIExtractableFrontEnd.hxx.
|
inlinevirtual |
Set frame type filter for CSI collection.
frameTypes | Vector of frame types to filter |
std::runtime_error | If frame type filtering is not supported by the device |
Definition at line 58 of file MAC80211CSIExtractableFrontEnd.hxx.
References AbstractFrontEnd::getReferredInterfaceName().
|
protectedpure virtual |
Start the CSI extraction and parsing loop.
Pure virtual function that must be implemented by derived classes to:
Referenced by startRx().
|
inlineoverridevirtual |
Start the CSI reception service.
Initializes and starts the CSI extraction service if the CSI data port is properly opened. The service includes:
std::runtime_error | If CSI data port is not properly opened |
Implements AbstractFrontEnd.
Definition at line 42 of file MAC80211CSIExtractableFrontEnd.hxx.
References csiPathPointer, AbstractFrontEnd::getReferredInterfaceName(), AbstractFrontEnd::rxServiceStarted, and startCSIExtractionAndParsingLoop().
|
protected |
< File descriptor for CSI data port
Definition at line 64 of file MAC80211CSIExtractableFrontEnd.hxx.
Referenced by startRx().