Merge PR #472: Add api to set the zigbee channel during network setup

pull/487/head
Jenkins nymea 2021-12-11 00:31:01 +01:00
commit a741b13994
5 changed files with 20 additions and 4 deletions

View File

@ -128,6 +128,7 @@ ZigbeeHandler::ZigbeeHandler(ZigbeeManager *zigbeeManager, QObject *parent) :
params.insert("serialPort", enumValueName(String));
params.insert("baudRate", enumValueName(Uint));
params.insert("backend", enumValueName(String));
params.insert("o:channelMask", enumValueName(Uint));
returns.insert("zigbeeError", enumRef<ZigbeeManager::ZigbeeError>());
returns.insert("o:networkUuid", enumValueName(Uuid));
registerMethod("AddNetwork", description, params, returns);
@ -300,7 +301,16 @@ JsonReply *ZigbeeHandler::AddNetwork(const QVariantMap &params)
return createReply(returnMap);
}
QPair<ZigbeeManager::ZigbeeError, QUuid> result = m_zigbeeManager->createZigbeeNetwork(serialPort, baudRate, ZigbeeAdapter::backendNames().key(backendString));
ZigbeeChannelMask channelMask = ZigbeeChannelMask::ChannelConfigurationAllChannels;
if (params.contains("channelMask")) {
channelMask = params.value("channelMask").toUInt() & ZigbeeChannelMask::ChannelConfigurationAllChannels;
if (channelMask == ZigbeeChannelMask::ChannelConfigurationNoChannel) {
returnMap.insert("zigbeeError", enumValueName<ZigbeeManager::ZigbeeError>(ZigbeeManager::ZigbeeErrorInvalidChannel));
return createReply(returnMap);
}
}
QPair<ZigbeeManager::ZigbeeError, QUuid> result = m_zigbeeManager->createZigbeeNetwork(serialPort, baudRate, ZigbeeAdapter::backendNames().key(backendString), channelMask);
if (result.first == ZigbeeManager::ZigbeeErrorNoError) {
returnMap.insert("networkUuid", result.second);
}

View File

@ -149,7 +149,7 @@ QHash<QUuid, ZigbeeNetwork *> ZigbeeManager::zigbeeNetworks() const
QPair<ZigbeeManager::ZigbeeError, QUuid> ZigbeeManager::createZigbeeNetwork(const QString &serialPort, uint baudRate, ZigbeeAdapter::ZigbeeBackendType backendType, ZigbeeChannelMask channelMask)
{
qCDebug(dcZigbee()) << "Start creating network for" << serialPort << baudRate << backendType << channelMask;
qCDebug(dcZigbee()) << "Creating network for" << serialPort << baudRate << backendType << channelMask;
// Make sure we don't have aleardy a network for this adapter
foreach (ZigbeeNetwork *existingNetwork, m_zigbeeNetworks.values()) {

View File

@ -62,7 +62,8 @@ public:
ZigbeeErrorNetworkOffline,
ZigbeeErrorUnknownBackend,
ZigbeeErrorNodeNotFound,
ZigbeeErrorForbidden
ZigbeeErrorForbidden,
ZigbeeErrorInvalidChannel,
};
Q_ENUM(ZigbeeError)

View File

@ -10,6 +10,9 @@ INSTALLS += target
QT += sql xml websockets bluetooth dbus network
CONFIG += link_pkgconfig
PKGCONFIG += nymea-zigbee
LIBS += -L$$top_builddir/libnymea/ -lnymea \
-L$$top_builddir/libnymea-core -lnymea-core \
-lnymea-remoteproxyclient

View File

@ -412,7 +412,8 @@
"ZigbeeErrorNetworkOffline",
"ZigbeeErrorUnknownBackend",
"ZigbeeErrorNodeNotFound",
"ZigbeeErrorForbidden"
"ZigbeeErrorForbidden",
"ZigbeeErrorInvalidChannel"
],
"ZigbeeNetworkState": [
"ZigbeeNetworkStateOffline",
@ -2120,6 +2121,7 @@
"params": {
"backend": "String",
"baudRate": "Uint",
"o:channelMask": "Uint",
"serialPort": "String"
},
"returns": {