#ifndef SMARTPEN_H #define SMARTPEN_H #include #include #include #include // TODO: These values are mostly random. #define SMARTPEN_DPI_X (677.3333) #define SMARTPEN_DPI_Y (677.3333) #define SMARTPEN_BLEED_X 333.3 #define SMARTPEN_BLEED_Y 333.3 class Smartpen : public QObject { Q_OBJECT public: explicit Smartpen(QObject *parent = 0); ~Smartpen(); typedef QPair Address; bool isConnected() const; enum Parameters { PenName = 8011 }; QByteArray getObject(const QString& name); QString getParameter(Parameters parameter); QString getPenName(); QVariantMap getPenInfo(); struct ChangeReport { QString guid; QString className; QString title; }; QList getChangeList(const QDateTime &from = QDateTime()); QByteArray getLspData(const QString &name, const QDateTime &from = QDateTime()); QByteArray getPaperReplay(const QDateTime &from = QDateTime()); static qint64 toPenTime(const QDateTime &dt); static QDateTime fromPenTime(qint64 t); static QString toPenSerial(quint64 id); static quint64 toPenId(const QString &serial); public slots: bool connectToPen(const Address &addr); void disconnectFromPen(); signals: void error(); private: static void obexEventCb(obex_t *handle, obex_object_t *obj, int mode, int event, int obex_cmd, int obex_rsp); void handleObexEvent(obex_object_t *object, int event, int obex_cmd, int obex_rsp); void handleObexRequestDone(obex_object_t *object, int obex_cmd, int obex_rsp); static QString toPenSerialSegment(quint32 id, int len); static quint32 fromPenSerialSegment(const QString &s); static QByteArray encodeUtf16(const QString &s); void addConnHeader(obex_object_t *object) const; private: obex_t * _obex; quint32 _connId; QByteArray _inBuf; }; #endif // SMARTPEN_H