[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://github.com/piggz/harbour-amazfish.git</param>
<param name="branch">master</param>
- <param name="revision">2.2.2</param>
+ <param name="revision">2.2.4</param>
<param name="debian">N</param>
<param name="dumb">N</param>
</service>
|
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/click/harbour-amazfish-ui.png
^
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/daemon.pro
^
|
@@ -104,6 +104,7 @@
include(../qble/qble.pri)
SOURCES += \
+ src/devices/asteroidosdevice.cpp \
src/devices/banglejsdevice.cpp \
src/devices/bipdevice.cpp \
src/devices/bipsdevice.cpp \
@@ -131,6 +132,11 @@
src/operations/huamiupdatefirmwareoperation2020.cpp \
src/qaesencryption.cpp \
src/services/adafruitblefsservice.cpp \
+ src/services/asteroidtimeservice.cpp \
+ src/services/asteroidweatherservice.cpp \
+ src/services/asteroidnotificationservice.cpp \
+ src/services/asteroidmediaservice.cpp \
+ src/services/asteroidscreenshotservice.cpp \
src/services/currenttimeservice.cpp \
src/services/dfuservice.cpp \
src/services/infinitimemotionservice.cpp \
@@ -181,6 +187,7 @@
HEADERS += \
src/codec.h \
+ src/devices/asteroidosdevice.h \
src/devices/banglejsdevice.h \
src/devices/bipdevice.h \
src/devices/bipsdevice.h \
@@ -208,6 +215,11 @@
src/operations/huamiupdatefirmwareoperation2020.h \
src/qaesencryption.h \
src/services/adafruitblefsservice.h \
+ src/services/asteroidtimeservice.h \
+ src/services/asteroidweatherservice.h \
+ src/services/asteroidnotificationservice.h \
+ src/services/asteroidmediaservice.h \
+ src/services/asteroidscreenshotservice.h \
src/services/currenttimeservice.h \
src/services/dfuservice.h \
src/services/infinitimemotionservice.h \
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/activitysummary.cpp
^
|
@@ -172,18 +172,18 @@
values << baseAltitude();
values << m_gpxTrack;
- qDebug() << "Saving Sport:" << name() << startTime() << startTime().toString(Qt::ISODate);
+ qDebug() << Q_FUNC_INFO << "Saving Sport:" << name() << startTime() << startTime().toString(Qt::ISODate);
QSharedPointer<KDbSqlResult> result = conn->insertRecord(&fields, values);
if (result->lastResult().isError()) {
- qDebug() << "error inserting record";
+ qDebug() << Q_FUNC_INFO << "Error inserting record";
return false;
}
long lastId = result->lastInsertRecordId();
setId(lastId);
- qDebug() << "Record Id is" << id();
+ qDebug() << Q_FUNC_INFO << "Record Id is" << id();
//Save meta data
foreach(const auto &m, m_metaData) {
@@ -204,7 +204,7 @@
result = conn->insertRecord(&metaFields, metaValues);
if (result->lastResult().isError()) {
- qDebug() << "error inserting meta record";
+ qDebug() << Q_FUNC_INFO << "Error inserting meta record";
return false;
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/bipactivitydetailparser.cpp
^
|
@@ -15,7 +15,8 @@
m_baseAltitude = summary.baseAltitude();
m_baseDate = summary.startTime();
- qDebug() << "Base data::" << m_baseLongitude << m_baseLatitude << m_baseAltitude << m_baseDate;
+ qDebug() << Q_FUNC_INFO;
+ qDebug() << "Base data:" << m_baseLongitude << m_baseLatitude << m_baseAltitude << m_baseDate;
qDebug() << summary.startTime() << m_summary.startTime();
qDebug() << convertHuamiValueToDecimalDegrees(m_baseLongitude) << convertHuamiValueToDecimalDegrees(m_baseLatitude);
@@ -89,7 +90,7 @@
i += consumeSpeed6(bytes, i);
break;
default:
- qDebug() << "unknown packet type" << type;
+ qDebug() << Q_FUNC_INFO << "unknown packet type" << type;
i+=6;
}
@@ -198,7 +199,7 @@
}
m_lastActivityPoint = ap;
} else {
- qDebug() << "skipping point!";
+ qDebug() << Q_FUNC_INFO << "skipping point!";
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/dbushrm.cpp
^
|
@@ -6,7 +6,7 @@
qDebug() << Q_FUNC_INFO;
if (!QDBusConnection::sessionBus().registerService("org.sailfishos.heartrate")) {
- qDebug() << QDBusConnection::sessionBus().lastError().message();
+ qDebug() << Q_FUNC_INFO << "Unable to register service:" << QDBusConnection::sessionBus().lastError().message();
} else {
QDBusConnection::sessionBus().registerObject("/", this, QDBusConnection::ExportAllSlots);
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devicefactory.cpp
^
|
@@ -1,4 +1,5 @@
#include "devicefactory.h"
+#include "asteroidosdevice.h"
#include "huamidevice.h"
#include "gtsdevice.h"
#include "biplitedevice.h"
@@ -11,7 +12,8 @@
AbstractDevice* DeviceFactory::createDevice(const QString &deviceName)
{
- qDebug() << "DeviceFactory::createDevice: requested device of type:" << deviceName;
+ qDebug() << Q_FUNC_INFO <<": requested device of type:" << deviceName;
+
if (deviceName == "Amazfit Bip Watch") {
return new BipDevice(deviceName);
}
@@ -56,7 +58,22 @@
return new BangleJSDevice(deviceName);
}
- qDebug() << "DeviceFactory::createDevice: no suitable devices found, creating a Bip device as default";
+ QList<QString> asteroidDevices = {
+ "AsteroidOS",
+ "bass", "sturgeon", "narwhal", "sparrow", "dory",
+ "lenok", "catfish", "carp", "smelt", "anthias",
+ "pike", "sawfish", "ray", "firefish", "beluga", "skipjack",
+ "koi", "mooneye", "swift", "nemo", "hoki",
+ "minnow", "tetra", "sprat", "kingyo", "medaka"
+ };
+
+ for (auto iterator = asteroidDevices.begin(); iterator != asteroidDevices.end(); ++iterator) {
+ if (deviceName == *iterator) {
+ return new AsteroidOSDevice(deviceName);
+ }
+ }
+
+ qDebug() << Q_FUNC_INFO << ": no suitable devices found, creating a Bip device as default";
return new BipDevice(deviceName);
//!TODO allow the user to choose the device type
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/deviceinterface.cpp
^
|
@@ -96,7 +96,8 @@
void DeviceInterface::connectToDevice(const QString &address)
{
- qDebug() << "DeviceInterface::connectToDevice:" << address;
+ qDebug() << Q_FUNC_INFO << ": address:" << address;
+
if (m_device) {
m_deviceAddress = address;
@@ -104,14 +105,15 @@
m_device->connectToDevice();
}
else {
- qDebug() << "DeviceInterface::connectToDevice:device was not valid";
+ qDebug() << Q_FUNC_INFO << ": device was not valid";
message(tr("Device is not valid, it may not be supported"));
}
}
QString DeviceInterface::pair(const QString &name, const QString &address)
{
- qDebug() << "DeviceInterface::pair:" << name << address;
+ qDebug() << Q_FUNC_INFO << name << address;
+
m_deviceAddress = address;
if (m_device) {
@@ -132,14 +134,14 @@
return "pairing";
}
- qDebug() << "DeviceInterface::pair:device not created";
+ qDebug() << Q_FUNC_INFO << ": device not created";
return QString("no device found");
}
void DeviceInterface::disconnect()
{
- qDebug() << "DeviceInterface::disconnect";
+ qDebug() << Q_FUNC_INFO;
if (m_device) {
m_device->disconnectFromDevice();
}
@@ -161,10 +163,10 @@
void DeviceInterface::onNotification(watchfish::Notification *notification)
{
if (m_device && m_device->connectionState() == "authenticated" && m_device->supportsFeature(AbstractDevice::FEATURE_ALERT)){
- qDebug() << "Sending alert to device";
+ qDebug() << Q_FUNC_INFO << "Sending alert to device";
sendAlert(notification->appName(), notification->summary(), notification->body());
} else {
- qDebug() << "no notification service, buffering notification";
+ qDebug() << Q_FUNC_INFO << "no notification service, buffering notification";
WatchNotification n;
n.id = notification->id();
@@ -278,7 +280,7 @@
KDbEscapedString("SELECT value FROM info_log WHERE key = %1 ORDER BY id DESC").arg(AbstractDevice::INFO_BATTERY), // automatically adds LIMIT 1 into query
&batteryLevel) == true) { // comparision of tristate type (true, false, canceled)
m_lastBatteryLevel = batteryLevel;
- qDebug() << "Last Battery Level: " << m_lastBatteryLevel;
+ qDebug() << Q_FUNC_INFO << "Last Battery Level: " << m_lastBatteryLevel;
} else {
qWarning() << "Cannot get battery level";
}
@@ -369,50 +371,50 @@
{
KDbDriverManager manager;
const QStringList driverIds = manager.driverIds();
- qDebug() << "DRIVERS: " << driverIds;
+ qDebug() << Q_FUNC_INFO << "DRIVERS: " << driverIds;
if (driverIds.isEmpty()) {
- qWarning() << "No drivers found";
+ qWarning() << Q_FUNC_INFO << ": No drivers found";
return;
}
if (manager.result().isError()) {
- qDebug() << manager.result();
+ qDebug() << Q_FUNC_INFO << manager.result();
return;
}
//get driver
m_dbDriver = manager.driver("org.kde.kdb.sqlite");
if (!m_dbDriver || manager.result().isError()) {
- qDebug() << manager.result();
+ qDebug() << Q_FUNC_INFO << manager.result();
return;
}
m_connData.setDatabaseName(QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)+ "/amazfish.kexi");
- qDebug() << "Database is: " << m_connData.databaseName();
+ qDebug() << Q_FUNC_INFO << ": Database is: " << m_connData.databaseName();
m_conn = m_dbDriver->createConnection(m_connData);
if (!m_conn || m_dbDriver->result().isError()) {
- qDebug() << m_dbDriver->result();
+ qDebug() << Q_FUNC_INFO << ": Could not create connection:" << m_dbDriver->result();
return;
}
- qDebug() << "KDbConnection object created.";
+ qDebug() << Q_FUNC_INFO << ": KDbConnection object created.";
if (!m_conn->connect()) {
- qDebug() << m_conn->result();
+ qDebug() << Q_FUNC_INFO << ": Could not connect: " << m_conn->result();
return;
}
- qDebug() << "KDbConnection::connect() OK.";
+ qDebug() << Q_FUNC_INFO << ": KDbConnection::connect() OK.";
if (!m_conn->databaseExists(m_connData.databaseName())) {
if (!m_conn->createDatabase(m_connData.databaseName())) {
- qDebug() << m_conn->result();
+ qDebug() << Q_FUNC_INFO << ": Could not create Database: " << m_conn->result();
return;
}
- qDebug() << "DB" << m_connData.databaseName() << "created";
+ qDebug() << Q_FUNC_INFO << ": Database" << m_connData.databaseName() << "created";
}
if (!m_conn->useDatabase()) {
- qDebug() << m_conn->result();
+ qDebug() << Q_FUNC_INFO << ": Could not use Database: " << m_conn->result();
return;
}
@@ -430,7 +432,7 @@
void DeviceInterface::onConnectionStateChanged()
{
- qDebug() << "DeviceInterface::onConnectionStateChanged" << connectionState();
+ qDebug() << Q_FUNC_INFO << connectionState();
if (connectionState() == "authenticated") {
m_device->setDatabase(dbConnection());
@@ -456,12 +458,12 @@
void DeviceInterface::log_battery_level(int level) {
if (!m_conn || !(m_conn->isDatabaseUsed())) {
- qDebug() << "Database not connected";
+ qDebug() << Q_FUNC_INFO << "Database not connected";
return;
}
QDateTime m_sampleTime = QDateTime::currentDateTime();
- qDebug() << "Start time" << m_sampleTime;
+ qDebug() << Q_FUNC_INFO << "Start time" << m_sampleTime;
KDbTransaction transaction = m_conn->beginTransaction();
KDbTransactionGuard tg(transaction);
@@ -482,7 +484,7 @@
values << level;
if (!m_conn->insertRecord(&fields, values)) {
- qDebug() << "error inserting record";
+ qDebug() << Q_FUNC_INFO << "error inserting record";
return;
}
tg.commit();
@@ -506,7 +508,7 @@
log_battery_level(battery_level);
if (battery_level <= 10 && battery_level < m_lastBatteryLevel && AmazfishConfig::instance()->appNotifyLowBattery()) {
- sendAlert("Amazfish", tr("Low Battery"), tr("Battery level now ") + QString::number(m_lastBatteryLevel) + "%");
+ sendAlert("Amazfish", tr("Low Battery"), tr("Battery level now ") + QString::number(battery_level) + "%");
}
m_lastBatteryLevel = battery_level;
}
@@ -587,7 +589,7 @@
action = AmazfishConfig::instance()->appButtonQuadPressAction();
}
- qDebug() << action;
+ qDebug() << Q_FUNC_INFO << "Action:" << action;
if (action == "action-music-next"){
m_musicController.next();
@@ -614,7 +616,7 @@
void DeviceInterface::onEventTimer()
{
- qDebug() << "DeviceInterface::onEventTimer";
+ qDebug() << Q_FUNC_INFO;
if (m_eventlist.isEmpty())
return;
watchfish::CalendarEvent event = m_eventlist.takeFirst();
@@ -644,7 +646,7 @@
void DeviceInterface::scheduleNextEvent()
{
- qDebug() << "DeviceInterface::scheduleNextEvent";
+ qDebug() << Q_FUNC_INFO;
if (m_eventlist.isEmpty())
return;
#ifdef MER_EDITION_SAILFISH
@@ -819,7 +821,8 @@
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/deviceinterface.h
^
|
@@ -77,6 +77,7 @@
Q_INVOKABLE void reloadCities();
Q_INVOKABLE void enableFeature(int feature);
Q_INVOKABLE void fetchLogs();
+ Q_INVOKABLE void requestScreenshot();
Q_INVOKABLE QStringList supportedDisplayItems();
private:
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/abstractdevice.cpp
^
|
@@ -27,9 +27,10 @@
QBLEDevice::pair();
}
+
void AbstractDevice::connectToDevice()
{
- qDebug() << "AbstractDevice::connectToDevice";
+ qDebug() << Q_FUNC_INFO;
m_pairing = false;
m_autoreconnect = true;
@@ -41,7 +42,7 @@
void AbstractDevice::disconnectFromDevice()
{
- qDebug() << "AbstractDevice::disconnectFromDevice";
+ qDebug() << Q_FUNC_INFO;
m_autoreconnect = false;
setConnectionState("disconnected");
@@ -51,9 +52,10 @@
void AbstractDevice::reconnectionTimer()
{
- qDebug() << "AbstractDevice::reconnectionTimer";
+ //qDebug() << Q_FUNC_INFO;
+
if ((!deviceProperty("Connected").toBool() && m_autoreconnect) || connectionState() == "authfailed") {
- qDebug() << "Lost connection";
+ qDebug() << Q_FUNC_INFO << "Lost connection";
QBLEDevice::disconnectFromDevice();
QBLEDevice::connectToDevice();
}
@@ -69,7 +71,7 @@
void AbstractDevice::setConnectionState(const QString &state)
{
- qDebug() << Q_FUNC_INFO << state;
+ qDebug() << Q_FUNC_INFO << "Connection state:" << state;
if (state != m_connectionState) {
m_connectionState = state;
emit connectionStateChanged();
@@ -136,7 +138,7 @@
void AbstractDevice::applyDeviceSetting(Settings s)
{
Q_UNUSED(s);
- emit message(tr("Device doen not support settings"));
+ emit message(tr("Device does not support settings"));
}
void AbstractDevice::rebootWatch()
@@ -186,6 +188,11 @@
Q_UNUSED(narrative)
}
+void AbstractDevice::requestScreenshot()
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
QStringList AbstractDevice::supportedDisplayItems() const
{
return QStringList();
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/abstractdevice.h
^
|
@@ -25,7 +25,8 @@
FEATURE_ALERT = 32,
FEATURE_EVENT_REMINDER = 64,
FEATURE_MUSIC_CONTROL = 128,
- FEATURE_BUTTON_ACTION = 256
+ FEATURE_BUTTON_ACTION = 256,
+ FEATURE_SCREENSHOT = 512,
};
Q_ENUM(Feature)
@@ -117,6 +118,7 @@
virtual void setMusicStatus(bool playing, const QString &title, const QString &artist, const QString &album, int duration = 0, int position = 0);
virtual void navigationRunning(bool running);
virtual void navigationNarrative(const QString &flag, const QString &narrative, const QString &manDist, int progress);
+ virtual void requestScreenshot();
virtual QStringList supportedDisplayItems() const;
//signals
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/asteroidosdevice.cpp
^
|
@@ -0,0 +1,325 @@
+#include "asteroidosdevice.h"
+
+#include "batteryservice.h"
+#include "asteroidtimeservice.h"
+#include "asteroidweatherservice.h"
+#include "asteroidnotificationservice.h"
+#include "asteroidmediaservice.h"
+#include "asteroidscreenshotservice.h"
+
+#include <QtXml/QtXml>
+
+
+AsteroidOSDevice::AsteroidOSDevice(const QString &pairedName, QObject *parent) : AbstractDevice(pairedName, parent)
+{
+ qDebug() << Q_FUNC_INFO << pairedName;
+ connect(this, &QBLEDevice::propertiesChanged, this, &AsteroidOSDevice::onPropertiesChanged, Qt::UniqueConnection);
+}
+
+int AsteroidOSDevice::supportedFeatures() const
+{
+ return FEATURE_WEATHER | FEATURE_WEATHER | FEATURE_ALERT | FEATURE_SCREENSHOT;
+//FEATURE_HRM | FEATURE_STEPS;
+}
+
+QString AsteroidOSDevice::deviceType() const
+{
+ return "asteroidos";
+}
+
+AbstractFirmwareInfo *AsteroidOSDevice::firmwareInfo(const QByteArray &bytes)
+{
+ qDebug() << Q_FUNC_INFO;
+ return nullptr;
+}
+
+void AsteroidOSDevice::sendAlert(const QString &sender, const QString &subject, const QString &message)
+{
+ qDebug() << Q_FUNC_INFO << sender << subject << message;
+
+ AsteroidNotificationService *notification = qobject_cast<AsteroidNotificationService*>(service(AsteroidNotificationService::UUID_SERVICE_NOTIFICATION));
+ if (notification) {
+ notification->sendAlert(sender, subject, message);
+ }
+
+}
+
+void AsteroidOSDevice::incomingCall(const QString &caller)
+{
+ qDebug() << Q_FUNC_INFO << caller;
+
+ AsteroidNotificationService *notification = qobject_cast<AsteroidNotificationService*>(service(AsteroidNotificationService::UUID_SERVICE_NOTIFICATION));
+ if (notification) {
+ notification->incomingCall(caller);
+ }
+
+}
+
+
+void AsteroidOSDevice::pair()
+{
+ qDebug() << Q_FUNC_INFO;
+
+ m_needsAuth = true;
+ m_pairing = true;
+ m_autoreconnect = true;
+ //disconnectFromDevice();
+ setConnectionState("pairing");
+ emit connectionStateChanged();
+
+ QBLEDevice::connectToDevice();
+}
+
+
+/*
+//Firmware handling
+AbstractFirmwareInfo * AsteroidOSDevice::firmwareInfo(const QByteArray &bytes) = 0; //Caller owns the pointer and should delete it
+void AsteroidOSDevice::prepareFirmwareDownload(const AbstractFirmwareInfo* info);
+void AsteroidOSDevice::startDownload();
+
+void AsteroidOSDevice::downloadSportsData();
+void AsteroidOSDevice::refreshInformation();
+QString AsteroidOSDevice::information(Info i) const;
+void AsteroidOSDevice::applyDeviceSetting(Settings s);
+void AsteroidOSDevice::rebootWatch();
+void AsteroidOSDevice::sendEventReminder(int id, const QDateTime &dt, const QString &event);
+void AsteroidOSDevice::enableFeature(AbstractDevice::Feature feature);
+void AsteroidOSDevice::setMusicStatus(bool playing, const QString &title, const QString &artist, const QString &album, int duration = 0, int position = 0);
+void AsteroidOSDevice::navigationRunning(bool running);
+void AsteroidOSDevice::navigationNarrative(const QString &flag, const QString &narrative, const QString &manDist, int progress);
+QStringList AsteroidOSDevice::supportedDisplayItems() const;
+*/
+
+
+void AsteroidOSDevice::onPropertiesChanged(QString interface, QVariantMap map, QStringList list)
+{
+ qDebug() << Q_FUNC_INFO << interface << map << list;
+
+ if (interface == "org.bluez.Device1") {
+ m_reconnectTimer->start();
+ if (deviceProperty("ServicesResolved").toBool() ) {
+ initialise();
+ }
+ if (map.contains("Connected")) {
+ bool value = map["Connected"].toBool();
+
+ if (!value) {
+ setConnectionState("disconnected");
+ } else {
+ setConnectionState("connected");
+ }
+ }
+ }
+
+}
+
+
+void AsteroidOSDevice::parseServices()
+{
+ qDebug() << Q_FUNC_INFO;
+
+ QDBusInterface adapterIntro("org.bluez", devicePath(), "org.freedesktop.DBus.Introspectable", QDBusConnection::systemBus(), 0);
+ QDBusReply<QString> xml = adapterIntro.call("Introspect");
+
+ qDebug() << "Resolved services...";
+
+ qDebug().noquote() << xml.value();
+
+ QDomDocument doc;
+ doc.setContent(xml.value());
+
+ QDomNodeList nodes = doc.elementsByTagName("node");
+
+ qDebug() << nodes.count() << "nodes";
+
+ for (int x = 0; x < nodes.count(); x++)
+ {
+ QDomElement node = nodes.at(x).toElement();
+ QString nodeName = node.attribute("name");
+
+ if (nodeName.startsWith("service")) {
+ QString path = devicePath() + "/" + nodeName;
+
+ QDBusInterface devInterface("org.bluez", path, "org.bluez.GattService1", QDBusConnection::systemBus(), 0);
+ QString uuid = devInterface.property("UUID").toString();
+
+ qDebug() << "Creating service for: " << uuid;
+
+ if (uuid == BatteryService::UUID_SERVICE_BATTERY && !service(BatteryService::UUID_SERVICE_BATTERY)) {
+ addService(BatteryService::UUID_SERVICE_BATTERY, new BatteryService(path, this));
+ } else if (uuid == AsteroidTimeService::UUID_SERVICE_ASTEROID_TIME && !service(AsteroidTimeService::UUID_SERVICE_ASTEROID_TIME)) {
+ addService(AsteroidTimeService::UUID_SERVICE_ASTEROID_TIME, new AsteroidTimeService(path, this));
+ } else if (uuid == AsteroidWeatherService::UUID_SERVICE_WEATHER && !service(AsteroidWeatherService::UUID_SERVICE_WEATHER)) {
+ addService(AsteroidWeatherService::UUID_SERVICE_WEATHER, new AsteroidWeatherService(path, this));
+ } else if (uuid == AsteroidNotificationService::UUID_SERVICE_NOTIFICATION && !service(AsteroidNotificationService::UUID_SERVICE_NOTIFICATION)) {
+ addService(AsteroidNotificationService::UUID_SERVICE_NOTIFICATION, new AsteroidNotificationService(path, this));
+ } else if (uuid == AsteroidMediaService::UUID_SERVICE_MEDIA && !service(AsteroidMediaService::UUID_SERVICE_MEDIA )) {
+ addService(AsteroidMediaService::UUID_SERVICE_MEDIA , new AsteroidMediaService(path, this));
+ } else if (uuid == AsteroidScreenshotService::UUID_SERVICE_SCREENSHOT && !service(AsteroidScreenshotService::UUID_SERVICE_SCREENSHOT )) {
+ addService(AsteroidScreenshotService::UUID_SERVICE_SCREENSHOT, new AsteroidScreenshotService(path, this));
+ } else if ( !service(uuid)) {
+ addService(uuid, new QBLEService(uuid, path, this));
+ }
+ }
+ }
+ setConnectionState("authenticated");
+}
+
+void AsteroidOSDevice::initialise()
+{
+ qDebug() << Q_FUNC_INFO;
+ setConnectionState("connected");
+ parseServices();
+
+ AsteroidNotificationService *notification = qobject_cast<AsteroidNotificationService*>(service(AsteroidNotificationService::UUID_SERVICE_NOTIFICATION));
+ if (notification) {
+// notification->enableNotification(AsteroidNotificationService::UUID_CHARACTERISTIC_ALERT_NOTIFICATION_EVENT);
+// connect(alert, &AlertNotificationService::serviceEvent, this, &PinetimeJFDevice::serviceEvent, Qt::UniqueConnection);
+ }
+
+
+ BatteryService *battery = qobject_cast<BatteryService*>(service(BatteryService::UUID_SERVICE_BATTERY));
+ if (battery) {
+ connect(battery, &BatteryService::informationChanged, this, &AsteroidOSDevice::informationChanged, Qt::UniqueConnection);
+ }
+
+
+ AsteroidTimeService *ats = qobject_cast<AsteroidTimeService*>(service(AsteroidTimeService::UUID_SERVICE_ASTEROID_TIME));
+ if (ats) {
+ ats->setCurrentTime();
+ }
+
+
+ AsteroidMediaService *ms = qobject_cast<AsteroidMediaService*>(service(AsteroidMediaService::UUID_SERVICE_MEDIA));
+ if (ms) {
+ ms->enableNotification(AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_COMMAND);
+ connect(ms, &AsteroidMediaService::serviceEvent, this, &AsteroidOSDevice::serviceEvent, Qt::UniqueConnection);
+ }
+
+ AsteroidScreenshotService *screenshot = qobject_cast<AsteroidScreenshotService*>(service(AsteroidScreenshotService::UUID_SERVICE_SCREENSHOT));
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/asteroidosdevice.h
^
|
@@ -0,0 +1,69 @@
+#ifndef ASTEROID_OS_DEVICE__H
+#define ASTEROID_OS_DEVICE__H
+
+#include "abstractdevice.h"
+
+class AsteroidOSDevice : public AbstractDevice
+{
+ Q_OBJECT
+
+public:
+ explicit AsteroidOSDevice(const QString &pairedName, QObject *parent = nullptr);
+
+ virtual int supportedFeatures() const override;
+ virtual QString deviceType() const override;
+ virtual void sendAlert(const QString &sender, const QString &subject, const QString &message) override;
+ virtual void incomingCall(const QString &caller) override;
+ virtual AbstractFirmwareInfo *firmwareInfo(const QByteArray &bytes) override;
+ virtual void setMusicStatus(bool playing, const QString &title, const QString &artist, const QString &album, int duration = 0, int position = 0) override;
+ virtual void requestScreenshot() override;
+
+protected:
+ virtual void onPropertiesChanged(QString interface, QVariantMap map, QStringList list);
+
+private:
+ void parseServices();
+ void initialise();
+
+ virtual void pair() override;
+
+ Q_SLOT void authenticated(bool ready);
+
+ virtual void refreshInformation() override;
+ virtual void sendWeather(CurrentWeather *weather) override;
+
+ Q_SLOT void serviceEvent(const QString &characteristic, uint8_t event, uint8_t data);
+
+ Q_SLOT void screenshotReceived(QByteArray data);
+
+
+ int m_prevVolume = 50;
+
+
+/*
+
+ virtual void connectToDevice() override;
+ virtual void disconnectFromDevice() override;
+ virtual QString connectionState() const;
+
+ QString deviceName() const;
+ virtual void abortOperations();
+
+ //Firmware handling
+ virtual AbstractFirmwareInfo *firmwareInfo(const QByteArray &bytes) = 0; //Caller owns the pointer and should delete it
+ virtual void prepareFirmwareDownload(const AbstractFirmwareInfo* info);
+ virtual void startDownload();
+
+ virtual void downloadSportsData();
+ virtual QString information(Info i) const;
+ virtual void applyDeviceSetting(Settings s);
+ virtual void rebootWatch();
+ virtual void sendEventReminder(int id, const QDateTime &dt, const QString &event);
+ virtual void enableFeature(AbstractDevice::Feature feature);
+ virtual void navigationRunning(bool running);
+ virtual void navigationNarrative(const QString &flag, const QString &narrative, const QString &manDist, int progress);
+ virtual QStringList supportedDisplayItems() const;
+*/
+};
+
+#endif // ASTEROID_OS_DEVICE__H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/banglejsdevice.cpp
^
|
@@ -5,7 +5,7 @@
BangleJSDevice::BangleJSDevice(const QString &pairedName, QObject *parent) : AbstractDevice(pairedName, parent)
{
- qDebug() << "BangleJSDevice:: " << pairedName;
+ qDebug() << Q_FUNC_INFO << pairedName;
connect(this, &QBLEDevice::propertiesChanged, this, &BangleJSDevice::onPropertiesChanged, Qt::UniqueConnection);
}
@@ -151,7 +151,6 @@
bool value = map["Connected"].toBool();
if (!value) {
- qDebug() << "DisConnected!";
setConnectionState("disconnected");
} else {
setConnectionState("connected");
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/bipdevice.cpp
^
|
@@ -108,7 +108,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service" << m_pairing << m_needsAuth;
+ qDebug() << "Got MiBand2 service" << m_pairing << m_needsAuth;
connect(mi2, &MiBand2Service::authenticated, this, &HuamiDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/bipfirmwareinfo.cpp
^
|
@@ -11,12 +11,11 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16;
}
void BipFirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(RES_HEADER)) || m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER))) {
@@ -37,7 +36,7 @@
}
if (m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(FW_HEADER))) {
m_version = m_crcMap[m_crc16];
- qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+ qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
m_type = Firmware;
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/biplitedevice.cpp
^
|
@@ -4,7 +4,7 @@
BipLiteDevice::BipLiteDevice(const QString &pairedName, QObject *parent) : BipDevice(pairedName, parent)
{
- qDebug() << "Creating Bip Lite Device";
+ qDebug() << Q_FUNC_INFO;
}
QString BipLiteDevice::deviceType() const
@@ -14,6 +14,8 @@
void BipLiteDevice::initialise()
{
+ qDebug() << Q_FUNC_INFO;
+
setConnectionState("connected");
parseServices();
@@ -32,7 +34,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service";
+ qDebug() << "Got MiBand2 service";
connect(mi2, &MiBand2Service::authenticated, this, &BipDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
@@ -61,7 +63,7 @@
void BipLiteDevice::parseServices()
{
- qDebug() << "BipLiteDevice::parseServices";
+ qDebug() << Q_FUNC_INFO;
QDBusInterface adapterIntro("org.bluez", devicePath(), "org.freedesktop.DBus.Introspectable", QDBusConnection::systemBus(), 0);
QDBusReply<QString> xml = adapterIntro.call("Introspect");
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/biplitefirmwareinfo.cpp
^
|
@@ -11,13 +11,12 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16;
}
void BipLiteFirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(RES_HEADER)) || m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER))) {
@@ -38,7 +37,7 @@
}
if (m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(FW_HEADER))) {
m_version = m_crcMap[m_crc16];
- qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+ qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
if (!m_version.isEmpty()) {
if ((m_version >= "0.0.8.00") && (m_version <= "1.2.0.00")) {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/bipsdevice.cpp
^
|
@@ -46,7 +46,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service" << m_pairing << m_needsAuth;
+ qDebug() << "Got MiBand2 service" << m_pairing << m_needsAuth;
connect(mi2, &MiBand2Service::authenticated, this, &HuamiDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gtr2firmwareinfo.cpp
^
|
@@ -9,18 +9,17 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16 << m_crc32;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16 << m_crc32;
}
bool Gtr2FirmwareInfo::supportedOnDevice(const QString &device) const
{
- qDebug() << "Checking if device suppoerted: " << device;
+ qDebug() << "Checking if device is supported: " << device;
return device == "Amazfit GTR 2" && m_type != Invalid && !m_version.contains("unknown");
}
void Gtr2FirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER)) == COMPRESSED_RES_HEADER_OFFSET_NEW) {
@@ -37,7 +36,7 @@
}
// if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(FW_HEADER2)) == FW_OFFSET) {
// m_version = m_crcMap[m_crc16];
-// qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+// qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
// m_type = Firmware;
// }
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gtrdevice.cpp
^
|
@@ -44,7 +44,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service";
+ qDebug() << "Got MiBand2 service";
connect(mi2, &MiBand2Service::authenticated, this, &HuamiDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
@@ -75,7 +75,7 @@
QString revision = softwareRevision();
if (revision > "1.3.5.79" || // For GTR 47mm
(!is47mm(revision) && revision >= "0.1.1.15")) { // for GTR 32mm with a different version scheme
- qDebug() << "GTR with new FW";
+ qDebug() << Q_FUNC_INFO << "GTR with new FW";
m_ActivitySampleSize = 8;
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gtrfirmwareinfo.cpp
^
|
@@ -10,12 +10,11 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16 << m_crc32;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16 << m_crc32;
}
void GtrFirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER)) == COMPRESSED_RES_HEADER_OFFSET_NEW) {
@@ -32,7 +31,7 @@
}
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(FW_HEADER2)) == FW_OFFSET) {
m_version = m_crcMap[m_crc16];
- qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+ qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
m_type = Firmware;
}
@@ -50,7 +49,7 @@
bool GtrFirmwareInfo::supportedOnDevice(const QString &device) const
{
- qDebug() << "Checking if device suppoerted: " << device;
+ qDebug() << "Checking if device is supported: " << device;
return device == "Amazfit GTR" && m_type != Invalid && !m_version.contains("unknown");
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gts2device.cpp
^
|
@@ -65,7 +65,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service";
+ qDebug() << "Got MiBand2 service";
connect(mi2, &MiBand2Service::authenticated, this, &HuamiDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gts2firmwareinfo.cpp
^
|
@@ -9,18 +9,17 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16 << m_crc32;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16 << m_crc32;
}
bool Gts2FirmwareInfo::supportedOnDevice(const QString &device) const
{
- qDebug() << "Checking if device suppoerted: " << device;
+ qDebug() << "Checking if device is supported: " << device;
return device == "Amazfit GTS 2" && m_type != Invalid && !m_version.contains("unknown");
}
void Gts2FirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER)) == COMPRESSED_RES_HEADER_OFFSET_NEW) {
@@ -37,7 +36,7 @@
}
// if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(FW_HEADER2)) == FW_OFFSET) {
// m_version = m_crcMap[m_crc16];
-// qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+// qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
// m_type = Firmware;
// }
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gtsdevice.cpp
^
|
@@ -96,7 +96,7 @@
MiBand2Service *mi2 = qobject_cast<MiBand2Service*>(service(MiBand2Service::UUID_SERVICE_MIBAND2));
if (mi2) {
- qDebug() << "Got mi2 service";
+ qDebug() << "Got MiBand2 service";
connect(mi2, &MiBand2Service::authenticated, this, &HuamiDevice::authenticated, Qt::UniqueConnection);
connect(mi2, &QBLEService::operationRunningChanged, this, &QBLEDevice::operationRunningChanged, Qt::UniqueConnection);
@@ -123,7 +123,7 @@
QString revision = softwareRevision();
if (revision > "0.0.9.0") {
- qDebug() << "GTS with new FW";
+ qDebug() << Q_FUNC_INFO << "GTS with new FW";
m_ActivitySampleSize = 8;
}
}
@@ -199,7 +199,7 @@
//06 Date/Time (6)
//00
//MESSAGE
- qDebug() << dt << event;
+ qDebug() << Q_FUNC_INFO << dt << event;
QByteArray cmd;
cmd += (char)0x0b;
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/gtsfirmwareinfo.cpp
^
|
@@ -12,12 +12,11 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16 << m_crc32;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16 << m_crc32;
}
void GtsFirmwareInfo::determineFirmwareType() {
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(NEWRES_HEADER)) == COMPRESSED_RES_HEADER_OFFSET_NEW) {
@@ -34,7 +33,7 @@
}
if (m_bytes.indexOf(UCHARARR_TO_BYTEARRAY(FW_HEADER2)) == FW_OFFSET) {
m_version = m_crcMap[m_crc16];
- qDebug() << "Version:" << m_version << "CRC:" << m_crc16;
+ qDebug() << Q_FUNC_INFO << "Version:" << m_version << "CRC:" << m_crc16;
m_type = Firmware;
}
@@ -52,7 +51,7 @@
bool GtsFirmwareInfo::supportedOnDevice(const QString &device) const
{
- qDebug() << "Checking if device suppoerted: " << device;
+ qDebug() << "Checking if device is supported: " << device;
return device == "Amazfit GTS" && m_type != Invalid && !m_version.contains("unknown");
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/infinitimefirmwareinfo.cpp
^
|
@@ -12,8 +12,7 @@
determineFirmwareType();
determineFirmwareVersion();
- //qDebug() << mBytes;
- qDebug() << m_type << m_version << m_crc16;
+ qDebug() << Q_FUNC_INFO << m_type << m_version << m_crc16;
}
bool InfinitimeFirmwareInfo::supportedOnDevice(const QString &device) const
@@ -23,7 +22,7 @@
void InfinitimeFirmwareInfo::determineFirmwareType()
{
- qDebug() << "Determining firmware type";
+ qDebug() << Q_FUNC_INFO << "Determining firmware type";
m_type = Invalid;
if (m_bytes.startsWith(UCHARARR_TO_BYTEARRAY(ZIP_HEADER))) {
@@ -36,12 +35,12 @@
auto* root = zip.directory();
if(root->entry("manifest.json") != nullptr)
{
- qDebug() << "DFU file detected";
+ qDebug() << Q_FUNC_INFO << "DFU file detected";
m_type = Firmware;
}
else if(root->entry("resources.json") != nullptr)
{
- qDebug() << "Resource file detected";
+ qDebug() << Q_FUNC_INFO << "Resource file detected";
m_type = Res_Compressed;
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/devices/pinetimejfdevice.cpp
^
|
@@ -50,13 +50,13 @@
PinetimeJFDevice::PinetimeJFDevice(const QString &pairedName, QObject *parent) : AbstractDevice(pairedName, parent)
{
- qDebug() << "PinetimeJFDevice:: " << pairedName;
+ qDebug() << Q_FUNC_INFO << pairedName;
connect(this, &QBLEDevice::propertiesChanged, this, &PinetimeJFDevice::onPropertiesChanged, Qt::UniqueConnection);
}
void PinetimeJFDevice::pair()
{
- qDebug() << "AbstractDevice::pair";
+ qDebug() << Q_FUNC_INFO;
m_needsAuth = false;
m_pairing = true;
@@ -94,7 +94,7 @@
{
AlertNotificationService *alert = qobject_cast<AlertNotificationService*>(service(AlertNotificationService::UUID_SERVICE_ALERT_NOTIFICATION));
if (alert) {
- qDebug() << "PT Have an alert service";
+ qDebug() << Q_FUNC_INFO << "Have an alert service";
alert->sendAlert(sender, subject, message);
}
}
@@ -110,7 +110,7 @@
void PinetimeJFDevice::parseServices()
{
- qDebug() << "PinetimeJFDevice::parseServices";
+ qDebug() << Q_FUNC_INFO;
QDBusInterface adapterIntro("org.bluez", devicePath(), "org.freedesktop.DBus.Introspectable", QDBusConnection::systemBus(), 0);
QDBusReply<QString> xml = adapterIntro.call("Introspect");
@@ -241,7 +241,7 @@
if (!m_conn || !(m_conn->isDatabaseUsed())) {
- qDebug() << "Database not connected";
+ qDebug() << Q_FUNC_INFO << "Database not connected";
return;
}
@@ -287,7 +287,7 @@
void PinetimeJFDevice::onPropertiesChanged(QString interface, QVariantMap map, QStringList list)
{
- qDebug() << "PinetimeJFDevice::onPropertiesChanged:" << interface << map << list;
+ qDebug() << Q_FUNC_INFO << interface << map << list;
if (interface == "org.bluez.Device1") {
m_reconnectTimer->start();
@@ -298,7 +298,6 @@
bool value = map["Connected"].toBool();
if (!value) {
- qDebug() << "DisConnected!";
setConnectionState("disconnected");
} else {
setConnectionState("connected");
@@ -310,7 +309,7 @@
void PinetimeJFDevice::authenticated(bool ready)
{
- qDebug() << "PinetimeJFDevice::authenticated:" << ready;
+ qDebug() << Q_FUNC_INFO << ready;
if (ready) {
setConnectionState("authenticated");
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/abstractfetchoperation.cpp
^
|
@@ -19,7 +19,7 @@
//QTimeZone tz = QTimeZone(QTimeZone::systemTimeZone().standardTimeOffset(QDateTime::currentDateTime())); //Getting the timezone without DST
//Convert the last sync time, which is seconds since epoch, to a qdatetime in the local timezone
- qDebug() << "last sync was " << ls << QDateTime::fromMSecsSinceEpoch(ls, Qt::LocalTime);
+ qDebug() << Q_FUNC_INFO << ": Last sync was " << ls << QDateTime::fromMSecsSinceEpoch(ls, Qt::LocalTime);
return QDateTime::fromMSecsSinceEpoch(ls, Qt::LocalTime);
}
@@ -46,10 +46,10 @@
bool AbstractFetchOperation::handleMetaData(const QByteArray &value)
{
if (m_abort) {
- qDebug() << "Abort signalled from operation";
+ qDebug() << Q_FUNC_INFO << ": Abort signalled from operation";
return true;
}
- qDebug() << "AbstractFetchOperation::handleMetaData:" << value;
+ qDebug() << Q_FUNC_INFO << value;
if (value.length() == 15) {
// first two bytes are whether our request was accepted
if (value.mid(0, 3) == UCHARARR_TO_BYTEARRAY(MiBandService::RESPONSE_ACTIVITY_DATA_START_DATE_SUCCESS)) {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/activityfetchoperation.cpp
^
|
@@ -16,8 +16,7 @@
{
setStartDate(lastActivitySync());
-
- qDebug() << "last activity sync was" << startDate();
+ qDebug() << Q_FUNC_INFO << ": Last sync was " << startDate();
QByteArray rawDate = TypeConversion::dateTimeToBytes(startDate().toUTC(), 0, false);
@@ -33,14 +32,14 @@
int len = data.length();
if (len % m_sampleSize != 1) {
- qDebug() << "Unexpected data size";
+ qDebug() << Q_FUNC_INFO << "Unexpected data size";
return;
}
for (int i = 1; i < len; i+=m_sampleSize) {
ActivitySample sample(data[i] & 0xff, data[i + 1] & 0xff, data[i + 2] & 0xff, data[i + 3] & 0xff);
if (m_sampleSize == 8) {
- qDebug() << "Sample data missed:" << (data[i + 4] & 0xff) << (data[i + 5] & 0xff) << (data[i + 6] & 0xff) << (data[i + 7] & 0xff);
+ qDebug() << Q_FUNC_INFO << "Sample data missed:" << (data[i + 4] & 0xff) << (data[i + 5] & 0xff) << (data[i + 6] & 0xff) << (data[i + 7] & 0xff);
}
m_samples << (sample);
}
@@ -53,10 +52,10 @@
//store the successful samples
saved = saveSamples();
m_sampleTime.setTimeSpec(Qt::LocalTime);
- qDebug() << "Last sample time saved as " << m_sampleTime.toString() << m_sampleTime.offsetFromUtc() << m_sampleTime.toMSecsSinceEpoch();
+ qDebug() << Q_FUNC_INFO << "Last sample time saved as " << m_sampleTime.toString() << m_sampleTime.offsetFromUtc() << m_sampleTime.toMSecsSinceEpoch();
saveLastActivitySync(m_sampleTime.toMSecsSinceEpoch());
- qDebug() << "finished fetch operation, last record was " << m_sampleTime;
+ qDebug() << Q_FUNC_INFO << "Last record was " << m_sampleTime;
}
return saved;
}
@@ -68,12 +67,12 @@
}
if (!m_conn || !(m_conn->isDatabaseUsed())) {
- qDebug() << "Database not connected";
+ qDebug() << Q_FUNC_INFO << "Database not connected";
return false;
}
m_sampleTime = startDate();
- qDebug() << "Start sample time" << m_sampleTime;
+ qDebug() << Q_FUNC_INFO << "Start sample time" << m_sampleTime;
auto config = AmazfishConfig::instance();
uint id = qHash(config->profileName());
@@ -107,7 +106,7 @@
values << m_samples[i].heartrate();
if (!m_conn->insertRecord(&fields, values)) {
- qDebug() << "error inserting record";
+ qDebug() << Q_FUNC_INFO << "error inserting record";
return false;
}
m_sampleTime = m_sampleTime.addSecs(60);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/dfuoperation.cpp
^
|
@@ -59,7 +59,7 @@
{
if (m_workerThread.isRunning()) {
m_workerThread.requestInterruption();
- qDebug() << "Waiting for thread to finish";
+ qDebug() << Q_FUNC_INFO << "Waiting for thread to finish";
m_workerThread.quit();
m_workerThread.wait();
qDebug() << Q_FUNC_INFO << "Done";
@@ -73,6 +73,8 @@
KCompressionDevice dev(in.device(), false, KCompressionDevice::CompressionType::None);
KZip zip(&dev);
+ qDebug() << Q_FUNC_INFO;
+
if(!zip.open(QIODevice::ReadOnly))
{
qDebug() << "Cannot open the firmware archive";
@@ -147,7 +149,7 @@
qDebug() << Q_FUNC_INFO << value;
if (!(value.length() == 3 || value.length() == 5)) {
- qDebug() << "Notifications should be 3 or 5 bytes long.";
+ qDebug() << Q_FUNC_INFO << "Notifications should be 3 or 5 bytes long.";
return false;
}
bool success = value[2] == DfuService::ERROR_NO_ERROR;
@@ -254,7 +256,7 @@
{
m_outstandingPacketNotifications++;
if (m_outstandingPacketNotifications > 3) { //Watch hasnt responded
- qDebug() << "Watch has missed 3 response packets, aborting";
+ qDebug() << Q_FUNC_INFO << "Watch has missed 3 response packets, aborting";
m_workerThread.requestInterruption();
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/dfuworker.cpp
^
|
@@ -53,8 +53,8 @@
QByteArray lastChunk = fwBytes.mid(packets * packetLength);
service->writeValue(DfuService::UUID_CHARACTERISTIC_DFU_PACKET, lastChunk);
}
- qDebug() << "Finished sending firmware";
+ qDebug() << Q_FUNC_INFO << "Finished sending firmware";
}
- qDebug() << "Finished worker";
+ qDebug() << Q_FUNC_INFO << "Finished worker";
emit done();
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/huamiupdatefirmwareoperation2020.cpp
^
|
@@ -158,7 +158,7 @@
bytes[i++] = sizeBytes[1];
bytes[i++] = sizeBytes[2];
bytes[i] = sizeBytes[3];
- qDebug() << "Sending FW info" <<bytes;
+ qDebug() << Q_FUNC_INFO << "Sending FW info" <<bytes;
m_service->writeValue(BipFirmwareService::UUID_CHARACTERISTIC_FIRMWARE, bytes);
return true;
@@ -206,7 +206,7 @@
progressPercent = (int) ((((float) (offset + chunkLength)) / len) * 100);
serv->downloadProgress(progressPercent);
- qDebug() << "Finished sending chunk";
+ qDebug() << Q_FUNC_INFO << "Finished sending chunk";
return true;
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/huamiupdatefirmwareoperation2020.h
^
|
@@ -34,4 +34,4 @@
int mChunkLength = -1;
};
-#endif // UPDATEFIRMWAREOPERATIONNEW_H
+#endif // HUAMIUPDATEFIRMWAREOPERATION2020_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/logfetchoperation.cpp
^
|
@@ -11,9 +11,9 @@
{
QDir cachelocation = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
if (!cachelocation.exists()) {
- qDebug() << "Creating cahe amazfish folder";
+ qDebug() << Q_FUNC_INFO << "Creating amazfish cache folder";
if (!cachelocation.mkpath("logs")) {
- qDebug() << "Error creating amazfish logs folder!";
+ qDebug() << Q_FUNC_INFO << "Error creating amazfish logs folder!";
return;
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/sportsdetailoperation.h
^
|
@@ -31,4 +31,4 @@
bool save();
};
-#endif // SPORTSSUMMARYOPERATION_H
+#endif // SPORTSDETAILOPERATION_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/sportssummaryoperation.cpp
^
|
@@ -141,7 +141,7 @@
setStartDate(lastActivitySync());
m_lastPacketCounter = -1;
- qDebug() << "last summary sync was" << startDate();
+ qDebug() << Q_FUNC_INFO << ": Last sync was " << startDate();
QByteArray rawDate = TypeConversion::dateTimeToBytes(startDate().toUTC(), 0, false);
@@ -155,11 +155,11 @@
void SportsSummaryOperation::handleData(const QByteArray &data)
{
if (data.length() < 2) {
- qDebug() << "unexpected sports summary data length: " << data.length();
+ qDebug() << Q_FUNC_INFO << "unexpected sports summary data length: " << data.length();
return;
}
- qDebug() << "Data counter:" << data[0];
+ qDebug() << Q_FUNC_INFO << "Data counter:" << data[0];
if ((m_lastPacketCounter + 1) == data[0] ) {
m_lastPacketCounter++;
if (m_lastPacketCounter > 255) {
@@ -167,7 +167,7 @@
}
m_buffer += data.mid(1);
} else {
- qDebug() << "invalid package counter: " << data[0] << ", last was: " << m_lastPacketCounter;
+ qDebug() << Q_FUNC_INFO << "invalid package counter: " << data[0] << ", last was: " << m_lastPacketCounter;
finished(false);
return;
}
@@ -185,13 +185,13 @@
void SportsSummaryOperation::parseSummary()
{
- qDebug() << "Buffer:" << m_buffer.toHex();
+ qDebug() << Q_FUNC_INFO << "Buffer:" << m_buffer.toHex();
summary_t summaryData;
memcpy(&summaryData, m_buffer.data(), sizeof(summary_t));
ActivityKind::Type activityKind = ActivityKind::fromBipType(ActivityKind::Type(summaryData.kind));
- qDebug() << summaryData.version << summaryData.kind << summaryData.timestamp_start << summaryData.timestamp_end;
+ qDebug() << Q_FUNC_INFO << summaryData.version << summaryData.kind << summaryData.timestamp_start << summaryData.timestamp_end;
long duration = summaryData.timestamp_end - summaryData.timestamp_start;
m_summary.setStartTime(startDate());
@@ -328,6 +328,6 @@
QString SportsSummaryOperation::activityName()
{
- qDebug() << "Getting activity name";
+ qDebug() << Q_FUNC_INFO << "Getting activity name";
return (ActivityKind::toString(m_summary.activityKind())) + "-" + m_summary.startTime().toLocalTime().toString("yyyyMMdd-HHmm");
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/operations/updatefirmwareoperation.cpp
^
|
@@ -31,7 +31,7 @@
bool UpdateFirmwareOperation::handleMetaData(const QByteArray &value)
{
- qDebug() << "UpdateFirmwareOperation::handleMetaData:" << value;
+ qDebug() << Q_FUNC_INFO << value;
if (!(value.length() == 3 || value.length() == 11)) {
qDebug() << "Notifications should be 3 or 11 bytes long.";
@@ -81,7 +81,7 @@
return false;
}
- qDebug() << "Unexpected notification during firmware update: ";
+ qDebug() << Q_FUNC_INFO << "Unexpected notification during firmware update: ";
m_service->message(QObject::tr("Update operation failed, unexpected metadata"));
return true;
@@ -154,7 +154,7 @@
m_service->writeValue(BipFirmwareService::UUID_CHARACTERISTIC_FIRMWARE_DATA, lastChunk);
}
- qDebug() << "Finished sending firmware";
+ qDebug() << Q_FUNC_INFO << "Finished sending firmware";
serv->downloadProgress(100);
m_service->writeValue(BipFirmwareService::UUID_CHARACTERISTIC_FIRMWARE, QByteArray(1, BipFirmwareService::COMMAND_FIRMWARE_UPDATE_SYNC));
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/alertnotificationservice.cpp
^
|
@@ -15,9 +15,9 @@
void AlertNotificationService::sendAlert(const QString &sender, const QString &subject, const QString &message)
{
- qDebug() << "Alert:" << sender << subject << message;
+ qDebug() << Q_FUNC_INFO << "Alert:" << sender << subject << message;
- int category = 0xfa; //Custom Huami icon
+ int category = AlertCategory::CustomHuami;
int icon = mapSenderToIcon(sender);
if (sender == "Messages") { //SMS must use category, not icon
@@ -30,7 +30,9 @@
QByteArray send = QByteArray(1, category) + QByteArray(1, 1); //1 alert
- send += QByteArray(1, mapSenderToIcon(sender));
+ if (category == AlertCategory::CustomHuami) {
+ send += QByteArray(1, icon);
+ }
send += sender.left(32).toUtf8() + QByteArray(1, m_seperatorChar); //Bip needs 0x00 for seperator, others may be different
if (!subject.isEmpty()) {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/alertnotificationservice.h
^
|
@@ -37,7 +37,7 @@
// 251-255 defined by service specification
Any = 255,
Custom = -1,
- CustomHuami = 250
+ CustomHuami = 250 // 0xfa
};
Q_ENUM(AlertCategory)
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidmediaservice.cpp
^
|
@@ -0,0 +1,49 @@
+#include "asteroidmediaservice.h"
+#include "typeconversion.h"
+
+const char* AsteroidMediaService::UUID_SERVICE_MEDIA = "00007071-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_TITLE = "00007001-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_ALBUM = "00007002-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_ARTIST = "00007003-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_STATUS = "00007004-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_COMMAND = "00007005-0000-0000-0000-00a57e401d05";
+const char* AsteroidMediaService::UUID_CHARACTERISTIC_MEDIA_VOLUME = "00007006-0000-0000-0000-00a57e401d05";
+
+AsteroidMediaService::AsteroidMediaService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_MEDIA, path, parent)
+{
+ qDebug() << Q_FUNC_INFO;
+ setVolume(50);
+ connect(this, &QBLEService::characteristicChanged, this, &AsteroidMediaService::characteristicChanged);
+}
+
+void AsteroidMediaService::setStatus(bool playing)
+{
+ writeValue(UUID_CHARACTERISTIC_MEDIA_STATUS, playing ? QByteArray(1, char(0x01)) : QByteArray(1, char(0x00)));
+}
+
+void AsteroidMediaService::setArtist(const QString &artist)
+{
+ writeValue(UUID_CHARACTERISTIC_MEDIA_ARTIST, artist.toLocal8Bit());
+}
+
+void AsteroidMediaService::setTrack(const QString &track)
+{
+ writeValue(UUID_CHARACTERISTIC_MEDIA_TITLE, track.toLocal8Bit());
+}
+
+void AsteroidMediaService::setAlbum(const QString &album)
+{
+ writeValue(UUID_CHARACTERISTIC_MEDIA_ALBUM, album.toLocal8Bit());
+}
+
+void AsteroidMediaService::setVolume(const int volume)
+{
+ writeValue(UUID_CHARACTERISTIC_MEDIA_VOLUME, TypeConversion::fromInt8(volume));
+}
+
+void AsteroidMediaService::characteristicChanged(const QString &c, const QByteArray &value)
+{
+// qDebug() << Q_FUNC_INFO << c << value;
+ emit serviceEvent(c, value[0], value[1]);
+}
+
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidmediaservice.h
^
|
@@ -0,0 +1,42 @@
+#ifndef ASTEROID_MEDIA_SERVICE_H
+#define ASTEROID_MEDIA_SERVICE_H
+
+#include <QObject>
+#include "qble/qbleservice.h"
+#include "abstractdevice.h"
+
+class AsteroidMediaService : public QBLEService
+{
+ Q_OBJECT
+public:
+ AsteroidMediaService(const QString &path, QObject *parent);
+
+ static const char* UUID_SERVICE_MEDIA;
+ static const char* UUID_CHARACTERISTIC_MEDIA_TITLE;
+ static const char* UUID_CHARACTERISTIC_MEDIA_ALBUM;
+ static const char* UUID_CHARACTERISTIC_MEDIA_ARTIST;
+ static const char* UUID_CHARACTERISTIC_MEDIA_STATUS;
+ static const char* UUID_CHARACTERISTIC_MEDIA_COMMAND;
+ static const char* UUID_CHARACTERISTIC_MEDIA_VOLUME;
+
+ static const uint8_t EVENT_MEDIA_PREV = 0x00;
+ static const uint8_t EVENT_MEDIA_NEXT = 0x01;
+ static const uint8_t EVENT_MEDIA_PLAY = 0x02;
+ static const uint8_t EVENT_MEDIA_PAUSE = 0x03;
+ static const uint8_t EVENT_MEDIA_VOL = 0x04;
+
+ void setStatus(bool playing);
+ void setArtist(const QString &artist);
+ void setTrack(const QString &track);
+ void setAlbum(const QString &album);
+ void setVolume(const int volume);
+
+ Q_SIGNAL void serviceEvent(const QString &c, uint8_t event, uint8_t data);
+
+private:
+ void characteristicChanged(const QString &c, const QByteArray &value);
+
+
+};
+
+#endif // ASTEROID_MEDIA_SERVICE_H
\ No newline at end of file
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidnotificationservice.cpp
^
|
@@ -0,0 +1,74 @@
+#include "asteroidnotificationservice.h"
+
+const char* AsteroidNotificationService::UUID_SERVICE_NOTIFICATION = "00009071-0000-0000-0000-00a57e401d05";
+const char* AsteroidNotificationService::UUID_CHARACTERISTIC_NOTIFICATION_UPDATE = "00009001-0000-0000-0000-00a57e401d05";
+const char* AsteroidNotificationService::UUID_CHARACTERISTIC_NOTIFICATION_FEEDBACK = "00009002-0000-0000-0000-00a57e401d05";
+
+
+AsteroidNotificationService::AsteroidNotificationService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_NOTIFICATION, path, parent)
+{
+ qDebug() << Q_FUNC_INFO;
+ connect(this, &QBLEService::characteristicChanged, this, &AsteroidNotificationService::characteristicChanged);
+}
+
+void AsteroidNotificationService::sendAlert(const QString &sender, const QString &subject, const QString &message)
+{
+// qDebug() << Q_FUNC_INFO << sender << subject << message;
+
+ QString icon = mapSenderToIcon(sender);
+
+ // for vibrate, valid options are { "ringtone", "strong", "normal", "none" }
+ QString vibrate = "normal";
+
+ QByteArray data = QString("<insert><pn>%1</pn><id>%2</id><an>%3</an><ai>%4</ai><su>%5</su><bo>%6</bo><vb>%7</vb></insert>")
+ .arg(sender, QString::number(m_lastNotificationId), sender, icon, subject, message, vibrate).toUtf8();
+
+ m_lastNotificationId++;
+
+ writeValue(UUID_CHARACTERISTIC_NOTIFICATION_UPDATE, data);
+}
+
+void AsteroidNotificationService::incomingCall(const QString &caller)
+{
+ qDebug() << Q_FUNC_INFO << caller;
+ m_lastVoiceCallNotification = m_lastNotificationId;
+ sendAlert("incoming-call", caller, "");
+}
+
+void AsteroidNotificationService::incomingCallEnded()
+{
+ removeNotification(m_lastVoiceCallNotification);
+}
+
+void AsteroidNotificationService::removeNotification(unsigned int id)
+{
+ QByteArray data = QString("<removed><id>%1</id></removed>").arg(id).toUtf8();
+ writeValue(UUID_CHARACTERISTIC_NOTIFICATION_UPDATE, data);
+}
+
+
+void AsteroidNotificationService::characteristicChanged(const QString &c, const QByteArray &value)
+{
+ qDebug() << Q_FUNC_INFO << c << value;
+ emit serviceEvent(c, value[0]);
+}
+
+QString AsteroidNotificationService::mapSenderToIcon(const QString &sender) {
+
+ // see https://github.com/AsteroidOS/asteroid-icons-ion
+ const QMap<QString, QString> iconMapping = {
+ {"Dekko", "ios-mail"},
+ {"TELEports", "ios-paper-plane"},
+ {"Cinny", "ios-paper-plane"},
+ {"indicator-datetime", "ios-alarm"},
+ {"incoming-call", "ios-call"},
+ };
+
+ for (auto it = iconMapping.begin(); it != iconMapping.end(); ++it) {
+ if (sender == it.key()) {
+ return it.value();
+ }
+ }
+
+ return "ios-mail-open-outline";
+}
\ No newline at end of file
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidnotificationservice.h
^
|
@@ -0,0 +1,30 @@
+#ifndef ASTEROIDNOTIFICATIONSERVICE_H
+#define ASTEROIDNOTIFICATIONSERVICE_H
+
+#include "qble/qbleservice.h"
+
+class AsteroidNotificationService : public QBLEService
+{
+ Q_OBJECT
+public:
+ AsteroidNotificationService(const QString &path, QObject *parent);
+
+ static const char* UUID_SERVICE_NOTIFICATION;
+ static const char* UUID_CHARACTERISTIC_NOTIFICATION_UPDATE;
+ static const char* UUID_CHARACTERISTIC_NOTIFICATION_FEEDBACK;
+
+ Q_INVOKABLE void sendAlert(const QString &sender, const QString &subject, const QString &message);
+ Q_INVOKABLE void removeNotification(unsigned int id);
+ Q_INVOKABLE void incomingCall(const QString &caller);
+ Q_INVOKABLE void incomingCallEnded();
+ static QString mapSenderToIcon(const QString &sender);
+
+ Q_SIGNAL void serviceEvent(const QString &c, uint8_t event);
+
+private:
+ void characteristicChanged(const QString &c, const QByteArray &value);
+ unsigned int m_lastNotificationId = 0;
+ unsigned int m_lastVoiceCallNotification = 0;
+};
+
+#endif // ASTEROIDNOTIFICATIONSERVICE_H
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidscreenshotservice.cpp
^
|
@@ -0,0 +1,59 @@
+#include "asteroidscreenshotservice.h"
+#include "typeconversion.h"
+
+
+const char* AsteroidScreenshotService::UUID_SERVICE_SCREENSHOT = "00006071-0000-0000-0000-00a57e401d05";
+const char* AsteroidScreenshotService::UUID_CHARACTERISTIC_SCREENSHOT_REQUEST = "00006001-0000-0000-0000-00a57e401d05";
+const char* AsteroidScreenshotService::UUID_CHARACTERISTIC_SCREENSHOT_CONTENT = "00006002-0000-0000-0000-00a57e401d05";
+const char* AsteroidScreenshotService::UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION = "00002902-0000-1000-8000-00805f9b34fb";
+
+
+AsteroidScreenshotService::AsteroidScreenshotService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_SCREENSHOT, path, parent)
+{
+ qDebug() << Q_FUNC_INFO;
+ connect(this, &QBLEService::characteristicChanged, this, &AsteroidScreenshotService::characteristicChanged);
+ enableNotification(UUID_CHARACTERISTIC_SCREENSHOT_CONTENT);
+ writeDescriptorAsync(UUID_CHARACTERISTIC_SCREENSHOT_CONTENT, UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION, QByteArray::fromHex("0100"));
+}
+
+void AsteroidScreenshotService::requestScreenshot()
+{
+ qDebug() << Q_FUNC_INFO;
+ if (m_downloading) {
+ return;
+ }
+ m_downloading = true;
+ m_firstNotify = true;
+ writeAsync(UUID_CHARACTERISTIC_SCREENSHOT_REQUEST, QByteArray(1, 0));
+}
+
+void AsteroidScreenshotService::characteristicChanged(const QString &c, const QByteArray &value)
+{
+ if (c == UUID_CHARACTERISTIC_SCREENSHOT_CONTENT) {
+
+ if (m_firstNotify) {
+
+ m_totalSize = TypeConversion::toUint32(value[0], value[1], value[2], value[3]);
+ m_totalData = QByteArray();
+ m_progress = 0;
+ m_firstNotify = false;
+
+ } else {
+ m_progress += value.size();
+ m_totalData += value;
+ if (m_progress == m_totalSize) {
+ emit screenshotReceived(m_totalData);
+ m_downloading = false;
+ } else {
+
+ unsigned int progressPct = (m_progress * 100)/m_totalSize;
+ if (m_lastProgressPct != progressPct) {
+ m_lastProgressPct = progressPct;
+ qDebug() << Q_FUNC_INFO << m_progress << "/" << m_totalSize << " => " << progressPct << "%";
+ emit progressChanged(progressPct);
+ }
+
+ }
+ }
+ }
+}
\ No newline at end of file
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidscreenshotservice.h
^
|
@@ -0,0 +1,38 @@
+#ifndef ASTEROID_SCREENSHOT_SERVICE__H
+#define ASTEROID_SCREENSHOT_SERVICE__H
+
+#include <QObject>
+
+#include "qble/qbleservice.h"
+#include "abstractdevice.h"
+
+class AsteroidScreenshotService : public QBLEService
+{
+ Q_OBJECT
+public:
+ AsteroidScreenshotService(const QString &path, QObject *parent);
+
+ static const char *UUID_SERVICE_SCREENSHOT;
+ static const char *UUID_CHARACTERISTIC_SCREENSHOT_REQUEST;
+ static const char *UUID_CHARACTERISTIC_SCREENSHOT_CONTENT;
+ static const char *UUID_DESCRIPTOR_CLIENT_CHARACTERISTIC_CONFIGURATION;
+
+ void requestScreenshot();
+
+ Q_SIGNAL void screenshotReceived(QByteArray data);
+ Q_SIGNAL void progressChanged(unsigned int progress);
+
+
+private:
+ void characteristicChanged(const QString &c, const QByteArray &value);
+
+ bool m_firstNotify = false;
+ bool m_downloading = false;
+ QByteArray m_totalData;
+ unsigned int m_progress;
+ unsigned int m_totalSize;
+ unsigned int m_lastProgressPct = 101;
+
+};
+
+#endif // ASTEROID_TIME_SERVICE__H
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidtimeservice.cpp
^
|
@@ -0,0 +1,30 @@
+#include "asteroidtimeservice.h"
+#include "typeconversion.h"
+
+
+const char* AsteroidTimeService::UUID_SERVICE_ASTEROID_TIME = "00005071-0000-0000-0000-00a57e401d05";
+const char* AsteroidTimeService::UUID_CHARACTERISTIC_ASTEROID_TIME_SET = "00005001-0000-0000-0000-00a57e401d05";
+
+AsteroidTimeService::AsteroidTimeService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_ASTEROID_TIME, path, parent)
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+void AsteroidTimeService::setCurrentTime()
+{
+
+ QDateTime t = QDateTime::currentDateTime();
+
+ QByteArray data(6, 0);
+ data[0] = t.date().year() - 1900;
+ data[1] = t.date().month()-1;
+ data[2] = t.date().day();
+ data[3] = t.time().hour();
+ data[4] = t.time().minute();
+ data[5] = t.time().second();
+
+
+ qDebug() << Q_FUNC_INFO << "Setting time to:" << t << data.toHex();
+ writeValue(UUID_CHARACTERISTIC_ASTEROID_TIME_SET, data);
+
+}
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidtimeservice.h
^
|
@@ -0,0 +1,20 @@
+#ifndef ASTEROID_TIME_SERVICE__H
+#define ASTEROID_TIME_SERVICE__H
+
+#include <QObject>
+
+#include "qble/qbleservice.h"
+#include "abstractdevice.h"
+
+class AsteroidTimeService : public QBLEService
+{
+ Q_OBJECT
+public:
+ AsteroidTimeService(const QString &path, QObject *parent);
+ static const char *UUID_SERVICE_ASTEROID_TIME;
+ static const char *UUID_CHARACTERISTIC_ASTEROID_TIME_SET;
+
+ void setCurrentTime();
+};
+
+#endif // ASTEROID_TIME_SERVICE__H
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidweatherservice.cpp
^
|
@@ -0,0 +1,51 @@
+#include "asteroidweatherservice.h"
+#include "typeconversion.h"
+#include "codec.h"
+
+#include <QDateTime>
+#include <QDebug>
+#include <math.h>
+
+const char* AsteroidWeatherService::UUID_SERVICE_WEATHER = "00008071-0000-0000-0000-00a57e401d05";
+const char* AsteroidWeatherService::UUID_CHARACTERISTIC_WEAT_CITY_UUID = "00008001-0000-0000-0000-00a57e401d05";
+const char* AsteroidWeatherService::UUID_CHARACTERISTIC_WEAT_IDS_UUID = "00008002-0000-0000-0000-00a57e401d05";
+const char* AsteroidWeatherService::UUID_CHARACTERISTIC_WEAT_MINT_UUID = "00008003-0000-0000-0000-00a57e401d05";
+const char* AsteroidWeatherService::UUID_CHARACTERISTIC_WEAT_MAXT_UUID = "00008004-0000-0000-0000-00a57e401d05";
+
+AsteroidWeatherService::AsteroidWeatherService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_WEATHER, path, parent)
+{
+ qDebug() << Q_FUNC_INFO;
+}
+
+void AsteroidWeatherService::sendWeather(CurrentWeather *weather)
+{
+ qDebug() << Q_FUNC_INFO;
+
+ if (weather->forecastCount() < 5) {
+ qWarning() << "WeatherService: need at least 5 days forecast, got" << weather->forecastCount();
+ return;
+ }
+ QByteArray ids;
+ QByteArray minTemps;
+ QByteArray maxTemps;
+
+ for (int f = 0; f < 5; f++) {
+ CurrentWeather::Forecast fc = weather->forecast(f);
+// qDebug() << "Forecast:" << f << fc.dateTime()<< fc.weatherCode() << (fc.maxTemperature() - 273) << (fc.minTemperature() - 273) << fc.humidity() << fc.pressure() << fc.windMaxSpeed() << fc.clouds();
+ ids += TypeConversion::BEfromInt16( fc.weatherCode() );
+ minTemps += TypeConversion::BEfromInt16( fc.minTemperature() );
+ maxTemps += TypeConversion::BEfromInt16( fc.maxTemperature() );
+ }
+
+
+ qDebug() << Q_FUNC_INFO << "weather ids:" << ids.toHex();
+ qDebug() << Q_FUNC_INFO << "weather mint:" << minTemps.toHex();
+ qDebug() << Q_FUNC_INFO << "weather maxt:" << maxTemps.toHex();
+
+
+ writeValue(UUID_CHARACTERISTIC_WEAT_CITY_UUID, weather->city()->name().toLocal8Bit());
+ writeValue(UUID_CHARACTERISTIC_WEAT_IDS_UUID, ids);
+ writeValue(UUID_CHARACTERISTIC_WEAT_MINT_UUID, minTemps);
+ writeValue(UUID_CHARACTERISTIC_WEAT_MAXT_UUID, maxTemps);
+
+}
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/asteroidweatherservice.h
^
|
@@ -0,0 +1,25 @@
+#ifndef ASTEROIDWEATHERSERVICE_H
+#define ASTEROIDWEATHERSERVICE_H
+
+#include <QObject>
+#include "qble/qbleservice.h"
+#include "devices/abstractdevice.h"
+
+class AsteroidWeatherService : public QBLEService
+{
+ Q_OBJECT
+public:
+
+ static const char* UUID_SERVICE_WEATHER;
+ static const char* UUID_CHARACTERISTIC_WEAT_CITY_UUID;
+ static const char* UUID_CHARACTERISTIC_WEAT_IDS_UUID;
+ static const char* UUID_CHARACTERISTIC_WEAT_MINT_UUID;
+ static const char* UUID_CHARACTERISTIC_WEAT_MAXT_UUID;
+
+ explicit AsteroidWeatherService(const QString &path, QObject *parent);
+
+ void sendWeather(CurrentWeather *weather);
+
+};
+
+#endif // #define ASTEROIDWEATHERSERVICE_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/bipfirmwareservice.cpp
^
|
@@ -6,7 +6,7 @@
BipFirmwareService::BipFirmwareService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_FIRMWARE, path, parent)
{
- qDebug() << "BipFirmwareService::BipFirmwareService";
+ qDebug() << Q_FUNC_INFO;
connect(this, &QBLEService::characteristicChanged, this, &BipFirmwareService::characteristicChanged);
}
@@ -14,7 +14,7 @@
void BipFirmwareService::characteristicChanged(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "FW Changed:" << characteristic << value;
+ qDebug() << Q_FUNC_INFO << "Changed:" << characteristic << value;
if (characteristic == UUID_CHARACTERISTIC_FIRMWARE) {
qDebug() << "...got metadata";
@@ -57,7 +57,8 @@
bool BipFirmwareService::operationRunning()
{
- qDebug() << "is firmware operation running:" << m_operationRunning;
+ if (m_operationRunning > 0)
+ qDebug() << Q_FUNC_INFO << "Firmware operation running:" << m_operationRunning;
return m_operationRunning > 0;
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/currenttimeservice.cpp
^
|
@@ -6,7 +6,7 @@
CurrentTimeService::CurrentTimeService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_CURRENT_TIME, path, parent)
{
- qDebug() << "PinetimeService";
+ qDebug() << Q_FUNC_INFO;
}
void CurrentTimeService::setCurrentTime()
@@ -24,7 +24,7 @@
timeBytes += char(0); //fractions256
timeBytes += char(0); //reason
- qDebug() << "setting time to:" << now << timeBytes.toHex();
+ qDebug() << Q_FUNC_INFO << "Setting time to:" << now << timeBytes.toHex();
writeValue(UUID_CHARACTERISTIC_CURRENT_TIME, timeBytes);
}
@@ -33,6 +33,6 @@
QByteArray dateTime = readValue(UUID_CHARACTERISTIC_CURRENT_TIME);
QDateTime dt = TypeConversion::rawBytesToDateTime(dateTime, false);
- qDebug() << "Read the watch date/time as" << dt;
+ qDebug() << Q_FUNC_INFO << "Read the watch date/time as" << dt;
return dt;
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/currenttimeservice.h
^
|
@@ -22,4 +22,4 @@
QDateTime currentTime();
};
-#endif // PINETIMESERVICE_H
+#endif // CURRENTTIMESERVICE_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/deviceinfoservice.cpp
^
|
@@ -13,14 +13,14 @@
DeviceInfoService::DeviceInfoService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_DEVICEINFO, path, parent)
{
- qDebug() << "BipInfoService::BipInfoService";
+ qDebug() << Q_FUNC_INFO;
connect(this, &QBLEService::characteristicRead, this, &DeviceInfoService::characteristicRead);
}
void DeviceInfoService::refreshInformation()
{
- qDebug() << "BipInfoService::refreshInformation";
+ qDebug() << Q_FUNC_INFO;
readAsync(UUID_CHARACTERISTIC_INFO_SERIAL_NO);
readAsync(UUID_CHARACTERISTIC_INFO_HARDWARE_REV);
@@ -34,7 +34,8 @@
void DeviceInfoService::characteristicRead(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "Read:" << characteristic << value;
+ qDebug() << Q_FUNC_INFO << "Read:" << characteristic << value;
+
if (characteristic == UUID_CHARACTERISTIC_INFO_SERIAL_NO) {
m_serialNumber = value;
emit informationChanged(AbstractDevice::INFO_SERIAL, m_serialNumber);
@@ -60,7 +61,7 @@
m_manufacturer = value;
emit informationChanged(AbstractDevice::INFO_MANUFACTURER, m_manufacturer);
} else {
- qDebug() << "Unknown value";
+ qDebug() << Q_FUNC_INFO << "Unknown value";
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/deviceinfoservice.h
^
|
@@ -1,5 +1,5 @@
-#ifndef BIPINFOSERVICE_H
-#define BIPINFOSERVICE_H
+#ifndef DEVICEINFOSERVICE_H
+#define DEVICEINFOSERVICE_H
#include "qble/qbleservice.h"
#include "devices/abstractdevice.h"
@@ -49,4 +49,4 @@
Q_SLOT void characteristicRead(const QString &c, const QByteArray &value);
};
-#endif // BIPINFOSERVICE_H
+#endif // DEVICEINFOSERVICE_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/dfuservice.cpp
^
|
@@ -52,7 +52,9 @@
bool DfuService::operationRunning()
{
- qDebug() << "is firmware operation running:" << m_operationRunning;
+ if (m_operationRunning > 0)
+ qDebug() << Q_FUNC_INFO << "Firmware operation running:" << m_operationRunning;
+
return m_operationRunning > 0;
}
@@ -77,6 +79,6 @@
void DfuService::onTransferError(const QString error) {
m_operationRunning = 0;
- qDebug() << "Transfer error : " << error;
+ qDebug() << Q_FUNC_INFO << "Transfer error:" << error;
emit message(error);
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/hrmservice.cpp
^
|
@@ -8,7 +8,7 @@
HRMService::HRMService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_HRM, path, parent)
{
- qDebug() << "HRMService::HRMService";
+ qDebug() << Q_FUNC_INFO;
connect(this, &QBLEService::characteristicChanged, this, &HRMService::characteristicChanged);
}
@@ -16,7 +16,7 @@
void HRMService::characteristicChanged(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "HRM Changed:" << characteristic << value;
+ qDebug() << Q_FUNC_INFO << "Changed:" << characteristic << value;
if (characteristic == UUID_CHARACTERISTIC_HRM_MEASUREMENT) {
qDebug() << "..got HR measurement";
@@ -63,7 +63,7 @@
{
auto interval = AmazfishConfig::instance()->profileAllDayHRM();
- qDebug() << "Setting HRM monitoring to" << interval;
+ qDebug() << Q_FUNC_INFO << "Setting HRM monitoring to" << interval;
QByteArray cmd = UCHAR_TO_BYTEARRAY(COMMAND_SET_PERIODIC_HR_MEASUREMENT_INTERVAL);
cmd += UCHAR_TO_BYTEARRAY(interval);
@@ -77,7 +77,7 @@
{
auto enable = AmazfishConfig::instance()->profileHRMSleepSupport();
- qDebug() << "Setting HRM sleept support to" << enable;
+ qDebug() << Q_FUNC_INFO << "Setting HRM sleep support to" << enable;
QByteArray cmd;
if (enable) {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/immediatealertservice.cpp
^
|
@@ -25,7 +25,7 @@
m_alertLevel = value[0];
emit informationChanged(AbstractDevice::INFO_IMMEDIATE_ALERT, QString::number(m_alertLevel));
} else {
- qWarning() << "Unknown value";
+ qWarning() << Q_FUNC_INFO << "Unknown value";
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/infinitimeresourceservice.cpp
^
|
@@ -6,6 +6,7 @@
}
void InfiniTimeResourceService::listDirectory() {
+ qDebug() << Q_FUNC_INFO;
qDebug() << "TEST4";
auto p = fsService->listDirectory();
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/infinitimeweatherservice.cpp
^
|
@@ -31,7 +31,7 @@
for (int f = 0; f < weather->forecastCount(); f++) {
CurrentWeather::Forecast fc = weather->forecast(f);
- qDebug() << "Forecast:" << f << fc.dateTime()<< fc.weatherCode() << (fc.maxTemperature() - 273) << (fc.minTemperature() - 273) << fc.humidity() << fc.pressure() << fc.windMaxSpeed() << fc.clouds();
+ qDebug() << Q_FUNC_INFO << "Forecast:" << f << fc.dateTime()<< fc.weatherCode() << (fc.maxTemperature() - 273) << (fc.minTemperature() - 273) << fc.humidity() << fc.pressure() << fc.windMaxSpeed() << fc.clouds();
Temperature t;
t.eventType = eventtype::Temperature;
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/miband2service.cpp
^
|
@@ -7,7 +7,7 @@
MiBand2Service::MiBand2Service(const QString &path, char authByte, char cryptByte, bool requireAuthKey, QObject *parent) : QBLEService(UUID_SERVICE_MIBAND2, path, parent)
{
- qDebug() << "MiBand2Service::MiBand2Service";
+ qDebug() << Q_FUNC_INFO;
m_authByte = authByte;
m_cryptByte = cryptByte;
@@ -20,11 +20,11 @@
void MiBand2Service::initialise(bool firstTime)
{
if (firstTime) {
- qDebug() << "Sending auth key";
+ qDebug() << Q_FUNC_INFO << "Sending auth key";
qDebug() << AUTH_SEND_KEY << sizeof(AUTH_SEND_KEY) << sizeof(&AUTH_SEND_KEY) << UCHAR_TO_BYTEARRAY(AUTH_SEND_KEY);
writeValue(UUID_CHARACTERISITIC_MIBAND2_AUTH, UCHAR_TO_BYTEARRAY(AUTH_SEND_KEY) + UCHAR_TO_BYTEARRAY(m_authByte) + getSecretKey());
} else {
- qDebug() << "Writing request for auth number";
+ qDebug() << Q_FUNC_INFO << "Writing request for auth number";
//uint8_t start[2] = {0x01, 0x00};
//writeValue(UUID_CHARACTERISITIC_MIBAND2_AUTH, UCHARARR_TO_BYTEARRAY(start));
writeValue(UUID_CHARACTERISITIC_MIBAND2_AUTH , requestAuthNumber());
@@ -33,7 +33,7 @@
void MiBand2Service::characteristicChanged(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "Mi2Band Changed:" << characteristic << value;
+ qDebug() << Q_FUNC_INFO << "Changed:" << characteristic << value;
if (value[0] == RESPONSE && value[1] == AUTH_SEND_KEY && ((value[2] & SUCCESS) == SUCCESS || value[2] == 0x06) ) {
qDebug() << "Received initial auth success, requesting random auth number";
@@ -67,7 +67,7 @@
}
QByteArray MiBand2Service::requestAuthNumber() {
- qDebug() << "Crypt Byte:" << m_cryptByte;
+ qDebug() << Q_FUNC_INFO << "Crypt Byte:" << m_cryptByte;
if (m_cryptByte == 0x00) {
return UCHAR_TO_BYTEARRAY(AUTH_REQUEST_RANDOM_AUTH_NUMBER) + UCHAR_TO_BYTEARRAY(m_authByte);
} else {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/mibandservice.cpp
^
|
@@ -24,7 +24,7 @@
MiBandService::MiBandService(const QString &path, QObject *parent) : QBLEService(UUID_SERVICE_MIBAND, path, parent)
{
- qDebug() << "MiBandService::MiBandService";
+ qDebug() << Q_FUNC_INFO;
connect(this, &QBLEService::characteristicChanged, this, &MiBandService::characteristicChanged);
connect(this, &QBLEService::characteristicRead, this, &MiBandService::characteristicRead);
@@ -77,7 +77,7 @@
void MiBandService::characteristicChanged(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "MiBand Changed:" << characteristic << value.toHex();
+ qDebug() << Q_FUNC_INFO << "Changed:" << characteristic << value.toHex();
if (characteristic == UUID_CHARACTERISTIC_MIBAND_DEVICE_EVENT) {
if (value[0] == EVENT_DECLINE_CALL) {
@@ -189,7 +189,7 @@
void MiBandService::operationTimeout()
{
- qDebug() << "Timeout while waiting for operation data";
+ qDebug() << Q_FUNC_INFO << "Timeout while waiting for operation data";
abortOperations();
}
@@ -211,7 +211,7 @@
void MiBandService::characteristicRead(const QString &characteristic, const QByteArray &value)
{
- qDebug() << "Read:" << characteristic << value;
+ qDebug() << Q_FUNC_INFO << "Read:" << characteristic << value;
if (characteristic == UUID_CHARACTERISTIC_MIBAND_BATTERY_INFO) {
qDebug() << "...Got battery info";
@@ -260,7 +260,7 @@
int offsetInSec = now.offsetFromUtc();
timeBytes += char(offsetInSec/(15*60));
- qDebug() << "setting time to:" << now << ", tz: " << offsetInSec << timeBytes.toHex();
+ qDebug() << Q_FUNC_INFO << "setting time to:" << now << ", tz: " << offsetInSec << timeBytes.toHex();
writeValue(UUID_CHARACTERISTIC_MIBAND_CURRENT_TIME, timeBytes);
}
@@ -268,7 +268,7 @@
{
auto format = AmazfishConfig::instance()->deviceLanguage();
- qDebug() << "Setting language to " << format;
+ qDebug() << Q_FUNC_INFO << "Setting language to " << format;
QByteArray lang;
lang += QByteArray(1, ENDPOINT_DISPLAY);
@@ -312,7 +312,7 @@
{
auto format = AmazfishConfig::instance()->deviceDateFormat();
- qDebug() << "Setting date display to " << format;
+ qDebug() << Q_FUNC_INFO << "Setting date display to " << format;
switch (format) {
case AmazfishConfig::DeviceDateFormatTime:
writeValue(UUID_CHARACTERISTIC_MIBAND_CONFIGURATION, UCHARARR_TO_BYTEARRAY(DATEFORMAT_TIME));
@@ -327,7 +327,7 @@
{
auto format = AmazfishConfig::instance()->deviceTimeFormat();
- qDebug() << "Setting time format to " << format;
+ qDebug() << Q_FUNC_INFO << "Setting time format to " << format;
switch (format) {
case AmazfishConfig::DeviceTimeFormat24H:
writeValue(UUID_CHARACTERISTIC_MIBAND_CONFIGURATION, UCHARARR_TO_BYTEARRAY(DATEFORMAT_TIME_24_HOURS));
@@ -348,7 +348,7 @@
auto weight = config->profileWeight();
auto dob = config->profileDOB().date();
- qDebug() << "Setting profile" << profileName << id << gender << height << weight << dob;
+ qDebug() << Q_FUNC_INFO << "Setting profile" << profileName << id << gender << height << weight << dob;
userInfo += QByteArray(1, COMMAND_SET_USERINFO);
userInfo += char(0);
@@ -382,7 +382,7 @@
{
auto format = AmazfishConfig::instance()->deviceDistanceUnit();
- qDebug() << "Setting distance unit to " << format;
+ qDebug() << Q_FUNC_INFO << "Setting distance unit to " << format;
switch (format) {
case AmazfishConfig::DeviceDistanceUnitMetric:
writeValue(UUID_CHARACTERISTIC_MIBAND_CONFIGURATION, UCHARARR_TO_BYTEARRAY(COMMAND_DISTANCE_UNIT_METRIC));
@@ -399,7 +399,7 @@
{
auto location = AmazfishConfig::instance()->profileWearLocation();
- qDebug() << "Setting wear location to " << location;
+ qDebug() << Q_FUNC_INFO << "Setting wear location to " << location;
switch (location) {
case AmazfishConfig::WearLocationLeftWrist:
writeValue(UUID_CHARACTERISTIC_MIBAND_USER_SETTINGS, UCHARARR_TO_BYTEARRAY(WEAR_LOCATION_LEFT_WRIST));
@@ -493,7 +493,7 @@
cmd[1] = items1;
cmd[2] = items2;
- qDebug() << "Setting display items to:" << cmd;
+ qDebug() << Q_FUNC_INFO << "Setting display items to:" << cmd;
writeValue(UUID_CHARACTERISTIC_MIBAND_CONFIGURATION, cmd);
//Shortcuts
@@ -508,7 +508,7 @@
shortcuts += ((sa && sw) ? 0x81 : 0x01);
shortcuts += 0x01;
- qDebug() << "Setting shortcuts to:" << shortcuts;
+ qDebug() << Q_FUNC_INFO << "Setting shortcuts to:" << shortcuts;
writeValue(UUID_CHARACTERISTIC_MIBAND_CONFIGURATION, shortcuts);
}
@@ -533,13 +533,13 @@
foreach (const QString &key, items) {
uint8_t id = keyPosMap[key];
if (id != 0) {
- qDebug() << "enabling:" << key;
+ qDebug() << Q_FUNC_INFO << "enabling:" << key;
enabled_mask |= (1 << id);
command[3 + id] = index++;
}
}
- qDebug() << command.toHex();
+ qDebug() << Q_FUNC_INFO << command.toHex();
// And then all DISABLED ones, order does not matter
for (int i = 0; i < keyPosMap.size(); i++) {
@@ -564,7 +564,7 @@
uint8_t menuType = 0xff; //0xfd for shortcuts
enabledList = AmazfishConfig::instance()->deviceDisplayItems().split(",");
- qDebug() << "Enabled List:" << enabledList;
+ qDebug() << Q_FUNC_INFO << "Enabled List:" << enabledList;
command += QByteArray(1, (char)0x1e);
// it seem that we first have to put all ENABLED items into the array, oder does matter
@@ -610,7 +610,7 @@
void MiBandService::setRotateWristToSwitchInfo(bool enable)
{
- qDebug() << "Setting rotate write to " << enable;
+ qDebug() << Q_FUNC_INFO << "Setting rotate write to " << enable;
auto value = enable
? COMMAND_ENABLE_ROTATE_WRIST_TO_SWITCH_INFO
@@ -658,7 +658,7 @@
sampleSize = device->activitySampleSize();
}
- qDebug() << "Sample size is " << sampleSize;
+ qDebug() << Q_FUNC_INFO << "Sample size is " << sampleSize;
m_activityFetchOperation = new ActivityFetchOperation(this, m_conn, sampleSize);
m_activityFetchOperation->start();
@@ -721,7 +721,8 @@
bool MiBandService::operationRunning()
{
- qDebug() << "is miband operation running:" << m_operationRunning;
+ if (m_operationRunning > 0)
+ qDebug() << Q_FUNC_INFO << "MiBand operation running:" << m_operationRunning;
return m_operationRunning > 0;
}
@@ -761,7 +762,6 @@
//int tz_offset_hours = SimpleTimeZone.getDefault().getOffset(weather->timestamp * 1000L) / (1000 * 60 * 60);
int tz_offset_hours = 0; //!TODO work out what to do with this
- qDebug() << "Sending condition";
QByteArray buf;
QBuffer buffer(&buf);
buffer.open(QIODevice::WriteOnly);
@@ -769,7 +769,7 @@
int8_t temp = int8_t(weather->temperature() - 273.15);
qint32 dt = qToLittleEndian(weather->dateTime());
- qDebug() << dt << temp << condition;
+ qDebug() << Q_FUNC_INFO << "Sending condition" << dt << temp << condition;
buffer.putChar(char(0x02));
buffer.write((char*)&dt, sizeof(qint32));
@@ -785,7 +785,7 @@
buf.clear();
buffer.close();
- qDebug() << "Sending aqi";
+ qDebug() << Q_FUNC_INFO << "Sending aqi";
buffer.open(QIODevice::WriteOnly);
buffer.putChar(char(0x04));
buffer.write((char*)&dt, sizeof(qint32));
@@ -798,8 +798,6 @@
}
writeChunked(UUID_CHARACTERISTIC_MIBAND_CHUNKED_TRANSFER, 1, buf);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/mibandservice.h
^
|
@@ -84,7 +84,7 @@
static const uint8_t COMMAND_SET_LANGUAGE = 0x17;
static constexpr uint8_t COMMAND_ENABLE_DISPLAY_ON_LIFT_WRIST[4] = {ENDPOINT_DISPLAY, 0x05, 0x00, 0x01};
static constexpr uint8_t COMMAND_DISABLE_DISPLAY_ON_LIFT_WRIST[4] = {ENDPOINT_DISPLAY, 0x05, 0x00, 0x00};
- static constexpr uint8_t COMMAND_SCHEDULE_DISPLAY_ON_LIFT_WRIST[8] = {ENDPOINT_DISPLAY, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ static constexpr uint8_t COMMAND_SCHEDULE_DISPLAY_ON_LIFT_WRIST[8] = {ENDPOINT_DISPLAY, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00};
static constexpr uint8_t COMMAND_ENABLE_GOAL_NOTIFICATION[4] = {ENDPOINT_DISPLAY, 0x06, 0x00, 0x01};
static constexpr uint8_t COMMAND_DISABLE_GOAL_NOTIFICATION[4] = {ENDPOINT_DISPLAY, 0x06, 0x00, 0x00};
static constexpr uint8_t COMMAND_ENABLE_ROTATE_WRIST_TO_SWITCH_INFO[4] = {ENDPOINT_DISPLAY, 0x0d, 0x00, 0x01};
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/pinetimesimpleweatherservice.cpp
^
|
@@ -18,7 +18,7 @@
void PineTimeSimpleWeatherService::sendWeather(CurrentWeather *weather)
{
- qDebug() << "Current weather data"
+ qDebug() << Q_FUNC_INFO << ": Current weather data"
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
<< QDateTime::fromSecsSinceEpoch(weather->dateTime())
#else
@@ -70,7 +70,7 @@
// weatherBytes += TypeConversion::fromInt16((int)(100 * weather->windSpeed()));
// weatherBytes += TypeConversion::fromInt16((int)(100 * weather->windGusts()));
- qDebug() << "Weather bytes" << weatherBytes.toHex();
+ qDebug() << Q_FUNC_INFO << "Weather bytes" << weatherBytes.toHex();
writeValue(UUID_CHARACTERISTIC_SIMPLE_WEATHER_DATA, weatherBytes);
@@ -90,7 +90,7 @@
// qDebug() << "Forecast:" << f << fc.dateTime()<< fc.weatherCode() << (fc.maxTemperature() - 273) << (fc.minTemperature() - 273) << fc.humidity() << fc.pressure() << fc.windMaxSpeed() << fc.clouds();
- qDebug() << "Forecast Day" << f
+ qDebug() << Q_FUNC_INFO << ": Forecast Day" << f
#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
<< QDateTime::fromSecsSinceEpoch(fc.dateTime())
#else
@@ -112,7 +112,7 @@
}
- qDebug() << "Forecast bytes" << forecastBytes.toHex();
+ qDebug() << Q_FUNC_INFO << ": Forecast bytes" << forecastBytes.toHex();
writeValue(UUID_CHARACTERISTIC_SIMPLE_WEATHER_DATA, forecastBytes);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/services/uartservice.cpp
^
|
@@ -66,25 +66,17 @@
QJsonObject UARTService::ObjectFromString(const QString& in)
{
QJsonObject obj;
-
QJsonDocument doc = QJsonDocument::fromJson(in.toUtf8());
// check validity of the document
- if(!doc.isNull())
- {
- if(doc.isObject())
- {
+ if(!doc.isNull()) {
+ if(doc.isObject()) {
obj = doc.object();
+ } else {
+ qDebug() << Q_FUNC_INFO << "Document is not an object";
}
- else
- {
- qDebug() << "Document is not an object";
- }
+ } else {
+ qDebug() << Q_FUNC_INFO << "Invalid JSON.";
}
- else
- {
- qDebug() << "Invalid JSON.";
- }
-
return obj;
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/typeconversion.cpp
^
|
@@ -14,6 +14,12 @@
return QByteArray(1, val & 0xff) + QByteArray(1, ((val >> 8) & 0xff));
}
+QByteArray BEfromInt16(int val)
+{
+ return QByteArray(1, (val >> 8) & 0xff) + QByteArray(1, (val & 0xff));
+}
+
+
QByteArray fromInt24(int val)
{
return QByteArray(1, val & 0xff) + QByteArray(1, ((val >> 8) & 0xff)) + QByteArray(1, ((val >> 16) & 0xff));
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/daemon/src/typeconversion.h
^
|
@@ -9,6 +9,7 @@
QByteArray fromInt16(int val);
QByteArray fromInt24(int val);
QByteArray fromInt32(int val);
+QByteArray BEfromInt16(int val);
QByteArray fromInt64(long long int val);
QDateTime rawBytesToDateTime(const QByteArray &value, bool honorDeviceTimeOffset);
QByteArray dateTimeToBytes(const QDateTime &dt, int format, bool adjustForTZ = true);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/documentation/build-instructions.md
^
|
@@ -22,7 +22,7 @@
To install missing packages, as pointed out by build errors, use:
```
-sb2 -R zypper in kcoreaddons-devel kdb-devel libKDb3-3 mkcal-qt5-devel libicu-devel
+sb2 -R zypper in mpris-qt5-devel libkf5archive-devel kcoreaddons-devel kdb-devel libKDb3-3 mkcal-qt5-devel libicu-devel pulseaudio-devel
```
etc as pointed out by build errors.
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/lib/src/amazfish.h
^
|
@@ -39,7 +39,8 @@
FEATURE_ALERT = 32,
FEATURE_EVENT_REMINDER = 64,
FEATURE_MUSIC_CONTROL = 128,
- FEATURE_BUTTON_ACTION = 256
+ FEATURE_BUTTON_ACTION = 256,
+ FEATURE_SCREENSHOT = 512,
};
Q_ENUM(Feature)
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/lib/src/weather/currentweather.cpp
^
|
@@ -168,8 +168,8 @@
QString desc = weather.value("description").toVariant().toString();
QJsonObject main = obj.value("main").toObject();
- int min_temp = main.value("temp_min").toDouble();
- int max_temp = main.value("temp_max").toDouble();
+ qreal min_temp = main.value("temp_min").toDouble();
+ qreal max_temp = main.value("temp_max").toDouble();
int wind_speed = 0;
f.setWindMaxSpeed(0);
f.setWindMinSpeed(255);
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qble.pri
^
|
@@ -5,6 +5,7 @@
$$PWD/qbledevice.h \
$$PWD/qbleservice.h \
$$PWD/qblecharacteristic.h \
+ $$PWD/qbledescriptor.h \
$$PWD/bluezadapter.h
SOURCES += \
@@ -12,5 +13,6 @@
$$PWD/qbledevice.cpp \
$$PWD/qbleservice.cpp \
$$PWD/qblecharacteristic.cpp \
+ $$PWD/qbledescriptor.cpp \
$$PWD/bluezadapter.cpp
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qblecharacteristic.cpp
^
|
@@ -1,15 +1,19 @@
#include "qblecharacteristic.h"
+#include <QtXml/QtXml>
+
QBLECharacteristic::QBLECharacteristic(const QString &path, QObject *parent) : QObject(parent)
{
m_characteristicInterface = new QDBusInterface("org.bluez", path, "org.bluez.GattCharacteristic1", QDBusConnection::systemBus());
+ m_path = path;
m_uuid = m_characteristicInterface->property("UUID").toString();
QStringList argumentMatch;
argumentMatch << "org.bluez.GattCharacteristic1";
QDBusConnection::systemBus().connect("org.bluez", path, "org.freedesktop.DBus.Properties","PropertiesChanged", argumentMatch, QString(),
this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ introspect();
}
void QBLECharacteristic::onPropertiesChanged(const QString &interface, const QVariantMap &map, const QStringList &list)
@@ -75,3 +79,35 @@
{
return m_value;
}
+
+
+void QBLECharacteristic::introspect()
+{
+ QDBusInterface miIntro("org.bluez", m_path, "org.freedesktop.DBus.Introspectable", QDBusConnection::systemBus(), 0);
+ QDBusReply<QString> xml = miIntro.call("Introspect");
+ QDomDocument doc;
+ doc.setContent(xml.value());
+
+ QDomNodeList nodes = doc.elementsByTagName("node");
+
+
+ for (int x = 0; x < nodes.count(); x++)
+ {
+ QDomElement node = nodes.at(x).toElement();
+ QString nodeName = node.attribute("name");
+
+ if (nodeName.startsWith("desc")) {
+ QString path = m_path + "/" + nodeName;
+ QDBusInterface descInterface("org.bluez", path, "org.bluez.GattDescriptor1", QDBusConnection::systemBus(), 0);
+ m_descriptorMap[descInterface.property("UUID").toString()] = new QBLEDescriptor(path, this);
+ }
+ }
+
+ qDebug() << Q_FUNC_INFO << "descriptors" << m_descriptorMap.keys();
+
+}
+
+QBLEDescriptor *QBLECharacteristic::descriptor(const QString &c) const
+{
+ return m_descriptorMap.value(c, nullptr);
+}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qblecharacteristic.h
^
|
@@ -4,6 +4,7 @@
#include <QObject>
#include <QVariantMap>
#include <QtDBus>
+#include "qbledescriptor.h"
class QBLECharacteristic : public QObject
{
@@ -23,13 +24,22 @@
Q_SIGNAL void characteristicChanged(const QString &characterisitc, const QByteArray &value);
Q_SIGNAL void characteristicRead(const QString &characterisitc, const QByteArray &value);
+ QBLEDescriptor *descriptor(const QString &c) const;
+
private:
+ QString m_path;
QString m_uuid;
QByteArray m_value; //buffered value;
QDBusInterface *m_characteristicInterface;
Q_SLOT void onPropertiesChanged(const QString &interface, const QVariantMap &map, const QStringList &list);
Q_SLOT void readFinished(QDBusPendingCallWatcher *call);
+
+
+ QMap<QString, QBLEDescriptor*> m_descriptorMap;
+
+ void introspect();
+
};
#endif // QBLECHARACTERISTIC_H
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qbledescriptor.cpp
^
|
@@ -0,0 +1,76 @@
+#include "qbledescriptor.h"
+
+QBLEDescriptor::QBLEDescriptor(const QString &path, QObject *parent) : QObject(parent)
+{
+ m_descriptorInterface = new QDBusInterface("org.bluez", path, "org.bluez.GattDescriptor1", QDBusConnection::systemBus());
+ m_uuid = m_descriptorInterface->property("UUID").toString();
+
+ QStringList argumentMatch;
+ argumentMatch << "org.bluez.GattDescriptor1";
+ QDBusConnection::systemBus().connect("org.bluez", path, "org.freedesktop.DBus.Properties","PropertiesChanged", argumentMatch, QString(),
+ this, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+}
+
+void QBLEDescriptor::onPropertiesChanged(const QString &interface, const QVariantMap &map, const QStringList &list)
+{
+ Q_UNUSED(interface);
+ Q_UNUSED(list);
+ //qDebug() << "descriptor property changed" << interface << map;
+
+ if (map.contains("Value")) {
+ emit descriptorChanged(m_uuid, map["Value"].toByteArray());
+ }
+}
+
+void QBLEDescriptor::writeValue(const QByteArray &val) const
+{
+ m_descriptorInterface->call("WriteValue", val, QVariantMap());
+}
+
+void QBLEDescriptor::writeAsync(const QByteArray &val) const
+{
+ m_descriptorInterface->asyncCall("WriteValue", val, QVariantMap());
+}
+
+void QBLEDescriptor::readAsync()
+{
+ QDBusPendingCall async = m_descriptorInterface->asyncCall("ReadValue", QVariantMap());
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this);
+
+ QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
+ this, SLOT(readFinished(QDBusPendingCallWatcher*)));
+}
+
+void QBLEDescriptor::readFinished(QDBusPendingCallWatcher *call)
+{
+ QDBusPendingReply<QByteArray> reply = *call;
+ if (reply.isError()) {
+ qDebug() << "QBLEdescriptor::readFinished:" << reply.error().message();
+ } else {
+ m_value = reply.value();
+ emit descriptorRead(m_uuid, m_value);
+ }
+ call->deleteLater();
+}
+
+void QBLEDescriptor::startNotify() const
+{
+ m_descriptorInterface->call("StartNotify");
+}
+
+void QBLEDescriptor::stopNotify() const
+{
+ m_descriptorInterface->call("StopNotify");
+}
+
+QByteArray QBLEDescriptor::value() const
+{
+ return m_value;
+}
+
+QByteArray QBLEDescriptor::readValue() const
+{
+ QDBusReply<QByteArray> reply = m_descriptorInterface->call("ReadValue", QVariantMap());
+ //qDebug() << reply.error().message();
+ return reply.value();
+}
|
[-]
[+]
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qbledescriptor.h
^
|
@@ -0,0 +1,45 @@
+#ifndef QBLEDESCRIPTOR_H
+#define QBLEDESCRIPTOR_H
+
+#include <QObject>
+#include <QVariantMap>
+#include <QtDBus>
+
+class QBLEDescriptor : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QBLEDescriptor(const QString &path, QObject *parent = nullptr);
+
+ void writeValue(const QByteArray &val) const;
+ void writeAsync(const QByteArray &val) const;
+ QByteArray readValue() const;
+ void readAsync();
+ QByteArray value() const; //Returns last buffered value without a read
+
+ void startNotify() const;
+ void stopNotify() const;
+
+ Q_SIGNAL void descriptorChanged(const QString &characterisitc, const QByteArray &value);
+ Q_SIGNAL void descriptorRead(const QString &characterisitc, const QByteArray &value);
+
+
+private:
+
+ QDBusInterface *m_descriptorInterface;
+
+ Q_SLOT void onPropertiesChanged(const QString &interface, const QVariantMap &map, const QStringList &list);
+ Q_SLOT void readFinished(QDBusPendingCallWatcher *call);
+
+
+ // https://doc.qt.io/qt-6/qbluetoothuuid.html#DescriptorType-enum
+ // for example
+ // QBluetoothUuid::DescriptorType::ClientCharacteristicConfiguration is 0x2902
+ // but UUID is "00002902-0000-1000-8000-00805f9b34fb"
+ QString m_uuid;
+
+ QByteArray m_value; //buffered value;
+
+};
+
+#endif // QBLEDESCRIPTOR_H
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qbleservice.cpp
^
|
@@ -88,6 +88,28 @@
}
}
+void QBLEService::writeDescriptorAsync(const QString &c, const QString &d, const QByteArray &value)
+{
+ qDebug() << Q_FUNC_INFO << c << d << value;
+
+ QBLECharacteristic *ch = characteristic(c);
+
+ if (!ch) {
+ qWarning() << "Unable to get characteristic";
+ return;
+ }
+
+ QBLEDescriptor *desc = ch->descriptor(d);
+
+ if (!desc) {
+ qWarning() << "Unable to get descriptor";
+ return;
+ }
+
+ desc->writeAsync(value);
+}
+
+
QByteArray QBLEService::readValue(const QString &c)
{
qDebug() << "Reading from " << c;
@@ -112,8 +134,6 @@
QDomNodeList nodes = doc.elementsByTagName("node");
- qDebug() << nodes.count() << "nodes";
-
for (int x = 0; x < nodes.count(); x++)
{
QDomElement node = nodes.at(x).toElement();
@@ -131,7 +151,7 @@
connect(c, &QBLECharacteristic::characteristicRead, this, &QBLEService::characteristicReadInt);
}
- qDebug() << "Introspect:characteristics:" << m_characteristicMap.keys();
+ qDebug() << Q_FUNC_INFO << "characteristics" << m_characteristicMap.keys();
}
void QBLEService::onPropertiesChanged(const QString &interface, const QVariantMap &map, const QStringList &list)
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/qble/qbleservice.h
^
|
@@ -31,6 +31,8 @@
void writeValue(const QString &characteristic, const QByteArray &value);
void writeAsync(const QString &characteristic, const QByteArray &value);
+ void writeDescriptorAsync(const QString &characteristic, const QString &descriptor, const QByteArray &value);
+
QByteArray readValue(const QString &characteristic);
void readAsync(const QString &characteristic) const;
void enableNotification(const QString &c);
|
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/screenshots/screenshot1.png
^
|
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/screenshots/screenshot2.png
^
|
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/screenshots/screenshot3.png
^
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/components/platform.uuitk/TimePickerDialogPL.qml
^
|
-(symlink to ../platform.qtcontrols/TimePickerDialogPL.qml)
@@ -0,0 +1,43 @@
+/* -*- coding: utf-8-unix -*-
+ *
+ * Copyright (C) 2019 Rinigus, 2019 Purism SPC
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+import QtQuick 2.9
+import QtQuick.Controls 2.2
+import Lomiri.Components 1.3
+import Lomiri.Components.Pickers 1.3
+import "."
+
+DialogPL {
+ id: dialog
+
+ property alias time: datePicker.date
+
+ Item {
+ height: childrenRect.height
+ width: parent.width
+
+ DatePicker {
+ id: datePicker
+ anchors.horizontalCenter: parent.horizontalCenter
+ mode: "Hours|Minutes"
+ width: Math.min(parent.width - 2*styler.themeHorizontalPageMargin, implicitWidth)
+ }
+
+ }
+
+}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/DebugInfo.qml
^
|
@@ -170,6 +170,15 @@
}
}
ButtonPL {
+ text: qsTr("Request Screenshot")
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: parent.width * 0.8
+ visible: supportsFeature(Amazfish.FEATURE_SCREENSHOT)
+ onClicked: {
+ DaemonInterfaceInstance.requestScreenshot();
+ }
+ }
+ ButtonPL {
text: qsTr("Test Popup")
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width * 0.8
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/PairPage.qml
^
|
@@ -14,6 +14,7 @@
placeholderEnabled: devicesModel.rowCount() > 0
property string deviceType
+ property variant aliases
property string _placeholderText
property string _deviceName
property string _deviceAddress
@@ -92,7 +93,18 @@
for (var i = 0; i < itemsCount; ++i) {
var item = items.get(i)
- item.inVisible = item.model.FriendlyName.indexOf(deviceType) !== -1
+ var visible = false;
+ if (item.model.FriendlyName.indexOf(deviceType) !== -1) {
+ visible = true;
+ }
+ for (var j = 0; j < aliases.count; j++) {
+ var aliasitem = aliases.get(j);
+ if (item.model.FriendlyName.indexOf(aliasitem.name) !== -1) {
+ visible = true;
+ }
+
+ }
+ item.inVisible = visible
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/PairSelectDeviceType.qml
^
|
@@ -12,98 +12,137 @@
if (needsAuth) {
var authdialog = app.pages.push(Qt.resolvedUrl("./AuthKeyDialog.qml"));
authdialog.accepted.connect(function() {
- var pairpage = app.pages.push(Qt.resolvedUrl("./PairPage.qml"));
- pairpage.deviceType = deviceType;})
+ app.pages.push(Qt.resolvedUrl("./PairPage.qml"), { deviceType : deviceType, aliases: aliases} );
+ })
} else {
- var pairpage = app.pages.push(Qt.resolvedUrl("./PairPage.qml"));
- pairpage.deviceType = deviceType;
+ app.pages.push(Qt.resolvedUrl("./PairPage.qml"), { deviceType : deviceType, aliases: aliases} );
}
}
}
model: ListModel {
ListElement {
+ deviceType: "AsteroidOS"
+ icon: "../pics/devices/asteroidos.png"
+ aliases: [
+ ListElement { name: 'bass' },
+ ListElement { name: 'sturgeon' },
+ ListElement { name: 'narwhal' },
+ ListElement { name: 'sparrow' },
+ ListElement { name: 'dory' },
+ ListElement { name: 'lenok' },
+ ListElement { name: 'catfish' },
+ ListElement { name: 'carp' },
+ ListElement { name: 'smelt' },
+ ListElement { name: 'anthias' },
+ ListElement { name: 'pike' },
+ ListElement { name: 'sawfish' },
+ ListElement { name: 'ray/firefish' },
+ ListElement { name: 'beluga' },
+ ListElement { name: 'skipjack' },
+ ListElement { name: 'koi' },
+ ListElement { name: 'mooneye' },
+ ListElement { name: 'swift' },
+ ListElement { name: 'nemo' },
+ ListElement { name: 'hoki' },
+ ListElement { name: 'minnow' },
+ ListElement { name: 'tetra' },
+ ListElement { name: 'sprat' },
+ ListElement { name: 'kingyo' },
+ ListElement { name: 'medaka' }
+ ]
+ }
+ ListElement {
deviceType: "Amazfit Bip Watch"
icon: "../pics/devices/amazfit-bip.png"
+ aliases: []
}
ListElement {
deviceType: "Amazfit Bip Lite"
icon: "../pics/devices/amazfit-bip.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit Bip S"
icon: "../pics/devices/amazfit-bips.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit GTS"
icon: "../pics/devices/amazfit-gts.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit GTS 2"
icon: "../pics/devices/amazfit-gts2.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit GTR"
icon: "../pics/devices/amazfit-gtr.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit GTR 2"
icon: "../pics/devices/amazfit-gtr2.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit Cor"
icon: "../pics/devices/amazfit-cor.png"
+ aliases: []
}
ListElement {
deviceType: "MI Band 2"
icon: "../pics/devices/miband2.png"
+ aliases: []
}
ListElement {
deviceType: "Mi Band 3"
icon: "../pics/devices/miband3.png"
+ aliases: []
}
ListElement {
deviceType: "Mi Smart Band 4"
icon: "../pics/devices/miband4.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "Amazfit Stratos 3"
icon: "../pics/devices/miband4.png"
auth: true
+ aliases: []
}
ListElement {
deviceType: "InfiniTime"
icon: "../pics/devices/pinetime.png"
auth: false
- }
- ListElement {
- deviceType: "Pinetime"
- icon: "../pics/devices/pinetime.png"
- auth: false
+ aliases: [ ListElement { name: "Pinetime" } ]
}
ListElement {
deviceType: "Bangle.js"
icon: "../pics/devices/banglejs.png"
auth: false
+ aliases: []
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/Settings-alarms.qml
^
|
@@ -57,7 +57,6 @@
text: qsTr("Save Settings")
onClicked: {
saveSettings();
- app.pages.pop();
}
}
@@ -69,6 +68,7 @@
running: false
onTriggered: {
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_ALARMS);
+ app.pages.pop();
}
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/Settings-device.qml
^
|
@@ -106,7 +106,6 @@
text: qsTr("Save Settings")
onClicked: {
saveSettings();
- app.pages.pop();
}
}
}
@@ -122,6 +121,7 @@
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_DEVICE_TIME);
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_DEVICE_UNIT);
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_DISCONNECT_NOTIFICATION);
+ app.pages.pop();
}
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/Settings-huami-shortcuts.qml
^
|
@@ -58,7 +58,6 @@
onClicked: {
saveDisplayItems();
saveSettings();
- app.pages.pop();
}
}
@@ -70,6 +69,7 @@
running: false
onTriggered: {
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_DEVICE_DISPLAY_ITEMS);
+ app.pages.pop();
}
}
}
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pages/Settings-profile.qml
^
|
@@ -209,7 +209,6 @@
text: qsTr("Save Profile")
onClicked: {
saveProfile();
- app.pages.pop();
}
}
Timer {
@@ -225,6 +224,7 @@
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_USER_DISPLAY_ON_LIFT);
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_USER_ALL_DAY_HRM);
DaemonInterfaceInstance.applyDeviceSetting(Amazfish.SETTING_USER_HRM_SLEEP_DETECTION)
+ app.pages.pop();
}
}
}
|
|
Added |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/qml/pics/devices/asteroidos.png
^
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/src/daemoninterface.cpp
^
|
@@ -330,6 +330,13 @@
iface->call(QStringLiteral("fetchLogs"));
}
+void DaemonInterface::requestScreenshot() {
+ if (!iface || !iface->isValid()) {
+ return;
+ }
+ iface->call(QStringLiteral("requestScreenshot"));
+}
+
QStringList DaemonInterface::supportedDisplayItems()
{
if (!iface || !iface->isValid()) {
|
[-]
[+]
|
Changed |
_service:tar_git:harbour-amazfish-2.2.4.tar.bz2/ui/src/daemoninterface.h
^
|
@@ -52,6 +52,7 @@
Q_INVOKABLE void reloadCities();
Q_INVOKABLE void enableFeature(Amazfish::Feature feature);
Q_INVOKABLE void fetchLogs();
+ Q_INVOKABLE void requestScreenshot();
Q_INVOKABLE QStringList supportedDisplayItems();
public slots:
|