Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
cs_MeshModelPackets.h
Go to the documentation of this file.
1
8#pragma once
9
10#include <mesh/cs_MeshDefines.h>
15
26};
27
41};
42
50static constexpr uint8_t MAX_MESH_MSG_SIZE = 3 * 12 - 4 - 3;
51static constexpr uint8_t MAX_MESH_MSG_NON_SEGMENTED_SIZE = 15 - 4 - 3;
52
57static constexpr uint8_t MESH_HEADER_SIZE = 1;
58
60
62 CS_MESH_MODEL_TYPE_TEST = 0, // Payload: cs_mesh_model_msg_test_t
63 CS_MESH_MODEL_TYPE_ACK = 1, // Payload: none
64 CS_MESH_MODEL_TYPE_CMD_TIME = 3, // Payload: cs_mesh_model_msg_time_t
65 CS_MESH_MODEL_TYPE_CMD_NOOP = 4, // Payload: none
66 CS_MESH_MODEL_TYPE_CMD_MULTI_SWITCH = 5, // Payload: cs_mesh_model_msg_multi_switch_item_t
67 // CS_MESH_MODEL_TYPE_CMD_KEEP_ALIVE_STATE = 6, // Payload: keep_alive_state_item_t
68 // CS_MESH_MODEL_TYPE_CMD_KEEP_ALIVE = 7, // Payload: none
69 CS_MESH_MODEL_TYPE_STATE_0 = 8, // Payload: cs_mesh_model_msg_state_0_t
70 CS_MESH_MODEL_TYPE_STATE_1 = 9, // Payload: cs_mesh_model_msg_state_1_t
71 CS_MESH_MODEL_TYPE_PROFILE_LOCATION = 10, // Payload: cs_mesh_model_msg_profile_location_t
72 CS_MESH_MODEL_TYPE_SET_BEHAVIOUR_SETTINGS = 11, // Payload: behaviour_settings_t
73 CS_MESH_MODEL_TYPE_TRACKED_DEVICE_REGISTER = 12, // Payload: cs_mesh_model_msg_device_register_t
74 CS_MESH_MODEL_TYPE_TRACKED_DEVICE_TOKEN = 13, // Payload: cs_mesh_model_msg_device_token_t
75 CS_MESH_MODEL_TYPE_SYNC_REQUEST = 14, // Payload: cs_mesh_model_msg_sync_request_t
76 // CS_MESH_MODEL_TYPE_SYNC_RESPONSE = 15, // Payload: cs_mesh_model_msg_sync_response_t
77 CS_MESH_MODEL_TYPE_TRACKED_DEVICE_LIST_SIZE = 16, // Payload: cs_mesh_model_msg_device_list_size_t
78 CS_MESH_MODEL_TYPE_STATE_SET = 17, // Payload: cs_mesh_model_msg_state_header_ext_t + payload
79 CS_MESH_MODEL_TYPE_RESULT = 18, // Payload: cs_mesh_model_msg_result_header_t + payload
80 CS_MESH_MODEL_TYPE_SET_IBEACON_CONFIG_ID = 19, // Payload: set_ibeacon_config_id_packet_t
81 CS_MESH_MODEL_TYPE_TRACKED_DEVICE_HEARTBEAT = 20, // Payload: cs_mesh_model_msg_device_heartbeat_t
83 21, // Payload: rssi_ping_message_t Only used in MeshTopologyResearch
84 CS_MESH_MODEL_TYPE_TIME_SYNC = 22, // Payload: cs_mesh_model_msg_time_sync_t
85 // 23 removed
87 24, // Payload: rssi_data_message_t Only used in MeshTopologyResearch
88 CS_MESH_MODEL_TYPE_STONE_MAC = 25, // Payload: cs_mesh_model_msg_stone_mac_t
89 CS_MESH_MODEL_TYPE_ASSET_FILTER_VERSION = 26, // Payload: cs_mesh_model_msg_asset_filter_version_t
90 CS_MESH_MODEL_TYPE_ASSET_INFO_MAC = 27, // Payload: cs_mesh_model_msg_asset_report_mac_t
91 CS_MESH_MODEL_TYPE_NEIGHBOUR_RSSI = 28, // Payload: cs_mesh_model_msg_neighbour_rssi_t
92 CS_MESH_MODEL_TYPE_CTRL_CMD = 29, // Payload: cs_mesh_model_msg_ctrl_cmd_header_ext_t + payload
93 CS_MESH_MODEL_TYPE_ASSET_INFO_ID = 30, // Payload: cs_mesh_model_msg_asset_report_id_t
94
95 CS_MESH_MODEL_TYPE_MICROAPP = 200, // Payload: anything.
97};
98
99struct __attribute__((__packed__)) cs_mesh_model_msg_test_t {
100 uint32_t counter;
101#if MESH_MODEL_TEST_MSG == 2
102 // uint8_t dummy[3]; // non segmented
103 // uint8_t dummy[12]; // 2 segments
104 uint8_t dummy[24]; // 3 segments
105#else
106 uint8_t dummy[3]; // non segmented
107#endif
108};
109
110struct __attribute__((__packed__)) cs_mesh_model_msg_time_t {
111 uint32_t timestamp;
112};
113
114struct __attribute__((__packed__)) cs_mesh_model_msg_profile_location_t {
115 uint8_t profile;
116 uint8_t location;
117};
118
119struct __attribute__((__packed__)) cs_mesh_model_msg_state_0_t {
120 uint8_t switchState;
121 uint8_t flags;
125};
126
127struct __attribute__((__packed__)) cs_mesh_model_msg_state_1_t {
129 int32_t energyUsed;
131};
132
133struct __attribute__((__packed__)) cs_mesh_model_msg_multi_switch_item_t {
135 uint8_t switchCmd;
136 uint16_t delay = 0; // Deprecated, set to 0 or backwards compatibility.
138};
139
140struct __attribute__((__packed__)) cs_mesh_model_msg_device_register_t {
142 uint8_t locationId;
143 uint8_t profileId;
145 uint8_t flags;
146 uint8_t accessLevel;
147};
148
149struct __attribute__((__packed__)) cs_mesh_model_msg_device_token_t {
151 uint8_t deviceToken[TRACKED_DEVICE_TOKEN_SIZE];
152 uint16_t ttlMinutes;
153};
154
155struct __attribute__((__packed__)) cs_mesh_model_msg_device_heartbeat_t {
157 uint8_t locationId;
158 uint8_t ttlMinutes;
159};
160
161struct __attribute__((__packed__)) cs_mesh_model_msg_device_list_size_t {
162 uint8_t listSize;
163};
164
165struct __attribute__((__packed__)) cs_mesh_model_msg_sync_request_t {
172 union __attribute__((__packed__)) {
173 struct __attribute__((packed)) {
174 bool time : 1;
177 } bits;
178 uint32_t bitmask;
179 };
180};
181
182struct __attribute__((__packed__)) cs_mesh_model_msg_state_header_t {
183 uint8_t type; // Shortened version of CS_TYPE
184 uint8_t id : 6; // Shortened version of state id.
185 uint8_t persistenceMode : 2; // Shortened version of peristenceMode.
186};
187
188struct __attribute__((__packed__)) cs_mesh_model_msg_state_header_ext_t {
190 uint8_t accessLevel : 3; // Shortened version of access level.
191 uint8_t sourceId : 5; // Shortened version of source.
192};
193
194struct __attribute__((__packed__)) cs_mesh_model_msg_ctrl_cmd_header_t {
195 uint16_t cmdType; // CommandHandlerTypes
196};
197
198struct __attribute__((__packed__)) cs_mesh_model_msg_ctrl_cmd_header_ext_t {
200 uint8_t accessLevel : 3; // Shortened version of access level.
201 uint8_t sourceId : 5; // Shortened version of source.
202};
203
204struct __attribute__((__packed__)) cs_mesh_model_msg_result_header_t {
205 uint8_t msgType; // Mesh msg type of which this is the result.
206 uint8_t retCode;
207};
208
212struct __attribute__((__packed__)) cs_mesh_model_msg_time_sync_t {
213 uint32_t posix_s; // Seconds since epoch.
214 uint16_t posix_ms : 10; // Milliseconds passed since posix_s.
215 uint8_t version : 6; // Synchronization version,
216 bool overrideRoot : 1; // Whether this time overrides the root time.
217 uint8_t reserved : 7; // @arend maybe use these bits to increase version size.
218};
219
223struct __attribute__((__packed__)) mac_address_t {
224 uint8_t data[MAC_ADDRESS_LEN];
225
226 void copyFrom(const void* macAddress) { memcpy(data, macAddress, MAC_ADDRESS_LEN); }
227
228 bool operator==(const mac_address_t& other) { return memcmp(this, &other, MAC_ADDRESS_LEN) == 0; }
229};
230
231struct __attribute__((__packed__)) cs_mesh_model_msg_asset_report_mac_t {
234};
235
236struct __attribute__((__packed__)) cs_mesh_model_msg_asset_report_id_t {
239 int8_t rssi; // TODO: why not the full rssi here, and put the channel in the reserved bytes?
240 union {
241 struct {
242 uint16_t channel : 2;
243 uint16_t reserved : 14; // Must be 0 for now.
244 };
245 uint16_t asInt = 0;
246 };
247};
248
253struct __attribute__((__packed__)) rssi_ping_message_t {};
254
260struct __attribute__((__packed__)) rssi_data_t {
272 uint16_t variance : 3;
273
277 uint16_t rssi : 7;
278
283 uint16_t sampleCount : 6;
284};
285
286struct __attribute__((__packed__)) rssi_data_message_t {
291};
292
293struct __attribute__((__packed__)) cs_mesh_model_msg_neighbour_rssi_t {
294 uint8_t type = 0; // Type of report, always 0 for now.
300 uint8_t counter; // Message counter, to identify package loss at the receiving node.
301
302 // Possible future type:
303 // uint8_t type : 4;
304 // uint8_t rssiChannel37 : 6;
305 // uint8_t rssiChannel38 : 6;
306 // uint8_t rssiChannel39 : 6;
307 // uint8_t avgRssiChannel37 : 6;
308 // uint8_t avgRssiChannel38 : 6;
309 // uint8_t avgRssiChannel39 : 6;
310 // stone_id_t neighbourId;
311 // uint8_t lastSeenSecondsAgo;
312};
313
314struct __attribute__((__packed__)) cs_mesh_model_msg_stone_mac_t {
315 uint8_t type; // 0 = request, 1 = reply.
316 uint8_t connectionProtocol = CS_CONNECTION_PROTOCOL_VERSION;
317 uint8_t reserved[5]; // Allows for larger payloads for future types. Set to 0 for now.
318};
319
320struct __attribute__((__packed__)) cs_mesh_model_msg_asset_filter_version_t {
323 uint32_t masterCrc;
324};
uint8_t asset_filter_cmd_protocol_t
Definition: cs_AssetFilterPackets.h:15
#define CS_CONNECTION_PROTOCOL_VERSION
Definition: cs_Config.h:23
static constexpr uint8_t MAX_MESH_MSG_SIZE
Max message size.
Definition: cs_MeshModelPackets.h:50
static constexpr uint8_t MAX_MESH_MSG_PAYLOAD_SIZE
Definition: cs_MeshModelPackets.h:59
cs_mesh_model_msg_type_t
Definition: cs_MeshModelPackets.h:61
@ CS_MESH_MODEL_TYPE_CMD_NOOP
Definition: cs_MeshModelPackets.h:65
@ CS_MESH_MODEL_TYPE_CTRL_CMD
Definition: cs_MeshModelPackets.h:92
@ CS_MESH_MODEL_TYPE_ASSET_INFO_ID
Definition: cs_MeshModelPackets.h:93
@ CS_MESH_MODEL_TYPE_UNKNOWN
Definition: cs_MeshModelPackets.h:96
@ CS_MESH_MODEL_TYPE_RESULT
Definition: cs_MeshModelPackets.h:79
@ CS_MESH_MODEL_TYPE_ASSET_FILTER_VERSION
Definition: cs_MeshModelPackets.h:89
@ CS_MESH_MODEL_TYPE_SYNC_REQUEST
Definition: cs_MeshModelPackets.h:75
@ CS_MESH_MODEL_TYPE_TRACKED_DEVICE_HEARTBEAT
Definition: cs_MeshModelPackets.h:81
@ CS_MESH_MODEL_TYPE_TEST
Definition: cs_MeshModelPackets.h:62
@ CS_MESH_MODEL_TYPE_STATE_SET
Definition: cs_MeshModelPackets.h:78
@ CS_MESH_MODEL_TYPE_MICROAPP
Definition: cs_MeshModelPackets.h:95
@ CS_MESH_MODEL_TYPE_TIME_SYNC
Definition: cs_MeshModelPackets.h:84
@ CS_MESH_MODEL_TYPE_ASSET_INFO_MAC
Definition: cs_MeshModelPackets.h:90
@ CS_MESH_MODEL_TYPE_TRACKED_DEVICE_REGISTER
Definition: cs_MeshModelPackets.h:73
@ CS_MESH_MODEL_TYPE_ACK
Definition: cs_MeshModelPackets.h:63
@ CS_MESH_MODEL_TYPE_STATE_0
Definition: cs_MeshModelPackets.h:69
@ CS_MESH_MODEL_TYPE_STATE_1
Definition: cs_MeshModelPackets.h:70
@ CS_MESH_MODEL_TYPE_NEIGHBOUR_RSSI
Definition: cs_MeshModelPackets.h:91
@ CS_MESH_MODEL_TYPE_PROFILE_LOCATION
Definition: cs_MeshModelPackets.h:71
@ CS_MESH_MODEL_TYPE_CMD_MULTI_SWITCH
Definition: cs_MeshModelPackets.h:66
@ CS_MESH_MODEL_TYPE_CMD_TIME
Definition: cs_MeshModelPackets.h:64
@ CS_MESH_MODEL_TYPE_SET_IBEACON_CONFIG_ID
Definition: cs_MeshModelPackets.h:80
@ CS_MESH_MODEL_TYPE_STONE_MAC
Definition: cs_MeshModelPackets.h:88
@ CS_MESH_MODEL_TYPE_TRACKED_DEVICE_LIST_SIZE
Definition: cs_MeshModelPackets.h:77
@ CS_MESH_MODEL_TYPE_RSSI_DATA
Definition: cs_MeshModelPackets.h:86
@ CS_MESH_MODEL_TYPE_RSSI_PING
Definition: cs_MeshModelPackets.h:82
@ CS_MESH_MODEL_TYPE_TRACKED_DEVICE_TOKEN
Definition: cs_MeshModelPackets.h:74
@ CS_MESH_MODEL_TYPE_SET_BEHAVIOUR_SETTINGS
Definition: cs_MeshModelPackets.h:72
static constexpr uint8_t MESH_HEADER_SIZE
Size of the header of each mesh model message.
Definition: cs_MeshModelPackets.h:57
static constexpr uint8_t MAX_MESH_MSG_NON_SEGMENTED_SIZE
Definition: cs_MeshModelPackets.h:51
cs_mesh_model_opcode_t
Message opcodes.
Definition: cs_MeshModelPackets.h:34
@ CS_MESH_MODEL_OPCODE_MULTICAST_NEIGHBOURS
Definition: cs_MeshModelPackets.h:40
@ CS_MESH_MODEL_OPCODE_UNICAST_REPLY
Definition: cs_MeshModelPackets.h:37
@ CS_MESH_MODEL_OPCODE_MULTICAST_RELIABLE_MSG
Definition: cs_MeshModelPackets.h:38
@ CS_MESH_MODEL_OPCODE_MSG
Definition: cs_MeshModelPackets.h:35
@ CS_MESH_MODEL_OPCODE_UNICAST_RELIABLE_MSG
Definition: cs_MeshModelPackets.h:36
@ CS_MESH_MODEL_OPCODE_MULTICAST_REPLY
Definition: cs_MeshModelPackets.h:39
cs_mesh_model_id_t
Author: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: 7 May....
Definition: cs_MeshModelPackets.h:21
@ CS_MESH_MODEL_ID_NEIGHBOURS
Definition: cs_MeshModelPackets.h:25
@ CS_MESH_MODEL_ID_MULTICAST_ACKED
Definition: cs_MeshModelPackets.h:23
@ CS_MESH_MODEL_ID_UNICAST
Definition: cs_MeshModelPackets.h:24
@ CS_MESH_MODEL_ID_MULTICAST
Definition: cs_MeshModelPackets.h:22
uint16_t device_id_t
Definition: cs_Typedefs.h:24
uint8_t stone_id_t
Definition: cs_Typedefs.h:23
#define TRACKED_DEVICE_TOKEN_SIZE
Definition: cs_Typedefs.h:38
static const uint8_t MAC_ADDRESS_LEN
Length of a MAC address.
Definition: cs_Typedefs.h:43
Definition: cs_AssetFilterPackets.h:93
Struct that tells where a command originated from.
Definition: cs_CmdSource.h:54
Definition: cs_MeshModelPackets.h:320
uint16_t masterVersion
Definition: cs_MeshModelPackets.h:322
uint32_t masterCrc
Definition: cs_MeshModelPackets.h:323
asset_filter_cmd_protocol_t protocol
Definition: cs_MeshModelPackets.h:321
Definition: cs_MeshModelPackets.h:236
int8_t rssi
Definition: cs_MeshModelPackets.h:239
uint8_t filterBitmask
Definition: cs_MeshModelPackets.h:238
asset_id_t id
Definition: cs_MeshModelPackets.h:237
uint16_t channel
Definition: cs_MeshModelPackets.h:242
uint16_t reserved
Definition: cs_MeshModelPackets.h:243
Definition: cs_MeshModelPackets.h:231
rssi_and_channel_t rssiData
Definition: cs_MeshModelPackets.h:233
mac_address_t mac
Definition: cs_MeshModelPackets.h:232
Definition: cs_MeshModelPackets.h:198
uint8_t sourceId
Definition: cs_MeshModelPackets.h:201
cs_mesh_model_msg_ctrl_cmd_header_t header
Definition: cs_MeshModelPackets.h:199
uint8_t accessLevel
Definition: cs_MeshModelPackets.h:200
Definition: cs_MeshModelPackets.h:194
uint16_t cmdType
Definition: cs_MeshModelPackets.h:195
Definition: cs_MeshModelPackets.h:155
device_id_t deviceId
Definition: cs_MeshModelPackets.h:156
uint8_t ttlMinutes
Definition: cs_MeshModelPackets.h:158
uint8_t locationId
Definition: cs_MeshModelPackets.h:157
Definition: cs_MeshModelPackets.h:161
uint8_t listSize
Definition: cs_MeshModelPackets.h:162
Definition: cs_MeshModelPackets.h:140
uint8_t accessLevel
Definition: cs_MeshModelPackets.h:146
uint8_t profileId
Definition: cs_MeshModelPackets.h:143
uint8_t locationId
Definition: cs_MeshModelPackets.h:142
int8_t rssiOffset
Definition: cs_MeshModelPackets.h:144
device_id_t deviceId
Definition: cs_MeshModelPackets.h:141
uint8_t flags
Definition: cs_MeshModelPackets.h:145
Definition: cs_MeshModelPackets.h:149
uint16_t ttlMinutes
Definition: cs_MeshModelPackets.h:152
device_id_t deviceId
Definition: cs_MeshModelPackets.h:150
Definition: cs_MeshModelPackets.h:133
cmd_source_with_counter_t source
Definition: cs_MeshModelPackets.h:137
stone_id_t id
Definition: cs_MeshModelPackets.h:134
uint8_t switchCmd
Definition: cs_MeshModelPackets.h:135
Definition: cs_MeshModelPackets.h:293
int8_t rssiChannel38
Definition: cs_MeshModelPackets.h:297
uint8_t lastSeenSecondsAgo
Definition: cs_MeshModelPackets.h:299
uint8_t counter
Definition: cs_MeshModelPackets.h:300
int8_t rssiChannel39
Definition: cs_MeshModelPackets.h:298
stone_id_t neighbourId
Definition: cs_MeshModelPackets.h:295
int8_t rssiChannel37
Definition: cs_MeshModelPackets.h:296
Definition: cs_MeshModelPackets.h:114
uint8_t location
Definition: cs_MeshModelPackets.h:116
uint8_t profile
Definition: cs_MeshModelPackets.h:115
Definition: cs_MeshModelPackets.h:204
uint8_t msgType
Definition: cs_MeshModelPackets.h:205
uint8_t retCode
Definition: cs_MeshModelPackets.h:206
Definition: cs_MeshModelPackets.h:119
uint16_t partialTimestamp
Definition: cs_MeshModelPackets.h:124
int16_t powerUsageReal
Definition: cs_MeshModelPackets.h:123
uint8_t switchState
Definition: cs_MeshModelPackets.h:120
int8_t powerFactor
Definition: cs_MeshModelPackets.h:122
uint8_t flags
Definition: cs_MeshModelPackets.h:121
Definition: cs_MeshModelPackets.h:127
uint16_t partialTimestamp
Definition: cs_MeshModelPackets.h:130
int8_t temperature
Definition: cs_MeshModelPackets.h:128
int32_t energyUsed
Definition: cs_MeshModelPackets.h:129
Definition: cs_MeshModelPackets.h:188
uint8_t accessLevel
Definition: cs_MeshModelPackets.h:190
cs_mesh_model_msg_state_header_t header
Definition: cs_MeshModelPackets.h:189
uint8_t sourceId
Definition: cs_MeshModelPackets.h:191
Definition: cs_MeshModelPackets.h:182
uint8_t id
Definition: cs_MeshModelPackets.h:184
uint8_t type
Definition: cs_MeshModelPackets.h:183
uint8_t persistenceMode
Definition: cs_MeshModelPackets.h:185
Definition: cs_MeshModelPackets.h:314
uint8_t type
Definition: cs_MeshModelPackets.h:315
Definition: cs_MeshModelPackets.h:165
bool trackedDevices
Definition: cs_MeshModelPackets.h:175
uint32_t bitmask
Definition: cs_MeshModelPackets.h:178
bool time
Definition: cs_MeshModelPackets.h:174
stone_id_t id
ID of crownstone that requests the data.
Definition: cs_MeshModelPackets.h:171
bool behaviourSettings
Definition: cs_MeshModelPackets.h:176
Definition: cs_MeshModelPackets.h:99
uint32_t counter
Definition: cs_MeshModelPackets.h:100
Packed version of time_sync_message_t.
Definition: cs_MeshModelPackets.h:212
uint8_t reserved
Definition: cs_MeshModelPackets.h:217
uint16_t posix_ms
Definition: cs_MeshModelPackets.h:214
bool overrideRoot
Definition: cs_MeshModelPackets.h:216
uint32_t posix_s
Definition: cs_MeshModelPackets.h:213
uint8_t version
Definition: cs_MeshModelPackets.h:215
Definition: cs_MeshModelPackets.h:110
uint32_t timestamp
Definition: cs_MeshModelPackets.h:111
MAC address struct, with some useful functions.
Definition: cs_MeshModelPackets.h:223
bool operator==(const mac_address_t &other)
Definition: cs_MeshModelPackets.h:228
void copyFrom(const void *macAddress)
Definition: cs_MeshModelPackets.h:226
Definition: cs_RssiAndChannel.h:63
Definition: cs_MeshModelPackets.h:286
rssi_data_t channel37
Definition: cs_MeshModelPackets.h:288
stone_id_t sender_id
Definition: cs_MeshModelPackets.h:287
rssi_data_t channel38
Definition: cs_MeshModelPackets.h:289
rssi_data_t channel39
Definition: cs_MeshModelPackets.h:290
The data in this packet contains information about a bluetooth channel between this crownstone and th...
Definition: cs_MeshModelPackets.h:260
uint16_t sampleCount
a samplecount == 0x111111, indicates the channel had at least 2^6-1 == 63 samples.
Definition: cs_MeshModelPackets.h:283
uint16_t variance
variance of the given channel, rounded to intervals: 0: [ 0 - 2^2) 1: [ 2^2 - 4^2) 2: [ 4^2 - 6^2) 3:...
Definition: cs_MeshModelPackets.h:272
uint16_t rssi
absolute value of the average rssi
Definition: cs_MeshModelPackets.h:277
Sent from a crownstone when it has too little rssi information from its neighbors.
Definition: cs_MeshModelPackets.h:253