From 34ade62e4eb1575a6f9aae63a4b1f8564f17e3a2 Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 11 Jun 2023 13:14:25 +0200 Subject: [PATCH] Improve Deconz backend version number representation Dresden Electronics themselves seem to be using the hex representation in most places. Users are confused why nymea prints the version so different than the conbee website. --- .../backends/deconz/zigbeenetworkdeconz.cpp | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/libnymea-zigbee/backends/deconz/zigbeenetworkdeconz.cpp b/libnymea-zigbee/backends/deconz/zigbeenetworkdeconz.cpp index 9342031..61a80fa 100644 --- a/libnymea-zigbee/backends/deconz/zigbeenetworkdeconz.cpp +++ b/libnymea-zigbee/backends/deconz/zigbeenetworkdeconz.cpp @@ -496,20 +496,39 @@ void ZigbeeNetworkDeconz::runNetworkInitProcess() if (reply->statusCode() != Deconz::StatusCodeSuccess) { qCWarning(dcZigbeeController()) << "Request" << reply->command() << "finished with error" << reply->statusCode(); } else { - qCDebug(dcZigbeeNetwork()) << "Version request finished successfully" << ZigbeeUtils::convertByteArrayToHexString(reply->responseData()); // Note: version is an uint32 value, little endian, but we can read the individual bytes in reversed order + qCDebug(dcZigbeeNetwork()) << "Version request finished successfully" << ZigbeeUtils::convertByteArrayToHexString(reply->responseData()); quint8 majorVersion = static_cast(reply->responseData().at(3)); quint8 minorVersion = static_cast(reply->responseData().at(2)); Deconz::Platform platform = static_cast(reply->responseData().at(1)); - m_firmwareVersion = QString("%1.%2").arg(majorVersion).arg(minorVersion); - qCDebug(dcZigbeeNetwork()) << "Firmware version" << firmwareVersion << platform; + quint8 patchVersion = static_cast(reply->responseData().at(0)); + QString platformString; + switch (platform) { + case Deconz::PlatformConbeeRaspbee: + platformString = "RaspBee"; + break; + case Deconz::PlatformConbeeII: + platformString = "ConBee II"; + break; + default: + platformString = "N/A"; + } + + QString versionString = QString("0x%1%2%3%4").arg(majorVersion, 2, 16, QChar('0')) + .arg(minorVersion, 2, 16, QChar('0')) + .arg(platform, 2, 16, QChar('0')) + .arg(patchVersion, 2, 16, QChar('0')); + + + m_firmwareVersion = QString("%1.%2 - %3 (%4)").arg(majorVersion).arg(minorVersion).arg(platformString).arg(QString(versionString)); + qCDebug(dcZigbeeNetwork()) << "Firmware version" << firmwareVersion << platform << versionString; } if (!m_firmwareVersion.isEmpty()) { - m_controller->setFirmwareVersion(QString("%1 - %2").arg(m_firmwareVersion).arg(m_protocolVersion)); + m_controller->setFirmwareVersion(m_firmwareVersion); } else { - m_controller->setFirmwareVersion(m_protocolVersion); + m_controller->setFirmwareVersion("N/A"); } qCDebug(dcZigbeeNetwork()) << "Reading current network state";