libm2k
m2kanalogout.hpp
1 /*
2  * Copyright (c) 2019 Analog Devices Inc.
3  *
4  * This file is part of libm2k
5  * (see http://www.github.com/analogdevicesinc/libm2k).
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU Lesser General Public License as published by
9  * the Free Software Foundation, either version 2.1 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  *
20  */
21 
22 #ifndef M2KANALOGOUT_HPP
23 #define M2KANALOGOUT_HPP
24 
25 #include <libm2k/m2kglobal.hpp>
26 #include <libm2k/enums.hpp>
27 #include <vector>
28 #include <memory>
29 #include <map>
30 
31 extern "C" {
32  struct iio_context;
33 }
34 
35 namespace libm2k {
36 
41 namespace analog {
42 
43 
51 class LIBM2K_API M2kAnalogOut
52 {
53 public:
57  virtual ~M2kAnalogOut() {}
58 
59 
63  virtual void reset() = 0;
64 
65 
66 
71  virtual std::vector<int> getOversamplingRatio() = 0;
72 
73 
80  virtual int getOversamplingRatio(unsigned int chn) = 0;
81 
88  virtual std::vector<int> setOversamplingRatio(std::vector<int> oversampling_ratio) = 0;
89 
90 
97  virtual int setOversamplingRatio(unsigned int chn, int oversampling_ratio) = 0;
98 
103  virtual std::vector<double> getSampleRate() = 0;
104 
105 
112  virtual double getSampleRate(unsigned int chn) = 0;
113 
114 
120  virtual std::vector<double> getAvailableSampleRates(unsigned int chn) = 0;
121 
122 
129  virtual std::vector<double> setSampleRate(std::vector<double> samplerates) = 0;
130 
131 
139  virtual double setSampleRate(unsigned int chn, double samplerate) = 0;
140 
141 
145  virtual void setSyncedDma(bool en, int chn = -1) = 0;
146 
150  virtual bool getSyncedDma(int chn = -1) = 0;
151 
155  virtual void setSyncedStartDma(bool en, int chn = -1) = 0;
156 
160  virtual bool getSyncedStartDma(int chn = -1) = 0;
161 
169  virtual void setCyclic(bool en) = 0;
170 
171 
180  virtual void setCyclic(unsigned int chn, bool en) = 0;
181 
182 
189  virtual bool getCyclic(unsigned int chn) = 0;
190 
191 
200  virtual double getScalingFactor(unsigned int chn) = 0;
201 
202 
209  virtual double getFilterCompensation(double samplerate) = 0;
210 
211 
226  virtual void pushBytes(unsigned int chnIdx, double *data, unsigned int nb_samples) = 0;
227 
228 
243  virtual void pushRawBytes(unsigned int chnIdx, short *data, unsigned int nb_samples) = 0;
244 
245 
259  virtual void pushInterleaved(double *data, unsigned int nb_channels, unsigned int nb_samples) = 0;
260 
261 
275  virtual void pushRawInterleaved(short *data, unsigned int nb_channels, unsigned int nb_samples) = 0;
276 
277 
291  virtual void push(unsigned int chnIdx, std::vector<double> const &data) = 0;
292 
293 
307  virtual void pushRaw(unsigned int chnIdx, std::vector<short> const &data) = 0;
308 
309 
322  virtual void push(std::vector<std::vector<double>> const &data) = 0;
323 
324 
337  virtual void pushRaw(std::vector<std::vector<short>> const &data) = 0;
338 
339 
346  virtual void stop() = 0;
347 
348 
357  virtual void stop(unsigned int chn) = 0;
358 
359 
364  virtual void cancelBuffer() = 0;
365 
366 
372  virtual void cancelBuffer(unsigned int chn) = 0;
373 
382  virtual void enableChannel(unsigned int chnIdx, bool enable) = 0;
383 
384 
393  virtual bool isChannelEnabled(unsigned int chnIdx) = 0;
394 
395 
408  virtual bool isPushDone(unsigned int chnIdx) const = 0;
409 
410 
416  virtual void setKernelBuffersCount(unsigned int chnIdx, unsigned int count) = 0;
417 
423  virtual unsigned int getKernelBuffersCount(unsigned int chnIdx) const = 0;
424 
425 
432  virtual short convertVoltsToRaw(unsigned int channel, double voltage) = 0;
433 
434 
441  virtual double convertRawToVolts(unsigned int channel, short raw) = 0;
442 
443 
449  virtual struct IIO_OBJECTS getIioObjects() = 0;
450 
451 
456  virtual unsigned int getNbChannels() = 0;
457 
458 
464  virtual std::string getChannelName(unsigned int channel) = 0;
465 
471  virtual double getMaximumSamplerate(unsigned int chn_idx) = 0;
472 };
473 }
474 }
475 
476 
477 #endif //M2KANALOGOUT_HPP
Controls the analogical output compound.
Definition: m2kanalogout.hpp:51
Generic M2K enumerations.