Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_CommandAdvHandler.h
Go to the documentation of this file.
1/*
2 * Author: Crownstone Team
3 * Copyright: Crownstone (https://crownstone.rocks)
4 * Date: Dec 14, 2018
5 * License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed)
6 */
7
8#pragma once
9
10#include "common/cs_Types.h"
12#include "util/cs_Utils.h"
13
14#define CMD_ADV_NUM_SERVICES_16BIT 4 // There are 4 16 bit service UUIDs in a command advertisement.
15
19#define CMD_ADV_CLAIM_TIME_MS 1500
20
24#define CMD_ADV_MAX_CLAIM_COUNT 10
25
26#define CMD_ADC_ENCRYPTED_DATA_SIZE 16
27
32struct __attribute__((__packed__)) command_adv_claim_t {
33 uint8_t deviceToken;
34 uint8_t timeoutCounter = 0;
35 uint8_t encryptedData[CMD_ADC_ENCRYPTED_DATA_SIZE];
36 uint16_t encryptedRC5;
37 uint16_t decryptedRC5;
38};
39
40struct __attribute__((__packed__)) command_adv_header_t {
41 // uint8_t sequence0 : 2;
42 uint16_t protocol : 3;
43 uint16_t sphereId : 8;
44 uint16_t accessLevel : 3;
45
46 // uint8_t sequence1 : 2;
47 // uint8_t reserved : 2;
48 uint16_t deviceToken : 8;
49 // uint16_t payload1 : 4;
50
51 // uint8_t sequence2 : 2;
52 // uint16_t payload2 : 14;
53
54 // uint8_t sequence3 : 2;
55 // uint16_t payload3 : 14;
56};
57
59public:
61 static CommandAdvHandler staticInstance;
62 return staticInstance;
63 }
64 void init();
65 void handleEvent(event_t& event);
66
67private:
70 TYPIFY(CONFIG_SPHERE_ID) _sphereId = 0;
71
73
74 // Return true when command payload is validated, and RC5 payload is decrypted.
76 scanned_device_t* scannedDevice,
77 const command_adv_header_t& header,
78 const cs_data_t& nonce,
79 cs_data_t& encryptedPayload,
80 uint16_t encryptedPayloadRC5[2],
81 uint16_t decryptedPayloadRC5[2]);
82
83 bool decryptRC5Payload(uint16_t encryptedPayload[2], uint16_t decryptedPayload[2]);
84
86 scanned_device_t* scannedDevice, const command_adv_header_t& header, uint16_t decryptedPayload[2]);
87
89
99 uint8_t deviceToken, cs_data_t& encryptedData, uint16_t encryptedRC5, uint16_t& decryptedRC5);
100
101 // Return true when device claimed successfully: when there's a claim spot.
102 bool claim(
103 uint8_t deviceToken,
104 cs_data_t& encryptedData,
105 uint16_t encryptedRC5,
106 uint16_t decryptedRC5,
107 int indexOfDevice);
108
110};
Definition: cs_CommandAdvHandler.h:58
bool handleEncryptedCommandPayload(scanned_device_t *scannedDevice, const command_adv_header_t &header, const cs_data_t &nonce, cs_data_t &encryptedPayload, uint16_t encryptedPayloadRC5[2], uint16_t decryptedPayloadRC5[2])
bool decryptRC5Payload(uint16_t encryptedPayload[2], uint16_t decryptedPayload[2])
EncryptionAccessLevel getRequiredAccessLevel(const AdvCommandTypes type)
void parseAdvertisement(scanned_device_t *scannedDevice)
command_adv_claim_t _claims[CMD_ADV_MAX_CLAIM_COUNT]
Definition: cs_CommandAdvHandler.h:69
void handleDecryptedRC5Payload(scanned_device_t *scannedDevice, const command_adv_header_t &header, uint16_t decryptedPayload[2])
bool claim(uint8_t deviceToken, cs_data_t &encryptedData, uint16_t encryptedRC5, uint16_t decryptedRC5, int indexOfDevice)
int checkSimilarCommand(uint8_t deviceToken, cs_data_t &encryptedData, uint16_t encryptedRC5, uint16_t &decryptedRC5)
Return index of claim with this device token.
static CommandAdvHandler & getInstance()
Definition: cs_CommandAdvHandler.h:60
TYPIFY(CONFIG_SPHERE_ID) _sphereId=0
void handleEvent(event_t &event)
Handle events.
Event listener.
Definition: cs_EventListener.h:17
Author: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: Oct 9,...
Definition: cs_Event.h:26
#define CMD_ADC_ENCRYPTED_DATA_SIZE
Definition: cs_CommandAdvHandler.h:26
#define CMD_ADV_MAX_CLAIM_COUNT
Number of devices that can simultaneously advertise commands.
Definition: cs_CommandAdvHandler.h:24
AdvCommandTypes
Definition: cs_CommandTypes.h:91
EncryptionAccessLevel
Packets (structs) that are used over the air, over uart, or stored in flash.
Definition: cs_Packets.h:36
@ CONFIG_SPHERE_ID
Struct used to prevent double handling of similar command advertisements.
Definition: cs_CommandAdvHandler.h:32
uint16_t decryptedRC5
Definition: cs_CommandAdvHandler.h:37
uint16_t encryptedRC5
Definition: cs_CommandAdvHandler.h:36
uint8_t deviceToken
Definition: cs_CommandAdvHandler.h:33
Definition: cs_CommandAdvHandler.h:40
uint16_t deviceToken
Definition: cs_CommandAdvHandler.h:48
uint16_t protocol
Definition: cs_CommandAdvHandler.h:42
uint16_t sphereId
Definition: cs_CommandAdvHandler.h:43
uint16_t accessLevel
Definition: cs_CommandAdvHandler.h:44
Packets (structs) that are used internally in the firmware, and can be changed freely.
Definition: cs_PacketsInternal.h:27
Scanned device.
Definition: cs_PacketsInternal.h:107