Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_ServiceDataPackets.h
Go to the documentation of this file.
1
8#pragma once
9
11
12#include <cstdint>
13
14#define SERVICE_DATA_VALIDATION 0xFA
15
16union __attribute__((packed)) service_data_hub_state_flags_t {
17 struct __attribute__((packed)) {
18 bool uartAlive : 1; // Whether the UART connection is alive (heartbeats are received).
19 bool uartAliveEncrypted : 1; // Whether the UART connection is alive (encrypted heartbeats are received).
20 bool uartEncryptionRequiredByStone : 1; // Whether the encrypted UART is required by this Crownstone.
21 bool uartEncryptionRequiredByHub : 1; // Whether the encrypted UART is required by the hub.
22 bool hasBeenSetUp : 1; // Whether the hub has been set up.
23 bool hasInternet : 1; // Whether the hub has internet connection.
24 bool hasError : 1; // Whether the hub has some error.
25 } flags;
26 uint8_t asInt;
27};
28
29#define SERVICE_DATA_HUB_DATA_SIZE 9
30
31struct __attribute__((packed)) service_data_hub_state_t {
32 uint8_t id;
36 uint8_t reserved; // Only required if we want to send hub state over mesh.
37 uint8_t validation;
38};
39
40union __attribute__((packed)) service_data_state_flags_t {
41 struct __attribute__((packed)) {
42 bool dimmingReady : 1; // Whether the dimmer is ready to be used.
43 bool markedDimmable : 1; // Whether dimming is configured to be allowed
44 bool error : 1; // Whether the Crownstone has an error.
45 bool switchLocked : 1; // Whether the switch is locked.
46 bool timeSet : 1; // Whether the time is set.
47 bool switchcraft : 1; // Whether switchcraft is enabled.
48 bool tapToToggle : 1; // Whether tap to toggle is enabled.
49 bool behaviourOverridden : 1; // Whether behaviour is overridden.
50 } flags;
51 uint8_t asInt;
52};
53
54union __attribute__((packed)) service_data_state_extra_flags_t {
55 struct __attribute__((packed)) {
56 bool behaviourEnabled : 1; // Whether behaviour is enabled.
57 } flags;
58 uint8_t asInt;
59};
60
64struct __attribute__((packed)) service_data_encrypted_state_t {
65 uint8_t id; // ID of this stone.
66 uint8_t switchState;
71 int32_t energyUsed;
72 uint16_t partialTimestamp; // Current timestamp.
74 uint8_t validation; // Used to check if decryption is successful. Value is always SERVICE_DATA_VALIDATION.
75};
76
80struct __attribute__((packed)) service_data_encrypted_error_t {
81 uint8_t id; // ID of this stone.
82 uint32_t errors;
83 uint32_t timestamp; // Timestamp of first error.
86 uint16_t partialTimestamp; // Current timestamp.
88};
89
93struct __attribute__((packed)) service_data_encrypted_ext_state_t {
94 uint8_t id; // ID of another stone of which this is the state.
95 uint8_t switchState;
100 int32_t energyUsed;
101 uint16_t partialTimestamp; // Timestamp of when the other stone was in this state.
102 int8_t rssi; // RSSI between this stone and the other stone.
103 uint8_t validation; // Used to check if decryption is successful. Value is always SERVICE_DATA_VALIDATION.
104};
105
109struct __attribute__((packed)) service_data_encrypted_ext_error_t {
110 uint8_t id; // ID of another stone of which this is the state.
111 uint32_t errors;
112 uint32_t timestamp; // Timestamp of first error.
115 uint16_t partialTimestamp; // Timestamp of when the other stone was in this state.
116 int8_t rssi; // RSSI between this stone and the other stone.
117 uint8_t validation; // Used to check if decryption is successful. Value is always SERVICE_DATA_VALIDATION.
118};
119
125struct __attribute__((packed)) service_data_encrypted_alternative_state_t {
126 uint8_t id; // ID of this stone.
127 uint8_t switchState;
132 uint16_t partialTimestamp; // Current timestamp.
133 uint8_t reserved2;
134 uint8_t validation; // Used to check if decryption is successful. Value is always SERVICE_DATA_VALIDATION.
135};
136
137union __attribute__((packed)) service_data_microapp_flags_t {
138 struct __attribute__((packed)) {
139 bool timeSet : 1; // Whether the time is set.
140 } flags;
141 uint8_t asInt;
142};
143
147struct __attribute__((packed)) service_data_encrypted_microapp_t {
149 uint16_t appUuid; // Identifier picked by the microapp.
150 uint8_t data[8]; // Data filled in by the microapp.
151 uint8_t id; // ID of this stone.
152 uint16_t partialTimestamp; // Required, so that the data keeps changing.
153 uint8_t validation; // Used to check if decryption is successful. Value is always SERVICE_DATA_VALIDATION.
154};
155
164};
165
169struct __attribute__((packed)) service_data_encrypted_t {
170 uint8_t type; // ServiceDataDataType
171 union {
179 };
180};
181
186 switch (data->type) {
187 case SERVICE_DATA_DATA_TYPE_STATE: return data->state.id;
188 case SERVICE_DATA_DATA_TYPE_ERROR: return data->error.id;
194 }
195 return 0;
196}
197
206constexpr void convertToExternalState(service_data_encrypted_t* data, int8_t rssi) {
208 data->extState.rssi = rssi;
209}
210
219constexpr void convertToExternalError(service_data_encrypted_t* data, int8_t rssi) {
221 data->extError.rssi = rssi;
222}
223
224struct __attribute__((packed)) service_data_setup_state_t {
225 uint8_t switchState;
230 uint32_t errors;
231 uint8_t counter;
232 uint8_t reserved[4];
233};
234
240struct __attribute__((packed)) service_data_setup_t {
241 uint8_t type; // ServiceDataDataType
242 union {
245 };
246};
247
248// The type of service data: this type is not encrypted.
252};
253
260 struct __attribute__((packed)) {
261 uint8_t type; // ServiceDataType
262 uint8_t deviceType; // See cs_DeviceTypes.h
263 union {
266 uint8_t encryptedArray[sizeof(service_data_encrypted_t)];
267 };
269 uint8_t array[sizeof(params)] = {};
270};
#define SERVICE_DATA_HUB_DATA_SIZE
Definition: cs_ServiceDataPackets.h:29
constexpr void convertToExternalError(service_data_encrypted_t *data, int8_t rssi)
Function to convert from service_data_encrypted_error_t to service_data_encrypted_ext_error_t.
Definition: cs_ServiceDataPackets.h:219
constexpr void convertToExternalState(service_data_encrypted_t *data, int8_t rssi)
Function to convert from service_data_encrypted_state_t to service_data_encrypted_ext_state_t.
Definition: cs_ServiceDataPackets.h:206
ServiceDataDataType
Definition: cs_ServiceDataPackets.h:156
@ SERVICE_DATA_DATA_TYPE_MICROAPP
Definition: cs_ServiceDataPackets.h:163
@ SERVICE_DATA_DATA_TYPE_HUB_STATE
Definition: cs_ServiceDataPackets.h:162
@ SERVICE_DATA_DATA_TYPE_EXT_STATE
Definition: cs_ServiceDataPackets.h:159
@ SERVICE_DATA_DATA_TYPE_EXT_ERROR
Definition: cs_ServiceDataPackets.h:160
@ SERVICE_DATA_DATA_TYPE_ERROR
Definition: cs_ServiceDataPackets.h:158
@ SERVICE_DATA_DATA_TYPE_STATE
Definition: cs_ServiceDataPackets.h:157
@ SERVICE_DATA_DATA_TYPE_ALTERNATIVE_STATE
Definition: cs_ServiceDataPackets.h:161
constexpr stone_id_t getStoneId(service_data_encrypted_t *data)
Function to get the stone ID from the encrypted service data.
Definition: cs_ServiceDataPackets.h:185
ServiceDataType
Definition: cs_ServiceDataPackets.h:249
@ SERVICE_DATA_TYPE_SETUP
Definition: cs_ServiceDataPackets.h:250
@ SERVICE_DATA_TYPE_ENCRYPTED
Definition: cs_ServiceDataPackets.h:251
uint8_t stone_id_t
Definition: cs_Typedefs.h:23
State of this crownstone.
Definition: cs_ServiceDataPackets.h:125
uint16_t assetFiltersVersion
Definition: cs_ServiceDataPackets.h:130
uint32_t assetFiltersCrc
Definition: cs_ServiceDataPackets.h:131
uint8_t validation
Definition: cs_ServiceDataPackets.h:134
uint8_t id
Definition: cs_ServiceDataPackets.h:126
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:128
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:132
uint16_t behaviourMasterHash
Definition: cs_ServiceDataPackets.h:129
uint8_t reserved2
Definition: cs_ServiceDataPackets.h:133
uint8_t switchState
Definition: cs_ServiceDataPackets.h:127
In case the crownstone has errors, this will be advertised next to the state.
Definition: cs_ServiceDataPackets.h:80
uint8_t id
Definition: cs_ServiceDataPackets.h:81
int8_t temperature
Definition: cs_ServiceDataPackets.h:85
int16_t powerUsageReal
Definition: cs_ServiceDataPackets.h:87
uint32_t timestamp
Definition: cs_ServiceDataPackets.h:83
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:86
uint32_t errors
Definition: cs_ServiceDataPackets.h:82
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:84
Errors of another crownstone.
Definition: cs_ServiceDataPackets.h:109
int8_t temperature
Definition: cs_ServiceDataPackets.h:114
uint32_t errors
Definition: cs_ServiceDataPackets.h:111
uint32_t timestamp
Definition: cs_ServiceDataPackets.h:112
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:115
uint8_t validation
Definition: cs_ServiceDataPackets.h:117
int8_t rssi
Definition: cs_ServiceDataPackets.h:116
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:113
uint8_t id
Definition: cs_ServiceDataPackets.h:110
State of another crownstone.
Definition: cs_ServiceDataPackets.h:93
uint8_t switchState
Definition: cs_ServiceDataPackets.h:95
uint8_t validation
Definition: cs_ServiceDataPackets.h:103
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:101
int32_t energyUsed
Definition: cs_ServiceDataPackets.h:100
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:96
int16_t powerUsageReal
Definition: cs_ServiceDataPackets.h:99
uint8_t id
Definition: cs_ServiceDataPackets.h:94
int8_t powerFactor
Definition: cs_ServiceDataPackets.h:98
int8_t rssi
Definition: cs_ServiceDataPackets.h:102
int8_t temperature
Definition: cs_ServiceDataPackets.h:97
Microapp data that will be encrypted.
Definition: cs_ServiceDataPackets.h:147
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:152
service_data_microapp_flags_t flags
Definition: cs_ServiceDataPackets.h:148
uint16_t appUuid
Definition: cs_ServiceDataPackets.h:149
uint8_t validation
Definition: cs_ServiceDataPackets.h:153
uint8_t id
Definition: cs_ServiceDataPackets.h:151
State of this crownstone.
Definition: cs_ServiceDataPackets.h:64
int8_t powerFactor
Definition: cs_ServiceDataPackets.h:69
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:72
int8_t temperature
Definition: cs_ServiceDataPackets.h:68
uint8_t id
Definition: cs_ServiceDataPackets.h:65
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:67
int16_t powerUsageReal
Definition: cs_ServiceDataPackets.h:70
service_data_state_extra_flags_t extraFlags
Definition: cs_ServiceDataPackets.h:73
uint8_t validation
Definition: cs_ServiceDataPackets.h:74
int32_t energyUsed
Definition: cs_ServiceDataPackets.h:71
uint8_t switchState
Definition: cs_ServiceDataPackets.h:66
This data is encrypted.
Definition: cs_ServiceDataPackets.h:169
uint8_t type
Definition: cs_ServiceDataPackets.h:170
service_data_encrypted_microapp_t microapp
Definition: cs_ServiceDataPackets.h:178
service_data_encrypted_error_t error
Definition: cs_ServiceDataPackets.h:173
service_data_encrypted_ext_state_t extState
Definition: cs_ServiceDataPackets.h:174
service_data_hub_state_t hubState
Definition: cs_ServiceDataPackets.h:177
service_data_encrypted_state_t state
Definition: cs_ServiceDataPackets.h:172
service_data_encrypted_alternative_state_t altState
Definition: cs_ServiceDataPackets.h:176
service_data_encrypted_ext_error_t extError
Definition: cs_ServiceDataPackets.h:175
Definition: cs_ServiceDataPackets.h:31
service_data_hub_state_flags_t flags
Definition: cs_ServiceDataPackets.h:33
uint16_t partialTimestamp
Definition: cs_ServiceDataPackets.h:35
uint8_t id
Definition: cs_ServiceDataPackets.h:32
uint8_t validation
Definition: cs_ServiceDataPackets.h:37
uint8_t reserved
Definition: cs_ServiceDataPackets.h:36
Definition: cs_ServiceDataPackets.h:224
uint8_t switchState
Definition: cs_ServiceDataPackets.h:225
service_data_state_flags_t flags
Definition: cs_ServiceDataPackets.h:226
uint8_t counter
Definition: cs_ServiceDataPackets.h:231
int8_t temperature
Definition: cs_ServiceDataPackets.h:227
int8_t powerFactor
Definition: cs_ServiceDataPackets.h:228
uint32_t errors
Definition: cs_ServiceDataPackets.h:230
int16_t powerUsageReal
Definition: cs_ServiceDataPackets.h:229
Setup data.
Definition: cs_ServiceDataPackets.h:240
service_data_setup_state_t state
Definition: cs_ServiceDataPackets.h:243
uint8_t type
Definition: cs_ServiceDataPackets.h:241
service_data_hub_state_t hubState
Definition: cs_ServiceDataPackets.h:244
Definition: cs_ServiceDataPackets.h:16
bool hasError
Definition: cs_ServiceDataPackets.h:24
bool hasBeenSetUp
Definition: cs_ServiceDataPackets.h:22
uint8_t asInt
Definition: cs_ServiceDataPackets.h:26
bool uartAliveEncrypted
Definition: cs_ServiceDataPackets.h:19
bool uartEncryptionRequiredByHub
Definition: cs_ServiceDataPackets.h:21
bool uartAlive
Definition: cs_ServiceDataPackets.h:18
bool hasInternet
Definition: cs_ServiceDataPackets.h:23
bool uartEncryptionRequiredByStone
Definition: cs_ServiceDataPackets.h:20
Definition: cs_ServiceDataPackets.h:137
uint8_t asInt
Definition: cs_ServiceDataPackets.h:141
bool timeSet
Definition: cs_ServiceDataPackets.h:139
Definition: cs_ServiceDataPackets.h:54
uint8_t asInt
Definition: cs_ServiceDataPackets.h:58
bool behaviourEnabled
Definition: cs_ServiceDataPackets.h:56
Definition: cs_ServiceDataPackets.h:40
bool switchLocked
Definition: cs_ServiceDataPackets.h:45
uint8_t asInt
Definition: cs_ServiceDataPackets.h:51
bool tapToToggle
Definition: cs_ServiceDataPackets.h:48
bool error
Definition: cs_ServiceDataPackets.h:44
bool dimmingReady
Definition: cs_ServiceDataPackets.h:42
bool markedDimmable
Definition: cs_ServiceDataPackets.h:43
bool switchcraft
Definition: cs_ServiceDataPackets.h:47
bool behaviourOverridden
Definition: cs_ServiceDataPackets.h:49
bool timeSet
Definition: cs_ServiceDataPackets.h:46
Service data.
Definition: cs_ServiceDataPackets.h:259
struct service_data_t::@29 params
service_data_encrypted_t encrypted
Definition: cs_ServiceDataPackets.h:264
uint8_t array[sizeof(params)]
Definition: cs_ServiceDataPackets.h:269
service_data_setup_t setup
Definition: cs_ServiceDataPackets.h:265
uint8_t deviceType
Definition: cs_ServiceDataPackets.h:262
uint8_t type
Definition: cs_ServiceDataPackets.h:261