From cc1af30276d3650dd71589cd1d7c005da3a64873 Mon Sep 17 00:00:00 2001 From: "Javier S. Pedro" Date: Sat, 20 Sep 2014 19:18:00 +0200 Subject: add normal/rfcomm bluetooth transport for older MWs --- src/controller.cpp | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) (limited to 'src/controller.cpp') diff --git a/src/controller.cpp b/src/controller.cpp index 70be33a..5593582 100644 --- a/src/controller.cpp +++ b/src/controller.cpp @@ -7,6 +7,7 @@ #include "controller.h" static const QLatin1String setting_address("address"); +static const QLatin1String setting_transport("transport"); static const QLatin1String setting_cur_page("cur-page"); static const QLatin1String setting_24h_mode("24h-mode"); static const QLatin1String setting_ddmm_mode("ddmm-mode"); @@ -31,13 +32,18 @@ Controller::Controller(const QString &settingsPrefix, QQuickView *view, QObject connect(_monitor, &NotificationMonitor::incomingNotification, this, &Controller::handleIncomingNotification); connect(_widgets, &QAbstractItemModel::dataChanged, this, &Controller::handleWidgetChanged); - connectToAddress(_settings->value(setting_address).toString()); + connectToDevice(); } Controller::~Controller() { } +bool Controller::isWatchConnected() const +{ + return _metawatch && _metawatch->isDeviceConnected(); +} + MetaWatch::WatchMode Controller::mode() const { return _curMode; @@ -52,7 +58,9 @@ void Controller::setPage(int page) { if (page != _curPage) { _curPage = page; - _metawatch->updateLcdDisplayPage(_curPage); + if (isWatchConnected()) { + _metawatch->updateLcdDisplayPage(_curPage); + } emit pageChanged(); } } @@ -67,8 +75,19 @@ bool Controller::batteryCharging() const return _batteryCharging; } -void Controller::connectToAddress(const QString &address) +void Controller::connectToDevice() { + const QString address = _settings->value(setting_address).toString(); + const QString transport_name = _settings->value(setting_transport).toString(); + + qDebug() << "Using transport" << transport_name; + + MetaWatch::TransportType transport = MetaWatch::TransportBluetoothLowEnergy; // Default + + if (transport_name.compare("bluetooth", Qt::CaseInsensitive) == 0) { + transport = MetaWatch::TransportBluetooth; + } + if (_metawatch) { if (address == _address) { // Connecting to the same address and there's already a watch object created @@ -89,7 +108,7 @@ void Controller::connectToAddress(const QString &address) return; } - _metawatch = new MetaWatch(_address, this); + _metawatch = new MetaWatch(_address, transport, this); connect(_metawatch, &MetaWatch::connected, _reconnect, &ReconnectTimer::stop); connect(_metawatch, &MetaWatch::connected, this, &Controller::handleMetaWatchConnected); connect(_metawatch, &MetaWatch::disconnected, _reconnect, &ReconnectTimer::scheduleNextAttempt); @@ -106,6 +125,8 @@ void Controller::updateProperties() { MetaWatch::WatchProperties props; + if (!isWatchConnected()) return; + if (_settings->value(setting_24h_mode).toBool()) { props |= MetaWatch::WatchPropertyHourFormat24h; } @@ -133,7 +154,7 @@ void Controller::handleSettingChanged(const QString &key) { qDebug() << "Setting" << key << "changed"; if (key == setting_address) { - connectToAddress(_settings->value(setting_address).toString()); + connectToDevice(); } else if (key == setting_cur_page) { int page = _settings->value(setting_cur_page).toInt(); if (_curPage != page) { @@ -195,6 +216,10 @@ void Controller::handleMetaWatchBatteryStatus(bool charging, int charge) void Controller::handleIncomingNotification(const QString &sender, const QIcon &icon, const QString &summary, const QString &body) { + if (!isWatchConnected()) { + return; // Ignoring notification if metawatch is not connected. + } + QImage image(96, 96, QImage::Format_MonoLSB); QPainter p(&image); @@ -249,10 +274,13 @@ void Controller::handleIncomingNotification(const QString &sender, const QIcon & void Controller::handleWidgetChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector &roles) { if (roles.indexOf(WidgetInfoModel::UrlRole) >= 0) { + if (!isWatchConnected()) return; + // Can't send partial updates to watch, so entire list must be // resubmitted everytime something important changes _metawatch->updateWidgetList(_widgets->toList()); + // If the changed widget is on the current page, watch needs to refresh. if (_widgets->data(topLeft, WidgetInfoModel::PageRole).toInt() == _curPage) { _metawatch->updateLcdDisplayPage(_curPage); } -- cgit v1.2.3