summaryrefslogtreecommitdiff
path: root/rockworkd/libpebble/watchdatawriter.h
diff options
context:
space:
mode:
Diffstat (limited to 'rockworkd/libpebble/watchdatawriter.h')
-rw-r--r--rockworkd/libpebble/watchdatawriter.h69
1 files changed, 69 insertions, 0 deletions
diff --git a/rockworkd/libpebble/watchdatawriter.h b/rockworkd/libpebble/watchdatawriter.h
new file mode 100644
index 0000000..8e4adde
--- /dev/null
+++ b/rockworkd/libpebble/watchdatawriter.h
@@ -0,0 +1,69 @@
+#ifndef WATCHDATAWRITER_H
+#define WATCHDATAWRITER_H
+
+#include <QtEndian>
+#include <QByteArray>
+#include <QString>
+#include <QUuid>
+#include <QVariantMap>
+#include <QLoggingCategory>
+
+class WatchDataWriter
+{
+public:
+ WatchDataWriter(QByteArray *buf);
+
+ template <typename T>
+ void write(T v);
+
+ template <typename T>
+ void writeLE(T v);
+
+ void writeBytes(int n, const QByteArray &b);
+
+ void writeFixedString(int n, const QString &s);
+
+ void writeCString(const QString &s);
+
+ void writePascalString(const QString &s);
+
+ void writeUuid(const QUuid &uuid);
+
+ void writeDict(const QMap<int, QVariant> &d);
+
+private:
+ char *p(int n);
+ uchar *up(int n);
+ QByteArray *_buf;
+};
+
+inline WatchDataWriter::WatchDataWriter(QByteArray *buf)
+ : _buf(buf)
+{
+}
+
+template <typename T>
+void WatchDataWriter::write(T v)
+{
+ qToBigEndian(v, up(sizeof(T)));
+}
+
+template <typename T>
+void WatchDataWriter::writeLE(T v)
+{
+ qToLittleEndian(v, up(sizeof(T)));
+}
+
+inline char * WatchDataWriter::p(int n)
+{
+ int size = _buf->size();
+ _buf->resize(size + n);
+ return &_buf->data()[size];
+}
+
+inline uchar * WatchDataWriter::up(int n)
+{
+ return reinterpret_cast<uchar *>(p(n));
+}
+
+#endif