-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserialx.cpp
144 lines (79 loc) · 3.67 KB
/
serialx.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "serialx.h"
#include "tmanager.h"
#include <QtSerialPort/QSerialPort>
#include <thread>
SerialX::SerialX(): sP(new QSerialPort(this)),IsTransaction(false)
{
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::begin(const QString& dev, const int& baudrate){
sP->setPortName(dev);
sP->setBaudRate(baudrate);
sP->setFlowControl(QSerialPort::NoFlowControl);
sP->setDataBits(QSerialPort::Data8);
sP->setStopBits(QSerialPort::OneStop);
m_Manager_ptr->Log("** Próba połączenia z urządzeniem: "+dev+ " (baudrate: "+QString::number(baudrate)+")",0);
connect(sP,SIGNAL(readyRead()),this,SLOT(readData()));
if (!sP->open(QIODevice::ReadWrite)) {m_Manager_ptr->Log("** Błąd - połączenie nieudane.",1);} else {m_Manager_ptr->Log("** Sukces - połączenie ustanowione.",0); m_Manager_ptr->DeviceReady();};
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::end(){
if (sP->isOpen()) {
sP->close();
m_Manager_ptr->Log("** Połączenie zakończone.");
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::write(const QString& msg,const int& LogAs){
const QByteArray &messageArray = msg.toLocal8Bit();
sP->write(messageArray);
// sP->flush();
m_Manager_ptr->Log(msg, LogAs);
// usleep(2000000);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::beginSlot(const QString& dev, const int& baudrate){
begin(dev,baudrate);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::writeSlot(const QString& msg){
write(msg);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::closeSlot(){
end();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SerialX::readData(){
while ((sP->isOpen()) && (sP->canReadLine()) && (!IsTransaction)) {
QByteArray requestData = 0;
if (sP->canReadLine())
requestData = sP->readLine(1024);
const QString request = QString::fromUtf8(requestData);
// Reader.Interpreter(Reaction);
m_Manager_ptr->Log(request,3);
m_Manager_ptr->newJob(request);
}
}
void SerialX::Transaction (const QString& cmd)
{
IsTransaction=true;
int m_waitTimeout = 1500;
QString currentRequest;
const QByteArray requestData = currentRequest.toUtf8();
m_Manager_ptr->sendToDevice(cmd,4);
if (sP->waitForBytesWritten(m_waitTimeout))
{
if (sP->waitForReadyRead(m_waitTimeout))
{
QByteArray responseData = sP->readAll();
while (sP->waitForReadyRead(100))
responseData += sP->readAll();
const QString response = QString::fromUtf8(responseData);
// m_Manager_ptr->Log(response);
//emit this->response(response);
}
};
IsTransaction=false;
};