supla-device
Loading...
Searching...
No Matches
proto_suplet.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef supla_proto_suplet_H_
5#define supla_proto_suplet_H_
6
7#include "proto.h"
8
9// Device registration flag.
10#define SUPLA_DEVICE_FLAG_SUPLET_SUPPORTED 0x40000 // FDEV
11
12// CALCFG commands.
13#define SUPLA_CALCFG_CMD_SUPLET_GET_CAPABILITIES 9500 // FDEV
14#define SUPLA_CALCFG_CMD_SUPLET_GET_INSTANCE_LIST 9520 // FDEV
15#define SUPLA_CALCFG_CMD_SUPLET_GET_INSTANCE_DATA 9540 // FDEV
16#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_BEGIN 9550 // FDEV
17#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_REMOVE 9585 // FDEV
18#define SUPLA_CALCFG_CMD_SUPLET_GET_DEFINITION_LIST 9586 // FDEV
19#define SUPLA_CALCFG_CMD_SUPLET_GET_DEFINITION_CONFIG 9587 // FDEV
20#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_BEGIN 9590 // FDEV
21#define SUPLA_CALCFG_CMD_SUPLET_TRANSFER_CHUNK 9600 // FDEV
22#define SUPLA_CALCFG_CMD_SUPLET_TRANSFER_COMMIT 9610 // FDEV
23#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_REMOVE 9620 // FDEV
24
25// Results returned by the Suplet CALCFG handler.
26#define SUPLA_CALCFG_SUPLET_RESULT_OK 0
27#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_REQUEST 1
28#define SUPLA_CALCFG_SUPLET_RESULT_UNSUPPORTED_DEFINITION 2
29#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_NOT_FOUND 3
30#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_TRANSFER_FAILED 4
31#define SUPLA_CALCFG_SUPLET_RESULT_INSTANCE_LIMIT_EXCEEDED 6
32#define SUPLA_CALCFG_SUPLET_RESULT_CHANNEL_LIMIT_EXCEEDED 7
33#define SUPLA_CALCFG_SUPLET_RESULT_RAM_LIMIT_EXCEEDED 8
34#define SUPLA_CALCFG_SUPLET_RESULT_CONFIG_TOO_LARGE 9
35#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_CONFIG 10
36#define SUPLA_CALCFG_SUPLET_RESULT_STORAGE_ERROR 11
37#define SUPLA_CALCFG_SUPLET_RESULT_BUSY 12
38#define SUPLA_CALCFG_SUPLET_RESULT_CREATE_ONLY_PARAM_CHANGED 13
39#define SUPLA_CALCFG_SUPLET_RESULT_TOPOLOGY_CHANGE_NOT_ALLOWED 14
40#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_CANNOT_BE_CHANGED 15
41#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_DEFINITION 16
42#define SUPLA_CALCFG_SUPLET_RESULT_INSTANCE_NOT_FOUND 17
43#define SUPLA_CALCFG_SUPLET_RESULT_VERSION_MISMATCH 18
44
45// Suplet processing phases.
46#define SUPLA_CALCFG_SUPLET_PHASE_NONE 0
47#define SUPLA_CALCFG_SUPLET_PHASE_VALIDATE 1
48#define SUPLA_CALCFG_SUPLET_PHASE_TRANSFER_TEMPLATE 2
49#define SUPLA_CALCFG_SUPLET_PHASE_PARSE_TEMPLATE 3
50#define SUPLA_CALCFG_SUPLET_PHASE_VALIDATE_CONFIG 4
51#define SUPLA_CALCFG_SUPLET_PHASE_ALLOCATE_CHANNELS 5
52#define SUPLA_CALCFG_SUPLET_PHASE_SAVE_INSTANCE 6
53#define SUPLA_CALCFG_SUPLET_PHASE_RUNTIME_REFRESH 7
54
55#define SUPLA_CALCFG_SUPLET_CAPABILITY_MAX_ITEMS 4
56#define SUPLA_CALCFG_SUPLET_INSTANCE_LIST_MAX_ITEMS 6
57#define SUPLA_CALCFG_SUPLET_DEFINITION_LIST_MAX_ITEMS 8
58#define SUPLA_CALCFG_SUPLET_DATA_CHUNK_MAXSIZE 112
59#define SUPLA_CALCFG_SUPLET_TRANSFER_CHUNK_MAXSIZE 112
60
61#define SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_BUILTIN 1
62#define SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_CACHED 2
63
64#define SUPLA_CALCFG_SUPLET_TRANSFER_PART_DEFINITION 0
65#define SUPLA_CALCFG_SUPLET_TRANSFER_PART_CONFIG 1
66#define SUPLA_CALCFG_SUPLET_TRANSFER_PART_ARTIFACT 2
67#define SUPLA_CALCFG_SUPLET_INSTANCE_FLAG_KEEP_ARTIFACT 0x01
68
69#pragma pack(push, 1)
70
71typedef struct {
72 unsigned char Version;
73 unsigned char DetailCode; // SUPLA_CALCFG_SUPLET_RESULT_*
74 unsigned char Phase; // SUPLA_CALCFG_SUPLET_PHASE_*
75 unsigned char Flags;
76 unsigned char InstanceId;
77 unsigned char Reserved1;
78 unsigned char Reserved2;
79 unsigned char Reserved3;
80 unsigned _supla_int_t DefinitionId;
81 unsigned _supla_int16_t DefinitionVersion;
82 unsigned _supla_int16_t Required;
83 unsigned _supla_int16_t Available;
84} TCalCfg_SupletResult; // FDEV
85
86typedef struct {
87 unsigned char Offset;
88 unsigned char Limit;
90
91typedef struct {
92 unsigned char Category;
93 unsigned char Kind;
94 unsigned char MinSchemaVersion;
95 unsigned char MaxSchemaVersion;
96 unsigned char HandlerVersion;
97 unsigned char MaxInstances;
98 unsigned char SupportsDownloadedDefinition;
99 unsigned char Reserved;
100 unsigned _supla_int_t DefinitionId;
101 unsigned _supla_int16_t MinDefinitionVersion;
102 unsigned _supla_int16_t MaxDefinitionVersion;
103 unsigned _supla_int_t MaxArtifactSize;
105
106typedef struct {
107 unsigned char Offset;
108 unsigned char Count;
109 unsigned char Total;
110 unsigned char Reserved;
112 Items[SUPLA_CALCFG_SUPLET_CAPABILITY_MAX_ITEMS];
114
115typedef struct {
116 unsigned _supla_int_t DefinitionId;
117 unsigned _supla_int16_t DefinitionVersion;
118 unsigned _supla_int16_t Size;
119 unsigned char Source; // SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_*
120 unsigned char Reserved1;
121 unsigned char Reserved2;
122 unsigned char Reserved3;
124
125typedef struct {
126 unsigned char Offset;
127 unsigned char Count;
128 unsigned char Total;
129 unsigned char Reserved;
131 Items[SUPLA_CALCFG_SUPLET_DEFINITION_LIST_MAX_ITEMS];
133
134typedef struct {
135 unsigned _supla_int_t DefinitionId;
136 unsigned _supla_int16_t DefinitionVersion;
137 unsigned _supla_int16_t Offset;
138 unsigned char MaxSize;
139 unsigned char Reserved;
141
142typedef struct {
143 unsigned _supla_int_t DefinitionId;
144 unsigned _supla_int16_t DefinitionVersion;
145 unsigned _supla_int16_t Offset;
146 unsigned _supla_int16_t TotalSize;
147 unsigned char Source; // SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_*
148 unsigned char Size;
149 char Data[SUPLA_CALCFG_SUPLET_DATA_CHUNK_MAXSIZE];
151
152typedef struct {
153 unsigned char InstanceId;
154 unsigned char SubDeviceId;
155 unsigned char ChannelCount;
156 unsigned char Reserved;
157 unsigned _supla_int_t DefinitionId;
158 unsigned _supla_int16_t DefinitionVersion;
159 unsigned _supla_int16_t ConfigSize;
160 unsigned _supla_int_t Revision;
161 unsigned _supla_int_t ArtifactSize;
163
164typedef struct {
165 unsigned char Offset;
166 unsigned char Count;
167 unsigned char Total;
168 unsigned char Reserved;
170 Items[SUPLA_CALCFG_SUPLET_INSTANCE_LIST_MAX_ITEMS];
172
173typedef struct {
174 unsigned char InstanceId;
175 unsigned char Reserved1;
176 unsigned char Reserved2;
177 unsigned char Reserved3;
179
180typedef struct {
181 unsigned char InstanceId;
182 unsigned char Part; // SUPLA_CALCFG_SUPLET_TRANSFER_PART_*
183 unsigned char Reserved1;
184 unsigned char Reserved2;
185 unsigned _supla_int_t Offset;
186 unsigned char MaxSize;
187 unsigned char Reserved3;
188 unsigned char Reserved4;
189 unsigned char Reserved5;
191
192typedef struct {
193 unsigned char InstanceId;
194 unsigned char Part; // SUPLA_CALCFG_SUPLET_TRANSFER_PART_*
195 unsigned char Reserved1;
196 unsigned char Reserved2;
197 unsigned _supla_int_t Offset;
198 unsigned _supla_int_t TotalSize;
199 unsigned char Size;
200 char Data[SUPLA_CALCFG_SUPLET_DATA_CHUNK_MAXSIZE];
202
203typedef struct {
204 unsigned _supla_int_t DefinitionId;
205 unsigned _supla_int16_t DefinitionVersion;
206 unsigned _supla_int16_t Size;
208
209typedef struct {
210 unsigned _supla_int_t DefinitionId;
211 unsigned _supla_int16_t DefinitionVersion;
212 unsigned _supla_int16_t Reserved;
214
215typedef struct {
216 unsigned char InstanceId;
217 unsigned char Flags;
218 unsigned char Reserved1;
219 unsigned char Reserved2;
220 unsigned _supla_int_t DefinitionId;
221 unsigned _supla_int16_t DefinitionVersion;
222 unsigned _supla_int16_t ConfigSize;
223 unsigned _supla_int_t Revision;
224 unsigned _supla_int_t ArtifactSize;
226
227typedef struct {
228 unsigned char Part; // SUPLA_CALCFG_SUPLET_TRANSFER_PART_*
229 unsigned char Size;
230 unsigned char Reserved1;
231 unsigned char Reserved2;
232 unsigned _supla_int_t Offset;
233 char Data[SUPLA_CALCFG_SUPLET_TRANSFER_CHUNK_MAXSIZE];
235
236#pragma pack(pop)
237
238#ifdef __cplusplus
239// Protocol size checks.
240static_assert((unsigned int)18 == sizeof(TCalCfg_SupletResult));
241static_assert((unsigned int)2 == sizeof(TCalCfg_SupletListRequest));
242static_assert((unsigned int)20 == sizeof(TCalCfg_SupletCapabilityItem));
243static_assert((unsigned int)84 == sizeof(TCalCfg_SupletCapabilityList));
244static_assert((unsigned int)12 == sizeof(TCalCfg_SupletDefinitionListItem));
245static_assert((unsigned int)100 == sizeof(TCalCfg_SupletDefinitionList));
246static_assert((unsigned int)10 ==
248static_assert((unsigned int)124 ==
250static_assert((unsigned int)20 == sizeof(TCalCfg_SupletInstanceListItem));
251static_assert((unsigned int)124 == sizeof(TCalCfg_SupletInstanceList));
252static_assert((unsigned int)4 == sizeof(TCalCfg_SupletInstanceRequest));
253static_assert((unsigned int)12 == sizeof(TCalCfg_SupletInstanceDataRequest));
254static_assert((unsigned int)125 == sizeof(TCalCfg_SupletInstanceDataChunk));
255static_assert((unsigned int)8 == sizeof(TCalCfg_SupletDefinitionBegin));
256static_assert((unsigned int)8 == sizeof(TCalCfg_SupletDefinitionRequest));
257static_assert((unsigned int)20 == sizeof(TCalCfg_SupletInstanceBegin));
258static_assert((unsigned int)120 == sizeof(TCalCfg_SupletTransferChunk));
259
260static_assert(sizeof(TCalCfg_SupletResult) <=
261 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
262static_assert(sizeof(TCalCfg_SupletListRequest) <=
263 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
264static_assert(sizeof(TCalCfg_SupletCapabilityItem) <=
265 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
266static_assert(sizeof(TCalCfg_SupletCapabilityList) <=
267 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
268static_assert(sizeof(TCalCfg_SupletDefinitionListItem) <=
269 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
270static_assert(sizeof(TCalCfg_SupletDefinitionList) <=
271 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
272static_assert(sizeof(TCalCfg_SupletDefinitionConfigRequest) <=
273 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
274static_assert(sizeof(TCalCfg_SupletDefinitionConfigChunk) <=
275 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
276static_assert(sizeof(TCalCfg_SupletInstanceListItem) <=
277 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
278static_assert(sizeof(TCalCfg_SupletInstanceList) <=
279 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
280static_assert(sizeof(TCalCfg_SupletInstanceRequest) <=
281 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
282static_assert(sizeof(TCalCfg_SupletInstanceDataRequest) <=
283 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
284static_assert(sizeof(TCalCfg_SupletInstanceDataChunk) <=
285 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
286static_assert(sizeof(TCalCfg_SupletDefinitionBegin) <=
287 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
288static_assert(sizeof(TCalCfg_SupletDefinitionRequest) <=
289 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
290static_assert(sizeof(TCalCfg_SupletInstanceBegin) <=
291 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
292static_assert(sizeof(TCalCfg_SupletTransferChunk) <=
293 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
294#endif
295
296#endif /* supla_proto_suplet_H_ */
Definition proto_suplet.h:91
Definition proto_suplet.h:106
Definition proto_suplet.h:203
Definition proto_suplet.h:142
Definition proto_suplet.h:134
Definition proto_suplet.h:115
Definition proto_suplet.h:125
Definition proto_suplet.h:209
Definition proto_suplet.h:215
Definition proto_suplet.h:192
Definition proto_suplet.h:180
Definition proto_suplet.h:152
Definition proto_suplet.h:164
Definition proto_suplet.h:173
Definition proto_suplet.h:86
Definition proto_suplet.h:71
Definition proto_suplet.h:227