SoapySDR  0.1.0
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 
210  virtual int activateStream(
211  Stream *stream,
212  const int flags = 0,
213  const long long timeNs = 0,
214  const size_t numElems = 0);
215 
230  virtual int deactivateStream(
231  Stream *stream,
232  const int flags = 0,
233  const long long timeNs = 0);
234 
248  virtual int readStream(
249  Stream *stream,
250  void * const *buffs,
251  const size_t numElems,
252  int &flags,
253  long long &timeNs,
254  const long timeoutUs = 100000);
255 
269  virtual int writeStream(
270  Stream *stream,
271  const void * const *buffs,
272  const size_t numElems,
273  int &flags,
274  const long long timeNs = 0,
275  const long timeoutUs = 100000);
276 
277  /*******************************************************************
278  * Antenna API
279  ******************************************************************/
280 
287  virtual std::vector<std::string> listAntennas(const int direction, const size_t channel) const;
288 
295  virtual void setAntenna(const int direction, const size_t channel, const std::string &name);
296 
303  virtual std::string getAntenna(const int direction, const size_t channel) const;
304 
305  /*******************************************************************
306  * Frontend corrections API
307  ******************************************************************/
308 
315  virtual void setDCOffsetMode(const int direction, const size_t channel, const bool automatic);
316 
323  virtual bool getDCOffsetMode(const int direction, const size_t channel) const;
324 
331  virtual void setDCOffset(const int direction, const size_t channel, const std::complex<double> &offset);
332 
339  virtual std::complex<double> getDCOffset(const int direction, const size_t channel) const;
340 
347  virtual void setIQBalance(const int direction, const size_t channel, const std::complex<double> &balance);
348 
355  virtual std::complex<double> getIQBalance(const int direction, const size_t channel) const;
356 
357  /*******************************************************************
358  * Gain API
359  ******************************************************************/
360 
367  virtual std::vector<std::string> listGains(const int direction, const size_t channel) const;
368 
375  virtual void setGainMode(const int direction, const size_t channel, const bool automatic);
376 
383  virtual bool getGainMode(const int direction, const size_t channel) const;
384 
393  virtual void setGain(const int direction, const size_t channel, const double value);
394 
402  virtual void setGain(const int direction, const size_t channel, const std::string &name, const double value);
403 
410  virtual double getGain(const int direction, const size_t channel) const;
411 
419  virtual double getGain(const int direction, const size_t channel, const std::string &name) const;
420 
427  virtual Range getGainRange(const int direction, const size_t channel) const;
428 
436  virtual Range getGainRange(const int direction, const size_t channel, const std::string &name) const;
437 
438  /*******************************************************************
439  * Frequency API
440  ******************************************************************/
441 
454  virtual void setFrequency(const int direction, const size_t channel, const double frequency, const Kwargs &args = Kwargs());
455 
462  virtual double getFrequency(const int direction, const size_t channel) const;
463 
475  virtual double getFrequency(const int direction, const size_t channel, const std::string &name) const;
476 
483  virtual std::vector<std::string> listFrequencies(const int direction, const size_t channel) const;
484 
491  virtual RangeList getFrequencyRange(const int direction, const size_t channel) const;
492 
493  /*******************************************************************
494  * Sample Rate API
495  ******************************************************************/
496 
503  virtual void setSampleRate(const int direction, const size_t channel, const double rate);
504 
511  virtual double getSampleRate(const int direction, const size_t channel) const;
512 
519  virtual std::vector<double> listSampleRates(const int direction, const size_t channel) const;
520 
527  virtual void setBandwidth(const int direction, const size_t channel, const double bw);
528 
535  virtual double getBandwidth(const int direction, const size_t channel) const;
536 
543  virtual std::vector<double> listBandwidths(const int direction, const size_t channel) const;
544 
545  /*******************************************************************
546  * Clocking API
547  ******************************************************************/
548 
553  virtual void setMasterClockRate(const double rate);
554 
559  virtual double getMasterClockRate(void) const;
560 
565  virtual std::vector<std::string> listClockSources(void) const;
566 
571  virtual void setClockSource(const std::string &source);
572 
577  virtual std::string getClockSource(void) const;
578 
583  virtual std::vector<std::string> listTimeSources(void) const;
584 
589  virtual void setTimeSource(const std::string &source);
590 
595  virtual std::string getTimeSource(void) const;
596 
597  /*******************************************************************
598  * Time API
599  ******************************************************************/
600 
606  virtual bool hasHardwareTime(const std::string &what = "") const;
607 
614  virtual long long getHardwareTime(const std::string &what = "") const;
615 
622  virtual void setHardwareTime(const long long timeNs, const std::string &what = "");
623 
631  virtual void setCommandTime(const long long timeNs, const std::string &what = "");
632 
633  /*******************************************************************
634  * Sensor API
635  ******************************************************************/
636 
642  virtual std::vector<std::string> listSensors(void) const;
643 
651  virtual std::string readSensor(const std::string &name) const;
652 
653  /*******************************************************************
654  * Register API
655  ******************************************************************/
656 
664  virtual void writeRegister(const unsigned addr, const unsigned value);
665 
671  virtual unsigned readRegister(const unsigned addr) const;
672 
673  /*******************************************************************
674  * Settings API
675  ******************************************************************/
676 
683  virtual void writeSetting(const std::string &key, const std::string &value);
684 
690  virtual std::string readSetting(const std::string &key) const;
691 
692  /*******************************************************************
693  * GPIO API
694  ******************************************************************/
695 
699  virtual std::vector<std::string> listGPIOBanks(void) const;
700 
706  virtual void writeGPIO(const std::string &bank, const unsigned value);
707 
713  virtual unsigned readGPIO(const std::string &bank) const;
714 
715  /*******************************************************************
716  * I2C API
717  ******************************************************************/
718 
726  virtual void writeI2C(const int addr, const std::string &data);
727 
736  virtual std::string readI2C(const int addr, const size_t numBytes);
737 
738  /*******************************************************************
739  * SPI API
740  ******************************************************************/
741 
756  virtual unsigned transactSPI(const int addr, const unsigned data, const size_t numBits);
757 
758  /*******************************************************************
759  * UART API
760  ******************************************************************/
761 
766  virtual std::vector<std::string> listUARTs(void) const;
767 
775  virtual void writeUART(const std::string &which, const std::string &data);
776 
785  virtual std::string readUART(const std::string &which, const long timeoutUs = 100000) const;
786 
787 };
788 
789 };
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