SoapySDR  0.6.1-3build1
Vendor and platform neutral SDR interface library
Device.hpp
Go to the documentation of this file.
1 
12 #pragma once
13 #include <SoapySDR/Config.hpp>
14 #include <SoapySDR/Types.hpp>
15 #include <SoapySDR/Constants.h>
16 #include <SoapySDR/Errors.h>
17 #include <vector>
18 #include <string>
19 #include <complex>
20 #include <cstddef> //size_t
21 
22 namespace SoapySDR
23 {
24 
26 class Stream;
27 
32 {
33 public:
34 
36  virtual ~Device(void);
37 
43  static KwargsList enumerate(const Kwargs &args = Kwargs());
44 
51  static KwargsList enumerate(const std::string &args);
52 
62  static Device *make(const Kwargs &args = Kwargs());
63 
73  static Device *make(const std::string &args);
74 
80  static void unmake(Device *device);
81 
82  /*******************************************************************
83  * Identification API
84  ******************************************************************/
85 
91  virtual std::string getDriverKey(void) const;
92 
98  virtual std::string getHardwareKey(void) const;
99 
107  virtual Kwargs getHardwareInfo(void) const;
108 
109  /*******************************************************************
110  * Channels API
111  ******************************************************************/
112 
119  virtual void setFrontendMapping(const int direction, const std::string &mapping);
120 
126  virtual std::string getFrontendMapping(const int direction) const;
127 
131  virtual size_t getNumChannels(const int direction) const;
132 
143  virtual Kwargs getChannelInfo(const int direction, const size_t channel) const;
144 
151  virtual bool getFullDuplex(const int direction, const size_t channel) const;
152 
153  /*******************************************************************
154  * Stream API
155  ******************************************************************/
156 
163  virtual std::vector<std::string> getStreamFormats(const int direction, const size_t channel) const;
164 
174  virtual std::string getNativeStreamFormat(const int direction, const size_t channel, double &fullScale) const;
175 
182  virtual ArgInfoList getStreamArgsInfo(const int direction, const size_t channel) const;
183 
233  virtual Stream *setupStream(
234  const int direction,
235  const std::string &format,
236  const std::vector<size_t> &channels = std::vector<size_t>(),
237  const Kwargs &args = Kwargs());
238 
244  virtual void closeStream(Stream *stream);
245 
255  virtual size_t getStreamMTU(Stream *stream) const;
256 
274  virtual int activateStream(
275  Stream *stream,
276  const int flags = 0,
277  const long long timeNs = 0,
278  const size_t numElems = 0);
279 
294  virtual int deactivateStream(
295  Stream *stream,
296  const int flags = 0,
297  const long long timeNs = 0);
298 
318  virtual int readStream(
319  Stream *stream,
320  void * const *buffs,
321  const size_t numElems,
322  int &flags,
323  long long &timeNs,
324  const long timeoutUs = 100000);
325 
345  virtual int writeStream(
346  Stream *stream,
347  const void * const *buffs,
348  const size_t numElems,
349  int &flags,
350  const long long timeNs = 0,
351  const long timeoutUs = 100000);
352 
373  virtual int readStreamStatus(
374  Stream *stream,
375  size_t &chanMask,
376  int &flags,
377  long long &timeNs,
378  const long timeoutUs = 100000);
379 
380  /*******************************************************************
381  * Direct buffer access API
382  ******************************************************************/
383 
393  virtual size_t getNumDirectAccessBuffers(Stream *stream);
394 
408  virtual int getDirectAccessBufferAddrs(Stream *stream, const size_t handle, void **buffs);
409 
430  virtual int acquireReadBuffer(
431  Stream *stream,
432  size_t &handle,
433  const void **buffs,
434  int &flags,
435  long long &timeNs,
436  const long timeoutUs = 100000);
437 
445  virtual void releaseReadBuffer(
446  Stream *stream,
447  const size_t handle);
448 
467  virtual int acquireWriteBuffer(
468  Stream *stream,
469  size_t &handle,
470  void **buffs,
471  const long timeoutUs = 100000);
472 
488  virtual void releaseWriteBuffer(
489  Stream *stream,
490  const size_t handle,
491  const size_t numElems,
492  int &flags,
493  const long long timeNs = 0);
494 
495  /*******************************************************************
496  * Antenna API
497  ******************************************************************/
498 
505  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
506 
513  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
514 
521  virtual std::string getAntenna(const int direction, const size_t channel) const;
522 
523  /*******************************************************************
524  * Frontend corrections API
525  ******************************************************************/
526 
533  virtual bool hasDCOffsetMode(const int direction, const size_t channel) const;
534 
541  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
542 
549  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
550 
557  virtual bool hasDCOffset(const int direction, const size_t channel) const;
558 
565  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
566 
573  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
574 
581  virtual bool hasIQBalance(const int direction, const size_t channel) const;
582 
589  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
590 
597  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
598 
605  virtual bool hasFrequencyCorrection(const int direction, const size_t channel) const;
606 
613  virtual void setFrequencyCorrection(const int direction, const size_t channel, const double value);
614 
621  virtual double getFrequencyCorrection(const int direction, const size_t channel) const;
622 
623  /*******************************************************************
624  * Gain API
625  ******************************************************************/
626 
634  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
635 
642  virtual bool hasGainMode(const int direction, const size_t channel) const;
643 
650  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
651 
658  virtual bool getGainMode(const int direction, const size_t channel) const;
659 
667  virtual void setGain(const int direction, const size_t channel, const double value);
668 
676  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
677 
684  virtual double getGain(const int direction, const size_t channel) const;
685 
693  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
694 
701  virtual Range getGainRange(const int direction, const size_t channel) const;
702 
710  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
711 
712  /*******************************************************************
713  * Frequency API
714  ******************************************************************/
715 
743  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
744 
761  virtual void setFrequency(const int direction, const size_t channel, const std::string &name, const double frequency, const Kwargs &args = Kwargs());
762 
771  virtual double getFrequency(const int direction, const size_t channel) const;
772 
780  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
781 
789  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
790 
797  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
798 
806  virtual RangeList getFrequencyRange(const int direction, const size_t channel, const std::string &name) const;
807 
814  virtual ArgInfoList getFrequencyArgsInfo(const int direction, const size_t channel) const;
815 
816  /*******************************************************************
817  * Sample Rate API
818  ******************************************************************/
819 
826  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
827 
834  virtual double getSampleRate(const int direction, const size_t channel) const;
835 
843  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
844 
851  virtual RangeList getSampleRateRange(const int direction, const size_t channel) const;
852 
853  /*******************************************************************
854  * Bandwidth API
855  ******************************************************************/
856 
863  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
864 
871  virtual double getBandwidth(const int direction, const size_t channel) const;
872 
880  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
881 
888  virtual RangeList getBandwidthRange(const int direction, const size_t channel) const;
889 
890  /*******************************************************************
891  * Clocking API
892  ******************************************************************/
893 
898  virtual void setMasterClockRate(const double rate);
899 
904  virtual double getMasterClockRate(void) const;
905 
910  virtual RangeList getMasterClockRates(void) const;
911 
916  virtual std::vector<std::string> listClockSources(void) const;
917 
922  virtual void setClockSource(const std::string &source);
923 
928  virtual std::string getClockSource(void) const;
929 
930  /*******************************************************************
931  * Time API
932  ******************************************************************/
933 
938  virtual std::vector<std::string> listTimeSources(void) const;
939 
944  virtual void setTimeSource(const std::string &source);
945 
950  virtual std::string getTimeSource(void) const;
951 
957  virtual bool hasHardwareTime(const std::string &what = "") const;
958 
965  virtual long long getHardwareTime(const std::string &what = "") const;
966 
973  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
974 
983  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
984 
985  /*******************************************************************
986  * Sensor API
987  ******************************************************************/
988 
994  virtual std::vector<std::string> listSensors(void) const;
995 
1002  virtual ArgInfo getSensorInfo(const std::string &key) const;
1003 
1011  virtual std::string readSensor(const std::string &key) const;
1012 
1020  virtual std::vector<std::string> listSensors(const int direction, const size_t channel) const;
1021 
1030  virtual ArgInfo getSensorInfo(const int direction, const size_t channel, const std::string &key) const;
1031 
1041  virtual std::string readSensor(const int direction, const size_t channel, const std::string &key) const;
1042 
1043  /*******************************************************************
1044  * Register API
1045  ******************************************************************/
1046 
1051  virtual std::vector<std::string> listRegisterInterfaces(void) const;
1052 
1061  virtual void writeRegister(const std::string &name, const unsigned addr, const unsigned value);
1062 
1069  virtual unsigned readRegister(const std::string &name, const unsigned addr) const;
1070 
1079  virtual void writeRegister(const unsigned addr, const unsigned value);
1080 
1087  virtual unsigned readRegister(const unsigned addr) const;
1088 
1097  virtual void writeRegisters(const std::string &name, const unsigned addr, const std::vector<unsigned> &value);
1098 
1106  virtual std::vector<unsigned> readRegisters(const std::string &name, const unsigned addr, const size_t length) const;
1107 
1108  /*******************************************************************
1109  * Settings API
1110  ******************************************************************/
1111 
1116  virtual ArgInfoList getSettingInfo(void) const;
1117 
1124  virtual void writeSetting(const std::string &key, const std::string &value);
1125 
1131  virtual std::string readSetting(const std::string &key) const;
1132 
1139  virtual ArgInfoList getSettingInfo(const int direction, const size_t channel) const;
1140 
1149  virtual void writeSetting(const int direction, const size_t channel, const std::string &key, const std::string &value);
1150 
1158  virtual std::string readSetting(const int direction, const size_t channel, const std::string &key) const;
1159 
1160  /*******************************************************************
1161  * GPIO API
1162  ******************************************************************/
1163 
1167  virtual std::vector<std::string> listGPIOBanks(void) const;
1168 
1174  virtual void writeGPIO(const std::string &bank, const unsigned value);
1175 
1182  virtual void writeGPIO(const std::string &bank, const unsigned value, const unsigned mask);
1183 
1189  virtual unsigned readGPIO(const std::string &bank) const;
1190 
1197  virtual void writeGPIODir(const std::string &bank, const unsigned dir);
1198 
1206  virtual void writeGPIODir(const std::string &bank, const unsigned dir, const unsigned mask);
1207 
1214  virtual unsigned readGPIODir(const std::string &bank) const;
1215 
1216  /*******************************************************************
1217  * I2C API
1218  ******************************************************************/
1219 
1227  virtual void writeI2C(const int addr, const std::string &data);
1228 
1237  virtual std::string readI2C(const int addr, const size_t numBytes);
1238 
1239  /*******************************************************************
1240  * SPI API
1241  ******************************************************************/
1242 
1257  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
1258 
1259  /*******************************************************************
1260  * UART API
1261  ******************************************************************/
1262 
1267  virtual std::vector<std::string> listUARTs(void) const;
1268 
1276  virtual void writeUART(const std::string &which, const std::string &data);
1277 
1286  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
1287 
1288 };
1289 
1290 };
Definition: Types.hpp:42
std::vector< Kwargs > KwargsList
Typedef for a list of key-word dictionaries.
Definition: Types.hpp:37
std::vector< ArgInfo > ArgInfoList
Definition: Types.hpp:127
std::map< std::string, std::string > Kwargs
Typedef for a dictionary of key-value string arguments.
Definition: Types.hpp:22
std::vector< Range > RangeList
Definition: Types.hpp:70
Definition: Types.hpp:75
Definition: Device.hpp:22
Definition: Device.hpp:31
#define SOAPY_SDR_API
Definition: Config.h:41