diff --git a/BrainATUMtome/serialpackage.cpp b/BrainATUMtome/serialpackage.cpp index 713d701..07ce36a 100644 --- a/BrainATUMtome/serialpackage.cpp +++ b/BrainATUMtome/serialpackage.cpp @@ -6,23 +6,38 @@ SerialPackage::SerialPackage() } -bool SerialPackage::parse(QString &message) +QString SerialPackage::parse(bool &ok, const QString &message) { + QString buffer = message; + // clean message - message = message.simplified(); + buffer = buffer.simplified(); - if (message.at(0) == '!') - message.remove(0, 1); + if (buffer.at(0) == '!') + buffer.remove(0, 1); // check for even size - if ((message.size() % 2) != 0) - return false; + if ((buffer.size() % 2) != 0) + ok = false; + + // check received checksum + quint8 checksumReceived = 0; + if (!unpack(checksumReceived, buffer.mid(buffer.size() - 2, 2))) + ok = false; + ok = (checksumReceived == checksum(message)); + + // remove checksum from buffer + buffer.remove(buffer.size() - 2, 2); + + return buffer; +} - // get received checksum - quint8 checksumReceived = static_cast(QString("%1%2").arg(message.mid(message.size() - 2, 1), message.mid(message.size() - 1, 1)).toUInt(nullptr, 16)); - message.remove(message.size() - 2, 2); - return (checksumReceived == checksum(message)); +QString SerialPackage::package(const QString &message) +{ + quint8 checksumValue = checksum(message); + QString checksumText = pack(checksumValue); + return '!' + message + checksumText + '\r'; } diff --git a/BrainATUMtome/serialpackage.h b/BrainATUMtome/serialpackage.h index 1966394..f1cc972 100644 --- a/BrainATUMtome/serialpackage.h +++ b/BrainATUMtome/serialpackage.h @@ -9,7 +9,8 @@ class SerialPackage public: explicit SerialPackage(); - static bool parse(QString &message); + static QString parse(bool &ok, const QString &message); + static QString package(const QString &message); static quint8 address(const QString &message); static quint8 command(const QString &message);