SoapySDR  0.5.0-g37c7ea4b
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 
83  static void unmake(Device *device);
84 
85  /*******************************************************************
86  * Identification API
87  ******************************************************************/
88 
94  virtual std::string getDriverKey(void) const;
95 
101  virtual std::string getHardwareKey(void) const;
102 
110  virtual Kwargs getHardwareInfo(void) const;
111 
112  /*******************************************************************
113  * Channels API
114  ******************************************************************/
115 
122  virtual void setFrontendMapping(const int direction, const std::string &mapping);
123 
129  virtual std::string getFrontendMapping(const int direction) const;
130 
134  virtual size_t getNumChannels(const int direction) const;
135 
146  virtual Kwargs getChannelInfo(const int direction, const size_t channel) const;
147 
154  virtual bool getFullDuplex(const int direction, const size_t channel) const;
155 
156  /*******************************************************************
157  * Stream API
158  ******************************************************************/
159 
166  virtual std::vector<std::string> getStreamFormats(const int direction, const size_t channel) const;
167 
177  virtual std::string getNativeStreamFormat(const int direction, const size_t channel, double &fullScale) const;
178 
185  virtual ArgInfoList getStreamArgsInfo(const int direction, const size_t channel) const;
186 
217  virtual Stream *setupStream(
218  const int direction,
219  const std::string &format,
220  const std::vector<size_t> &channels = std::vector<size_t>(),
221  const Kwargs &args = Kwargs());
222 
228  virtual void closeStream(Stream *stream);
229 
239  virtual size_t getStreamMTU(Stream *stream) const;
240 
258  virtual int activateStream(
259  Stream *stream,
260  const int flags = 0,
261  const long long timeNs = 0,
262  const size_t numElems = 0);
263 
278  virtual int deactivateStream(
279  Stream *stream,
280  const int flags = 0,
281  const long long timeNs = 0);
282 
302  virtual int readStream(
303  Stream *stream,
304  void * const *buffs,
305  const size_t numElems,
306  int &flags,
307  long long &timeNs,
308  const long timeoutUs = 100000);
309 
329  virtual int writeStream(
330  Stream *stream,
331  const void * const *buffs,
332  const size_t numElems,
333  int &flags,
334  const long long timeNs = 0,
335  const long timeoutUs = 100000);
336 
357  virtual int readStreamStatus(
358  Stream *stream,
359  size_t &chanMask,
360  int &flags,
361  long long &timeNs,
362  const long timeoutUs = 100000);
363 
364  /*******************************************************************
365  * Direct buffer access API
366  ******************************************************************/
367 
377  virtual size_t getNumDirectAccessBuffers(Stream *stream);
378 
392  virtual int getDirectAccessBufferAddrs(Stream *stream, const size_t handle, void **buffs);
393 
414  virtual int acquireReadBuffer(
415  Stream *stream,
416  size_t &handle,
417  const void **buffs,
418  int &flags,
419  long long &timeNs,
420  const long timeoutUs = 100000);
421 
429  virtual void releaseReadBuffer(
430  Stream *stream,
431  const size_t handle);
432 
453  virtual int acquireWriteBuffer(
454  Stream *stream,
455  size_t &handle,
456  void **buffs,
457  const long timeoutUs = 100000);
458 
474  virtual void releaseWriteBuffer(
475  Stream *stream,
476  const size_t handle,
477  const size_t numElems,
478  int &flags,
479  const long long timeNs = 0);
480 
481  /*******************************************************************
482  * Antenna API
483  ******************************************************************/
484 
491  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
492 
499  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
500 
507  virtual std::string getAntenna(const int direction, const size_t channel) const;
508 
509  /*******************************************************************
510  * Frontend corrections API
511  ******************************************************************/
512 
519  virtual bool hasDCOffsetMode(const int direction, const size_t channel) const;
520 
527  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
528 
535  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
536 
543  virtual bool hasDCOffset(const int direction, const size_t channel) const;
544 
551  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
552 
559  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
560 
567  virtual bool hasIQBalance(const int direction, const size_t channel) const;
568 
575  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
576 
583  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
584 
585  /*******************************************************************
586  * Gain API
587  ******************************************************************/
588 
596  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
597 
604  virtual bool hasGainMode(const int direction, const size_t channel) const;
605 
612  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
613 
620  virtual bool getGainMode(const int direction, const size_t channel) const;
621 
630  virtual void setGain(const int direction, const size_t channel, const double value);
631 
639  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
640 
647  virtual double getGain(const int direction, const size_t channel) const;
648 
656  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
657 
664  virtual Range getGainRange(const int direction, const size_t channel) const;
665 
673  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
674 
675  /*******************************************************************
676  * Frequency API
677  ******************************************************************/
678 
706  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
707 
724  virtual void setFrequency(const int direction, const size_t channel, const std::string &name, const double frequency, const Kwargs &args = Kwargs());
725 
734  virtual double getFrequency(const int direction, const size_t channel) const;
735 
743  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
744 
752  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
753 
760  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
761 
769  virtual RangeList getFrequencyRange(const int direction, const size_t channel, const std::string &name) const;
770 
777  virtual ArgInfoList getFrequencyArgsInfo(const int direction, const size_t channel) const;
778 
779  /*******************************************************************
780  * Sample Rate API
781  ******************************************************************/
782 
789  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
790 
797  virtual double getSampleRate(const int direction, const size_t channel) const;
798 
805  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
806 
807  /*******************************************************************
808  * Bandwidth API
809  ******************************************************************/
810 
817  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
818 
825  virtual double getBandwidth(const int direction, const size_t channel) const;
826 
834  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
835 
842  virtual RangeList getBandwidthRange(const int direction, const size_t channel) const;
843 
844  /*******************************************************************
845  * Clocking API
846  ******************************************************************/
847 
852  virtual void setMasterClockRate(const double rate);
853 
858  virtual double getMasterClockRate(void) const;
859 
864  virtual RangeList getMasterClockRates(void) const;
865 
870  virtual std::vector<std::string> listClockSources(void) const;
871 
876  virtual void setClockSource(const std::string &source);
877 
882  virtual std::string getClockSource(void) const;
883 
884  /*******************************************************************
885  * Time API
886  ******************************************************************/
887 
892  virtual std::vector<std::string> listTimeSources(void) const;
893 
898  virtual void setTimeSource(const std::string &source);
899 
904  virtual std::string getTimeSource(void) const;
905 
911  virtual bool hasHardwareTime(const std::string &what = "") const;
912 
919  virtual long long getHardwareTime(const std::string &what = "") const;
920 
927  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
928 
937  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
938 
939  /*******************************************************************
940  * Sensor API
941  ******************************************************************/
942 
948  virtual std::vector<std::string> listSensors(void) const;
949 
956  virtual ArgInfo getSensorInfo(const std::string &name) const;
957 
965  virtual std::string readSensor(const std::string &name) const;
966 
974  virtual std::vector<std::string> listSensors(const int direction, const size_t channel) const;
975 
984  virtual ArgInfo getSensorInfo(const int direction, const size_t channel, const std::string &name) const;
985 
995  virtual std::string readSensor(const int direction, const size_t channel, const std::string &name) const;
996 
997  /*******************************************************************
998  * Register API
999  ******************************************************************/
1000 
1005  virtual std::vector<std::string> listRegisterInterfaces(void) const;
1006 
1015  virtual void writeRegister(const std::string &name, const unsigned addr, const unsigned value);
1016 
1023  virtual unsigned readRegister(const std::string &name, const unsigned addr) const;
1024 
1033  virtual void writeRegister(const unsigned addr, const unsigned value);
1034 
1041  virtual unsigned readRegister(const unsigned addr) const;
1042 
1043  /*******************************************************************
1044  * Settings API
1045  ******************************************************************/
1046 
1051  virtual ArgInfoList getSettingInfo(void) const;
1052 
1059  virtual void writeSetting(const std::string &key, const std::string &value);
1060 
1066  virtual std::string readSetting(const std::string &key) const;
1067 
1074  virtual ArgInfoList getSettingInfo(const int direction, const size_t channel) const;
1075 
1084  virtual void writeSetting(const int direction, const size_t channel, const std::string &key, const std::string &value);
1085 
1093  virtual std::string readSetting(const int direction, const size_t channel, const std::string &key) const;
1094 
1095  /*******************************************************************
1096  * GPIO API
1097  ******************************************************************/
1098 
1102  virtual std::vector<std::string> listGPIOBanks(void) const;
1103 
1109  virtual void writeGPIO(const std::string &bank, const unsigned value);
1110 
1117  virtual void writeGPIO(const std::string &bank, const unsigned value, const unsigned mask);
1118 
1124  virtual unsigned readGPIO(const std::string &bank) const;
1125 
1132  virtual void writeGPIODir(const std::string &bank, const unsigned dir);
1133 
1141  virtual void writeGPIODir(const std::string &bank, const unsigned dir, const unsigned mask);
1142 
1149  virtual unsigned readGPIODir(const std::string &bank) const;
1150 
1151  /*******************************************************************
1152  * I2C API
1153  ******************************************************************/
1154 
1162  virtual void writeI2C(const int addr, const std::string &data);
1163 
1172  virtual std::string readI2C(const int addr, const size_t numBytes);
1173 
1174  /*******************************************************************
1175  * SPI API
1176  ******************************************************************/
1177 
1192  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
1193 
1194  /*******************************************************************
1195  * UART API
1196  ******************************************************************/
1197 
1202  virtual std::vector<std::string> listUARTs(void) const;
1203 
1211  virtual void writeUART(const std::string &which, const std::string &data);
1212 
1221  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
1222 
1223 };
1224 
1225 };
Definition: Types.hpp:30
std::vector< Kwargs > KwargsList
Typedef for a list of key-word dictionaries.
Definition: Types.hpp:25
std::vector< ArgInfo > ArgInfoList
Definition: Types.hpp:112
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:55
Definition: Types.hpp:60
Definition: Device.hpp:22
Definition: Device.hpp:31
#define SOAPY_SDR_API
Definition: Config.h:41