mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
277 lines
5.6 KiB
C++
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;
|
|
}
|
|
|