supla-device
Loading...
Searching...
No Matches
definition.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SUPLET_DEFINITION_H_
5#define SRC_SUPLA_SUPLET_DEFINITION_H_
6
7#include <stdint.h>
8#include <supla-common/proto.h>
9#include <supla/suplet/channel_map.h>
10
11namespace Supla {
12class Element;
13
14namespace Suplet {
15
16struct Definition;
17struct InstanceRecord;
18
20 public:
21 virtual ~RuntimeHandler() = default;
22
23 virtual uint8_t getRequiredElementCount(
24 const Definition &definition,
25 const InstanceRecord &instance) const;
26
27 virtual bool createElements(const Definition &definition,
28 const InstanceRecord &instance,
29 Supla::Element **created,
30 uint8_t createdSize,
31 ChannelMap *createdChannelMap) = 0;
32};
33
34enum class Category : uint8_t {
35 Unknown = 0,
36 Virtual = 1,
37 Aggregate = 2,
38 Modbus = 3,
39 HttpIntegration = 4,
40};
41
42enum class Kind : uint8_t {
43 Unknown = 0,
44 VirtualRelay = 1,
45 VirtualBinarySensor = 2,
46 ThermometerGroup = 3,
47 ModbusRtu = 4,
48 HttpInverter = 5,
49};
50
51enum class ChannelKind : uint8_t {
52 Unknown = 0,
53 VirtualRelay = 1,
54 VirtualBinarySensor = 2,
55 VirtualThermometer = 3,
56};
57
58enum class ParameterType : uint8_t {
59 Unknown = 0,
60 Bool = 1,
61 UInt8 = 2,
62 UInt16 = 3,
63 Int16 = 4,
64 String = 5,
65 Secret = 6,
66 Enum = 7,
67 ChannelList = 8,
68};
69
70enum class ParameterLifecycle : uint8_t {
71 Editable = 0,
72 CreateOnly = 1,
73 ReadOnly = 2,
74 Secret = 3,
75};
76
77struct Capability {
78 Category category = Category::Unknown;
79 Kind kind = Kind::Unknown;
80 uint32_t definitionId = 0;
81 uint16_t minDefinitionVersion = 0;
82 uint16_t maxDefinitionVersion = 0;
83 uint8_t minSchemaVersion = 1;
84 uint8_t maxSchemaVersion = 1;
85 uint8_t handlerVersion = 1;
86 uint8_t maxInstances = 1;
87 uint8_t supportsDownloadedDefinition = 0;
88 uint32_t maxArtifactSize = 0;
89 RuntimeHandler *runtimeHandler = nullptr;
90};
91
93 uint8_t channelId = kInvalidChannelId;
94 ChannelKind kind = ChannelKind::Unknown;
95 int32_t defaultFunction = 0;
96 const char *caption = nullptr;
97};
98
100 const char *key = nullptr;
101 ParameterType type = ParameterType::Unknown;
102 ParameterLifecycle lifecycle = ParameterLifecycle::Editable;
103 int32_t min = INT32_MIN;
104 int32_t max = INT32_MAX;
105 int32_t defaultNumber = 0;
106 const char *defaultText = nullptr;
107 const char *enumValues = nullptr;
108 uint8_t required = 0;
109 uint8_t hasDefault = 0;
110 uint8_t affectsTopology = 0;
111};
112
113constexpr uint32_t kInvalidDefinitionId = 0;
114constexpr uint32_t kServerDefinitionIdMin = 1000;
115
116inline bool isValidDefinitionId(uint32_t definitionId) {
117 return definitionId != kInvalidDefinitionId;
118}
119
120inline bool isServerDefinitionId(uint32_t definitionId) {
121 return definitionId >= kServerDefinitionIdMin;
122}
123
124inline bool isFirmwarePrivateDefinitionId(uint32_t definitionId) {
125 return definitionId > kInvalidDefinitionId &&
126 definitionId < kServerDefinitionIdMin;
127}
128
130 Category category = Category::Unknown;
131 Kind kind = Kind::Unknown;
132 uint8_t schemaVersion = 1;
133 uint8_t handlerVersion = 1;
134 uint32_t definitionId = 0;
135 uint16_t definitionVersion = 0;
136 uint8_t maxInstances = 1;
137 uint32_t maxArtifactSize = 0;
138 const char *name = nullptr;
139 const ChannelDefinition *channels = nullptr;
140 uint8_t channelCount = 0;
141 const ParameterDefinition *parameters = nullptr;
142 uint8_t parameterCount = 0;
143 RuntimeHandler *runtimeHandler = nullptr;
144 const char *definitionJson = nullptr;
145 uint16_t definitionJsonSize = 0;
146};
147
148bool getDefinitionChannelIds(const Definition &definition,
149 uint8_t *output,
150 uint8_t outputSize);
151
152} // namespace Suplet
153} // namespace Supla
154
155#endif // SRC_SUPLA_SUPLET_DEFINITION_H_
Base class for all elements of SuplaDevice.
Definition element.h:30
Definition channel_map.h:25
Definition definition.h:19
Definition definition.h:77
Definition definition.h:92
Definition definition.h:129
Definition storage.h:37
Definition definition.h:99