Add wifi mode property

pull/9/head
Michael Zanetti 2020-05-04 15:35:10 +02:00
parent 4a6df2b93c
commit 09630729cb
4 changed files with 51 additions and 76 deletions

View File

@ -68,7 +68,7 @@ WirelessService::WirelessService(QLowEnergyService *service, NetworkManager *net
m_device = m_networkManager->wirelessNetworkDevices().first(); m_device = m_networkManager->wirelessNetworkDevices().first();
connect(m_device, &WirelessNetworkDevice::bitRateChanged, this, &WirelessService::onWirelessDeviceBitRateChanged); connect(m_device, &WirelessNetworkDevice::bitRateChanged, this, &WirelessService::onWirelessDeviceBitRateChanged);
connect(m_device, &WirelessNetworkDevice::stateChanged, this, &WirelessService::onWirelessDeviceStateChanged); connect(m_device, &WirelessNetworkDevice::stateChanged, this, &WirelessService::onWirelessDeviceStateChanged);
connect(m_device, &WirelessNetworkDevice::modeChanged, this, &WirelessService::onWirelessModeChanged); connect(m_device, &WirelessNetworkDevice::wirelessModeChanged, this, &WirelessService::onWirelessModeChanged);
} }
QLowEnergyService *WirelessService::service() QLowEnergyService *WirelessService::service()
@ -119,9 +119,9 @@ QLowEnergyServiceData WirelessService::serviceData(NetworkManager *networkManage
wirelessModeCharacteristicData.addDescriptor(clientConfigDescriptorData); wirelessModeCharacteristicData.addDescriptor(clientConfigDescriptorData);
wirelessModeCharacteristicData.setValueLength(1, 1); wirelessModeCharacteristicData.setValueLength(1, 1);
if (networkManager->wirelessNetworkDevices().isEmpty()) { if (networkManager->wirelessNetworkDevices().isEmpty()) {
wirelessModeCharacteristicData.setValue(WirelessService::getWirelessMode(WirelessNetworkDevice::ModeUnknown)); wirelessModeCharacteristicData.setValue(WirelessService::getWirelessMode(WirelessNetworkDevice::WirelessModeUnknown));
} else { } else {
wirelessModeCharacteristicData.setValue(WirelessService::getWirelessMode(networkManager->wirelessNetworkDevices().first()->mode())); wirelessModeCharacteristicData.setValue(WirelessService::getWirelessMode(networkManager->wirelessNetworkDevices().first()->wirelessMode()));
} }
serviceData.addCharacteristic(wirelessModeCharacteristicData); serviceData.addCharacteristic(wirelessModeCharacteristicData);
@ -190,16 +190,16 @@ QByteArray WirelessService::getWirelessNetworkDeviceState(const NetworkDevice::N
return QByteArray::fromHex("00"); return QByteArray::fromHex("00");
} }
QByteArray WirelessService::getWirelessMode(WirelessNetworkDevice::Mode mode) QByteArray WirelessService::getWirelessMode(WirelessNetworkDevice::WirelessMode mode)
{ {
switch (mode) { switch (mode) {
case WirelessNetworkDevice::ModeUnknown: case WirelessNetworkDevice::WirelessModeUnknown:
return QByteArray::fromHex("00"); return QByteArray::fromHex("00");
case WirelessNetworkDevice::ModeAdhoc: case WirelessNetworkDevice::WirelessModeAdhoc:
return QByteArray::fromHex("01"); return QByteArray::fromHex("01");
case WirelessNetworkDevice::ModeInfrastructure: case WirelessNetworkDevice::WirelessModeInfrastructure:
return QByteArray::fromHex("02"); return QByteArray::fromHex("02");
case WirelessNetworkDevice::ModeAccessPoint: case WirelessNetworkDevice::WirelessModeAccessPoint:
return QByteArray::fromHex("03"); return QByteArray::fromHex("03");
} }
@ -605,7 +605,7 @@ void WirelessService::onWirelessDeviceStateChanged(const NetworkDevice::NetworkD
m_service->writeCharacteristic(characteristic, WirelessService::getWirelessNetworkDeviceState(state)); m_service->writeCharacteristic(characteristic, WirelessService::getWirelessNetworkDeviceState(state));
} }
void WirelessService::onWirelessModeChanged(WirelessNetworkDevice::Mode mode) void WirelessService::onWirelessModeChanged(WirelessNetworkDevice::WirelessMode mode)
{ {
if (!m_service) { if (!m_service) {
qCWarning(dcNetworkManagerBluetoothServer()) << "WirelessService: Could not update wireless device mode. Service not valid"; qCWarning(dcNetworkManagerBluetoothServer()) << "WirelessService: Could not update wireless device mode. Service not valid";

View File

@ -86,7 +86,7 @@ private:
// Note: static to be available in serviceData // Note: static to be available in serviceData
static QByteArray getWirelessNetworkDeviceState(const NetworkDevice::NetworkDeviceState &state); static QByteArray getWirelessNetworkDeviceState(const NetworkDevice::NetworkDeviceState &state);
static QByteArray getWirelessMode(WirelessNetworkDevice::Mode mode); static QByteArray getWirelessMode(WirelessNetworkDevice::WirelessMode mode);
void streamData(const QVariantMap &responseMap); void streamData(const QVariantMap &responseMap);
@ -116,7 +116,7 @@ private slots:
// Wireless network device // Wireless network device
void onWirelessDeviceBitRateChanged(const int &bitRate); void onWirelessDeviceBitRateChanged(const int &bitRate);
void onWirelessDeviceStateChanged(const NetworkDevice::NetworkDeviceState &state); void onWirelessDeviceStateChanged(const NetworkDevice::NetworkDeviceState &state);
void onWirelessModeChanged(WirelessNetworkDevice::Mode mode); void onWirelessModeChanged(WirelessNetworkDevice::WirelessMode mode);
}; };

View File

@ -86,9 +86,9 @@ WirelessNetworkDevice::WirelessNetworkDevice(const QDBusObjectPath &objectPath,
readAccessPoints(); readAccessPoints();
setMacAddress(m_wirelessInterface->property("HwAddress").toString()); m_macAddress = m_wirelessInterface->property("HwAddress").toString();
setMode(static_cast<Mode>(m_wirelessInterface->property("Mode").toUInt())); m_wirelessMode = static_cast<WirelessMode>(m_wirelessInterface->property("Mode").toUInt());
setBitrate(m_wirelessInterface->property("Bitrate").toInt()); m_bitRate = m_wirelessInterface->property("Bitrate").toInt() / 1000;
setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(m_wirelessInterface->property("ActiveAccessPoint"))); setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(m_wirelessInterface->property("ActiveAccessPoint")));
} }
@ -104,9 +104,9 @@ int WirelessNetworkDevice::bitRate() const
return m_bitRate; return m_bitRate;
} }
WirelessNetworkDevice::Mode WirelessNetworkDevice::mode() const WirelessNetworkDevice::WirelessMode WirelessNetworkDevice::wirelessMode() const
{ {
return m_mode; return m_wirelessMode;
} }
/*! Returns the current active \l{WirelessAccessPoint} of this \l{WirelessNetworkDevice}. */ /*! Returns the current active \l{WirelessAccessPoint} of this \l{WirelessNetworkDevice}. */
@ -169,34 +169,6 @@ void WirelessNetworkDevice::readAccessPoints()
argument.endArray(); argument.endArray();
} }
void WirelessNetworkDevice::setMacAddress(const QString &macAddress)
{
m_macAddress = macAddress;
}
void WirelessNetworkDevice::setMode(WirelessNetworkDevice::Mode mode)
{
if (m_mode == mode)
return;
m_mode = mode;
emit modeChanged(m_mode);
}
void WirelessNetworkDevice::setBitrate(int bitRate)
{
if (m_bitRate != bitRate / 1000) {
m_bitRate = bitRate / 1000;
emit bitRateChanged(m_bitRate);
emit deviceChanged();
}
}
void WirelessNetworkDevice::setLastScan(int lastScan)
{
m_lastScan = lastScan;
}
void WirelessNetworkDevice::setActiveAccessPoint(const QDBusObjectPath &activeAccessPointObjectPath) void WirelessNetworkDevice::setActiveAccessPoint(const QDBusObjectPath &activeAccessPointObjectPath)
{ {
if (m_activeAccessPointObjectPath != activeAccessPointObjectPath) { if (m_activeAccessPointObjectPath != activeAccessPointObjectPath) {
@ -251,20 +223,27 @@ void WirelessNetworkDevice::propertiesChanged(const QVariantMap &properties)
{ {
//qCDebug(dcNetworkManager()) << "WirelessNetworkDevice: Property changed" << properties; //qCDebug(dcNetworkManager()) << "WirelessNetworkDevice: Property changed" << properties;
if (properties.contains("Bitrate")) if (properties.contains("Bitrate")) {
setBitrate(properties.value("Bitrate").toInt()); m_bitRate = properties.value("Bitrate").toInt() / 1000;
emit bitRateChanged(m_bitRate);
}
if (properties.contains("ActiveAccessPoint")) if (properties.contains("Mode")) {
setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(properties.value("ActiveAccessPoint"))); m_wirelessMode = static_cast<WirelessMode>(m_wirelessInterface->property("Mode").toUInt());
emit wirelessModeChanged(m_wirelessMode);
if (properties.contains("Mode")) }
setMode(static_cast<Mode>(m_wirelessInterface->property("Mode").toUInt()));
// Note: available since 1.12 (-1 means never scanned) // Note: available since 1.12 (-1 means never scanned)
if (properties.contains("LastScan")) if (properties.contains("LastScan")) {
setLastScan(m_wirelessInterface->property("LastScan").toInt()); m_lastScan = m_wirelessInterface->property("LastScan").toInt();
emit lastScanChanged(m_lastScan);
}
if (properties.contains("ActiveAccessPoint")) {
setActiveAccessPoint(qdbus_cast<QDBusObjectPath>(properties.value("ActiveAccessPoint")));
}
emit deviceChanged();
} }
/*! Writes the given \a device to the given to \a debug. \sa WirelessNetworkDevice, */ /*! Writes the given \a device to the given to \a debug. \sa WirelessNetworkDevice, */
@ -272,7 +251,7 @@ QDebug operator<<(QDebug debug, WirelessNetworkDevice *device)
{ {
debug.nospace() << "WirelessNetworkDevice(" << device->interface() << ", "; debug.nospace() << "WirelessNetworkDevice(" << device->interface() << ", ";
debug.nospace() << device->macAddress() << ", "; debug.nospace() << device->macAddress() << ", ";
debug.nospace() << device->mode() << ", "; debug.nospace() << device->wirelessMode() << ", ";
debug.nospace() << device->bitRate() << " [Mb/s], "; debug.nospace() << device->bitRate() << " [Mb/s], ";
debug.nospace() << device->deviceStateString() << ") "; debug.nospace() << device->deviceStateString() << ") ";
return debug.space(); return debug.space();

View File

@ -46,20 +46,20 @@ class WirelessNetworkDevice : public NetworkDevice
{ {
Q_OBJECT Q_OBJECT
public: public:
enum Mode { enum WirelessMode {
ModeUnknown = 0, WirelessModeUnknown = 0,
ModeAdhoc = 1, WirelessModeAdhoc = 1,
ModeInfrastructure = 2, WirelessModeInfrastructure = 2,
ModeAccessPoint = 3 WirelessModeAccessPoint = 3
}; };
Q_ENUM(Mode) Q_ENUM(WirelessMode)
explicit WirelessNetworkDevice(const QDBusObjectPath &objectPath, QObject *parent = nullptr); explicit WirelessNetworkDevice(const QDBusObjectPath &objectPath, QObject *parent = nullptr);
// Properties // Properties
QString macAddress() const; QString macAddress() const;
int bitRate() const; int bitRate() const;
Mode mode() const; WirelessMode wirelessMode() const;
WirelessAccessPoint *activeAccessPoint(); WirelessAccessPoint *activeAccessPoint();
// Accesspoints // Accesspoints
@ -70,13 +70,23 @@ public:
// Methods // Methods
void scanWirelessNetworks(); void scanWirelessNetworks();
signals:
void bitRateChanged(int bitRate);
void wirelessModeChanged(WirelessMode mode);
void lastScanChanged(int lastScan);
private slots:
void accessPointAdded(const QDBusObjectPath &objectPath);
void accessPointRemoved(const QDBusObjectPath &objectPath);
void propertiesChanged(const QVariantMap &properties);
private: private:
QDBusInterface *m_wirelessInterface = nullptr; QDBusInterface *m_wirelessInterface = nullptr;
WirelessAccessPoint *m_activeAccessPoint = nullptr; WirelessAccessPoint *m_activeAccessPoint = nullptr;
int m_bitRate; int m_bitRate;
QString m_macAddress; QString m_macAddress;
Mode m_mode = ModeUnknown; WirelessMode m_wirelessMode = WirelessModeUnknown;
int m_lastScan = -1; int m_lastScan = -1;
QDBusObjectPath m_activeAccessPointObjectPath; QDBusObjectPath m_activeAccessPointObjectPath;
@ -84,21 +94,7 @@ private:
void readAccessPoints(); void readAccessPoints();
void setMacAddress(const QString &macAddress);
void setMode(Mode mode);
void setBitrate(int bitRate);
void setLastScan(int lastScan);
void setActiveAccessPoint(const QDBusObjectPath &activeAccessPointObjectPath); void setActiveAccessPoint(const QDBusObjectPath &activeAccessPointObjectPath);
private slots:
void accessPointAdded(const QDBusObjectPath &objectPath);
void accessPointRemoved(const QDBusObjectPath &objectPath);
void propertiesChanged(const QVariantMap &properties);
signals:
void bitRateChanged(int bitRate);
void modeChanged(Mode mode);
}; };
QDebug operator<<(QDebug debug, WirelessNetworkDevice *device); QDebug operator<<(QDebug debug, WirelessNetworkDevice *device);