18 std::string getDriverKey(
void)
const override;
19 std::string getHardwareKey(
void)
const override;
20 SoapySDR::Kwargs getHardwareInfo(
void)
const override;
22 size_t getNumChannels(
const int)
const override;
23 SoapySDR::Kwargs getChannelInfo(
const int direction,
const size_t channel)
const override;
24 bool getFullDuplex(
const int direction,
const size_t channel)
const override;
29 std::vector<std::string> getStreamFormats(
const int direction,
const size_t channel)
const override;
30 std::string getNativeStreamFormat(
const int direction,
const size_t channel,
double &fullScale)
const override;
31 SoapySDR::ArgInfoList getStreamArgsInfo(
const int direction,
const size_t channel)
const override;
34 SoapySDR::Stream *setupStream(
const int direction,
const std::string &format,
const std::vector<size_t> &channels = std::vector<size_t>(),
const SoapySDR::Kwargs &args = SoapySDR::Kwargs())
override;
36 void closeStream(SoapySDR::Stream *stream)
override;
38 size_t getStreamMTU(SoapySDR::Stream *stream)
const override;
40 int activateStream(SoapySDR::Stream *stream,
const int flags = 0,
const long long timeNs = 0,
const size_t numElems = 0)
override;
42 int deactivateStream(SoapySDR::Stream *stream,
const int flags = 0,
const long long timeNs = 0)
override;
44 int readStream(SoapySDR::Stream *stream,
void *
const *buffs,
const size_t numElems,
int &flags,
long long &timeNs,
const long timeoutUs = 100000)
override;
50 int acquireReadBuffer(SoapySDR::Stream *stream,
size_t &handle,
const void **buffs,
int &flags,
long long &timeNs,
const long timeoutUs = 100000)
override;
52 void releaseReadBuffer(SoapySDR::Stream *stream,
const size_t handle)
override;
56 std::vector<std::string> listAntennas(
const int direction,
const size_t channel)
const override;
57 void setAntenna(
const int direction,
const size_t channel,
const std::string &name)
override;
58 std::string getAntenna(
const int direction,
const size_t channel)
const override;
62 bool hasDCOffset(
const int direction,
const size_t channel)
const override;
63 bool hasDCOffsetMode(
const int direction,
const size_t channel)
const override;
65 bool hasIQBalance(
const int,
const size_t)
const override;
66 bool hasIQBalanceMode(
const int,
const size_t)
const override;
68 bool hasFrequencyCorrection(
const int direction,
const size_t channel)
const override;
72 std::vector<std::string> listGains(
const int direction,
const size_t channel)
const override;
73 bool hasGainMode(
const int direction,
const size_t channel)
const override;
74 void setGain(
const int direction,
const size_t channel,
const std::string &name,
const double value)
override;
75 double getGain(
const int direction,
const size_t channel,
const std::string &name)
const override;
76 SoapySDR::Range getGainRange(
const int direction,
const size_t channel,
const std::string &name)
const override;
81 std::vector<std::string> listFrequencies(
const int direction,
const size_t channel)
const override;
82 SoapySDR::RangeList getFrequencyRange(
const int direction,
const size_t channel)
const override;
83 SoapySDR::RangeList getFrequencyRange(
const int direction,
const size_t channel,
const std::string &name)
const override;
84 SoapySDR::ArgInfoList getFrequencyArgsInfo(
const int direction,
const size_t channel)
const override;
87 void setFrequency(
const int direction,
const size_t channel,
const double frequency,
const SoapySDR::Kwargs &args = SoapySDR::Kwargs())
override;
88 void setFrequency(
const int direction,
const size_t channel,
const std::string &name,
const double frequency,
const SoapySDR::Kwargs &args = SoapySDR::Kwargs())
override;
89 double getFrequency(
const int direction,
const size_t channel)
const override;
90 double getFrequency(
const int direction,
const size_t channel,
const std::string &name)
const override;
94 SoapySDR::RangeList getSampleRateRange(
const int direction,
const size_t channel)
const override;
95 void setSampleRate(
const int direction,
const size_t channel,
const double rate)
override;
96 double getSampleRate(
const int direction,
const size_t channel)
const override;
100 SoapySDR::ArgInfoList getSettingInfo()
const override;
101 void writeSetting(
const std::string &key,
const std::string &value)
override;
104 vector<string> listSensors()
const override;
105 SoapySDR::ArgInfo getSensorInfo(
const string &key)
const override;
106 string readSensor(
const string &key)
const override;
130 uint64_t centerFrequency = 0;
131 size_t numBuffers, bufferLength, asyncBuffs;
132 std::atomic<long long> ticks;
138 void Callback(
const sddc_complex_t *data, uint32_t len);
140 std::mutex _buf_mutex;
141 std::condition_variable _buf_cond;
143 std::vector<std::vector<uint8_t>> samples_buffer;
144 size_t samples_block_write;
145 size_t samples_block_read;
146 std::atomic<size_t> _buf_count;
148 std::atomic<bool> _overflowEvent;
149 size_t bufferedElems;
150 size_t _currentHandle;
155 double masterClockRate;