summaryrefslogtreecommitdiff
path: root/saltoqd/toqconnection.h
diff options
context:
space:
mode:
Diffstat (limited to 'saltoqd/toqconnection.h')
-rw-r--r--saltoqd/toqconnection.h94
1 files changed, 94 insertions, 0 deletions
diff --git a/saltoqd/toqconnection.h b/saltoqd/toqconnection.h
new file mode 100644
index 0000000..47a3132
--- /dev/null
+++ b/saltoqd/toqconnection.h
@@ -0,0 +1,94 @@
+#ifndef TOQCONNECTION_H
+#define TOQCONNECTION_H
+
+#include <QtCore/QTimer>
+#include <QtBluetooth/QBluetoothSocket>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+
+class ToqConnection : public QObject
+{
+ Q_OBJECT
+ Q_ENUMS(CoreEndpoints)
+ Q_PROPERTY(bool connected READ isConnected)
+
+public:
+ explicit ToqConnection(const QBluetoothAddress &address, QObject *parent = 0);
+
+ typedef quint8 Endpoint;
+
+ enum CoreEndpoints
+ {
+ VersionEndpoint = 0,
+ VoiceCallEndpoint = 1,
+ SMSEndpoint = 3,
+ SystemEndpoint = 5,
+ PopUpEndpoint = 7,
+ StorageServiceEndpoint = 9,
+ TFTPEndpoint = 15,
+ FMSEndpoint = 17,
+ EPCommunicationEndpoint = 19,
+ MusicEndpoint = 24,
+ AppMessagingEndpoint = 26,
+ SpeechEndpoint = 28,
+ ActivityMonitoringEndpoint = 30,
+ FTSEndpoint = 32,
+ AppLoggingEndpoint = 34
+ };
+
+ struct Message
+ {
+ Message();
+ Message(Endpoint source, Endpoint destination, quint16 transactionId, quint32 type, QJsonDocument payload);
+
+ Endpoint source;
+ Endpoint destination;
+ quint16 transactionId;
+ quint32 type;
+ QJsonDocument payload;
+ };
+
+ static const char * nameOfEndpoint(Endpoint ep);
+
+ static quint32 checksum(const QByteArray &data);
+ static quint32 checksum(QIODevice *dev);
+
+ bool isConnected() const;
+ quint16 nextTransactionId();
+
+public slots:
+ void sendMessage(const Message &msg);
+
+signals:
+ void connected();
+ void disconnected();
+ void messageReceived(const Message &msg);
+
+private:
+ Message unpackMessage(const QByteArray &data);
+ QByteArray packMessage(const Message &msg);
+
+private slots:
+ void tryConnect();
+ void handleSocketConnected();
+ void handleSocketDisconnected();
+ void handleSocketError(QBluetoothSocket::SocketError error);
+ void handleSocketData();
+
+private:
+ QBluetoothAddress _address;
+ QBluetoothSocket *_socket;
+ QTimer *_reconnectTimer;
+ quint16 _lastTransactionId;
+};
+
+inline ToqConnection::Message::Message()
+{
+}
+
+inline ToqConnection::Message::Message(Endpoint source, Endpoint destination, quint16 transactionId, quint32 type, QJsonDocument payload)
+ : source(source), destination(destination), transactionId(transactionId), type(type), payload(payload)
+{
+}
+
+#endif // TOQCONNECTION_H