SoapySDR  0.3.0-g02fc7af6
Vendor and platform neutral SDR interface library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
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 std::vector<Kwargs> enumerate(const Kwargs &args = Kwargs());
43 
50  static std::vector<Kwargs> 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 
181  virtual Stream *setupStream(
182  const int direction,
183  const std::string &format,
184  const std::vector<size_t> &channels = std::vector<size_t>(),
185  const Kwargs &args = Kwargs());
186 
192  virtual void closeStream(Stream *stream);
193 
203  virtual size_t getStreamMTU(Stream *stream) const;
204 
222  virtual int activateStream(
223  Stream *stream,
224  const int flags = 0,
225  const long long timeNs = 0,
226  const size_t numElems = 0);
227 
242  virtual int deactivateStream(
243  Stream *stream,
244  const int flags = 0,
245  const long long timeNs = 0);
246 
260  virtual int readStream(
261  Stream *stream,
262  void * const *buffs,
263  const size_t numElems,
264  int &flags,
265  long long &timeNs,
266  const long timeoutUs = 100000);
267 
281  virtual int writeStream(
282  Stream *stream,
283  const void * const *buffs,
284  const size_t numElems,
285  int &flags,
286  const long long timeNs = 0,
287  const long timeoutUs = 100000);
288 
301  virtual int readStreamStatus(
302  Stream *stream,
303  size_t &chanMask,
304  int &flags,
305  long long &timeNs,
306  const long timeoutUs = 100000);
307 
308  /*******************************************************************
309  * Direct buffer access API
310  ******************************************************************/
311 
321  virtual size_t getNumDirectAccessBuffers(Stream *stream);
322 
336  virtual int getDirectAccessBufferAddrs(Stream *stream, const size_t handle, void **buffs);
337 
358  virtual int acquireReadBuffer(
359  Stream *stream,
360  size_t &handle,
361  const void **buffs,
362  int &flags,
363  long long &timeNs,
364  const long timeoutUs = 100000);
365 
373  virtual void releaseReadBuffer(
374  Stream *stream,
375  const size_t handle);
376 
397  virtual int acquireWriteBuffer(
398  Stream *stream,
399  size_t &handle,
400  void **buffs,
401  const long timeoutUs = 100000);
402 
418  virtual void releaseWriteBuffer(
419  Stream *stream,
420  const size_t handle,
421  const size_t numElems,
422  int &flags,
423  const long long timeNs = 0);
424 
425  /*******************************************************************
426  * Antenna API
427  ******************************************************************/
428 
435  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
436 
443  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
444 
451  virtual std::string getAntenna(const int direction, const size_t channel) const;
452 
453  /*******************************************************************
454  * Frontend corrections API
455  ******************************************************************/
456 
463  virtual bool hasDCOffsetMode(const int direction, const size_t channel) const;
464 
471  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
472 
479  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
480 
487  virtual bool hasDCOffset(const int direction, const size_t channel) const;
488 
495  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
496 
503  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
504 
511  virtual bool hasIQBalance(const int direction, const size_t channel) const;
512 
519  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
520 
527  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
528 
529  /*******************************************************************
530  * Gain API
531  ******************************************************************/
532 
540  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
541 
548  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
549 
556  virtual bool getGainMode(const int direction, const size_t channel) const;
557 
566  virtual void setGain(const int direction, const size_t channel, const double value);
567 
575  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
576 
583  virtual double getGain(const int direction, const size_t channel) const;
584 
592  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
593 
600  virtual Range getGainRange(const int direction, const size_t channel) const;
601 
609  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
610 
611  /*******************************************************************
612  * Frequency API
613  ******************************************************************/
614 
642  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
643 
660  virtual void setFrequency(const int direction, const size_t channel, const std::string &name, const double frequency, const Kwargs &args = Kwargs());
661 
670  virtual double getFrequency(const int direction, const size_t channel) const;
671 
679  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
680 
688  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
689 
696  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
697 
705  virtual RangeList getFrequencyRange(const int direction, const size_t channel, const std::string &name) const;
706 
707  /*******************************************************************
708  * Sample Rate API
709  ******************************************************************/
710 
717  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
718 
725  virtual double getSampleRate(const int direction, const size_t channel) const;
726 
733  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
734 
741  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
742 
749  virtual double getBandwidth(const int direction, const size_t channel) const;
750 
757  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
758 
759  /*******************************************************************
760  * Clocking API
761  ******************************************************************/
762 
767  virtual void setMasterClockRate(const double rate);
768 
773  virtual double getMasterClockRate(void) const;
774 
779  virtual std::vector<std::string> listClockSources(void) const;
780 
785  virtual void setClockSource(const std::string &source);
786 
791  virtual std::string getClockSource(void) const;
792 
797  virtual std::vector<std::string> listTimeSources(void) const;
798 
803  virtual void setTimeSource(const std::string &source);
804 
809  virtual std::string getTimeSource(void) const;
810 
811  /*******************************************************************
812  * Time API
813  ******************************************************************/
814 
820  virtual bool hasHardwareTime(const std::string &what = "") const;
821 
828  virtual long long getHardwareTime(const std::string &what = "") const;
829 
836  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
837 
845  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
846 
847  /*******************************************************************
848  * Sensor API
849  ******************************************************************/
850 
856  virtual std::vector<std::string> listSensors(void) const;
857 
865  virtual std::string readSensor(const std::string &name) const;
866 
874  virtual std::vector<std::string> listSensors(const int direction, const size_t channel) const;
875 
885  virtual std::string readSensor(const int direction, const size_t channel, const std::string &name) const;
886 
887  /*******************************************************************
888  * Register API
889  ******************************************************************/
890 
898  virtual void writeRegister(const unsigned addr, const unsigned value);
899 
905  virtual unsigned readRegister(const unsigned addr) const;
906 
907  /*******************************************************************
908  * Settings API
909  ******************************************************************/
910 
917  virtual void writeSetting(const std::string &key, const std::string &value);
918 
924  virtual std::string readSetting(const std::string &key) const;
925 
926  /*******************************************************************
927  * GPIO API
928  ******************************************************************/
929 
933  virtual std::vector<std::string> listGPIOBanks(void) const;
934 
940  virtual void writeGPIO(const std::string &bank, const unsigned value);
941 
948  virtual void writeGPIO(const std::string &bank, const unsigned value, const unsigned mask);
949 
955  virtual unsigned readGPIO(const std::string &bank) const;
956 
963  virtual void writeGPIODir(const std::string &bank, const unsigned dir);
964 
972  virtual void writeGPIODir(const std::string &bank, const unsigned dir, const unsigned mask);
973 
980  virtual unsigned readGPIODir(const std::string &bank) const;
981 
982  /*******************************************************************
983  * I2C API
984  ******************************************************************/
985 
993  virtual void writeI2C(const int addr, const std::string &data);
994 
1003  virtual std::string readI2C(const int addr, const size_t numBytes);
1004 
1005  /*******************************************************************
1006  * SPI API
1007  ******************************************************************/
1008 
1023  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
1024 
1025  /*******************************************************************
1026  * UART API
1027  ******************************************************************/
1028 
1033  virtual std::vector<std::string> listUARTs(void) const;
1034 
1042  virtual void writeUART(const std::string &which, const std::string &data);
1043 
1052  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
1053 
1054 };
1055 
1056 };
Definition: Types.hpp:27
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:52
Definition: Device.hpp:30
#define SOAPY_SDR_API
Definition: Config.h:41