-
Notifications
You must be signed in to change notification settings - Fork 0
/
rs232.cpp
68 lines (67 loc) · 2.77 KB
/
rs232.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
#include "rs232.h"
#include <qdebug.h>
rs232::rs232(QObject *parent) :
QObject(parent)
{
}
rs232::~rs232()
{
emit finished_Port();//Сигнал о завершении работы
}
void rs232 :: process_Port(){//Выполняется при старте класса
connect(&thisPort,SIGNAL(error(QSerialPort::SerialPortError)), this, SLOT(handleError(QSerialPort::SerialPortError))); // подключаем проверку ошибок порта
connect(&thisPort, SIGNAL(readyRead()),this,SLOT(ReadInPort()));//подключаем чтение с порта по сигналу readyRead()
}
void rs232 :: Write_Settings_Port(QString name, qint32 bound){//заносим параметры порта в структуру данных
SettingsPort.name = name;
SettingsPort.baudRate = (QSerialPort::BaudRate) bound;
SettingsPort.dataBits = (QSerialPort::DataBits) QSerialPort::Data8;
SettingsPort.parity = (QSerialPort::Parity) QSerialPort::NoParity;
SettingsPort.stopBits = (QSerialPort::StopBits) QSerialPort::OneStop;
SettingsPort.flowControl = (QSerialPort::FlowControl) QSerialPort::NoFlowControl;
}
void rs232 :: ConnectPort(void){//процедура подключения
thisPort.setPortName(SettingsPort.name);
if (thisPort.open(QIODevice::ReadWrite)) {
if (thisPort.setBaudRate(SettingsPort.baudRate)
&& thisPort.setDataBits(SettingsPort.dataBits)//DataBits
&& thisPort.setParity(SettingsPort.parity)
&& thisPort.setStopBits(SettingsPort.stopBits)
&& thisPort.setFlowControl(SettingsPort.flowControl))
{
if (thisPort.isOpen()){
error_((SettingsPort.name+ tr(" >> Open!\r")).toLocal8Bit());
}
} else {
thisPort.close();
error_(thisPort.errorString().toLocal8Bit());
}
} else {
thisPort.close();
error_(thisPort.errorString().toLocal8Bit());
}
}
void rs232::handleError(QSerialPort::SerialPortError error)//проверка ошибок при работе
{
if ( (thisPort.isOpen()) && (error == QSerialPort::ResourceError)) {
error_(thisPort.errorString().toLocal8Bit());
DisconnectPort();
}
}//
void rs232::DisconnectPort(){//Отключаем порт
if(thisPort.isOpen()){
thisPort.close();
error_(SettingsPort.name.toLocal8Bit() + tr(" >> Close!\r"));
}
}
void rs232::WriteToPort(QByteArray data){//Запись данных в порт
if(thisPort.isOpen()){
thisPort.write(data);
}
}
//
void rs232::ReadInPort(){//Чтение данных из порта
QByteArray data;
data.append(thisPort.readAll());
outPort(data);
}