#pragma once #include #include #include #include #include #include "SimpleCommandInfo.h" #include "ComplexCommandInfo.h" #include "SimpleCommandTypesConverter.h" namespace Incart::Usb { class DeviceCommandInfoJsonPacker { public: static QString pack(const std::vector& simpleCommands, const std::vector& complexCommands) { QJsonObject jsonRootObject; QJsonArray jsonCommandsList; for (auto it = simpleCommands.begin(); it != simpleCommands.end(); it++) { QJsonObject jsonCommandInfo; jsonCommandInfo.insert("Name", QString::fromStdString(it->name)); jsonCommandInfo.insert("Description", QString::fromStdString(it->description)); jsonCommandInfo.insert("CommandType", "SIMPLE"); jsonCommandInfo["Data"] = pack(it->data); jsonCommandsList.append(jsonCommandInfo); } for (auto it = complexCommands.begin(); it != complexCommands.end(); it++) { QJsonObject jsonCommandInfo; jsonCommandInfo.insert("Name", QString::fromStdString(it->name)); jsonCommandInfo.insert("Description", QString::fromStdString(it->description)); jsonCommandInfo.insert("CommandType", "COMPLEX"); jsonCommandsList.append(jsonCommandInfo); } jsonRootObject["Commands"] = jsonCommandsList; QJsonDocument document(jsonRootObject); return QString(document.toJson(QJsonDocument::Compact)); } static QJsonObject pack(const DevicesInfo::SimpleCommandData& commandData) { QJsonObject jsonCommandData; jsonCommandData["SourceType"] = QString::fromStdString(DevicesInfo::SimpleCommandTypesConverter::toText(commandData.sourceType)); jsonCommandData["DataType"] = QString::fromStdString(DevicesInfo::SimpleCommandTypesConverter::toText(commandData.dataType)); jsonCommandData["AnswerType"] = QString::fromStdString(DevicesInfo::SimpleCommandTypesConverter::toText(commandData.answerType)); jsonCommandData.insert("Width", (int)commandData.width); jsonCommandData["Options"] = packOptions(commandData.options); return jsonCommandData; } static QJsonArray pack(const std::vector& bytes) { QJsonArray jsonBytes; for (size_t i = 0; i < bytes.size(); i++) { QString byteText = packByte(bytes[i]); jsonBytes.append(byteText); } return jsonBytes; } static QString packByte(char byteValue) { return QString("0x%1").arg(static_cast(byteValue & 0xFF), 2, 16, QChar('0')); } private: static QJsonArray packOptions(const std::vector>& optionList) { QJsonArray jsonOptions; for (size_t i = 0; i < optionList.size(); i++) { jsonOptions.append(pack(optionList[i])); } return jsonOptions; } }; } // namespace Incart::Usb