SoapySDR  0.2.2-gdd50b2fc
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 <vector>
16 #include <string>
17 #include <complex>
18 #include <cstddef> //size_t
19 
20 namespace SoapySDR
21 {
22 
24 class Stream;
25 
30 {
31 public:
32 
34  virtual ~Device(void);
35 
41  static std::vector<Kwargs> enumerate(const Kwargs &args = Kwargs());
42 
49  static std::vector<Kwargs> enumerate(const std::string &args);
50 
63  static Device *make(const Kwargs &args = Kwargs());
64 
77  static Device *make(const std::string &args);
78 
87  static void unmake(Device *device);
88 
89  /*******************************************************************
90  * Identification API
91  ******************************************************************/
92 
98  virtual std::string getDriverKey(void) const;
99 
105  virtual std::string getHardwareKey(void) const;
106 
114  virtual Kwargs getHardwareInfo(void) const;
115 
116  /*******************************************************************
117  * Channels API
118  ******************************************************************/
119 
126  virtual void setFrontendMapping(const int direction, const std::string &mapping);
127 
133  virtual std::string getFrontendMapping(const int direction) const;
134 
138  virtual size_t getNumChannels(const int direction) const;
139 
146  virtual bool getFullDuplex(const int direction, const size_t channel) const;
147 
148  /*******************************************************************
149  * Stream API
150  ******************************************************************/
151 
180  virtual Stream *setupStream(
181  const int direction,
182  const std::string &format,
183  const std::vector<size_t> &channels = std::vector<size_t>(),
184  const Kwargs &args = Kwargs());
185 
191  virtual void closeStream(Stream *stream);
192 
202  virtual size_t getStreamMTU(Stream *stream) const;
203 
221  virtual int activateStream(
222  Stream *stream,
223  const int flags = 0,
224  const long long timeNs = 0,
225  const size_t numElems = 0);
226 
241  virtual int deactivateStream(
242  Stream *stream,
243  const int flags = 0,
244  const long long timeNs = 0);
245 
259  virtual int readStream(
260  Stream *stream,
261  void * const *buffs,
262  const size_t numElems,
263  int &flags,
264  long long &timeNs,
265  const long timeoutUs = 100000);
266 
280  virtual int writeStream(
281  Stream *stream,
282  const void * const *buffs,
283  const size_t numElems,
284  int &flags,
285  const long long timeNs = 0,
286  const long timeoutUs = 100000);
287 
300  virtual int readStreamStatus(
301  Stream *stream,
302  size_t &chanMask,
303  int &flags,
304  long long &timeNs,
305  const long timeoutUs = 100000);
306 
307  /*******************************************************************
308  * Direct buffer access API
309  ******************************************************************/
310 
320  virtual size_t getNumDirectAccessBuffers(Stream *stream);
321 
335  virtual int getDirectAccessBufferAddrs(Stream *stream, const size_t handle, void **buffs);
336 
357  virtual int acquireReadBuffer(
358  Stream *stream,
359  size_t &handle,
360  const void **buffs,
361  int &flags,
362  long long &timeNs,
363  const long timeoutUs = 100000);
364 
372  virtual void releaseReadBuffer(
373  Stream *stream,
374  const size_t handle);
375 
396  virtual int acquireWriteBuffer(
397  Stream *stream,
398  size_t &handle,
399  void **buffs,
400  const long timeoutUs = 100000);
401 
417  virtual void releaseWriteBuffer(
418  Stream *stream,
419  const size_t handle,
420  const size_t numElems,
421  int &flags,
422  const long long timeNs = 0);
423 
424  /*******************************************************************
425  * Antenna API
426  ******************************************************************/
427 
434  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
435 
442  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
443 
450  virtual std::string getAntenna(const int direction, const size_t channel) const;
451 
452  /*******************************************************************
453  * Frontend corrections API
454  ******************************************************************/
455 
462  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
463 
470  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
471 
478  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
479 
486  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
487 
494  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
495 
502  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
503 
504  /*******************************************************************
505  * Gain API
506  ******************************************************************/
507 
515  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
516 
523  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
524 
531  virtual bool getGainMode(const int direction, const size_t channel) const;
532 
541  virtual void setGain(const int direction, const size_t channel, const double value);
542 
550  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
551 
558  virtual double getGain(const int direction, const size_t channel) const;
559 
567  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
568 
575  virtual Range getGainRange(const int direction, const size_t channel) const;
576 
584  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
585 
586  /*******************************************************************
587  * Frequency API
588  ******************************************************************/
589 
617  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
618 
635  virtual void setFrequency(const int direction, const size_t channel, const std::string &name, const double frequency, const Kwargs &args = Kwargs());
636 
645  virtual double getFrequency(const int direction, const size_t channel) const;
646 
654  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
655 
663  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
664 
671  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
672 
680  virtual RangeList getFrequencyRange(const int direction, const size_t channel, const std::string &name) const;
681 
682  /*******************************************************************
683  * Sample Rate API
684  ******************************************************************/
685 
692  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
693 
700  virtual double getSampleRate(const int direction, const size_t channel) const;
701 
708  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
709 
716  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
717 
724  virtual double getBandwidth(const int direction, const size_t channel) const;
725 
732  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
733 
734  /*******************************************************************
735  * Clocking API
736  ******************************************************************/
737 
742  virtual void setMasterClockRate(const double rate);
743 
748  virtual double getMasterClockRate(void) const;
749 
754  virtual std::vector<std::string> listClockSources(void) const;
755 
760  virtual void setClockSource(const std::string &source);
761 
766  virtual std::string getClockSource(void) const;
767 
772  virtual std::vector<std::string> listTimeSources(void) const;
773 
778  virtual void setTimeSource(const std::string &source);
779 
784  virtual std::string getTimeSource(void) const;
785 
786  /*******************************************************************
787  * Time API
788  ******************************************************************/
789 
795  virtual bool hasHardwareTime(const std::string &what = "") const;
796 
803  virtual long long getHardwareTime(const std::string &what = "") const;
804 
811  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
812 
820  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
821 
822  /*******************************************************************
823  * Sensor API
824  ******************************************************************/
825 
831  virtual std::vector<std::string> listSensors(void) const;
832 
840  virtual std::string readSensor(const std::string &name) const;
841 
842  /*******************************************************************
843  * Register API
844  ******************************************************************/
845 
853  virtual void writeRegister(const unsigned addr, const unsigned value);
854 
860  virtual unsigned readRegister(const unsigned addr) const;
861 
862  /*******************************************************************
863  * Settings API
864  ******************************************************************/
865 
872  virtual void writeSetting(const std::string &key, const std::string &value);
873 
879  virtual std::string readSetting(const std::string &key) const;
880 
881  /*******************************************************************
882  * GPIO API
883  ******************************************************************/
884 
888  virtual std::vector<std::string> listGPIOBanks(void) const;
889 
895  virtual void writeGPIO(const std::string &bank, const unsigned value);
896 
902  virtual unsigned readGPIO(const std::string &bank) const;
903 
904  /*******************************************************************
905  * I2C API
906  ******************************************************************/
907 
915  virtual void writeI2C(const int addr, const std::string &data);
916 
925  virtual std::string readI2C(const int addr, const size_t numBytes);
926 
927  /*******************************************************************
928  * SPI API
929  ******************************************************************/
930 
945  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
946 
947  /*******************************************************************
948  * UART API
949  ******************************************************************/
950 
955  virtual std::vector<std::string> listUARTs(void) const;
956 
964  virtual void writeUART(const std::string &which, const std::string &data);
965 
974  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
975 
976 };
977 
978 };
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:29
#define SOAPY_SDR_API
Definition: Config.h:41