Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

LoRa support #48

Merged
merged 9 commits into from
Dec 16, 2019
Merged

LoRa support #48

merged 9 commits into from
Dec 16, 2019

Conversation

mirkokurt
Copy link
Contributor

@mirkokurt mirkokurt commented Dec 10, 2019

ArduinoCloudThing support for LoRaWAN boards. Due to bandwidth constraints of the LoRA protocol, a variant of the current cbor encoding will be supported with the aim of reducing messages payload when the library is used with an Arduino LoRa board.

Encoding and decoding of cbor messages now support the use of a short property identifier instead of the name of the property in order to reduce the message payload. The assignment of the short identifier must be done explicitly in the addProperty method for the boards that need to use light message payloads.

For simple properties the integer identifier is encoded as an 8-bit integer in the cbor message.

Example

CloudBool test = true;
thing.addPropertyReal(test, "test", Permission::ReadWrite, 1);
/* encode: [{0: 1, 4: true}] = 9F A2 00 01 04 F5 FF */

For multi value properties, also every attribute of a property has an integer identifier. The identifier is generated sequentially following the order of invocation of appendAttributesToCloud() and setAttributesFromCloud().

For multi value properties the integer identifier is encoded as a 16-bit integer, the MSB encode the attribute identifier, the LSB encode the property identifier (eg: property = 1, attribute = 1 ----> MSB: 0x01 =256, LSB: 0x01 = 1 ------> 256 + 1 = 257)

Example

virtual void appendAttributesToCloud() {
  appendAttribute(_value.hue); //the identifier 1 will be assigned to the attribute "hue"
  appendAttribute(_value.sat); //the identifier 2 will be assigned to the attribute "sat"
  appendAttribute(_value.bri); //the identifier 3 will be assigned to the attribute "bri"
}
virtual void setAttributesFromCloud() {
  setAttribute(_cloud_value.hue); //the identifier 1 will be assigned to the attribute "hue"
  setAttribute(_cloud_value.sat); //the identifier 2 will be assigned to the attribute "sat"
  setAttribute(_cloud_value.bri); //the identifier 3 will be assigned to the attribute "bri"
}

CloudColor color_test = CloudColor(2.0, 2.0, 2.0);
thing.addPropertyReal(color_test, "test", Permission::ReadWrite, 1);
/* encode: [{0: 257, 2: 2.0},{0: 513, 2: 2.0},{0: 769, 2: 2.0}] = 9F A2 00 19 01 01 02 FA 40 00 00 00 A2 00 19 02 01 02 FA 40 00 00 00 A2 00 19 03 01 02 FA 40 00 00 00 FF */    

To be used with:
arduino-libraries/Arduino_ConnectionHandler#11
arduino-libraries/ArduinoIoTCloud#83

@TravisBuddy
Copy link

Travis tests have failed

Hey @mirkokurt,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

1st Build

View build log

make
$ make
Scanning dependencies of target testArduinoCloudThing
[  3%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/Arduino.cpp.o
[  7%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/main.cpp.o
[ 11%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp: In function ‘void ____C_A_T_C_H____T_E_S_T____0()’:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:24:126: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudBool&, const char [14], Permission)’
  &thing.addPropertyReal(bool_property, "bool_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:25:126: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudBool&, const char [14], Permission)’
  &thing.addPropertyReal(bool_property, "bool_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:39:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudInt&, const char [13], Permission)’
  = &thing.addPropertyReal(int_property, "int_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:40:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudInt&, const char [13], Permission)’
  = &thing.addPropertyReal(int_property, "int_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:55:129: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudFloat&, const char [15], Permission)’
 thing.addPropertyReal(float_property, "float_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:56:129: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudFloat&, const char [15], Permission)’
 thing.addPropertyReal(float_property, "float_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:71:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudString&, const char [13], Permission)’
  = &thing.addPropertyReal(str_property, "str_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:72:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudString&, const char [13], Permission)’
  = &thing.addPropertyReal(str_property, "str_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
CMakeFiles/testArduinoCloudThing.dir/build.make:88: recipe for target 'CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o' failed
make[2]: *** [CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/testArduinoCloudThing.dir/all' failed
make[1]: *** [CMakeFiles/testArduinoCloudThing.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

2nd Build

View build log

find . -regextype posix-extended -path './.git' -prune -or -path './src/lib' -prune -or -path './test/external' -prune -or \( -iregex '.*\.((ino)|(h)|(hpp)|(hh)|(hxx)|(h\+\+)|(cpp)|(cc)|(cxx)|(c\+\+)|(cp)|(c)|(ipp)|(ii)|(ixx)|(inl)|(tpp)|(txx)|(tpl))$' -and -type f \) -print0 | xargs -0 -L1 bash -c 'if ! diff "$0" <(astyle --options=${HOME}/astyle/examples_formatter.conf --dry-run < "$0"); then echo "Non-compliant code formatting in $0"; false; fi'
142c142
<       if(propertyIdentifier != -1) {
---
>       if (propertyIdentifier != -1) {
Non-compliant code formatting in ./src/ArduinoCloudThing.h
26c26
<     return 0;
---
>   return 0;
154c154
<   if(attributeName != ""){
---
>   if (attributeName != "") {
161c161
<   if(_lightPayload) {
---
>   if (_lightPayload) {
163c163
<     completeIdentifier += _identifier; 
---
>     completeIdentifier += _identifier;
207c207
<   if(attributeName != ""){
---
>   if (attributeName != "") {
213c213
<       if(map->light_payload.isSet() && map->light_payload.get()) {
---
>       if (map->light_payload.isSet() && map->light_payload.get()) {
228c228
<    
---
> 
Non-compliant code formatting in ./src/ArduinoCloudProperty.cpp
101c101
<   
---
> 
349,350c349,350
<       map_data->name_identifier.set(val&255);
<       map_data->attribute_identifier.set(val>>8);
---
>       map_data->name_identifier.set(val & 255);
>       map_data->attribute_identifier.set(val >> 8);
354c354
<       
---
> 
362c362
<   
---
> 
500c500
<   if(propertyIdentifier>255) {
---
>   if (propertyIdentifier > 255) {
Non-compliant code formatting in ./src/ArduinoCloudThing.cpp
186c186
<     /************************************************************************************/
---
>   /************************************************************************************/
Non-compliant code formatting in ./test/src/test_decode.cpp
TravisBuddy Request Identifier: 6d1159a0-1b62-11ea-b9ce-6f43500ed087

@TravisBuddy
Copy link

Travis tests have failed

Hey @mirkokurt,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

1st Build

View build log

make
$ make
Scanning dependencies of target testArduinoCloudThing
[  3%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/Arduino.cpp.o
[  7%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/main.cpp.o
[ 11%] Building CXX object CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp: In function ‘void ____C_A_T_C_H____T_E_S_T____0()’:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:24:126: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudBool&, const char [14], Permission)’
  &thing.addPropertyReal(bool_property, "bool_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:25:126: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudBool&, const char [14], Permission)’
  &thing.addPropertyReal(bool_property, "bool_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:39:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudInt&, const char [13], Permission)’
  = &thing.addPropertyReal(int_property, "int_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:40:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudInt&, const char [13], Permission)’
  = &thing.addPropertyReal(int_property, "int_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:55:129: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudFloat&, const char [15], Permission)’
 thing.addPropertyReal(float_property, "float_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:56:129: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudFloat&, const char [15], Permission)’
 thing.addPropertyReal(float_property, "float_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:71:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudString&, const char [13], Permission)’
  = &thing.addPropertyReal(str_property, "str_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:72:123: error: no matching function for call to ‘ArduinoCloudThing::addPropertyReal(CloudString&, const char [13], Permission)’
  = &thing.addPropertyReal(str_property, "str_property", Permission::ReadWrite);
                                                                              ^
In file included from /home/travis/build/arduino-libraries/ArduinoCloudThing/test/src/test_addPropertyReal.cpp:11:0:
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note: candidate: ArduinoCloudProperty& ArduinoCloudThing::addPropertyReal(ArduinoCloudProperty&, const String&, Permission, int)
     ArduinoCloudProperty   & addPropertyReal(ArduinoCloudProperty   & property,
                              ^
/home/travis/build/arduino-libraries/ArduinoCloudThing/test/../src/ArduinoCloudThing.h:81:30: note:   candidate expects 4 arguments, 3 provided
CMakeFiles/testArduinoCloudThing.dir/build.make:88: recipe for target 'CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o' failed
make[2]: *** [CMakeFiles/testArduinoCloudThing.dir/src/test_addPropertyReal.cpp.o] Error 1
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/testArduinoCloudThing.dir/all' failed
make[1]: *** [CMakeFiles/testArduinoCloudThing.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
TravisBuddy Request Identifier: 219fa960-1b65-11ea-b9ce-6f43500ed087

@codecov-io
Copy link

codecov-io commented Dec 10, 2019

Codecov Report

Merging #48 into master will increase coverage by 0.08%.
The diff coverage is 98.41%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #48      +/-   ##
==========================================
+ Coverage   96.19%   96.28%   +0.08%     
==========================================
  Files          24       24              
  Lines         815      861      +46     
==========================================
+ Hits          784      829      +45     
- Misses         31       32       +1
Impacted Files Coverage Δ
src/types/CloudLocation.h 100% <ø> (ø) ⬆️
src/ArduinoCloudProperty.cpp 97.77% <100%> (+0.34%) ⬆️
src/ArduinoCloudProperty.h 100% <100%> (ø) ⬆️
src/ArduinoCloudThing.h 100% <100%> (ø) ⬆️
src/ArduinoCloudThing.cpp 96.63% <96.55%> (-0.09%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 6886c7a...f083971. Read the comment docs.

Copy link
Contributor

@aentinger aentinger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @mirkokurt 👋 I have a very hard time understanding the changes done within this PR. Please outline how the CBOR protocol was extended/changed and why.

Also I've got a esspecially a big problem with test code were the comment was changed but the actual byte array was not changed (here) with a commit message saying Fix unit tests. Why were those tests fixed? I'm looking at magic numbers without explanation in the test code. This is unacceptable.

When writing any code please keep in mind that code is written for your fellow programmers first and for the machine second.

@@ -23,12 +23,7 @@
#endif

static unsigned long getTimestamp() {
#ifdef ARDUINO_ARCH_SAMD
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was the content of this function deleted?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now the code is restored.

Hi @mirkokurt 👋 I have a very hard time understanding the changes done within this PR. Please outline how the CBOR protocol was extended/changed and why.

Also I've got a esspecially a big problem with test code were the comment was changed but the actual byte array was not changed (here) with a commit message saying Fix unit tests. Why were those tests fixed? I'm looking at magic numbers without explanation in the test code. This is unacceptable.

When writing any code please keep in mind that code is written for your fellow programmers first and for the machine second.

Hi @lxrobotics, I added many comments in the code to help programmers understanding how the library encode and decode the cbor messages when the option of using "light payloads" has been activated. I also updated the PR description to better explain the purpose of the implementation.

Regarding the commit Fix unit tests, there are two kind of fixes in the commit:
the first kind is a logic fix:
eg:
-thing.addPropertyReal(color_test, "test", Permission::ReadWrite);
+thing.addPropertyReal(color_test, "test", Permission::ReadWrite, 1);

the addPropertyReal method was invoked without an identifier assigned to the property. So the test was not well written.

The second kind is a fix in the comment that was previously wrong in respect of the byte array.
eg:
-/* [{0: "test", 4: false}] = 81 A2 00 01 04 F4 /
+/
[{0: 1, 4: false}] = 81 A2 00 01 04 F4 */

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was the content of this function deleted?

By mistake. Now the code is restored.

@TravisBuddy
Copy link

Travis tests have failed

Hey @mirkokurt,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

1st Build

View build log

find . -regextype posix-extended -path './.git' -prune -or -path './src/lib' -prune -or -path './test/external' -prune -or \( -iregex '.*\.((ino)|(h)|(hpp)|(hh)|(hxx)|(h\+\+)|(cpp)|(cc)|(cxx)|(c\+\+)|(cp)|(c)|(ipp)|(ii)|(ixx)|(inl)|(tpp)|(txx)|(tpl))$' -and -type f \) -print0 | xargs -0 -L1 bash -c 'if ! diff "$0" <(astyle --options=${HOME}/astyle/examples_formatter.conf --dry-run < "$0"); then echo "Non-compliant code formatting in $0"; false; fi'
329c329
<   
---
> 
Non-compliant code formatting in ./src/ArduinoCloudThing.cpp
197c197
<       
---
> 
Non-compliant code formatting in ./test/src/test_decode.cpp

2nd Build

View build log

codespell --skip="${TRAVIS_BUILD_DIR}/.git","${TRAVIS_BUILD_DIR}/src/lib","${TRAVIS_BUILD_DIR}/test/external" --ignore-words="${TRAVIS_BUILD_DIR}/extras/codespell-ignore-words-list.txt" "${TRAVIS_BUILD_DIR}"
/home/travis/build/arduino-libraries/ArduinoCloudThing/src/ArduinoCloudThing.cpp:347: retrive  ==> retrieve
TravisBuddy Request Identifier: 9383c9c0-1c15-11ea-ba59-e12deadb3a4c

@TravisBuddy
Copy link

Travis tests have failed

Hey @mirkokurt,
Please read the following log in order to understand the failure reason.
It'll be awesome if you fix what's wrong and commit the changes.

1st Build

View build log

find . -regextype posix-extended -path './.git' -prune -or -path './src/lib' -prune -or -path './test/external' -prune -or \( -iregex '.*\.((ino)|(h)|(hpp)|(hh)|(hxx)|(h\+\+)|(cpp)|(cc)|(cxx)|(c\+\+)|(cp)|(c)|(ipp)|(ii)|(ixx)|(inl)|(tpp)|(txx)|(tpl))$' -and -type f \) -print0 | xargs -0 -L1 bash -c 'if ! diff "$0" <(astyle --options=${HOME}/astyle/examples_formatter.conf --dry-run < "$0"); then echo "Non-compliant code formatting in $0"; false; fi'
197c197
<       
---
> 
Non-compliant code formatting in ./test/src/test_decode.cpp
TravisBuddy Request Identifier: 89c3d680-1c17-11ea-ba59-e12deadb3a4c

Copy link
Contributor

@aentinger aentinger left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 Because of the convoluted commit history which is not really telling a story I will squash/merge this PR.

@aentinger aentinger merged commit ae6a339 into arduino-libraries:master Dec 16, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants