proto-debuger/protoDebuger/serialcontroller.cpp

113 lines
2.7 KiB
C++
Raw Normal View History

2021-04-10 14:22:41 +00:00
#include "serialcontroller.h"
2021-04-17 17:57:39 +00:00
SerialController::SerialController(QObject *parent) :
QObject(parent),
mCurrentPort(nullptr),
mProto(nullptr),
mConnected(false),
mListener(nullptr)
2021-04-10 14:22:41 +00:00
{
}
2021-04-12 15:39:06 +00:00
int SerialController::OpenSerial(QString port, QString baudRate, QString dataBits, QString stopBits, QString flow)
2021-04-10 14:22:41 +00:00
{
2021-04-12 15:39:06 +00:00
GetSetting(baudRate,dataBits,stopBits,flow);
mCurrentPort = new QSerialPort();
2021-04-10 14:22:41 +00:00
if(nullptr == mCurrentPort){
return NULLPOINTER;
}
mCurrentPort->setPortName(port);
2021-04-12 15:39:06 +00:00
mCurrentPort->setBaudRate(mBaudrate);
mCurrentPort->setDataBits(mDataBits);
mCurrentPort->setStopBits(mStopBits);
mCurrentPort->setFlowControl(mFlow);
2021-04-10 14:22:41 +00:00
mCurrentPort->open(QIODevice::ReadWrite);
if(!mCurrentPort->isOpen()){
qDebug()<< mCurrentPort->errorString();
return -1;
}
connect(mCurrentPort, SIGNAL(readyRead()), SLOT(ReadyRead()));
connect(mCurrentPort, SIGNAL(aboutToClose()),SLOT(AboutClose()));
this->mConnected = true;
return OK;
}
int SerialController::CloseSerial()
{
if(this->mConnected){
this->mCurrentPort->close();
}
return OK;
}
2021-04-12 15:39:06 +00:00
QList<QSerialPortInfo> SerialController::GetPorts()
2021-04-10 14:22:41 +00:00
{
2021-04-12 15:39:06 +00:00
this->mPorts = QSerialPortInfo::availablePorts();
2021-04-10 14:22:41 +00:00
return mPorts;
}
2021-04-12 15:39:06 +00:00
2021-04-10 14:22:41 +00:00
int SerialController::SetProto(QSerialProto * proto)
{
this->mProto = proto;
return OK;
}
2021-04-17 17:57:39 +00:00
int SerialController::SetListener(SerialController::SerialListener *p)
{
mListener = p;
}
2021-04-10 14:22:41 +00:00
int SerialController::SendData(uint8_t *data, uint8_t len)
{
if(mConnected){
return mCurrentPort->write((char *)data,len);
}
return ERROR_SEND;
}
2021-04-12 15:39:06 +00:00
void SerialController::GetSetting(QString baudRate, QString dataBits, QString stopBits, QString flow)
{
if (stopBits == "1") {
mStopBits = QSerialPort::StopBits::OneStop;
}
if (stopBits == "1.5") {
mStopBits = QSerialPort::StopBits::OneAndHalfStop;
}
if (stopBits == "2") {
mStopBits = QSerialPort::StopBits::TwoStop;
}
if(flow == "none")
mFlow = QSerialPort::FlowControl::NoFlowControl;
if(flow == "software")
mFlow = QSerialPort::FlowControl::SoftwareControl;
if(flow == "hardware")
mFlow = QSerialPort::FlowControl::HardwareControl;
mBaudrate = baudRate.toUInt();
mDataBits = (QSerialPort::DataBits)dataBits.toUInt();
mParity = QSerialPort::Parity::NoParity;
}
2021-04-10 14:22:41 +00:00
void SerialController::ReadyRead()
{
2021-04-12 15:39:06 +00:00
if (this->mCurrentPort->bytesAvailable() > 0) {
2021-04-10 14:22:41 +00:00
auto data = mCurrentPort->readAll();
if(nullptr != this->mProto){
mProto->OnSerailData(data);
}
2021-04-17 17:57:39 +00:00
if(nullptr != this->mListener){
mListener->OnDataRecv(data);
}
2021-04-10 14:22:41 +00:00
}
}
void SerialController::AboutClose() {
}