From ac7b085449fb49f54225d22c7c229da6ad120e2b Mon Sep 17 00:00:00 2001 From: Javier Date: Sun, 12 Sep 2021 19:41:12 +0200 Subject: remove PEN_EPOCH mistake and get usertime from the pen --- smartpen.cc | 55 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 26 deletions(-) (limited to 'smartpen.cc') diff --git a/smartpen.cc b/smartpen.cc index ce26a31..686170d 100644 --- a/smartpen.cc +++ b/smartpen.cc @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -#include +#include #include #include #include @@ -26,7 +26,6 @@ #include "xmlutils.h" #include "smartpen.h" -#define PEN_EPOCH (1289335960000LL) #define PEN_MTU OBEX_MAXIMUM_MTU #define PEN_TIMEOUT_SECONDS 5 @@ -86,7 +85,7 @@ QByteArray Smartpen::getObject(const QString &name) return result; } -QString Smartpen::getParameter(Parameters parameter) +QByteArray Smartpen::getParameter(Parameter parameter) { QString objectName = QString("ppdata?key=pp%1").arg(uint(parameter), 4, 16); QByteArray data = getObject(objectName); @@ -97,21 +96,36 @@ QString Smartpen::getParameter(Parameters parameter) if (!r.atEnd()) { QXmlStreamAttributes attrs = r.attributes(); - return attrs.value("value").toString(); + QString value = attrs.value("value").toString(); + if (!value.isEmpty()) { + if (value.startsWith("0x")) { + return QByteArray::fromHex(value.mid(2).toLatin1()); + } else { + qWarning() << "Unknown parameter return format: " << value; + } + } } - return QString(); + return QByteArray(); } QString Smartpen::getPenName() { - QString name = getParameter(PenName); - if (name.isEmpty()) { - return name; // Empty string if unknown name - } + return QString::fromUtf8(getParameter(PenName)); +} - QByteArray hex = QByteArray::fromHex(name.mid(2).toLatin1()); - return QString::fromUtf8(hex); +Smartpen::PenTime Smartpen::getPenTime(Parameter parameter) +{ + Smartpen::PenTime time; + QByteArray value = getParameter(parameter); + if (value.isEmpty() || value.size() != sizeof(Smartpen::PenTime)) { + qWarning() << "got invalid value for pen time: " << value.toHex(); + return 0; + } + QDataStream ds(value); + ds.setByteOrder(QDataStream::LittleEndian); + ds >> time; + return time; } QVariantMap Smartpen::getPenInfo() @@ -216,22 +230,11 @@ QByteArray Smartpen::getPaperReplay(PenTime from) return getObject(QString("lspdata?name=com.livescribe.paperreplay.PaperReplay&start_time=%1&returnVersion=0.3&remoteCaller=WIN_LD_200").arg(from)); } -qint64 Smartpen::toPenTime(const QDateTime &dt) +QDateTime Smartpen::fromPenTime(PenTime userTime, PenTime penTime) { - if (dt.isValid()) { - return dt.toMSecsSinceEpoch() - PEN_EPOCH; - } else { - return 0; - } -} - -QDateTime Smartpen::fromPenTime(qint64 t) -{ - if (t) { - return QDateTime::fromMSecsSinceEpoch(t + PEN_EPOCH).toLocalTime(); - } else { - return QDateTime(); - } + QDateTime dt = QDateTime::fromMSecsSinceEpoch(penTime + userTime, Qt::UTC); + dt.setTimeSpec(Qt::LocalTime); // userTime is actually in LocalTime, so override tz conversion + return dt; } QString Smartpen::toPenSerial(quint64 id) -- cgit v1.2.3