ARRka  1.05
serialportreader.cpp
Idź do dokumentacji tego pliku.
1 
8 #include "inc/serialportreader.h"
9 #include <QMessageBox>
10 #include <QDebug>
11 
12 SerialPortReader::SerialPortReader(QObject *parent) : QObject(parent)
13 {
14  _serialSettings = new QSettings("ARRka","serial");
15  _serial = new QSerialPort(this);
16  _portOpened = false;
17 
18  connect(_serial,SIGNAL(readyRead()),this,SLOT(readDataFromSerial()));
19  connect(_serial,SIGNAL(errorOccurred(QSerialPort::SerialPortError)),this,SLOT(serialErrorHandler(QSerialPort::SerialPortError)));
20 }
21 
23 {
24  delete _serial;
25  delete _serialSettings;
26 }
27 
29 {
30  _serial->setPortName(_serialSettings->value("serial/name").toString());
31  _serial->setBaudRate(static_cast<QSerialPort::BaudRate>(_serialSettings->value("serial/baudRate").toInt()));
32  _serial->setDataBits(static_cast<QSerialPort::DataBits>(_serialSettings->value("serial/dataBits").toInt()));
33  _serial->setParity(static_cast<QSerialPort::Parity>(_serialSettings->value("serial/parity").toInt()));
34  _serial->setStopBits(static_cast<QSerialPort::StopBits>(_serialSettings->value("serial/stopBits").toInt()));
35  _serial->setFlowControl(QSerialPort::NoFlowControl);
36  if (_serial->open(QIODevice::ReadOnly)) {
37  _portOpened = true;
38  emit portOpened();
39  } else {
40  _portOpened = false;
41  emit portError(_serial->errorString());
42  }
43 }
44 
46 {
47  if (_serial->isOpen()) {
48  _serial->close();
49  _portOpened = false;
50  emit portClosed();
51  }
52 }
53 
55 {
56  rawData data;
57  QByteArray s;
58  QString messageBegin, messageEnd;
59  int16_t checkSumReaded, checkSumComputed;
60  s = _serial->readAll();
61 
62  QTextStream stream(s);
63 
64  stream >> messageBegin;
65  while(messageBegin != "rr") {
66  stream >> messageBegin;
67  }
68 
69  stream >> data.X_XL >> data.Y_XL >> data.Z_XL >> data.X_G >> data.Y_G >> data.Z_G >> data.time >> checkSumReaded >> messageEnd;
70  if (stream.status() == QTextStream::Ok && messageEnd == "xx") {
71  checkSumComputed = data.X_XL + data.Y_XL + data.Z_XL + data.X_G + data.Y_G + data.Z_G + data.time - 2 * data.Y_XL;
72  if (checkSumComputed == checkSumReaded)
73  emit newData(data);
74  }
75 
76 }
77 
78 void SerialPortReader::serialErrorHandler(QSerialPort::SerialPortError errorMessage)
79 {
80  if (errorMessage == QSerialPort::ResourceError) {
81  emit portError(_serial->errorString());
82  _portOpened = false;
84  }
85 }
void serialErrorHandler(QSerialPort::SerialPortError errorMessage)
Obsługuje błędy podczas transmisji.
int Y_XL
Wartość przyspieszenia na osi Y akcelerometru (mg)
Definition: memsdata.h:29
int Z_G
Wartość prędkości kątowej na osi Z żyroskopu (mdps)
Definition: memsdata.h:53
int Y_G
Wartość prędkości kątowej na osi Y żyroskopu (mdps)
Definition: memsdata.h:47
QSettings * _serialSettings
Wskaźnik do ustawień portu szeregowego.
SerialPortReader(QObject *parent=nullptr)
Konstruktor klasy SerialPortReader.
~SerialPortReader()
Desktruktor klasy SerialPortReader.
int X_XL
Wartość przyspieszenia na osi X akcelerometru (mg)
Definition: memsdata.h:23
void portOpened()
Sygnał poprawnego otwarcia portu.
int X_G
Wartość prędkości kątowej na osi X żyroskopu (mdps)
Definition: memsdata.h:41
QSerialPort * _serial
Uchwyt do portu szeregowego.
void newData(rawData data)
Sygnał pojawienia się donych danych.
int time
Czas pomiędzy odczytami (ms)
Definition: memsdata.h:59
void portClosed()
Sygnał zamknięcia portu.
bool _portOpened
Flaga otwarcia portu.
void readDataFromSerial()
Oczytuje dane z portu szeregowego.
Surowe dane otrzymane z kontrolera (płytki)
Definition: memsdata.h:17
void portError(QString errorMessage)
Sygnał wystąpienia błędu podczas komunikacji z portem.
void closeSerialPort()
Zamyka port szeregowy.
void openSerialPort()
Otwiera port szeregowy.
Definicja klasy SerialPortReader.
int Z_XL
Wartość przyspieszenia na osi Z akcelerometru (mg)
Definition: memsdata.h:35