51 std::string getDriverKey(
void)
const override;
52 std::string getHardwareKey(
void)
const override;
53 SoapySDR::Kwargs getHardwareInfo(
void)
const override;
55 size_t getNumChannels(
const int)
const override;
56 SoapySDR::Kwargs getChannelInfo(
const int direction,
const size_t channel)
const override;
57 bool getFullDuplex(
const int direction,
const size_t channel)
const override;
62 std::vector<std::string> getStreamFormats(
const int direction,
const size_t channel)
const override;
63 std::string getNativeStreamFormat(
const int direction,
const size_t channel,
double &fullScale)
const override;
64 SoapySDR::ArgInfoList getStreamArgsInfo(
const int direction,
const size_t channel)
const override;
67 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;
69 void closeStream(SoapySDR::Stream *stream)
override;
71 size_t getStreamMTU(SoapySDR::Stream *stream)
const override;
73 int activateStream(SoapySDR::Stream *stream,
const int flags = 0,
const long long timeNs = 0,
const size_t numElems = 0)
override;
75 int deactivateStream(SoapySDR::Stream *stream,
const int flags = 0,
const long long timeNs = 0)
override;
77 int readStream(SoapySDR::Stream *stream,
void *
const *buffs,
const size_t numElems,
int &flags,
long long &timeNs,
const long timeoutUs = 100000)
override;
83 int acquireReadBuffer(SoapySDR::Stream *stream,
size_t &handle,
const void **buffs,
int &flags,
long long &timeNs,
const long timeoutUs = 100000)
override;
85 void releaseReadBuffer(SoapySDR::Stream *stream,
const size_t handle)
override;
89 std::vector<std::string> listAntennas(
const int direction,
const size_t channel)
const override;
90 void setAntenna(
const int direction,
const size_t channel,
const std::string &name)
override;
91 std::string getAntenna(
const int direction,
const size_t channel)
const override;
95 bool hasDCOffset(
const int direction,
const size_t channel)
const override;
96 bool hasDCOffsetMode(
const int direction,
const size_t channel)
const override;
98 bool hasIQBalance(
const int,
const size_t)
const override;
99 bool hasIQBalanceMode(
const int,
const size_t)
const override;
101 bool hasFrequencyCorrection(
const int direction,
const size_t channel)
const override;
105 std::vector<std::string> listGains(
const int direction,
const size_t channel)
const override;
106 bool hasGainMode(
const int direction,
const size_t channel)
const override;
107 void setGain(
const int direction,
const size_t channel,
const std::string &name,
const double value)
override;
108 double getGain(
const int direction,
const size_t channel,
const std::string &name)
const override;
109 SoapySDR::Range getGainRange(
const int direction,
const size_t channel,
const std::string &name)
const override;
114 std::vector<std::string> listFrequencies(
const int direction,
const size_t channel)
const override;
115 SoapySDR::RangeList getFrequencyRange(
const int direction,
const size_t channel)
const override;
116 SoapySDR::RangeList getFrequencyRange(
const int direction,
const size_t channel,
const std::string &name)
const override;
117 SoapySDR::ArgInfoList getFrequencyArgsInfo(
const int direction,
const size_t channel)
const override;
120 void setFrequency(
const int direction,
const size_t channel,
const double frequency,
const SoapySDR::Kwargs &args = SoapySDR::Kwargs())
override;
121 void setFrequency(
const int direction,
const size_t channel,
const std::string &name,
const double frequency,
const SoapySDR::Kwargs &args = SoapySDR::Kwargs())
override;
122 double getFrequency(
const int direction,
const size_t channel)
const override;
123 double getFrequency(
const int direction,
const size_t channel,
const std::string &name)
const override;
127 SoapySDR::RangeList getSampleRateRange(
const int direction,
const size_t channel)
const override;
128 void setSampleRate(
const int direction,
const size_t channel,
const double rate)
override;
129 double getSampleRate(
const int direction,
const size_t channel)
const override;
133 SoapySDR::ArgInfoList getSettingInfo()
const override;
134 void writeSetting(
const std::string &key,
const std::string &value)
override;
137 std::vector<std::string> listSensors()
const override;
138 SoapySDR::ArgInfo getSensorInfo(
const std::string &key)
const override;
139 std::string readSensor(
const std::string &key)
const override;
163 uint64_t centerFrequency = 0;
164 size_t numBuffers, bufferLength, asyncBuffs;
165 std::atomic<long long> ticks;
171 void Callback(
const sddc_complex_t *data, uint32_t len);
173 std::mutex _buf_mutex;
174 std::condition_variable _buf_cond;
176 std::vector<std::vector<uint8_t>> samples_buffer;
177 size_t samples_block_write;
178 size_t samples_block_read;
179 std::atomic<size_t> _buf_count;
181 std::atomic<bool> _overflowEvent;
182 size_t bufferedElems;
183 size_t _currentHandle;
188 double masterClockRate;