diff --git a/libnymea-zigbee/backends/deconz/zigbeebridgecontrollerdeconz.h b/libnymea-zigbee/backends/deconz/zigbeebridgecontrollerdeconz.h index 824d01c..aaa2f84 100644 --- a/libnymea-zigbee/backends/deconz/zigbeebridgecontrollerdeconz.h +++ b/libnymea-zigbee/backends/deconz/zigbeebridgecontrollerdeconz.h @@ -155,7 +155,6 @@ private slots: void resetControllerWatchdog(); void sendNextRequest(); - public slots: bool enable(const QString &serialPort, qint32 baudrate); void disable(); diff --git a/libnymea-zigbee/backends/nxp/interface/nxp.h b/libnymea-zigbee/backends/nxp/interface/nxp.h new file mode 100644 index 0000000..0683f52 --- /dev/null +++ b/libnymea-zigbee/backends/nxp/interface/nxp.h @@ -0,0 +1,32 @@ +#ifndef NXP_H +#define NXP_H + +#include + +class Nxp +{ + Q_GADGET +public: + enum Command { + CommandGetVersion = 0x00, + CommandGetDeviceState = 0x01 + }; + Q_ENUM(Command) + + enum Notification { + NotificationDeviceStatusChanged = 0x7D, + NotificationDebugMessage = 0xFE + }; + Q_ENUM(Notification) + + enum Status { + StatusSuccess = 0x00, + StatusProtocolError = 0x01, + StatusUnknownCommand = 0x02, + StatusInvalidCrc = 0x03 + }; + Q_ENUM(Status) + +}; + +#endif // NXP_H diff --git a/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.cpp b/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.cpp new file mode 100644 index 0000000..b778f1e --- /dev/null +++ b/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.cpp @@ -0,0 +1,17 @@ +#include "zigbeebridgecontrollernxp.h" + +ZigbeeBridgeControllerNxp::ZigbeeBridgeControllerNxp(QObject *parent) : + ZigbeeBridgeController(parent) +{ + +} + +bool ZigbeeBridgeControllerNxp::enable(const QString &serialPort, qint32 baudrate) +{ + return m_interface->enable(serialPort, baudrate); +} + +void ZigbeeBridgeControllerNxp::disable() +{ + m_interface->disable(); +} diff --git a/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.h b/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.h new file mode 100644 index 0000000..4ae462c --- /dev/null +++ b/libnymea-zigbee/backends/nxp/zigbeebridgecontrollernxp.h @@ -0,0 +1,35 @@ +#ifndef ZIGBEEBRIDGECONTROLLERNXP_H +#define ZIGBEEBRIDGECONTROLLERNXP_H + +#include +#include +#include +#include + +#include "zigbee.h" +#include "zigbeeaddress.h" +#include "zigbeenetworkkey.h" +#include "zigbeenetworkrequest.h" +#include "zigbeebridgecontroller.h" +#include "interface/zigbeeinterfacenxp.h" + +class ZigbeeBridgeControllerNxp : public ZigbeeBridgeController +{ + Q_OBJECT +public: + explicit ZigbeeBridgeControllerNxp(QObject *parent = nullptr); + ~ZigbeeBridgeControllerNxp() override; + +signals: + +private: + ZigbeeInterfaceNxp *m_interface = nullptr; + quint8 m_sequenceNumber = 0; + +public slots: + bool enable(const QString &serialPort, qint32 baudrate); + void disable(); + +}; + +#endif // ZIGBEEBRIDGECONTROLLERNXP_H diff --git a/libnymea-zigbee/backends/nxp/zigbeenetworknxp.cpp b/libnymea-zigbee/backends/nxp/zigbeenetworknxp.cpp new file mode 100644 index 0000000..17f63bc --- /dev/null +++ b/libnymea-zigbee/backends/nxp/zigbeenetworknxp.cpp @@ -0,0 +1,72 @@ +#include "zigbeenetworknxp.h" +#include "loggingcategory.h" +#include "zigbeeutils.h" + +ZigbeeNetworkNxp::ZigbeeNetworkNxp(QObject *parent) : + ZigbeeNetwork(parent) +{ + m_controller = new ZigbeeBridgeControllerNxp(this); + connect(m_controller, &ZigbeeBridgeControllerNxp::availableChanged, this, &ZigbeeNetworkNxp::onControllerAvailableChanged); + //connect(m_controller, &ZigbeeBridgeControllerNxp::apsDataConfirmReceived, this, &ZigbeeNetworkNxp::onApsDataConfirmReceived); + //connect(m_controller, &ZigbeeBridgeControllerNxp::apsDataIndicationReceived, this, &ZigbeeNetworkNxp::onApsDataIndicationReceived); + +} + +ZigbeeBridgeController *ZigbeeNetworkNxp::bridgeController() const +{ + if (!m_controller) + return nullptr; + + return qobject_cast(m_controller); +} + +ZigbeeNetworkReply *ZigbeeNetworkNxp::sendRequest(const ZigbeeNetworkRequest &request) +{ + Q_UNUSED(request) + return nullptr; +} + +ZigbeeNetworkReply *ZigbeeNetworkNxp::setPermitJoin(quint16 shortAddress, quint8 duration) +{ + Q_UNUSED(shortAddress) + Q_UNUSED(duration) + return nullptr; +} + +void ZigbeeNetworkNxp::onControllerAvailableChanged(bool available) +{ + qCDebug(dcZigbeeNetwork()) << "Controller is" << (available ? "now available" : "not available any more"); +} + +void ZigbeeNetworkNxp::startNetwork() +{ + loadNetwork(); + + if (!m_controller->enable(serialPortName(), serialBaudrate())) { + m_permitJoining = false; + emit permitJoiningChanged(m_permitJoining); + setState(StateOffline); + setError(ErrorHardwareUnavailable); + return; + } + + m_permitJoining = false; + emit permitJoiningChanged(m_permitJoining); + + // Wait for the network to be started +} + +void ZigbeeNetworkNxp::stopNetwork() +{ + +} + +void ZigbeeNetworkNxp::reset() +{ + +} + +void ZigbeeNetworkNxp::factoryResetNetwork() +{ + +} diff --git a/libnymea-zigbee/backends/nxp/zigbeenetworknxp.h b/libnymea-zigbee/backends/nxp/zigbeenetworknxp.h new file mode 100644 index 0000000..a5e260e --- /dev/null +++ b/libnymea-zigbee/backends/nxp/zigbeenetworknxp.h @@ -0,0 +1,41 @@ +#ifndef ZIGBEENETWORKNXP_H +#define ZIGBEENETWORKNXP_H + +#include + +#include "zigbeenetwork.h" +#include "zigbeechannelmask.h" +#include "zcl/zigbeeclusterlibrary.h" +#include "zigbeebridgecontrollernxp.h" + +class ZigbeeNetworkNxp : public ZigbeeNetwork +{ + Q_OBJECT +public: + explicit ZigbeeNetworkNxp(QObject *parent = nullptr); + + ZigbeeBridgeController *bridgeController() const override; + + ZigbeeNetworkReply *sendRequest(const ZigbeeNetworkRequest &request) override; + ZigbeeNetworkReply *setPermitJoin(quint16 shortAddress = Zigbee::BroadcastAddressAllRouters, quint8 duration = 0xfe); + + + + +private: + ZigbeeBridgeControllerNxp *m_controller = nullptr; + bool m_networkRunning = false; + +private slots: + void onControllerAvailableChanged(bool available); + +signals: + +public slots: + void startNetwork() override; + void stopNetwork() override; + void reset() override; + void factoryResetNetwork() override; +}; + +#endif // ZIGBEENETWORKNXP_H diff --git a/libnymea-zigbee/libnymea-zigbee.pro b/libnymea-zigbee/libnymea-zigbee.pro index 0919e6a..74df3a3 100644 --- a/libnymea-zigbee/libnymea-zigbee.pro +++ b/libnymea-zigbee/libnymea-zigbee.pro @@ -9,6 +9,8 @@ SOURCES += \ backends/deconz/zigbeebridgecontrollerdeconz.cpp \ backends/deconz/zigbeenetworkdeconz.cpp \ backends/nxp/interface/zigbeeinterfacenxp.cpp \ + backends/nxp/zigbeebridgecontrollernxp.cpp \ + backends/nxp/zigbeenetworknxp.cpp \ zcl/general/zigbeeclusteridentify.cpp \ zcl/general/zigbeeclusterlevelcontrol.cpp \ zcl/general/zigbeeclusteronoff.cpp \ @@ -60,7 +62,10 @@ HEADERS += \ backends/deconz/interface/zigbeeinterfacedeconzreply.h \ backends/deconz/zigbeebridgecontrollerdeconz.h \ backends/deconz/zigbeenetworkdeconz.h \ + backends/nxp/interface/nxp.h \ backends/nxp/interface/zigbeeinterfacenxp.h \ + backends/nxp/zigbeebridgecontrollernxp.h \ + backends/nxp/zigbeenetworknxp.h \ zcl/general/zigbeeclusteridentify.h \ zcl/general/zigbeeclusterlevelcontrol.h \ zcl/general/zigbeeclusteronoff.h \