Skip to content

Commit edd5b65

Browse files
fabik111andreagilardoni
authored andcommitted
New GetBLEMacAddress response message (arduino-libraries#27)
1 parent 5204ba7 commit edd5b65

File tree

6 files changed

+63
-1
lines changed

6 files changed

+63
-1
lines changed

extras/test/src/test_command_encode.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,4 +499,32 @@ SCENARIO("Test the encoding of command messages") {
499499
}
500500
}
501501

502+
WHEN("Encode a message with provisioning ble mac Address ")
503+
{
504+
ProvisioningJWTMessage command;
505+
command.c.id = CommandId::ProvisioningBLEMacAddress;
506+
memset(command.params.jwt, 0xAF, 6);
507+
uint8_t buffer[512];
508+
size_t bytes_encoded = sizeof(buffer);
509+
510+
CBORMessageEncoder encoder;
511+
Encoder::Status err = encoder.encode((Message*)&command, buffer, bytes_encoded);
512+
513+
uint8_t expected_result[] = {
514+
0xda, 0x00, 0x01, 0x20, 0x13, 0x81, 0x46,
515+
0xAF, 0xAF, 0xAF, 0xAF, 0xAF, 0xAF
516+
};
517+
518+
// Test the encoding is
519+
//DA 00012013 # tag(73747)
520+
//81 # array(1)
521+
// 46 # bytes(6)
522+
// AFAFAFAFAFA
523+
THEN("The encoding is successful") {
524+
REQUIRE(err == Encoder::Status::Complete);
525+
REQUIRE(bytes_encoded == sizeof(expected_result));
526+
REQUIRE(memcmp(buffer, expected_result, sizeof(expected_result)) == 0);
527+
}
528+
}
529+
502530
}

src/cbor/CBOR.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ CommandId toCommandId(CBORCommandTag tag) {
5050
return CommandId::ProvisioningUniqueHardwareId;
5151
case CBORCommandTag::CBORProvisioningJWT:
5252
return CommandId::ProvisioningJWT;
53+
case CBORCommandTag::CBORProvisioningBLEMacAddress:
54+
return CommandId::ProvisioningBLEMacAddress;
5355
case CBORCommandTag::CBORProvisioningTimestamp:
5456
return CommandId::ProvisioningTimestamp;
5557
case CBORCommandTag::CBORProvisioningCommands:
@@ -105,6 +107,8 @@ CBORCommandTag toCBORCommandTag(CommandId id) {
105107
return CBORCommandTag::CBORProvisioningUniqueHardwareId;
106108
case CommandId::ProvisioningJWT:
107109
return CBORCommandTag::CBORProvisioningJWT;
110+
case CommandId::ProvisioningBLEMacAddress:
111+
return CBORCommandTag::CBORProvisioningBLEMacAddress;
108112
case CommandId::ProvisioningTimestamp:
109113
return CBORCommandTag::CBORProvisioningTimestamp;
110114
case CommandId::ProvisioningCommands:

src/cbor/CBOR.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ enum CBORCommandTag: uint64_t {
4040
CBORProvisioningListWifiNetworks = 0x012001,
4141
CBORProvisioningUniqueHardwareId = 0x012010,
4242
CBORProvisioningJWT = 0x012011,
43+
CBORProvisioningBLEMacAddress = 0x012013,
4344
CBORProvisioningTimestamp = 0x012002,
4445
CBORProvisioningCommands = 0x012003,
4546
CBORProvisioningWifiConfig = 0x012004,

src/cbor/MessageEncoder.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ CBORMessageEncoder::EncoderState CBORMessageEncoder::handle_EncodeArray(CborEnco
109109
case CommandId::ProvisioningJWT:
110110
array_size = 1;
111111
break;
112+
case CommandId::ProvisioningBLEMacAddress:
113+
array_size = 1;
114+
break;
112115
default:
113116
return EncoderState::MessageNotSupported;
114117
}
@@ -154,6 +157,9 @@ CBORMessageEncoder::EncoderState CBORMessageEncoder::handle_EncodeParam(CborEnco
154157
case CommandId::ProvisioningJWT:
155158
error = CBORMessageEncoder::encodeProvisioningJWT(array_encoder, message);
156159
break;
160+
case CommandId::ProvisioningBLEMacAddress:
161+
error = CBORMessageEncoder::encodeProvisioningBLEMacAddress(array_encoder, message);
162+
break;
157163
default:
158164
return EncoderState::MessageNotSupported;
159165
}
@@ -230,4 +236,17 @@ CborError CBORMessageEncoder::encodeProvisioningJWT(CborEncoder * array_encoder,
230236
ProvisioningJWTMessage * provisioningJWT = (ProvisioningJWTMessage *) message;
231237
CHECK_CBOR(cbor_encode_byte_string(array_encoder, (uint8_t *) provisioningJWT->params.jwt, PROVISIONING_JWT_SIZE));
232238
return CborNoError;
233-
}
239+
}
240+
241+
CborError CBORMessageEncoder::encodeProvisioningBLEMacAddress(CborEncoder *array_encoder, Message *message)
242+
{
243+
ProvisioningBLEMacAddressMessage *provisioningBLEMacAddress = (ProvisioningBLEMacAddressMessage *)message;
244+
uint8_t size = 0;
245+
uint8_t emptyMac[] = {0, 0, 0, 0, 0, 0};
246+
if(memcmp(provisioningBLEMacAddress->params.macAddress, emptyMac, BLE_MAC_ADDRESS_SIZE) != 0)
247+
{
248+
size = BLE_MAC_ADDRESS_SIZE;
249+
}
250+
CHECK_CBOR(cbor_encode_byte_string(array_encoder, provisioningBLEMacAddress->params.macAddress, size));
251+
return CborNoError;
252+
}

src/cbor/MessageEncoder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class CBORMessageEncoder: public Encoder
6666
CborError encodeProvisioningListWifiNetworks(CborEncoder * array_encoder, Message * message);
6767
CborError encodeProvisioningUniqueHardwareId(CborEncoder * array_encoder, Message * message);
6868
CborError encodeProvisioningJWT(CborEncoder * array_encoder, Message * message);
69+
CborError encodeProvisioningBLEMacAddress(CborEncoder * array_encoder, Message * message);
6970
};
7071

7172
#endif /* ARDUINO_CBOR_MESSAGE_ENCODER_H_ */

src/message/Commands.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#define MAX_LIB_VERSION_SIZE 10
2929
#define UHWID_SIZE 32
3030
#define PROVISIONING_JWT_SIZE 268 // Max length of jwt is 268
31+
#define BLE_MAC_ADDRESS_SIZE 6
3132
#define WIFI_SSID_SIZE 33 // Max length of ssid is 32 + \0
3233
#define WIFI_PWD_SIZE 64 // Max length of password is 63 + \0
3334
#define LORA_APPEUI_SIZE 17 // appeui is 8 octets * 2 (hex format) + \0
@@ -81,6 +82,7 @@ enum CommandId: uint32_t {
8182
ProvisioningStatus,
8283
ProvisioningListWifiNetworks,
8384
ProvisioningUniqueHardwareId,
85+
ProvisioningBLEMacAddress,
8486
ProvisioningJWT,
8587
ProvisioningTimestamp,
8688
ProvisioningCommands,
@@ -212,6 +214,13 @@ struct ProvisioningJWTMessage {
212214
} params;
213215
};
214216

217+
struct ProvisioningBLEMacAddressMessage {
218+
Command c;
219+
struct {
220+
uint8_t macAddress[BLE_MAC_ADDRESS_SIZE];
221+
} params;
222+
};
223+
215224
struct ProvisioningTimestampMessage {
216225
Command c;
217226
struct {

0 commit comments

Comments
 (0)