2022-10-31 14:07:36 +03:00
|
|
|
#include<fstream>
|
|
|
|
#include<iostream>
|
|
|
|
#include<string>
|
|
|
|
|
|
|
|
class Device {
|
|
|
|
public:
|
|
|
|
Device(std::string path_name): root_path("/dev/" + path_name) {
|
|
|
|
std::string idn = query("*IDN?");
|
|
|
|
idn.erase(0, idn.find(',') + 1);
|
|
|
|
idn.erase(idn.find(','));
|
|
|
|
|
|
|
|
name = idn;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void command(std::string comm) {
|
|
|
|
std::ofstream out;
|
|
|
|
out.open(root_path);
|
|
|
|
|
|
|
|
if(!out.is_open())
|
|
|
|
std::cerr << "**ERROR** file is not open to output." << std::endl;
|
|
|
|
else {
|
|
|
|
out << comm;
|
|
|
|
out.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
std::string query(std::string comm) {
|
|
|
|
command(comm);
|
|
|
|
|
|
|
|
std::string buffer;
|
|
|
|
std::ifstream in;
|
|
|
|
in.open(root_path);
|
|
|
|
|
|
|
|
if(!in.is_open())
|
|
|
|
std::cerr << "**ERROR** file is not open to input." << std::endl;
|
|
|
|
else {
|
|
|
|
std::getline(in, buffer);
|
|
|
|
in.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
return buffer;
|
|
|
|
}
|
|
|
|
|
|
|
|
public:
|
|
|
|
std::string name;
|
|
|
|
std::string root_path;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class Generator: public Device {
|
|
|
|
public:
|
2022-11-01 14:52:57 +03:00
|
|
|
Generator(std::string path_name): Device(path_name), m_channel("C1") { }
|
|
|
|
|
|
|
|
void set_channel(size_t channel) {
|
|
|
|
if (channel == 1 || channel == 2) m_channel = "C" + std::to_string(channel);
|
|
|
|
else std::cerr << "Invalid channel" << std::endl;
|
|
|
|
}
|
2022-10-31 14:07:36 +03:00
|
|
|
|
|
|
|
void buzz() {
|
|
|
|
command("BUZZ ON");
|
|
|
|
}
|
|
|
|
|
2022-11-01 14:52:57 +03:00
|
|
|
void set_waveform(std::string waveform) {
|
|
|
|
m_waveform = waveform;
|
|
|
|
command(m_channel + ":BSWV WVTP," + waveform);
|
2022-10-31 14:07:36 +03:00
|
|
|
}
|
|
|
|
|
2022-11-01 14:52:57 +03:00
|
|
|
void set_frequency(double frequency) {
|
|
|
|
m_frequency = frequency;
|
|
|
|
command(m_channel + ":BSWV FRQ," + std::to_string(frequency));
|
2022-10-31 14:07:36 +03:00
|
|
|
}
|
|
|
|
|
2022-11-01 14:52:57 +03:00
|
|
|
void set_period(double period) {
|
|
|
|
command(m_channel + ":BSWV PERI," + std::to_string(period));
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_amplitude(double amplitude) {
|
|
|
|
command(m_channel + ":BSWV AMP," + std::to_string(amplitude));
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_offset(double offset) {
|
|
|
|
command(m_channel + ":BSWV OFST," + std::to_string(offset));
|
|
|
|
}
|
|
|
|
|
|
|
|
void set_phase(double phase) {
|
|
|
|
command(m_channel + ":BSWV PHSE," + std::to_string(phase));
|
|
|
|
}
|
|
|
|
|
|
|
|
void update();
|
|
|
|
|
2022-10-31 14:07:36 +03:00
|
|
|
private:
|
2022-11-01 14:52:57 +03:00
|
|
|
std::string m_channel;
|
|
|
|
std::string m_waveform;
|
|
|
|
double m_frequency;
|
|
|
|
double m_period;
|
|
|
|
double m_amplitude;
|
|
|
|
double m_offset;
|
|
|
|
double m_phase;
|
2022-10-31 14:07:36 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class Oscilloscope: public Device {
|
|
|
|
public:
|
|
|
|
Oscilloscope(std::string path_name): Device(path_name) { }
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|