Fix notification issues and initialize wireless state

This commit is contained in:
Simon Stürz 2018-07-03 14:50:43 +02:00
parent a88e9a1131
commit b877b72cba
6 changed files with 24 additions and 7 deletions

View File

@ -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)

View File

@ -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);

View File

@ -54,6 +54,7 @@ public:
Q_ENUM(NetworkServiceResponse)
explicit NetworkService(QLowEnergyService *service, QObject *parent = 0);
~NetworkService();
QLowEnergyService *service();

View File

@ -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;

View File

@ -62,6 +62,7 @@ public:
Q_ENUM(WirelessServiceResponse)
explicit WirelessService(QLowEnergyService *service, QObject *parent = 0);
~WirelessService();
QLowEnergyService *service();

View File

@ -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();