diff --git a/nymea-networkmanager/bluetooth/bluetoothserver.cpp b/nymea-networkmanager/bluetooth/bluetoothserver.cpp index da6fd1e..643c0ba 100644 --- a/nymea-networkmanager/bluetooth/bluetoothserver.cpp +++ b/nymea-networkmanager/bluetooth/bluetoothserver.cpp @@ -345,7 +345,7 @@ void BluetoothServer::serviceError(const QLowEnergyService::ServiceError &error) void BluetoothServer::start() { // Check if a user is connected - if (connected()) { + if (m_connected) { qCDebug(dcBluetoothServer()) << "User is connected. Doing nothing."; return; } @@ -410,12 +410,12 @@ void BluetoothServer::stop() qCDebug(dcBluetoothServer()) << "-------------------------------------"; if (m_networkService) { - m_networkService->deleteLater(); + delete m_networkService; m_networkService = nullptr; } if (m_wirelessService) { - m_wirelessService->deleteLater(); + delete m_wirelessService; m_wirelessService = nullptr; } @@ -429,7 +429,7 @@ void BluetoothServer::stop() if (m_localDevice) { qCDebug(dcBluetoothServer()) << "Set host mode to connectable."; m_localDevice->setHostMode(QBluetoothLocalDevice::HostConnectable); - m_localDevice->deleteLater(); + delete m_localDevice; m_localDevice = nullptr; } @@ -453,7 +453,7 @@ void BluetoothServer::onNetworkingEnabledChanged(bool enabled) void BluetoothServer::onWirelessNetworkingEnabledChanged(bool enabled) { if (m_networkService) - m_networkService->setNetworkingEnabled(enabled); + m_networkService->setWirelessNetworkingEnabled(enabled); } void BluetoothServer::onNetworkManagerStateChanged(const NetworkManager::NetworkManagerState &state) diff --git a/nymea-networkmanager/bluetooth/networkservice.cpp b/nymea-networkmanager/bluetooth/networkservice.cpp index 39f0d14..b7a8d33 100644 --- a/nymea-networkmanager/bluetooth/networkservice.cpp +++ b/nymea-networkmanager/bluetooth/networkservice.cpp @@ -52,6 +52,11 @@ NetworkService::NetworkService(QLowEnergyService *service, QObject *parent) : setWirelessNetworkingEnabled(Core::instance()->networkManager()->wirelessEnabled()); } +NetworkService::~NetworkService() +{ + qCDebug(dcBluetoothServer()) << "Delete network service"; +} + QLowEnergyService *NetworkService::service() { return m_service; @@ -165,6 +170,7 @@ QLowEnergyServiceData NetworkService::serviceData() networkingEnabledStatusData.setUuid(networkingEnabledCharacteristicUuid); networkingEnabledStatusData.setValue(QByteArray(1, 0)); networkingEnabledStatusData.setProperties(QLowEnergyCharacteristic::Read | QLowEnergyCharacteristic::Notify); + networkingEnabledStatusData.addDescriptor(clientConfigDescriptorData); networkingEnabledStatusData.setValue(QByteArray::fromHex("00")); serviceData.addCharacteristic(networkingEnabledStatusData); @@ -172,6 +178,7 @@ QLowEnergyServiceData NetworkService::serviceData() QLowEnergyCharacteristicData wirelessEnabledStatusData; wirelessEnabledStatusData.setUuid(wirelessEnabledCharacteristicUuid); wirelessEnabledStatusData.setValue(QByteArray(1, 0)); + wirelessEnabledStatusData.addDescriptor(clientConfigDescriptorData); wirelessEnabledStatusData.setProperties(QLowEnergyCharacteristic::Read | QLowEnergyCharacteristic::Notify); wirelessEnabledStatusData.setValue(QByteArray::fromHex("00")); serviceData.addCharacteristic(wirelessEnabledStatusData); diff --git a/nymea-networkmanager/bluetooth/networkservice.h b/nymea-networkmanager/bluetooth/networkservice.h index 48b828f..89d1cb0 100644 --- a/nymea-networkmanager/bluetooth/networkservice.h +++ b/nymea-networkmanager/bluetooth/networkservice.h @@ -54,6 +54,7 @@ public: Q_ENUM(NetworkServiceResponse) explicit NetworkService(QLowEnergyService *service, QObject *parent = 0); + ~NetworkService(); QLowEnergyService *service(); diff --git a/nymea-networkmanager/bluetooth/wirelessservice.cpp b/nymea-networkmanager/bluetooth/wirelessservice.cpp index 4549b22..573e6e2 100644 --- a/nymea-networkmanager/bluetooth/wirelessservice.cpp +++ b/nymea-networkmanager/bluetooth/wirelessservice.cpp @@ -45,6 +45,11 @@ WirelessService::WirelessService(QLowEnergyService *service, QObject *parent) : connect(m_service, SIGNAL(error(QLowEnergyService::ServiceError)), this, SLOT(serviceError(QLowEnergyService::ServiceError))); } +WirelessService::~WirelessService() +{ + qCDebug(dcBluetoothServer()) << "Delete wireless service"; +} + QLowEnergyService *WirelessService::service() { return m_service; diff --git a/nymea-networkmanager/bluetooth/wirelessservice.h b/nymea-networkmanager/bluetooth/wirelessservice.h index d2ba966..8158d25 100644 --- a/nymea-networkmanager/bluetooth/wirelessservice.h +++ b/nymea-networkmanager/bluetooth/wirelessservice.h @@ -62,6 +62,7 @@ public: Q_ENUM(WirelessServiceResponse) explicit WirelessService(QLowEnergyService *service, QObject *parent = 0); + ~WirelessService(); QLowEnergyService *service(); diff --git a/nymea-networkmanager/core.cpp b/nymea-networkmanager/core.cpp index 8c79461..e51ad61 100644 --- a/nymea-networkmanager/core.cpp +++ b/nymea-networkmanager/core.cpp @@ -193,7 +193,6 @@ void Core::evaluateNetworkManagerState(const NetworkManager::NetworkManagerState stopService(); } break; - case NetworkManager::NetworkManagerStateUnknown: case NetworkManager::NetworkManagerStateAsleep: case NetworkManager::NetworkManagerStateDisconnected: @@ -230,7 +229,8 @@ void Core::startService() qCDebug(dcApplication()) << "Start bluetooth service"; m_bluetoothServer->setAdvertiseName(m_advertiseName); m_bluetoothServer->setMachineId(m_platformName); - m_bluetoothServer->start(); + + QTimer::singleShot(5000, m_bluetoothServer, &BluetoothServer::start); } void Core::stopService() @@ -285,6 +285,9 @@ void Core::onBluetoothServerConnectedChanged(bool connected) m_bluetoothServer->onNetworkManagerStateChanged(m_networkManager->state()); m_bluetoothServer->onNetworkingEnabledChanged(m_networkManager->networkingEnabled()); m_bluetoothServer->onWirelessNetworkingEnabledChanged(m_networkManager->wirelessEnabled()); + if (m_wirelessDevice) + m_bluetoothServer->onWirelessDeviceStateChanged(m_wirelessDevice->deviceState()); + } else { m_advertisingTimer->stop(); m_bluetoothServer->stop();