1
0
mirror of https://gitee.com/drabel/LibQQt.git synced 2025-01-04 10:18:44 +08:00

update bluetooth serial socket

This commit is contained in:
tianduanrui 2018-04-29 01:13:42 +08:00
parent 641cd05b08
commit 15104ce7c2
8 changed files with 291 additions and 98 deletions

View File

@ -46,7 +46,7 @@ void QQtBluetoothClient::installProtocol ( QQtProtocol* stack )
m_protocol = stack; m_protocol = stack;
connect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ), connect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( write ( const QByteArray& ) ) ); this, SLOT ( slotWriteData ( const QByteArray& ) ) );
} }
void QQtBluetoothClient::uninstallProtocol ( QQtProtocol* stack ) void QQtBluetoothClient::uninstallProtocol ( QQtProtocol* stack )
@ -57,7 +57,7 @@ void QQtBluetoothClient::uninstallProtocol ( QQtProtocol* stack )
return; return;
disconnect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ), disconnect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( write ( const QByteArray& ) ) ); this, SLOT ( slotWriteData ( const QByteArray& ) ) );
m_protocol = NULL; m_protocol = NULL;
} }
@ -212,5 +212,77 @@ void QQtBluetoothClient::readyReadData()
{ {
QByteArray bytes; QByteArray bytes;
bytes = readAll(); bytes = readAll();
m_protocol->translator ( bytes ); translator ( bytes );
}
void QQtBluetoothClient::slotWriteData ( const QByteArray& bytes )
{
write ( bytes );
}
void QQtBluetoothClient::translator ( const QByteArray& bytes )
{
// queued conn and queued package;
// direct conn and direct package;
/**
*
*
*
* protocol里是为了增添传输工具客户端类型方便
*
*
*
* staticbuffer
*
*/
static QByteArray sqbaBlockOnNet;
sqbaBlockOnNet += bytes;
//qint64 aaa = bytesAvailable();
//pline() << aaa;
do
{
quint16 nBlockLen = m_protocol->splitter ( sqbaBlockOnNet );
pmeta ( this ) << sqbaBlockOnNet.size() << "..." << nBlockLen;
if ( sqbaBlockOnNet.length() < nBlockLen || nBlockLen < m_protocol->minlength() )
{
/*
*
*/
return;
}
else if ( nBlockLen > m_protocol->maxlength() )
{
/*
*
*/
sqbaBlockOnNet.clear();
pmeta ( this ) << "forbidden package" << sqbaBlockOnNet.length() << nBlockLen;
return;
}
else if ( sqbaBlockOnNet.length() > nBlockLen )
{
/*
*
*
* :
*/
pmeta ( this ) << "stick package" << sqbaBlockOnNet.length() << nBlockLen;
QByteArray netData;
netData.resize ( nBlockLen );
sqbaBlockOnNet >> netData;
m_protocol->dispatcher ( netData );
continue;
}
/*
*
*/
m_protocol->dispatcher ( sqbaBlockOnNet );
break;
} while ( 1 );
sqbaBlockOnNet.clear();
} }

View File

@ -10,7 +10,7 @@ class QQTSHARED_EXPORT QQtBluetoothClient : public QBluetoothSocket
Q_OBJECT Q_OBJECT
public: public:
explicit QQtBluetoothClient ( QBluetoothServiceInfo::Protocol socketType = QBluetoothServiceInfo::RfcommProtocol, explicit QQtBluetoothClient ( QBluetoothServiceInfo::Protocol socketType = QBluetoothServiceInfo::RfcommProtocol,
QObject* parent = nullptr ); QObject* parent = nullptr );
explicit QQtBluetoothClient ( QObject* parent = nullptr ); explicit QQtBluetoothClient ( QObject* parent = nullptr );
/** /**
@ -56,6 +56,15 @@ private slots:
protected slots: protected slots:
void readyReadData(); void readyReadData();
void slotWriteData ( const QByteArray& bytes );
protected:
/**
* @brief translator
*
* @param bytes
*/
virtual void translator ( const QByteArray& bytes );
private: private:
void connectToSingelHost(); void connectToSingelHost();

View File

@ -1,37 +1,39 @@
#include "qqtserialport.h" #include "qqtserialport.h"
#include "qqtcore.h" #include "qqtcore.h"
QQtSerialPort::QQtSerialPort(QObject* parent) : QSerialPort(parent) QQtSerialPort::QQtSerialPort ( QObject* parent ) : QSerialPort ( parent )
{ {
//connect(this, SIGNAL(bytesWritten(qint64)), this, SLOT(updateProgress(qint64)) ); //connect(this, SIGNAL(bytesWritten(qint64)), this, SLOT(updateProgress(qint64)) );
connect(this, SIGNAL(readyRead()), this, SLOT(readyReadData())); connect ( this, SIGNAL ( readyRead() ), this, SLOT ( readyReadData() ) );
//connect(this, SIGNAL(aboutToClose()), this, SLOT(aboutToClose())); //connect(this, SIGNAL(aboutToClose()), this, SLOT(aboutToClose()));
//connect(this, SIGNAL(readChannelFinished()), this, SLOT(readChannelFinished())); //connect(this, SIGNAL(readChannelFinished()), this, SLOT(readChannelFinished()));
} }
QQtSerialPort::~QQtSerialPort() QQtSerialPort::~QQtSerialPort()
{ {
if (isOpen()) if ( isOpen() )
close(); close();
} }
void QQtSerialPort::installProtocol(QQtProtocol* stack) void QQtSerialPort::installProtocol ( QQtProtocol* stack )
{ {
if (m_protocol) if ( m_protocol )
return; return;
m_protocol = stack; m_protocol = stack;
connect(m_protocol, SIGNAL(write(const QByteArray&)), this, SLOT(write(const QByteArray&))); connect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( slotWriteData ( const QByteArray& ) ) );
} }
void QQtSerialPort::uninstallProtocol(QQtProtocol* stack) void QQtSerialPort::uninstallProtocol ( QQtProtocol* stack )
{ {
Q_UNUSED(stack) Q_UNUSED ( stack )
if (!m_protocol) if ( !m_protocol )
return; return;
disconnect(m_protocol, SIGNAL(write(const QByteArray&)), this, SLOT(write(const QByteArray&))); disconnect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( slotWriteData ( const QByteArray& ) ) );
m_protocol = NULL; m_protocol = NULL;
} }
@ -44,5 +46,77 @@ void QQtSerialPort::readyReadData()
{ {
QByteArray bytes; QByteArray bytes;
bytes = readAll(); bytes = readAll();
m_protocol->translator(bytes); translator ( bytes );
}
void QQtSerialPort::slotWriteData ( const QByteArray& bytes )
{
write ( bytes );
}
void QQtSerialPort::translator ( const QByteArray& bytes )
{
// queued conn and queued package;
// direct conn and direct package;
/**
*
*
*
* protocol里是为了增添传输工具客户端类型方便
*
*
*
* staticbuffer
*
*/
static QByteArray sqbaBlockOnNet;
sqbaBlockOnNet += bytes;
//qint64 aaa = bytesAvailable();
//pline() << aaa;
do
{
quint16 nBlockLen = m_protocol->splitter ( sqbaBlockOnNet );
pmeta ( this ) << sqbaBlockOnNet.size() << "..." << nBlockLen;
if ( sqbaBlockOnNet.length() < nBlockLen || nBlockLen < m_protocol->minlength() )
{
/*
*
*/
return;
}
else if ( nBlockLen > m_protocol->maxlength() )
{
/*
*
*/
sqbaBlockOnNet.clear();
pmeta ( this ) << "forbidden package" << sqbaBlockOnNet.length() << nBlockLen;
return;
}
else if ( sqbaBlockOnNet.length() > nBlockLen )
{
/*
*
*
* :
*/
pmeta ( this ) << "stick package" << sqbaBlockOnNet.length() << nBlockLen;
QByteArray netData;
netData.resize ( nBlockLen );
sqbaBlockOnNet >> netData;
m_protocol->dispatcher ( netData );
continue;
}
/*
*
*/
m_protocol->dispatcher ( sqbaBlockOnNet );
break;
} while ( 1 );
sqbaBlockOnNet.clear();
} }

View File

@ -10,7 +10,7 @@ class QSerialPort : public QextSerialPort
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit QSerialPort(QObject* parent = 0) {} explicit QSerialPort ( QObject* parent = 0 ) {}
virtual ~QSerialPort() {} virtual ~QSerialPort() {}
enum BaudRate enum BaudRate
{ {
@ -24,7 +24,7 @@ public:
Baud115200 = BAUD115200, Baud115200 = BAUD115200,
UnknownBaud = -1 UnknownBaud = -1
}; };
Q_ENUMS(BaudRate) Q_ENUMS ( BaudRate )
enum DataBits enum DataBits
{ {
Data5 = DATA_5, Data5 = DATA_5,
@ -33,7 +33,7 @@ public:
Data8 = DATA_8, Data8 = DATA_8,
UnknownDataBits = -1 UnknownDataBits = -1
}; };
Q_ENUMS(DataBits) Q_ENUMS ( DataBits )
enum Parity enum Parity
{ {
NoParity = PAR_NONE, NoParity = PAR_NONE,
@ -43,7 +43,7 @@ public:
MarkParity = PAR_MARK, MarkParity = PAR_MARK,
UnknownParity = -1 UnknownParity = -1
}; };
Q_ENUMS(Parity) Q_ENUMS ( Parity )
enum StopBits enum StopBits
{ {
OneStop = STOP_1, OneStop = STOP_1,
@ -51,7 +51,7 @@ public:
TwoStop = STOP_2, TwoStop = STOP_2,
UnknownStopBits = -1 UnknownStopBits = -1
}; };
Q_ENUMS(StopBits) Q_ENUMS ( StopBits )
enum FlowControl enum FlowControl
{ {
NoFlowControl = FLOW_OFF, NoFlowControl = FLOW_OFF,
@ -59,14 +59,14 @@ public:
SoftwareControl = FLOW_XONXOFF, SoftwareControl = FLOW_XONXOFF,
UnknownFlowControl = -1 UnknownFlowControl = -1
}; };
Q_ENUMS(FlowControl) Q_ENUMS ( FlowControl )
// QextSerialBase interface // QextSerialBase interface
public: public:
virtual void setBaudRate(BaudRate v) { QextSerialPort::setBaudRate((BaudRateType)v); } virtual void setBaudRate ( BaudRate v ) { QextSerialPort::setBaudRate ( ( BaudRateType ) v ); }
virtual void setDataBits(DataBits v) { QextSerialPort::setDataBits((DataBitsType)v); } virtual void setDataBits ( DataBits v ) { QextSerialPort::setDataBits ( ( DataBitsType ) v ); }
virtual void setParity(Parity v) { QextSerialPort::setParity((ParityType)v); } virtual void setParity ( Parity v ) { QextSerialPort::setParity ( ( ParityType ) v ); }
virtual void setStopBits(StopBits v) { QextSerialPort::setStopBits((StopBitsType)v); } virtual void setStopBits ( StopBits v ) { QextSerialPort::setStopBits ( ( StopBitsType ) v ); }
virtual void setFlowControl(FlowControl v) { QextSerialPort::setFlowControl((FlowType)v); } virtual void setFlowControl ( FlowControl v ) { QextSerialPort::setFlowControl ( ( FlowType ) v ); }
}; };
#else #else
#include <QSerialPort> #include <QSerialPort>
@ -76,16 +76,24 @@ class QQTSHARED_EXPORT QQtSerialPort : public QSerialPort
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit QQtSerialPort(QObject* parent = 0); explicit QQtSerialPort ( QObject* parent = 0 );
~QQtSerialPort(); ~QQtSerialPort();
void installProtocol(QQtProtocol* stack); void installProtocol ( QQtProtocol* stack );
void uninstallProtocol(QQtProtocol* stack); void uninstallProtocol ( QQtProtocol* stack );
QQtProtocol* installedProtocol(); QQtProtocol* installedProtocol();
private slots: private slots:
void readyReadData(); void readyReadData();
void slotWriteData ( const QByteArray& bytes );
protected:
/**
* @brief translator
*
* @param bytes
*/
virtual void translator ( const QByteArray& bytes );
private: private:
QQtProtocol* m_protocol; QQtProtocol* m_protocol;
}; };

View File

@ -3,5 +3,48 @@
QQtWebSocketClient::QQtWebSocketClient ( QObject* parent, const QString& origin, QWebSocketProtocol::Version version ) : QQtWebSocketClient::QQtWebSocketClient ( QObject* parent, const QString& origin, QWebSocketProtocol::Version version ) :
QWebSocket ( origin, version, parent ) QWebSocket ( origin, version, parent )
{ {
connect ( this, SIGNAL ( binaryMessageReceived ( QByteArray ) ),
this, SLOT ( slotReadData ( QByteArray ) ) );
}
void QQtWebSocketClient::installProtocol ( QQtProtocol* stack )
{
if ( m_protocol )
return;
m_protocol = stack;
connect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( slotWriteData ( const QByteArray& ) ) );
}
void QQtWebSocketClient::uninstallProtocol ( QQtProtocol* stack )
{
Q_UNUSED ( stack )
if ( !m_protocol )
return;
disconnect ( m_protocol, SIGNAL ( write ( const QByteArray& ) ),
this, SLOT ( slotWriteData ( const QByteArray& ) ) );
m_protocol = NULL;
}
QQtProtocol* QQtWebSocketClient::installedProtocol()
{
return m_protocol;
}
void QQtWebSocketClient::slotReadData ( const QByteArray& bytes )
{
translator ( bytes );
}
void QQtWebSocketClient::slotWriteData ( const QByteArray& bytes )
{
sendBinaryMessage ( bytes );
}
void QQtWebSocketClient::translator ( const QByteArray& bytes )
{
m_protocol->dispatcher ( bytes );
} }

View File

@ -1,14 +1,14 @@
#ifndef QQTWEBCLIENT_H #ifndef QQTWEBSOCKETCLIENT_H
#define QQTWEBCLIENT_H #define QQTWEBSOCKETCLIENT_H
#include <QtWebSockets/QWebSocket> #include <QtWebSockets/QWebSocket>
#include <qqtprotocol.h>
#include <qqtcore.h> #include <qqtcore.h>
#include <qqt-local.h> #include <qqt-local.h>
/** /**
* @brief The QQtWebClient class * @brief The QQtWebSocketClient class
* QQtWebSocketClient通过安装QQtWebProtocol来实现和RawSocket相似的通信方式 * QQtWebSocketClient通过安装QQtProtocol来实现和RawSocket相似的通信方式
* QQtWebProtocol是否和QQtProtocol格式相同使QQtWebProtocol继承QQtProtocol
*/ */
class QQTSHARED_EXPORT QQtWebSocketClient : public QWebSocket class QQTSHARED_EXPORT QQtWebSocketClient : public QWebSocket
{ {
@ -18,11 +18,26 @@ public:
const QString& origin = QString(), const QString& origin = QString(),
QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest ); QWebSocketProtocol::Version version = QWebSocketProtocol::VersionLatest );
void installProtocol ( QQtProtocol* stack );
void uninstallProtocol ( QQtProtocol* stack );
QQtProtocol* installedProtocol();
signals: signals:
public slots: private slots:
void slotReadData ( const QByteArray& bytes );
void slotWriteData ( const QByteArray& bytes );
protected:
/**
* @brief translator
*
* @param bytes
*/
virtual void translator ( const QByteArray& bytes );
private: private:
QQtProtocol* m_protocol;
}; };
#endif // QQTWEBCLIENT_H #endif // QQTWEBSOCKETCLIENT_H

View File

@ -1,10 +1,10 @@
#ifndef QQTWEBSERVER_H #ifndef QQTWEBSOCKETSERVER_H
#define QQTWEBSERVER_H #define QQTWEBSOCKETSERVER_H
#include <QObject> #include <QWebSocketServer>
#include <qqtcore.h> #include <qqtcore.h>
class QQtWebSocketServer : public QObject class QQtWebSocketServer : public QWebSocketServer
{ {
Q_OBJECT Q_OBJECT
public: public:
@ -15,4 +15,4 @@ signals:
public slots: public slots:
}; };
#endif // QQTWEBSERVER_H #endif // QQTWEBSOCKETSERVER_H

View File

@ -224,91 +224,65 @@ contains(DEFINES, __QQTCHARTS__) {
#network #network
contains (DEFINES, __NETWORKSUPPORT__) { contains (DEFINES, __NETWORKSUPPORT__) {
SOURCES += \ SOURCES += $$PWD/network/qqtnetwork.cpp
$$PWD/network/qqtnetwork.cpp HEADERS += $$PWD/network/qqtnetwork.h
HEADERS += \
$$PWD/network/qqtnetwork.h
#报文 用户重要 #报文 用户重要
HEADERS += \ HEADERS += $$PWD/network/qqtmessage.h
$$PWD/network/qqtmessage.h
#协议 用户重要 #协议 用户重要
HEADERS += \ HEADERS += $$PWD/network/qqtprotocol.h
$$PWD/network/qqtprotocol.h
#protocol manager for server iodevice #protocol manager for server iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtprotocolmanager.cpp
$$PWD/network/qqtprotocolmanager.cpp HEADERS += $$PWD/network/qqtprotocolmanager.h
HEADERS += \
$$PWD/network/qqtprotocolmanager.h
#tcp and udp iodevice #tcp and udp iodevice
contains(DEFINES, __TCPUDPSOCKET__){ contains(DEFINES, __TCPUDPSOCKET__){
#tcp client iodevice #tcp client iodevice
SOURCES += \ SOURCES += $$PWD/network/qqttcpclient.cpp
$$PWD/network/qqttcpclient.cpp HEADERS += $$PWD/network/qqttcpclient.h
HEADERS += \
$$PWD/network/qqttcpclient.h
#tcp server iodevice #tcp server iodevice
SOURCES += \ SOURCES += $$PWD/network/qqttcpserver.cpp
$$PWD/network/qqttcpserver.cpp HEADERS += $$PWD/network/qqttcpserver.h
HEADERS += \
$$PWD/network/qqttcpserver.h
#udp client iodevice #udp client iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtudpclient.cpp
$$PWD/network/qqtudpclient.cpp HEADERS += $$PWD/network/qqtudpclient.h
HEADERS += \
$$PWD/network/qqtudpclient.h
#udp server iodevice #udp server iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtudpserver.cpp
$$PWD/network/qqtudpserver.cpp HEADERS += $$PWD/network/qqtudpserver.h
HEADERS += \
$$PWD/network/qqtudpserver.h
} }
#serialport iodevice #serialport iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtserialport.cpp
$$PWD/network/qqtserialport.cpp HEADERS += $$PWD/network/qqtserialport.h
HEADERS += \
$$PWD/network/qqtserialport.h
#bluetooth iodevice #bluetooth iodevice
#注释在qqt_header.pri打开 DEFINES += __BLUETOOTH__ #注释在qqt_header.pri打开 DEFINES += __BLUETOOTH__
contains (DEFINES, __BLUETOOTH__) { contains (DEFINES, __BLUETOOTH__) {
#bluetooth client iodevice #bluetooth client iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtbluetoothclient.cpp
$$PWD/network/qqtbluetoothclient.cpp HEADERS += $$PWD/network/qqtbluetoothclient.h
HEADERS += \
$$PWD/network/qqtbluetoothclient.h
#bluetooth server iodevice #bluetooth server iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtbluetoothserver.cpp
$$PWD/network/qqtbluetoothserver.cpp HEADERS += $$PWD/network/qqtbluetoothserver.h
HEADERS += \
$$PWD/network/qqtbluetoothserver.h
#bluetooth manager #bluetooth manager
SOURCES += \ SOURCES += $$PWD/network/qqtbluetoothmanager.cpp
$$PWD/network/qqtbluetoothmanager.cpp HEADERS += $$PWD/network/qqtbluetoothmanager.h
HEADERS += \
$$PWD/network/qqtbluetoothmanager.h
} }
contains (DEFINES, __WEBSOCKETSUPPORT__) { contains (DEFINES, __WEBSOCKETSUPPORT__) {
#websocket client iodevice #websocket client iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtwebsocketclient.cpp
$$PWD/network/qqtwebsocketclient.cpp HEADERS += $$PWD/network/qqtwebsocketclient.h
HEADERS += \
$$PWD/network/qqtwebsocketclient.h
#websocket server iodevice #websocket server iodevice
SOURCES += \ SOURCES += $$PWD/network/qqtwebsocketserver.cpp
$$PWD/network/qqtwebsocketserver.cpp HEADERS += $$PWD/network/qqtwebsocketserver.h
HEADERS += \
$$PWD/network/qqtwebsocketserver.h
} }
#ethnet(+wifi) manager #ethnet(+wifi) manager
@ -324,10 +298,8 @@ contains (DEFINES, __NETWORKSUPPORT__) {
#webaccess manager #webaccess manager
contains (DEFINES, __WEBACCESSSUPPORT__) { contains (DEFINES, __WEBACCESSSUPPORT__) {
SOURCES += \ SOURCES += $$PWD/network/qqtwebaccessmanager.cpp
$$PWD/network/qqtwebaccessmanager.cpp HEADERS += $$PWD/network/qqtwebaccessmanager.h
HEADERS += \
$$PWD/network/qqtwebaccessmanager.h
} }
} }