diff --git a/OmobiDisplayApp/OmobiDisplayApp.pro b/OmobiDisplayApp/OmobiDisplayApp.pro index 3e7d5a9..696c527 100644 --- a/OmobiDisplayApp/OmobiDisplayApp.pro +++ b/OmobiDisplayApp/OmobiDisplayApp.pro @@ -47,3 +47,8 @@ contains(ANDROID_TARGET_ARCH,armeabi-v7a) { } ANDROID_ABIS = armeabi-v7a + +contains(ANDROID_TARGET_ARCH,) { + ANDROID_ABIS = \ + armeabi-v7a +} diff --git a/OmobiDisplayApp/omobidisplaybackend.cpp b/OmobiDisplayApp/omobidisplaybackend.cpp index 8e0b058..b4dcef9 100644 --- a/OmobiDisplayApp/omobidisplaybackend.cpp +++ b/OmobiDisplayApp/omobidisplaybackend.cpp @@ -1,13 +1,19 @@ - #include "omobidisplaybackend.h" +#include "omobidisplaybackend.h" OmobiDisplayBackend::OmobiDisplayBackend(QObject *parent) : QObject(parent) { this->ble = new QBluetoothLeUart(); + this->ble->setUUIDs("92fecb20-1406-426a-afa5-cd5c1f306462", "92fecb21-1406-426a-afa5-cd5c1f306462", "92fecb22-1406-426a-afa5-cd5c1f306462"); this->displayTextModel = new OmobiDisplayTextModel(this); this->textSetsBuffer.clear(); this->displayBrightness = -1; this->waitingCommands = 0; + this->keepAliveTimer = new QTimer(this); + this->keepAliveTimer->setInterval(5000); + this->keepAliveTimer->setSingleShot(false); + connect(this->keepAliveTimer, &QTimer::timeout, this, &OmobiDisplayBackend::sendBluetoothKeepAlive); + connect(this->ble, &QBluetoothLeUart::stateChanged, this, &OmobiDisplayBackend::handleBluetoothStateChange); connect(this->ble, &QBluetoothLeUart::foundNewDevice, this, &OmobiDisplayBackend::handleFoundNewDevice); connect(this->ble, &QBluetoothLeUart::dataReceived, this, &OmobiDisplayBackend::handleBluetoothDataReceived); @@ -56,6 +62,11 @@ void OmobiDisplayBackend::handleBluetoothStateChange(QBluetoothLeUart::Bluetooth break; } } + + if(state == QBluetoothLeUart::Connected) + this->keepAliveTimer->start(); + else if(this->keepAliveTimer->isActive()) + this->keepAliveTimer->stop(); } void OmobiDisplayBackend::handleBluetoothDeviceConected() { @@ -72,10 +83,10 @@ void OmobiDisplayBackend::handleFoundNewDevice(QBluetoothLeUartDevice* device) { void OmobiDisplayBackend::handleDisplayTextModelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { - qDebug() << "Data changed: topLeft: " << topLeft << " bottomRight: " << bottomRight << " roles: " << roles; + qDebug() << "Data changed: topLeft: " << topLeft << " bottomRight: " << bottomRight << " roles: " << roles; - for(int role : roles) - this->updateDisplayTextSetParameter(topLeft.row(), role); + for(int role : roles) + this->updateDisplayTextSetParameter(topLeft.row(), role); } void OmobiDisplayBackend::handleDisplayTextModelRowsInserted(const QModelIndex &parent, int first, int last) { @@ -110,6 +121,14 @@ void OmobiDisplayBackend::sendBluetoothCommand(OmobiDisplayCommand command, QVar this->ble->sendData(doc.toJson(QJsonDocument::Compact)); } +void OmobiDisplayBackend::sendBluetoothKeepAlive() { + QJsonDocument doc = QJsonDocument::fromVariant(QVariantMap{{"header", KeepAliveCommand}}); + + qDebug() << "Sending keep alive: \n" << qPrintable(doc.toJson(QJsonDocument::Indented)); + + this->ble->sendData(doc.toJson(QJsonDocument::Compact)); +} + void OmobiDisplayBackend::handleBluetoothDataReceived(QString s){ qDebug() << "New data: \n" << qPrintable(s); @@ -124,6 +143,13 @@ void OmobiDisplayBackend::handleBluetoothDataReceived(QString s){ OmobiDisplayStatusCode status = OmobiDisplayStatusCode(doc.toVariant().toMap()["status"].toInt()); switch (header) { + case AuthorizeSessionCommand: { + break; + } + case KeepAliveCommand: { + break; + } + case GetAllTextSetsCommand: { // indicates that all existing txt sets have been sent over after GetAllTextSetsCommand was called if(status != Success) diff --git a/OmobiDisplayApp/omobidisplaybackend.h b/OmobiDisplayApp/omobidisplaybackend.h index ede00ba..329f602 100644 --- a/OmobiDisplayApp/omobidisplaybackend.h +++ b/OmobiDisplayApp/omobidisplaybackend.h @@ -2,6 +2,7 @@ #define OMOBIDISPLAYBACKEND_H #include +#include #include #include @@ -31,6 +32,8 @@ public: private: enum OmobiDisplayCommand { + AuthorizeSessionCommand = 0, + KeepAliveCommand = 1, GetAllTextSetsCommand = 10, GetTextSetParameterCommand = 11, GetDisplayBrightnessCommand = 12, @@ -45,6 +48,7 @@ private: OmobiDisplayAppState state; QBluetoothLeUart *ble; + QTimer *keepAliveTimer; OmobiDisplayTextModel* displayTextModel; int waitingCommands; QList> textSetsBuffer; @@ -68,6 +72,7 @@ private slots: void handleDisplayTextModelRowsRemoved(const QModelIndex &parent, int first, int last); void sendBluetoothCommand(OmobiDisplayCommand command, QVariant data = QVariant()); + void sendBluetoothKeepAlive(); void handleBluetoothDataReceived(QString s); void updateDisplayTextSetParameter(int index, int parameter); void updateDisplayTextSetParameter(int index, int parameter, QString value);