1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/qqtuserserialprotocol.cpp
tianduanrui 3f857669fc init
2016-12-29 16:49:18 +08:00

261 lines
5.3 KiB
C++
Executable File

#include "qqtuserserialprotocol.h"
#include "qqtdefine.h"
#include "qqtgui-qt.h"
void QQTWritePassAck::pack(QByteArray &l)
{
setCmd(_SERIAL_WRITEPASSACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTWriteSerialNoAck::pack(QByteArray &l)
{
setCmd(_SERIAL_WRITEDEVNOACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTHandupAck::pack(QByteArray &l)
{
setCmd(_SERIAL_HANDACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTCloseAck::pack(QByteArray &l)
{
setCmd(_SERIAL_CLOSEACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTReadSerialNoAck::pack(QByteArray &l)
{
setCmd(_SERIAL_READDEVNOACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTReadPassAck::pack(QByteArray &l)
{
setCmd(_SERIAL_READPASSACK);
translate();
QQTSerialMessage::packer(l);
}
void QQTExceptionAck::pack(QByteArray &l)
{
setCmd(_SERIAL_EXCEPTIONACK);
translate();
QQTSerialMessage::packer(l);
}
QQTUserSerialProtocol::QQTUserSerialProtocol(QObject *parent) :
QQTProtocol(parent)
{
#ifdef __MIPS_LINUX__
QString portName("/dev/ttyS2");
#else
QString portName("/dev/ttyS2");
#endif
s0 = QQTUserSerialPortInstance(this, portName, QSerialPort::Baud57600);
if(s0->open(QIODevice::ReadWrite)) //Open Port dev.
pline() << QString("serial port %1 open success!").arg(portName);
else
pline() << QString("serial port %1 open failed! errcode =").arg(portName) << s0->errorString();
}
QQTUserSerialProtocol::~QQTUserSerialProtocol()
{
s0->close();
}
void QQTUserSerialProtocol::recvHandup(const QByteArray &l)
{
sendHandupAck();
}
void QQTUserSerialProtocol::sendHandupAck()
{
//status c51 + local
QByteArray s;
s << quint8(0x00);
QByteArray l;
QQTHandupAck ack;
ack.setData(s);
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol::recvClose(const QByteArray &l)
{
sendCloseAck();
}
void QQTUserSerialProtocol::sendCloseAck()
{
QByteArray s;
s << quint8(0x00);
QByteArray l;
QQTCloseAck ack;
ack.setData(s);
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol::recvWriteSerialNumber(const QByteArray &l)
{
QSettings set;
set.setValue("Device/DeviceNo", l);
set.sync();
sendWriteSerialNumberAck();
emit sigSerialUnlock();
}
void QQTUserSerialProtocol::sendWriteSerialNumberAck()
{
QQTWriteSerialNoAck ack;
QSettings set;
QByteArray sn = set.value("/Device/DeviceNo").toByteArray();
ack.setData(sn);
QByteArray l;
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol::recvReadSerial(const QByteArray &l)
{
sendReadSerialAck();
}
void QQTUserSerialProtocol::sendReadSerialAck()
{
QSettings set;
QByteArray serial = set.value("Device/DeviceNo").toByteArray();
QByteArray l;
QQTReadSerialNoAck ack;
ack.setData(serial);
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol::recvWritePassword(const QByteArray &l)
{
QSettings set;
set.setValue("Device/Password", l);
set.sync();
sendWritePasswordAck();
}
void QQTUserSerialProtocol::sendWritePasswordAck()
{
QQTWritePassAck ack;
QSettings set;
QByteArray sn = set.value("/Device/Password").toByteArray();
ack.setData(sn);
QByteArray l;
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol:: recvReadPassword(const QByteArray &l)
{
sendReadPasswordAck();
}
void QQTUserSerialProtocol::sendReadPasswordAck()
{
QSettings set;
QByteArray serial = set.value("Device/Password").toByteArray();
QByteArray l;
QQTReadPassAck ack;
ack.setData(serial);
ack.pack(l);
write(l);
}
void QQTUserSerialProtocol::sendExceptionAck()
{
//机器运行出现异常自动通过这个串口上报
QByteArray l;
QQTExceptionAck ack;
//ack.setData("");
ack.pack(l);
write(l);
}
quint16 QQTUserSerialProtocol::minlength()
{
return 10;
}
quint16 QQTUserSerialProtocol::maxlength()
{
return 128;
}
quint16 QQTUserSerialProtocol::splitter(const QByteArray &s)
{
QByteArray l = s.left(4);
quint16 b0 = 0, b1 = 0;
l >> b0 >> b1;
return b1;
}
bool QQTUserSerialProtocol::dispatcher(const QByteArray &m)
{
QQTSerialMessage qMsg;
qMsg.parser(m);
pline() << qMsg;
switch(qMsg.cmd())
{
case _SERIAL_HAND:
recvHandup(qMsg.data());
break;
case _SERIAL_CLOSE:
recvClose(qMsg.data());
break;
case _SERIAL_WRITEDEVNO:
recvWriteSerialNumber(qMsg.data());
break;
case _SERIAL_READDEVNO:
recvReadSerial(qMsg.data());
break;
case _SERIAL_WRITEPASS:
recvWritePassword(qMsg.data());
break;
case _SERIAL_READPASS:
recvReadPassword(qMsg.data());
break;
default:
pline() << "receive unknown command:" << hex << qMsg.cmd();
break;
}
}
QQTSerialPort *QQTUserSerialPortInstance(QObject *parent, QString name, QSerialPort::BaudRate)
{
static QQTSerialPort* s0 = NULL;
if(s0 == 0)
{
s0 = new QQTSerialPort(parent);
s0->setPortName(name);
s0->setBaudRate(QSerialPort::Baud57600);
s0->setDataBits(QSerialPort::Data8);
s0->setParity(QSerialPort::NoParity);
s0->setStopBits(QSerialPort::OneStop);
s0->setFlowControl(QSerialPort::NoFlowControl);
}
return s0;
}