From 9260ae5a57f1a1ef5236dd2bb2dfbc776e2fdf31 Mon Sep 17 00:00:00 2001 From: Justin Hammond Date: Wed, 6 Nov 2019 17:20:08 +0800 Subject: [PATCH] Add setValue files --- qt-ozwdaemon/mqttcommands/setValue.cpp | 174 +++++++++++++++++++++++++ qt-ozwdaemon/mqttcommands/setValue.h | 17 +++ 2 files changed, 191 insertions(+) create mode 100644 qt-ozwdaemon/mqttcommands/setValue.cpp create mode 100644 qt-ozwdaemon/mqttcommands/setValue.h diff --git a/qt-ozwdaemon/mqttcommands/setValue.cpp b/qt-ozwdaemon/mqttcommands/setValue.cpp new file mode 100644 index 0000000..7935da7 --- /dev/null +++ b/qt-ozwdaemon/mqttcommands/setValue.cpp @@ -0,0 +1,174 @@ +#include "mqttcommands/setValue.h" + +Q_LOGGING_CATEGORY(ozwmcsv, "ozw.mqtt.commands.setValue"); + + +MqttCommand_SetValue::MqttCommand_SetValue(QObject *parent) : + MqttCommand(parent) +{ + this->m_requiredIntFields << "ValueIDKey"; +} +MqttCommand* MqttCommand_SetValue::Create(QObject *parent) { + return new MqttCommand_SetValue(parent); +} + +bool MqttCommand_SetValue::processMessage(QJsonDocument msg) { + if (!this->checkValue(msg, "ValueIDKey")) { + QJsonObject js; + js["status"] = "failed"; + js["Error"] = "Invalid ValueIDKey Number"; + emit sendCommandUpdate(GetCommand(), js); + return false; + } + /* check that the Value Field exists */ + if (msg["Value"].isUndefined()) { + QJsonObject js; + js["Error"] = QString("Missing Field Value"); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Missing Field for " << GetCommand() << ": Value: " << msg.toJson(); + return false; + } + + quint64 vidKey = msg["ValueIdKey"].toInt(); + QBitArray flags = this->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::ValueFlags).value(); + if (flags[QTOZW_ValueIds::ValueIDFlags::ReadOnly] == true) { + QJsonObject js; + js["status"] = "failed"; + js["Error"] = "ValueID is Read Only"; + emit sendCommandUpdate(GetCommand(), js); + return false; + } + QTOZW_ValueIds::ValueIdTypes types = this->getValueData(vidKey, QTOZW_ValueIds::ValueIdColumns::Type).value(); + QVariant data; + switch (types) { + case QTOZW_ValueIds::ValueIdTypes::BitSet: { + qCWarning(ozwmcsv) << "BitSet Not Done Yet"; + return false; + } + + case QTOZW_ValueIds::ValueIdTypes::Bool: { + if (!msg["Value"].isBool()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Bool: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Bool) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + data = msg["Value"].toBool(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::Button: { + if (!msg["Value"].isBool()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Bool: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Bool) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + data = msg["Value"].toBool(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::Byte: { + if (!msg["Value"].isDouble()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Byte: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Byte) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + if (msg["Value"].toInt() > UCHAR_MAX) { + QJsonObject js; + js["Error"] = QString("Value is Larger than Byte Field: ").append(msg["Value"].toInt()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Value is Larger than Byte Field for " << GetCommand() << ": Value: " << msg["Value"].toInt() << msg.toJson(); + return false; + } + data = msg["Value"].toInt(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::Decimal: { + if (!msg["Value"].isDouble()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Decimal: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Decimal) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + data = msg["Value"].toDouble(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::Int: { + if (!msg["Value"].isDouble()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Integer: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Integer) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + if (static_cast(msg["Value"].toInt()) > UINT_MAX) { + QJsonObject js; + js["Error"] = QString("Value is Larger than Integer Field: ").append(msg["Value"].toInt()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Value is Larger than Integer Field for " << GetCommand() << ": Value: " << msg["Value"].toInt() << msg.toJson(); + return false; + } + data = msg["Value"].toInt(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::List: + case QTOZW_ValueIds::ValueIdTypes::Raw: + case QTOZW_ValueIds::ValueIdTypes::Schedule: { + qCWarning(ozwmcsv) << "List/Raw/Schedule Not Done Yet"; + return false; + + } + case QTOZW_ValueIds::ValueIdTypes::Short: { + if (!msg["Value"].isDouble()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not Short: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (Short) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + if (msg["Value"].toInt() > USHRT_MAX) { + QJsonObject js; + js["Error"] = QString("Value is Larger than Short Field: ").append(msg["Value"].toInt()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Value is Larger than Short Field for " << GetCommand() << ": Value: " << msg["Value"].toInt() << msg.toJson(); + return false; + } + data = msg["Value"].toInt(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::String: { + if (!msg["Value"].isString()) { + QJsonObject js; + js["Error"] = QString("Incorrect Field Type for Value: Not String: ").append(msg["Value"].type()); + emit sendCommandUpdate(GetCommand(), js); + qCWarning(ozwmcsv) << "Incorrect Field Type (String) for " << GetCommand() << ": Value: " << msg["Value"].type() << msg.toJson(); + return false; + } + data = msg["Value"].toString(); + break; + } + case QTOZW_ValueIds::ValueIdTypes::TypeCount: { + qCWarning(ozwmcsv) << "Invalid ValueID Type " << types << "for setValue" << msg.toJson(); + QJsonObject js; + js["status"] = "failed"; + js["Error"] = "Unknown ValueID Type"; + emit sendCommandUpdate(GetCommand(), js); + return false; + break; + } + } + if (this->setValue(vidKey, data)) { + QJsonObject js; + js["status"] = "ok"; + emit sendCommandUpdate(GetCommand(), js); + return true; + } + QJsonObject js; + js["status"] = "failed"; + emit sendCommandUpdate(GetCommand(), js); + return false; +} \ No newline at end of file diff --git a/qt-ozwdaemon/mqttcommands/setValue.h b/qt-ozwdaemon/mqttcommands/setValue.h new file mode 100644 index 0000000..7efe548 --- /dev/null +++ b/qt-ozwdaemon/mqttcommands/setValue.h @@ -0,0 +1,17 @@ +#ifndef SETVALUE_H +#define SETVALUE_H + +#include "mqttcommands/mqttcommands.h" + +class MqttCommand_SetValue : public MqttCommand { + Q_OBJECT +public: + static MqttCommand *Create(QObject *parent = nullptr); + static QString StaticGetCommand() { return "SetValue";}; + QString GetCommand() override { return StaticGetCommand(); }; + bool processMessage(QJsonDocument) override; +private: + MqttCommand_SetValue(QObject *parent = nullptr); +}; + +#endif // SETVALUE_H \ No newline at end of file