// hyperion local includes #include "LedDeviceAtmo.h" namespace { const bool verbose = false; } //End of constants LedDeviceAtmo::LedDeviceAtmo(const QJsonObject &deviceConfig) : ProviderRs232(deviceConfig) { } LedDevice* LedDeviceAtmo::construct(const QJsonObject &deviceConfig) { return new LedDeviceAtmo(deviceConfig); } bool LedDeviceAtmo::init(const QJsonObject &deviceConfig) { bool isInitOK = false; // Initialise sub-class if ( ProviderRs232::init(deviceConfig) ) { if (_ledCount != 5) { QString errortext = QString ("%1 channels configured. This should always be 5!").arg(_ledCount); this->setInError(errortext); isInitOK = false; } else { _ledBuffer.resize(4 + 5*3); // 4-byte header, 5 RGB values _ledBuffer[0] = 0xFF; // Startbyte _ledBuffer[1] = 0x00; // StartChannel(Low) _ledBuffer[2] = 0x00; // StartChannel(High) _ledBuffer[3] = 0x0F; // Number of Databytes send (always! 15) isInitOK = true; } } return isInitOK; } int LedDeviceAtmo::write(const std::vector &ledValues) { memcpy(4 + _ledBuffer.data(), ledValues.data(), _ledCount * sizeof(ColorRgb)); return writeBytes(_ledBuffer.size(), _ledBuffer.data()); } QJsonObject LedDeviceAtmo::getProperties(const QJsonObject& params) { DebugIf(verbose, _log, "params: [%s]", QString(QJsonDocument(params).toJson(QJsonDocument::Compact)).toUtf8().constData()); QJsonObject properties; QString serialPort = params["serialPort"].toString(""); QJsonObject propertiesDetails; QJsonArray possibleLedCounts = { 5 }; propertiesDetails.insert("ledCount", possibleLedCounts); properties.insert("properties", propertiesDetails); DebugIf(verbose, _log, "properties: [%s]", QString(QJsonDocument(properties).toJson(QJsonDocument::Compact)).toUtf8().constData()); return properties; }