diff --git a/libnymea-core/jsonrpc/zigbeehandler.cpp b/libnymea-core/jsonrpc/zigbeehandler.cpp index 15453b96..eab8bb7c 100644 --- a/libnymea-core/jsonrpc/zigbeehandler.cpp +++ b/libnymea-core/jsonrpc/zigbeehandler.cpp @@ -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()); returns.insert("o:networkUuid", enumValueName(Uuid)); registerMethod("AddNetwork", description, params, returns); @@ -300,7 +301,16 @@ JsonReply *ZigbeeHandler::AddNetwork(const QVariantMap ¶ms) return createReply(returnMap); } - QPair 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::ZigbeeErrorInvalidChannel)); + return createReply(returnMap); + } + } + + QPair result = m_zigbeeManager->createZigbeeNetwork(serialPort, baudRate, ZigbeeAdapter::backendNames().key(backendString), channelMask); if (result.first == ZigbeeManager::ZigbeeErrorNoError) { returnMap.insert("networkUuid", result.second); } diff --git a/libnymea-core/zigbee/zigbeemanager.cpp b/libnymea-core/zigbee/zigbeemanager.cpp index beea7a1e..3b5a68fe 100644 --- a/libnymea-core/zigbee/zigbeemanager.cpp +++ b/libnymea-core/zigbee/zigbeemanager.cpp @@ -149,7 +149,7 @@ QHash ZigbeeManager::zigbeeNetworks() const QPair 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()) { diff --git a/libnymea-core/zigbee/zigbeemanager.h b/libnymea-core/zigbee/zigbeemanager.h index ce59aeef..b3cae493 100644 --- a/libnymea-core/zigbee/zigbeemanager.h +++ b/libnymea-core/zigbee/zigbeemanager.h @@ -62,7 +62,8 @@ public: ZigbeeErrorNetworkOffline, ZigbeeErrorUnknownBackend, ZigbeeErrorNodeNotFound, - ZigbeeErrorForbidden + ZigbeeErrorForbidden, + ZigbeeErrorInvalidChannel, }; Q_ENUM(ZigbeeError) diff --git a/server/server.pro b/server/server.pro index a4b21100..a952594a 100644 --- a/server/server.pro +++ b/server/server.pro @@ -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 diff --git a/tests/auto/api.json b/tests/auto/api.json index 1e6eba13..8633b9fb 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -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": {