mirror of
https://github.com/galera951/experiment-automation.git
synced 2024-11-22 13:45:53 +03:00
Start working on generator class
This commit is contained in:
parent
e718654bd7
commit
95136cad44
3
project/Device.cpp
Normal file
3
project/Device.cpp
Normal file
@ -0,0 +1,3 @@
|
||||
#include "Device.hpp"
|
||||
|
||||
|
94
project/Device.hpp
Normal file
94
project/Device.hpp
Normal file
@ -0,0 +1,94 @@
|
||||
#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:
|
||||
Generator(std::string path_name): Device(path_name), channel("C1") { }
|
||||
|
||||
void buzz() {
|
||||
command("BUZZ ON");
|
||||
}
|
||||
|
||||
void basic_wave(
|
||||
size_t channel,
|
||||
std::string type,
|
||||
double frequency,
|
||||
double period,
|
||||
double amplitude,
|
||||
double offset,
|
||||
double phase
|
||||
);
|
||||
|
||||
void set_channel(size_t ch) {
|
||||
if (ch == 1 || ch == 2) channel = "C" + std::to_string(ch);
|
||||
else std::cerr << "Invalid channel" << std::endl;
|
||||
}
|
||||
|
||||
void set_waveform(std::string type) {
|
||||
command(channel + ":BSWV WVTP," + type);
|
||||
}
|
||||
|
||||
private:
|
||||
std::string channel;
|
||||
};
|
||||
|
||||
|
||||
class Oscilloscope: public Device {
|
||||
public:
|
||||
Oscilloscope(std::string path_name): Device(path_name) { }
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
13
project/Makefile
Normal file
13
project/Makefile
Normal file
@ -0,0 +1,13 @@
|
||||
all: main
|
||||
|
||||
main: main.o
|
||||
g++ main.o -o main
|
||||
|
||||
main.o: main.cpp
|
||||
g++ -c main.cpp -o main.o
|
||||
|
||||
clean:
|
||||
rm -f main
|
||||
rm -f *.o
|
||||
|
||||
.PNONY: all clean
|
BIN
project/device
BIN
project/device
Binary file not shown.
@ -1,52 +0,0 @@
|
||||
#include<fstream>
|
||||
#include<iostream>
|
||||
#include<string>
|
||||
|
||||
class Device
|
||||
{
|
||||
public:
|
||||
|
||||
Device(std::string name): root_path("/dev/" + name) { }
|
||||
|
||||
void send_command(std::string command)
|
||||
{
|
||||
std::ofstream out;
|
||||
out.open(root_path);
|
||||
|
||||
if(!out.is_open()) {
|
||||
std::cerr << "**ERROR** file is not open to output." << std::endl;
|
||||
} else {
|
||||
out << command;
|
||||
out.close();
|
||||
}
|
||||
}
|
||||
|
||||
std::string accept_command()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
private:
|
||||
std::string root_path;
|
||||
std::string buffer;
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
Device generator("usbtmc0");
|
||||
generator.send_command("*IDN?");
|
||||
|
||||
std::cout << generator.accept_command() << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
BIN
project/main
Executable file
BIN
project/main
Executable file
Binary file not shown.
39
project/main.cpp
Normal file
39
project/main.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
#include "Device.hpp"
|
||||
#include <vector>
|
||||
#include <unistd.h>
|
||||
|
||||
int main() {
|
||||
|
||||
// initialize generator and oscilloscope
|
||||
|
||||
std::string generator_path;
|
||||
std::string oscilloscope_path;
|
||||
|
||||
for (size_t i = 0; i < 2; i++) {
|
||||
auto path = "usbtmc" + std::to_string(i);
|
||||
Device device(path);
|
||||
|
||||
if (device.name == "AKIP-3409-4") generator_path = path;
|
||||
else if (device.name == "AKIP-4131/1") oscilloscope_path = path;
|
||||
else {
|
||||
std::cerr << "Devices not available!" << std::endl;
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
Generator generator(generator_path);
|
||||
Oscilloscope oscilloscope(oscilloscope_path);
|
||||
|
||||
|
||||
// work with devices
|
||||
|
||||
//generator.buzz();
|
||||
|
||||
std::string waveform;
|
||||
std::cout << "Input waveform (SINE, SQUARE, RAMP, PULSE, NOISE, ARB, DC, PRBS, IQ):" << std::endl;
|
||||
std::cin >> waveform;
|
||||
|
||||
generator.set_waveform(waveform);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
BIN
project/main.o
Normal file
BIN
project/main.o
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user