From f955af29fdeffc6838f07434042beb411b673701 Mon Sep 17 00:00:00 2001 From: LordGrey <48840279+Lord-Grey@users.noreply.github.com> Date: Sun, 23 Feb 2020 23:18:34 +0100 Subject: [PATCH] fix: Nanoleaf - Udp Network init was missing (#698) * Fix Nanoleaf - Udp Network init was missing * ProviderUdp - Add init error handling --- libsrc/leddevice/LedDevice.cpp | 2 +- .../leddevice/dev_net/LedDeviceNanoleaf.cpp | 15 ++++++++--- libsrc/leddevice/dev_net/ProviderUdp.cpp | 26 +++++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/libsrc/leddevice/LedDevice.cpp b/libsrc/leddevice/LedDevice.cpp index ea144b99..0f1e7410 100644 --- a/libsrc/leddevice/LedDevice.cpp +++ b/libsrc/leddevice/LedDevice.cpp @@ -166,7 +166,7 @@ int LedDevice::updateLeds(const std::vector& ledValues) int retval = 0; if ( !_deviceReady || _deviceInError) { - std::cout << "LedDevice::updateLeds(), LedDevice NOT ready!" << std::endl; + //std::cout << "LedDevice::updateLeds(), LedDevice NOT ready!" << std::endl; return -1; } else diff --git a/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp b/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp index aabd5ded..1aad493c 100644 --- a/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp +++ b/libsrc/leddevice/dev_net/LedDeviceNanoleaf.cpp @@ -256,11 +256,18 @@ int LedDeviceNanoleaf::open() if ( init(_devConfig) ) { - if ( initLeds() ) + if ( !initNetwork() ) { - _deviceReady = true; - setEnable(true); - retval = 0; + this->setInError( "UDP Network error!" ); + } + else + { + if ( initLeds() ) + { + _deviceReady = true; + setEnable(true); + retval = 0; + } } } return retval; diff --git a/libsrc/leddevice/dev_net/ProviderUdp.cpp b/libsrc/leddevice/dev_net/ProviderUdp.cpp index a4d145ad..af7104ff 100644 --- a/libsrc/leddevice/dev_net/ProviderUdp.cpp +++ b/libsrc/leddevice/dev_net/ProviderUdp.cpp @@ -76,10 +76,21 @@ bool ProviderUdp::init(const QJsonObject &deviceConfig) bool ProviderUdp::initNetwork() { - bool isInitOK = true; + bool isInitOK = false; + + _udpSocket =new QUdpSocket(this); + + if ( _udpSocket != nullptr) + { + QHostAddress localAddress = QHostAddress::Any; + quint16 localPort = 0; + if ( !_udpSocket->bind(localAddress, localPort) ) + { + Warning ( _log, "Could not bind local address: %s", strerror(errno)); + } + isInitOK = true; + } - // TODO: Add Network-Error handling - _udpSocket = new QUdpSocket(this); return isInitOK; } @@ -93,17 +104,10 @@ int ProviderUdp::open() { if ( ! initNetwork()) { - this->setInError( "Network error!" ); + this->setInError( "UDP Network error!" ); } else { - QHostAddress localAddress = QHostAddress::Any; - quint16 localPort = 0; - - if ( !_udpSocket->bind(localAddress, localPort) ) - { - Warning ( _log, "Could not bind local address: %s", strerror(errno)); - } // Everything is OK -> enable device _deviceReady = true; setEnable(true);