Skip to content

Commit 2f9fba4

Browse files
Proto update
1 parent b608115 commit 2f9fba4

File tree

4 files changed

+362
-126
lines changed

4 files changed

+362
-126
lines changed

libraries/SuplaDevice/proto.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424

2525
#ifdef ESP8266
2626

27-
#include <osapi.h>
2827
#include <mem.h>
28+
#include <osapi.h>
2929

3030
#define BUFFER_MIN_SIZE 512
3131
#define BUFFER_MAX_SIZE 2048
@@ -210,6 +210,11 @@ char sproto_out_dataexists(void *spd_ptr) {
210210
: SUPLA_RESULT_FALSE;
211211
}
212212

213+
char sproto_in_dataexists(void *spd_ptr) {
214+
return ((TSuplaProtoData *)spd_ptr)->in.data_size > 0 ? SUPLA_RESULT_TRUE
215+
: SUPLA_RESULT_FALSE;
216+
}
217+
213218
void sproto_shrink_in_buffer(TSuplaProtoInBuffer *in,
214219
unsigned _supla_int_t size) {
215220
unsigned _supla_int_t old_size = in->size;
@@ -282,7 +287,8 @@ char sproto_pop_in_sdp(void *spd_ptr, TSuplaDataPacket *sdp) {
282287
if ((header_size + _sdp->data_size + SUPLA_TAG_SIZE) > spd->in.data_size)
283288
return SUPLA_RESULT_FALSE;
284289

285-
if (memcmp(&spd->in.buffer[header_size + _sdp->data_size], sproto_tag,
290+
if (header_size + _sdp->data_size >= spd->in.size ||
291+
memcmp(&spd->in.buffer[header_size + _sdp->data_size], sproto_tag,
286292
SUPLA_TAG_SIZE) != 0) {
287293
sproto_shrink_in_buffer(&spd->in, spd->in.data_size);
288294

libraries/SuplaDevice/proto.h

Lines changed: 73 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ extern "C" {
5656
// CS - client -> server
5757
// SC - server -> client
5858

59-
#define SUPLA_PROTO_VERSION 8
59+
#define SUPLA_PROTO_VERSION 9
6060
#define SUPLA_PROTO_VERSION_MIN 1
6161
#define SUPLA_TAG_SIZE 5
6262
#if defined(__AVR__)
@@ -92,11 +92,12 @@ extern "C" {
9292
#define SUPLA_OAUTH_SECRET_MAXSIZE 276 // ver. >= 7
9393
#define SUPLA_OAUTH_USERNAME_MAXSIZE 65 // ver. >= 7
9494
#define SUPLA_OAUTH_PASSWORD_MAXSIZE 65 // ver. >= 7
95-
#define SUPLA_CHANNELGROUP_PACK_MAXCOUNT 20 // ver. >= 8
96-
#define SUPLA_CHANNELGROUP_CAPTION_MAXSIZE 401 // ver. >= 8
95+
#define SUPLA_CHANNELGROUP_PACK_MAXCOUNT 20 // ver. >= 9
96+
#define SUPLA_CHANNELGROUP_CAPTION_MAXSIZE 401 // ver. >= 9
97+
#define SUPLA_CHANNELVALUE_PACK_MAXCOUNT 20 // ver. >= 9
9798

9899
#ifndef SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT
99-
#define SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT 100 // ver. >= 8
100+
#define SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT 100 // ver. >= 9
100101
#endif /*SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT*/
101102

102103
#define SUPLA_DCS_CALL_GETVERSION 10
@@ -113,6 +114,7 @@ extern "C" {
113114
#define SUPLA_CS_CALL_REGISTER_CLIENT_B 85 // ver. >= 6
114115
#define SUPLA_CS_CALL_REGISTER_CLIENT_C 86 // ver. >= 7
115116
#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT 90
117+
#define SUPLA_SC_CALL_REGISTER_CLIENT_RESULT_B 92 // ver. >= 9
116118
#define SUPLA_DS_CALL_DEVICE_CHANNEL_VALUE_CHANGED 100
117119
#define SUPLA_SD_CALL_CHANNEL_SET_VALUE 110
118120
#define SUPLA_DS_CALL_CHANNEL_SET_VALUE_RESULT 120
@@ -124,17 +126,21 @@ extern "C" {
124126
#define SUPLA_CS_CALL_GET_NEXT 180
125127
#define SUPLA_SC_CALL_EVENT 190
126128
#define SUPLA_CS_CALL_CHANNEL_SET_VALUE 200
127-
#define SUPLA_CS_CALL_CHANNEL_SET_VALUE_B 205 // ver. >= 3
128-
#define SUPLA_DCS_CALL_SET_ACTIVITY_TIMEOUT 210 // ver. >= 2
129-
#define SUPLA_SDC_CALL_SET_ACTIVITY_TIMEOUT_RESULT 220 // ver. >= 2
130-
#define SUPLA_DS_CALL_GET_FIRMWARE_UPDATE_URL 300 // ver. >= 5
131-
#define SUPLA_SD_CALL_GET_FIRMWARE_UPDATE_URL_RESULT 310 // ver. >= 5
132-
#define SUPLA_DCS_CALL_GET_REGISTRATION_ENABLED 320 // ver. >= 7
133-
#define SUPLA_SDC_CALL_GET_REGISTRATION_ENABLED_RESULT 330 // ver. >= 7
134-
#define SUPLA_CS_CALL_GET_OAUTH_PARAMETERS 340 // ver. >= 7
135-
#define SUPLA_SC_CALL_GET_OAUTH_PARAMETERS_RESULT 350 // ver. >= 7
136-
#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_B 360 // ver. >= 8
137-
#define SUPLA_SC_CALL_CHANNEL_UPDATE_B 370 // ver. >= 8
129+
#define SUPLA_CS_CALL_CHANNEL_SET_VALUE_B 205 // ver. >= 3
130+
#define SUPLA_DCS_CALL_SET_ACTIVITY_TIMEOUT 210 // ver. >= 2
131+
#define SUPLA_SDC_CALL_SET_ACTIVITY_TIMEOUT_RESULT 220 // ver. >= 2
132+
#define SUPLA_DS_CALL_GET_FIRMWARE_UPDATE_URL 300 // ver. >= 5
133+
#define SUPLA_SD_CALL_GET_FIRMWARE_UPDATE_URL_RESULT 310 // ver. >= 5
134+
#define SUPLA_DCS_CALL_GET_REGISTRATION_ENABLED 320 // ver. >= 7
135+
#define SUPLA_SDC_CALL_GET_REGISTRATION_ENABLED_RESULT 330 // ver. >= 7
136+
#define SUPLA_CS_CALL_GET_OAUTH_PARAMETERS 340 // ver. >= 7
137+
#define SUPLA_SC_CALL_GET_OAUTH_PARAMETERS_RESULT 350 // ver. >= 7
138+
#define SUPLA_SC_CALL_CHANNELPACK_UPDATE_B 360 // ver. >= 8
139+
#define SUPLA_SC_CALL_CHANNEL_UPDATE_B 370 // ver. >= 8
140+
#define SUPLA_SC_CALL_CHANNELGROUP_PACK_UPDATE 380 // ver. >= 9
141+
#define SUPLA_SC_CALL_CHANNELGROUP_RELATION_PACK_UPDATE 390 // ver. >= 9
142+
#define SUPLA_SC_CALL_CHANNELVALUE_PACK_UPDATE 400 // ver. >= 9
143+
#define SUPLA_CS_CALL_SET_VALUE 410 // ver. >= 9
138144

139145
#define SUPLA_RESULT_CALL_NOT_ALLOWED -5
140146
#define SUPLA_RESULT_DATA_TOO_LARGE -4
@@ -274,6 +280,9 @@ extern "C" {
274280
#define SUPLA_PLATFORM_UNKNOWN 0
275281
#define SUPLA_PLATFORM_ESP8266 1
276282

283+
#define SUPLA_NEW_VALUE_TARGET_CHANNEL 0
284+
#define SUPLA_NEW_VALUE_TARGET_GROUP 1
285+
277286
#pragma pack(push, 1)
278287

279288
typedef struct {
@@ -339,7 +348,7 @@ typedef struct {
339348
_supla_int_t count;
340349
_supla_int_t total_left;
341350
TSC_SuplaLocation
342-
locations[SUPLA_LOCATIONPACK_MAXCOUNT]; // Last variable in struct!
351+
items[SUPLA_LOCATIONPACK_MAXCOUNT]; // Last variable in struct!
343352
} TSC_SuplaLocationPack;
344353

345354
typedef struct {
@@ -389,7 +398,7 @@ typedef struct {
389398
unsigned char channel_count;
390399
TDS_SuplaDeviceChannel_B
391400
channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
392-
} TDS_SuplaRegisterDevice_B; // ver. >= 2
401+
} TDS_SuplaRegisterDevice_B; // ver. >= 2
393402

394403
typedef struct {
395404
// device -> server
@@ -406,7 +415,7 @@ typedef struct {
406415
unsigned char channel_count;
407416
TDS_SuplaDeviceChannel_B
408417
channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
409-
} TDS_SuplaRegisterDevice_C; // ver. >= 6
418+
} TDS_SuplaRegisterDevice_C; // ver. >= 6
410419

411420
typedef struct {
412421
// device -> server
@@ -423,8 +432,8 @@ typedef struct {
423432

424433
unsigned char channel_count;
425434
TDS_SuplaDeviceChannel_B
426-
channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
427-
} TDS_SuplaRegisterDevice_D; // ver. >= 7
435+
channels[SUPLA_CHANNELMAXCOUNT]; // Last variable in struct!
436+
} TDS_SuplaRegisterDevice_D; // ver. >= 7
428437

429438
typedef struct {
430439
// server -> device
@@ -468,6 +477,16 @@ typedef struct {
468477
TSuplaChannelValue value;
469478
} TSC_SuplaChannelValue;
470479

480+
typedef struct {
481+
// server -> client
482+
483+
_supla_int_t count;
484+
_supla_int_t total_left;
485+
486+
TSC_SuplaChannelValue
487+
items[SUPLA_CHANNELVALUE_PACK_MAXCOUNT]; // Last variable in struct!
488+
} TSC_SuplaChannelValuePack; // ver. >= 9
489+
471490
typedef struct {
472491
// server -> client
473492
char EOL; // End Of List
@@ -490,7 +509,7 @@ typedef struct {
490509
_supla_int_t count;
491510
_supla_int_t total_left;
492511
TSC_SuplaChannel
493-
channels[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
512+
items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
494513
} TSC_SuplaChannelPack;
495514

496515
typedef struct {
@@ -510,16 +529,16 @@ typedef struct {
510529
unsigned _supla_int_t
511530
CaptionSize; // including the terminating null byte ('\0')
512531
char Caption[SUPLA_CHANNEL_CAPTION_MAXSIZE]; // Last variable in struct!
513-
} TSC_SuplaChannel_B; // ver. >= 8
532+
} TSC_SuplaChannel_B; // ver. >= 8
514533

515534
typedef struct {
516535
// server -> client
517536

518537
_supla_int_t count;
519538
_supla_int_t total_left;
520539
TSC_SuplaChannel_B
521-
channels[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
522-
} TSC_SuplaChannelPack_B; // ver. >= 8
540+
items[SUPLA_CHANNELPACK_MAXCOUNT]; // Last variable in struct!
541+
} TSC_SuplaChannelPack_B; // ver. >= 8
523542

524543
typedef struct {
525544
// server -> client
@@ -530,38 +549,37 @@ typedef struct {
530549
_supla_int_t Func;
531550
_supla_int_t AltIcon;
532551
unsigned _supla_int_t Flags;
533-
unsigned char ProtocolVersion;
534552

535553
unsigned _supla_int_t
536554
CaptionSize; // including the terminating null byte ('\0')
537555
char Caption[SUPLA_CHANNELGROUP_CAPTION_MAXSIZE]; // Last variable in struct!
538-
} TSC_SuplaChannelGroup; // ver. >= 8
556+
} TSC_SuplaChannelGroup; // ver. >= 9
539557

540558
typedef struct {
541559
// server -> client
542560

543561
_supla_int_t count;
544562
_supla_int_t total_left;
545563
TSC_SuplaChannelGroup
546-
groups[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
547-
} TSC_SuplaChannelGroupPack; // ver. >= 8
564+
items[SUPLA_CHANNELGROUP_PACK_MAXCOUNT]; // Last variable in struct!
565+
} TSC_SuplaChannelGroupPack; // ver. >= 9
548566

549567
typedef struct {
550568
// server -> client
551569
char EOL; // End Of List
552570

553-
_supla_int_t ChennelGroupID;
554-
_supla_int_t ChennelID;
555-
} TSC_SuplaChannelGroupRelation; // ver. >= 8
571+
_supla_int_t ChannelGroupID;
572+
_supla_int_t ChannelID;
573+
} TSC_SuplaChannelGroupRelation; // ver. >= 9
556574

557575
typedef struct {
558576
// server -> client
559577

560578
_supla_int_t count;
561579
_supla_int_t total_left;
562-
TSC_SuplaChannelGroup groups
580+
TSC_SuplaChannelGroupRelation items
563581
[SUPLA_CHANNELGROUP_RELATION_PACK_MAXCOUNT]; // Last variable in struct!
564-
} TSC_SuplaChannelGroupRelationPack; // ver. >= 8
582+
} TSC_SuplaChannelGroupRelationPack; // ver. >= 9
565583

566584
typedef struct {
567585
// client -> server
@@ -612,6 +630,20 @@ typedef struct {
612630
unsigned char version_min;
613631
} TSC_SuplaRegisterClientResult;
614632

633+
typedef struct {
634+
// server -> client
635+
636+
_supla_int_t result_code;
637+
_supla_int_t ClientID;
638+
_supla_int_t LocationCount;
639+
_supla_int_t ChannelCount;
640+
_supla_int_t ChannelGroupCount;
641+
_supla_int_t Flags;
642+
unsigned char activity_timeout;
643+
unsigned char version;
644+
unsigned char version_min;
645+
} TSC_SuplaRegisterClientResult_B; // ver. >= 9
646+
615647
typedef struct {
616648
// client -> server
617649
unsigned char ChannelId;
@@ -624,6 +656,13 @@ typedef struct {
624656
char value[SUPLA_CHANNELVALUE_SIZE];
625657
} TCS_SuplaChannelNewValue_B;
626658

659+
typedef struct {
660+
// client -> server
661+
_supla_int_t Id;
662+
char Target; // SUPLA_NEW_VALUE_TARGET_
663+
char value[SUPLA_CHANNELVALUE_SIZE];
664+
} TCS_SuplaNewValue; // ver. >= 9
665+
627666
typedef struct {
628667
// server -> client
629668
_supla_int_t Event;
@@ -687,6 +726,7 @@ char sproto_pop_in_sdp(void *spd_ptr, TSuplaDataPacket *sdp);
687726
unsigned _supla_int_t sproto_pop_out_data(void *spd_ptr, char *buffer,
688727
unsigned _supla_int_t buffer_size);
689728
char sproto_out_dataexists(void *spd_ptr);
729+
char sproto_in_dataexists(void *spd_ptr);
690730

691731
unsigned char sproto_get_version(void *spd_ptr);
692732
void sproto_set_version(void *spd_ptr, unsigned char version);

0 commit comments

Comments
 (0)