From b55a08cd6aba0364d8ef4c450f8aeb057bb936ee Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 11 Dec 2017 21:49:58 +0100 Subject: submessages --- elegoo/elegoo.ino | 22 ++++++++++----------- elegoo/elegoo.pb.c | 54 ++++++++++++++++++++++++++++++++++++++++---------- elegoo/elegoo.pb.h | 58 ++++++++++++++++++++++++++++++++++++------------------ 3 files changed, 94 insertions(+), 40 deletions(-) (limited to 'elegoo') diff --git a/elegoo/elegoo.ino b/elegoo/elegoo.ino index e354262..b3d1ced 100644 --- a/elegoo/elegoo.ino +++ b/elegoo/elegoo.ino @@ -51,16 +51,16 @@ void stop() { } void onPacket(const uint8_t* buf, size_t size) { - Command cmd = Command_init_zero; + elegoo_Command cmd = elegoo_Command_init_zero; pb_istream_t istream = pb_istream_from_buffer(buf, size); - pb_decode_delimited(&istream, Command_fields, &cmd); + pb_decode_delimited(&istream, elegoo_Command_fields, &cmd); - if (cmd.SpeedR > 0) { - motorR(cmd.SpeedR); + if (cmd.Speed.R > 0) { + motorR(cmd.Speed.R); } - if (cmd.SpeedL > 0) { - motorL(cmd.SpeedL); + if (cmd.Speed.L > 0) { + motorL(cmd.Speed.L); } if (cmd.Stop) { stop(); @@ -76,12 +76,12 @@ void onPacket(const uint8_t* buf, size_t size) { void events() { uint8_t buf[64]; - Events evt = Events_init_zero; + elegoo_Events evt = elegoo_Events_init_zero; evt.Distance = readDistance(); - evt.SensorR = digitalRead(SR); - evt.SensorC = digitalRead(SC); - evt.SensorL = digitalRead(SL); + evt.Sensor.R = digitalRead(SR); + evt.Sensor.C = digitalRead(SC); + evt.Sensor.L = digitalRead(SL); if (irrecv.decode(&ir)) { evt.KeyPress = ir.value; @@ -92,7 +92,7 @@ void events() { evt.Time = millis(); pb_ostream_t ostream = pb_ostream_from_buffer(buf, sizeof(buf)); - pb_encode_delimited(&ostream, Events_fields, &evt); + pb_encode_delimited(&ostream, elegoo_Events_fields, &evt); serial.send(buf, ostream.bytes_written); } diff --git a/elegoo/elegoo.pb.c b/elegoo/elegoo.pb.c index 1dd40bf..fad83e8 100644 --- a/elegoo/elegoo.pb.c +++ b/elegoo/elegoo.pb.c @@ -1,5 +1,5 @@ /* Automatically generated nanopb constant definitions */ -/* Generated by nanopb-0.3.9 at Mon Dec 11 01:03:09 2017. */ +/* Generated by nanopb-0.3.9 at Mon Dec 11 21:46:37 2017. */ #include "elegoo.pb.h" @@ -10,25 +10,59 @@ -const pb_field_t elegoo_Command_fields[6] = { - PB_FIELD( 1, SINT32 , SINGULAR, STATIC , FIRST, elegoo_Command, SpeedR, SpeedR, 0), - PB_FIELD( 2, SINT32 , SINGULAR, STATIC , OTHER, elegoo_Command, SpeedL, SpeedR, 0), - PB_FIELD( 3, BOOL , SINGULAR, STATIC , OTHER, elegoo_Command, Stop, SpeedL, 0), +const pb_field_t elegoo_Speed_fields[3] = { + PB_FIELD( 1, SINT32 , SINGULAR, STATIC , FIRST, elegoo_Speed, L, L, 0), + PB_FIELD( 2, SINT32 , SINGULAR, STATIC , OTHER, elegoo_Speed, R, L, 0), + PB_LAST_FIELD +}; + +const pb_field_t elegoo_Command_fields[5] = { + PB_FIELD( 1, MESSAGE , SINGULAR, STATIC , FIRST, elegoo_Command, Speed, Speed, &elegoo_Speed_fields), + PB_FIELD( 3, BOOL , SINGULAR, STATIC , OTHER, elegoo_Command, Stop, Speed, 0), PB_FIELD( 4, UINT32 , SINGULAR, STATIC , OTHER, elegoo_Command, Direction, Stop, 0), PB_FIELD( 5, UINT32 , SINGULAR, STATIC , OTHER, elegoo_Command, StopAfter, Direction, 0), PB_LAST_FIELD }; -const pb_field_t elegoo_Events_fields[8] = { +const pb_field_t elegoo_Sensor_fields[4] = { + PB_FIELD( 1, BOOL , SINGULAR, STATIC , FIRST, elegoo_Sensor, R, R, 0), + PB_FIELD( 2, BOOL , SINGULAR, STATIC , OTHER, elegoo_Sensor, C, R, 0), + PB_FIELD( 3, BOOL , SINGULAR, STATIC , OTHER, elegoo_Sensor, L, C, 0), + PB_LAST_FIELD +}; + +const pb_field_t elegoo_Events_fields[6] = { PB_FIELD( 1, UINT32 , SINGULAR, STATIC , FIRST, elegoo_Events, Distance, Distance, 0), PB_FIELD( 2, SINT32 , SINGULAR, STATIC , OTHER, elegoo_Events, Direction, Distance, 0), - PB_FIELD( 3, BOOL , SINGULAR, STATIC , OTHER, elegoo_Events, SensorR, Direction, 0), - PB_FIELD( 4, BOOL , SINGULAR, STATIC , OTHER, elegoo_Events, SensorC, SensorR, 0), - PB_FIELD( 5, BOOL , SINGULAR, STATIC , OTHER, elegoo_Events, SensorL, SensorC, 0), - PB_FIELD( 6, UINT32 , SINGULAR, STATIC , OTHER, elegoo_Events, KeyPress, SensorL, 0), + PB_FIELD( 3, MESSAGE , SINGULAR, STATIC , OTHER, elegoo_Events, Sensor, Direction, &elegoo_Sensor_fields), + PB_FIELD( 6, UINT32 , SINGULAR, STATIC , OTHER, elegoo_Events, KeyPress, Sensor, 0), PB_FIELD( 7, UINT32 , SINGULAR, STATIC , OTHER, elegoo_Events, Time, KeyPress, 0), PB_LAST_FIELD }; +/* Check that field information fits in pb_field_t */ +#if !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_32BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in 8 or 16 bit + * field descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(elegoo_Command, Speed) < 65536 && pb_membersize(elegoo_Events, Sensor) < 65536), YOU_MUST_DEFINE_PB_FIELD_32BIT_FOR_MESSAGES_elegoo_Speed_elegoo_Command_elegoo_Sensor_elegoo_Events) +#endif + +#if !defined(PB_FIELD_16BIT) && !defined(PB_FIELD_32BIT) +/* If you get an error here, it means that you need to define PB_FIELD_16BIT + * compile-time option. You can do that in pb.h or on compiler command line. + * + * The reason you need to do this is that some of your messages contain tag + * numbers or field sizes that are larger than what can fit in the default + * 8 bit descriptors. + */ +PB_STATIC_ASSERT((pb_membersize(elegoo_Command, Speed) < 256 && pb_membersize(elegoo_Events, Sensor) < 256), YOU_MUST_DEFINE_PB_FIELD_16BIT_FOR_MESSAGES_elegoo_Speed_elegoo_Command_elegoo_Sensor_elegoo_Events) +#endif + + /* @@protoc_insertion_point(eof) */ diff --git a/elegoo/elegoo.pb.h b/elegoo/elegoo.pb.h index 7ba34f2..3d90f3f 100644 --- a/elegoo/elegoo.pb.h +++ b/elegoo/elegoo.pb.h @@ -1,5 +1,5 @@ /* Automatically generated nanopb header */ -/* Generated by nanopb-0.3.9 at Mon Dec 11 01:03:09 2017. */ +/* Generated by nanopb-0.3.9 at Mon Dec 11 21:46:37 2017. */ #ifndef PB_ELEGOO_ELEGOO_PB_H_INCLUDED #define PB_ELEGOO_ELEGOO_PB_H_INCLUDED @@ -15,9 +15,21 @@ extern "C" { #endif /* Struct definitions */ +typedef struct _elegoo_Sensor { + bool R; + bool C; + bool L; +/* @@protoc_insertion_point(struct:elegoo_Sensor) */ +} elegoo_Sensor; + +typedef struct _elegoo_Speed { + int32_t L; + int32_t R; +/* @@protoc_insertion_point(struct:elegoo_Speed) */ +} elegoo_Speed; + typedef struct _elegoo_Command { - int32_t SpeedR; - int32_t SpeedL; + elegoo_Speed Speed; bool Stop; uint32_t Direction; uint32_t StopAfter; @@ -27,9 +39,7 @@ typedef struct _elegoo_Command { typedef struct _elegoo_Events { uint32_t Distance; int32_t Direction; - bool SensorR; - bool SensorC; - bool SensorL; + elegoo_Sensor Sensor; uint32_t KeyPress; uint32_t Time; /* @@protoc_insertion_point(struct:elegoo_Events) */ @@ -38,32 +48,42 @@ typedef struct _elegoo_Events { /* Default values for struct fields */ /* Initializer values for message structs */ -#define elegoo_Command_init_default {0, 0, 0, 0, 0} -#define elegoo_Events_init_default {0, 0, 0, 0, 0, 0, 0} -#define elegoo_Command_init_zero {0, 0, 0, 0, 0} -#define elegoo_Events_init_zero {0, 0, 0, 0, 0, 0, 0} +#define elegoo_Speed_init_default {0, 0} +#define elegoo_Command_init_default {elegoo_Speed_init_default, 0, 0, 0} +#define elegoo_Sensor_init_default {0, 0, 0} +#define elegoo_Events_init_default {0, 0, elegoo_Sensor_init_default, 0, 0} +#define elegoo_Speed_init_zero {0, 0} +#define elegoo_Command_init_zero {elegoo_Speed_init_zero, 0, 0, 0} +#define elegoo_Sensor_init_zero {0, 0, 0} +#define elegoo_Events_init_zero {0, 0, elegoo_Sensor_init_zero, 0, 0} /* Field tags (for use in manual encoding/decoding) */ -#define elegoo_Command_SpeedR_tag 1 -#define elegoo_Command_SpeedL_tag 2 +#define elegoo_Sensor_R_tag 1 +#define elegoo_Sensor_C_tag 2 +#define elegoo_Sensor_L_tag 3 +#define elegoo_Speed_L_tag 1 +#define elegoo_Speed_R_tag 2 +#define elegoo_Command_Speed_tag 1 #define elegoo_Command_Stop_tag 3 #define elegoo_Command_Direction_tag 4 #define elegoo_Command_StopAfter_tag 5 #define elegoo_Events_Distance_tag 1 #define elegoo_Events_Direction_tag 2 -#define elegoo_Events_SensorR_tag 3 -#define elegoo_Events_SensorC_tag 4 -#define elegoo_Events_SensorL_tag 5 +#define elegoo_Events_Sensor_tag 3 #define elegoo_Events_KeyPress_tag 6 #define elegoo_Events_Time_tag 7 /* Struct field encoding specification for nanopb */ -extern const pb_field_t elegoo_Command_fields[6]; -extern const pb_field_t elegoo_Events_fields[8]; +extern const pb_field_t elegoo_Speed_fields[3]; +extern const pb_field_t elegoo_Command_fields[5]; +extern const pb_field_t elegoo_Sensor_fields[4]; +extern const pb_field_t elegoo_Events_fields[6]; /* Maximum encoded size of messages (where known) */ -#define elegoo_Command_size 26 -#define elegoo_Events_size 30 +#define elegoo_Speed_size 12 +#define elegoo_Command_size 28 +#define elegoo_Sensor_size 6 +#define elegoo_Events_size 32 /* Message IDs (where set with "msgid" option) */ #ifdef PB_MSGID -- cgit v1.2.3