From f4b6003664484669a3103833742b97845e250365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 13 Mar 2018 10:46:44 +0100 Subject: [PATCH] Add advertise parameter --- nymea-networkmanager.service | 2 +- .../bluetooth/bluetoothserver.cpp | 27 ++++++++------- nymea-networkmanager/core.cpp | 34 ++++++++++++++++--- nymea-networkmanager/core.h | 11 ++++++ nymea-networkmanager/main.cpp | 17 ++++++++-- 5 files changed, 71 insertions(+), 20 deletions(-) diff --git a/nymea-networkmanager.service b/nymea-networkmanager.service index 8c26bd6..2b1a8df 100644 --- a/nymea-networkmanager.service +++ b/nymea-networkmanager.service @@ -4,7 +4,7 @@ Documentation=https://github.com/guh/nymea-networkmanager After=network.target [Service] -ExecStart=/usr/bin/nymea-networkmanager -d +ExecStart=/usr/bin/nymea-networkmanager -a nymea -p nymea-box StandardOutput=journal StandardError=journal Restart=on-failure diff --git a/nymea-networkmanager/bluetooth/bluetoothserver.cpp b/nymea-networkmanager/bluetooth/bluetoothserver.cpp index eb7b9bb..42d0e1b 100644 --- a/nymea-networkmanager/bluetooth/bluetoothserver.cpp +++ b/nymea-networkmanager/bluetooth/bluetoothserver.cpp @@ -72,19 +72,19 @@ QLowEnergyServiceData BluetoothServer::deviceInformationServiceData() modelNumberCharData.setProperties(QLowEnergyCharacteristic::Read); serviceData.addCharacteristic(modelNumberCharData); - // Firmware revision string 0x2a26 - QLowEnergyCharacteristicData firmwareRevisionCharData; - firmwareRevisionCharData.setUuid(QBluetoothUuid::FirmwareRevisionString); - firmwareRevisionCharData.setValue(QString("1.0.0").toUtf8()); - firmwareRevisionCharData.setProperties(QLowEnergyCharacteristic::Read); - serviceData.addCharacteristic(firmwareRevisionCharData); +// // Firmware revision string 0x2a26 +// QLowEnergyCharacteristicData firmwareRevisionCharData; +// firmwareRevisionCharData.setUuid(QBluetoothUuid::FirmwareRevisionString); +// firmwareRevisionCharData.setValue(QString("1.0.0").toUtf8()); +// firmwareRevisionCharData.setProperties(QLowEnergyCharacteristic::Read); +// serviceData.addCharacteristic(firmwareRevisionCharData); - // Hardware revision string 0x2a27 - QLowEnergyCharacteristicData hardwareRevisionCharData; - hardwareRevisionCharData.setUuid(QBluetoothUuid::HardwareRevisionString); - hardwareRevisionCharData.setValue(QString("1.0.0").toUtf8()); - hardwareRevisionCharData.setProperties(QLowEnergyCharacteristic::Read); - serviceData.addCharacteristic(hardwareRevisionCharData); +// // Hardware revision string 0x2a27 +// QLowEnergyCharacteristicData hardwareRevisionCharData; +// hardwareRevisionCharData.setUuid(QBluetoothUuid::HardwareRevisionString); +// hardwareRevisionCharData.setValue(QString("1.0.0").toUtf8()); +// hardwareRevisionCharData.setProperties(QLowEnergyCharacteristic::Read); +// serviceData.addCharacteristic(hardwareRevisionCharData); // Software revision string 0x2a28 QLowEnergyCharacteristicData softwareRevisionCharData; @@ -112,7 +112,7 @@ QLowEnergyServiceData BluetoothServer::genericAccessServiceData() // Device name 0x2a00 QLowEnergyCharacteristicData nameCharData; nameCharData.setUuid(QBluetoothUuid::DeviceName); - nameCharData.setValue(QString("nymea-networkmanager").toUtf8()); + nameCharData.setValue(QCoreApplication::applicationName().toUtf8()); nameCharData.setProperties(QLowEnergyCharacteristic::Read); serviceData.addCharacteristic(nameCharData); @@ -367,6 +367,7 @@ void BluetoothServer::start(WirelessNetworkDevice *wirelessDevice) advertisingData.setDiscoverability(QLowEnergyAdvertisingData::DiscoverabilityGeneral); advertisingData.setIncludePowerLevel(true); advertisingData.setLocalName("nymea"); + // TODO: set guh manufacturer SIG data // Note: start advertising in 100 ms interval, this makes the device better discoverable on certain phones diff --git a/nymea-networkmanager/core.cpp b/nymea-networkmanager/core.cpp index 1848fe2..bc7e3ed 100644 --- a/nymea-networkmanager/core.cpp +++ b/nymea-networkmanager/core.cpp @@ -55,6 +55,32 @@ NymeadService *Core::nymeaService() const return m_nymeaService; } +QString Core::advertiseName() const +{ + return m_advertiseName; +} + +void Core::setAdvertiseName(const QString &name) +{ + m_advertiseName = name; +} + +QString Core::platformName() const +{ + return m_platformName; +} + +void Core::setPlatformName(const QString &name) +{ + m_platformName = name; +} + +void Core::run() +{ + // Start the networkmanager service + m_networkManager->start(); +} + Core::Core(QObject *parent) : QObject(parent) { @@ -68,10 +94,7 @@ Core::Core(QObject *parent) : m_nymeaService = new NymeadService(false, this); - // Start the networkmanager service - if (!m_networkManager->start()) { - qCWarning(dcApplication()) << "Could not start network manager. The service is not available. Make sure the network-manager is installed and running."; - } + } Core::~Core() @@ -118,6 +141,9 @@ void Core::startService() return; } + if (m_bluetoothServer->running()) + return; + // Disable bluetooth on nymea in order to not crash with client connections m_nymeaService->enableBluetooth(false); diff --git a/nymea-networkmanager/core.h b/nymea-networkmanager/core.h index 0bed2ec..9c5d6a3 100644 --- a/nymea-networkmanager/core.h +++ b/nymea-networkmanager/core.h @@ -39,6 +39,14 @@ public: BluetoothServer *bluetoothServer() const; NymeadService *nymeaService() const; + QString advertiseName() const; + void setAdvertiseName(const QString &name); + + QString platformName() const; + void setPlatformName(const QString &name); + + void run(); + private: explicit Core(QObject *parent = nullptr); ~Core(); @@ -49,6 +57,9 @@ private: BluetoothServer *m_bluetoothServer = nullptr; NymeadService *m_nymeaService = nullptr; + QString m_advertiseName; + QString m_platformName; + void evaluateNetworkManagerState(const NetworkManager::NetworkManagerState &state); void startService(); diff --git a/nymea-networkmanager/main.cpp b/nymea-networkmanager/main.cpp index 6ff3e92..c2e9a11 100644 --- a/nymea-networkmanager/main.cpp +++ b/nymea-networkmanager/main.cpp @@ -80,7 +80,7 @@ int main(int argc, char *argv[]) Application application(argc, argv); application.setApplicationName("nymea-networkmanager"); application.setOrganizationName("nymea"); - application.setApplicationVersion("0.0.1"); + application.setApplicationVersion("0.0.2"); // Command line parser QCommandLineParser parser; @@ -90,6 +90,15 @@ int main(int argc, char *argv[]) QCommandLineOption debugOption(QStringList() << "d" << "debug", "Enable more debug output."); parser.addOption(debugOption); + + QCommandLineOption advertiseNameOption(QStringList() << "a" << "advertise-name", "The name of the bluetooth server. Default \"nymea\".", "NAME"); + advertiseNameOption.setDefaultValue("nymea"); + parser.addOption(advertiseNameOption); + + QCommandLineOption platformNameOption(QStringList() << "p" << "platform-name", "The name of the platform this daemon is running. Default \"nymea-box\".", "NAME"); + platformNameOption.setDefaultValue("nymea-box"); + parser.addOption(platformNameOption); + parser.process(application); // Enable debug categories @@ -103,9 +112,13 @@ int main(int argc, char *argv[]) qCDebug(dcApplication()) << "====================================="; qCDebug(dcApplication()) << "Starting nymea-networkmanager" << application.applicationVersion(); qCDebug(dcApplication()) << "====================================="; + qCDebug(dcApplication()) << "Advertising name:" << parser.value(advertiseNameOption); + qCDebug(dcApplication()) << "Platform name:" << parser.value(platformNameOption); // Start core - Core::instance(); + Core::instance()->setAdvertiseName(parser.value(advertiseNameOption)); + Core::instance()->setPlatformName(parser.value(platformNameOption)); + Core::instance()->run(); return application.exec(); }