diff options
author | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-11-30 15:51:24 +0100 |
---|---|---|
committer | Karsten Heimrich <karsten.heimrich@theqtcompany.com> | 2015-12-01 15:50:34 +0000 |
commit | cff8bf1357327d99a1ebd68bad259b3e4368e15a (patch) | |
tree | 7afed0e8ca64d143f5f588079eed0c89eba137dd /src/serialbus/qmodbuspdu.h | |
parent | 1a8d1ae10c0ca3d637f2e399f5b81b728b10c364 (diff) |
Return the real function code without the exception byte.
Change-Id: Ifb4f0964f47b48f0cb9b33056c732a039cbaee69
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/serialbus/qmodbuspdu.h')
-rw-r--r-- | src/serialbus/qmodbuspdu.h | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/serialbus/qmodbuspdu.h b/src/serialbus/qmodbuspdu.h index fc01801..3512d1d 100644 --- a/src/serialbus/qmodbuspdu.h +++ b/src/serialbus/qmodbuspdu.h @@ -94,18 +94,21 @@ public: return (m_code >= ReadCoils && m_code < UndefinedFunctionCode) && (m_data.size() < 253); } - bool isException() const { return m_code & quint8(0x80); } + + static const quint8 ExceptionByte = 0x80; ExceptionCode exceptionCode() const { - if (!dataSize() || !isException()) + if (!m_data.size() || !isException()) return ExtendedException; - - return static_cast<ExceptionCode>(data().at(0)); + return static_cast<ExceptionCode>(m_data.at(0)); } + bool isException() const { return m_code & ExceptionByte; } qint16 size() const { return dataSize() + 1; } qint16 dataSize() const { return m_data.size(); } - FunctionCode functionCode() const { return m_code; } + FunctionCode functionCode() const { + return FunctionCode(quint8(m_code) &~ ExceptionByte); + } virtual void setFunctionCode(FunctionCode code) { m_code = code; } QByteArray data() const { return m_data; } @@ -209,8 +212,8 @@ public: : QModbusPdu(code, newData) {} - Q_SERIALBUS_EXPORT static int minimumDataSize(FunctionCode code); - Q_SERIALBUS_EXPORT static int calculateDataSize(FunctionCode code, const QByteArray &data); + Q_SERIALBUS_EXPORT static int minimumDataSize(const QModbusPdu &pdu); + Q_SERIALBUS_EXPORT static int calculateDataSize(const QModbusPdu &pdu, const QByteArray &data); // TODO currently no way to document -> qdoc issue due to template usage template <typename ... Args> @@ -232,8 +235,8 @@ public: : QModbusPdu(code, newData) {} - Q_SERIALBUS_EXPORT static int minimumDataSize(FunctionCode code); - Q_SERIALBUS_EXPORT static int calculateDataSize(FunctionCode code, const QByteArray &data); + Q_SERIALBUS_EXPORT static int minimumDataSize(const QModbusPdu &pdu); + Q_SERIALBUS_EXPORT static int calculateDataSize(const QModbusPdu &pdu, const QByteArray &data); // TODO currently no way to document -> qdoc issue due to template usage template <typename ... Args> @@ -250,11 +253,11 @@ public: : QModbusResponse(pdu) {} QModbusExceptionResponse(FunctionCode fc, ExceptionCode ec) - : QModbusResponse(FunctionCode(quint8(fc) | quint8(0x80)), static_cast<quint8> (ec)) + : QModbusResponse(FunctionCode(quint8(fc) | ExceptionByte), static_cast<quint8> (ec)) {} void setFunctionCode(FunctionCode c) { - QModbusPdu::setFunctionCode(FunctionCode(quint8(c) | quint8(0x80))); + QModbusPdu::setFunctionCode(FunctionCode(quint8(c) | ExceptionByte)); } void setExceptionCode(ExceptionCode ec) { QModbusPdu::encodeData(quint8(ec)); } }; |