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