Fix #676 (#679) LedDevice Open() did not initialised the device correctly.

* Cast fix
* Fix #676
This commit is contained in:
LordGrey 2020-02-14 21:58:10 +01:00 committed by GitHub
parent ed5455458b
commit 0fa5a24cec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 13 deletions

View File

@ -40,8 +40,19 @@ LedDevice::~LedDevice()
int LedDevice::open() int LedDevice::open()
{ {
setEnable (true); int retval = -1;
return 0; QString errortext;
_deviceReady = false;
// General initialisation and configuration of LedDevice
if ( init(_devConfig) )
{
// Everything is OK -> enable device
_deviceReady = true;
setEnable(true);
retval = 0;
}
return retval;
} }
void LedDevice::setInError(const QString& errorMsg) void LedDevice::setInError(const QString& errorMsg)
@ -71,6 +82,11 @@ void LedDevice::setEnable(bool enable)
Error(_log, "Device '%s' cannot be enabled, as it is not ready!", QSTRING_CSTR(_activeDeviceType)); Error(_log, "Device '%s' cannot be enabled, as it is not ready!", QSTRING_CSTR(_activeDeviceType));
return; return;
} }
else
{
// Open worked
_deviceInError = false;
}
} }
// emit signal when state changed // emit signal when state changed
@ -101,6 +117,8 @@ void LedDevice::setActiveDeviceType(const QString& deviceType)
bool LedDevice::init(const QJsonObject &deviceConfig) bool LedDevice::init(const QJsonObject &deviceConfig)
{ {
//Debug(_log, "deviceConfig: [%s]", QString(QJsonDocument(_devConfig).toJson(QJsonDocument::Compact)).toUtf8().constData() );
_colorOrder = deviceConfig["colorOrder"].toString("RGB"); _colorOrder = deviceConfig["colorOrder"].toString("RGB");
_activeDeviceType = deviceConfig["type"].toString("file").toLower(); _activeDeviceType = deviceConfig["type"].toString("file").toLower();
setLedCount(static_cast<unsigned int>( deviceConfig["currentLedCount"].toInt(1) )); // property injected to reflect real led count setLedCount(static_cast<unsigned int>( deviceConfig["currentLedCount"].toInt(1) )); // property injected to reflect real led count
@ -146,7 +164,7 @@ void LedDevice::stopRefreshTimer()
int LedDevice::updateLeds(const std::vector<ColorRgb>& ledValues) int LedDevice::updateLeds(const std::vector<ColorRgb>& ledValues)
{ {
int retval = 0; int retval = 0;
if ( !_deviceReady ) if ( !_deviceReady || _deviceInError)
{ {
std::cout << "LedDevice::updateLeds(), LedDevice NOT ready!" << std::endl; std::cout << "LedDevice::updateLeds(), LedDevice NOT ready!" << std::endl;
return -1; return -1;

View File

@ -11,6 +11,11 @@ LedDeviceWS281x::~LedDeviceWS281x()
{ {
} }
LedDevice* LedDeviceWS281x::construct(const QJsonObject &deviceConfig)
{
return new LedDeviceWS281x(deviceConfig);
}
bool LedDeviceWS281x::init(const QJsonObject &deviceConfig) bool LedDeviceWS281x::init(const QJsonObject &deviceConfig)
{ {
QString errortext; QString errortext;
@ -84,11 +89,6 @@ void LedDeviceWS281x::close()
} }
} }
LedDevice* LedDeviceWS281x::construct(const QJsonObject &deviceConfig)
{
return new LedDeviceWS281x(deviceConfig);
}
// Send new values down the LED chain // Send new values down the LED chain
int LedDeviceWS281x::write(const std::vector<ColorRgb> &ledValues) int LedDeviceWS281x::write(const std::vector<ColorRgb> &ledValues)
{ {

View File

@ -15,12 +15,12 @@ public:
/// ///
/// @param deviceConfig json device config /// @param deviceConfig json device config
/// ///
LedDeviceWS281x(const QJsonObject &deviceConfig); explicit LedDeviceWS281x(const QJsonObject &deviceConfig);
/// ///
/// Destructor of the LedDevice, waits for DMA to complete and then cleans up /// Destructor of the LedDevice, waits for DMA to complete and then cleans up
/// ///
~LedDeviceWS281x() override; virtual ~LedDeviceWS281x() override;
/// constructs leddevice /// constructs leddevice
static LedDevice* construct(const QJsonObject &deviceConfig); static LedDevice* construct(const QJsonObject &deviceConfig);
@ -30,7 +30,7 @@ public:
/// ///
/// @param deviceConfig the json device config /// @param deviceConfig the json device config
/// @return true if success /// @return true if success
bool init(const QJsonObject &deviceConfig) override; virtual bool init(const QJsonObject &deviceConfig) override;
public slots: public slots:
/// ///
@ -39,7 +39,7 @@ public slots:
/// ///
virtual void close() override; virtual void close() override;
private: protected:
/// ///
/// Writes the led color values to the led-device /// Writes the led color values to the led-device
/// ///
@ -48,6 +48,8 @@ private:
/// ///
virtual int write(const std::vector<ColorRgb> &ledValues) override; virtual int write(const std::vector<ColorRgb> &ledValues) override;
private:
ws2811_t _led_string; ws2811_t _led_string;
int _channel; int _channel;
RGBW::WhiteAlgorithm _whiteAlgorithm; RGBW::WhiteAlgorithm _whiteAlgorithm;

View File

@ -46,7 +46,7 @@ bool LedDeviceKarate::init(const QJsonObject &deviceConfig)
int LedDeviceKarate::write(const std::vector<ColorRgb> &ledValues) int LedDeviceKarate::write(const std::vector<ColorRgb> &ledValues)
{ {
for (signed iLed=0; iLed<_ledCount; iLed++) for (signed iLed=0; iLed< static_cast<int>(_ledCount); iLed++)
{ {
const ColorRgb& rgb = ledValues[iLed]; const ColorRgb& rgb = ledValues[iLed];