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_COUNT 9510 // FDEV
15#define SUPLA_CALCFG_CMD_SUPLET_GET_INSTANCE_LIST 9520 // FDEV
16#define SUPLA_CALCFG_CMD_SUPLET_GET_INSTANCE_INFO 9530 // FDEV
17#define SUPLA_CALCFG_CMD_SUPLET_GET_INSTANCE_CONFIG 9540 // FDEV
18#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_BEGIN 9550 // FDEV
19#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_CHUNK 9560 // FDEV
20#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_COMMIT 9570 // FDEV
21#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_ABORT 9580 // FDEV
22#define SUPLA_CALCFG_CMD_SUPLET_DEFINITION_REMOVE 9585 // FDEV
23#define SUPLA_CALCFG_CMD_SUPLET_GET_DEFINITION_LIST 9586 // FDEV
24#define SUPLA_CALCFG_CMD_SUPLET_GET_DEFINITION_CONFIG 9587 // FDEV
25#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_BEGIN 9590 // FDEV
26#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_CHUNK 9600 // FDEV
27#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_COMMIT 9610 // FDEV
28#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_REMOVE 9620 // FDEV
29#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_ABORT 9630 // FDEV
30#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_UPGRADE_BEGIN 9640 // FDEV
31#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_UPGRADE_CHUNK 9650 // FDEV
32#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_UPGRADE_COMMIT 9660 // FDEV
33#define SUPLA_CALCFG_CMD_SUPLET_INSTANCE_UPGRADE_ABORT 9670 // FDEV
34
35// Results returned by the Suplet CALCFG handler.
36#define SUPLA_CALCFG_SUPLET_RESULT_OK 0
37#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_REQUEST 1
38#define SUPLA_CALCFG_SUPLET_RESULT_UNSUPPORTED_DEFINITION 2
39#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_NOT_FOUND 3
40#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_TRANSFER_FAILED 4
41#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_SHA_MISMATCH 5
42#define SUPLA_CALCFG_SUPLET_RESULT_INSTANCE_LIMIT_EXCEEDED 6
43#define SUPLA_CALCFG_SUPLET_RESULT_CHANNEL_LIMIT_EXCEEDED 7
44#define SUPLA_CALCFG_SUPLET_RESULT_RAM_LIMIT_EXCEEDED 8
45#define SUPLA_CALCFG_SUPLET_RESULT_CONFIG_TOO_LARGE 9
46#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_CONFIG 10
47#define SUPLA_CALCFG_SUPLET_RESULT_STORAGE_ERROR 11
48#define SUPLA_CALCFG_SUPLET_RESULT_BUSY 12
49#define SUPLA_CALCFG_SUPLET_RESULT_CREATE_ONLY_PARAM_CHANGED 13
50#define SUPLA_CALCFG_SUPLET_RESULT_TOPOLOGY_CHANGE_NOT_ALLOWED 14
51#define SUPLA_CALCFG_SUPLET_RESULT_DEFINITION_CANNOT_BE_CHANGED 15
52#define SUPLA_CALCFG_SUPLET_RESULT_INVALID_DEFINITION 16
53#define SUPLA_CALCFG_SUPLET_RESULT_INSTANCE_NOT_FOUND 17
54#define SUPLA_CALCFG_SUPLET_RESULT_VERSION_MISMATCH 18
55
56// Suplet processing phases.
57#define SUPLA_CALCFG_SUPLET_PHASE_NONE 0
58#define SUPLA_CALCFG_SUPLET_PHASE_VALIDATE 1
59#define SUPLA_CALCFG_SUPLET_PHASE_TRANSFER_TEMPLATE 2
60#define SUPLA_CALCFG_SUPLET_PHASE_PARSE_TEMPLATE 3
61#define SUPLA_CALCFG_SUPLET_PHASE_VALIDATE_CONFIG 4
62#define SUPLA_CALCFG_SUPLET_PHASE_ALLOCATE_CHANNELS 5
63#define SUPLA_CALCFG_SUPLET_PHASE_SAVE_INSTANCE 6
64#define SUPLA_CALCFG_SUPLET_PHASE_RUNTIME_REFRESH 7
65
66#define SUPLA_CALCFG_SUPLET_CAPABILITY_MAX_ITEMS 4
67#define SUPLA_CALCFG_SUPLET_INSTANCE_LIST_MAX_ITEMS 5
68#define SUPLA_CALCFG_SUPLET_DEFINITION_LIST_MAX_ITEMS 2
69#define SUPLA_CALCFG_SUPLET_CONFIG_CHUNK_MAXSIZE 100
70#define SUPLA_CALCFG_SUPLET_DEFINITION_CHUNK_MAXSIZE 112
71#define SUPLA_CALCFG_SUPLET_INSTANCE_CHUNK_MAXSIZE 112
72
73#define SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_BUILTIN 1
74#define SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_CACHED 2
75
76#pragma pack(push, 1)
77
78typedef struct {
79 unsigned char Version;
80 unsigned char DetailCode; // SUPLA_CALCFG_SUPLET_RESULT_*
81 unsigned char Phase; // SUPLA_CALCFG_SUPLET_PHASE_*
82 unsigned char Flags;
83 unsigned char InstanceId;
84 unsigned char Reserved1;
85 unsigned char Reserved2;
86 unsigned char Reserved3;
87 unsigned _supla_int_t DefinitionId;
88 unsigned _supla_int16_t DefinitionVersion;
89 unsigned _supla_int16_t Required;
90 unsigned _supla_int16_t Available;
91} TCalCfg_SupletResult; // FDEV
92
93typedef struct {
94 unsigned char Offset;
95 unsigned char Limit;
97
98typedef struct {
99 unsigned char Category;
100 unsigned char Kind;
101 unsigned char MinSchemaVersion;
102 unsigned char MaxSchemaVersion;
103 unsigned char HandlerVersion;
104 unsigned char MaxInstances;
105 unsigned char SupportsDownloadedDefinition;
106 unsigned char Reserved;
107 unsigned _supla_int_t DefinitionId;
108 unsigned _supla_int16_t MinDefinitionVersion;
109 unsigned _supla_int16_t MaxDefinitionVersion;
111
112typedef struct {
113 unsigned char Offset;
114 unsigned char Count;
115 unsigned char Total;
116 unsigned char Reserved;
118 Items[SUPLA_CALCFG_SUPLET_CAPABILITY_MAX_ITEMS];
120
121typedef struct {
122 unsigned char Category;
123 unsigned char Kind;
124 unsigned char SchemaVersion;
125 unsigned char HandlerVersion;
126 unsigned char MaxInstances;
127 unsigned char Source; // SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_*
128 unsigned _supla_int_t DefinitionId;
129 unsigned _supla_int16_t DefinitionVersion;
130 unsigned _supla_int16_t JsonSize;
131 unsigned char JsonSha256[32];
133
134typedef struct {
135 unsigned char Offset;
136 unsigned char Count;
137 unsigned char Total;
138 unsigned char Reserved;
140 Items[SUPLA_CALCFG_SUPLET_DEFINITION_LIST_MAX_ITEMS];
142
143typedef struct {
144 unsigned _supla_int_t DefinitionId;
145 unsigned _supla_int16_t DefinitionVersion;
146 unsigned _supla_int16_t Offset;
147 unsigned char MaxSize;
148 unsigned char Reserved;
150
151typedef struct {
152 unsigned _supla_int_t DefinitionId;
153 unsigned _supla_int16_t DefinitionVersion;
154 unsigned _supla_int16_t Offset;
155 unsigned _supla_int16_t TotalSize;
156 unsigned char Source; // SUPLA_CALCFG_SUPLET_DEFINITION_SOURCE_*
157 unsigned char Size;
158 char Data[SUPLA_CALCFG_SUPLET_CONFIG_CHUNK_MAXSIZE];
160
161typedef struct {
162 unsigned char Count;
163 unsigned char MaxInstances;
164 unsigned char MaxChannelsPerInstance;
165 unsigned char MaxCachedDefinitions;
167
168typedef struct {
169 unsigned char InstanceId;
170 unsigned char Reserved1;
171 unsigned char Reserved2;
172 unsigned char Reserved3;
173 unsigned _supla_int_t DefinitionId;
174 unsigned _supla_int16_t DefinitionVersion;
175 unsigned char SubDeviceId;
176 unsigned char ChannelCount;
177 unsigned char Reserved4;
178 unsigned char Reserved5;
180
181typedef struct {
182 unsigned char Offset;
183 unsigned char Count;
184 unsigned char Total;
185 unsigned char Reserved;
187 Items[SUPLA_CALCFG_SUPLET_INSTANCE_LIST_MAX_ITEMS];
189
190typedef struct {
191 unsigned char InstanceId;
192 unsigned char Reserved1;
193 unsigned char Reserved2;
194 unsigned char Reserved3;
196
197typedef struct {
198 unsigned char InstanceId;
199 unsigned char Reserved1;
200 unsigned char Reserved2;
201 unsigned char Reserved3;
202 unsigned _supla_int_t DefinitionId;
203 unsigned _supla_int16_t DefinitionVersion;
204 unsigned char SubDeviceId;
205 unsigned char ChannelCount;
206 unsigned char Reserved4;
207 unsigned char Reserved5;
208 unsigned _supla_int16_t ParamsSize;
209 unsigned char ParamsSha256[32];
211
212typedef struct {
213 unsigned char InstanceId;
214 unsigned char Reserved1;
215 unsigned char Reserved2;
216 unsigned char Reserved3;
217 unsigned _supla_int16_t Offset;
218 unsigned char MaxSize;
219 unsigned char Reserved;
221
222typedef struct {
223 unsigned char InstanceId;
224 unsigned char Reserved1;
225 unsigned char Reserved2;
226 unsigned char Reserved3;
227 unsigned _supla_int16_t Offset;
228 unsigned _supla_int16_t TotalSize;
229 unsigned char Size;
230 char Data[SUPLA_CALCFG_SUPLET_CONFIG_CHUNK_MAXSIZE];
232
233typedef struct {
234 unsigned _supla_int_t SessionId;
235 unsigned _supla_int_t DefinitionId;
236 unsigned _supla_int16_t DefinitionVersion;
237 unsigned _supla_int16_t JsonSize;
238 unsigned char JsonSha256[32];
239 unsigned char Flags;
240 unsigned char Reserved;
242
243typedef struct {
244 unsigned _supla_int_t SessionId;
245 unsigned _supla_int16_t Offset;
246 unsigned char Size;
247 char Data[SUPLA_CALCFG_SUPLET_DEFINITION_CHUNK_MAXSIZE];
249
250typedef struct {
251 unsigned _supla_int_t DefinitionId;
252 unsigned _supla_int16_t DefinitionVersion;
253 unsigned _supla_int16_t Reserved;
255
256typedef struct {
257 unsigned _supla_int_t SessionId;
258 unsigned char InstanceId;
259 unsigned char Reserved1;
260 unsigned char Reserved2;
261 unsigned char Reserved3;
262 unsigned _supla_int_t DefinitionId;
263 unsigned _supla_int16_t DefinitionVersion;
264 unsigned _supla_int16_t ParamsSize;
265 unsigned char ParamsSha256[32];
266 unsigned char Flags;
267 unsigned char Reserved4;
269
270typedef struct {
271 unsigned _supla_int_t SessionId;
272 unsigned char InstanceId;
273 unsigned char Reserved1;
274 unsigned char Reserved2;
275 unsigned char Reserved3;
276 unsigned _supla_int_t DefinitionId;
277 unsigned _supla_int16_t FromDefinitionVersion;
278 unsigned _supla_int16_t ToDefinitionVersion;
279 unsigned _supla_int16_t ParamsSize;
280 unsigned char ParamsSha256[32];
281 unsigned char Flags;
282 unsigned char Reserved4;
284
285typedef struct {
286 unsigned _supla_int_t SessionId;
287 unsigned _supla_int16_t Offset;
288 unsigned char Size;
289 char Data[SUPLA_CALCFG_SUPLET_INSTANCE_CHUNK_MAXSIZE];
291
292typedef struct {
293 unsigned _supla_int_t SessionId;
295
296#pragma pack(pop)
297
298#ifdef __cplusplus
299// Protocol size checks.
300static_assert((unsigned int)18 == sizeof(TCalCfg_SupletResult));
301static_assert((unsigned int)2 == sizeof(TCalCfg_SupletListRequest));
302static_assert((unsigned int)16 == sizeof(TCalCfg_SupletCapabilityItem));
303static_assert((unsigned int)68 == sizeof(TCalCfg_SupletCapabilityList));
304static_assert((unsigned int)46 == sizeof(TCalCfg_SupletDefinitionListItem));
305static_assert((unsigned int)96 == sizeof(TCalCfg_SupletDefinitionList));
306static_assert((unsigned int)10 ==
308static_assert((unsigned int)112 ==
310static_assert((unsigned int)4 == sizeof(TCalCfg_SupletInstanceCount));
311static_assert((unsigned int)14 == sizeof(TCalCfg_SupletInstanceListItem));
312static_assert((unsigned int)74 == sizeof(TCalCfg_SupletInstanceList));
313static_assert((unsigned int)4 == sizeof(TCalCfg_SupletInstanceRequest));
314static_assert((unsigned int)48 == sizeof(TCalCfg_SupletInstanceInfo));
315static_assert((unsigned int)8 ==
317static_assert((unsigned int)109 ==
319static_assert((unsigned int)46 == sizeof(TCalCfg_SupletDefinitionBegin));
320static_assert((unsigned int)119 == sizeof(TCalCfg_SupletDefinitionChunk));
321static_assert((unsigned int)8 == sizeof(TCalCfg_SupletDefinitionRequest));
322static_assert((unsigned int)50 == sizeof(TCalCfg_SupletInstanceBegin));
323static_assert((unsigned int)52 ==
325static_assert((unsigned int)119 == sizeof(TCalCfg_SupletInstanceChunk));
326static_assert((unsigned int)4 == sizeof(TCalCfg_SupletSessionRequest));
327
328static_assert(sizeof(TCalCfg_SupletResult) <=
329 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
330static_assert(sizeof(TCalCfg_SupletListRequest) <=
331 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
332static_assert(sizeof(TCalCfg_SupletCapabilityItem) <=
333 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
334static_assert(sizeof(TCalCfg_SupletCapabilityList) <=
335 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
336static_assert(sizeof(TCalCfg_SupletDefinitionListItem) <=
337 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
338static_assert(sizeof(TCalCfg_SupletDefinitionList) <=
339 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
340static_assert(sizeof(TCalCfg_SupletDefinitionConfigRequest) <=
341 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
342static_assert(sizeof(TCalCfg_SupletDefinitionConfigChunk) <=
343 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
344static_assert(sizeof(TCalCfg_SupletInstanceCount) <=
345 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
346static_assert(sizeof(TCalCfg_SupletInstanceListItem) <=
347 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
348static_assert(sizeof(TCalCfg_SupletInstanceList) <=
349 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
350static_assert(sizeof(TCalCfg_SupletInstanceRequest) <=
351 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
352static_assert(sizeof(TCalCfg_SupletInstanceInfo) <=
353 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
354static_assert(sizeof(TCalCfg_SupletInstanceConfigRequest) <=
355 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
356static_assert(sizeof(TCalCfg_SupletInstanceConfigChunk) <=
357 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
358static_assert(sizeof(TCalCfg_SupletDefinitionBegin) <=
359 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
360static_assert(sizeof(TCalCfg_SupletDefinitionChunk) <=
361 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
362static_assert(sizeof(TCalCfg_SupletDefinitionRequest) <=
363 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
364static_assert(sizeof(TCalCfg_SupletInstanceBegin) <=
365 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
366static_assert(sizeof(TCalCfg_SupletInstanceUpgradeBegin) <=
367 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
368static_assert(sizeof(TCalCfg_SupletInstanceChunk) <=
369 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
370static_assert(sizeof(TCalCfg_SupletSessionRequest) <=
371 (unsigned int)SUPLA_CALCFG_DATA_MAXSIZE);
372#endif
373
374#endif /* supla_proto_suplet_H_ */
Definition proto_suplet.h:98
Definition proto_suplet.h:112
Definition proto_suplet.h:233
Definition proto_suplet.h:243
Definition proto_suplet.h:151
Definition proto_suplet.h:143
Definition proto_suplet.h:121
Definition proto_suplet.h:134
Definition proto_suplet.h:250
Definition proto_suplet.h:256
Definition proto_suplet.h:285
Definition proto_suplet.h:222
Definition proto_suplet.h:212
Definition proto_suplet.h:161
Definition proto_suplet.h:197
Definition proto_suplet.h:168
Definition proto_suplet.h:181
Definition proto_suplet.h:190
Definition proto_suplet.h:270
Definition proto_suplet.h:93
Definition proto_suplet.h:78
Definition proto_suplet.h:292