-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHeater.cpp
98 lines (84 loc) · 3.11 KB
/
Heater.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "Heater.hpp"
///////////////////////////////////////////////////////////////////////////////
Heater::Heater(QObject* parent)
: QObject(parent), is_connected(false)
{
connect(&serial, SIGNAL(readyRead()), this, SLOT(readData()));
}
///////////////////////////////////////////////////////////////////////////////
Heater::~Heater()
{
if (isConnected())
serialDisconnect();
}
///////////////////////////////////////////////////////////////////////////////
bool Heater::serialConnect(const QSerialPortInfo& port, bool emit_errors)
{
if (this->isConnected())
return false;
serial.setPort(port);
if (!serial.open(QIODevice::ReadWrite)) {
if (emit_errors)
emit serial_error(tr("connecting"), serial.errorString());
return false;
}
if (!setSerialSettings()) {
if (emit_errors)
emit serial_error(tr("connecting"), serial.errorString());
return false;
}
// TODO: test connection here
is_connected = true;
connect(&serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));
emit heater_connected(serial);
qDebug() << "heater connected to" << serial.portName();
return true;
}
///////////////////////////////////////////////////////////////////////////////
bool Heater::setSerialSettings()
{
return serial.setBaudRate(115200)
&& serial.setDataBits(QSerialPort::Data8)
&& serial.setParity(QSerialPort::NoParity)
&& serial.setStopBits(QSerialPort::OneStop)
&& serial.setFlowControl(QSerialPort::NoFlowControl);
}
///////////////////////////////////////////////////////////////////////////////
bool Heater::serialAutoconnect()
{
QList<QSerialPortInfo> ports = QSerialPortInfo::availablePorts();
foreach(const QSerialPortInfo port, ports) {
if (this->serialConnect(port))
return true;
}
emit serial_error(tr("autoconnecting"), tr("No MakerBot Heater found. Tried %1 devices.").arg(ports.count()));
return false;
}
///////////////////////////////////////////////////////////////////////////////
void Heater::serialDisconnect()
{
if (this->isConnected()) {
serial.close();
is_connected = false;
disconnect(&serial, SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError)));
emit heater_disconnected();
qDebug() << "heater disconnected";
}
}
///////////////////////////////////////////////////////////////////////////////
const HeaterResponse Heater::sendCommand(const HeaterCommand& cmd)
{
serial.write(cmd.getSerial());
QByteArray response = serial.read(cmd.response_length);
}
///////////////////////////////////////////////////////////////////////////////
void Heater::readData()
{
received_data.append(serial.readAll());
}
///////////////////////////////////////////////////////////////////////////////
void Heater::handleError(QSerialPort::SerialPortError error)
{
emit serial_error(tr("general serial error"), error.errorString());
}
///////////////////////////////////////////////////////////////////////////////