1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00
LibQQt/examples/qqtnetworkexample/qqtuserserialprotocol.cpp
tianduanrui e3a0357214 update
2018-04-30 10:25:29 +08:00

277 lines
5.6 KiB
C++

#include "qqtuserserialprotocol.h"
#include "qqtcore.h"
#include "qqt-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 __EMBEDDED_LINUX__
QString portName ( "/dev/ttyS2" );
#else
QString portName ( "/dev/ttyS2" );
#endif
s0 = QQTUserSerialPortInstance ( this, portName, QQtSerialPort::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 )
{
bool ret = true;
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:
ret = false;
pline() << "receive unknown command:" << hex << qMsg.cmd();
break;
}
return ret;
}
QQtSerialPort* QQTUserSerialPortInstance ( QObject* parent, QString name, QQtSerialPort::BaudRate )
{
static QQtSerialPort* s0 = NULL;
if ( s0 == 0 )
{
s0 = new QQtSerialPort ( parent );
s0->setPortName ( name );
s0->setBaudRate ( QQtSerialPort::Baud57600 );
s0->setDataBits ( QQtSerialPort::Data8 );
s0->setParity ( QQtSerialPort::NoParity );
s0->setStopBits ( QQtSerialPort::OneStop );
s0->setFlowControl ( QQtSerialPort::NoFlowControl );
}
return s0;
}