SDDC_Driver
Loading...
Searching...
No Matches
SoapySDDC.hpp
1#pragma once
2#include "../Core/config.h"
3#include <SoapySDR/Device.hpp>
4#include <SoapySDR/Types.h>
5#include <atomic>
6#include <cstddef>
7#include <sys/types.h>
8#include "FX3Class.h"
9#include "RadioHandler.h"
10
11class SoapySDDC : public SoapySDR::Device
12{
13public:
14 explicit SoapySDDC(uint8_t dev_index);
15 ~SoapySDDC(void);
16
17 // ----- Metadata ----- //
18 std::string getDriverKey(void) const override;
19 std::string getHardwareKey(void) const override;
20 SoapySDR::Kwargs getHardwareInfo(void) const override;
21
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;
25 // ----- //
26
27 // ----- Stream ----- //
28 // --- Metadata --- //
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;
32
33 // ---
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;
35
36 void closeStream(SoapySDR::Stream *stream) override;
37
38 size_t getStreamMTU(SoapySDR::Stream *stream) const override;
39
40 int activateStream(SoapySDR::Stream *stream, const int flags = 0, const long long timeNs = 0, const size_t numElems = 0) override;
41
42 int deactivateStream(SoapySDR::Stream *stream, const int flags = 0, const long long timeNs = 0) override;
43
44 int readStream(SoapySDR::Stream *stream, void *const *buffs, const size_t numElems, int &flags, long long &timeNs, const long timeoutUs = 100000) override;
45
46 // size_t getNumDirectAccessBuffers(SoapySDR::Stream *stream);
47
48 // int getDirectAccessBufferAddrs(SoapySDR::Stream *stream, const size_t handle, void **buffs);
49
50 int acquireReadBuffer(SoapySDR::Stream *stream, size_t &handle, const void **buffs, int &flags, long long &timeNs, const long timeoutUs = 100000) override;
51
52 void releaseReadBuffer(SoapySDR::Stream *stream, const size_t handle) override;
53 // ----- //
54
55 // ----- Antennas ----- //
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;
59 // ----- //
60
61 // ----- Additional features ----- //
62 bool hasDCOffset(const int direction, const size_t channel) const override;
63 bool hasDCOffsetMode(const int direction, const size_t channel) const override;
64
65 bool hasIQBalance(const int, const size_t) const override;
66 bool hasIQBalanceMode(const int, const size_t) const override;
67
68 bool hasFrequencyCorrection(const int direction, const size_t channel) const override;
69 // ----- //
70
71 // ----- Gains --- //
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;
77 // ----- //
78
79 // ----- Frequency ----- //
80 // --- Metadata --- //
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;
85 // --- //
86
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;
91 // ----- //
92
93 // ----- Sample rate ----- //
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;
97 // ----- //
98
99 // ----- Settings ----- //
100 SoapySDR::ArgInfoList getSettingInfo() const override;
101 void writeSetting(const std::string &key, const std::string &value) override;
102
103 // ----- Sensors ----- //
104 vector<string> listSensors() const override;
105 SoapySDR::ArgInfo getSensorInfo(const string &key) const override;
106 string readSensor(const string &key) const override;
107 // ----- //
108
109
110
111
112 // void setMasterClockRate(const double rate);
113
114 // double getMasterClockRate(void) const;
115
116 // std::vector<std::string> listTimeSources(void) const;
117
118 // std::string getTimeSource(void) const;
119
120 // bool hasHardwareTime(const std::string &what = "") const;
121
122 // long long getHardwareTime(const std::string &what = "") const;
123
124 // void setHardwareTime(const long long timeNs, const std::string &what = "");
125
126private:
127 int deviceId;
128 int bytesPerSample;
129
130 uint64_t centerFrequency = 0;
131 size_t numBuffers, bufferLength, asyncBuffs;
132 std::atomic<long long> ticks;
133
134 fx3class *Fx3;
135 RadioHandler *radio_handler;
136
137public:
138 void Callback(const sddc_complex_t *data, uint32_t len);
139
140 std::mutex _buf_mutex;
141 std::condition_variable _buf_cond;
142
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;
147 char *_currentBuff;
148 std::atomic<bool> _overflowEvent;
149 size_t bufferedElems;
150 size_t _currentHandle;
151 bool resetBuffer;
152
153 int samplerateidx;
154
155 double masterClockRate;
156};
157
158
159
160
161
162
163 /*
164
165
166virtual int writeStream (Stream *stream, const void *const *buffs, const size_t numElems, int &flags, const long long timeNs=0, const long timeoutUs=100000)
167
168virtual int readStreamStatus (Stream *stream, size_t &chanMask, int &flags, long long &timeNs, const long timeoutUs=100000)
169
170virtual size_t getNumDirectAccessBuffers (Stream *stream)
171
172virtual int getDirectAccessBufferAddrs (Stream *stream, const size_t handle, void **buffs)
173
174virtual int acquireReadBuffer (Stream *stream, size_t &handle, const void **buffs, int &flags, long long &timeNs, const long timeoutUs=100000)
175
176virtual void releaseReadBuffer (Stream *stream, const size_t handle)
177
178virtual int acquireWriteBuffer (Stream *stream, size_t &handle, void **buffs, const long timeoutUs=100000)
179
180virtual void releaseWriteBuffer (Stream *stream, const size_t handle, const size_t numElems, int &flags, const long long timeNs=0)
181
182
183
184
185
186
187
188virtual void setBandwidth (const int direction, const size_t channel, const double bw)
189
190virtual double getBandwidth (const int direction, const size_t channel) const
191
192virtual std::vector< double > listBandwidths (const int direction, const size_t channel) const
193
194virtual RangeList getBandwidthRange (const int direction, const size_t channel) const
195
196virtual void setMasterClockRate (const double rate)
197
198virtual double getMasterClockRate (void) const
199
200virtual RangeList getMasterClockRates (void) const
201
202virtual void setReferenceClockRate (const double rate)
203
204virtual double getReferenceClockRate (void) const
205
206virtual RangeList getReferenceClockRates (void) const
207
208virtual std::vector< std::string > listClockSources (void) const
209
210virtual void setClockSource (const std::string &source)
211
212virtual std::string getClockSource (void) const
213
214virtual std::vector< std::string > listTimeSources (void) const
215
216virtual void setTimeSource (const std::string &source)
217
218virtual std::string getTimeSource (void) const
219
220virtual bool hasHardwareTime (const std::string &what="") const
221
222virtual long long getHardwareTime (const std::string &what="") const
223
224virtual void setHardwareTime (const long long timeNs, const std::string &what="")
225
226virtual void setCommandTime (const long long timeNs, const std::string &what="")
227
228virtual std::vector< std::string > listSensors (void) const
229
230virtual ArgInfo getSensorInfo (const std::string &key) const
231
232virtual std::string readSensor (const std::string &key) const
233
234template<typename Type >
235Type readSensor (const std::string &key) const
236
237virtual std::vector< std::string > listSensors (const int direction, const size_t channel) const
238
239virtual ArgInfo getSensorInfo (const int direction, const size_t channel, const std::string &key) const
240
241virtual std::string readSensor (const int direction, const size_t channel, const std::string &key) const
242
243template<typename Type >
244Type readSensor (const int direction, const size_t channel, const std::string &key) const
245
246virtual std::vector< std::string > listRegisterInterfaces (void) const
247
248virtual void writeRegister (const std::string &name, const unsigned addr, const unsigned value)
249
250virtual unsigned readRegister (const std::string &name, const unsigned addr) const
251
252virtual void writeRegister (const unsigned addr, const unsigned value)
253
254virtual unsigned readRegister (const unsigned addr) const
255
256virtual void writeRegisters (const std::string &name, const unsigned addr, const std::vector< unsigned > &value)
257
258virtual std::vector< unsigned > readRegisters (const std::string &name, const unsigned addr, const size_t length) const
259
260virtual ArgInfoList getSettingInfo (void) const
261
262virtual void writeSetting (const std::string &key, const std::string &value)
263
264template<typename Type >
265void writeSetting (const std::string &key, const Type &value)
266
267virtual std::string readSetting (const std::string &key) const
268
269template<typename Type >
270Type readSetting (const std::string &key)
271
272virtual ArgInfoList getSettingInfo (const int direction, const size_t channel) const
273
274virtual void writeSetting (const int direction, const size_t channel, const std::string &key, const std::string &value)
275
276template<typename Type >
277void writeSetting (const int direction, const size_t channel, const std::string &key, const Type &value)
278
279virtual std::string readSetting (const int direction, const size_t channel, const std::string &key) const
280
281template<typename Type >
282Type readSetting (const int direction, const size_t channel, const std::string &key)
283
284virtual std::vector< std::string > listGPIOBanks (void) const
285
286virtual void writeGPIO (const std::string &bank, const unsigned value)
287
288virtual void writeGPIO (const std::string &bank, const unsigned value, const unsigned mask)
289
290virtual unsigned readGPIO (const std::string &bank) const
291
292virtual void writeGPIODir (const std::string &bank, const unsigned dir)
293
294virtual void writeGPIODir (const std::string &bank, const unsigned dir, const unsigned mask)
295
296virtual unsigned readGPIODir (const std::string &bank) const
297
298virtual void writeI2C (const int addr, const std::string &data)
299
300virtual std::string readI2C (const int addr, const size_t numBytes)
301
302virtual unsigned transactSPI (const int addr, const unsigned data, const size_t numBits)
303
304virtual std::vector< std::string > listUARTs (void) const
305
306virtual void writeUART (const std::string &which, const std::string &data)
307
308virtual std::string readUART (const std::string &which, const long timeoutUs=100000) const
309
310virtual void * getNativeDeviceHandle (void) const
311*/
Definition RadioHandler.h:53
Definition SoapySDDC.hpp:12
Definition FX3Class.h:24