PicoScenes API Docs
 
Loading...
Searching...
No Matches
SDRFrontEndConfigurations.hxx
Go to the documentation of this file.
1//
2// Created by Zhiping Jiang on 5/2/21.
3//
4
5#ifndef PICOSCENES_PLATFORM_SDRFRONTENDCONFIGURATIONS_HXX
6#define PICOSCENES_PLATFORM_SDRFRONTENDCONFIGURATIONS_HXX
7
9
13enum class SDRFrontEndTransferType : uint8_t {
14 CS8 = 8,
15 CS16 = 16,
16};
17
19 bool valid{false};
20 bool error{false};
21 double txTime{0.0};
22 double scheduledTime{0.0};
23 double systemDelay{0.0};
24 int eventCode{0};
25 int numACKs{0};
27 size_t actualTxLength{0};
28
29 PicoScenesDeviceType deviceType{PicoScenesDeviceType::Unknown};
30 PicoScenesDeviceSubtype subType{PicoScenesDeviceSubtype::Unknown};
31};
32
34 bool valid{false};
35 bool error{false};
36 bool hasTime{false};
37 double rxStartTime{0.0};
38 int errorCode{0};
39 int64_t numReceived{0};
40
41 PicoScenesDeviceType deviceType{PicoScenesDeviceType::Unknown};
42 PicoScenesDeviceSubtype subType{PicoScenesDeviceSubtype::Unknown};
43};
44
45
50public:
52
59 virtual double getRxSensitivity() = 0;
60
66 virtual void setRxSensitivity(double rxSensitivity) = 0;
67
68 virtual bool isRxResampleBypassFIR() = 0;
69
70 virtual void setRxResampleBypassFIR(bool bypass) = 0;
71
72 virtual bool isTxSplitHighLow() = 0;
73
74 virtual void setTxSplitHighLow(bool split) = 0;
75
76 virtual bool isRxMergeHighLow() = 0;
77
78 virtual void setRxMergeHighLow(bool merge) = 0;
79
86 virtual std::optional<double> getCarrierFrequencyOffset4TxEncoding() = 0;
87
93 virtual void setCarrierFrequencyOffset4TxEncoding(double carrierFrequencyOffset) = 0;
94
100 virtual std::optional<double> getSamplingFrequencyOffset4TxEncoding() = 0;
101
107 virtual void setSamplingFrequencyOffset4TxEncoding(double samplingFrequencyOffset) = 0;
108
116 virtual std::optional<double> getCarrierFrequencyOffset4RxDecoding() = 0;
117
124 virtual void setCarrierFrequencyOffset4RxDecoding(double carrierFrequencyOffset) = 0;
125
132 virtual std::optional<double> getSamplingFrequencyOffset4RxDecoding() = 0;
133
138 virtual void setSamplingFrequencyOffset4RxDecoding(double samplingFrequencyOffset) = 0;
139
144 virtual double getTxResampleRatio() = 0;
145
150 virtual void setTxResampleRatio(double txResampleRatio) = 0;
151
157 virtual double getRxResampleRatio() = 0;
158
164 virtual void setRxResampleRatio(double rxResampleRatio) = 0;
165
169 virtual double getSDRFrontEndTime() = 0;
170
174 virtual ChannelBandwidthEnum getRxChannelBandwidthMode() = 0;
175
180 virtual void setRxChannelBandwidthMode(ChannelBandwidthEnum rxCbw) = 0;
181
189 virtual void setTxIQMismatch(double iq_ratio_db, double iq_crosstalk_degree) = 0;
190
198 virtual void setRxIQMismatch(double iq_ratio_db, double iq_crosstalk_degree) = 0;
199
203 virtual double getTxIqRatioDB() = 0;
204
209 virtual double getTxIqCrossTalkDegree() = 0;
210
215 virtual double getRxIqRatioDB() = 0;
216
221 virtual double getRxIqCrossTalkDegree() = 0;
222
227 virtual bool isFullDuplexEnabled() = 0;
228
233 virtual void setFullDuplex(bool enableFullduplex) = 0;
234
239 virtual double getRxOfdmSymbolOffset() = 0;
240
244 virtual void setRxOfdmSymbolOffset(double rxOfdmSymbolOffset) = 0;
245
246 virtual double getNumSamplesSavedBeforeStart() = 0;
247
248 virtual void getNumSamplesSavedBeforeStart(double numSamplesSavedBeforeStart) = 0;
249
250 [[nodiscard]] virtual bool isReturnBasebandSignals() const = 0;
251
252 [[nodiscard]] virtual bool useConventionalPacketDetector() const = 0;
253};
254
259public:
260
261 virtual void initializeSDR() = 0;
262
263 [[nodiscard]] virtual const std::vector<size_t> & userSpecifiedTxChannels() const = 0;
264
265 [[nodiscard]] virtual const std::vector<size_t> & userSpecifiedRxChannels() const = 0;
266
267 virtual void setTxCarrierFrequencies(std::vector<double> carrierFreqs) = 0;
268
269 virtual void setRxCarrierFrequencies(std::vector<double> carrierFreqs) = 0;
270
271 virtual std::vector<double> getTxCarrierFrequencies() = 0;
272
273 virtual std::vector<double> getRxCarrierFrequencies() = 0;
274
275 virtual void setTxSamplingRate(double txRate) = 0;
276
277 virtual void setRxSamplingRate(double rxRate) = 0;
278
279 virtual double getTxSamplingRate() = 0;
280
281 virtual double getRxSamplingRate() = 0;
282
283 virtual bool supportAGC() = 0;
284
285 virtual void setAGC(bool enableAGC) = 0;
286
290 virtual std::string getTxAntenna() = 0;
291
295 virtual std::string getRxAntenna() = 0;
296
301 virtual void setTxAntenna(const std::string& txAnt) = 0;
302
306 virtual void setRxAntenna(const std::string& rxAnt) = 0;
307
308 virtual std::vector<std::string> getTxAntennas() = 0;
309
310 virtual std::vector<std::string> getRxAntennas() = 0;
311
315 virtual void setTxAntennas(const std::vector<std::string>& txAnts) =0;
316
320 virtual void setRxAntennas(const std::vector<std::string>& rxAnts) =0;
321
325 virtual double getFilterBandwidth() = 0;
326
331 virtual void setFilterBandwidth(double bw) = 0;
332
337 virtual std::string getClockSource() = 0;
338
342 virtual void setClockSource(const std::string& clockSource) = 0;
343
348 virtual void setClockSources(const std::vector<std::string>& clockSources) = 0;
349
354 virtual std::vector<std::string> getClockSources() = 0;
355
361 virtual std::string getTimeSource() = 0;
362
367 virtual void setTimeSource(const std::string& timeSource) = 0;
368
373 virtual void setTimeSources(const std::vector<std::string>& timeSources) = 0;
374
379 virtual std::vector<std::string> getTimeSources() = 0;
380
384 virtual double getMasterClockRate() = 0;
385
390 virtual void setMasterClockRate(double masterClockRate) = 0;
391
392 [[nodiscard]] virtual SDRFrontEndTransferType getTransferType() const = 0;
393
394 virtual void setTransferType(SDRFrontEndTransferType transferType) = 0;
395
396 virtual void setNumThreads4RxDecoding(uint8_t numThreads) = 0;
397
398 [[nodiscard]] virtual double getRxBufferDuration() const = 0;
399
400 virtual void skipMPDUDecoding4HESUHighDopplerFrame(bool skipDataDecoding) = 0;
401};
402
403
404#endif //PICOSCENES_PLATFORM_SDRFRONTENDCONFIGURATIONS_HXX
SDRFrontEndTransferType
The SDRFrontEndTransferType enum denotes the 8-bit or 16-bit SDR frontend data depth.
@ CS16
16-bit complex sign
@ CS8
8-bit complex sign
This interfaces hold all the Tx/Rx baseband configurations of PicoScenes Wi-Fi baseband implementatio...
virtual double getTxResampleRatio()=0
Get the user-specified Tx signal resample ratio.
virtual bool useConventionalPacketDetector() const =0
virtual void setCarrierFrequencyOffset4RxDecoding(double carrierFrequencyOffset)=0
Set the CFO value for baseband decoding.
virtual bool isRxResampleBypassFIR()=0
virtual double getRxIqCrossTalkDegree()=0
Get the I/Q mismatch degree of the user-specified Tx I/Q mismatch.
virtual void setCarrierFrequencyOffset4TxEncoding(double carrierFrequencyOffset)=0
Set the current carrier frequency offset (CFO) value for the baseband signal generation.
virtual std::optional< double > getCarrierFrequencyOffset4RxDecoding()=0
Check if user specifies the Rx path CFO; if specified, return the Rx path CFO.
virtual double getTxIqRatioDB()=0
Get the I/Q mismatch ratio of the user-specified Tx I/Q mismatch.
virtual double getRxSensitivity()=0
Get the Rx sensitivity of SDR baseband implemntation.
virtual double getRxOfdmSymbolOffset()=0
Get the user-specified Rx OFDM symbol offset value.
virtual void setRxMergeHighLow(bool merge)=0
virtual void setRxSensitivity(double rxSensitivity)=0
Set Rx sensitivity.
virtual double getSDRFrontEndTime()=0
Obtain the SDR hardware time.
virtual void setRxResampleRatio(double rxResampleRatio)=0
Set the Rx signal rasample ratio.
virtual double getRxResampleRatio()=0
Get the user-specified Rx resampling ratio.
virtual void setSamplingFrequencyOffset4RxDecoding(double samplingFrequencyOffset)=0
Set the user-specified Rx path SFO,.
virtual void setRxOfdmSymbolOffset(double rxOfdmSymbolOffset)=0
Set Rx OFDM symbol offset, default is 0.
virtual double getTxIqCrossTalkDegree()=0
Get the I/Q mismatch angle of the user-specified Tx I/Q mismatch.
virtual void setRxChannelBandwidthMode(ChannelBandwidthEnum rxCbw)=0
Set the CBW value for Wi-Fi baseband decoder, invoked by "--rx-cbw" option.
virtual std::optional< double > getSamplingFrequencyOffset4TxEncoding()=0
Get the current sampilng frequency offset (SFO) value for the baseband signal generation.
virtual double getNumSamplesSavedBeforeStart()=0
virtual void setFullDuplex(bool enableFullduplex)=0
Set the Frontend is in Tx/Rx loopback mode, in this mode Tx and Rx are open simultaneously,...
virtual std::optional< double > getCarrierFrequencyOffset4TxEncoding()=0
Get the current carrier frequency offset (CFO) value for the baseband signal generation.
virtual void setTxIQMismatch(double iq_ratio_db, double iq_crosstalk_degree)=0
Set Tx I/Q mismatch.
virtual void setRxIQMismatch(double iq_ratio_db, double iq_crosstalk_degree)=0
Set Rx I/Q mismatch.
virtual void setTxSplitHighLow(bool split)=0
virtual void setTxResampleRatio(double txResampleRatio)=0
Set Tx signal resample ratio.
virtual ChannelBandwidthEnum getRxChannelBandwidthMode()=0
Get the current CBW value of Wi-Fi baseband decoder.
virtual double getRxIqRatioDB()=0
Get the I/Q mismatch ratio of the user-specified Rx I/Q mismatch.
virtual bool isFullDuplexEnabled()=0
Check whether the Frontend is in Tx/Rx loopback mode.
virtual bool isReturnBasebandSignals() const =0
virtual void setRxResampleBypassFIR(bool bypass)=0
virtual void setSamplingFrequencyOffset4TxEncoding(double samplingFrequencyOffset)=0
Set the current sampling frequency offset (SFO) value for the baseband signal generation.
virtual void getNumSamplesSavedBeforeStart(double numSamplesSavedBeforeStart)=0
virtual ~SDRFrontEndBasebandConfigurations()=default
virtual std::optional< double > getSamplingFrequencyOffset4RxDecoding()=0
Get the user-specified Rx path SFO, default is 0.
This class holds all the configuration (including the SDR hardware related settings) of SDR frontend.
virtual void setMasterClockRate(double masterClockRate)=0
Set the USRP master clock rate (in Hz)
virtual void skipMPDUDecoding4HESUHighDopplerFrame(bool skipDataDecoding)=0
virtual void setTxAntennas(const std::vector< std::string > &txAnts)=0
Specify antenna for each Tx chain.
virtual SDRFrontEndTransferType getTransferType() const =0
virtual const std::vector< size_t > & userSpecifiedRxChannels() const =0
virtual void setAGC(bool enableAGC)=0
virtual void setRxSamplingRate(double rxRate)=0
virtual void setRxAntenna(const std::string &rxAnt)=0
Set the Rx antenna.
virtual void setTxSamplingRate(double txRate)=0
virtual double getTxSamplingRate()=0
virtual std::vector< std::string > getClockSources()=0
Get the list of currently set clock sources.
virtual void setRxCarrierFrequencies(std::vector< double > carrierFreqs)=0
virtual double getFilterBandwidth()=0
get the hardware-frontend filter bandwidth
virtual void setClockSources(const std::vector< std::string > &clockSources)=0
Set multiple clock sources for different motherboards.
virtual void setTimeSource(const std::string &timeSource)=0
Set the timing source. For USRP, it can be "external", "mimo", "internal".
virtual std::string getTimeSource()=0
Get the timing source.
virtual double getMasterClockRate()=0
Get the USRP master clock rate (in Hz)
virtual const std::vector< size_t > & userSpecifiedTxChannels() const =0
virtual double getRxBufferDuration() const =0
virtual void setNumThreads4RxDecoding(uint8_t numThreads)=0
virtual bool supportAGC()=0
virtual std::string getClockSource()=0
Get the clock source.
virtual void setTransferType(SDRFrontEndTransferType transferType)=0
virtual std::vector< std::string > getRxAntennas()=0
virtual void setTimeSources(const std::vector< std::string > &timeSources)=0
Set multiple time sources for different motherboards.
virtual void setTxAntenna(const std::string &txAnt)=0
Set the Tx antenna.
virtual void setTxCarrierFrequencies(std::vector< double > carrierFreqs)=0
virtual std::vector< double > getTxCarrierFrequencies()=0
virtual std::vector< double > getRxCarrierFrequencies()=0
virtual void setClockSource(const std::string &clockSource)=0
Set the clock source. For USRP, it can be "external", "mimo", "internal".
virtual void setRxAntennas(const std::vector< std::string > &rxAnts)=0
Specify antenna for each Rx chain.
virtual std::vector< std::string > getTxAntennas()=0
virtual std::vector< std::string > getTimeSources()=0
Get the list of currently set time sources.
virtual std::string getRxAntenna()=0
Get the Rx antenna.
virtual std::string getTxAntenna()=0
Get the Tx antenna.
virtual void initializeSDR()=0
virtual double getRxSamplingRate()=0
virtual void setFilterBandwidth(double bw)=0
Set the hardware frontend filter bandwidth.
PicoScenesDeviceSubtype subType
PicoScenesDeviceType deviceType
PicoScenesDeviceType deviceType
PicoScenesDeviceSubtype subType