1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QMODBUSDEVICEIDENTIFICATION_P_H
5#define QMODBUSDEVICEIDENTIFICATION_P_H
6
7#include <QtCore/qmap.h>
8#include <QtCore/qmetatype.h>
9#include <QtSerialBus/qtserialbusglobal.h>
10
11QT_BEGIN_NAMESPACE
12
13class QModbusDeviceIdentification
14{
15public:
16 enum ObjectId {
17 /* Basic mandatory */
18 VendorNameObjectId = 0x00,
19 ProductCodeObjectId = 0x01,
20 MajorMinorRevisionObjectId = 0x02,
21
22 /* Regular optional */
23 VendorUrlObjectId = 0x03,
24 ProductNameObjectId = 0x04,
25 ModelNameObjectId = 0x05,
26 UserApplicationNameObjectId = 0x06,
27 ReservedObjectId = 0x07,
28
29 /* Extended optional */
30 ProductDependentObjectId = 0x80,
31
32 UndefinedObjectId = 0x100
33 };
34
35 enum ReadDeviceIdCode {
36 BasicReadDeviceIdCode = 0x01,
37 RegularReadDeviceIdCode = 0x02,
38 ExtendedReadDeviceIdCode = 0x03,
39 IndividualReadDeviceIdCode = 0x04
40 };
41
42 enum ConformityLevel {
43 BasicConformityLevel = 0x01,
44 RegularConformityLevel = 0x02,
45 ExtendedConformityLevel = 0x03,
46 BasicIndividualConformityLevel = 0x81,
47 RegularIndividualConformityLevel = 0x82,
48 ExtendedIndividualConformityLevel = 0x83
49 };
50
51 QModbusDeviceIdentification() = default;
52
53 bool isValid() const {
54 return !m_objects.value(key: VendorNameObjectId).isEmpty()
55 && !m_objects.value(key: ProductCodeObjectId).isEmpty()
56 && !m_objects.value(key: MajorMinorRevisionObjectId).isEmpty();
57 }
58
59 QList<int> objectIds() const { return m_objects.keys(); }
60 void remove(uint objectId) { m_objects.remove(key: objectId); }
61 bool contains(uint objectId) const { return m_objects.contains(key: objectId); }
62
63 bool insert(uint objectId, const QByteArray &data) {
64 if ((data.size() > 245) || (objectId >= ObjectId::UndefinedObjectId))
65 return false;
66 m_objects[objectId] = data;
67 return true;
68 }
69 QByteArray value(uint objectId) const { return m_objects.value(key: objectId); }
70
71 ConformityLevel conformityLevel() const { return m_conformityLevel; }
72 void setConformityLevel(ConformityLevel level) { m_conformityLevel = level; }
73
74 static Q_SERIALBUS_EXPORT QModbusDeviceIdentification fromByteArray(const QByteArray &ba);
75
76private:
77 QMap<int, QByteArray> m_objects;
78 ConformityLevel m_conformityLevel = BasicConformityLevel;
79};
80Q_DECLARE_TYPEINFO(QModbusDeviceIdentification, Q_RELOCATABLE_TYPE);
81Q_DECLARE_TYPEINFO(QModbusDeviceIdentification::ObjectId, Q_PRIMITIVE_TYPE);
82Q_DECLARE_TYPEINFO(QModbusDeviceIdentification::ReadDeviceIdCode, Q_PRIMITIVE_TYPE);
83Q_DECLARE_TYPEINFO(QModbusDeviceIdentification::ConformityLevel, Q_PRIMITIVE_TYPE);
84
85QT_END_NAMESPACE
86
87Q_DECLARE_METATYPE(QModbusDeviceIdentification)
88
89#endif // QMODBUSDEVICEIDENTIFICATION_P_H
90

source code of qtserialbus/src/serialbus/qmodbusdeviceidentification.h