gclogger/src/GmcDevice.cpp

110 lines
2.6 KiB
C++

//
// Created by h44z on 07.05.19.
//
#include "GmcDevice.h"
GmcDevice::GmcDevice(const string &serialPort, int baud) {
device = new SerialPort(serialPort, baud);
if (!device->isOpen()) {
cout << "Failed to open gmc device!" << endl;
} else {
cout << "Connection to gmc device established!" << endl;
if (!setHeartbeatOff()) {
cout << "Failed to disable heartbeat!" << endl;
device->serialClose();
}
}
}
GmcDevice::~GmcDevice() {
close();
}
bool GmcDevice::close() {
return device->serialClose();
}
int GmcDevice::getCPM() {
if (!device->isOpen()) {
cout << "Device is not connected, failed to read CPM!" << endl;
return -1;
}
string cmd = "<GETCPM>>";
vector<uint8_t> result;
if (device->serialWrite(cmd) == cmd.length()) {
result = device->serialRead(2); // cpm result has size 2
} else {
cout << "Failed to send command to device!" << endl;
}
return result[0] * 256 + result[1];
}
float GmcDevice::getTemperature() {
if (!device->isOpen()) {
cout << "Device is not connected, failed to read temperature!" << endl;
return -1;
}
string cmd = "<GETTEMP>>";
vector<uint8_t> result;
if (device->serialWrite(cmd) == cmd.length()) {
result = device->serialRead(4); // temp result has size 4
} else {
cout << "Failed to send command to device!" << endl;
}
int sign = result[2] == 0 ? 1 : -1;
float temp = result[0]; // integer part
temp += static_cast<float>(result[1] / 10.0); // float part
temp = temp * sign;
return temp;
}
string GmcDevice::getVersion() {
if (!device->isOpen()) {
cout << "Device is not connected, failed to read version!" << endl;
return "";
}
string cmd = "<GETVER>>";
vector<uint8_t> result;
if (device->serialWrite(cmd) == cmd.length()) {
result = device->serialRead(14); // version result has size 14
} else {
cout << "Failed to send command to device!" << endl;
}
string strResult(result.begin(), result.end());
return strResult;
}
bool GmcDevice::setHeartbeatOff() {
if (!device->isOpen()) {
cout << "Device is not connected, failed to disable heartbeat!" << endl;
return false;
}
string cmd = "<HEARTBEAT0>>";
string result;
if (device->serialWrite(cmd) == cmd.length()) {
return device->clearInput(100); // clear 100 chars
} else {
cout << "Failed to send command to device!" << endl;
}
return false;
}
bool GmcDevice::isConnected() {
return device->isOpen();
}