SoapySDR  0.4.0-g7c716a29
Vendor and platform neutral SDR interface library
Device.hpp
Go to the documentation of this file.
1 
11 #pragma once
12 #include <SoapySDR/Config.hpp>
13 #include <SoapySDR/Types.hpp>
14 #include <SoapySDR/Constants.h>
15 #include <SoapySDR/Errors.h>
16 #include <vector>
17 #include <string>
18 #include <complex>
19 #include <cstddef> //size_t
20 
21 namespace SoapySDR
22 {
23 
25 class Stream;
26 
31 {
32 public:
33 
35  virtual ~Device(void);
36 
42  static KwargsList enumerate(const Kwargs &args = Kwargs());
43 
50  static KwargsList enumerate(const std::string &args);
51 
64  static Device *make(const Kwargs &args = Kwargs());
65 
78  static Device *make(const std::string &args);
79 
88  static void unmake(Device *device);
89 
90  /*******************************************************************
91  * Identification API
92  ******************************************************************/
93 
99  virtual std::string getDriverKey(void) const;
100 
106  virtual std::string getHardwareKey(void) const;
107 
115  virtual Kwargs getHardwareInfo(void) const;
116 
117  /*******************************************************************
118  * Channels API
119  ******************************************************************/
120 
127  virtual void setFrontendMapping(const int direction, const std::string &mapping);
128 
134  virtual std::string getFrontendMapping(const int direction) const;
135 
139  virtual size_t getNumChannels(const int direction) const;
140 
147  virtual bool getFullDuplex(const int direction, const size_t channel) const;
148 
149  /*******************************************************************
150  * Stream API
151  ******************************************************************/
152 
159  virtual std::vector<std::string> getStreamFormats(const int direction, const size_t channel) const;
160 
170  virtual std::string getNativeStreamFormat(const int direction, const size_t channel, double &fullScale) const;
171 
178  virtual ArgInfoList getStreamArgsInfo(const int direction, const size_t channel) const;
179 
210  virtual Stream *setupStream(
211  const int direction,
212  const std::string &format,
213  const std::vector<size_t> &channels = std::vector<size_t>(),
214  const Kwargs &args = Kwargs());
215 
221  virtual void closeStream(Stream *stream);
222 
232  virtual size_t getStreamMTU(Stream *stream) const;
233 
251  virtual int activateStream(
252  Stream *stream,
253  const int flags = 0,
254  const long long timeNs = 0,
255  const size_t numElems = 0);
256 
271  virtual int deactivateStream(
272  Stream *stream,
273  const int flags = 0,
274  const long long timeNs = 0);
275 
294  virtual int readStream(
295  Stream *stream,
296  void * const *buffs,
297  const size_t numElems,
298  int &flags,
299  long long &timeNs,
300  const long timeoutUs = 100000);
301 
315  virtual int writeStream(
316  Stream *stream,
317  const void * const *buffs,
318  const size_t numElems,
319  int &flags,
320  const long long timeNs = 0,
321  const long timeoutUs = 100000);
322 
335  virtual int readStreamStatus(
336  Stream *stream,
337  size_t &chanMask,
338  int &flags,
339  long long &timeNs,
340  const long timeoutUs = 100000);
341 
342  /*******************************************************************
343  * Direct buffer access API
344  ******************************************************************/
345 
355  virtual size_t getNumDirectAccessBuffers(Stream *stream);
356 
370  virtual int getDirectAccessBufferAddrs(Stream *stream, const size_t handle, void **buffs);
371 
392  virtual int acquireReadBuffer(
393  Stream *stream,
394  size_t &handle,
395  const void **buffs,
396  int &flags,
397  long long &timeNs,
398  const long timeoutUs = 100000);
399 
407  virtual void releaseReadBuffer(
408  Stream *stream,
409  const size_t handle);
410 
431  virtual int acquireWriteBuffer(
432  Stream *stream,
433  size_t &handle,
434  void **buffs,
435  const long timeoutUs = 100000);
436 
452  virtual void releaseWriteBuffer(
453  Stream *stream,
454  const size_t handle,
455  const size_t numElems,
456  int &flags,
457  const long long timeNs = 0);
458 
459  /*******************************************************************
460  * Antenna API
461  ******************************************************************/
462 
469  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
470 
477  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
478 
485  virtual std::string getAntenna(const int direction, const size_t channel) const;
486 
487  /*******************************************************************
488  * Frontend corrections API
489  ******************************************************************/
490 
497  virtual bool hasDCOffsetMode(const int direction, const size_t channel) const;
498 
505  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
506 
513  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
514 
521  virtual bool hasDCOffset(const int direction, const size_t channel) const;
522 
529  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
530 
537  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
538 
545  virtual bool hasIQBalance(const int direction, const size_t channel) const;
546 
553  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
554 
561  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
562 
563  /*******************************************************************
564  * Gain API
565  ******************************************************************/
566 
574  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
575 
582  virtual bool hasGainMode(const int direction, const size_t channel) const;
583 
590  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
591 
598  virtual bool getGainMode(const int direction, const size_t channel) const;
599 
608  virtual void setGain(const int direction, const size_t channel, const double value);
609 
617  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
618 
625  virtual double getGain(const int direction, const size_t channel) const;
626 
634  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
635 
642  virtual Range getGainRange(const int direction, const size_t channel) const;
643 
651  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
652 
653  /*******************************************************************
654  * Frequency API
655  ******************************************************************/
656 
684  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
685 
702  virtual void setFrequency(const int direction, const size_t channel, const std::string &name, const double frequency, const Kwargs &args = Kwargs());
703 
712  virtual double getFrequency(const int direction, const size_t channel) const;
713 
721  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
722 
730  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
731 
738  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
739 
747  virtual RangeList getFrequencyRange(const int direction, const size_t channel, const std::string &name) const;
748 
755  virtual ArgInfoList getFrequencyArgsInfo(const int direction, const size_t channel) const;
756 
757  /*******************************************************************
758  * Sample Rate API
759  ******************************************************************/
760 
767  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
768 
775  virtual double getSampleRate(const int direction, const size_t channel) const;
776 
783  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
784 
791  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
792 
799  virtual double getBandwidth(const int direction, const size_t channel) const;
800 
807  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
808 
809  /*******************************************************************
810  * Clocking API
811  ******************************************************************/
812 
817  virtual void setMasterClockRate(const double rate);
818 
823  virtual double getMasterClockRate(void) const;
824 
829  virtual RangeList getMasterClockRates(void) const;
830 
835  virtual std::vector<std::string> listClockSources(void) const;
836 
841  virtual void setClockSource(const std::string &source);
842 
847  virtual std::string getClockSource(void) const;
848 
853  virtual std::vector<std::string> listTimeSources(void) const;
854 
859  virtual void setTimeSource(const std::string &source);
860 
865  virtual std::string getTimeSource(void) const;
866 
867  /*******************************************************************
868  * Time API
869  ******************************************************************/
870 
876  virtual bool hasHardwareTime(const std::string &what = "") const;
877 
884  virtual long long getHardwareTime(const std::string &what = "") const;
885 
892  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
893 
901  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
902 
903  /*******************************************************************
904  * Sensor API
905  ******************************************************************/
906 
912  virtual std::vector<std::string> listSensors(void) const;
913 
920  virtual ArgInfo getSensorInfo(const std::string &name) const;
921 
929  virtual std::string readSensor(const std::string &name) const;
930 
938  virtual std::vector<std::string> listSensors(const int direction, const size_t channel) const;
939 
948  virtual ArgInfo getSensorInfo(const int direction, const size_t channel, const std::string &name) const;
949 
959  virtual std::string readSensor(const int direction, const size_t channel, const std::string &name) const;
960 
961  /*******************************************************************
962  * Register API
963  ******************************************************************/
964 
972  virtual void writeRegister(const unsigned addr, const unsigned value);
973 
979  virtual unsigned readRegister(const unsigned addr) const;
980 
981  /*******************************************************************
982  * Settings API
983  ******************************************************************/
984 
989  virtual ArgInfoList getSettingInfo(void) const;
990 
997  virtual void writeSetting(const std::string &key, const std::string &value);
998 
1004  virtual std::string readSetting(const std::string &key) const;
1005 
1006  /*******************************************************************
1007  * GPIO API
1008  ******************************************************************/
1009 
1013  virtual std::vector<std::string> listGPIOBanks(void) const;
1014 
1020  virtual void writeGPIO(const std::string &bank, const unsigned value);
1021 
1028  virtual void writeGPIO(const std::string &bank, const unsigned value, const unsigned mask);
1029 
1035  virtual unsigned readGPIO(const std::string &bank) const;
1036 
1043  virtual void writeGPIODir(const std::string &bank, const unsigned dir);
1044 
1052  virtual void writeGPIODir(const std::string &bank, const unsigned dir, const unsigned mask);
1053 
1060  virtual unsigned readGPIODir(const std::string &bank) const;
1061 
1062  /*******************************************************************
1063  * I2C API
1064  ******************************************************************/
1065 
1073  virtual void writeI2C(const int addr, const std::string &data);
1074 
1083  virtual std::string readI2C(const int addr, const size_t numBytes);
1084 
1085  /*******************************************************************
1086  * SPI API
1087  ******************************************************************/
1088 
1103  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
1104 
1105  /*******************************************************************
1106  * UART API
1107  ******************************************************************/
1108 
1113  virtual std::vector<std::string> listUARTs(void) const;
1114 
1122  virtual void writeUART(const std::string &which, const std::string &data);
1123 
1132  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
1133 
1134 };
1135 
1136 };
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:21
Definition: Device.hpp:30
#define SOAPY_SDR_API
Definition: Config.h:41