diff options
Diffstat (limited to 'saltoqd/toqconnection.h')
-rw-r--r-- | saltoqd/toqconnection.h | 94 |
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 |