From 5db15c08504b9a229bb47bc5cba034616af9f745 Mon Sep 17 00:00:00 2001 From: Andrea Gilardoni Date: Tue, 3 Jun 2025 14:22:53 +0200 Subject: [PATCH] Addressing Issue #552 While using platformio build system some new structures are not included in the final binary, for this reason it is required for concrete encoder and decoder for cbor commands to be referenced in files that are referenced by the sketch entrypoint --- src/ArduinoIoTCloudTCP.cpp | 3 ++- src/cbor/IoTCloudMessageDecoder.cpp | 10 ++++++++++ src/cbor/IoTCloudMessageDecoder.h | 8 ++++++++ src/cbor/IoTCloudMessageEncoder.cpp | 11 +++++++++++ src/cbor/IoTCloudMessageEncoder.h | 7 +++++++ 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/ArduinoIoTCloudTCP.cpp b/src/ArduinoIoTCloudTCP.cpp index 9de9d301a..31e972882 100644 --- a/src/ArduinoIoTCloudTCP.cpp +++ b/src/ArduinoIoTCloudTCP.cpp @@ -72,7 +72,8 @@ ArduinoIoTCloudTCP::ArduinoIoTCloudTCP() , _get_ota_confirmation{nullptr} #endif /* OTA_ENABLED */ { - + cbor::encoder::iotcloud::commandEncoders(); + cbor::decoder::iotcloud::commandDecoders(); } /****************************************************************************** diff --git a/src/cbor/IoTCloudMessageDecoder.cpp b/src/cbor/IoTCloudMessageDecoder.cpp index 8a17ba1f3..8deb9e3e5 100644 --- a/src/cbor/IoTCloudMessageDecoder.cpp +++ b/src/cbor/IoTCloudMessageDecoder.cpp @@ -176,3 +176,13 @@ static ThingUpdateCommandDecoder thingUpdateCommandDecoder; static ThingDetachCommandDecoder thingDetachCommandDecoder; static LastValuesUpdateCommandDecoder lastValuesUpdateCommandDecoder; static TimezoneCommandDownDecoder timezoneCommandDownDecoder; + +namespace cbor { namespace decoder { namespace iotcloud { + void commandDecoders() { + (void) otaUpdateCommandDecoder; + (void) thingUpdateCommandDecoder; + (void) thingDetachCommandDecoder; + (void) lastValuesUpdateCommandDecoder; + (void) timezoneCommandDownDecoder; + } +}}} diff --git a/src/cbor/IoTCloudMessageDecoder.h b/src/cbor/IoTCloudMessageDecoder.h index 4b444f5c8..f072a2c3a 100644 --- a/src/cbor/IoTCloudMessageDecoder.h +++ b/src/cbor/IoTCloudMessageDecoder.h @@ -63,4 +63,12 @@ class TimezoneCommandDownDecoder: public CBORMessageDecoderInterface { MessageDecoder::Status decode(CborValue* iter, Message *msg) override; }; +namespace cbor { namespace decoder { namespace iotcloud { + /** + * Some link time optimization may exclude these classes to be instantiated + * thus it may be required to reference them from outside of this file + */ + void commandDecoders(); +}}} + #endif /* ARDUINO_CBOR_MESSAGE_DECODER_H_ */ diff --git a/src/cbor/IoTCloudMessageEncoder.cpp b/src/cbor/IoTCloudMessageEncoder.cpp index ed4c6d823..71363cf5e 100644 --- a/src/cbor/IoTCloudMessageEncoder.cpp +++ b/src/cbor/IoTCloudMessageEncoder.cpp @@ -159,3 +159,14 @@ static LastValuesBeginCommandEncoder lastValuesBeginCommandEncoder; static DeviceBeginCommandEncoder deviceBeginCommandEncoder; static OtaProgressCommandUpEncoder otaProgressCommandUpEncoder; static TimezoneCommandUpEncoder timezoneCommandUpEncoder; + +namespace cbor { namespace encoder { namespace iotcloud { + void commandEncoders() { + (void) otaBeginCommandEncoder; + (void) thingBeginCommandEncoder; + (void) lastValuesBeginCommandEncoder; + (void) deviceBeginCommandEncoder; + (void) otaProgressCommandUpEncoder; + (void) timezoneCommandUpEncoder; + } +}}} diff --git a/src/cbor/IoTCloudMessageEncoder.h b/src/cbor/IoTCloudMessageEncoder.h index 99922bc59..9b5ca441d 100644 --- a/src/cbor/IoTCloudMessageEncoder.h +++ b/src/cbor/IoTCloudMessageEncoder.h @@ -71,5 +71,12 @@ class TimezoneCommandUpEncoder: public CBORMessageEncoderInterface { MessageEncoder::Status encode(CborEncoder* encoder, Message *msg) override; }; +namespace cbor { namespace encoder { namespace iotcloud { + /** + * Some link time optimization may exclude these classes to be instantiated + * thus it may be required to reference them from outside of this file + */ + void commandEncoders(); +}}} #endif /* ARDUINO_CBOR_MESSAGE_ENCODER_H_ */