Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-btmesh.c
blob94d06871c4741a5d13ff26a2cc1b08ae592d190b
1 /* packet-btmesh.c
2 * Routines for Bluetooth mesh dissection
4 * Copyright 2017, Anders Broman <anders.broman@ericsson.com>
5 * Copyright 2019-2021, Piotr Winiarczyk <wino45@gmail.com>
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
13 * Ref: Mesh Profile v1.0
15 #include "config.h"
17 #include "packet-bluetooth.h"
18 #include "packet-btatt.h"
19 #include "packet-btmesh.h"
21 #include <epan/packet.h>
22 #include <epan/prefs.h>
23 #include <wsutil/wsgcrypt.h>
24 #include <epan/expert.h>
25 #include <math.h>
26 #include <epan/uat.h>
27 #include <epan/reassemble.h>
28 #include <epan/to_str.h>
29 #include <epan/tfs.h>
30 #include <epan/unit_strings.h>
32 #define BTMESH_NOT_USED 0
33 #define BTMESH_KEY_ENTRY_VALID 4
34 #define BTMESH_DEVICE_KEY_ENTRY_VALID 2
35 #define BTMESH_LABEL_UUID_ENTRY_VALID 1
36 #define NO_LABEL_UUID_IDX_USED -1
37 #define PROPERTY_LENGTH_NO_HINT -1
39 #define SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY 0
40 #define SENSOR_CADENCE_TRIGGER_TYPE_PERCENTAGE 1
42 #define MPID_FORMAT_A 0
43 #define MPID_FORMAT_B 1
45 #define DISSECTOR_SIMPLE 0
46 #define DISSECTOR_THREE_VALUES 1
48 #define NOT_SUPPORTED_PROPERTY 0
49 #define NOT_SUPPORTED_CHARACTERISTIC -1
51 #define CONFIG_APPKEY_ADD 0x0000
52 #define CONFIG_APPKEY_UPDATE 0x0001
53 #define CONFIG_COMPOSITION_DATA_STATUS 0x0002
54 #define CONFIG_MODEL_PUBLICATION_SET 0x0003
55 #define HEALTH_CURRENT_STATUS 0x0004
56 #define HEALTH_FAULT_STATUS 0x0005
57 #define CONFIG_HEARTBEAT_PUBLICATION_STATUS 0x0006
58 #define LIGHT_LC_PROPERTY_SET 0x0062
59 #define LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED 0x0063
60 #define LIGHT_LC_PROPERTY_STATUS 0x0064
61 #define CONFIG_APPKEY_DELETE 0x8000
62 #define CONFIG_APPKEY_GET 0x8001
63 #define CONFIG_APPKEY_LIST 0x8002
64 #define CONFIG_APPKEY_STATUS 0x8003
65 #define HEALTH_ATTENTION_GET 0x8004
66 #define HEALTH_ATTENTION_SET 0x8005
67 #define HEALTH_ATTENTION_SET_UNACKNOWLEDGED 0x8006
68 #define HEALTH_ATTENTION_STATUS 0x8007
69 #define CONFIG_COMPOSITION_DATA_GET 0x8008
70 #define CONFIG_BEACON_GET 0x8009
71 #define CONFIG_BEACON_SET 0x800a
72 #define CONFIG_BEACON_STATUS 0x800b
73 #define CONFIG_DEFAULT_TTL_GET 0x800c
74 #define CONFIG_DEFAULT_TTL_SET 0x800d
75 #define CONFIG_DEFAULT_TTL_STATUS 0x800e
76 #define CONFIG_FRIEND_GET 0x800f
77 #define CONFIG_FRIEND_SET 0x8010
78 #define CONFIG_FRIEND_STATUS 0x8011
79 #define CONFIG_GATT_PROXY_GET 0x8012
80 #define CONFIG_GATT_PROXY_SET 0x8013
81 #define CONFIG_GATT_PROXY_STATUS 0x8014
82 #define CONFIG_KEY_REFRESH_PHASE_GET 0x8015
83 #define CONFIG_KEY_REFRESH_PHASE_SET 0x8016
84 #define CONFIG_KEY_REFRESH_PHASE_STATUS 0x8017
85 #define CONFIG_MODEL_PUBLICATION_GET 0x8018
86 #define CONFIG_MODEL_PUBLICATION_STATUS 0x8019
87 #define CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET 0x801a
88 #define CONFIG_MODEL_SUBSCRIPTION_ADD 0x801b
89 #define CONFIG_MODEL_SUBSCRIPTION_DELETE 0x801c
90 #define CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL 0x801d
91 #define CONFIG_MODEL_SUBSCRIPTION_OVERWRITE 0x801e
92 #define CONFIG_MODEL_SUBSCRIPTION_STATUS 0x801f
93 #define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD 0x8020
94 #define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE 0x8021
95 #define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE 0x8022
96 #define CONFIG_NETWORK_TRANSMIT_GET 0x8023
97 #define CONFIG_NETWORK_TRANSMIT_SET 0x8024
98 #define CONFIG_NETWORK_TRANSMIT_STATUS 0x8025
99 #define CONFIG_RELAY_GET 0x8026
100 #define CONFIG_RELAY_SET 0x8027
101 #define CONFIG_RELAY_STATUS 0x8028
102 #define CONFIG_SIG_MODEL_SUBSCRIPTION_GET 0x8029
103 #define CONFIG_SIG_MODEL_SUBSCRIPTION_LIST 0x802a
104 #define CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET 0x802b
105 #define CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST 0x802c
106 #define CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET 0x802d
107 #define CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS 0x802e
108 #define HEALTH_FAULT_CLEAR 0x802f
109 #define HEALTH_FAULT_CLEAR_UNACKNOWLEDGED 0x8030
110 #define HEALTH_FAULT_GET 0x8031
111 #define HEALTH_FAULT_TEST 0x8032
112 #define HEALTH_FAULT_TEST_UNACKNOWLEDGED 0x8033
113 #define HEALTH_PERIOD_GET 0x8034
114 #define HEALTH_PERIOD_SET 0x8035
115 #define HEALTH_PERIOD_SET_UNACKNOWLEDGED 0x8036
116 #define HEALTH_PERIOD_STATUS 0x8037
117 #define CONFIG_HEARTBEAT_PUBLICATION_GET 0x8038
118 #define CONFIG_HEARTBEAT_PUBLICATION_SET 0x8039
119 #define CONFIG_HEARTBEAT_SUBSCRIPTION_GET 0x803a
120 #define CONFIG_HEARTBEAT_SUBSCRIPTION_SET 0x803b
121 #define CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS 0x803c
122 #define CONFIG_MODEL_APP_BIND 0x803d
123 #define CONFIG_MODEL_APP_STATUS 0x803e
124 #define CONFIG_MODEL_APP_UNBIND 0x803f
125 #define CONFIG_NETKEY_ADD 0x8040
126 #define CONFIG_NETKEY_DELETE 0x8041
127 #define CONFIG_NETKEY_GET 0x8042
128 #define CONFIG_NETKEY_LIST 0x8043
129 #define CONFIG_NETKEY_STATUS 0x8044
130 #define CONFIG_NETKEY_UPDATE 0x8045
131 #define CONFIG_NODE_IDENTITY_GET 0x8046
132 #define CONFIG_NODE_IDENTITY_SET 0x8047
133 #define CONFIG_NODE_IDENTITY_STATUS 0x8048
134 #define CONFIG_NODE_RESET 0x8049
135 #define CONFIG_NODE_RESET_STATUS 0x804a
136 #define CONFIG_SIG_MODEL_APP_GET 0x804b
137 #define CONFIG_SIG_MODEL_APP_LIST 0x804c
138 #define CONFIG_VENDOR_MODEL_APP_GET 0x804d
139 #define CONFIG_VENDOR_MODEL_APP_LIST 0x804e
140 #define GENERIC_LOCATION_GLOBAL_STATUS 0x0040
141 #define GENERIC_LOCATION_GLOBAL_SET 0x0041
142 #define GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED 0x0042
143 #define GENERIC_ONOFF_GET 0x8201
144 #define GENERIC_ONOFF_SET 0x8202
145 #define GENERIC_ONOFF_SET_UNACKNOWLEDGED 0x8203
146 #define GENERIC_ONOFF_STATUS 0x8204
147 #define GENERIC_LEVEL_GET 0x8205
148 #define GENERIC_LEVEL_SET 0x8206
149 #define GENERIC_LEVEL_SET_UNACKNOWLEDGED 0x8207
150 #define GENERIC_LEVEL_STATUS 0x8208
151 #define GENERIC_DELTA_SET 0x8209
152 #define GENERIC_DELTA_SET_UNACKNOWLEDGED 0x820a
153 #define GENERIC_MOVE_SET 0x820b
154 #define GENERIC_MOVE_SET_UNACKNOWLEDGED 0x820c
155 #define GENERIC_DEFAULT_TRANSITION_TIME_GET 0x820d
156 #define GENERIC_DEFAULT_TRANSITION_TIME_SET 0x820e
157 #define GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED 0x820f
158 #define GENERIC_DEFAULT_TRANSITION_TIME_STATUS 0x8210
159 #define GENERIC_ONPOWERUP_GET 0x8211
160 #define GENERIC_ONPOWERUP_STATUS 0x8212
161 #define GENERIC_ONPOWERUP_SET 0x8213
162 #define GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED 0x8214
163 #define GENERIC_POWER_LEVEL_GET 0x8215
164 #define GENERIC_POWER_LEVEL_SET 0x8216
165 #define GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED 0x8217
166 #define GENERIC_POWER_LEVEL_STATUS 0x8218
167 #define GENERIC_POWER_LAST_GET 0x8219
168 #define GENERIC_POWER_LAST_STATUS 0x821a
169 #define GENERIC_POWER_DEFAULT_GET 0x821b
170 #define GENERIC_POWER_DEFAULT_STATUS 0x821c
171 #define GENERIC_POWER_RANGE_GET 0x821d
172 #define GENERIC_POWER_RANGE_STATUS 0x821e
173 #define GENERIC_POWER_DEFAULT_SET 0x821f
174 #define GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED 0x8220
175 #define GENERIC_POWER_RANGE_SET 0x8221
176 #define GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED 0x8222
177 #define GENERIC_BATTERY_GET 0x8223
178 #define GENERIC_BATTERY_STATUS 0x8224
179 #define GENERIC_LOCATION_GLOBAL_GET 0x8225
180 #define GENERIC_LOCATION_LOCAL_GET 0x8226
181 #define GENERIC_LOCATION_LOCAL_STATUS 0x8227
182 #define GENERIC_LOCATION_LOCAL_SET 0x8228
183 #define GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED 0x8229
184 #define SCENE_STATUS 0x005e
185 #define SCENE_GET 0x8241
186 #define SCENE_RECALL 0x8242
187 #define SCENE_RECALL_UNACKNOWLEDGED 0x8243
188 #define SCENE_REGISTER_GET 0x8244
189 #define SCENE_REGISTER_STATUS 0x8245
190 #define SCENE_STORE 0x8246
191 #define SCENE_STORE_UNACKNOWLEDGED 0x8247
192 #define SCENE_DELETE 0x829e
193 #define SCENE_DELETE_UNACKNOWLEDGED 0x829f
194 #define TIME_SET 0x005c
195 #define TIME_STATUS 0x005d
196 #define SCHEDULER_ACTION_STATUS 0x005f
197 #define SCHEDULER_ACTION_SET 0x0060
198 #define SCHEDULER_ACTION_SET_UNACKNOWLEDGED 0x0061
199 #define TIME_GET 0x8237
200 #define TIME_ROLE_GET 0x8238
201 #define TIME_ROLE_SET 0x8239
202 #define TIME_ROLE_STATUS 0x823a
203 #define TIME_ZONE_GET 0x823b
204 #define TIME_ZONE_SET 0x823c
205 #define TIME_ZONE_STATUS 0x823d
206 #define TAI_UTC_DELTA_GET 0x823e
207 #define TAI_UTC_DELTA_SET 0x823f
208 #define TAI_UTC_DELTA_STATUS 0x8240
209 #define SCHEDULER_ACTION_GET 0x8248
210 #define SCHEDULER_GET 0x8249
211 #define SCHEDULER_STATUS 0x824a
213 #define GENERIC_MANUFACTURER_PROPERTIES_STATUS 0x0043
214 #define GENERIC_MANUFACTURER_PROPERTY_SET 0x0044
215 #define GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED 0x0045
216 #define GENERIC_MANUFACTURER_PROPERTY_STATUS 0x0046
217 #define GENERIC_ADMIN_PROPERTIES_STATUS 0x0047
218 #define GENERIC_ADMIN_PROPERTY_SET 0x0048
219 #define GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED 0x0049
220 #define GENERIC_ADMIN_PROPERTY_STATUS 0x004a
221 #define GENERIC_USER_PROPERTIES_STATUS 0x004b
222 #define GENERIC_USER_PROPERTY_SET 0x004c
223 #define GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED 0x004d
224 #define GENERIC_USER_PROPERTY_STATUS 0x004e
225 #define GENERIC_CLIENT_PROPERTIES_GET 0x004f
226 #define GENERIC_CLIENT_PROPERTIES_STATUS 0x0050
228 #define SENSOR_DESCRIPTOR_STATUS 0x0051
229 #define SENSOR_STATUS 0x0052
230 #define SENSOR_COLUMN_STATUS 0x0053
231 #define SENSOR_SERIES_STATUS 0x0054
232 #define SENSOR_CADENCE_SET 0x0055
233 #define SENSOR_CADENCE_SET_UNACKNOWLEDGED 0x0056
234 #define SENSOR_CADENCE_STATUS 0x0057
235 #define SENSOR_SETTINGS_STATUS 0x0058
236 #define SENSOR_SETTING_SET 0x0059
237 #define SENSOR_SETTING_SET_UNACKNOWLEDGED 0x005a
238 #define SENSOR_SETTING_STATUS 0x005b
239 #define GENERIC_MANUFACTURER_PROPERTIES_GET 0x822a
240 #define GENERIC_MANUFACTURER_PROPERTY_GET 0x822b
241 #define GENERIC_ADMIN_PROPERTIES_GET 0x822c
242 #define GENERIC_ADMIN_PROPERTY_GET 0x822d
243 #define GENERIC_USER_PROPERTIES_GET 0x822e
244 #define GENERIC_USER_PROPERTY_GET 0x822f
245 #define SENSOR_DESCRIPTOR_GET 0x8230
246 #define SENSOR_GET 0x8231
247 #define SENSOR_COLUMN_GET 0x8232
248 #define SENSOR_SERIES_GET 0x8233
249 #define SENSOR_CADENCE_GET 0x8234
250 #define SENSOR_SETTINGS_GET 0x8235
251 #define SENSOR_SETTING_GET 0x8236
253 #define LIGHT_LIGHTNESS_GET 0x824b
254 #define LIGHT_LIGHTNESS_SET 0x824c
255 #define LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED 0x824d
256 #define LIGHT_LIGHTNESS_STATUS 0x824e
257 #define LIGHT_LIGHTNESS_LINEAR_GET 0x824f
258 #define LIGHT_LIGHTNESS_LINEAR_SET 0x8250
259 #define LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED 0x8251
260 #define LIGHT_LIGHTNESS_LINEAR_STATUS 0x8252
261 #define LIGHT_LIGHTNESS_LAST_GET 0x8253
262 #define LIGHT_LIGHTNESS_LAST_STATUS 0x8254
263 #define LIGHT_LIGHTNESS_DEFAULT_GET 0x8255
264 #define LIGHT_LIGHTNESS_DEFAULT_STATUS 0x8256
265 #define LIGHT_LIGHTNESS_RANGE_GET 0x8257
266 #define LIGHT_LIGHTNESS_RANGE_STATUS 0x8258
267 #define LIGHT_LIGHTNESS_DEFAULT_SET 0x8259
268 #define LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED 0x825a
269 #define LIGHT_LIGHTNESS_RANGE_SET 0x825b
270 #define LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED 0x825c
271 #define LIGHT_CTL_GET 0x825d
272 #define LIGHT_CTL_SET 0x825e
273 #define LIGHT_CTL_SET_UNACKNOWLEDGED 0x825f
274 #define LIGHT_CTL_STATUS 0x8260
275 #define LIGHT_CTL_TEMPERATURE_GET 0x8261
276 #define LIGHT_CTL_TEMPERATURE_RANGE_GET 0x8262
277 #define LIGHT_CTL_TEMPERATURE_RANGE_STATUS 0x8263
278 #define LIGHT_CTL_TEMPERATURE_SET 0x8264
279 #define LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED 0x8265
280 #define LIGHT_CTL_TEMPERATURE_STATUS 0x8266
281 #define LIGHT_CTL_DEFAULT_GET 0x8267
282 #define LIGHT_CTL_DEFAULT_STATUS 0x8268
283 #define LIGHT_CTL_DEFAULT_SET 0x8269
284 #define LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED 0x826a
285 #define LIGHT_CTL_TEMPERATURE_RANGE_SET 0x826b
286 #define LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED 0x826c
287 #define LIGHT_HSL_GET 0x826d
288 #define LIGHT_HSL_HUE_GET 0x826e
289 #define LIGHT_HSL_HUE_SET 0x826f
290 #define LIGHT_HSL_HUE_SET_UNACKNOWLEDGED 0x8270
291 #define LIGHT_HSL_HUE_STATUS 0x8271
292 #define LIGHT_HSL_SATURATION_GET 0x8272
293 #define LIGHT_HSL_SATURATION_SET 0x8273
294 #define LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED 0x8274
295 #define LIGHT_HSL_SATURATION_STATUS 0x8275
296 #define LIGHT_HSL_SET 0x8276
297 #define LIGHT_HSL_SET_UNACKNOWLEDGED 0x8277
298 #define LIGHT_HSL_STATUS 0x8278
299 #define LIGHT_HSL_TARGET_GET 0x8279
300 #define LIGHT_HSL_TARGET_STATUS 0x827a
301 #define LIGHT_HSL_DEFAULT_GET 0x827b
302 #define LIGHT_HSL_DEFAULT_STATUS 0x827c
303 #define LIGHT_HSL_RANGE_GET 0x827d
304 #define LIGHT_HSL_RANGE_STATUS 0x827e
305 #define LIGHT_HSL_DEFAULT_SET 0x827f
306 #define LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED 0x8280
307 #define LIGHT_HSL_RANGE_SET 0x8281
308 #define LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED 0x8282
309 #define LIGHT_XYL_GET 0x8283
310 #define LIGHT_XYL_SET 0x8284
311 #define LIGHT_XYL_SET_UNACKNOWLEDGED 0x8285
312 #define LIGHT_XYL_STATUS 0x8286
313 #define LIGHT_XYL_TARGET_GET 0x8287
314 #define LIGHT_XYL_TARGET_STATUS 0x8288
315 #define LIGHT_XYL_DEFAULT_GET 0x8289
316 #define LIGHT_XYL_DEFAULT_STATUS 0x828a
317 #define LIGHT_XYL_RANGE_GET 0x828b
318 #define LIGHT_XYL_RANGE_STATUS 0x828c
319 #define LIGHT_XYL_DEFAULT_SET 0x828d
320 #define LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED 0x828e
321 #define LIGHT_XYL_RANGE_SET 0x828f
322 #define LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED 0x8290
323 #define LIGHT_LC_MODE_GET 0x8291
324 #define LIGHT_LC_MODE_SET 0x8292
325 #define LIGHT_LC_MODE_SET_UNACKNOWLEDGED 0x8293
326 #define LIGHT_LC_MODE_STATUS 0x8294
327 #define LIGHT_LC_OM_GET 0x8295
328 #define LIGHT_LC_OM_SET 0x8296
329 #define LIGHT_LC_OM_SET_UNACKNOWLEDGED 0x8297
330 #define LIGHT_LC_OM_STATUS 0x8298
331 #define LIGHT_LC_LIGHT_ONOFF_GET 0x8299
332 #define LIGHT_LC_LIGHT_ONOFF_SET 0x829a
333 #define LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED 0x829b
334 #define LIGHT_LC_LIGHT_ONOFF_STATUS 0x829c
335 #define LIGHT_LC_PROPERTY_GET 0x829d
337 #define PHONY_PROPERTY_PERCENTAGE_CHANGE_16 0xFFFF
338 #define PHONY_PROPERTY_INDEX 0xFFFE
339 #define PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY 0x0001
340 #define PROPERTY_AVERAGE_INPUT_CURRENT 0x0002
341 #define PROPERTY_AVERAGE_INPUT_VOLTAGE 0x0003
342 #define PROPERTY_AVERAGE_OUTPUT_CURRENT 0x0004
343 #define PROPERTY_AVERAGE_OUTPUT_VOLTAGE 0x0005
344 #define PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER 0x0006
345 #define PROPERTY_CHROMATICITY_TOLERANCE 0x0007
346 #define PROPERTY_COLOR_RENDERING_INDEX_R9 0x0008
347 #define PROPERTY_COLOR_RENDERING_INDEX_RA 0x0009
348 #define PROPERTY_DEVICE_APPEARANCE 0x000A
349 #define PROPERTY_DEVICE_COUNTRY_OF_ORIGIN 0x000B
350 #define PROPERTY_DEVICE_DATE_OF_MANUFACTURE 0x000C
351 #define PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON 0x000D
352 #define PROPERTY_DEVICE_FIRMWARE_REVISION 0x000E
353 #define PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER 0x000F
354 #define PROPERTY_DEVICE_HARDWARE_REVISION 0x0010
355 #define PROPERTY_DEVICE_MANUFACTURER_NAME 0x0011
356 #define PROPERTY_DEVICE_MODEL_NUMBER 0x0012
357 #define PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION 0x0013
358 #define PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES 0x0014
359 #define PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS 0x0015
360 #define PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION 0x0016
361 #define PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON 0x0017
362 #define PROPERTY_DEVICE_RUNTIME_WARRANTY 0x0018
363 #define PROPERTY_DEVICE_SERIAL_NUMBER 0x0019
364 #define PROPERTY_DEVICE_SOFTWARE_REVISION 0x001A
365 #define PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS 0x001B
366 #define PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES 0x001C
367 #define PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES 0x001D
368 #define PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE 0x001E
369 #define PROPERTY_INITIAL_LUMINOUS_FLUX 0x001F
370 #define PROPERTY_INITIAL_PLANCKIAN_DISTANCE 0x0020
371 #define PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION 0x0021
372 #define PROPERTY_INPUT_CURRENT_STATISTICS 0x0022
373 #define PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS 0x0023
374 #define PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS 0x0024
375 #define PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS 0x0025
376 #define PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS 0x0026
377 #define PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS 0x0027
378 #define PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION 0x0028
379 #define PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION 0x0029
380 #define PROPERTY_INPUT_VOLTAGE_STATISTICS 0x002A
381 #define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON 0x002B
382 #define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG 0x002C
383 #define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY 0x002D
384 #define PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON 0x002E
385 #define PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG 0x002F
386 #define PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY 0x0030
387 #define PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY 0x0031
388 #define PROPERTY_LIGHT_CONTROL_REGULATOR_KID 0x0032
389 #define PROPERTY_LIGHT_CONTROL_REGULATOR_KIU 0x0033
390 #define PROPERTY_LIGHT_CONTROL_REGULATOR_KPD 0x0034
391 #define PROPERTY_LIGHT_CONTROL_REGULATOR_KPU 0x0035
392 #define PROPERTY_LIGHT_CONTROL_TIME_FADE 0x0036
393 #define PROPERTY_LIGHT_CONTROL_TIME_FADE_ON 0x0037
394 #define PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO 0x0038
395 #define PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL 0x0039
396 #define PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY 0x003A
397 #define PROPERTY_LIGHT_CONTROL_TIME_PROLONG 0x003B
398 #define PROPERTY_LIGHT_CONTROL_TIME_RUN_ON 0x003C
399 #define PROPERTY_LUMEN_MAINTENANCE_FACTOR 0x003D
400 #define PROPERTY_LUMINOUS_EFFICACY 0x003E
401 #define PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON 0x003F
402 #define PROPERTY_LUMINOUS_EXPOSURE 0x0040
403 #define PROPERTY_LUMINOUS_FLUX_RANGE 0x0041
404 #define PROPERTY_MOTION_SENSED 0x0042
405 #define PROPERTY_MOTION_THRESHOLD 0x0043
406 #define PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS 0x0044
407 #define PROPERTY_OUTDOOR_STATISTICAL_VALUES 0x0045
408 #define PROPERTY_OUTPUT_CURRENT_RANGE 0x0046
409 #define PROPERTY_OUTPUT_CURRENT_STATISTICS 0x0047
410 #define PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION 0x0048
411 #define PROPERTY_OUTPUT_VOLTAGE_RANGE 0x0049
412 #define PROPERTY_OUTPUT_VOLTAGE_STATISTICS 0x004A
413 #define PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS 0x004B
414 #define PROPERTY_PEOPLE_COUNT 0x004C
415 #define PROPERTY_PRESENCE_DETECTED 0x004D
416 #define PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL 0x004E
417 #define PROPERTY_PRESENT_AMBIENT_TEMPERATURE 0x004F
418 #define PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES 0x0050
419 #define PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE 0x0051
420 #define PROPERTY_PRESENT_DEVICE_INPUT_POWER 0x0052
421 #define PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY 0x0053
422 #define PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE 0x0054
423 #define PROPERTY_PRESENT_ILLUMINANCE 0x0055
424 #define PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE 0x0056
425 #define PROPERTY_PRESENT_INPUT_CURRENT 0x0057
426 #define PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE 0x0058
427 #define PROPERTY_PRESENT_INPUT_VOLTAGE 0x0059
428 #define PROPERTY_PRESENT_LUMINOUS_FLUX 0x005A
429 #define PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE 0x005B
430 #define PROPERTY_PRESENT_OUTPUT_CURRENT 0x005C
431 #define PROPERTY_PRESENT_OUTPUT_VOLTAGE 0x005D
432 #define PROPERTY_PRESENT_PLANCKIAN_DISTANCE 0x005E
433 #define PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE 0x005F
434 #define PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY 0x0060
435 #define PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE 0x0061
436 #define PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE 0x0062
437 #define PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE 0x0063
438 #define PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE 0x0064
439 #define PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE 0x0065
440 #define PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE 0x0066
441 #define PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS 0x0067
442 #define PROPERTY_TIME_SINCE_MOTION_SENSED 0x0068
443 #define PROPERTY_TIME_SINCE_PRESENCE_DETECTED 0x0069
444 #define PROPERTY_TOTAL_DEVICE_ENERGY_USE 0x006A
445 #define PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES 0x006B
446 #define PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES 0x006C
447 #define PROPERTY_TOTAL_DEVICE_POWER_ON_TIME 0x006D
448 #define PROPERTY_TOTAL_DEVICE_RUNTIME 0x006E
449 #define PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME 0x006F
450 #define PROPERTY_TOTAL_LUMINOUS_ENERGY 0x0070
451 #define PROPERTY_DESIRED_AMBIENT_TEMPERATURE 0x0071
452 #define PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE 0x0072
453 #define PROPERTY_POWER_FACTOR 0x0073
454 #define PROPERTY_SENSOR_GAIN 0x0074
455 #define PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE 0x0075
456 #define PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY 0x0076
457 #define PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION 0x0077
458 #define PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION 0x0078
459 #define PROPERTY_PRESENT_AMBIENT_NOISE 0x0079
460 #define PROPERTY_ACTIVE_ENERGY_LOADSIDE 0x0080
461 #define PROPERTY_ACTIVE_POWER_LOADSIDE 0x0081
462 #define PROPERTY_AIR_PRESSURE 0x0082
463 #define PROPERTY_APPARENT_ENERGY 0x0083
464 #define PROPERTY_APPARENT_POWER 0x0084
465 #define PROPERTY_APPARENT_WIND_DIRECTION 0x0085
466 #define PROPERTY_APPARENT_WIND_SPEED 0x0086
467 #define PROPERTY_DEW_POINT 0x0087
468 #define PROPERTY_EXTERNAL_SUPPLY_VOLTAGE 0x0088
469 #define PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY 0x0089
470 #define PROPERTY_GUST_FACTOR 0x008A
471 #define PROPERTY_HEAT_INDEX 0x008B
472 #define PROPERTY_LIGHT_DISTRIBUTION 0x008C
473 #define PROPERTY_LIGHT_SOURCE_CURRENT 0x008D
474 #define PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE 0x008E
475 #define PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE 0x008F
476 #define PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS 0x0090
477 #define PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS 0x0091
478 #define PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS 0x0092
479 #define PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE 0x0093
480 #define PROPERTY_LIGHT_SOURCE_TEMPERATURE 0x0094
481 #define PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS 0x0095
482 #define PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS 0x0096
483 #define PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES 0x0097
484 #define PROPERTY_LIGHT_SOURCE_VOLTAGE 0x0098
485 #define PROPERTY_LUMINAIRE_COLOR 0x0099
486 #define PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER 0x009A
487 #define PROPERTY_LUMINAIRE_MANUFACTURER_GTIN 0x009B
488 #define PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER 0x009C
489 #define PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE 0x009D
490 #define PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE 0x009E
491 #define PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL 0x009F
492 #define PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE 0x00A0
493 #define PROPERTY_MAGNETIC_DECLINATION 0x00A1
494 #define PROPERTY_MAGNETIC_FLUX_DENSITY_2_D 0x00A2
495 #define PROPERTY_MAGNETIC_FLUX_DENSITY_3_D 0x00A3
496 #define PROPERTY_NOMINAL_LIGHT_OUTPUT 0x00A4
497 #define PROPERTY_OVERALL_FAILURE_CONDITION 0x00A5
498 #define PROPERTY_POLLEN_CONCENTRATION 0x00A6
499 #define PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY 0x00A7
500 #define PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY 0x00A8
501 #define PROPERTY_PRESSURE 0x00A9
502 #define PROPERTY_RAINFALL 0x00AA
503 #define PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE 0x00AB
504 #define PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS 0x00AC
505 #define PROPERTY_REFERENCE_TEMPERATURE 0x00AD
506 #define PROPERTY_TOTAL_DEVICE_STARTS 0x00AE
507 #define PROPERTY_TRUE_WIND_DIRECTION 0x00AF
508 #define PROPERTY_TRUE_WIND_SPEED 0x00B0
509 #define PROPERTY_UV_INDEX 0x00B1
510 #define PROPERTY_WIND_CHILL 0x00B2
511 #define PROPERTY_LIGHT_SOURCE_TYPE 0x00B3
512 #define PROPERTY_LUMINAIRE_IDENTIFICATION_STRING 0x00B4
513 #define PROPERTY_OUTPUT_POWER_LIMITATION 0x00B5
514 #define PROPERTY_THERMAL_DERATING 0x00B6
515 #define PROPERTY_OUTPUT_CURRENT_PERCENT 0x00B7
517 #define PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16 0xFFFF
518 #define PHONY_CHARACTERISTIC_INDEX 0xFFFE
519 #define CHARACTERISTIC_APPARENT_ENERGY32 0x2BCF
520 #define CHARACTERISTIC_APPARENT_POWER 0x2BD0
521 #define CHARACTERISTIC_APPARENT_WIND_DIRECTION 0x2A73
522 #define CHARACTERISTIC_APPARENT_WIND_SPEED 0x2A72
523 #define CHARACTERISTIC_APPEARANCE 0x2A01
524 #define CHARACTERISTIC_AVERAGE_CURRENT 0x2AE0
525 #define CHARACTERISTIC_AVERAGE_VOLTAGE 0x2AE1
526 #define CHARACTERISTIC_BOOLEAN 0x2AE2
527 #define CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN 0x2AE3
528 #define CHARACTERISTIC_CHROMATICITY_COORDINATES 0x2AE4
529 #define CHARACTERISTIC_CHROMATICITY_TOLERANCE 0x2AE6
530 #define CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX 0x2AE7
531 #define CHARACTERISTIC_CO2_CONCENTRATION 0x2BD1
532 #define CHARACTERISTIC_COEFFICIENT 0x2AE8
533 #define CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE 0x2AE9
534 #define CHARACTERISTIC_COSINE_OF_THE_ANGLE 0x2BD2
535 #define CHARACTERISTIC_COUNT_16 0x2AEA
536 #define CHARACTERISTIC_COUNT_24 0x2AEB
537 #define CHARACTERISTIC_COUNTRY_CODE 0x2AEC
538 #define CHARACTERISTIC_DATE_UTC 0x2AED
539 #define CHARACTERISTIC_DECIHOUR_8 0x2B12
540 #define CHARACTERISTIC_DEW_POINT 0x2BD3
541 #define CHARACTERISTIC_ELECTRIC_CURRENT 0x2AEE
542 #define CHARACTERISTIC_ELECTRIC_CURRENT_RANGE 0x2AEF
543 #define CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION 0x2AF0
544 #define CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS 0x2AF1
545 #define CHARACTERISTIC_ENERGY 0x2AF2
546 #define CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY 0x2AF3
547 #define CHARACTERISTIC_ENERGY32 0x2BD4
548 #define CHARACTERISTIC_EVENT_STATISTICS 0x2AF4
549 #define CHARACTERISTIC_FIXED_STRING_16 0x2AF5
550 #define CHARACTERISTIC_FIXED_STRING_24 0x2AF6
551 #define CHARACTERISTIC_FIXED_STRING_36 0x2AF7
552 #define CHARACTERISTIC_FIXED_STRING_64 0x2BD5
553 #define CHARACTERISTIC_FIXED_STRING_8 0x2AF8
554 #define CHARACTERISTIC_GENERIC_LEVEL 0X2AF9
555 #define CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER 0x2AFA
556 #define CHARACTERISTIC_GUST_FACTOR 0x2A74
557 #define CHARACTERISTIC_HEAT_INDEX 0x2A7A
558 #define CHARACTERISTIC_HIGH_TEMPERATURE 0x2BD6
559 #define CHARACTERISTIC_HIGH_VOLTAGE 0x2BD7
560 #define CHARACTERISTIC_HUMIDITY 0x2A6F
561 #define CHARACTERISTIC_ILLUMINANCE 0x2AFB
562 #define CHARACTERISTIC_LIGHT_DISTRIBUTION 0x2BD8
563 #define CHARACTERISTIC_LIGHT_OUTPUT 0x2BD9
564 #define CHARACTERISTIC_LIGHT_SOURCE_TYPE 0x2BDA
565 #define CHARACTERISTIC_LUMINOUS_EFFICACY 0x2AFC
566 #define CHARACTERISTIC_LUMINOUS_ENERGY 0x2AFD
567 #define CHARACTERISTIC_LUMINOUS_EXPOSURE 0x2AFE
568 #define CHARACTERISTIC_LUMINOUS_FLUX 0x2AFF
569 #define CHARACTERISTIC_LUMINOUS_FLUX_RANGE 0x2B00
570 #define CHARACTERISTIC_LUMINOUS_INTENSITY 0x2B01
571 #define CHARACTERISTIC_MAGNETIC_DECLINATION 0x2BDB
572 #define CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D 0x2AA0
573 #define CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D 0x2AA1
574 #define CHARACTERISTIC_NOISE 0x2BDC
575 #define CHARACTERISTIC_PERCEIVED_LIGHTNESS 0x2B03
576 #define CHARACTERISTIC_PERCENTAGE_8 0x2B04
577 #define CHARACTERISTIC_POLLEN_CONCENTRATION 0x2A75
578 #define CHARACTERISTIC_POWER 0x2B05
579 #define CHARACTERISTIC_POWER_SPECIFICATION 0x2B06
580 #define CHARACTERISTIC_PRESSURE 0x2A6D
581 #define CHARACTERISTIC_RAINFALL 0x2A78
582 #define CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE 0x2B07
583 #define CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE 0x2B08
584 #define CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE 0x2B0C
585 #define CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE 0x2B09
586 #define CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE 0x2B0A
587 #define CHARACTERISTIC_TEMPERATURE 0x2A6E
588 #define CHARACTERISTIC_TEMPERATURE_8 0x2B0D
589 #define CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY 0x2B0E
590 #define CHARACTERISTIC_TEMPERATURE_8_STATISTICS 0x2B0F
591 #define CHARACTERISTIC_TEMPERATURE_RANGE 0x2B10
592 #define CHARACTERISTIC_TEMPERATURE_STATISTICS 0x2B11
593 #define CHARACTERISTIC_TIME_HOUR_24 0x2B14
594 #define CHARACTERISTIC_TIME_MILLISECOND_24 0x2B15
595 #define CHARACTERISTIC_TIME_SECOND_16 0x2B16
596 #define CHARACTERISTIC_TIME_SECOND_32 0x2BDE
597 #define CHARACTERISTIC_TRUE_WIND_DIRECTION 0x2A71
598 #define CHARACTERISTIC_TRUE_WIND_SPEED 0x2A70
599 #define CHARACTERISTIC_UV_INDEX 0x2A76
600 #define CHARACTERISTIC_VOC_CONCENTRATION 0x2BDF
601 #define CHARACTERISTIC_VOLTAGE 0x2B18
602 #define CHARACTERISTIC_VOLTAGE_FREQUENCY 0x2BE0
603 #define CHARACTERISTIC_VOLTAGE_SPECIFICATION 0x2B19
604 #define CHARACTERISTIC_VOLTAGE_STATISTICS 0x2B1A
605 #define CHARACTERISTIC_WIND_CHILL 0x2A79
607 void proto_register_btmesh(void);
609 static int proto_btmesh;
610 static dissector_table_t btmesh_model_vendor_dissector_table;
612 /*-------------------------------------
613 * UAT for BT Mesh
614 *-------------------------------------
616 static uat_t *btmesh_uat;
617 static unsigned num_btmesh_uat;
619 /* UAT Network, Application and IVIndex entry structure. */
620 typedef struct {
621 char *network_key_string;
622 uint8_t *network_key;
623 int network_key_length;
624 char *ivindex_string;
625 int ivindex_string_length;
626 uint8_t *ivindex;
627 uint8_t *privacykey;
628 uint8_t *encryptionkey;
629 uint8_t nid;
630 char *application_key_string;
631 uint8_t *application_key;
632 int application_key_length;
633 uint8_t aid;
634 uint8_t valid; /* this counter must be equal to BTMESH_KEY_ENTRY_VALID make UAT entry valid */
635 uint32_t net_key_iv_index_hash; /* Used to identify net key / IV index pair */
636 } uat_btmesh_record_t;
638 static uat_btmesh_record_t *uat_btmesh_records;
640 static uat_t *btmesh_dev_key_uat;
641 static unsigned num_btmesh_dev_key_uat;
643 /* UAT Device Key entry structure. */
644 typedef struct {
645 char *device_key_string;
646 uint8_t *device_key;
647 int device_key_length;
648 char *src_string;
649 int src_length;
650 uint8_t *src;
651 uint8_t valid; /* this counter must be equal to BTMESH_DEVICE_KEY_ENTRY_VALID make UAT entry valid */
652 } uat_btmesh_dev_key_record_t;
654 static uat_btmesh_dev_key_record_t *uat_btmesh_dev_key_records;
656 static uat_t * btmesh_label_uuid_uat;
657 static unsigned num_btmesh_label_uuid_uat;
659 /* UAT Label UUID entry structure. */
660 typedef struct {
661 char *label_uuid_string;
662 uint8_t *label_uuid;
663 int label_uuid_length;
664 uint16_t hash;
665 uint8_t valid; /* this counter must be equal to BTMESH_LABEL_UUID_ENTRY_VALID make UAT entry valid */
666 } uat_btmesh_label_uuid_record_t;
668 static uat_btmesh_label_uuid_record_t *uat_btmesh_label_uuid_records;
670 typedef struct {
671 uint16_t property_id;
672 uint16_t characteristic_id;
673 } btmesh_property_t;
675 typedef struct {
676 uint16_t characteristic_id;
677 uint16_t characteristic_value_length;
678 int *hfindex;
679 uint8_t dissector_type;
680 } bt_gatt_characteristic_t;
682 typedef struct {
683 uint16_t characteristic_id;
684 uint16_t x_characteristic_id;
685 uint16_t y_characteristic_id;
686 } btmesh_column_property_t;
688 typedef struct {
689 int *hf_status_trigger_delta_up;
690 int *hf_status_trigger_delta_down;
691 int *hf_status_min_interval;
692 int *hf_fast_cadence_low;
693 int *hf_fast_cadence_high;
694 int *hf_remainder_not_dissected;
695 } bt_sensor_cadence_dissector_t;
697 typedef struct {
698 int *hf_raw_value_a;
699 int *hf_raw_value_b;
700 int *hf_raw_value_c;
701 } bt_property_raw_value_entry_t;
703 typedef struct {
704 int *hf_raw_value_a1;
705 int *hf_raw_value_a2;
706 } bt_property_columns_raw_value_t;
708 static int hf_btmesh_ivi;
709 static int hf_btmesh_nid;
710 static int hf_btmesh_obfuscated;
711 static int hf_btmesh_encrypted;
712 static int hf_btmesh_netmic;
714 static int hf_btmesh_ctl;
715 static int hf_btmesh_ttl;
716 static int hf_btmesh_seq;
717 static int hf_btmesh_src;
718 static int hf_btmesh_dst;
720 static int hf_btmesh_transp_pdu;
721 static int hf_btmesh_cntr_seg;
722 static int hf_btmesh_acc_seg;
723 static int hf_btmesh_cntr_opcode;
724 static int hf_btmesh_acc_akf;
725 static int hf_btmesh_acc_aid;
726 static int hf_btmesh_obo;
727 static int hf_btmesh_seqzero;
728 static int hf_btmesh_rfu;
729 static int hf_btmesh_blockack;
730 static int hf_btmesh_cntr_criteria_rfu;
731 static int hf_btmesh_cntr_padding;
732 static int hf_btmesh_cntr_fsn;
734 static int hf_btmesh_cntr_key_refresh_flag;
735 static int hf_btmesh_cntr_iv_update_flag;
736 static int hf_btmesh_cntr_flags_rfu;
737 static int hf_btmesh_cntr_iv_index;
738 static int hf_btmesh_cntr_md;
740 static int hf_btmesh_cntr_heartbeat_rfu;
741 static int hf_btmesh_cntr_init_ttl;
742 static int hf_btmesh_cntr_feature_relay;
743 static int hf_btmesh_cntr_feature_proxy;
744 static int hf_btmesh_cntr_feature_friend;
745 static int hf_btmesh_cntr_feature_low_power;
746 static int hf_btmesh_cntr_feature_rfu;
748 static int hf_btmesh_cntr_criteria_rssifactor;
749 static int hf_btmesh_cntr_criteria_receivewindowfactor;
750 static int hf_btmesh_cntr_criteria_minqueuesizelog;
751 static int hf_btmesh_cntr_receivedelay;
752 static int hf_btmesh_cntr_polltimeout;
753 static int hf_btmesh_cntr_previousaddress;
754 static int hf_btmesh_cntr_numelements;
755 static int hf_btmesh_cntr_lpncounter;
756 static int hf_btmesh_cntr_receivewindow;
757 static int hf_btmesh_cntr_queuesize;
758 static int hf_btmesh_cntr_subscriptionlistsize;
759 static int hf_btmesh_cntr_rssi;
760 static int hf_btmesh_cntr_friendcounter;
761 static int hf_btmesh_cntr_lpnaddress;
762 static int hf_btmesh_cntr_transactionnumber;
763 static int hf_btmesh_enc_access_pld;
764 static int hf_btmesh_transtmic;
765 static int hf_btmesh_szmic;
766 static int hf_btmesh_seqzero_data;
767 static int hf_btmesh_sego;
768 static int hf_btmesh_segn;
769 static int hf_btmesh_seg_rfu;
770 static int hf_btmesh_segment;
771 static int hf_btmesh_cntr_unknown_payload;
773 static int hf_btmesh_segmented_access_fragments;
774 static int hf_btmesh_segmented_access_fragment;
775 static int hf_btmesh_segmented_access_fragment_overlap;
776 static int hf_btmesh_segmented_access_fragment_overlap_conflict;
777 static int hf_btmesh_segmented_access_fragment_multiple_tails;
778 static int hf_btmesh_segmented_access_fragment_too_long_fragment;
779 static int hf_btmesh_segmented_access_fragment_error;
780 static int hf_btmesh_segmented_access_fragment_count;
781 static int hf_btmesh_segmented_access_reassembled_length;
783 static int hf_btmesh_segmented_control_fragments;
784 static int hf_btmesh_segmented_control_fragment;
785 static int hf_btmesh_segmented_control_fragment_overlap;
786 static int hf_btmesh_segmented_control_fragment_overlap_conflict;
787 static int hf_btmesh_segmented_control_fragment_multiple_tails;
788 static int hf_btmesh_segmented_control_fragment_too_long_fragment;
789 static int hf_btmesh_segmented_control_fragment_error;
790 static int hf_btmesh_segmented_control_fragment_count;
791 static int hf_btmesh_segmented_control_reassembled_length;
793 static int hf_btmesh_decrypted_access;
794 static int hf_btmesh_model_layer_opcode;
795 static int hf_btmesh_model_layer_parameters;
796 static int hf_btmesh_model_layer_vendor_opcode;
797 static int hf_btmesh_model_layer_vendor;
799 static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex;
800 static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net;
801 static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app;
802 static int hf_btmesh_config_appkey_add_appkey;
803 static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex;
804 static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net;
805 static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app;
806 static int hf_btmesh_config_appkey_update_appkey;
807 static int hf_btmesh_config_composition_data_status_page;
808 static int hf_btmesh_config_composition_data_status_cid;
809 static int hf_btmesh_config_composition_data_status_pid;
810 static int hf_btmesh_config_composition_data_status_vid;
811 static int hf_btmesh_config_composition_data_status_crpl;
812 static int hf_btmesh_config_composition_data_status_features_relay;
813 static int hf_btmesh_config_composition_data_status_features_proxy;
814 static int hf_btmesh_config_composition_data_status_features_friend;
815 static int hf_btmesh_config_composition_data_status_features_low_power;
816 static int hf_btmesh_config_composition_data_status_features_rfu;
817 static int hf_btmesh_config_composition_data_status_features;
818 static int hf_btmesh_config_composition_data_status_loc;
819 static int hf_btmesh_config_composition_data_status_nums;
820 static int hf_btmesh_config_composition_data_status_numv;
821 static int hf_btmesh_config_composition_data_status_sig_model;
822 static int hf_btmesh_config_composition_data_status_vendor_model;
823 static int hf_btmesh_config_model_publication_set_elementaddress;
824 static int hf_btmesh_config_model_publication_set_publishaddress;
825 static int hf_btmesh_config_model_publication_set_appkey;
826 static int hf_btmesh_config_model_publication_set_appkeyindex;
827 static int hf_btmesh_config_model_publication_set_credentialflag;
828 static int hf_btmesh_config_model_publication_set_rfu;
829 static int hf_btmesh_config_model_publication_set_publishttl;
830 static int hf_btmesh_config_model_publication_set_publishperiod;
831 static int hf_btmesh_config_model_publication_set_publishperiod_resolution;
832 static int hf_btmesh_config_model_publication_set_publishperiod_steps;
833 static int hf_btmesh_config_model_publication_set_publishretransmit;
834 static int hf_btmesh_config_model_publication_set_publishretransmit_count;
835 static int hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps;
836 static int hf_btmesh_config_model_publication_set_modelidentifier;
837 static int hf_btmesh_config_model_publication_set_vendormodelidentifier;
838 static int hf_btmesh_health_current_status_test_id;
839 static int hf_btmesh_health_current_status_company_id;
840 static int hf_btmesh_health_current_status_fault;
841 static int hf_btmesh_health_fault_status_test_id;
842 static int hf_btmesh_health_fault_status_company_id;
843 static int hf_btmesh_health_fault_status_fault;
844 static int hf_btmesh_config_heartbeat_publication_status_status;
845 static int hf_btmesh_config_heartbeat_publication_status_destination;
846 static int hf_btmesh_config_heartbeat_publication_status_countlog;
847 static int hf_btmesh_config_heartbeat_publication_status_periodlog;
848 static int hf_btmesh_config_heartbeat_publication_status_ttl;
849 static int hf_btmesh_config_heartbeat_publication_status_features_relay;
850 static int hf_btmesh_config_heartbeat_publication_status_features_proxy;
851 static int hf_btmesh_config_heartbeat_publication_status_features_friend;
852 static int hf_btmesh_config_heartbeat_publication_status_features_low_power;
853 static int hf_btmesh_config_heartbeat_publication_status_features_rfu;
854 static int hf_btmesh_config_heartbeat_publication_status_features;
855 static int hf_btmesh_config_heartbeat_publication_status_netkeyindex;
856 static int hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx;
857 static int hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu;
858 static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex;
859 static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net;
860 static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app;
861 static int hf_btmesh_config_appkey_get_netkeyindex;
862 static int hf_btmesh_config_appkey_get_netkeyindex_idx;
863 static int hf_btmesh_config_appkey_get_netkeyindex_rfu;
864 static int hf_btmesh_config_appkey_list_status;
865 static int hf_btmesh_config_appkey_list_netkeyindex;
866 static int hf_btmesh_config_appkey_list_netkeyindex_idx;
867 static int hf_btmesh_config_appkey_list_netkeyindex_rfu;
868 static int hf_btmesh_config_appkey_list_appkeyindex;
869 static int hf_btmesh_config_appkey_list_appkeyindex_rfu;
870 static int hf_btmesh_config_appkey_status_status;
871 static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex;
872 static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net;
873 static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app;
874 static int hf_btmesh_health_attention_set_attention;
875 static int hf_btmesh_health_attention_set_unacknowledged_attention;
876 static int hf_btmesh_health_attention_status_attention;
877 static int hf_btmesh_config_composition_data_get_page;
878 static int hf_btmesh_config_beacon_set_beacon;
879 static int hf_btmesh_config_beacon_status_beacon;
880 static int hf_btmesh_config_default_ttl_set_ttl;
881 static int hf_btmesh_config_default_ttl_status_ttl;
882 static int hf_btmesh_config_friend_set_friend;
883 static int hf_btmesh_config_friend_status_friend;
884 static int hf_btmesh_config_gatt_proxy_set_gattproxy;
885 static int hf_btmesh_config_gatt_proxy_status_gattproxy;
886 static int hf_btmesh_config_key_refresh_phase_get_netkeyindex;
887 static int hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx;
888 static int hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu;
889 static int hf_btmesh_config_key_refresh_phase_set_netkeyindex;
890 static int hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx;
891 static int hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu;
892 static int hf_btmesh_config_key_refresh_phase_set_transition;
893 static int hf_btmesh_config_key_refresh_phase_status_status;
894 static int hf_btmesh_config_key_refresh_phase_status_netkeyindex;
895 static int hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx;
896 static int hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu;
897 static int hf_btmesh_config_key_refresh_phase_status_phase;
898 static int hf_btmesh_config_model_publication_get_elementaddress;
899 static int hf_btmesh_config_model_publication_get_modelidentifier;
900 static int hf_btmesh_config_model_publication_get_vendormodelidentifier;
901 static int hf_btmesh_config_model_publication_status_status;
902 static int hf_btmesh_config_model_publication_status_elementaddress;
903 static int hf_btmesh_config_model_publication_status_publishaddress;
904 static int hf_btmesh_config_model_publication_status_appkey;
905 static int hf_btmesh_config_model_publication_status_appkeyindex;
906 static int hf_btmesh_config_model_publication_status_credentialflag;
907 static int hf_btmesh_config_model_publication_status_rfu;
908 static int hf_btmesh_config_model_publication_status_publishttl;
909 static int hf_btmesh_config_model_publication_status_publishperiod;
910 static int hf_btmesh_config_model_publication_status_publishperiod_resolution;
911 static int hf_btmesh_config_model_publication_status_publishperiod_steps;
912 static int hf_btmesh_config_model_publication_status_publishretransmit;
913 static int hf_btmesh_config_model_publication_status_publishretransmit_count;
914 static int hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps;
915 static int hf_btmesh_config_model_publication_status_modelidentifier;
916 static int hf_btmesh_config_model_publication_status_vendormodelidentifier;
917 static int hf_btmesh_config_model_publication_virtual_address_set_elementaddress;
918 static int hf_btmesh_config_model_publication_virtual_address_set_publishaddress;
919 static int hf_btmesh_config_model_publication_virtual_address_set_appkey;
920 static int hf_btmesh_config_model_publication_virtual_address_set_appkeyindex;
921 static int hf_btmesh_config_model_publication_virtual_address_set_credentialflag;
922 static int hf_btmesh_config_model_publication_virtual_address_set_rfu;
923 static int hf_btmesh_config_model_publication_virtual_address_set_publishttl;
924 static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod;
925 static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution;
926 static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps;
927 static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit;
928 static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count;
929 static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps;
930 static int hf_btmesh_config_model_publication_virtual_address_set_modelidentifier;
931 static int hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier;
932 static int hf_btmesh_config_model_subscription_add_elementaddress;
933 static int hf_btmesh_config_model_subscription_add_address;
934 static int hf_btmesh_config_model_subscription_add_modelidentifier;
935 static int hf_btmesh_config_model_subscription_add_vendormodelidentifier;
936 static int hf_btmesh_config_model_subscription_delete_elementaddress;
937 static int hf_btmesh_config_model_subscription_delete_address;
938 static int hf_btmesh_config_model_subscription_delete_modelidentifier;
939 static int hf_btmesh_config_model_subscription_delete_vendormodelidentifier;
940 static int hf_btmesh_config_model_subscription_delete_all_elementaddress;
941 static int hf_btmesh_config_model_subscription_delete_all_modelidentifier;
942 static int hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier;
943 static int hf_btmesh_config_model_subscription_overwrite_elementaddress;
944 static int hf_btmesh_config_model_subscription_overwrite_address;
945 static int hf_btmesh_config_model_subscription_overwrite_modelidentifier;
946 static int hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier;
947 static int hf_btmesh_config_model_subscription_status_status;
948 static int hf_btmesh_config_model_subscription_status_elementaddress;
949 static int hf_btmesh_config_model_subscription_status_address;
950 static int hf_btmesh_config_model_subscription_status_modelidentifier;
951 static int hf_btmesh_config_model_subscription_status_vendormodelidentifier;
952 static int hf_btmesh_config_model_subscription_virtual_address_add_elementaddress;
953 static int hf_btmesh_config_model_subscription_virtual_address_add_label;
954 static int hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier;
955 static int hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier;
956 static int hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress;
957 static int hf_btmesh_config_model_subscription_virtual_address_delete_label;
958 static int hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier;
959 static int hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier;
960 static int hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress;
961 static int hf_btmesh_config_model_subscription_virtual_address_overwrite_label;
962 static int hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier;
963 static int hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier;
964 static int hf_btmesh_config_network_transmit_set_networktransmit;
965 static int hf_btmesh_config_network_transmit_set_networktransmit_count;
966 static int hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps;
967 static int hf_btmesh_config_network_transmit_status_networktransmit;
968 static int hf_btmesh_config_network_transmit_status_networktransmit_count;
969 static int hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps;
970 static int hf_btmesh_config_relay_set_relay;
971 static int hf_btmesh_config_relay_set_relayretransmit;
972 static int hf_btmesh_config_relay_set_relayretransmit_count;
973 static int hf_btmesh_config_relay_set_relayretransmit_intervalsteps;
974 static int hf_btmesh_config_relay_status_relay;
975 static int hf_btmesh_config_relay_status_relayretransmit;
976 static int hf_btmesh_config_relay_status_relayretransmit_count;
977 static int hf_btmesh_config_relay_status_relayretransmit_intervalsteps;
978 static int hf_btmesh_config_sig_model_subscription_get_elementaddress;
979 static int hf_btmesh_config_sig_model_subscription_get_modelidentifier;
980 static int hf_btmesh_config_sig_model_subscription_list_status;
981 static int hf_btmesh_config_sig_model_subscription_list_elementaddress;
982 static int hf_btmesh_config_sig_model_subscription_list_modelidentifier;
983 static int hf_btmesh_config_sig_model_subscription_list_address;
984 static int hf_btmesh_config_vendor_model_subscription_get_elementaddress;
985 static int hf_btmesh_config_vendor_model_subscription_get_modelidentifier;
986 static int hf_btmesh_config_vendor_model_subscription_list_status;
987 static int hf_btmesh_config_vendor_model_subscription_list_elementaddress;
988 static int hf_btmesh_config_vendor_model_subscription_list_modelidentifier;
989 static int hf_btmesh_config_vendor_model_subscription_list_address;
990 static int hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress;
991 static int hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress;
992 static int hf_btmesh_config_low_power_node_polltimeout_status_polltimeout;
993 static int hf_btmesh_health_fault_clear_company_id;
994 static int hf_btmesh_health_fault_clear_unacknowledged_company_id;
995 static int hf_btmesh_health_fault_get_company_id;
996 static int hf_btmesh_health_fault_test_test_id;
997 static int hf_btmesh_health_fault_test_company_id;
998 static int hf_btmesh_health_fault_test_unacknowledged_test_id;
999 static int hf_btmesh_health_fault_test_unacknowledged_company_id;
1000 static int hf_btmesh_health_period_set_fast_period_divisor;
1001 static int hf_btmesh_health_period_set_unacknowledged_fast_period_divisor;
1002 static int hf_btmesh_health_period_status_fast_period_divisor;
1003 static int hf_btmesh_config_heartbeat_publication_set_destination;
1004 static int hf_btmesh_config_heartbeat_publication_set_countlog;
1005 static int hf_btmesh_config_heartbeat_publication_set_periodlog;
1006 static int hf_btmesh_config_heartbeat_publication_set_ttl;
1007 static int hf_btmesh_config_heartbeat_publication_set_features_relay;
1008 static int hf_btmesh_config_heartbeat_publication_set_features_proxy;
1009 static int hf_btmesh_config_heartbeat_publication_set_features_friend;
1010 static int hf_btmesh_config_heartbeat_publication_set_features_low_power;
1011 static int hf_btmesh_config_heartbeat_publication_set_features_rfu;
1012 static int hf_btmesh_config_heartbeat_publication_set_features;
1013 static int hf_btmesh_config_heartbeat_publication_set_netkeyindex;
1014 static int hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx;
1015 static int hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu;
1016 static int hf_btmesh_config_heartbeat_subscription_set_source;
1017 static int hf_btmesh_config_heartbeat_subscription_set_destination;
1018 static int hf_btmesh_config_heartbeat_subscription_set_periodlog;
1019 static int hf_btmesh_config_heartbeat_subscription_status_status;
1020 static int hf_btmesh_config_heartbeat_subscription_status_source;
1021 static int hf_btmesh_config_heartbeat_subscription_status_destination;
1022 static int hf_btmesh_config_heartbeat_subscription_status_periodlog;
1023 static int hf_btmesh_config_heartbeat_subscription_status_countlog;
1024 static int hf_btmesh_config_heartbeat_subscription_status_minhops;
1025 static int hf_btmesh_config_heartbeat_subscription_status_maxhops;
1026 static int hf_btmesh_config_model_app_bind_elementaddress;
1027 static int hf_btmesh_config_model_app_bind_appkeyindex;
1028 static int hf_btmesh_config_model_app_bind_appkeyindex_idx;
1029 static int hf_btmesh_config_model_app_bind_appkeyindex_rfu;
1030 static int hf_btmesh_config_model_app_bind_modelidentifier;
1031 static int hf_btmesh_config_model_app_bind_vendormodelidentifier;
1032 static int hf_btmesh_config_model_app_status_status;
1033 static int hf_btmesh_config_model_app_status_elementaddress;
1034 static int hf_btmesh_config_model_app_status_appkeyindex;
1035 static int hf_btmesh_config_model_app_status_appkeyindex_idx;
1036 static int hf_btmesh_config_model_app_status_appkeyindex_rfu;
1037 static int hf_btmesh_config_model_app_status_modelidentifier;
1038 static int hf_btmesh_config_model_app_status_vendormodelidentifier;
1039 static int hf_btmesh_config_model_app_unbind_elementaddress;
1040 static int hf_btmesh_config_model_app_unbind_appkeyindex;
1041 static int hf_btmesh_config_model_app_unbind_appkeyindex_idx;
1042 static int hf_btmesh_config_model_app_unbind_appkeyindex_rfu;
1043 static int hf_btmesh_config_model_app_unbind_modelidentifier;
1044 static int hf_btmesh_config_model_app_unbind_vendormodelidentifier;
1045 static int hf_btmesh_config_netkey_add_netkeyindex;
1046 static int hf_btmesh_config_netkey_add_netkeyindex_idx;
1047 static int hf_btmesh_config_netkey_add_netkeyindex_rfu;
1048 static int hf_btmesh_config_netkey_add_netkey;
1049 static int hf_btmesh_config_netkey_delete_netkeyindex;
1050 static int hf_btmesh_config_netkey_delete_netkeyindex_idx;
1051 static int hf_btmesh_config_netkey_delete_netkeyindex_rfu;
1052 static int hf_btmesh_config_netkey_list_netkeyindex;
1053 static int hf_btmesh_config_netkey_list_netkeyindex_rfu;
1054 static int hf_btmesh_config_netkey_status_status;
1055 static int hf_btmesh_config_netkey_status_netkeyindex;
1056 static int hf_btmesh_config_netkey_status_netkeyindex_idx;
1057 static int hf_btmesh_config_netkey_status_netkeyindex_rfu;
1058 static int hf_btmesh_config_netkey_update_netkeyindex;
1059 static int hf_btmesh_config_netkey_update_netkeyindex_idx;
1060 static int hf_btmesh_config_netkey_update_netkeyindex_rfu;
1061 static int hf_btmesh_config_netkey_update_netkey;
1062 static int hf_btmesh_config_node_identity_get_netkeyindex;
1063 static int hf_btmesh_config_node_identity_get_netkeyindex_idx;
1064 static int hf_btmesh_config_node_identity_get_netkeyindex_rfu;
1065 static int hf_btmesh_config_node_identity_set_netkeyindex;
1066 static int hf_btmesh_config_node_identity_set_netkeyindex_idx;
1067 static int hf_btmesh_config_node_identity_set_netkeyindex_rfu;
1068 static int hf_btmesh_config_node_identity_set_identity;
1069 static int hf_btmesh_config_node_identity_status_status;
1070 static int hf_btmesh_config_node_identity_status_netkeyindex;
1071 static int hf_btmesh_config_node_identity_status_netkeyindex_idx;
1072 static int hf_btmesh_config_node_identity_status_netkeyindex_rfu;
1073 static int hf_btmesh_config_node_identity_status_identity;
1074 static int hf_btmesh_config_sig_model_app_get_elementaddress;
1075 static int hf_btmesh_config_sig_model_app_get_modelidentifier;
1076 static int hf_btmesh_config_sig_model_app_list_status;
1077 static int hf_btmesh_config_sig_model_app_list_elementaddress;
1078 static int hf_btmesh_config_sig_model_app_list_modelidentifier;
1079 static int hf_btmesh_config_sig_model_app_list_appkeyindex;
1080 static int hf_btmesh_config_sig_model_app_list_appkeyindex_rfu;
1081 static int hf_btmesh_config_vendor_model_app_get_elementaddress;
1082 static int hf_btmesh_config_vendor_model_app_get_modelidentifier;
1083 static int hf_btmesh_config_vendor_model_app_list_status;
1084 static int hf_btmesh_config_vendor_model_app_list_elementaddress;
1085 static int hf_btmesh_config_vendor_model_app_list_modelidentifier;
1086 static int hf_btmesh_config_vendor_model_app_list_appkeyindex;
1087 static int hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu;
1088 static int hf_btmesh_generic_location_global_status_global_latitude;
1089 static int hf_btmesh_generic_location_global_status_global_longitude;
1090 static int hf_btmesh_generic_location_global_status_global_altitude;
1091 static int hf_btmesh_generic_location_global_set_global_latitude;
1092 static int hf_btmesh_generic_location_global_set_global_longitude;
1093 static int hf_btmesh_generic_location_global_set_global_altitude;
1094 static int hf_btmesh_generic_location_global_set_unacknowledged_global_latitude;
1095 static int hf_btmesh_generic_location_global_set_unacknowledged_global_longitude;
1096 static int hf_btmesh_generic_location_global_set_unacknowledged_global_altitude;
1097 static int hf_btmesh_generic_onoff_set_onoff;
1098 static int hf_btmesh_generic_onoff_set_tid;
1099 static int hf_btmesh_generic_onoff_set_transition_time;
1100 static int hf_btmesh_generic_onoff_set_transition_time_steps;
1101 static int hf_btmesh_generic_onoff_set_transition_time_resolution;
1102 static int hf_btmesh_generic_onoff_set_delay;
1103 static int hf_btmesh_generic_onoff_set_unacknowledged_onoff;
1104 static int hf_btmesh_generic_onoff_set_unacknowledged_tid;
1105 static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time;
1106 static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps;
1107 static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution;
1108 static int hf_btmesh_generic_onoff_set_unacknowledged_delay;
1109 static int hf_btmesh_generic_onoff_status_present_onoff;
1110 static int hf_btmesh_generic_onoff_status_target_onoff;
1111 static int hf_btmesh_generic_onoff_status_remaining_time;
1112 static int hf_btmesh_generic_onoff_status_remaining_time_steps;
1113 static int hf_btmesh_generic_onoff_status_remaining_time_resolution;
1114 static int hf_btmesh_generic_level_set_level;
1115 static int hf_btmesh_generic_level_set_tid;
1116 static int hf_btmesh_generic_level_set_transition_time;
1117 static int hf_btmesh_generic_level_set_transition_time_steps;
1118 static int hf_btmesh_generic_level_set_transition_time_resolution;
1119 static int hf_btmesh_generic_level_set_delay;
1120 static int hf_btmesh_generic_level_set_unacknowledged_level;
1121 static int hf_btmesh_generic_level_set_unacknowledged_tid;
1122 static int hf_btmesh_generic_level_set_unacknowledged_transition_time;
1123 static int hf_btmesh_generic_level_set_unacknowledged_transition_time_steps;
1124 static int hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution;
1125 static int hf_btmesh_generic_level_set_unacknowledged_delay;
1126 static int hf_btmesh_generic_level_status_present_level;
1127 static int hf_btmesh_generic_level_status_target_level;
1128 static int hf_btmesh_generic_level_status_remaining_time;
1129 static int hf_btmesh_generic_level_status_remaining_time_steps;
1130 static int hf_btmesh_generic_level_status_remaining_time_resolution;
1131 static int hf_btmesh_generic_delta_set_delta_level;
1132 static int hf_btmesh_generic_delta_set_tid;
1133 static int hf_btmesh_generic_delta_set_transition_time;
1134 static int hf_btmesh_generic_delta_set_transition_time_steps;
1135 static int hf_btmesh_generic_delta_set_transition_time_resolution;
1136 static int hf_btmesh_generic_delta_set_delay;
1137 static int hf_btmesh_generic_delta_set_unacknowledged_delta_level;
1138 static int hf_btmesh_generic_delta_set_unacknowledged_tid;
1139 static int hf_btmesh_generic_delta_set_unacknowledged_transition_time;
1140 static int hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps;
1141 static int hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution;
1142 static int hf_btmesh_generic_delta_set_unacknowledged_delay;
1143 static int hf_btmesh_generic_move_set_delta_level;
1144 static int hf_btmesh_generic_move_set_tid;
1145 static int hf_btmesh_generic_move_set_transition_time;
1146 static int hf_btmesh_generic_move_set_transition_time_steps;
1147 static int hf_btmesh_generic_move_set_transition_time_resolution;
1148 static int hf_btmesh_generic_move_set_delay;
1149 static int hf_btmesh_generic_move_set_unacknowledged_delta_level;
1150 static int hf_btmesh_generic_move_set_unacknowledged_tid;
1151 static int hf_btmesh_generic_move_set_unacknowledged_transition_time;
1152 static int hf_btmesh_generic_move_set_unacknowledged_transition_time_steps;
1153 static int hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution;
1154 static int hf_btmesh_generic_move_set_unacknowledged_delay;
1155 static int hf_btmesh_generic_default_transition_time_set_transition_time;
1156 static int hf_btmesh_generic_default_transition_time_set_transition_time_steps;
1157 static int hf_btmesh_generic_default_transition_time_set_transition_time_resolution;
1158 static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time;
1159 static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps;
1160 static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution;
1161 static int hf_btmesh_generic_default_transition_time_status_transition_time;
1162 static int hf_btmesh_generic_default_transition_time_status_transition_time_steps;
1163 static int hf_btmesh_generic_default_transition_time_status_transition_time_resolution;
1164 static int hf_btmesh_generic_onpowerup_status_onpowerup;
1165 static int hf_btmesh_generic_onpowerup_set_onpowerup;
1166 static int hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup;
1167 static int hf_btmesh_generic_power_level_set_power;
1168 static int hf_btmesh_generic_power_level_set_tid;
1169 static int hf_btmesh_generic_power_level_set_transition_time;
1170 static int hf_btmesh_generic_power_level_set_transition_time_steps;
1171 static int hf_btmesh_generic_power_level_set_transition_time_resolution;
1172 static int hf_btmesh_generic_power_level_set_delay;
1173 static int hf_btmesh_generic_power_level_set_unacknowledged_power;
1174 static int hf_btmesh_generic_power_level_set_unacknowledged_tid;
1175 static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time;
1176 static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps;
1177 static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution;
1178 static int hf_btmesh_generic_power_level_set_unacknowledged_delay;
1179 static int hf_btmesh_generic_power_level_status_present_power;
1180 static int hf_btmesh_generic_power_level_status_target_power;
1181 static int hf_btmesh_generic_power_level_status_remaining_time;
1182 static int hf_btmesh_generic_power_level_status_remaining_time_steps;
1183 static int hf_btmesh_generic_power_level_status_remaining_time_resolution;
1184 static int hf_btmesh_generic_power_last_status_power;
1185 static int hf_btmesh_generic_power_default_status_power;
1186 static int hf_btmesh_generic_power_range_status_status_code;
1187 static int hf_btmesh_generic_power_range_status_range_min;
1188 static int hf_btmesh_generic_power_range_status_range_max;
1189 static int hf_btmesh_generic_power_default_set_power;
1190 static int hf_btmesh_generic_power_default_set_unacknowledged_power;
1191 static int hf_btmesh_generic_power_range_set_range_min;
1192 static int hf_btmesh_generic_power_range_set_range_max;
1193 static int hf_btmesh_generic_power_range_set_unacknowledged_range_min;
1194 static int hf_btmesh_generic_power_range_set_unacknowledged_range_max;
1195 static int hf_btmesh_generic_battery_status_battery_level;
1196 static int hf_btmesh_generic_battery_status_time_to_discharge;
1197 static int hf_btmesh_generic_battery_status_time_to_charge;
1198 static int hf_btmesh_generic_battery_status_flags_presence;
1199 static int hf_btmesh_generic_battery_status_flags_indicator;
1200 static int hf_btmesh_generic_battery_status_flags_charging;
1201 static int hf_btmesh_generic_battery_status_flags_serviceability;
1202 static int hf_btmesh_generic_location_local_status_local_north;
1203 static int hf_btmesh_generic_location_local_status_local_east;
1204 static int hf_btmesh_generic_location_local_status_local_altitude;
1205 static int hf_btmesh_generic_location_local_status_floor_number;
1206 static int hf_btmesh_generic_location_local_status_uncertainty_stationary;
1207 static int hf_btmesh_generic_location_local_status_uncertainty_rfu;
1208 static int hf_btmesh_generic_location_local_status_uncertainty_update_time;
1209 static int hf_btmesh_generic_location_local_status_uncertainty_precision;
1210 static int hf_btmesh_generic_location_local_set_local_north;
1211 static int hf_btmesh_generic_location_local_set_local_east;
1212 static int hf_btmesh_generic_location_local_set_local_altitude;
1213 static int hf_btmesh_generic_location_local_set_floor_number;
1214 static int hf_btmesh_generic_location_local_set_uncertainty_stationary;
1215 static int hf_btmesh_generic_location_local_set_uncertainty_rfu;
1216 static int hf_btmesh_generic_location_local_set_uncertainty_update_time;
1217 static int hf_btmesh_generic_location_local_set_uncertainty_precision;
1218 static int hf_btmesh_generic_location_local_set_unacknowledged_local_north;
1219 static int hf_btmesh_generic_location_local_set_unacknowledged_local_east;
1220 static int hf_btmesh_generic_location_local_set_unacknowledged_local_altitude;
1221 static int hf_btmesh_generic_location_local_set_unacknowledged_floor_number;
1222 static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary;
1223 static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu;
1224 static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time;
1225 static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision;
1226 static int hf_btmesh_scene_status_status_code;
1227 static int hf_btmesh_scene_status_current_scene;
1228 static int hf_btmesh_scene_status_target_scene;
1229 static int hf_btmesh_scene_status_remaining_time;
1230 static int hf_btmesh_scene_status_remaining_time_steps;
1231 static int hf_btmesh_scene_status_remaining_time_resolution;
1232 static int hf_btmesh_scene_recall_scene_number;
1233 static int hf_btmesh_scene_recall_tid;
1234 static int hf_btmesh_scene_recall_transition_time;
1235 static int hf_btmesh_scene_recall_transition_time_steps;
1236 static int hf_btmesh_scene_recall_transition_time_resolution;
1237 static int hf_btmesh_scene_recall_delay;
1238 static int hf_btmesh_scene_recall_unacknowledged_scene_number;
1239 static int hf_btmesh_scene_recall_unacknowledged_tid;
1240 static int hf_btmesh_scene_recall_unacknowledged_transition_time;
1241 static int hf_btmesh_scene_recall_unacknowledged_transition_time_steps;
1242 static int hf_btmesh_scene_recall_unacknowledged_transition_time_resolution;
1243 static int hf_btmesh_scene_recall_unacknowledged_delay;
1244 static int hf_btmesh_scene_register_status_status_code;
1245 static int hf_btmesh_scene_register_status_current_scene;
1246 static int hf_btmesh_scene_register_status_scene;
1247 static int hf_btmesh_scene_store_scene_number;
1248 static int hf_btmesh_scene_store_unacknowledged_scene_number;
1249 static int hf_btmesh_scene_delete_scene_number;
1250 static int hf_btmesh_scene_delete_unacknowledged_scene_number;
1251 static int hf_btmesh_time_set_tai_seconds;
1252 static int hf_btmesh_time_set_subsecond;
1253 static int hf_btmesh_time_set_uncertainty;
1254 static int hf_btmesh_time_set_time_authority;
1255 static int hf_btmesh_time_set_tai_utc_delta;
1256 static int hf_btmesh_time_set_time_zone_offset;
1257 static int hf_btmesh_time_status_tai_seconds;
1258 static int hf_btmesh_time_status_subsecond;
1259 static int hf_btmesh_time_status_uncertainty;
1260 static int hf_btmesh_time_status_time_authority;
1261 static int hf_btmesh_time_status_tai_utc_delta;
1262 static int hf_btmesh_time_status_time_zone_offset;
1263 static int hf_btmesh_scheduler_action_status_index;
1264 static int hf_btmesh_scheduler_action_status_schedule_register_year;
1265 static int hf_btmesh_scheduler_action_status_schedule_register_month;
1266 static int hf_btmesh_scheduler_action_status_schedule_register_day;
1267 static int hf_btmesh_scheduler_action_status_schedule_register_hour;
1268 static int hf_btmesh_scheduler_action_status_schedule_register_minute;
1269 static int hf_btmesh_scheduler_action_status_schedule_register_second;
1270 static int hf_btmesh_scheduler_action_status_schedule_register_day_of_week;
1271 static int hf_btmesh_scheduler_action_status_schedule_register_action;
1272 static int hf_btmesh_scheduler_action_status_schedule_register_transition_time;
1273 static int hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps;
1274 static int hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution;
1275 static int hf_btmesh_scheduler_action_status_schedule_register_scene_number;
1276 static int hf_btmesh_scheduler_schedule_register_month_january;
1277 static int hf_btmesh_scheduler_schedule_register_month_february;
1278 static int hf_btmesh_scheduler_schedule_register_month_march;
1279 static int hf_btmesh_scheduler_schedule_register_month_april;
1280 static int hf_btmesh_scheduler_schedule_register_month_may;
1281 static int hf_btmesh_scheduler_schedule_register_month_june;
1282 static int hf_btmesh_scheduler_schedule_register_month_july;
1283 static int hf_btmesh_scheduler_schedule_register_month_august;
1284 static int hf_btmesh_scheduler_schedule_register_month_september;
1285 static int hf_btmesh_scheduler_schedule_register_month_october;
1286 static int hf_btmesh_scheduler_schedule_register_month_november;
1287 static int hf_btmesh_scheduler_schedule_register_month_december;
1288 static int hf_btmesh_scheduler_schedule_register_day_of_week_monday;
1289 static int hf_btmesh_scheduler_schedule_register_day_of_week_tuesday;
1290 static int hf_btmesh_scheduler_schedule_register_day_of_week_wednesday;
1291 static int hf_btmesh_scheduler_schedule_register_day_of_week_thursday;
1292 static int hf_btmesh_scheduler_schedule_register_day_of_week_friday;
1293 static int hf_btmesh_scheduler_schedule_register_day_of_week_saturday;
1294 static int hf_btmesh_scheduler_schedule_register_day_of_week_sunday;
1295 static int hf_btmesh_scheduler_action_set_index;
1296 static int hf_btmesh_scheduler_action_set_schedule_register_year;
1297 static int hf_btmesh_scheduler_action_set_schedule_register_month;
1298 static int hf_btmesh_scheduler_action_set_schedule_register_day;
1299 static int hf_btmesh_scheduler_action_set_schedule_register_hour;
1300 static int hf_btmesh_scheduler_action_set_schedule_register_minute;
1301 static int hf_btmesh_scheduler_action_set_schedule_register_second;
1302 static int hf_btmesh_scheduler_action_set_schedule_register_day_of_week;
1303 static int hf_btmesh_scheduler_action_set_schedule_register_action;
1304 static int hf_btmesh_scheduler_action_set_schedule_register_transition_time;
1305 static int hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps;
1306 static int hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution;
1307 static int hf_btmesh_scheduler_action_set_schedule_register_scene_number;
1308 static int hf_btmesh_scheduler_action_set_unacknowledged_index;
1309 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year;
1310 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month;
1311 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day;
1312 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour;
1313 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute;
1314 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second;
1315 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day_of_week;
1316 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action;
1317 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time;
1318 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps;
1319 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution;
1320 static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number;
1321 static int hf_btmesh_time_role_set_time_role;
1322 static int hf_btmesh_time_role_status_time_role;
1323 static int hf_btmesh_time_zone_set_time_zone_offset_new;
1324 static int hf_btmesh_time_zone_set_tai_of_zone_change;
1325 static int hf_btmesh_time_zone_status_time_zone_offset_current;
1326 static int hf_btmesh_time_zone_status_time_zone_offset_new;
1327 static int hf_btmesh_time_zone_status_tai_of_zone_change;
1328 static int hf_btmesh_tai_utc_delta_set_tai_utc_delta_new;
1329 static int hf_btmesh_tai_utc_delta_set_padding;
1330 static int hf_btmesh_tai_utc_delta_set_tai_of_delta_change;
1331 static int hf_btmesh_tai_utc_delta_status_tai_utc_delta_current;
1332 static int hf_btmesh_tai_utc_delta_status_padding_1;
1333 static int hf_btmesh_tai_utc_delta_status_tai_utc_delta_new;
1334 static int hf_btmesh_tai_utc_delta_status_padding_2;
1335 static int hf_btmesh_tai_utc_delta_status_tai_of_delta_change;
1336 static int hf_btmesh_scheduler_action_get_index;
1337 static int hf_btmesh_scheduler_status_schedules;
1338 static int hf_btmesh_scheduler_status_schedules_schedule_0;
1339 static int hf_btmesh_scheduler_status_schedules_schedule_1;
1340 static int hf_btmesh_scheduler_status_schedules_schedule_2;
1341 static int hf_btmesh_scheduler_status_schedules_schedule_3;
1342 static int hf_btmesh_scheduler_status_schedules_schedule_4;
1343 static int hf_btmesh_scheduler_status_schedules_schedule_5;
1344 static int hf_btmesh_scheduler_status_schedules_schedule_6;
1345 static int hf_btmesh_scheduler_status_schedules_schedule_7;
1346 static int hf_btmesh_scheduler_status_schedules_schedule_8;
1347 static int hf_btmesh_scheduler_status_schedules_schedule_9;
1348 static int hf_btmesh_scheduler_status_schedules_schedule_10;
1349 static int hf_btmesh_scheduler_status_schedules_schedule_11;
1350 static int hf_btmesh_scheduler_status_schedules_schedule_12;
1351 static int hf_btmesh_scheduler_status_schedules_schedule_13;
1352 static int hf_btmesh_scheduler_status_schedules_schedule_14;
1353 static int hf_btmesh_scheduler_status_schedules_schedule_15;
1355 static int hf_btmesh_light_lc_property_set_light_lc_property_id;
1356 static int hf_btmesh_light_lc_property_set_light_lc_property_value;
1357 static int hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id;
1358 static int hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_value;
1359 static int hf_btmesh_light_lc_property_status_light_lc_property_id;
1360 static int hf_btmesh_light_lc_property_status_light_lc_property_value;
1361 static int hf_btmesh_light_lightness_set_lightness;
1362 static int hf_btmesh_light_lightness_set_tid;
1363 static int hf_btmesh_light_lightness_set_transition_time;
1364 static int hf_btmesh_light_lightness_set_transition_time_steps;
1365 static int hf_btmesh_light_lightness_set_transition_time_resolution;
1366 static int hf_btmesh_light_lightness_set_delay;
1367 static int hf_btmesh_light_lightness_set_unacknowledged_lightness;
1368 static int hf_btmesh_light_lightness_set_unacknowledged_tid;
1369 static int hf_btmesh_light_lightness_set_unacknowledged_transition_time;
1370 static int hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps;
1371 static int hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution;
1372 static int hf_btmesh_light_lightness_set_unacknowledged_delay;
1373 static int hf_btmesh_light_lightness_status_present_lightness;
1374 static int hf_btmesh_light_lightness_status_target_lightness;
1375 static int hf_btmesh_light_lightness_status_remaining_time;
1376 static int hf_btmesh_light_lightness_status_remaining_time_steps;
1377 static int hf_btmesh_light_lightness_status_remaining_time_resolution;
1378 static int hf_btmesh_light_lightness_linear_set_lightness;
1379 static int hf_btmesh_light_lightness_linear_set_tid;
1380 static int hf_btmesh_light_lightness_linear_set_transition_time;
1381 static int hf_btmesh_light_lightness_linear_set_transition_time_steps;
1382 static int hf_btmesh_light_lightness_linear_set_transition_time_resolution;
1383 static int hf_btmesh_light_lightness_linear_set_delay;
1384 static int hf_btmesh_light_lightness_linear_set_unacknowledged_lightness;
1385 static int hf_btmesh_light_lightness_linear_set_unacknowledged_tid;
1386 static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time;
1387 static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps;
1388 static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution;
1389 static int hf_btmesh_light_lightness_linear_set_unacknowledged_delay;
1390 static int hf_btmesh_light_lightness_linear_status_present_lightness;
1391 static int hf_btmesh_light_lightness_linear_status_target_lightness;
1392 static int hf_btmesh_light_lightness_linear_status_remaining_time;
1393 static int hf_btmesh_light_lightness_linear_status_remaining_time_steps;
1394 static int hf_btmesh_light_lightness_linear_status_remaining_time_resolution;
1395 static int hf_btmesh_light_lightness_last_status_lightness;
1396 static int hf_btmesh_light_lightness_default_status_lightness;
1397 static int hf_btmesh_light_lightness_range_status_status_code;
1398 static int hf_btmesh_light_lightness_range_status_range_min;
1399 static int hf_btmesh_light_lightness_range_status_range_max;
1400 static int hf_btmesh_light_lightness_default_set_lightness;
1401 static int hf_btmesh_light_lightness_default_set_unacknowledged_lightness;
1402 static int hf_btmesh_light_lightness_range_set_range_min;
1403 static int hf_btmesh_light_lightness_range_set_range_max;
1404 static int hf_btmesh_light_lightness_range_set_unacknowledged_range_min;
1405 static int hf_btmesh_light_lightness_range_set_unacknowledged_range_max;
1406 static int hf_btmesh_light_ctl_set_ctl_lightness;
1407 static int hf_btmesh_light_ctl_set_ctl_temperature;
1408 static int hf_btmesh_light_ctl_set_ctl_delta_uv;
1409 static int hf_btmesh_light_ctl_set_tid;
1410 static int hf_btmesh_light_ctl_set_transition_time;
1411 static int hf_btmesh_light_ctl_set_transition_time_steps;
1412 static int hf_btmesh_light_ctl_set_transition_time_resolution;
1413 static int hf_btmesh_light_ctl_set_delay;
1414 static int hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness;
1415 static int hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature;
1416 static int hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv;
1417 static int hf_btmesh_light_ctl_set_unacknowledged_tid;
1418 static int hf_btmesh_light_ctl_set_unacknowledged_transition_time;
1419 static int hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps;
1420 static int hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution;
1421 static int hf_btmesh_light_ctl_set_unacknowledged_delay;
1422 static int hf_btmesh_light_ctl_status_present_ctl_lightness;
1423 static int hf_btmesh_light_ctl_status_present_ctl_temperature;
1424 static int hf_btmesh_light_ctl_status_target_ctl_lightness;
1425 static int hf_btmesh_light_ctl_status_target_ctl_temperature;
1426 static int hf_btmesh_light_ctl_status_remaining_time;
1427 static int hf_btmesh_light_ctl_status_remaining_time_steps;
1428 static int hf_btmesh_light_ctl_status_remaining_time_resolution;
1429 static int hf_btmesh_light_ctl_temperature_range_status_status_code;
1430 static int hf_btmesh_light_ctl_temperature_range_status_range_min;
1431 static int hf_btmesh_light_ctl_temperature_range_status_range_max;
1432 static int hf_btmesh_light_ctl_temperature_set_ctl_temperature;
1433 static int hf_btmesh_light_ctl_temperature_set_ctl_delta_uv;
1434 static int hf_btmesh_light_ctl_temperature_set_tid;
1435 static int hf_btmesh_light_ctl_temperature_set_transition_time;
1436 static int hf_btmesh_light_ctl_temperature_set_transition_time_steps;
1437 static int hf_btmesh_light_ctl_temperature_set_transition_time_resolution;
1438 static int hf_btmesh_light_ctl_temperature_set_delay;
1439 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature;
1440 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv;
1441 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_tid;
1442 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time;
1443 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps;
1444 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution;
1445 static int hf_btmesh_light_ctl_temperature_set_unacknowledged_delay;
1446 static int hf_btmesh_light_ctl_temperature_status_present_ctl_temperature;
1447 static int hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv;
1448 static int hf_btmesh_light_ctl_temperature_status_target_ctl_temperature;
1449 static int hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv;
1450 static int hf_btmesh_light_ctl_temperature_status_remaining_time;
1451 static int hf_btmesh_light_ctl_temperature_status_remaining_time_steps;
1452 static int hf_btmesh_light_ctl_temperature_status_remaining_time_resolution;
1453 static int hf_btmesh_light_ctl_default_status_lightness;
1454 static int hf_btmesh_light_ctl_default_status_temperature;
1455 static int hf_btmesh_light_ctl_default_status_delta_uv;
1456 static int hf_btmesh_light_ctl_default_set_lightness;
1457 static int hf_btmesh_light_ctl_default_set_temperature;
1458 static int hf_btmesh_light_ctl_default_set_delta_uv;
1459 static int hf_btmesh_light_ctl_default_set_unacknowledged_lightness;
1460 static int hf_btmesh_light_ctl_default_set_unacknowledged_temperature;
1461 static int hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv;
1462 static int hf_btmesh_light_ctl_temperature_range_set_range_min;
1463 static int hf_btmesh_light_ctl_temperature_range_set_range_max;
1464 static int hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min;
1465 static int hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max;
1466 static int hf_btmesh_light_hsl_hue_set_hue;
1467 static int hf_btmesh_light_hsl_hue_set_tid;
1468 static int hf_btmesh_light_hsl_hue_set_transition_time;
1469 static int hf_btmesh_light_hsl_hue_set_transition_time_steps;
1470 static int hf_btmesh_light_hsl_hue_set_transition_time_resolution;
1471 static int hf_btmesh_light_hsl_hue_set_delay;
1472 static int hf_btmesh_light_hsl_hue_set_unacknowledged_hue;
1473 static int hf_btmesh_light_hsl_hue_set_unacknowledged_tid;
1474 static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time;
1475 static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps;
1476 static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution;
1477 static int hf_btmesh_light_hsl_hue_set_unacknowledged_delay;
1478 static int hf_btmesh_light_hsl_hue_status_present_hue;
1479 static int hf_btmesh_light_hsl_hue_status_target_hue;
1480 static int hf_btmesh_light_hsl_hue_status_remaining_time;
1481 static int hf_btmesh_light_hsl_hue_status_remaining_time_steps;
1482 static int hf_btmesh_light_hsl_hue_status_remaining_time_resolution;
1483 static int hf_btmesh_light_hsl_saturation_set_saturation;
1484 static int hf_btmesh_light_hsl_saturation_set_tid;
1485 static int hf_btmesh_light_hsl_saturation_set_transition_time;
1486 static int hf_btmesh_light_hsl_saturation_set_transition_time_steps;
1487 static int hf_btmesh_light_hsl_saturation_set_transition_time_resolution;
1488 static int hf_btmesh_light_hsl_saturation_set_delay;
1489 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation;
1490 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_tid;
1491 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time;
1492 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps;
1493 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution;
1494 static int hf_btmesh_light_hsl_saturation_set_unacknowledged_delay;
1495 static int hf_btmesh_light_hsl_saturation_status_present_saturation;
1496 static int hf_btmesh_light_hsl_saturation_status_target_saturation;
1497 static int hf_btmesh_light_hsl_saturation_status_remaining_time;
1498 static int hf_btmesh_light_hsl_saturation_status_remaining_time_steps;
1499 static int hf_btmesh_light_hsl_saturation_status_remaining_time_resolution;
1500 static int hf_btmesh_light_hsl_set_hsl_lightness;
1501 static int hf_btmesh_light_hsl_set_hsl_hue;
1502 static int hf_btmesh_light_hsl_set_hsl_saturation;
1503 static int hf_btmesh_light_hsl_set_tid;
1504 static int hf_btmesh_light_hsl_set_transition_time;
1505 static int hf_btmesh_light_hsl_set_transition_time_steps;
1506 static int hf_btmesh_light_hsl_set_transition_time_resolution;
1507 static int hf_btmesh_light_hsl_set_delay;
1508 static int hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness;
1509 static int hf_btmesh_light_hsl_set_unacknowledged_hsl_hue;
1510 static int hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation;
1511 static int hf_btmesh_light_hsl_set_unacknowledged_tid;
1512 static int hf_btmesh_light_hsl_set_unacknowledged_transition_time;
1513 static int hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps;
1514 static int hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution;
1515 static int hf_btmesh_light_hsl_set_unacknowledged_delay;
1516 static int hf_btmesh_light_hsl_status_hsl_lightness;
1517 static int hf_btmesh_light_hsl_status_hsl_hue;
1518 static int hf_btmesh_light_hsl_status_hsl_saturation;
1519 static int hf_btmesh_light_hsl_status_remaining_time;
1520 static int hf_btmesh_light_hsl_status_remaining_time_steps;
1521 static int hf_btmesh_light_hsl_status_remaining_time_resolution;
1522 static int hf_btmesh_light_hsl_target_status_hsl_lightness_target;
1523 static int hf_btmesh_light_hsl_target_status_hsl_hue_target;
1524 static int hf_btmesh_light_hsl_target_status_hsl_saturation_target;
1525 static int hf_btmesh_light_hsl_target_status_remaining_time;
1526 static int hf_btmesh_light_hsl_target_status_remaining_time_steps;
1527 static int hf_btmesh_light_hsl_target_status_remaining_time_resolution;
1528 static int hf_btmesh_light_hsl_default_status_lightness;
1529 static int hf_btmesh_light_hsl_default_status_hue;
1530 static int hf_btmesh_light_hsl_default_status_saturation;
1531 static int hf_btmesh_light_hsl_range_status_status_code;
1532 static int hf_btmesh_light_hsl_range_status_hue_range_min;
1533 static int hf_btmesh_light_hsl_range_status_hue_range_max;
1534 static int hf_btmesh_light_hsl_range_status_saturation_range_min;
1535 static int hf_btmesh_light_hsl_range_status_saturation_range_max;
1536 static int hf_btmesh_light_hsl_default_set_lightness;
1537 static int hf_btmesh_light_hsl_default_set_hue;
1538 static int hf_btmesh_light_hsl_default_set_saturation;
1539 static int hf_btmesh_light_hsl_default_set_unacknowledged_lightness;
1540 static int hf_btmesh_light_hsl_default_set_unacknowledged_hue;
1541 static int hf_btmesh_light_hsl_default_set_unacknowledged_saturation;
1542 static int hf_btmesh_light_hsl_range_set_hue_range_min;
1543 static int hf_btmesh_light_hsl_range_set_hue_range_max;
1544 static int hf_btmesh_light_hsl_range_set_saturation_range_min;
1545 static int hf_btmesh_light_hsl_range_set_saturation_range_max;
1546 static int hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min;
1547 static int hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max;
1548 static int hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min;
1549 static int hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max;
1550 static int hf_btmesh_light_xyl_set_xyl_lightness;
1551 static int hf_btmesh_light_xyl_set_xyl_x;
1552 static int hf_btmesh_light_xyl_set_xyl_y;
1553 static int hf_btmesh_light_xyl_set_tid;
1554 static int hf_btmesh_light_xyl_set_transition_time;
1555 static int hf_btmesh_light_xyl_set_transition_time_steps;
1556 static int hf_btmesh_light_xyl_set_transition_time_resolution;
1557 static int hf_btmesh_light_xyl_set_delay;
1558 static int hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness;
1559 static int hf_btmesh_light_xyl_set_unacknowledged_xyl_x;
1560 static int hf_btmesh_light_xyl_set_unacknowledged_xyl_y;
1561 static int hf_btmesh_light_xyl_set_unacknowledged_tid;
1562 static int hf_btmesh_light_xyl_set_unacknowledged_transition_time;
1563 static int hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps;
1564 static int hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution;
1565 static int hf_btmesh_light_xyl_set_unacknowledged_delay;
1566 static int hf_btmesh_light_xyl_status_xyl_lightness;
1567 static int hf_btmesh_light_xyl_status_xyl_x;
1568 static int hf_btmesh_light_xyl_status_xyl_y;
1569 static int hf_btmesh_light_xyl_status_remaining_time;
1570 static int hf_btmesh_light_xyl_status_remaining_time_steps;
1571 static int hf_btmesh_light_xyl_status_remaining_time_resolution;
1572 static int hf_btmesh_light_xyl_target_status_target_xyl_lightness;
1573 static int hf_btmesh_light_xyl_target_status_target_xyl_x;
1574 static int hf_btmesh_light_xyl_target_status_target_xyl_y;
1575 static int hf_btmesh_light_xyl_target_status_remaining_time;
1576 static int hf_btmesh_light_xyl_target_status_remaining_time_steps;
1577 static int hf_btmesh_light_xyl_target_status_remaining_time_resolution;
1578 static int hf_btmesh_light_xyl_default_status_lightness;
1579 static int hf_btmesh_light_xyl_default_status_xyl_x;
1580 static int hf_btmesh_light_xyl_default_status_xyl_y;
1581 static int hf_btmesh_light_xyl_range_status_status_code;
1582 static int hf_btmesh_light_xyl_range_status_xyl_x_range_min;
1583 static int hf_btmesh_light_xyl_range_status_xyl_x_range_max;
1584 static int hf_btmesh_light_xyl_range_status_xyl_y_range_min;
1585 static int hf_btmesh_light_xyl_range_status_xyl_y_range_max;
1586 static int hf_btmesh_light_xyl_default_set_lightness;
1587 static int hf_btmesh_light_xyl_default_set_xyl_x;
1588 static int hf_btmesh_light_xyl_default_set_xyl_y;
1589 static int hf_btmesh_light_xyl_default_set_unacknowledged_lightness;
1590 static int hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x;
1591 static int hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y;
1592 static int hf_btmesh_light_xyl_range_set_xyl_x_range_min;
1593 static int hf_btmesh_light_xyl_range_set_xyl_x_range_max;
1594 static int hf_btmesh_light_xyl_range_set_xyl_y_range_min;
1595 static int hf_btmesh_light_xyl_range_set_xyl_y_range_max;
1596 static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min;
1597 static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max;
1598 static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min;
1599 static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max;
1600 static int hf_btmesh_light_lc_mode_set_mode;
1601 static int hf_btmesh_light_lc_mode_set_unacknowledged_mode;
1602 static int hf_btmesh_light_lc_mode_status_mode;
1603 static int hf_btmesh_light_lc_om_set_mode;
1604 static int hf_btmesh_light_lc_om_set_unacknowledged_mode;
1605 static int hf_btmesh_light_lc_om_status_mode;
1606 static int hf_btmesh_light_lc_light_onoff_set_light_onoff;
1607 static int hf_btmesh_light_lc_light_onoff_set_tid;
1608 static int hf_btmesh_light_lc_light_onoff_set_transition_time;
1609 static int hf_btmesh_light_lc_light_onoff_set_transition_time_steps;
1610 static int hf_btmesh_light_lc_light_onoff_set_transition_time_resolution;
1611 static int hf_btmesh_light_lc_light_onoff_set_delay;
1612 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff;
1613 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid;
1614 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time;
1615 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps;
1616 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution;
1617 static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay;
1618 static int hf_btmesh_light_lc_light_onoff_status_present_light_onoff;
1619 static int hf_btmesh_light_lc_light_onoff_status_target_light_onoff;
1620 static int hf_btmesh_light_lc_light_onoff_status_remaining_time;
1621 static int hf_btmesh_light_lc_light_onoff_status_remaining_time_steps;
1622 static int hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution;
1623 static int hf_btmesh_light_lc_property_get_light_lc_property_id;
1625 static int hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id;
1626 static int hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id;
1627 static int hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access;
1628 static int hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id;
1629 static int hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access;
1630 static int hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id;
1631 static int hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access;
1632 static int hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value;
1633 static int hf_btmesh_generic_admin_properties_status_admin_property_id;
1634 static int hf_btmesh_generic_admin_property_set_admin_property_id;
1635 static int hf_btmesh_generic_admin_property_set_admin_user_access;
1636 static int hf_btmesh_generic_admin_property_set_admin_property_value;
1637 static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id;
1638 static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access;
1639 static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value;
1640 static int hf_btmesh_generic_admin_property_status_admin_property_id;
1641 static int hf_btmesh_generic_admin_property_status_admin_user_access;
1642 static int hf_btmesh_generic_admin_property_status_admin_property_value;
1643 static int hf_btmesh_generic_user_properties_status_user_property_id;
1644 static int hf_btmesh_generic_user_property_set_user_property_id;
1645 static int hf_btmesh_generic_user_property_set_user_property_value;
1646 static int hf_btmesh_generic_user_property_set_unacknowledged_user_property_id;
1647 static int hf_btmesh_generic_user_property_set_unacknowledged_user_property_value;
1648 static int hf_btmesh_generic_user_property_status_user_property_id;
1649 static int hf_btmesh_generic_user_property_status_user_access;
1650 static int hf_btmesh_generic_user_property_status_user_property_value;
1651 static int hf_btmesh_generic_client_properties_get_client_property_id;
1652 static int hf_btmesh_generic_client_properties_status_client_property_id;
1653 static int hf_btmesh_sensor_descriptor_get_property_id;
1654 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id;
1655 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance;
1656 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance;
1657 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function;
1658 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period;
1659 static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval;
1660 static int hf_btmesh_sensor_status_mpid_format;
1661 static int hf_btmesh_sensor_status_mpid_format_a_length;
1662 static int hf_btmesh_sensor_status_mpid_format_a_property_id;
1663 static int hf_btmesh_sensor_status_mpid_format_b_length;
1664 static int hf_btmesh_sensor_status_mpid_format_b_property_id;
1665 static int hf_btmesh_sensor_status_raw_value;
1666 static int hf_btmesh_sensor_column_status_property_id;
1667 static int hf_btmesh_sensor_column_status_raw_value_a;
1668 static int hf_btmesh_sensor_column_status_raw_value_b;
1669 static int hf_btmesh_sensor_column_status_raw_value_c;
1670 static int hf_btmesh_sensor_series_status_property_id;
1671 static int hf_btmesh_sensor_series_status_raw_value_a;
1672 static int hf_btmesh_sensor_series_status_raw_value_b;
1673 static int hf_btmesh_sensor_series_status_raw_value_c;
1674 static int hf_btmesh_sensor_cadence_set_property_id;
1675 static int hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor;
1676 static int hf_btmesh_sensor_cadence_set_status_trigger_type;
1677 static int hf_btmesh_sensor_cadence_set_status_trigger_delta_down;
1678 static int hf_btmesh_sensor_cadence_set_status_trigger_delta_up;
1679 static int hf_btmesh_sensor_cadence_set_status_min_interval;
1680 static int hf_btmesh_sensor_cadence_set_fast_cadence_low;
1681 static int hf_btmesh_sensor_cadence_set_fast_cadence_high;
1682 static int hf_btmesh_sensor_cadence_set_remainder_not_dissected;
1683 static int hf_btmesh_sensor_cadence_set_unacknowledged_property_id;
1684 static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor;
1685 static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type;
1686 static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down;
1687 static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up;
1688 static int hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval;
1689 static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low;
1690 static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high;
1691 static int hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected;
1692 static int hf_btmesh_sensor_cadence_status_property_id;
1693 static int hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor;
1694 static int hf_btmesh_sensor_cadence_status_status_trigger_type;
1695 static int hf_btmesh_sensor_cadence_status_status_trigger_delta_down;
1696 static int hf_btmesh_sensor_cadence_status_status_trigger_delta_up;
1697 static int hf_btmesh_sensor_cadence_status_status_min_interval;
1698 static int hf_btmesh_sensor_cadence_status_fast_cadence_low;
1699 static int hf_btmesh_sensor_cadence_status_fast_cadence_high;
1700 static int hf_btmesh_sensor_cadence_status_remainder_not_dissected;
1701 static int hf_btmesh_sensor_settings_status_sensor_property_id;
1702 static int hf_btmesh_sensor_settings_status_sensor_setting_property_id;
1703 static int hf_btmesh_sensor_setting_set_sensor_property_id;
1704 static int hf_btmesh_sensor_setting_set_sensor_setting_property_id;
1705 static int hf_btmesh_sensor_setting_set_sensor_setting_raw;
1706 static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id;
1707 static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id;
1708 static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw;
1709 static int hf_btmesh_sensor_setting_status_sensor_property_id;
1710 static int hf_btmesh_sensor_setting_status_sensor_setting_property_id;
1711 static int hf_btmesh_sensor_setting_status_sensor_setting_access;
1712 static int hf_btmesh_sensor_setting_status_sensor_setting_raw;
1713 static int hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id;
1714 static int hf_btmesh_generic_admin_property_get_admin_property_id;
1715 static int hf_btmesh_generic_user_property_get_user_property_id;
1717 static int hf_btmesh_sensor_get_property_id;
1718 static int hf_btmesh_sensor_column_get_property_id;
1719 static int hf_btmesh_sensor_column_get_raw_value_a;
1720 static int hf_btmesh_sensor_series_get_property_id;
1721 static int hf_btmesh_sensor_series_get_raw_value_a1;
1722 static int hf_btmesh_sensor_series_get_raw_value_a2;
1723 static int hf_btmesh_sensor_cadence_get_property_id;
1724 static int hf_btmesh_sensor_settings_get_sensor_property_id;
1725 static int hf_btmesh_sensor_setting_get_sensor_property_id;
1726 static int hf_btmesh_sensor_setting_get_sensor_setting_property_id;
1728 static int hf_bt_phony_characteristic_percentage_change_16;
1729 static int hf_bt_phony_characteristic_index;
1730 static int hf_bt_characteristic_time_decihour_8;
1731 static int hf_bt_characteristic_temperature_8;
1732 static int hf_bt_characteristic_temperature;
1733 static int hf_bt_characteristic_electric_current;
1734 static int hf_bt_characteristic_energy;
1735 static int hf_bt_characteristic_generic_level;
1736 static int hf_bt_characteristic_boolean;
1737 static int hf_bt_characteristic_coefficient;
1738 static int hf_bt_characteristic_count_16;
1739 static int hf_bt_characteristic_illuminance;
1740 static int hf_bt_characteristic_perceived_lightness;
1741 static int hf_bt_characteristic_percentage_8;
1742 static int hf_bt_characteristic_time_millisecond_24;
1743 static int hf_bt_characteristic_time_second_16;
1745 static const
1746 bt_property_raw_value_entry_t sensor_column_status_hfs = {
1747 .hf_raw_value_a = &hf_btmesh_sensor_column_status_raw_value_a,
1748 .hf_raw_value_b = &hf_btmesh_sensor_column_status_raw_value_b,
1749 .hf_raw_value_c = &hf_btmesh_sensor_column_status_raw_value_c
1752 static const
1753 bt_property_raw_value_entry_t sensor_series_status_hfs = {
1754 .hf_raw_value_a = &hf_btmesh_sensor_series_status_raw_value_a,
1755 .hf_raw_value_b = &hf_btmesh_sensor_series_status_raw_value_b,
1756 .hf_raw_value_c = &hf_btmesh_sensor_series_status_raw_value_c
1759 static const
1760 bt_sensor_cadence_dissector_t sensor_cadence_set_hfs = {
1761 .hf_status_trigger_delta_up = &hf_btmesh_sensor_cadence_set_status_trigger_delta_down,
1762 .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_set_status_trigger_delta_up,
1763 .hf_status_min_interval = &hf_btmesh_sensor_cadence_set_status_min_interval,
1764 .hf_fast_cadence_low = &hf_btmesh_sensor_cadence_set_fast_cadence_low,
1765 .hf_fast_cadence_high = &hf_btmesh_sensor_cadence_set_fast_cadence_high,
1766 .hf_remainder_not_dissected = &hf_btmesh_sensor_cadence_set_remainder_not_dissected
1769 static const
1770 bt_sensor_cadence_dissector_t sensor_cadence_set_unacknowledged_hfs = {
1771 .hf_status_trigger_delta_up = &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down,
1772 .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up,
1773 .hf_status_min_interval = &hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval,
1774 .hf_fast_cadence_low = &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low,
1775 .hf_fast_cadence_high = &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high,
1776 .hf_remainder_not_dissected = &hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected
1779 static const
1780 bt_sensor_cadence_dissector_t sensor_cadence_status_hfs = {
1781 .hf_status_trigger_delta_up = &hf_btmesh_sensor_cadence_status_status_trigger_delta_down,
1782 .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_status_status_trigger_delta_up,
1783 .hf_status_min_interval = &hf_btmesh_sensor_cadence_status_status_min_interval,
1784 .hf_fast_cadence_low = &hf_btmesh_sensor_cadence_status_fast_cadence_low,
1785 .hf_fast_cadence_high = &hf_btmesh_sensor_cadence_status_fast_cadence_high,
1786 .hf_remainder_not_dissected = &hf_btmesh_sensor_cadence_status_remainder_not_dissected
1789 static const
1790 bt_property_columns_raw_value_t sensor_column_get_hfs = {
1791 .hf_raw_value_a1 = &hf_btmesh_sensor_column_get_raw_value_a,
1792 .hf_raw_value_a2 = NULL
1795 static const
1796 bt_property_columns_raw_value_t sensor_series_get_hfs = {
1797 .hf_raw_value_a1 = &hf_btmesh_sensor_series_get_raw_value_a1,
1798 .hf_raw_value_a2 = &hf_btmesh_sensor_series_get_raw_value_a2
1801 static int ett_btmesh;
1802 static int ett_btmesh_net_pdu;
1803 static int ett_btmesh_transp_pdu;
1804 static int ett_btmesh_transp_ctrl_msg;
1805 static int ett_btmesh_upper_transp_acc_pdu;
1806 static int ett_btmesh_segmented_access_fragments;
1807 static int ett_btmesh_segmented_access_fragment;
1808 static int ett_btmesh_segmented_control_fragments;
1809 static int ett_btmesh_segmented_control_fragment;
1810 static int ett_btmesh_access_pdu;
1811 static int ett_btmesh_model_layer;
1813 static int ett_btmesh_config_model_netapp_index;
1814 static int ett_btmesh_config_model_publishperiod;
1815 static int ett_btmesh_config_model_publishretransmit;
1816 static int ett_btmesh_config_model_relayretransmit;
1817 static int ett_btmesh_config_model_network_transmit;
1818 static int ett_btmesh_config_model_element;
1819 static int ett_btmesh_config_model_model;
1820 static int ett_btmesh_config_model_vendor;
1821 static int ett_btmesh_config_composition_data_status_features;
1822 static int ett_btmesh_config_model_pub_app_index;
1823 static int ett_btmesh_config_model_addresses;
1824 static int ett_btmesh_config_model_netkey_list;
1825 static int ett_btmesh_config_model_appkey_list;
1826 static int ett_btmesh_config_model_net_index;
1827 static int ett_btmesh_config_model_app_index;
1828 static int ett_btmesh_config_heartbeat_publication_set_features;
1829 static int ett_btmesh_config_heartbeat_publication_status_features;
1830 static int ett_btmesh_config_model_fault_array;
1831 static int ett_btmesh_scene_register_status_scenes;
1832 static int ett_btmesh_scheduler_model_month;
1833 static int ett_btmesh_scheduler_model_day_of_week;
1834 static int ett_btmesh_scheduler_schedules;
1835 static int ett_btmesh_user_property_ids;
1836 static int ett_btmesh_admin_property_ids;
1837 static int ett_btmesh_manufacturer_property_ids;
1838 static int ett_btmesh_generic_client_property_ids;
1839 static int ett_btmesh_sensor_setting_property_ids;
1841 static expert_field ei_btmesh_not_decoded_yet;
1842 static expert_field ei_btmesh_unknown_payload;
1844 static const value_string btmesh_ctl_vals[] = {
1845 { 0, "Access Message" },
1846 { 1, "Control Message" },
1847 { 0, NULL }
1850 static const value_string btmesh_ctrl_seg_vals[] = {
1851 { 0, "Unsegmented Control Message" },
1852 { 1, "Segmented Control Message" },
1853 { 0, NULL }
1856 static const value_string btmesh_acc_seg_vals[] = {
1857 { 0, "Unsegmented Access Message" },
1858 { 1, "Segmented Access Message" },
1859 { 0, NULL }
1862 static const value_string btmesh_acc_akf_vals[] = {
1863 { 0, "Device key" },
1864 { 1, "Application key" },
1865 { 0, NULL }
1868 static const value_string btmesh_ctrl_opcode_vals[] = {
1869 { 0x0, "Segment Acknowledgment" }, /* Reserved for lower transport layer */
1870 { 0x1, "Friend Poll" },
1871 { 0x2, "Friend Update" },
1872 { 0x3, "Friend Request" },
1873 { 0x4, "Friend Offer" },
1874 { 0x5, "Friend Clear" },
1875 { 0x6, "Friend Clear Confirm" },
1876 { 0x7, "Friend Subscription List Add" },
1877 { 0x8, "Friend Subscription List Remove" },
1878 { 0x9, "Friend Subscription List Confirm" },
1879 { 0xa, "Heartbeat" },
1880 { 0, NULL }
1883 static const value_string btmesh_cntr_key_refresh_flag_vals[] = {
1884 { 0x0, "Not-In-Phase2" },
1885 { 0x1, "In-Phase2" },
1886 { 0, NULL }
1889 static const value_string btmesh_cntr_iv_update_flag_vals[] = {
1890 { 0x0, "Normal operation" },
1891 { 0x1, "IV Update active" },
1892 { 0, NULL }
1895 static const value_string btmesh_cntr_md_vals[] = {
1896 { 0x0, "Friend Queue is empty" },
1897 { 0x1, "Friend Queue is not empty" },
1898 { 0, NULL }
1901 static const true_false_string btmesh_obo = {
1902 "Friend node that is acknowledging this message on behalf of a Low Power node",
1903 "Node that is directly addressed by the received message"
1906 static const value_string btmesh_criteria_rssifactor_vals[] = {
1907 { 0x0, "1" },
1908 { 0x1, "1.5" },
1909 { 0x2, "2" },
1910 { 0x3, "2.5" },
1911 { 0, NULL }
1914 static const value_string btmesh_criteria_receivewindowfactor_vals[] = {
1915 { 0x0, "1" },
1916 { 0x1, "1.5" },
1917 { 0x2, "2" },
1918 { 0x3, "2.5" },
1919 { 0, NULL }
1922 static const value_string btmesh_criteria_minqueuesizelog_vals[] = {
1923 { 0x0, "Prohibited" },
1924 { 0x1, "N = 2" },
1925 { 0x2, "N = 4" },
1926 { 0x3, "N = 8" },
1927 { 0x4, "N = 16" },
1928 { 0x5, "N = 32" },
1929 { 0x6, "N = 64" },
1930 { 0x7, "N = 128" },
1931 { 0, NULL }
1934 static const value_string btmesh_szmic_vals[] = {
1935 { 0x0, "32-bit" },
1936 { 0x1, "64-bit" },
1937 { 0, NULL }
1940 static const value_string btmesh_models_opcode_vals[] = {
1941 /* Bluetooth Mesh Foundation messages */
1942 { CONFIG_APPKEY_ADD , "Config AppKey Add" },
1943 { CONFIG_APPKEY_UPDATE , "Config AppKey Update" },
1944 { CONFIG_COMPOSITION_DATA_STATUS , "Config Composition Data Status" },
1945 { CONFIG_MODEL_PUBLICATION_SET , "Config Model Publication Set" },
1946 { HEALTH_CURRENT_STATUS , "Health Current Status" },
1947 { HEALTH_FAULT_STATUS , "Health Fault Status" },
1948 { CONFIG_HEARTBEAT_PUBLICATION_STATUS , "Config Heartbeat Publication Status" },
1949 { CONFIG_APPKEY_DELETE , "Config AppKey Delete" },
1950 { CONFIG_APPKEY_GET , "Config AppKey Get" },
1951 { CONFIG_APPKEY_LIST , "Config AppKey List" },
1952 { CONFIG_APPKEY_STATUS , "Config AppKey Status" },
1953 { HEALTH_ATTENTION_GET , "Health Attention Get" },
1954 { HEALTH_ATTENTION_SET , "Health Attention Set" },
1955 { HEALTH_ATTENTION_SET_UNACKNOWLEDGED , "Health Attention Set Unacknowledged" },
1956 { HEALTH_ATTENTION_STATUS , "Health Attention Status" },
1957 { CONFIG_COMPOSITION_DATA_GET , "Config Composition Data Get" },
1958 { CONFIG_BEACON_GET , "Config Beacon Get" },
1959 { CONFIG_BEACON_SET , "Config Beacon Set" },
1960 { CONFIG_BEACON_STATUS , "Config Beacon Status" },
1961 { CONFIG_DEFAULT_TTL_GET , "Config Default TTL Get" },
1962 { CONFIG_DEFAULT_TTL_SET , "Config Default TTL Set" },
1963 { CONFIG_DEFAULT_TTL_STATUS , "Config Default TTL Status" },
1964 { CONFIG_FRIEND_GET , "Config Friend Get" },
1965 { CONFIG_FRIEND_SET , "Config Friend Set" },
1966 { CONFIG_FRIEND_STATUS , "Config Friend Status" },
1967 { CONFIG_GATT_PROXY_GET , "Config GATT Proxy Get" },
1968 { CONFIG_GATT_PROXY_SET , "Config GATT Proxy Set" },
1969 { CONFIG_GATT_PROXY_STATUS , "Config GATT Proxy Status" },
1970 { CONFIG_KEY_REFRESH_PHASE_GET , "Config Key Refresh Phase Get" },
1971 { CONFIG_KEY_REFRESH_PHASE_SET , "Config Key Refresh Phase Set" },
1972 { CONFIG_KEY_REFRESH_PHASE_STATUS , "Config Key Refresh Phase Status" },
1973 { CONFIG_MODEL_PUBLICATION_GET , "Config Model Publication Get" },
1974 { CONFIG_MODEL_PUBLICATION_STATUS , "Config Model Publication Status" },
1975 { CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET , "Config Model Publication Virtual Address Set" },
1976 { CONFIG_MODEL_SUBSCRIPTION_ADD , "Config Model Subscription Add" },
1977 { CONFIG_MODEL_SUBSCRIPTION_DELETE , "Config Model Subscription Delete" },
1978 { CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL , "Config Model Subscription Delete All" },
1979 { CONFIG_MODEL_SUBSCRIPTION_OVERWRITE , "Config Model Subscription Overwrite" },
1980 { CONFIG_MODEL_SUBSCRIPTION_STATUS , "Config Model Subscription Status" },
1981 { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD , "Config Model Subscription Virtual Address Add" },
1982 { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE , "Config Model Subscription Virtual Address Delete" },
1983 { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE , "Config Model Subscription Virtual Address Overwrite"},
1984 { CONFIG_NETWORK_TRANSMIT_GET , "Config Network Transmit Get" },
1985 { CONFIG_NETWORK_TRANSMIT_SET , "Config Network Transmit Set" },
1986 { CONFIG_NETWORK_TRANSMIT_STATUS , "Config Network Transmit Status" },
1987 { CONFIG_RELAY_GET , "Config Relay Get" },
1988 { CONFIG_RELAY_SET , "Config Relay Set" },
1989 { CONFIG_RELAY_STATUS , "Config Relay Status" },
1990 { CONFIG_SIG_MODEL_SUBSCRIPTION_GET , "Config SIG Model Subscription Get" },
1991 { CONFIG_SIG_MODEL_SUBSCRIPTION_LIST , "Config SIG Model Subscription List" },
1992 { CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET , "Config Vendor Model Subscription Get" },
1993 { CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST , "Config Vendor Model Subscription List" },
1994 { CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET , "Config Low Power Node PollTimeout Get" },
1995 { CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS , "Config Low Power Node PollTimeout Status" },
1996 { HEALTH_FAULT_CLEAR , "Health Fault Clear" },
1997 { HEALTH_FAULT_CLEAR_UNACKNOWLEDGED , "Health Fault Clear Unacknowledged" },
1998 { HEALTH_FAULT_GET , "Health Fault Get" },
1999 { HEALTH_FAULT_TEST , "Health Fault Test" },
2000 { HEALTH_FAULT_TEST_UNACKNOWLEDGED , "Health Fault Test Unacknowledged" },
2001 { HEALTH_PERIOD_GET , "Health Period Get" },
2002 { HEALTH_PERIOD_SET , "Health Period Set" },
2003 { HEALTH_PERIOD_SET_UNACKNOWLEDGED , "Health Period Set Unacknowledged" },
2004 { HEALTH_PERIOD_STATUS , "Health Period Status" },
2005 { CONFIG_HEARTBEAT_PUBLICATION_GET , "Config Heartbeat Publication Get" },
2006 { CONFIG_HEARTBEAT_PUBLICATION_SET , "Config Heartbeat Publication Set" },
2007 { CONFIG_HEARTBEAT_SUBSCRIPTION_GET , "Config Heartbeat Subscription Get" },
2008 { CONFIG_HEARTBEAT_SUBSCRIPTION_SET , "Config Heartbeat Subscription Set" },
2009 { CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS , "Config Heartbeat Subscription Status" },
2010 { CONFIG_MODEL_APP_BIND , "Config Model App Bind" },
2011 { CONFIG_MODEL_APP_STATUS , "Config Model App Status" },
2012 { CONFIG_MODEL_APP_UNBIND , "Config Model App Unbind" },
2013 { CONFIG_NETKEY_ADD , "Config NetKey Add" },
2014 { CONFIG_NETKEY_DELETE , "Config NetKey Delete" },
2015 { CONFIG_NETKEY_GET , "Config NetKey Get" },
2016 { CONFIG_NETKEY_LIST , "Config NetKey List" },
2017 { CONFIG_NETKEY_STATUS , "Config NetKey Status" },
2018 { CONFIG_NETKEY_UPDATE , "Config NetKey Update" },
2019 { CONFIG_NODE_IDENTITY_GET , "Config Node Identity Get" },
2020 { CONFIG_NODE_IDENTITY_SET , "Config Node Identity Set" },
2021 { CONFIG_NODE_IDENTITY_STATUS , "Config Node Identity Status" },
2022 { CONFIG_NODE_RESET , "Config Node Reset" },
2023 { CONFIG_NODE_RESET_STATUS , "Config Node Reset Status" },
2024 { CONFIG_SIG_MODEL_APP_GET , "Config SIG Model App Get" },
2025 { CONFIG_SIG_MODEL_APP_LIST , "Config SIG Model App List" },
2026 { CONFIG_VENDOR_MODEL_APP_GET , "Config Vendor Model App Get" },
2027 { CONFIG_VENDOR_MODEL_APP_LIST , "Config Vendor Model App List" },
2029 /* Bluetooth Mesh Model messages */
2030 { GENERIC_ONOFF_GET , "Generic OnOff Get" },
2031 { GENERIC_ONOFF_SET , "Generic OnOff Set" },
2032 { GENERIC_ONOFF_SET_UNACKNOWLEDGED , "Generic OnOff Set Unacknowledged" },
2033 { GENERIC_ONOFF_STATUS , "Generic OnOff Status" },
2034 { GENERIC_LEVEL_GET , "Generic Level Get" },
2035 { GENERIC_LEVEL_SET , "Generic Level Set" },
2036 { GENERIC_LEVEL_SET_UNACKNOWLEDGED , "Generic Level Set Unacknowledged" },
2037 { GENERIC_LEVEL_STATUS , "Generic Level Status" },
2038 { GENERIC_DELTA_SET , "Generic Delta Set" },
2039 { GENERIC_DELTA_SET_UNACKNOWLEDGED , "Generic Delta Set Unacknowledged" },
2040 { GENERIC_MOVE_SET , "Generic Move Set" },
2041 { GENERIC_MOVE_SET_UNACKNOWLEDGED , "Generic Move Set Unacknowledged" },
2042 { GENERIC_DEFAULT_TRANSITION_TIME_GET , "Generic Default Transition Time Get" },
2043 { GENERIC_DEFAULT_TRANSITION_TIME_SET , "Generic Default Transition Time Set" },
2044 { GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED , "Generic Default Transition Time Set Unacknowledged" },
2045 { GENERIC_DEFAULT_TRANSITION_TIME_STATUS , "Generic Default Transition Time Status" },
2046 { GENERIC_ONPOWERUP_GET , "Generic OnPowerUp Get" },
2047 { GENERIC_ONPOWERUP_STATUS , "Generic OnPowerUp Status" },
2048 { GENERIC_ONPOWERUP_SET , "Generic OnPowerUp Set" },
2049 { GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED , "Generic OnPowerUp Set Unacknowledged" },
2050 { GENERIC_POWER_LEVEL_GET , "Generic Power Level Get" },
2051 { GENERIC_POWER_LEVEL_SET , "Generic Power Level Set" },
2052 { GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED , "Generic Power Level Set Unacknowledged" },
2053 { GENERIC_POWER_LEVEL_STATUS , "Generic Power Level Status" },
2054 { GENERIC_POWER_LAST_GET , "Generic Power Last Get" },
2055 { GENERIC_POWER_LAST_STATUS , "Generic Power Last Status" },
2056 { GENERIC_POWER_DEFAULT_GET , "Generic Power Default Get" },
2057 { GENERIC_POWER_DEFAULT_STATUS , "Generic Power Default Status" },
2058 { GENERIC_POWER_RANGE_GET , "Generic Power Range Get" },
2059 { GENERIC_POWER_RANGE_STATUS , "Generic Power Range Status" },
2060 { GENERIC_POWER_DEFAULT_SET , "Generic Power Default Set" },
2061 { GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED , "Generic Power Default Set Unacknowledged" },
2062 { GENERIC_POWER_RANGE_SET , "Generic Power Range Set" },
2063 { GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED , "Generic Power Range Set Unacknowledged" },
2064 { GENERIC_BATTERY_GET , "Generic Battery Get" },
2065 { GENERIC_BATTERY_STATUS , "Generic Battery Status" },
2066 { GENERIC_LOCATION_GLOBAL_GET , "Generic Location Global Get" },
2067 { GENERIC_LOCATION_GLOBAL_STATUS , "Generic Location Global Status" },
2068 { GENERIC_LOCATION_LOCAL_GET , "Generic Location Local Get" },
2069 { GENERIC_LOCATION_LOCAL_STATUS , "Generic Location Local Status" },
2070 { GENERIC_LOCATION_GLOBAL_SET , "Generic Location Global Set" },
2071 { GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED , "Generic Location Global Set Unacknowledged" },
2072 { GENERIC_LOCATION_LOCAL_SET , "Generic Location Local Set" },
2073 { GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED , "Generic Location Local Set Unacknowledged" },
2074 { GENERIC_MANUFACTURER_PROPERTIES_GET , "Generic Manufacturer Properties Get" },
2075 { GENERIC_MANUFACTURER_PROPERTIES_STATUS , "Generic Manufacturer Properties Status" },
2076 { GENERIC_MANUFACTURER_PROPERTY_GET , "Generic Manufacturer Property Get" },
2077 { GENERIC_MANUFACTURER_PROPERTY_SET , "Generic Manufacturer Property Set" },
2078 { GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED , "Generic Manufacturer Property Set Unacknowledged" },
2079 { GENERIC_MANUFACTURER_PROPERTY_STATUS , "Generic Manufacturer Property Status" },
2080 { GENERIC_ADMIN_PROPERTIES_GET , "Generic Admin Properties Get" },
2081 { GENERIC_ADMIN_PROPERTIES_STATUS , "Generic Admin Properties Status" },
2082 { GENERIC_ADMIN_PROPERTY_GET , "Generic Admin Property Get" },
2083 { GENERIC_ADMIN_PROPERTY_SET , "Generic Admin Property Set" },
2084 { GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED , "Generic Admin Property Set Unacknowledged" },
2085 { GENERIC_ADMIN_PROPERTY_STATUS , "Generic Admin Property Status" },
2086 { GENERIC_USER_PROPERTIES_GET , "Generic User Properties Get" },
2087 { GENERIC_USER_PROPERTIES_STATUS , "Generic User Properties Status" },
2088 { GENERIC_USER_PROPERTY_GET , "Generic User Property Get" },
2089 { GENERIC_USER_PROPERTY_SET , "Generic User Property Set" },
2090 { GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED , "Generic User Property Set Unacknowledged" },
2091 { GENERIC_USER_PROPERTY_STATUS , "Generic User Property Status" },
2092 { GENERIC_CLIENT_PROPERTIES_GET , "Generic Client Properties Get" },
2093 { GENERIC_CLIENT_PROPERTIES_STATUS , "Generic Client Properties Status" },
2094 { SENSOR_DESCRIPTOR_GET , "Sensor Descriptor Get" },
2095 { SENSOR_DESCRIPTOR_STATUS , "Sensor Descriptor Status" },
2096 { SENSOR_GET , "Sensor Get" },
2097 { SENSOR_STATUS , "Sensor Status" },
2098 { SENSOR_COLUMN_GET , "Sensor Column Get" },
2099 { SENSOR_COLUMN_STATUS , "Sensor Column Status" },
2100 { SENSOR_SERIES_GET , "Sensor Series Get" },
2101 { SENSOR_SERIES_STATUS , "Sensor Series Status" },
2102 { SENSOR_CADENCE_GET , "Sensor Cadence Get" },
2103 { SENSOR_CADENCE_SET , "Sensor Cadence Set" },
2104 { SENSOR_CADENCE_SET_UNACKNOWLEDGED , "Sensor Cadence Set Unacknowledged" },
2105 { SENSOR_CADENCE_STATUS , "Sensor Cadence Status" },
2106 { SENSOR_SETTINGS_GET , "Sensor Settings Get" },
2107 { SENSOR_SETTINGS_STATUS , "Sensor Settings Status" },
2108 { SENSOR_SETTING_GET , "Sensor Setting Get" },
2109 { SENSOR_SETTING_SET , "Sensor Setting Set" },
2110 { SENSOR_SETTING_SET_UNACKNOWLEDGED , "Sensor Setting Set Unacknowledged" },
2111 { SENSOR_SETTING_STATUS , "Sensor Setting Status" },
2112 { TIME_GET , "Time Get" },
2113 { TIME_SET , "Time Set" },
2114 { TIME_STATUS , "Time Status" },
2115 { TIME_ROLE_GET , "Time Role Get" },
2116 { TIME_ROLE_SET , "Time Role Set" },
2117 { TIME_ROLE_STATUS , "Time Role Status" },
2118 { TIME_ZONE_GET , "Time Zone Get" },
2119 { TIME_ZONE_SET , "Time Zone Set" },
2120 { TIME_ZONE_STATUS , "Time Zone Status" },
2121 { TAI_UTC_DELTA_GET , "TAI-UTC Delta Get" },
2122 { TAI_UTC_DELTA_SET , "TAI-UTC Delta Set" },
2123 { TAI_UTC_DELTA_STATUS , "TAI-UTC Delta Status" },
2124 { SCENE_GET , "Scene Get" },
2125 { SCENE_RECALL , "Scene Recall" },
2126 { SCENE_RECALL_UNACKNOWLEDGED , "Scene Recall Unacknowledged" },
2127 { SCENE_STATUS , "Scene Status" },
2128 { SCENE_REGISTER_GET , "Scene Register Get" },
2129 { SCENE_REGISTER_STATUS , "Scene Register Status" },
2130 { SCENE_STORE , "Scene Store" },
2131 { SCENE_STORE_UNACKNOWLEDGED , "Scene Store Unacknowledged" },
2132 { SCENE_DELETE , "Scene Delete" },
2133 { SCENE_DELETE_UNACKNOWLEDGED , "Scene Delete Unacknowledged" },
2134 { SCHEDULER_ACTION_GET , "Scheduler Action Get" },
2135 { SCHEDULER_ACTION_STATUS , "Scheduler Action Status" },
2136 { SCHEDULER_GET , "Scheduler Get" },
2137 { SCHEDULER_STATUS , "Scheduler Status" },
2138 { SCHEDULER_ACTION_SET , "Scheduler Action Set" },
2139 { SCHEDULER_ACTION_SET_UNACKNOWLEDGED , "Scheduler Action Set Unacknowledged" },
2140 { LIGHT_LIGHTNESS_GET , "Light Lightness Get" },
2141 { LIGHT_LIGHTNESS_SET , "Light Lightness Set" },
2142 { LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED , "Light Lightness Set Unacknowledged" },
2143 { LIGHT_LIGHTNESS_STATUS , "Light Lightness Status" },
2144 { LIGHT_LIGHTNESS_LINEAR_GET , "Light Lightness Linear Get" },
2145 { LIGHT_LIGHTNESS_LINEAR_SET , "Light Lightness Linear Set" },
2146 { LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED , "Light Lightness Linear Set Unacknowledged" },
2147 { LIGHT_LIGHTNESS_LINEAR_STATUS , "Light Lightness Linear Status" },
2148 { LIGHT_LIGHTNESS_LAST_GET , "Light Lightness Last Get" },
2149 { LIGHT_LIGHTNESS_LAST_STATUS , "Light Lightness Last Status" },
2150 { LIGHT_LIGHTNESS_DEFAULT_GET , "Light Lightness Default Get" },
2151 { LIGHT_LIGHTNESS_DEFAULT_STATUS , "Light Lightness Default Status" },
2152 { LIGHT_LIGHTNESS_RANGE_GET , "Light Lightness Range Get" },
2153 { LIGHT_LIGHTNESS_RANGE_STATUS , "Light Lightness Range Status" },
2154 { LIGHT_LIGHTNESS_DEFAULT_SET , "Light Lightness Default Set" },
2155 { LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED , "Light Lightness Default Set Unacknowledged" },
2156 { LIGHT_LIGHTNESS_RANGE_SET , "Light Lightness Range Set" },
2157 { LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED , "Light Lightness Range Set Unacknowledged" },
2158 { LIGHT_CTL_GET , "Light CTL Get" },
2159 { LIGHT_CTL_SET , "Light CTL Set" },
2160 { LIGHT_CTL_SET_UNACKNOWLEDGED , "Light CTL Set Unacknowledged" },
2161 { LIGHT_CTL_STATUS , "Light CTL Status" },
2162 { LIGHT_CTL_TEMPERATURE_GET , "Light CTL Temperature Get" },
2163 { LIGHT_CTL_TEMPERATURE_RANGE_GET , "Light CTL Temperature Range Get" },
2164 { LIGHT_CTL_TEMPERATURE_RANGE_STATUS , "Light CTL Temperature Range Status" },
2165 { LIGHT_CTL_TEMPERATURE_SET , "Light CTL Temperature Set" },
2166 { LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED , "Light CTL Temperature Set Unacknowledged" },
2167 { LIGHT_CTL_TEMPERATURE_STATUS , "Light CTL Temperature Status" },
2168 { LIGHT_CTL_DEFAULT_GET , "Light CTL Default Get" },
2169 { LIGHT_CTL_DEFAULT_STATUS , "Light CTL Default Status" },
2170 { LIGHT_CTL_DEFAULT_SET , "Light CTL Default Set" },
2171 { LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED , "Light CTL Default Set Unacknowledged" },
2172 { LIGHT_CTL_TEMPERATURE_RANGE_SET , "Light CTL Temperature Range Set" },
2173 { LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED , "Light CTL Temperature Range Set Unacknowledged" },
2174 { LIGHT_HSL_GET , "Light HSL Get" },
2175 { LIGHT_HSL_HUE_GET , "Light HSL Hue Get" },
2176 { LIGHT_HSL_HUE_SET , "Light HSL Hue Set" },
2177 { LIGHT_HSL_HUE_SET_UNACKNOWLEDGED , "Light HSL Hue Set Unacknowledged" },
2178 { LIGHT_HSL_HUE_STATUS , "Light HSL Hue Status" },
2179 { LIGHT_HSL_SATURATION_GET , "Light HSL Saturation Get" },
2180 { LIGHT_HSL_SATURATION_SET , "Light HSL Saturation Set" },
2181 { LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED , "Light HSL Saturation Set Unacknowledged" },
2182 { LIGHT_HSL_SATURATION_STATUS , "Light HSL Saturation Status" },
2183 { LIGHT_HSL_SET , "Light HSL Set" },
2184 { LIGHT_HSL_SET_UNACKNOWLEDGED , "Light HSL Set Unacknowledged" },
2185 { LIGHT_HSL_STATUS , "Light HSL Status" },
2186 { LIGHT_HSL_TARGET_GET , "Light HSL Target Get" },
2187 { LIGHT_HSL_TARGET_STATUS , "Light HSL Target Status" },
2188 { LIGHT_HSL_DEFAULT_GET , "Light HSL Default Get" },
2189 { LIGHT_HSL_DEFAULT_STATUS , "Light HSL Default Status" },
2190 { LIGHT_HSL_RANGE_GET , "Light HSL Range Get" },
2191 { LIGHT_HSL_RANGE_STATUS , "Light HSL Range Status" },
2192 { LIGHT_HSL_DEFAULT_SET , "Light HSL Default Set" },
2193 { LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED , "Light HSL Default Set Unacknowledged" },
2194 { LIGHT_HSL_RANGE_SET , "Light HSL Range Set" },
2195 { LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED , "Light HSL Range Set Unacknowledged" },
2196 { LIGHT_XYL_GET , "Light xyL Get" },
2197 { LIGHT_XYL_SET , "Light xyL Set" },
2198 { LIGHT_XYL_SET_UNACKNOWLEDGED , "Light xyL Set Unacknowledged" },
2199 { LIGHT_XYL_STATUS , "Light xyL Status" },
2200 { LIGHT_XYL_TARGET_GET , "Light xyL Target Get" },
2201 { LIGHT_XYL_TARGET_STATUS , "Light xyL Target Status" },
2202 { LIGHT_XYL_DEFAULT_GET , "Light xyL Default Get" },
2203 { LIGHT_XYL_DEFAULT_STATUS , "Light xyL Default Status" },
2204 { LIGHT_XYL_RANGE_GET , "Light xyL Range Get" },
2205 { LIGHT_XYL_RANGE_STATUS , "Light xyL Range Status" },
2206 { LIGHT_XYL_DEFAULT_SET , "Light xyL Default Set" },
2207 { LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED , "Light xyL Default Set Unacknowledged" },
2208 { LIGHT_XYL_RANGE_SET , "Light xyL Range Set" },
2209 { LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED , "Light xyL Range Set Unacknowledged" },
2210 { LIGHT_LC_MODE_GET , "Light LC Mode Get" },
2211 { LIGHT_LC_MODE_SET , "Light LC Mode Set" },
2212 { LIGHT_LC_MODE_SET_UNACKNOWLEDGED , "Light LC Mode Set Unacknowledged" },
2213 { LIGHT_LC_MODE_STATUS , "Light LC Mode Status" },
2214 { LIGHT_LC_OM_GET , "Light LC OM Get" },
2215 { LIGHT_LC_OM_SET , "Light LC OM Set" },
2216 { LIGHT_LC_OM_SET_UNACKNOWLEDGED , "Light LC OM Set Unacknowledged" },
2217 { LIGHT_LC_OM_STATUS , "Light LC OM Status" },
2218 { LIGHT_LC_LIGHT_ONOFF_GET , "Light LC Light OnOff Get" },
2219 { LIGHT_LC_LIGHT_ONOFF_SET , "Light LC Light OnOff Set" },
2220 { LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED , "Light LC Light OnOff Set Unacknowledged" },
2221 { LIGHT_LC_LIGHT_ONOFF_STATUS , "Light LC Light OnOff Status" },
2222 { LIGHT_LC_PROPERTY_GET , "Light LC Property Get" },
2223 { LIGHT_LC_PROPERTY_SET , "Light LC Property Set" },
2224 { LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED , "Light LC Property Set Unacknowledged" },
2225 { LIGHT_LC_PROPERTY_STATUS , "Light LC Property Status" },
2226 { 0, NULL }
2229 static const value_string btmesh_beacon_broadcast_vals[] = {
2230 { 0x00, "Not broadcasting a Secure Network beacon" },
2231 { 0x01, "Broadcasting a Secure Network beacon" },
2232 { 0, NULL }
2235 static const value_string btmesh_gatt_proxy_vals[] = {
2236 { 0x00, "Proxy feature is supported and disabled" },
2237 { 0x01, "Proxy feature is supported and enabled" },
2238 { 0x02, "Proxy feature is not supported" },
2239 { 0, NULL }
2242 static const value_string btmesh_relay_vals[] = {
2243 { 0x00, "Relay feature is supported and disabled" },
2244 { 0x01, "Relay feature is supported and enabled" },
2245 { 0x02, "Relay feature is not supported" },
2246 { 0, NULL }
2249 static const value_string btmesh_friend_vals[] = {
2250 { 0x00, "Friend feature is supported and disabled" },
2251 { 0x01, "Friend feature is supported and enabled" },
2252 { 0x02, "Friend feature is not supported" },
2253 { 0, NULL }
2256 static const value_string btmesh_publishperiod_resolution_vals[] = {
2257 { 0x00, "100 milliseconds" },
2258 { 0x01, "1 second" },
2259 { 0x02, "10 seconds" },
2260 { 0x03, "10 minutes" },
2261 { 0, NULL }
2264 static const value_string btmesh_friendship_credentials_flag_vals[] = {
2265 { 0x00, "Central security material is used" },
2266 { 0x01, "Friendship security material is used" },
2267 { 0, NULL }
2270 static const value_string btmesh_phase_vals[] = {
2271 { 0x00, "Normal operation" },
2272 { 0x01, "First phase of Key Refresh procedure" },
2273 { 0x02, "Second phase of Key Refresh procedure" },
2274 { 0, NULL }
2277 static const range_string btmesh_transition_vals[] = {
2278 { 0x00, 0x01, "Prohibited" },
2279 { 0x02, 0x02, "Transition 2" },
2280 { 0x03, 0x03, "Transition 3" },
2281 { 0x04, 0xFF, "Prohibited" },
2282 { 0, 0, NULL }
2285 static const value_string btmesh_fault_array_vals[] = {
2286 { 0x00, "No Fault" },
2287 { 0x01, "Battery Low Warning" },
2288 { 0x02, "Battery Low Error" },
2289 { 0x03, "Supply Voltage Too Low Warning" },
2290 { 0x04, "Supply Voltage Too Low Error" },
2291 { 0x05, "Supply Voltage Too High Warning" },
2292 { 0x06, "Supply Voltage Too High Error" },
2293 { 0x07, "Power Supply Interrupted Warning" },
2294 { 0x08, "Power Supply Interrupted Error" },
2295 { 0x09, "No Load Warning" },
2296 { 0x0A, "No Load Error" },
2297 { 0x0B, "Overload Warning" },
2298 { 0x0C, "Overload Error" },
2299 { 0x0D, "Overheat Warning" },
2300 { 0x0E, "Overheat Error" },
2301 { 0x0F, "Condensation Warning" },
2302 { 0x10, "Condensation Error" },
2303 { 0x11, "Vibration Warning" },
2304 { 0x12, "Vibration Error" },
2305 { 0x13, "Configuration Warning" },
2306 { 0x14, "Configuration Error" },
2307 { 0x15, "Element Not Calibrated Warning" },
2308 { 0x16, "Element Not Calibrated Error" },
2309 { 0x17, "Memory Warning" },
2310 { 0x18, "Memory Error" },
2311 { 0x19, "Self-Test Warning" },
2312 { 0x1A, "Self-Test Error" },
2313 { 0x1B, "Input Too Low Warning" },
2314 { 0x1C, "Input Too Low Error" },
2315 { 0x1D, "Input Too High Warning" },
2316 { 0x1E, "Input Too High Error" },
2317 { 0x1F, "Input No Change Warning" },
2318 { 0x20, "Input No Change Error" },
2319 { 0x21, "Actuator Blocked Warning" },
2320 { 0x22, "Actuator Blocked Error" },
2321 { 0x23, "Housing Opened Warning" },
2322 { 0x24, "Housing Opened Error" },
2323 { 0x25, "Tamper Warning" },
2324 { 0x26, "Tamper Error" },
2325 { 0x27, "Device Moved Warning" },
2326 { 0x28, "Device Moved Error" },
2327 { 0x29, "Device Dropped Warning" },
2328 { 0x2A, "Device Dropped Error" },
2329 { 0x2B, "Overflow Warning" },
2330 { 0x2C, "Overflow Error" },
2331 { 0x2D, "Empty Warning" },
2332 { 0x2E, "Empty Error" },
2333 { 0x2F, "Internal Bus Warning" },
2334 { 0x30, "Internal Bus Error" },
2335 { 0x31, "Mechanism Jammed Warning" },
2336 { 0x32, "Mechanism Jammed Error" },
2337 { 0, NULL }
2340 static const value_string btmesh_generic_onpowerup_vals[] = {
2341 { 0x00, "Off" },
2342 { 0x01, "Default" },
2343 { 0x02, "Restore" },
2344 { 0, NULL }
2347 static const value_string btmesh_on_off_vals[] = {
2348 { 0x0, "Off" },
2349 { 0x1, "On" },
2350 { 0, NULL }
2353 static const value_string btmesh_generic_battery_flags_presence_vals[] = {
2354 { 0x0, "The battery is not present." },
2355 { 0x1, "The battery is present and is removable." },
2356 { 0x2, "The battery is present and is non-removable." },
2357 { 0x3, "The battery presence is unknown." },
2358 { 0, NULL }
2361 static const value_string btmesh_generic_battery_flags_indicator_vals[] = {
2362 { 0x0, "The battery charge is Critically Low Level." },
2363 { 0x1, "The battery charge is Low Level." },
2364 { 0x2, "The battery charge is Good Level." },
2365 { 0x3, "The battery charge is unknown." },
2366 { 0, NULL }
2369 static const value_string btmesh_generic_battery_flags_charging_vals[] = {
2370 { 0x0, "The battery is not chargeable." },
2371 { 0x1, "The battery is chargeable and is not charging." },
2372 { 0x2, "The battery is chargeable and is charging." },
2373 { 0x3, "The battery charging state is unknown." },
2374 { 0, NULL }
2377 static const value_string btmesh_generic_battery_flags_serviceability_vals[] = {
2378 { 0x0, "Reserved for Future Use" },
2379 { 0x1, "The battery does not require service." },
2380 { 0x2, "The battery requires service." },
2381 { 0x3, "The battery serviceability is unknown." },
2382 { 0, NULL }
2385 static const value_string btmesh_generic_location_local_stationary_vals[] = {
2386 { 0x0, "Stationary" },
2387 { 0x1, "Mobile" },
2388 { 0, NULL }
2391 static const value_string btmesh_yes_or_dash_vals[] = {
2392 { 0x0, "-" },
2393 { 0x1, "Scheduled" },
2394 { 0, NULL }
2397 static const value_string btmesh_time_authority_vals[] = {
2398 { 0x0, "No Time Authority" },
2399 { 0x1, "Time Authority" },
2400 { 0, NULL }
2403 static const value_string btmesh_time_role_vals[] = {
2404 { 0x0, "None" },
2405 { 0x1, "Mesh Time Authority" },
2406 { 0x2, "Mesh Time Relay" },
2407 { 0x3, "Mesh Time Client" },
2408 { 0, NULL }
2411 static const value_string btmesh_defined_or_dash_vals[] = {
2412 { 0x0, "-" },
2413 { 0x1, "Defined" },
2414 { 0, NULL }
2417 static int * const config_composition_data_status_features_headers[] = {
2418 &hf_btmesh_config_composition_data_status_features_relay,
2419 &hf_btmesh_config_composition_data_status_features_proxy,
2420 &hf_btmesh_config_composition_data_status_features_friend,
2421 &hf_btmesh_config_composition_data_status_features_low_power,
2422 &hf_btmesh_config_composition_data_status_features_rfu,
2423 NULL
2426 static int * const config_heartbeat_publication_set_features_headers[] = {
2427 &hf_btmesh_config_heartbeat_publication_set_features_relay,
2428 &hf_btmesh_config_heartbeat_publication_set_features_proxy,
2429 &hf_btmesh_config_heartbeat_publication_set_features_friend,
2430 &hf_btmesh_config_heartbeat_publication_set_features_low_power,
2431 &hf_btmesh_config_heartbeat_publication_set_features_rfu,
2432 NULL
2435 static int * const config_heartbeat_publication_status_features_headers[] = {
2436 &hf_btmesh_config_heartbeat_publication_status_features_relay,
2437 &hf_btmesh_config_heartbeat_publication_status_features_proxy,
2438 &hf_btmesh_config_heartbeat_publication_status_features_friend,
2439 &hf_btmesh_config_heartbeat_publication_status_features_low_power,
2440 &hf_btmesh_config_heartbeat_publication_status_features_rfu,
2441 NULL
2444 static const fragment_items btmesh_segmented_access_frag_items = {
2445 &ett_btmesh_segmented_access_fragments,
2446 &ett_btmesh_segmented_access_fragment,
2448 &hf_btmesh_segmented_access_fragments,
2449 &hf_btmesh_segmented_access_fragment,
2450 &hf_btmesh_segmented_access_fragment_overlap,
2451 &hf_btmesh_segmented_access_fragment_overlap_conflict,
2452 &hf_btmesh_segmented_access_fragment_multiple_tails,
2453 &hf_btmesh_segmented_access_fragment_too_long_fragment,
2454 &hf_btmesh_segmented_access_fragment_error,
2455 &hf_btmesh_segmented_access_fragment_count,
2456 NULL,
2457 &hf_btmesh_segmented_access_reassembled_length,
2458 /* Reassembled data field */
2459 NULL,
2460 "fragments"
2463 static const fragment_items btmesh_segmented_control_frag_items = {
2464 &ett_btmesh_segmented_control_fragments,
2465 &ett_btmesh_segmented_control_fragment,
2467 &hf_btmesh_segmented_control_fragments,
2468 &hf_btmesh_segmented_control_fragment,
2469 &hf_btmesh_segmented_control_fragment_overlap,
2470 &hf_btmesh_segmented_control_fragment_overlap_conflict,
2471 &hf_btmesh_segmented_control_fragment_multiple_tails,
2472 &hf_btmesh_segmented_control_fragment_too_long_fragment,
2473 &hf_btmesh_segmented_control_fragment_error,
2474 &hf_btmesh_segmented_control_fragment_count,
2475 NULL,
2476 &hf_btmesh_segmented_control_reassembled_length,
2477 /* Reassembled data field */
2478 NULL,
2479 "fragments"
2482 static const value_string btmesh_status_code_vals[] = {
2483 { 0x00, "Success" },
2484 { 0x01, "Invalid Address" },
2485 { 0x02, "Invalid Model" },
2486 { 0x03, "Invalid AppKey Index" },
2487 { 0x04, "Invalid NetKey Index" },
2488 { 0x05, "Insufficient Resources" },
2489 { 0x06, "Key Index Already Stored" },
2490 { 0x07, "Invalid Publish Parameters" },
2491 { 0x08, "Not a Subscribe Model" },
2492 { 0x09, "Storage Failure" },
2493 { 0x0A, "Feature Not Supported" },
2494 { 0x0B, "Cannot Update" },
2495 { 0x0C, "Cannot Remove" },
2496 { 0x0D, "Cannot Bind" },
2497 { 0x0E, "Temporarily Unable to Change State" },
2498 { 0x0F, "Cannot Set" },
2499 { 0x10, "Unspecified Error" },
2500 { 0x11, "Invalid Binding" },
2501 { 0, NULL }
2504 static const value_string btmesh_generic_status_code_vals[] = {
2505 { 0x00, "Success" },
2506 { 0x01, "Cannot Set Range Min" },
2507 { 0x02, "Cannot Set Range Max" },
2508 { 0, NULL }
2511 static const value_string btmesh_scene_status_code_vals[] = {
2512 { 0x00, "Success" },
2513 { 0x01, "Scene Register Full" },
2514 { 0x02, "Scene Not Found" },
2515 { 0, NULL }
2518 static const value_string btmesh_sensor_sampling_function_vals[] = {
2519 { 0x00, "Unspecified" },
2520 { 0x01, "Instantaneous" },
2521 { 0x02, "Arithmetic Mean" },
2522 { 0x03, "RMS" },
2523 { 0x04, "Maximum" },
2524 { 0x05, "Minimum" },
2525 { 0x06, "Accumulated" },
2526 { 0x07, "Count" },
2527 { 0, NULL }
2530 static const value_string btmesh_status_trigger_type_vals[] = {
2531 { 0x00, "same format as property" },
2532 { 0x01, "unitless" },
2533 { 0, NULL }
2536 static const value_string btmesh_mpid_format_vals[] = {
2537 { 0x00, "Format A" },
2538 { 0x01, "Format B" },
2539 { 0, NULL }
2542 static const value_string btmesh_model_vals[] = {
2543 { 0x0000, "Configuration Server" },
2544 { 0x0001, "Configuration Client" },
2545 { 0x0002, "Health Server" },
2546 { 0x0003, "Health Client" },
2547 { 0x1000, "Generic OnOff Server" },
2548 { 0x1001, "Generic OnOff Client" },
2549 { 0x1002, "Generic Level Server" },
2550 { 0x1003, "Generic Level Client" },
2551 { 0x1004, "Generic Default Transition Time Server" },
2552 { 0x1005, "Generic Default Transition Time Client" },
2553 { 0x1006, "Generic Power OnOff Server" },
2554 { 0x1007, "Generic Power OnOff Setup Server" },
2555 { 0x1008, "Generic Power OnOff Client" },
2556 { 0x1009, "Generic Power Level Server" },
2557 { 0x100A, "Generic Power Level Setup Server" },
2558 { 0x100B, "Generic Power Level Client" },
2559 { 0x100C, "Generic Battery Server" },
2560 { 0x100D, "Generic Battery Client" },
2561 { 0x100E, "Generic Location Server" },
2562 { 0x100F, "Generic Location Setup Server" },
2563 { 0x1010, "Generic Location Client" },
2564 { 0x1011, "Generic Admin Property Server" },
2565 { 0x1012, "Generic Manufacturer Property Server" },
2566 { 0x1013, "Generic User Property Server" },
2567 { 0x1014, "Generic Client Property Server" },
2568 { 0x1015, "Generic Property Client" },
2569 { 0x1100, "Sensors Sensor Server" },
2570 { 0x1101, "Sensor Setup Server" },
2571 { 0x1102, "Sensor Client" },
2572 { 0x1200, "Time Server" },
2573 { 0x1201, "Time Setup Server" },
2574 { 0x1202, "Time Client" },
2575 { 0x1203, "Scene Server" },
2576 { 0x1204, "Scene Setup Server" },
2577 { 0x1205, "Scene Client" },
2578 { 0x1206, "Scheduler Server" },
2579 { 0x1207, "Scheduler Setup Server" },
2580 { 0x1208, "Scheduler Client" },
2581 { 0x1300, "Light Lightness Server" },
2582 { 0x1301, "Light Lightness Setup Server" },
2583 { 0x1302, "Light Lightness Client" },
2584 { 0x1303, "Light CTL Server" },
2585 { 0x1304, "Light CTL Setup Server" },
2586 { 0x1305, "Light CTL Client" },
2587 { 0x1306, "Light CTL Temperature Server" },
2588 { 0x1307, "Light HSL Server" },
2589 { 0x1308, "Light HSL Setup Server" },
2590 { 0x1309, "Light HSL Client" },
2591 { 0x130A, "Light HSL Hue Server" },
2592 { 0x130B, "Light HSL Saturation Server" },
2593 { 0x130C, "Light xyL Server" },
2594 { 0x130D, "Light xyL Setup Server" },
2595 { 0x130E, "Light xyL Client" },
2596 { 0x130F, "Light LC Server" },
2597 { 0x1310, "Light LC Setup Server" },
2598 { 0x1311, "Light LC Client" },
2599 { 0, NULL }
2602 static const value_string btmesh_properties_vals[] = {
2603 { PHONY_PROPERTY_PERCENTAGE_CHANGE_16 , "Percentage Change" },
2604 { PHONY_PROPERTY_INDEX , "Index" },
2605 { PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY , "Average Ambient Temperature In A Period Of Day" },
2606 { PROPERTY_AVERAGE_INPUT_CURRENT , "Average Input Current" },
2607 { PROPERTY_AVERAGE_INPUT_VOLTAGE , "Average Input Voltage" },
2608 { PROPERTY_AVERAGE_OUTPUT_CURRENT , "Average Output Current" },
2609 { PROPERTY_AVERAGE_OUTPUT_VOLTAGE , "Average Output Voltage" },
2610 { PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER , "Center Beam Intensity At Full Power" },
2611 { PROPERTY_CHROMATICITY_TOLERANCE , "Chromaticity Tolerance" },
2612 { PROPERTY_COLOR_RENDERING_INDEX_R9 , "Color Rendering Index R9" },
2613 { PROPERTY_COLOR_RENDERING_INDEX_RA , "Color Rendering Index Ra" },
2614 { PROPERTY_DEVICE_APPEARANCE , "Device Appearance" },
2615 { PROPERTY_DEVICE_COUNTRY_OF_ORIGIN , "Device Country Of Origin" },
2616 { PROPERTY_DEVICE_DATE_OF_MANUFACTURE , "Device Date Of Manufacture" },
2617 { PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON , "Device Energy Use Since Turn On" },
2618 { PROPERTY_DEVICE_FIRMWARE_REVISION , "Device Firmware Revision" },
2619 { PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER , "Device Global Trade Item Number" },
2620 { PROPERTY_DEVICE_HARDWARE_REVISION , "Device Hardware Revision" },
2621 { PROPERTY_DEVICE_MANUFACTURER_NAME , "Device Manufacturer Name" },
2622 { PROPERTY_DEVICE_MODEL_NUMBER , "Device Model Number" },
2623 { PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION , "Device Operating Temperature Range Specification" },
2624 { PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES , "Device Operating Temperature Statistical Values" },
2625 { PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS , "Device Over Temperature Event Statistics" },
2626 { PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION , "Device Power Range Specification" },
2627 { PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON , "Device Runtime Since Turn On" },
2628 { PROPERTY_DEVICE_RUNTIME_WARRANTY , "Device Runtime Warranty" },
2629 { PROPERTY_DEVICE_SERIAL_NUMBER , "Device Serial Number" },
2630 { PROPERTY_DEVICE_SOFTWARE_REVISION , "Device Software Revision" },
2631 { PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS , "Device Under Temperature Event Statistics" },
2632 { PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES , "Indoor Ambient Temperature Statistical Values" },
2633 { PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES , "Initial CIE 1931 Chromaticity Coordinates" },
2634 { PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE , "Initial Correlated Color Temperature" },
2635 { PROPERTY_INITIAL_LUMINOUS_FLUX , "Initial Luminous Flux" },
2636 { PROPERTY_INITIAL_PLANCKIAN_DISTANCE , "Initial Planckian Distance" },
2637 { PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION , "Input Current Range Specification" },
2638 { PROPERTY_INPUT_CURRENT_STATISTICS , "Input Current Statistics" },
2639 { PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS , "Input Over Current Event Statistics" },
2640 { PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS , "Input Over Ripple Voltage Event Statistics" },
2641 { PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS , "Input Over Voltage Event Statistics" },
2642 { PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS , "Input Under Current Event Statistics" },
2643 { PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS , "Input Under Voltage Event Statistics" },
2644 { PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION , "Input Voltage Range Specification" },
2645 { PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION , "Input Voltage Ripple Specification" },
2646 { PROPERTY_INPUT_VOLTAGE_STATISTICS , "Input Voltage Statistics" },
2647 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON , "Light Control Ambient LuxLevel On" },
2648 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG , "Light Control Ambient LuxLevel Prolong" },
2649 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY , "Light Control Ambient LuxLevel Standby" },
2650 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON , "Light Control Lightness On" },
2651 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG , "Light Control Lightness Prolong" },
2652 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY , "Light Control Lightness Standby" },
2653 { PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY , "Light Control Regulator Accuracy" },
2654 { PROPERTY_LIGHT_CONTROL_REGULATOR_KID , "Light Control Regulator Kid" },
2655 { PROPERTY_LIGHT_CONTROL_REGULATOR_KIU , "Light Control Regulator Kiu" },
2656 { PROPERTY_LIGHT_CONTROL_REGULATOR_KPD , "Light Control Regulator Kpd" },
2657 { PROPERTY_LIGHT_CONTROL_REGULATOR_KPU , "Light Control Regulator Kpu" },
2658 { PROPERTY_LIGHT_CONTROL_TIME_FADE , "Light Control Time Fade" },
2659 { PROPERTY_LIGHT_CONTROL_TIME_FADE_ON , "Light Control Time Fade On" },
2660 { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO , "Light Control Time Fade Standby Auto" },
2661 { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL , "Light Control Time Fade Standby Manual" },
2662 { PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY , "Light Control Time Occupancy Delay" },
2663 { PROPERTY_LIGHT_CONTROL_TIME_PROLONG , "Light Control Time Prolong" },
2664 { PROPERTY_LIGHT_CONTROL_TIME_RUN_ON , "Light Control Time Run On" },
2665 { PROPERTY_LUMEN_MAINTENANCE_FACTOR , "Lumen Maintenance Factor" },
2666 { PROPERTY_LUMINOUS_EFFICACY , "Luminous Efficacy" },
2667 { PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON , "Luminous Energy Since Turn On" },
2668 { PROPERTY_LUMINOUS_EXPOSURE , "Luminous Exposure" },
2669 { PROPERTY_LUMINOUS_FLUX_RANGE , "Luminous Flux Range" },
2670 { PROPERTY_MOTION_SENSED , "Motion Sensed" },
2671 { PROPERTY_MOTION_THRESHOLD , "Motion Threshold" },
2672 { PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS , "Open Circuit Event Statistics" },
2673 { PROPERTY_OUTDOOR_STATISTICAL_VALUES , "Outdoor Statistical Values" },
2674 { PROPERTY_OUTPUT_CURRENT_RANGE , "Output Current Range" },
2675 { PROPERTY_OUTPUT_CURRENT_STATISTICS , "Output Current Statistics" },
2676 { PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION , "Output Ripple Voltage Specification" },
2677 { PROPERTY_OUTPUT_VOLTAGE_RANGE , "Output Voltage Range" },
2678 { PROPERTY_OUTPUT_VOLTAGE_STATISTICS , "Output Voltage Statistics" },
2679 { PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS , "Over Output Ripple Voltage Event Statistics" },
2680 { PROPERTY_PEOPLE_COUNT , "People Count" },
2681 { PROPERTY_PRESENCE_DETECTED , "Presence Detected" },
2682 { PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL , "Present Ambient Light Level" },
2683 { PROPERTY_PRESENT_AMBIENT_TEMPERATURE , "Present Ambient Temperature" },
2684 { PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES , "Present CIE 1931 Chromaticity Coordinates" },
2685 { PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE , "Present Correlated Color Temperature" },
2686 { PROPERTY_PRESENT_DEVICE_INPUT_POWER , "Present Device Input Power" },
2687 { PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY , "Present Device Operating Efficiency" },
2688 { PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE , "Present Device Operating Temperature" },
2689 { PROPERTY_PRESENT_ILLUMINANCE , "Present Illuminance" },
2690 { PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE , "Present Indoor Ambient Temperature" },
2691 { PROPERTY_PRESENT_INPUT_CURRENT , "Present Input Current" },
2692 { PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE , "Present Input Ripple Voltage" },
2693 { PROPERTY_PRESENT_INPUT_VOLTAGE , "Present Input Voltage" },
2694 { PROPERTY_PRESENT_LUMINOUS_FLUX , "Present Luminous Flux" },
2695 { PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE , "Present Outdoor Ambient Temperature" },
2696 { PROPERTY_PRESENT_OUTPUT_CURRENT , "Present Output Current" },
2697 { PROPERTY_PRESENT_OUTPUT_VOLTAGE , "Present Output Voltage" },
2698 { PROPERTY_PRESENT_PLANCKIAN_DISTANCE , "Present Planckian Distance" },
2699 { PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE , "Present Relative Output Ripple Voltage" },
2700 { PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY , "Relative Device Energy Use In A Period Of Day" },
2701 { PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE , "Relative Device Runtime In A Generic Level Range" },
2702 { PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE , "Relative Exposure Time In An Illuminance Range" },
2703 { PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE, "Relative Runtime In A Correlated Color Temperature Range" },
2704 { PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE, "Relative Runtime In A Device Operating Temperature Range" },
2705 { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE , "Relative Runtime In An Input Current Range" },
2706 { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE , "Relative Runtime In An Input Voltage Range" },
2707 { PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS , "Short Circuit Event Statistics" },
2708 { PROPERTY_TIME_SINCE_MOTION_SENSED , "Time Since Motion Sensed" },
2709 { PROPERTY_TIME_SINCE_PRESENCE_DETECTED , "Time Since Presence Detected" },
2710 { PROPERTY_TOTAL_DEVICE_ENERGY_USE , "Total Device Energy Use" },
2711 { PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES , "Total Device Off On Cycles" },
2712 { PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES , "Total Device Power On Cycles" },
2713 { PROPERTY_TOTAL_DEVICE_POWER_ON_TIME , "Total Device Power On Time" },
2714 { PROPERTY_TOTAL_DEVICE_RUNTIME , "Total Device Runtime" },
2715 { PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME , "Total Light Exposure Time" },
2716 { PROPERTY_TOTAL_LUMINOUS_ENERGY , "Total Luminous Energy" },
2717 { PROPERTY_DESIRED_AMBIENT_TEMPERATURE , "Desired Ambient Temperature" },
2718 { PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE , "Precise Total Device Energy Use" },
2719 { PROPERTY_POWER_FACTOR , "Power Factor" },
2720 { PROPERTY_SENSOR_GAIN , "Sensor Gain" },
2721 { PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE , "Precise Present Ambient Temperature" },
2722 { PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY , "Present Ambient Relative Humidity" },
2723 { PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION , "Present Ambient Carbon Dioxide Concentration" },
2724 { PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION, "Present Ambient Volatile Organic Compounds Concentration" },
2725 { PROPERTY_PRESENT_AMBIENT_NOISE , "Present Ambient Noise" },
2726 { PROPERTY_ACTIVE_ENERGY_LOADSIDE , "Active Energy Loadside" },
2727 { PROPERTY_ACTIVE_POWER_LOADSIDE , "Active Power Loadside" },
2728 { PROPERTY_AIR_PRESSURE , "Air Pressure" },
2729 { PROPERTY_APPARENT_ENERGY , "Apparent Energy" },
2730 { PROPERTY_APPARENT_POWER , "Apparent Power" },
2731 { PROPERTY_APPARENT_WIND_DIRECTION , "Apparent Wind Direction" },
2732 { PROPERTY_APPARENT_WIND_SPEED , "Apparent Wind Speed" },
2733 { PROPERTY_DEW_POINT , "Dew Point" },
2734 { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE , "External Supply Voltage" },
2735 { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY , "External Supply Voltage Frequency" },
2736 { PROPERTY_GUST_FACTOR , "Gust Factor" },
2737 { PROPERTY_HEAT_INDEX , "Heat Index" },
2738 { PROPERTY_LIGHT_DISTRIBUTION , "Light Distribution" },
2739 { PROPERTY_LIGHT_SOURCE_CURRENT , "Light Source Current" },
2740 { PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE , "Light Source On Time Not Resettable" },
2741 { PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE , "Light Source On Time Resettable" },
2742 { PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS , "Light Source Open Circuit Statistics" },
2743 { PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS , "Light Source Overall Failures Statistics" },
2744 { PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS , "Light Source Short Circuit Statistics" },
2745 { PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE , "Light Source Start Counter Resettable" },
2746 { PROPERTY_LIGHT_SOURCE_TEMPERATURE , "Light Source Temperature" },
2747 { PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS , "Light Source Thermal Derating Statistics" },
2748 { PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS , "Light Source Thermal Shutdown Statistics" },
2749 { PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES , "Light Source Total Power On Cycles" },
2750 { PROPERTY_LIGHT_SOURCE_VOLTAGE , "Light Source Voltage" },
2751 { PROPERTY_LUMINAIRE_COLOR , "Luminaire Color" },
2752 { PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER , "Luminaire Identification Number" },
2753 { PROPERTY_LUMINAIRE_MANUFACTURER_GTIN , "Luminaire Manufacturer GTIN" },
2754 { PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER , "Luminaire Nominal Input Power" },
2755 { PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE , "Luminaire Nominal Maximum AC Mains Voltage" },
2756 { PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE , "Luminaire Nominal Minimum AC Mains Voltage" },
2757 { PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL , "Luminaire Power At Minimum Dim Level" },
2758 { PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE , "Luminaire Time Of Manufacture" },
2759 { PROPERTY_MAGNETIC_DECLINATION , "Magnetic Declination" },
2760 { PROPERTY_MAGNETIC_FLUX_DENSITY_2_D , "Magnetic Flux Density - 2D" },
2761 { PROPERTY_MAGNETIC_FLUX_DENSITY_3_D , "Magnetic Flux Density - 3D" },
2762 { PROPERTY_NOMINAL_LIGHT_OUTPUT , "Nominal Light Output" },
2763 { PROPERTY_OVERALL_FAILURE_CONDITION , "Overall Failure Condition" },
2764 { PROPERTY_POLLEN_CONCENTRATION , "Pollen Concentration" },
2765 { PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY , "Present Indoor Relative Humidity" },
2766 { PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY , "Present Outdoor Relative Humidity" },
2767 { PROPERTY_PRESSURE , "Pressure" },
2768 { PROPERTY_RAINFALL , "Rainfall" },
2769 { PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE , "Rated Median Useful Life Of Luminaire" },
2770 { PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS , "Rated Median Useful Light Source Starts" },
2771 { PROPERTY_REFERENCE_TEMPERATURE , "Reference Temperature" },
2772 { PROPERTY_TOTAL_DEVICE_STARTS , "Total Device Starts" },
2773 { PROPERTY_TRUE_WIND_DIRECTION , "True Wind Direction" },
2774 { PROPERTY_TRUE_WIND_SPEED , "True Wind Speed" },
2775 { PROPERTY_UV_INDEX , "UV Index" },
2776 { PROPERTY_WIND_CHILL , "Wind Chill" },
2777 { PROPERTY_LIGHT_SOURCE_TYPE , "Light Source Type" },
2778 { PROPERTY_LUMINAIRE_IDENTIFICATION_STRING , "Luminaire Identification String" },
2779 { PROPERTY_OUTPUT_POWER_LIMITATION , "Output Power Limitation" },
2780 { PROPERTY_THERMAL_DERATING , "Thermal Derating" },
2781 { PROPERTY_OUTPUT_CURRENT_PERCENT , "Output Current Percent" },
2782 { 0, NULL }
2785 static const btmesh_property_t btmesh_properties[] = {
2786 { PHONY_PROPERTY_PERCENTAGE_CHANGE_16 , PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16 },
2787 { PHONY_PROPERTY_INDEX , PHONY_CHARACTERISTIC_INDEX },
2788 { PROPERTY_ACTIVE_ENERGY_LOADSIDE , CHARACTERISTIC_ENERGY32 },
2789 { PROPERTY_ACTIVE_POWER_LOADSIDE , CHARACTERISTIC_POWER },
2790 { PROPERTY_AIR_PRESSURE , CHARACTERISTIC_PRESSURE },
2791 { PROPERTY_APPARENT_ENERGY , CHARACTERISTIC_APPARENT_ENERGY32 },
2792 { PROPERTY_APPARENT_POWER , CHARACTERISTIC_APPARENT_POWER },
2793 { PROPERTY_APPARENT_WIND_DIRECTION , CHARACTERISTIC_APPARENT_WIND_DIRECTION },
2794 { PROPERTY_APPARENT_WIND_SPEED , CHARACTERISTIC_APPARENT_WIND_SPEED },
2795 { PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY , CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY },
2796 { PROPERTY_AVERAGE_INPUT_CURRENT , CHARACTERISTIC_AVERAGE_CURRENT },
2797 { PROPERTY_AVERAGE_INPUT_VOLTAGE , CHARACTERISTIC_AVERAGE_VOLTAGE },
2798 { PROPERTY_AVERAGE_OUTPUT_CURRENT , CHARACTERISTIC_AVERAGE_CURRENT },
2799 { PROPERTY_AVERAGE_OUTPUT_VOLTAGE , CHARACTERISTIC_AVERAGE_VOLTAGE },
2800 { PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER , CHARACTERISTIC_LUMINOUS_INTENSITY },
2801 { PROPERTY_CHROMATICITY_TOLERANCE , CHARACTERISTIC_CHROMATICITY_TOLERANCE },
2802 { PROPERTY_COLOR_RENDERING_INDEX_R9 , CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX },
2803 { PROPERTY_COLOR_RENDERING_INDEX_RA , CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX },
2804 { PROPERTY_DESIRED_AMBIENT_TEMPERATURE , CHARACTERISTIC_TEMPERATURE_8 },
2805 { PROPERTY_DEVICE_APPEARANCE , CHARACTERISTIC_APPEARANCE },
2806 { PROPERTY_DEVICE_COUNTRY_OF_ORIGIN , CHARACTERISTIC_COUNTRY_CODE },
2807 { PROPERTY_DEVICE_DATE_OF_MANUFACTURE , CHARACTERISTIC_DATE_UTC },
2808 { PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON , CHARACTERISTIC_ENERGY },
2809 { PROPERTY_DEVICE_FIRMWARE_REVISION , CHARACTERISTIC_FIXED_STRING_8 },
2810 { PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER , CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER },
2811 { PROPERTY_DEVICE_HARDWARE_REVISION , CHARACTERISTIC_FIXED_STRING_16 },
2812 { PROPERTY_DEVICE_MANUFACTURER_NAME , CHARACTERISTIC_FIXED_STRING_36 },
2813 { PROPERTY_DEVICE_MODEL_NUMBER , CHARACTERISTIC_FIXED_STRING_24 },
2814 { PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION , CHARACTERISTIC_TEMPERATURE_RANGE },
2815 { PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES , CHARACTERISTIC_TEMPERATURE_STATISTICS },
2816 { PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2817 { PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION , CHARACTERISTIC_POWER_SPECIFICATION },
2818 { PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON , CHARACTERISTIC_TIME_HOUR_24 },
2819 { PROPERTY_DEVICE_RUNTIME_WARRANTY , CHARACTERISTIC_TIME_HOUR_24 },
2820 { PROPERTY_DEVICE_SERIAL_NUMBER , CHARACTERISTIC_FIXED_STRING_16 },
2821 { PROPERTY_DEVICE_SOFTWARE_REVISION , CHARACTERISTIC_FIXED_STRING_8 },
2822 { PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2823 { PROPERTY_DEW_POINT , CHARACTERISTIC_DEW_POINT },
2824 { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE , CHARACTERISTIC_HIGH_VOLTAGE },
2825 { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY , CHARACTERISTIC_VOLTAGE_FREQUENCY },
2826 { PROPERTY_GUST_FACTOR , CHARACTERISTIC_GUST_FACTOR },
2827 { PROPERTY_HEAT_INDEX , CHARACTERISTIC_HEAT_INDEX },
2828 { PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES , CHARACTERISTIC_TEMPERATURE_8_STATISTICS },
2829 { PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES , CHARACTERISTIC_CHROMATICITY_COORDINATES },
2830 { PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE , CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE },
2831 { PROPERTY_INITIAL_LUMINOUS_FLUX , CHARACTERISTIC_LUMINOUS_FLUX },
2832 { PROPERTY_INITIAL_PLANCKIAN_DISTANCE , CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN },
2833 { PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION , CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION },
2834 { PROPERTY_INPUT_CURRENT_STATISTICS , CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS },
2835 { PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2836 { PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2837 { PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2838 { PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2839 { PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2840 { PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION , CHARACTERISTIC_VOLTAGE_SPECIFICATION },
2841 { PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION , CHARACTERISTIC_PERCENTAGE_8 },
2842 { PROPERTY_INPUT_VOLTAGE_STATISTICS , CHARACTERISTIC_VOLTAGE_STATISTICS },
2843 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON , CHARACTERISTIC_ILLUMINANCE },
2844 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG , CHARACTERISTIC_ILLUMINANCE },
2845 { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY , CHARACTERISTIC_ILLUMINANCE },
2846 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON , CHARACTERISTIC_PERCEIVED_LIGHTNESS },
2847 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG , CHARACTERISTIC_PERCEIVED_LIGHTNESS },
2848 { PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY , CHARACTERISTIC_PERCEIVED_LIGHTNESS },
2849 { PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY , CHARACTERISTIC_PERCENTAGE_8 },
2850 { PROPERTY_LIGHT_CONTROL_REGULATOR_KID , CHARACTERISTIC_COEFFICIENT },
2851 { PROPERTY_LIGHT_CONTROL_REGULATOR_KIU , CHARACTERISTIC_COEFFICIENT },
2852 { PROPERTY_LIGHT_CONTROL_REGULATOR_KPD , CHARACTERISTIC_COEFFICIENT },
2853 { PROPERTY_LIGHT_CONTROL_REGULATOR_KPU , CHARACTERISTIC_COEFFICIENT },
2854 { PROPERTY_LIGHT_CONTROL_TIME_FADE , CHARACTERISTIC_TIME_MILLISECOND_24 },
2855 { PROPERTY_LIGHT_CONTROL_TIME_FADE_ON , CHARACTERISTIC_TIME_MILLISECOND_24 },
2856 { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO , CHARACTERISTIC_TIME_MILLISECOND_24 },
2857 { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL , CHARACTERISTIC_TIME_MILLISECOND_24 },
2858 { PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY , CHARACTERISTIC_TIME_MILLISECOND_24 },
2859 { PROPERTY_LIGHT_CONTROL_TIME_PROLONG , CHARACTERISTIC_TIME_MILLISECOND_24 },
2860 { PROPERTY_LIGHT_CONTROL_TIME_RUN_ON , CHARACTERISTIC_TIME_MILLISECOND_24 },
2861 { PROPERTY_LIGHT_DISTRIBUTION , CHARACTERISTIC_LIGHT_DISTRIBUTION },
2862 { PROPERTY_LIGHT_SOURCE_CURRENT , CHARACTERISTIC_AVERAGE_CURRENT },
2863 { PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE , CHARACTERISTIC_TIME_SECOND_32 },
2864 { PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE , CHARACTERISTIC_TIME_SECOND_32 },
2865 { PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2866 { PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2867 { PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2868 { PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE , CHARACTERISTIC_COUNT_24 },
2869 { PROPERTY_LIGHT_SOURCE_TEMPERATURE , CHARACTERISTIC_HIGH_TEMPERATURE },
2870 { PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2871 { PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2872 { PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES , CHARACTERISTIC_COUNT_24 },
2873 { PROPERTY_LIGHT_SOURCE_TYPE , CHARACTERISTIC_LIGHT_SOURCE_TYPE },
2874 { PROPERTY_LIGHT_SOURCE_VOLTAGE , CHARACTERISTIC_AVERAGE_VOLTAGE },
2875 { PROPERTY_LUMEN_MAINTENANCE_FACTOR , CHARACTERISTIC_PERCENTAGE_8 },
2876 { PROPERTY_LUMINAIRE_COLOR , CHARACTERISTIC_FIXED_STRING_24 },
2877 { PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER , CHARACTERISTIC_FIXED_STRING_24 },
2878 { PROPERTY_LUMINAIRE_IDENTIFICATION_STRING , CHARACTERISTIC_FIXED_STRING_64 },
2879 { PROPERTY_LUMINAIRE_MANUFACTURER_GTIN , CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER },
2880 { PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER , CHARACTERISTIC_POWER },
2881 { PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE , CHARACTERISTIC_VOLTAGE },
2882 { PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE , CHARACTERISTIC_VOLTAGE },
2883 { PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL , CHARACTERISTIC_POWER },
2884 { PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE , CHARACTERISTIC_DATE_UTC },
2885 { PROPERTY_LUMINOUS_EFFICACY , CHARACTERISTIC_LUMINOUS_EFFICACY },
2886 { PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON , CHARACTERISTIC_LUMINOUS_ENERGY },
2887 { PROPERTY_LUMINOUS_EXPOSURE , CHARACTERISTIC_LUMINOUS_EXPOSURE },
2888 { PROPERTY_LUMINOUS_FLUX_RANGE , CHARACTERISTIC_LUMINOUS_FLUX_RANGE },
2889 { PROPERTY_MAGNETIC_DECLINATION , CHARACTERISTIC_MAGNETIC_DECLINATION },
2890 { PROPERTY_MAGNETIC_FLUX_DENSITY_2_D , CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D },
2891 { PROPERTY_MAGNETIC_FLUX_DENSITY_3_D , CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D },
2892 { PROPERTY_MOTION_SENSED , CHARACTERISTIC_PERCENTAGE_8 },
2893 { PROPERTY_MOTION_THRESHOLD , CHARACTERISTIC_PERCENTAGE_8 },
2894 { PROPERTY_NOMINAL_LIGHT_OUTPUT , CHARACTERISTIC_LIGHT_OUTPUT },
2895 { PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2896 { PROPERTY_OUTDOOR_STATISTICAL_VALUES , CHARACTERISTIC_TEMPERATURE_8_STATISTICS },
2897 { PROPERTY_OUTPUT_CURRENT_PERCENT , CHARACTERISTIC_PERCENTAGE_8 },
2898 { PROPERTY_OUTPUT_CURRENT_RANGE , CHARACTERISTIC_ELECTRIC_CURRENT_RANGE },
2899 { PROPERTY_OUTPUT_CURRENT_STATISTICS , CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS },
2900 { PROPERTY_OUTPUT_POWER_LIMITATION , CHARACTERISTIC_EVENT_STATISTICS },
2901 { PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION , CHARACTERISTIC_PERCENTAGE_8 },
2902 { PROPERTY_OUTPUT_VOLTAGE_RANGE , CHARACTERISTIC_VOLTAGE_SPECIFICATION },
2903 { PROPERTY_OUTPUT_VOLTAGE_STATISTICS , CHARACTERISTIC_VOLTAGE_STATISTICS },
2904 { PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2905 { PROPERTY_OVERALL_FAILURE_CONDITION , CHARACTERISTIC_EVENT_STATISTICS },
2906 { PROPERTY_PEOPLE_COUNT , CHARACTERISTIC_COUNT_16 },
2907 { PROPERTY_POLLEN_CONCENTRATION , CHARACTERISTIC_POLLEN_CONCENTRATION },
2908 { PROPERTY_POWER_FACTOR , CHARACTERISTIC_COSINE_OF_THE_ANGLE },
2909 { PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE , CHARACTERISTIC_TEMPERATURE },
2910 { PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE , CHARACTERISTIC_ENERGY32 },
2911 { PROPERTY_PRESENCE_DETECTED , CHARACTERISTIC_BOOLEAN },
2912 { PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION , CHARACTERISTIC_CO2_CONCENTRATION },
2913 { PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL , CHARACTERISTIC_ILLUMINANCE },
2914 { PROPERTY_PRESENT_AMBIENT_NOISE , CHARACTERISTIC_NOISE },
2915 { PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY , CHARACTERISTIC_HUMIDITY },
2916 { PROPERTY_PRESENT_AMBIENT_TEMPERATURE , CHARACTERISTIC_TEMPERATURE_8 },
2917 { PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION, CHARACTERISTIC_VOC_CONCENTRATION },
2918 { PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES , CHARACTERISTIC_CHROMATICITY_COORDINATES },
2919 { PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE , CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE },
2920 { PROPERTY_PRESENT_DEVICE_INPUT_POWER , CHARACTERISTIC_POWER },
2921 { PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY , CHARACTERISTIC_PERCENTAGE_8 },
2922 { PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE , CHARACTERISTIC_TEMPERATURE },
2923 { PROPERTY_PRESENT_ILLUMINANCE , CHARACTERISTIC_ILLUMINANCE },
2924 { PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE , CHARACTERISTIC_TEMPERATURE_8 },
2925 { PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY , CHARACTERISTIC_HUMIDITY },
2926 { PROPERTY_PRESENT_INPUT_CURRENT , CHARACTERISTIC_ELECTRIC_CURRENT },
2927 { PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE , CHARACTERISTIC_PERCENTAGE_8 },
2928 { PROPERTY_PRESENT_INPUT_VOLTAGE , CHARACTERISTIC_VOLTAGE },
2929 { PROPERTY_PRESENT_LUMINOUS_FLUX , CHARACTERISTIC_LUMINOUS_FLUX },
2930 { PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE , CHARACTERISTIC_TEMPERATURE_8 },
2931 { PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY , CHARACTERISTIC_HUMIDITY },
2932 { PROPERTY_PRESENT_OUTPUT_CURRENT , CHARACTERISTIC_ELECTRIC_CURRENT },
2933 { PROPERTY_PRESENT_OUTPUT_VOLTAGE , CHARACTERISTIC_VOLTAGE },
2934 { PROPERTY_PRESENT_PLANCKIAN_DISTANCE , CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN },
2935 { PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE , CHARACTERISTIC_PERCENTAGE_8 },
2936 { PROPERTY_PRESSURE , CHARACTERISTIC_PRESSURE },
2937 { PROPERTY_RAINFALL , CHARACTERISTIC_RAINFALL },
2938 { PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE , CHARACTERISTIC_TIME_HOUR_24 },
2939 { PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS , CHARACTERISTIC_COUNT_24 },
2940 { PROPERTY_REFERENCE_TEMPERATURE , CHARACTERISTIC_HIGH_TEMPERATURE },
2941 { PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY , CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY },
2942 { PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE , CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE },
2943 { PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE , CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE },
2944 { PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE, CHARACTERISTIC_LUMINOUS_ENERGY },
2945 { PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE, CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE },
2946 { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE , CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE },
2947 { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE , CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE },
2948 { PROPERTY_SENSOR_GAIN , CHARACTERISTIC_COEFFICIENT },
2949 { PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS , CHARACTERISTIC_EVENT_STATISTICS },
2950 { PROPERTY_THERMAL_DERATING , CHARACTERISTIC_EVENT_STATISTICS },
2951 { PROPERTY_TIME_SINCE_MOTION_SENSED , CHARACTERISTIC_TIME_SECOND_16 },
2952 { PROPERTY_TIME_SINCE_PRESENCE_DETECTED , CHARACTERISTIC_TIME_SECOND_16 },
2953 { PROPERTY_TOTAL_DEVICE_ENERGY_USE , CHARACTERISTIC_ENERGY },
2954 { PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES , CHARACTERISTIC_COUNT_24 },
2955 { PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES , CHARACTERISTIC_COUNT_24 },
2956 { PROPERTY_TOTAL_DEVICE_POWER_ON_TIME , CHARACTERISTIC_TIME_HOUR_24 },
2957 { PROPERTY_TOTAL_DEVICE_RUNTIME , CHARACTERISTIC_TIME_HOUR_24 },
2958 { PROPERTY_TOTAL_DEVICE_STARTS , CHARACTERISTIC_COUNT_24 },
2959 { PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME , CHARACTERISTIC_TIME_HOUR_24 },
2960 { PROPERTY_TOTAL_LUMINOUS_ENERGY , CHARACTERISTIC_LUMINOUS_ENERGY },
2961 { PROPERTY_TRUE_WIND_DIRECTION , CHARACTERISTIC_TRUE_WIND_DIRECTION },
2962 { PROPERTY_TRUE_WIND_SPEED , CHARACTERISTIC_TRUE_WIND_SPEED },
2963 { PROPERTY_UV_INDEX , CHARACTERISTIC_UV_INDEX },
2964 { PROPERTY_WIND_CHILL , CHARACTERISTIC_WIND_CHILL },
2965 { 0, 0},
2968 static const btmesh_column_property_t btmesh_column_properties[] = {
2969 { CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY, CHARACTERISTIC_DECIHOUR_8, CHARACTERISTIC_TEMPERATURE_8 },
2970 { CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE, CHARACTERISTIC_TEMPERATURE, CHARACTERISTIC_PERCENTAGE_8 },
2971 { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE, CHARACTERISTIC_ELECTRIC_CURRENT, CHARACTERISTIC_PERCENTAGE_8 },
2972 { CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY, CHARACTERISTIC_DECIHOUR_8, CHARACTERISTIC_ENERGY },
2973 { CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE, CHARACTERISTIC_ILLUMINANCE, CHARACTERISTIC_PERCENTAGE_8 },
2974 { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE, CHARACTERISTIC_GENERIC_LEVEL, CHARACTERISTIC_PERCENTAGE_8 },
2975 { 0, 0, 0},
2978 static const bt_gatt_characteristic_t bt_gatt_characteristics[] = {
2979 { PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16 , 2, &hf_bt_phony_characteristic_percentage_change_16 , DISSECTOR_SIMPLE },
2980 { PHONY_CHARACTERISTIC_INDEX , 2, &hf_bt_phony_characteristic_index , DISSECTOR_SIMPLE },
2981 { CHARACTERISTIC_APPARENT_ENERGY32 , 4, NULL , DISSECTOR_SIMPLE },
2982 { CHARACTERISTIC_APPARENT_POWER , 3, NULL , DISSECTOR_SIMPLE },
2983 { CHARACTERISTIC_APPARENT_WIND_DIRECTION , 2, NULL , DISSECTOR_SIMPLE },
2984 { CHARACTERISTIC_APPARENT_WIND_SPEED , 2, NULL , DISSECTOR_SIMPLE },
2985 { CHARACTERISTIC_APPEARANCE , 2, NULL , DISSECTOR_SIMPLE },
2986 { CHARACTERISTIC_AVERAGE_CURRENT , 3, NULL , DISSECTOR_SIMPLE },
2987 { CHARACTERISTIC_AVERAGE_VOLTAGE , 3, NULL , DISSECTOR_SIMPLE },
2988 { CHARACTERISTIC_BOOLEAN , 1, &hf_bt_characteristic_boolean , DISSECTOR_SIMPLE },
2989 { CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN , 2, NULL , DISSECTOR_SIMPLE },
2990 { CHARACTERISTIC_CHROMATICITY_COORDINATES , 2, NULL , DISSECTOR_SIMPLE },
2991 { CHARACTERISTIC_CHROMATICITY_TOLERANCE , 1, NULL , DISSECTOR_SIMPLE },
2992 { CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX , 1, NULL , DISSECTOR_SIMPLE },
2993 { CHARACTERISTIC_CO2_CONCENTRATION , 2, NULL , DISSECTOR_SIMPLE },
2994 { CHARACTERISTIC_COEFFICIENT , 4, &hf_bt_characteristic_coefficient , DISSECTOR_SIMPLE },
2995 { CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE , 2, NULL , DISSECTOR_SIMPLE },
2996 { CHARACTERISTIC_COSINE_OF_THE_ANGLE , 1, NULL , DISSECTOR_SIMPLE },
2997 { CHARACTERISTIC_COUNT_16 , 2, &hf_bt_characteristic_count_16 , DISSECTOR_SIMPLE },
2998 { CHARACTERISTIC_COUNT_24 , 3, NULL , DISSECTOR_SIMPLE },
2999 { CHARACTERISTIC_COUNTRY_CODE , 2, NULL , DISSECTOR_SIMPLE },
3000 { CHARACTERISTIC_DATE_UTC , 3, NULL , DISSECTOR_SIMPLE },
3001 { CHARACTERISTIC_DECIHOUR_8 , 1, &hf_bt_characteristic_time_decihour_8 , DISSECTOR_SIMPLE },
3002 { CHARACTERISTIC_DEW_POINT , 1, NULL , DISSECTOR_SIMPLE },
3003 { CHARACTERISTIC_ELECTRIC_CURRENT , 2, &hf_bt_characteristic_electric_current , DISSECTOR_SIMPLE },
3004 { CHARACTERISTIC_ELECTRIC_CURRENT_RANGE , 4, NULL , DISSECTOR_SIMPLE },
3005 { CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION , 6, NULL , DISSECTOR_SIMPLE },
3006 { CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS , 9, NULL , DISSECTOR_SIMPLE },
3007 { CHARACTERISTIC_ENERGY , 3, &hf_bt_characteristic_energy , DISSECTOR_SIMPLE },
3008 { CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY , 5, NULL , DISSECTOR_THREE_VALUES },
3009 { CHARACTERISTIC_ENERGY32 , 4, NULL , DISSECTOR_SIMPLE },
3010 { CHARACTERISTIC_EVENT_STATISTICS , 6, NULL , DISSECTOR_SIMPLE },
3011 { CHARACTERISTIC_FIXED_STRING_16 , 16, NULL , DISSECTOR_SIMPLE },
3012 { CHARACTERISTIC_FIXED_STRING_24 , 24, NULL , DISSECTOR_SIMPLE },
3013 { CHARACTERISTIC_FIXED_STRING_36 , 36, NULL , DISSECTOR_SIMPLE },
3014 { CHARACTERISTIC_FIXED_STRING_64 , 64, NULL , DISSECTOR_SIMPLE },
3015 { CHARACTERISTIC_FIXED_STRING_8 , 8, NULL , DISSECTOR_SIMPLE },
3016 { CHARACTERISTIC_GENERIC_LEVEL , 2, &hf_bt_characteristic_generic_level , DISSECTOR_SIMPLE },
3017 { CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER , 6, NULL , DISSECTOR_SIMPLE },
3018 { CHARACTERISTIC_GUST_FACTOR , 1, NULL , DISSECTOR_SIMPLE },
3019 { CHARACTERISTIC_HEAT_INDEX , 1, NULL , DISSECTOR_SIMPLE },
3020 { CHARACTERISTIC_HIGH_TEMPERATURE , 2, NULL , DISSECTOR_SIMPLE },
3021 { CHARACTERISTIC_HIGH_VOLTAGE , 3, NULL , DISSECTOR_SIMPLE },
3022 { CHARACTERISTIC_HUMIDITY , 2, NULL , DISSECTOR_SIMPLE },
3023 { CHARACTERISTIC_ILLUMINANCE , 3, &hf_bt_characteristic_illuminance , DISSECTOR_SIMPLE },
3024 { CHARACTERISTIC_LIGHT_DISTRIBUTION , 1, NULL , DISSECTOR_SIMPLE },
3025 { CHARACTERISTIC_LIGHT_OUTPUT , 3, NULL , DISSECTOR_SIMPLE },
3026 { CHARACTERISTIC_LIGHT_SOURCE_TYPE , 1, NULL , DISSECTOR_SIMPLE },
3027 { CHARACTERISTIC_LUMINOUS_EFFICACY , 2, NULL , DISSECTOR_SIMPLE },
3028 { CHARACTERISTIC_LUMINOUS_ENERGY , 3, NULL , DISSECTOR_SIMPLE },
3029 { CHARACTERISTIC_LUMINOUS_EXPOSURE , 3, NULL , DISSECTOR_SIMPLE },
3030 { CHARACTERISTIC_LUMINOUS_FLUX , 2, NULL , DISSECTOR_SIMPLE },
3031 { CHARACTERISTIC_LUMINOUS_FLUX_RANGE , 4, NULL , DISSECTOR_SIMPLE },
3032 { CHARACTERISTIC_LUMINOUS_INTENSITY , 2, NULL , DISSECTOR_SIMPLE },
3033 { CHARACTERISTIC_MAGNETIC_DECLINATION , 2, NULL , DISSECTOR_SIMPLE },
3034 { CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D , 4, NULL , DISSECTOR_SIMPLE },
3035 { CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D , 6, NULL , DISSECTOR_SIMPLE },
3036 { CHARACTERISTIC_NOISE , 1, NULL , DISSECTOR_SIMPLE },
3037 { CHARACTERISTIC_PERCEIVED_LIGHTNESS , 2, &hf_bt_characteristic_perceived_lightness , DISSECTOR_SIMPLE },
3038 { CHARACTERISTIC_PERCENTAGE_8 , 1, &hf_bt_characteristic_percentage_8 , DISSECTOR_SIMPLE },
3039 { CHARACTERISTIC_POLLEN_CONCENTRATION , 3, NULL , DISSECTOR_SIMPLE },
3040 { CHARACTERISTIC_POWER , 3, NULL , DISSECTOR_SIMPLE },
3041 { CHARACTERISTIC_POWER_SPECIFICATION , 9, NULL , DISSECTOR_SIMPLE },
3042 { CHARACTERISTIC_PRESSURE , 4, NULL , DISSECTOR_SIMPLE },
3043 { CHARACTERISTIC_RAINFALL , 2, NULL , DISSECTOR_SIMPLE },
3044 { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE , 5, NULL , DISSECTOR_THREE_VALUES },
3045 { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE, 5, NULL , DISSECTOR_THREE_VALUES },
3046 { CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE , 5, NULL , DISSECTOR_THREE_VALUES },
3047 { CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE , 5, NULL , DISSECTOR_SIMPLE },
3048 { CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE , 7, NULL , DISSECTOR_THREE_VALUES },
3049 { CHARACTERISTIC_TEMPERATURE , 2, &hf_bt_characteristic_temperature , DISSECTOR_SIMPLE },
3050 { CHARACTERISTIC_TEMPERATURE_8 , 1, &hf_bt_characteristic_temperature_8 , DISSECTOR_SIMPLE },
3051 { CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY , 3, NULL , DISSECTOR_THREE_VALUES },
3052 { CHARACTERISTIC_TEMPERATURE_8_STATISTICS , 5, NULL , DISSECTOR_SIMPLE },
3053 { CHARACTERISTIC_TEMPERATURE_RANGE , 4, NULL , DISSECTOR_SIMPLE },
3054 { CHARACTERISTIC_TEMPERATURE_STATISTICS , 9, NULL , DISSECTOR_SIMPLE },
3055 { CHARACTERISTIC_TIME_HOUR_24 , 3, NULL , DISSECTOR_SIMPLE },
3056 { CHARACTERISTIC_TIME_MILLISECOND_24 , 3, &hf_bt_characteristic_time_millisecond_24 , DISSECTOR_SIMPLE },
3057 { CHARACTERISTIC_TIME_SECOND_16 , 2, &hf_bt_characteristic_time_second_16 , DISSECTOR_SIMPLE },
3058 { CHARACTERISTIC_TIME_SECOND_32 , 4, NULL , DISSECTOR_SIMPLE },
3059 { CHARACTERISTIC_TRUE_WIND_DIRECTION , 2, NULL , DISSECTOR_SIMPLE },
3060 { CHARACTERISTIC_TRUE_WIND_SPEED , 2, NULL , DISSECTOR_SIMPLE },
3061 { CHARACTERISTIC_UV_INDEX , 1, NULL , DISSECTOR_SIMPLE },
3062 { CHARACTERISTIC_VOC_CONCENTRATION , 2, NULL , DISSECTOR_SIMPLE },
3063 { CHARACTERISTIC_VOLTAGE , 2, NULL , DISSECTOR_SIMPLE },
3064 { CHARACTERISTIC_VOLTAGE_FREQUENCY , 2, NULL , DISSECTOR_SIMPLE },
3065 { CHARACTERISTIC_VOLTAGE_SPECIFICATION , 6, NULL , DISSECTOR_SIMPLE },
3066 { CHARACTERISTIC_VOLTAGE_STATISTICS , 9, NULL , DISSECTOR_SIMPLE },
3067 { CHARACTERISTIC_WIND_CHILL , 1, NULL , DISSECTOR_SIMPLE },
3068 { 0, 0, NULL, 0},
3071 /* Upper Transport Message reassembly */
3073 static reassembly_table upper_transport_reassembly_table;
3075 typedef struct _upper_transport_fragment_key {
3076 uint16_t src;
3077 unsigned seq0;
3078 unsigned ivindex;
3079 uint32_t net_key_iv_index_hash;
3080 } upper_transport_fragment_key;
3082 static unsigned
3083 upper_transport_fragment_hash(const void *k)
3085 const upper_transport_fragment_key* key = (const upper_transport_fragment_key*) k;
3086 unsigned hash_val;
3088 const uint8_t hash_buf_len = sizeof(uint16_t) + 2 * sizeof(unsigned) + sizeof(uint32_t);
3089 unsigned idx=0;
3090 uint8_t* hash_buf = (uint8_t*)wmem_alloc(wmem_packet_scope(), hash_buf_len);
3091 memcpy(hash_buf, &key->src, sizeof(uint16_t));
3092 idx += sizeof(uint16_t);
3093 memcpy(&hash_buf[idx], &key->seq0, sizeof(unsigned));
3094 idx += sizeof(unsigned);
3095 memcpy(&hash_buf[idx], &key->ivindex, sizeof(key->ivindex));
3096 idx += sizeof(unsigned);
3097 memcpy(&hash_buf[idx], &key->net_key_iv_index_hash, sizeof(key->net_key_iv_index_hash));
3098 hash_val = wmem_strong_hash(hash_buf, hash_buf_len);
3100 return hash_val;
3103 static int
3104 upper_transport_fragment_equal(const void *k1, const void *k2)
3106 const upper_transport_fragment_key* key1 = (const upper_transport_fragment_key*) k1;
3107 const upper_transport_fragment_key* key2 = (const upper_transport_fragment_key*) k2;
3109 return ((key1->src == key2->src) && (key1->seq0 == key2->seq0) &&
3110 (key1->ivindex == key2->ivindex) && (key1->net_key_iv_index_hash == key2->net_key_iv_index_hash)
3111 ? true : false);
3114 static void *
3115 upper_transport_fragment_temporary_key(const packet_info *pinfo _U_, const uint32_t id _U_,
3116 const void *data)
3118 upper_transport_fragment_key *key = g_slice_new(upper_transport_fragment_key);
3119 const upper_transport_fragment_key *pkt = (const upper_transport_fragment_key *)data;
3121 key->src = pkt->src;
3122 key->seq0 = pkt->seq0;
3123 key->ivindex = pkt->ivindex;
3124 key->net_key_iv_index_hash = pkt->net_key_iv_index_hash;
3126 return key;
3129 static void
3130 upper_transport_fragment_free_temporary_key(void *ptr)
3132 upper_transport_fragment_key *key = (upper_transport_fragment_key *)ptr;
3134 g_slice_free(upper_transport_fragment_key, key);
3137 static void *
3138 upper_transport_fragment_persistent_key(const packet_info *pinfo _U_, const uint32_t id _U_,
3139 const void *data)
3141 upper_transport_fragment_key *key = g_slice_new(upper_transport_fragment_key);
3142 const upper_transport_fragment_key *pkt = (const upper_transport_fragment_key *)data;
3144 key->src = pkt->src;
3145 key->seq0 = pkt->seq0;
3146 key->ivindex = pkt->ivindex;
3147 key->net_key_iv_index_hash = pkt->net_key_iv_index_hash;
3149 return key;
3152 static void
3153 upper_transport_fragment_free_persistent_key(void *ptr)
3155 upper_transport_fragment_key *key = (upper_transport_fragment_key *)ptr;
3156 if (key) {
3157 g_slice_free(upper_transport_fragment_key, key);
3161 static const reassembly_table_functions upper_transport_reassembly_table_functions = {
3162 upper_transport_fragment_hash,
3163 upper_transport_fragment_equal,
3164 upper_transport_fragment_temporary_key,
3165 upper_transport_fragment_persistent_key,
3166 upper_transport_fragment_free_temporary_key,
3167 upper_transport_fragment_free_persistent_key
3170 /* A BT Mesh dissector is not really useful without decryption as all packets are encrypted. Just leave a stub dissector outside of */
3172 /* BT Mesh s1 function */
3173 static bool
3174 s1(uint8_t *m, size_t mlen, uint8_t *salt)
3177 gcry_mac_hd_t mac_hd;
3178 gcry_error_t gcrypt_err;
3179 size_t read_digest_length = 16;
3180 uint8_t zero[16] = { 0 };
3182 /* Open gcrypt handle */
3183 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3184 if (gcrypt_err != 0) {
3185 return false;
3188 /* Set the key */
3189 gcrypt_err = gcry_mac_setkey(mac_hd, &zero, 16);
3190 if (gcrypt_err != 0) {
3191 gcry_mac_close(mac_hd);
3192 return false;
3195 gcrypt_err = gcry_mac_write(mac_hd, m, mlen);
3196 if (gcrypt_err != 0) {
3197 gcry_mac_close(mac_hd);
3198 return false;
3201 /* Read out the digest */
3202 gcrypt_err = gcry_mac_read(mac_hd, salt, &read_digest_length);
3203 if (gcrypt_err != 0) {
3204 gcry_mac_close(mac_hd);
3205 return false;
3208 /* Now close the mac handle */
3209 gcry_mac_close(mac_hd);
3210 return true;
3213 /* BT Mesh Labebl UUID hash function
3215 * SALT = s1 ("vtad")
3216 * hash = AES-CMAC(SALT, Label UUID) mod 2(pow)14
3219 static bool
3220 label_uuid_hash(uat_btmesh_label_uuid_record_t *label_uuid_record)
3222 gcry_mac_hd_t mac_hd;
3223 gcry_error_t gcrypt_err;
3224 uint8_t vtad[4] = { 'v', 't', 'a', 'd' };
3225 size_t mlen = 4;
3226 uint8_t salt[16];
3227 uint8_t hash[16];
3228 size_t read_digest_length = 16;
3230 if (label_uuid_record->label_uuid_length != 16) {
3231 return false;
3234 /* SALT = s1("vtad") */
3235 if (s1(vtad, mlen, salt) == false) {
3236 return false;
3239 /* hash = AES-CMAC(SALT, Label UUID) */
3240 /* Open gcrypt handle */
3241 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3242 if (gcrypt_err != 0) {
3243 return false;
3246 /* Set the key */
3247 gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3248 if (gcrypt_err != 0) {
3249 gcry_mac_close(mac_hd);
3250 return false;
3253 gcrypt_err = gcry_mac_write(mac_hd, label_uuid_record->label_uuid, 16);
3254 if (gcrypt_err != 0) {
3255 gcry_mac_close(mac_hd);
3256 return false;
3259 /* Read out the digest */
3260 gcrypt_err = gcry_mac_read(mac_hd, hash, &read_digest_length);
3261 if (gcrypt_err != 0) {
3262 gcry_mac_close(mac_hd);
3263 return false;
3266 label_uuid_record->hash = hash[15] + ((uint16_t)(hash[14] & 0x3f) << 8) + 0x8000;
3268 /* Now close the mac handle */
3269 gcry_mac_close(mac_hd);
3270 return true;
3273 /* BT Mesh K2 function
3274 * Allow plen up to 9 char
3276 * The key (T) is computed as follows:
3277 * T = AES-CMACSALT (N)
3278 * SALT is the 128-bit value computed as follows
3279 * SALT = s1("smk2")
3280 * The output of the key generation function k2 is as follows:
3281 * T0 = empty string (zero length)
3282 * T1 = AES-CMACT (T0 || P || 0x01)
3283 * T2 = AES-CMACT (T1 || P || 0x02)
3284 * T3 = AES-CMACT (T2 || P || 0x03)
3285 * k2(N, P) = (T1 || T2 || T3) mod 2(pow)263
3287 static bool
3288 k2(uat_btmesh_record_t * net_key_set, uint8_t *p, size_t plen)
3290 gcry_mac_hd_t mac_hd;
3291 gcry_error_t gcrypt_err;
3292 uint8_t smk2[4] = { 's', 'm', 'k', '2' };
3293 size_t mlen = 4;
3294 uint8_t salt[16];
3295 uint8_t t[16];
3296 uint8_t t1[16];
3297 uint8_t p_t1[9 + 1];
3298 uint8_t p_t2[16 + 9 + 1];
3299 uint8_t p_t3[16 + 9 + 1];
3301 size_t read_digest_length = 16;
3303 if (plen > 8) {
3304 return false;
3307 if (net_key_set->network_key_length != 16) {
3308 return false;
3311 /* SALT = s1("smk2") */
3312 if (s1(smk2, mlen, salt) == false) {
3313 return false;
3316 /* T = AES-CMAC_SALT(N) */
3317 /* Open gcrypt handle */
3318 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3319 if (gcrypt_err != 0) {
3320 return false;
3323 /* Set the key */
3324 gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3325 if (gcrypt_err != 0) {
3326 gcry_mac_close(mac_hd);
3327 return false;
3330 gcrypt_err = gcry_mac_write(mac_hd, net_key_set->network_key, 16);
3331 if (gcrypt_err != 0) {
3332 gcry_mac_close(mac_hd);
3333 return false;
3336 /* Read out the digest */
3337 gcrypt_err = gcry_mac_read(mac_hd, t, &read_digest_length);
3338 if (gcrypt_err != 0) {
3339 gcry_mac_close(mac_hd);
3340 return false;
3343 /* Now close the mac handle */
3344 gcry_mac_close(mac_hd);
3347 * T0 = empty string (zero length)
3348 * T1 = AES-CMAC_T(T0 || P || 0x01)
3350 memcpy(p_t1, p, plen);
3351 p_t1[plen] = 0x01;
3353 /* Open gcrypt handle */
3354 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3355 if (gcrypt_err != 0) {
3356 return false;
3359 /* Set the key */
3360 gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3361 if (gcrypt_err != 0) {
3362 gcry_mac_close(mac_hd);
3363 return false;
3366 gcrypt_err = gcry_mac_write(mac_hd, &p_t1, plen + 1);
3367 if (gcrypt_err != 0) {
3368 gcry_mac_close(mac_hd);
3369 return false;
3372 /* Read out the digest */
3373 gcrypt_err = gcry_mac_read(mac_hd, t1, &read_digest_length);
3374 if (gcrypt_err != 0) {
3375 gcry_mac_close(mac_hd);
3376 return false;
3378 net_key_set->nid = (t1[15] & 0x7f);
3380 * T2 = AES-CMAC_T(T1 || P || 0x02)
3381 * (EncryptionKey)
3384 /* Now close the mac handle */
3385 gcry_mac_close(mac_hd);
3387 memcpy(p_t2, t1, 16);
3388 memcpy(&p_t2[16], p, plen);
3389 p_t2[16 + plen] = 0x02;
3391 /* Open gcrypt handle */
3392 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3393 if (gcrypt_err != 0) {
3394 return false;
3397 /* Set the key */
3398 gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3399 if (gcrypt_err != 0) {
3400 gcry_mac_close(mac_hd);
3401 return false;
3404 gcrypt_err = gcry_mac_write(mac_hd, &p_t2, 16 + plen + 1);
3405 if (gcrypt_err != 0) {
3406 gcry_mac_close(mac_hd);
3407 return false;
3410 /* Read out the digest */
3411 gcrypt_err = gcry_mac_read(mac_hd, net_key_set->encryptionkey, &read_digest_length);
3412 if (gcrypt_err != 0) {
3413 gcry_mac_close(mac_hd);
3414 return false;
3417 /* Now close the mac handle */
3418 gcry_mac_close(mac_hd);
3420 /* T3 = AES-CMAC_T(T2 || P || 0x03) */
3421 /* PrivacyKey */
3422 memcpy(p_t3, net_key_set->encryptionkey, 16);
3423 memcpy(&p_t3[16], p, plen);
3424 p_t3[16 + plen] = 0x03;
3426 /* Open gcrypt handle */
3427 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3428 if (gcrypt_err != 0) {
3429 return false;
3432 /* Set the key */
3433 gcrypt_err = gcry_mac_setkey(mac_hd, t, 16);
3434 if (gcrypt_err != 0) {
3435 gcry_mac_close(mac_hd);
3436 return false;
3439 gcrypt_err = gcry_mac_write(mac_hd, p_t3, 16 + plen + 1);
3440 if (gcrypt_err != 0) {
3441 gcry_mac_close(mac_hd);
3442 return false;
3445 /* Read out the digest */
3446 gcrypt_err = gcry_mac_read(mac_hd, net_key_set->privacykey, &read_digest_length);
3447 if (gcrypt_err != 0) {
3448 gcry_mac_close(mac_hd);
3449 return false;
3452 /* Now close the mac handle */
3453 gcry_mac_close(mac_hd);
3454 return true;
3457 /* BT Mesh K4 function
3459 The inputs to function k4 is:
3460 N is 128 bits
3462 The key (T) is computed as follows:
3463 T = AES-CMAC (SALT, N)
3465 SALT is the 128-bit value computed as follows:
3466 SALT = s1("smk4")
3468 The output of the derivation function k4 is as follows:
3469 K4(N) = AES-CMAC (T, "id6" || 0x01 ) mod 2(pow)6
3472 static bool
3473 k4(uat_btmesh_record_t *key_set)
3475 gcry_mac_hd_t mac_hd;
3476 gcry_error_t gcrypt_err;
3478 uint8_t smk4[4] = { 's', 'm', 'k', '4' };
3479 size_t mlen = 4;
3480 uint8_t id6[4] = { 'i', 'd', '6', 0x01 };
3481 size_t id6len = 4;
3482 uint8_t salt[16];
3483 uint8_t t[16];
3484 uint8_t t1[16];
3486 size_t read_digest_length = 16;
3488 if (key_set->application_key_length != 16) {
3489 return false;
3492 /* SALT = s1("smk4") */
3493 if (s1(smk4, mlen, salt) == false) {
3494 return false;
3497 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3498 if (gcrypt_err != 0) {
3499 return false;
3502 /* Set the key */
3503 gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3504 if (gcrypt_err != 0) {
3505 gcry_mac_close(mac_hd);
3506 return false;
3509 gcrypt_err = gcry_mac_write(mac_hd, key_set->application_key, 16);
3510 if (gcrypt_err != 0) {
3511 gcry_mac_close(mac_hd);
3512 return false;
3515 /* Read out the digest */
3516 gcrypt_err = gcry_mac_read(mac_hd, t, &read_digest_length);
3517 if (gcrypt_err != 0) {
3518 gcry_mac_close(mac_hd);
3519 return false;
3522 /* Now close the mac handle */
3523 gcry_mac_close(mac_hd);
3525 /* Open gcrypt handle */
3526 gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3527 if (gcrypt_err != 0) {
3528 return false;
3531 /* Set the key */
3532 gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3533 if (gcrypt_err != 0) {
3534 gcry_mac_close(mac_hd);
3535 return false;
3538 gcrypt_err = gcry_mac_write(mac_hd, &id6, id6len);
3539 if (gcrypt_err != 0) {
3540 gcry_mac_close(mac_hd);
3541 return false;
3544 /* Read out the digest */
3545 gcrypt_err = gcry_mac_read(mac_hd, t1, &read_digest_length);
3546 if (gcrypt_err != 0) {
3547 gcry_mac_close(mac_hd);
3548 return false;
3551 key_set->aid = (t1[15] & 0x3f);
3553 /* Now close the mac handle */
3554 gcry_mac_close(mac_hd);
3555 return true;
3558 static bool
3559 create_central_security_keys(uat_btmesh_record_t * net_key_set)
3561 uint8_t p[1] = { 0 };
3562 size_t plen = 1;
3564 return k2(net_key_set, p, plen);
3567 static tvbuff_t *
3568 btmesh_deobfuscate(tvbuff_t *tvb, packet_info *pinfo, int offset _U_, uat_btmesh_record_t *net_key_set)
3570 tvbuff_t *de_obf_tvb = NULL;
3572 /* Decode ObfuscatedData
3573 * Privacy Random = (EncDST || EncTransportPDU || NetMIC)[0-6]
3574 * PECB = e ((PrivacyKey, 0x0000000000 || IV Index || Privacy Random)
3575 * (CTL || TTL || SEQ || SRC) = ObfuscatedData
3577 uint8_t in[16]; /* 0x0000000000 || IV Index || Privacy Random */
3578 gcry_cipher_hd_t cipher_hd;
3579 uint8_t pecb[16];
3580 uint8_t *plaintextnetworkheader = (uint8_t *)wmem_alloc(pinfo->pool, 6);
3581 int i;
3583 /* at least 1 + 6 + 2 + 1 + 4 + 4 = 18 octets must be present in tvb to decrypt */
3584 if (!tvb_bytes_exist(tvb, 0, 18)) {
3585 return NULL;
3588 memset(in, 0x00, 5);
3589 memcpy((uint8_t *)&in + 5, net_key_set->ivindex, 4);
3591 /* Privacy random */
3592 tvb_memcpy(tvb, (uint8_t *)&in + 9, 7, 7);
3594 if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_ECB, 0)) {
3595 return NULL;
3598 if (gcry_cipher_setkey(cipher_hd, net_key_set->privacykey, 16)) {
3599 gcry_cipher_close(cipher_hd);
3600 return NULL;
3603 /* Decrypt */
3604 if (gcry_cipher_encrypt(cipher_hd, &pecb, 16, &in, 16)) {
3605 gcry_cipher_close(cipher_hd);
3606 return NULL;
3609 /* Now close the cipher handle */
3610 gcry_cipher_close(cipher_hd);
3612 for ( i = 0; i < 6; i++) {
3613 plaintextnetworkheader[i] = tvb_get_uint8(tvb, i + 1) ^ pecb[i];
3616 de_obf_tvb = tvb_new_child_real_data(tvb, plaintextnetworkheader, 6, 6);
3617 return de_obf_tvb;
3620 static const char *period_interval_unit[] = {"ms", "s", "s", "min"};
3621 static const uint32_t period_interval_multiplier[] = {100, 1, 10, 10};
3623 static void
3624 format_publish_period(char *buf, uint32_t value) {
3625 uint32_t idx = (value & 0xC0 ) >> 6;
3626 uint32_t val = (value & 0x3F ) * period_interval_multiplier[idx];
3627 snprintf(buf, ITEM_LABEL_LENGTH, "%u %s", val, period_interval_unit[idx]);
3630 static void
3631 format_transmit(char *buf, uint32_t value) {
3632 uint32_t prd = (((value & 0xF8 ) >> 3 ) + 1 ) * 10;
3633 uint32_t ctr = (value & 0x07 );
3634 switch (ctr) {
3635 case 0:
3636 snprintf(buf, ITEM_LABEL_LENGTH, "One transmissions");
3637 break;
3639 default:
3640 snprintf(buf, ITEM_LABEL_LENGTH, "%u transmissions at interval of %u ms", ctr, prd);
3644 static void
3645 format_retransmit(char *buf, uint32_t value) {
3646 uint32_t prd = (((value & 0xF8 ) >> 3 ) + 1 ) * 10;
3647 uint32_t ctr = (value & 0x07 );
3648 switch (ctr) {
3649 case 0:
3650 snprintf(buf, ITEM_LABEL_LENGTH, "No retransmissions");
3651 break;
3653 case 1:
3654 snprintf(buf, ITEM_LABEL_LENGTH, "One retransmission after %u ms", prd);
3655 break;
3657 default:
3658 snprintf(buf, ITEM_LABEL_LENGTH, "%u retransmissions at interval of %u ms", ctr, prd);
3662 static void
3663 format_interval_steps(char *buf, uint32_t value) {
3664 snprintf(buf, ITEM_LABEL_LENGTH, "%u ms (%u)", (value + 1) * 10, value);
3667 static void
3668 format_key_index(char *buf, uint32_t value) {
3669 snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x)", value & 0xFFF, value & 0xFFF);
3672 static void
3673 format_key_index_rfu(char *buf, uint32_t value) {
3674 snprintf(buf, ITEM_LABEL_LENGTH, "0x%1x", (value & 0xF000) >> 12);
3677 static void
3678 format_dual_key_index(char *buf, uint32_t value) {
3679 snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x), %u (0x%03x)", value & 0xFFF, value & 0xFFF, ( value & 0xFFF000 ) >> 12, ( value & 0xFFF000 ) >> 12);
3682 static void
3683 format_vendor_model(char *buf, uint32_t value) {
3684 snprintf(buf, ITEM_LABEL_LENGTH, "0x%04x of %s", value >> 16, val_to_str_ext_const(value & 0xFFFF, &bluetooth_company_id_vals_ext, "Unknown"));
3687 static void
3688 format_publish_appkeyindex_model(char *buf, uint32_t value) {
3689 snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x) using %s security material", value & 0x0FFF, value & 0x0FFF, ((value & 0x1000) ? "Friendship" : "Central"));
3692 static void
3693 format_delay_ms(char *buf, uint32_t value) {
3694 snprintf(buf, ITEM_LABEL_LENGTH, "%u ms", value * 5);
3697 static void
3698 format_power(char *buf, uint32_t value) {
3699 double val;
3700 val = (double)value / (double)655.35;
3701 snprintf(buf, ITEM_LABEL_LENGTH, "% 3.2f %%", val);
3704 static void
3705 format_battery_level(char *buf, uint32_t value) {
3706 if (value == 0xFF) {
3707 snprintf(buf, ITEM_LABEL_LENGTH, "The percentage of the charge level is unknown");
3708 return;
3710 if (value <= 0x64) {
3711 snprintf(buf, ITEM_LABEL_LENGTH, "%u %%", value);
3712 return;
3714 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%u)", value);
3717 static void
3718 format_battery_time(char *buf, uint32_t value) {
3719 if (value == 0xFFFFFF) {
3720 snprintf(buf, ITEM_LABEL_LENGTH, "The remaining time is not known");
3721 return;
3723 snprintf(buf, ITEM_LABEL_LENGTH, "%u minutes", value);
3726 static void
3727 format_global_latitude(char *buf, int32_t value) {
3728 if (value == INT_MIN) {
3729 snprintf(buf, ITEM_LABEL_LENGTH, "Global Latitude is not configured.");
3730 return;
3732 double val;
3733 val = (double)90.0 / (double) (0x7FFFFFFF) * (double)value ;
3734 snprintf(buf, ITEM_LABEL_LENGTH, "% 2.6f°", val);
3737 static void
3738 format_global_longitude(char *buf, int32_t value) {
3739 if (value == INT_MIN) {
3740 snprintf(buf, ITEM_LABEL_LENGTH, "Global Longitude is not configured.");
3741 return;
3743 double val;
3744 val = (double)180.0 / (double) (0x7FFFFFFF) * (double)value;
3745 snprintf(buf, ITEM_LABEL_LENGTH, "% 2.6f°", val);
3748 static void
3749 format_global_altitude(char *buf, int16_t value) {
3750 if (value == 0x7FFF) {
3751 snprintf(buf, ITEM_LABEL_LENGTH, "Global Altitude is not configured.");
3752 return;
3754 if (value == 0x7FFE) {
3755 snprintf(buf, ITEM_LABEL_LENGTH, "Global Altitude is greater than or equal to 32766 meters.");
3756 return;
3758 snprintf(buf, ITEM_LABEL_LENGTH, "%d meters", value);
3761 static void
3762 format_local_north(char *buf, int16_t value) {
3763 if (value == -32768) {
3764 snprintf(buf, ITEM_LABEL_LENGTH, "Local North information is not configured.");
3765 return;
3767 double val;
3768 val = (double)value / (double) 10.0;
3769 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3772 static void
3773 format_local_east(char *buf, int16_t value) {
3774 if (value == -32768) {
3775 snprintf(buf, ITEM_LABEL_LENGTH, "Local East information is not configured.");
3776 return;
3778 double val;
3779 val = (double)value / (double) 10.0;
3780 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3783 static void
3784 format_local_altitude(char *buf, int16_t value) {
3785 if (value == 0x7FFF) {
3786 snprintf(buf, ITEM_LABEL_LENGTH, "Local Altitude is not configured.");
3787 return;
3789 if (value == 0x7FFE) {
3790 snprintf(buf, ITEM_LABEL_LENGTH, "Local Altitude is greater than or equal to 3276.6 meters.");
3791 return;
3793 double val;
3794 val = (double)value / (double) 10.0;
3795 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3798 static void
3799 format_floor_number(char *buf, uint8_t value) {
3800 switch (value) {
3801 case 0x00:
3802 snprintf(buf, ITEM_LABEL_LENGTH, "Floor -20 or any floor below -20.");
3803 break;
3805 case 0xFC:
3806 snprintf(buf, ITEM_LABEL_LENGTH, "Floor 232 or any floor above 232.");
3807 break;
3809 case 0xFD:
3810 snprintf(buf, ITEM_LABEL_LENGTH, "Ground floor. Floor 0.");
3811 break;
3813 case 0xFE:
3814 snprintf(buf, ITEM_LABEL_LENGTH, "Ground floor. Floor 1.");
3815 break;
3817 case 0xFF:
3818 snprintf(buf, ITEM_LABEL_LENGTH, "Not configured.");
3819 break;
3821 default:
3822 snprintf(buf, ITEM_LABEL_LENGTH, "%d", (int16_t)value - (int16_t)20 );
3823 break;
3827 static void
3828 format_update_time(char *buf, uint16_t value) {
3829 double val;
3830 val = pow((double)2.0, (double)(value - 3));
3831 snprintf(buf, ITEM_LABEL_LENGTH, "%.*f seconds", (value<4?3-value:0), val);
3834 static void
3835 format_precision(char *buf, uint16_t value) {
3836 double val;
3837 val = pow((double)2.0, (double)(value - 3));
3838 snprintf(buf, ITEM_LABEL_LENGTH, "%.*f meters", (value<4?3-value:0),val);
3841 static void
3842 format_scheduler_year(char *buf, int32_t value) {
3843 if (value <= 0x63) {
3844 snprintf(buf, ITEM_LABEL_LENGTH, "%d", 2000+value);
3845 } else if (value == 0x64 ) {
3846 snprintf(buf, ITEM_LABEL_LENGTH, "Any year");
3847 } else {
3848 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
3852 static void
3853 format_scheduler_day(char *buf, int32_t value) {
3854 if (value > 0x0) {
3855 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3856 } else {
3857 snprintf(buf, ITEM_LABEL_LENGTH, "Any day");
3861 static void
3862 format_scheduler_hour(char *buf, int32_t value) {
3863 if (value < 24 ) {
3864 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3865 } else if (value == 0x18 ) {
3866 snprintf(buf, ITEM_LABEL_LENGTH, "Any hour of the day");
3867 } else if (value == 0x19 ) {
3868 snprintf(buf, ITEM_LABEL_LENGTH, "Once a day (at a random hour)");
3869 } else {
3870 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
3874 static void
3875 format_scheduler_minute(char *buf, int32_t value) {
3876 switch (value) {
3877 case 0x3C:
3878 snprintf(buf, ITEM_LABEL_LENGTH, "Any minute of the hour");
3879 break;
3881 case 0x3D:
3882 snprintf(buf, ITEM_LABEL_LENGTH, "Every 15 minutes (minute modulo 15 is 0) (0, 15, 30, 45)");
3883 break;
3885 case 0x3E:
3886 snprintf(buf, ITEM_LABEL_LENGTH, "Every 20 minutes (minute modulo 20 is 0) (0, 20, 40)");
3887 break;
3889 case 0x3F:
3890 snprintf(buf, ITEM_LABEL_LENGTH, "Once an hour (at a random minute)");
3891 break;
3893 default:
3894 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3895 break;
3899 static void
3900 format_scheduler_second(char *buf, int32_t value) {
3901 switch (value) {
3902 case 0x3C:
3903 snprintf(buf, ITEM_LABEL_LENGTH, "Any second of the minute");
3904 break;
3906 case 0x3D:
3907 snprintf(buf, ITEM_LABEL_LENGTH, "Every 15 seconds (second modulo 15 is 0) (0, 15, 30, 45)");
3908 break;
3910 case 0x3E:
3911 snprintf(buf, ITEM_LABEL_LENGTH, "Every 20 seconds (second modulo 20 is 0) (0, 20, 40)");
3912 break;
3914 case 0x3F:
3915 snprintf(buf, ITEM_LABEL_LENGTH, "Once a minute (at a random second)");
3916 break;
3918 default:
3919 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3920 break;
3924 static void
3925 format_scheduler_action(char *buf, int32_t value) {
3926 switch (value) {
3927 case 0x0:
3928 snprintf(buf, ITEM_LABEL_LENGTH, "Turn Off");
3929 break;
3931 case 0x1:
3932 snprintf(buf, ITEM_LABEL_LENGTH, "Turn On");
3933 break;
3935 case 0x2:
3936 snprintf(buf, ITEM_LABEL_LENGTH, "Scene Recall");
3937 break;
3939 case 0xF:
3940 snprintf(buf, ITEM_LABEL_LENGTH, "Inactive");
3941 break;
3943 default:
3944 snprintf(buf, ITEM_LABEL_LENGTH, "Reserved for Future Use");
3945 break;
3949 static void
3950 format_scheduler_month(char *buf, int32_t value) {
3951 static const char ab_month_name[][4] =
3953 "Jan", "Feb", "Mar", "Apr", "May", "Jun",
3954 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
3957 int i;
3958 bool is_first = true;
3960 *buf = '\0';
3961 for (i = 0; i < 12; i++) {
3962 if (value & (1 << i)) {
3963 if (is_first) {
3964 is_first = false;
3965 } else {
3966 buf = g_stpcpy(buf, ", ");
3968 buf = g_stpcpy(buf, ab_month_name[i]);
3973 static void
3974 format_scheduler_day_of_week(char *buf, int32_t value) {
3975 static char const ab_weekday_name[][4] =
3977 "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
3980 int i;
3981 bool is_first = true;
3983 *buf = '\0';
3984 for (i = 0; i < 7; i++) {
3985 if (value & (1 << i)) {
3986 if (is_first) {
3987 is_first = false;
3988 } else {
3989 buf = g_stpcpy(buf, ", ");
3991 buf = g_stpcpy(buf, ab_weekday_name[i]);
3996 static void
3997 format_subsecond_ms(char *buf, uint32_t value) {
3998 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f ms", (double)value / 0.256);
4001 static void
4002 format_uncertainty_ms(char *buf, uint32_t value) {
4003 snprintf(buf, ITEM_LABEL_LENGTH, "%u ms", value * 10);
4006 static void
4007 format_tai_utc_delta_s(char *buf, uint32_t value) {
4008 int32_t val = (int32_t)value - 255;
4009 snprintf(buf, ITEM_LABEL_LENGTH, "%d s", val);
4012 static void
4013 format_time_zone_offset_h(char *buf, uint32_t value) {
4014 int32_t val = (int32_t)value - 64;
4015 if (val >= 0) {
4016 snprintf(buf, ITEM_LABEL_LENGTH, "%+d:%02d", val/4, (val%4)*15 );
4017 } else {
4018 val *=-1;
4019 snprintf(buf, ITEM_LABEL_LENGTH, "-%d:%02d", val/4, (val%4)*15 );
4023 static void
4024 format_tai_to_utc_date(char *buf, uint64_t value) {
4026 if (value == 0 ) {
4027 snprintf(buf, ITEM_LABEL_LENGTH, "Unknown");
4028 } else {
4029 char *time_str;
4030 time_t val;
4032 // Leap seconds removal
4033 uint64_t delta = 0;
4034 // TAI epoch is 2000-01-01T00:00:00 TAI
4035 uint64_t leap_seconds[] = {
4036 189388800, // 1 January 2006, 00:00:00, seconds from TAI epoch
4037 284083200, // 1 January 2009, 00:00:00, seconds from TAI epoch
4038 394416000, // 1 July 2012, 00:00:00, seconds from TAI epoch
4039 489024000, // 1 July 2015, 00:00:00, seconds from TAI epoch
4040 536544000, // 1 January 2017, 00:00:00, seconds from TAI epoch
4042 for (int i = 0; i < 5; i++) {
4043 if (value >= leap_seconds[i]) {
4044 delta++;
4045 } else {
4046 break;
4049 // 946684800 seconds between 1.1.1970 and 1.1.2000
4050 // 32 leap seconds difference between TAI and UTC on 1.1.2000
4051 val = (time_t)(value + 946684800ll - 32ll - delta);
4052 time_str = abs_time_secs_to_str(NULL, val, ABSOLUTE_TIME_UTC, true);
4053 snprintf(buf, ITEM_LABEL_LENGTH, "%s", time_str);
4057 static void
4058 format_temperature_kelvin(char *buf, uint32_t value) {
4059 if (value < 0x0320 ) {
4060 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4061 } else if (value > 0x4E20 ) {
4062 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4063 } else {
4064 snprintf(buf, ITEM_LABEL_LENGTH, "%d K", value);
4068 static void
4069 format_temperature_kelvin_unknown(char *buf, uint32_t value) {
4070 if (value < 0x0320 ) {
4071 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4072 } else if (value > 0x4E20 && value != 0xFFFF) {
4073 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4074 } else if (value == 0xFFFF ) {
4075 snprintf(buf, ITEM_LABEL_LENGTH, "Unknown");
4076 } else {
4077 snprintf(buf, ITEM_LABEL_LENGTH, "%d K", value);
4081 static void
4082 format_light_lightness_prohibited(char *buf, uint32_t value) {
4083 if (value == 0x0 ) {
4084 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4085 } else {
4086 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4090 static void
4091 format_light_lightness_default(char *buf, uint32_t value) {
4092 if (value == 0x0 ) {
4093 snprintf(buf, ITEM_LABEL_LENGTH, "Use the Light Lightness Last value");
4094 } else {
4095 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4099 static void
4100 format_hsl_hue(char *buf, uint32_t value) {
4101 double val;
4102 val = (double)360.0 / (double) (0x10000) * (double)value;
4103 snprintf(buf, ITEM_LABEL_LENGTH, "% 3.3f°", val);
4106 static void
4107 format_xyl_coordinate(char *buf, uint32_t value) {
4108 double val;
4109 val = (double)value / (double) (0xFFFF);
4110 snprintf(buf, ITEM_LABEL_LENGTH, "%1.5f", val);
4113 static void
4114 format_sensor_setting_access(char *buf, uint32_t value)
4116 if (value == 0x01 ) {
4117 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4118 } else if (value == 0x03) {
4119 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4120 } else {
4121 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4125 static void
4126 format_fast_cadence_period_divisor(char *buf, uint32_t value)
4128 if (value > 15) {
4129 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4130 } else {
4131 uint32_t v = (1 << value);
4132 snprintf(buf, ITEM_LABEL_LENGTH, "%d", v);
4136 static void
4137 format_status_min_interval(char *buf, uint32_t value)
4139 if (value > 26) {
4140 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4141 } else {
4142 uint32_t v = (1 << value);
4143 snprintf(buf, ITEM_LABEL_LENGTH, "%d ms", v);
4147 static void
4148 format_admin_user_access(char *buf, uint32_t value)
4150 switch (value) {
4151 case 0x0:
4152 snprintf(buf, ITEM_LABEL_LENGTH, "Not a Generic User Property");
4153 break;
4155 case 0x1:
4156 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4157 break;
4159 case 0x2:
4160 snprintf(buf, ITEM_LABEL_LENGTH, "Can be written");
4161 break;
4163 case 0x3:
4164 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4165 break;
4167 default:
4168 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4169 break;
4173 static void
4174 format_manufacturer_user_access(char *buf, uint32_t value)
4176 if (value == 0x00) {
4177 snprintf(buf, ITEM_LABEL_LENGTH, "Not a Generic User Property");
4178 } else if (value == 0x01) {
4179 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4180 } else {
4181 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4185 static void
4186 format_user_access(char *buf, uint32_t value)
4188 switch (value) {
4189 case 0x1:
4190 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4191 break;
4193 case 0x2:
4194 snprintf(buf, ITEM_LABEL_LENGTH, "Can be written");
4195 break;
4197 case 0x3:
4198 snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4199 break;
4201 default:
4202 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4203 break;
4207 static void
4208 format_sensor_descriptor_tolerance(char *buf, uint32_t value)
4210 if (value == 0x000) {
4211 snprintf(buf, ITEM_LABEL_LENGTH, "Unspecified");
4212 } else {
4213 double val;
4214 val = (double)value / (double)40.95;
4215 snprintf(buf, ITEM_LABEL_LENGTH, "% 3.2f %%", val);
4219 static void
4220 format_sensor_period(char *buf, uint32_t value)
4222 if (value == 0) {
4223 snprintf(buf, ITEM_LABEL_LENGTH, "Not Applicable");
4224 } else {
4225 double val;
4227 val = pow((double)1.1, (double)value - (double)64.0);
4228 if ( val < 1.0 ) { //Milliseconds
4229 snprintf(buf, ITEM_LABEL_LENGTH, "%.0f ms", val * 1000.0);
4230 } else {
4231 if ( val < 60.0 ) { //Seconds
4232 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f s", val);
4233 } else {
4234 unsigned long v = (unsigned long)val;
4235 if ( val < 86400 ) { //Hours:Minutes:Seconds
4236 snprintf(buf, ITEM_LABEL_LENGTH, "%02lu:%02lu:%02lu", v/3600, (v % 3600)/60, v % 60);
4237 } else { //Days Hours:Minutes:Seconds
4238 snprintf(buf, ITEM_LABEL_LENGTH, "%lu days %02lu:%02lu:%02lu", v/86400, (v % 86400)/3600, (v % 3600)/60, v % 60);
4245 static void
4246 format_percentage_change_16(char *buf, uint32_t value)
4248 double val;
4249 val = (double)value / (double)(100);
4250 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f %%", val);
4253 static void
4254 format_decihour_8(char *buf, uint32_t value)
4256 if (value == 0xFF) {
4257 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4258 } else {
4259 if (value > 240) {
4260 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4261 } else {
4262 double val;
4263 val = (double)value / (double)(10);
4264 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f h", val);
4269 static void
4270 format_temperature_8(char *buf, int32_t value)
4272 if (value == 0x7F) {
4273 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4274 } else {
4275 double val;
4276 val = (double)value * (double)(0.5);
4277 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f C", val);
4281 static void
4282 format_temperature(char *buf, int32_t value)
4284 if (value == INT16_MIN ) {
4285 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4286 } else {
4287 if (value < (int32_t)(-27315)) {
4288 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4289 } else {
4290 double val;
4291 val = (double)value / (double)(100);
4292 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f C", val);
4297 static void
4298 format_electric_current(char *buf, uint32_t value)
4300 if (value == 0xFFFF) {
4301 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4302 } else {
4303 double val;
4304 val = (double)value / (double)(100);
4305 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f A", val);
4309 static void
4310 format_energy(char *buf, uint32_t value)
4312 if (value == 0xFFFFFF) {
4313 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4314 } else {
4315 snprintf(buf, ITEM_LABEL_LENGTH, "%d kWh", value);
4319 static void
4320 format_illuminance(char *buf, uint32_t value) {
4321 if (value == 0xFFFFFF) {
4322 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4323 } else {
4324 double val;
4325 val = (double)value / (double)(100);
4326 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f lux", val);
4330 static void
4331 format_percentage_8(char *buf, uint32_t value) {
4332 if (value == 0xFF) {
4333 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4334 } else if (value > 200) {
4335 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4336 } else {
4337 double val;
4338 val = (double)value / (double)(2);
4339 snprintf(buf, ITEM_LABEL_LENGTH, "%.1f %%", val);
4343 static void
4344 format_time_millisecond_24(char *buf, uint32_t value) {
4345 if (value == 0xFFFFFF) {
4346 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4347 } else {
4348 double val;
4349 val = (double)value / (double)(1000);
4350 snprintf(buf, ITEM_LABEL_LENGTH, "%.2f s", val);
4354 static void
4355 format_count_16(char *buf, uint32_t value) {
4356 if (value == 0xFFFF) {
4357 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4358 } else {
4359 snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4363 static void
4364 format_boolean(char *buf, uint32_t value) {
4365 if (value == 0x00) {
4366 snprintf(buf, ITEM_LABEL_LENGTH, "False");
4367 } else if (value == 0x01) {
4368 snprintf(buf, ITEM_LABEL_LENGTH, "True");
4369 } else {
4370 snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4374 static void
4375 format_time_second_16(char *buf, uint32_t value) {
4376 if (value == 0xFFFF) {
4377 snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4378 } else {
4379 snprintf(buf, ITEM_LABEL_LENGTH, "%d s", value);
4383 static uint16_t
4384 find_characteristic_id(uint16_t property_id)
4386 int i;
4387 uint16_t characteristic_id = NOT_SUPPORTED_PROPERTY;
4389 for (i=0; btmesh_properties[i].characteristic_id !=0; i++ ) {
4390 if (btmesh_properties[i].property_id == property_id) {
4391 characteristic_id = btmesh_properties[i].characteristic_id;
4392 break;
4395 return characteristic_id;
4398 static int
4399 find_characteristic_idx(uint16_t characteristic_id)
4401 int i, idx = NOT_SUPPORTED_CHARACTERISTIC;
4403 for (i=0; bt_gatt_characteristics[i].characteristic_id !=0; i++ ) {
4404 if (bt_gatt_characteristics[i].characteristic_id == characteristic_id) {
4405 idx = i;
4406 break;
4409 return idx;
4412 static int
4413 find_column_properties_idx(int idx)
4415 int idx_3 = NOT_SUPPORTED_CHARACTERISTIC;
4416 for (int i=0; btmesh_column_properties[i].characteristic_id !=0; i++ ) {
4417 if (btmesh_column_properties[i].characteristic_id == bt_gatt_characteristics[idx].characteristic_id) {
4418 idx_3 = i;
4419 break;
4422 return idx_3;
4425 static uint16_t
4426 dissect_btmesh_property_idx(tvbuff_t *tvb, proto_tree *tree, int offset, int characteristic_idx)
4428 uint16_t characteristic_value_length = 0;
4429 int hfindex = -1;
4430 proto_item *pi;
4432 if (characteristic_idx < 0) {
4433 return 0;
4436 characteristic_value_length = bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4437 if (bt_gatt_characteristics[characteristic_idx].characteristic_value_length == 0) {
4438 return 0;
4441 if (bt_gatt_characteristics[characteristic_idx].dissector_type == DISSECTOR_SIMPLE) {
4442 //DISSECTOR_SIMPLE case
4443 if (bt_gatt_characteristics[characteristic_idx].hfindex == NULL) {
4444 return 0;
4446 hfindex = *bt_gatt_characteristics[characteristic_idx].hfindex;
4448 pi = proto_tree_add_item(tree, hfindex, tvb, offset, characteristic_value_length, ENC_LITTLE_ENDIAN);
4449 proto_item_set_generated(pi);
4450 } else {
4451 //DISSECTOR_THREE_VALUES case
4452 int idx_3 = find_column_properties_idx(characteristic_idx);
4453 if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4454 int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4455 if (idx_x == NOT_SUPPORTED_CHARACTERISTIC ||
4456 bt_gatt_characteristics[idx_x].characteristic_value_length == 0 ||
4457 bt_gatt_characteristics[idx_x].hfindex == NULL ||
4458 bt_gatt_characteristics[idx_x].dissector_type != DISSECTOR_SIMPLE) {
4459 return 0;
4461 int idx_y = find_characteristic_idx(btmesh_column_properties[idx_3].y_characteristic_id);
4462 if (idx_y == NOT_SUPPORTED_CHARACTERISTIC ||
4463 bt_gatt_characteristics[idx_y].characteristic_value_length == 0 ||
4464 bt_gatt_characteristics[idx_y].hfindex == NULL ||
4465 bt_gatt_characteristics[idx_y].dissector_type != DISSECTOR_SIMPLE) {
4466 return 0;
4468 characteristic_value_length=0;
4469 pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_x].hfindex,
4470 tvb, offset,
4471 bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_LITTLE_ENDIAN);
4472 proto_item_set_generated(pi);
4473 characteristic_value_length+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4475 pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_x].hfindex,
4476 tvb, offset+characteristic_value_length,
4477 bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_LITTLE_ENDIAN);
4478 proto_item_set_generated(pi);
4479 characteristic_value_length+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4481 pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_y].hfindex,
4482 tvb, offset+characteristic_value_length,
4483 bt_gatt_characteristics[idx_y].characteristic_value_length, ENC_LITTLE_ENDIAN);
4484 proto_item_set_generated(pi);
4485 characteristic_value_length+=bt_gatt_characteristics[idx_y].characteristic_value_length;
4486 } else {
4487 return 0;
4490 return characteristic_value_length;
4493 static int
4494 find_btmesh_property_characteristic_idx(uint16_t property_id)
4496 int characteristic_idx;
4497 uint16_t characteristic_id = 0;
4499 characteristic_id = find_characteristic_id(property_id);
4500 if (characteristic_id == NOT_SUPPORTED_PROPERTY) {
4501 return NOT_SUPPORTED_CHARACTERISTIC;
4503 characteristic_idx = find_characteristic_idx(characteristic_id);
4504 if (characteristic_idx == NOT_SUPPORTED_CHARACTERISTIC) {
4505 return NOT_SUPPORTED_CHARACTERISTIC;
4507 return characteristic_idx;
4510 static int
4511 find_btmesh_property_length(uint16_t property_id)
4513 int characteristic_idx;
4514 uint16_t characteristic_id = 0;
4516 characteristic_id = find_characteristic_id(property_id);
4517 if (characteristic_id == NOT_SUPPORTED_PROPERTY) {
4518 return 0;
4520 characteristic_idx = find_characteristic_idx(characteristic_id);
4521 if (characteristic_idx == NOT_SUPPORTED_CHARACTERISTIC) {
4522 return 0;
4524 return bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4527 static uint16_t
4528 dissect_btmesh_property(proto_tree *tree, int p_id, tvbuff_t *tvb, int offset, uint16_t property_id, int length_hint)
4530 int characteristic_idx;
4531 int characteristic_length;
4532 int guessed_property_length;
4533 uint16_t delta = 0;
4535 if (length_hint == PROPERTY_LENGTH_NO_HINT) {
4536 guessed_property_length = tvb_reported_length_remaining(tvb, offset);
4537 } else {
4538 guessed_property_length = length_hint;
4541 characteristic_idx = find_btmesh_property_characteristic_idx(property_id);
4542 if (characteristic_idx != NOT_SUPPORTED_CHARACTERISTIC) {
4543 characteristic_length = bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4544 if (characteristic_length > 0 ) {
4545 proto_tree_add_item(tree, p_id, tvb, offset, characteristic_length, ENC_NA);
4546 dissect_btmesh_property_idx(tvb, tree, offset, characteristic_idx);
4547 delta = characteristic_length;
4548 } else {
4549 proto_tree_add_item(tree, p_id, tvb, offset, guessed_property_length, ENC_NA);
4550 delta = guessed_property_length;
4552 } else {
4553 proto_tree_add_item(tree, p_id, tvb, offset, guessed_property_length, ENC_NA);
4554 delta = guessed_property_length;
4556 return delta;
4559 static int
4560 dissect_sensor_cadence(proto_tree *tree, tvbuff_t *tvb, int offset, uint16_t property_id, uint8_t trigger_type, const bt_sensor_cadence_dissector_t *sensor_cadence_hfs)
4562 int initial_offset = offset;
4563 int guessed_property_length;
4564 int trigger_delta_length = 0;
4565 int fast_cadence_length = 0;
4567 //Trigger delta length
4568 if ( trigger_type == SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY) {
4569 //Find or guess trigger delta and fast cadence fields length
4570 trigger_delta_length = find_btmesh_property_length(property_id);
4571 if (trigger_delta_length == 0) {
4572 guessed_property_length = tvb_reported_length_remaining(tvb, offset) - 1;
4573 if (guessed_property_length % 4 == 0) {
4574 trigger_delta_length = guessed_property_length/4;
4575 } else {
4576 //Failed to guess fields length
4577 trigger_delta_length = PROPERTY_LENGTH_NO_HINT;
4580 fast_cadence_length = trigger_delta_length;
4581 } else {
4582 //Trigger delta length is always 2 octets here
4583 trigger_delta_length = 2;
4584 //Find or guess fast cadence field length
4585 fast_cadence_length = find_btmesh_property_length(property_id);
4586 if (fast_cadence_length == 0) {
4587 guessed_property_length = tvb_reported_length_remaining(tvb, offset) - 1 - 2 * trigger_delta_length;
4588 if (guessed_property_length % 2 == 0) {
4589 fast_cadence_length = guessed_property_length/2;
4590 } else {
4591 //Failed to guess field length
4592 fast_cadence_length = PROPERTY_LENGTH_NO_HINT;
4597 if (trigger_delta_length != PROPERTY_LENGTH_NO_HINT) {
4598 //Trigger delta field length is known, so dissect individual fields
4599 if ( trigger_type == SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY) {
4600 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_down, tvb, offset, property_id, trigger_delta_length);
4601 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_up, tvb, offset, property_id, trigger_delta_length);
4602 } else {
4603 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_down, tvb, offset, PHONY_PROPERTY_PERCENTAGE_CHANGE_16, trigger_delta_length);
4604 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_up, tvb, offset, PHONY_PROPERTY_PERCENTAGE_CHANGE_16, trigger_delta_length);
4606 proto_tree_add_item(tree, *sensor_cadence_hfs->hf_status_min_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4607 offset++;
4608 if (fast_cadence_length != PROPERTY_LENGTH_NO_HINT) {
4609 //Fast cadence field length is known
4610 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_fast_cadence_low, tvb, offset, property_id, fast_cadence_length);
4611 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_fast_cadence_high, tvb, offset, property_id, fast_cadence_length);
4612 } else {
4613 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_remainder_not_dissected, tvb, offset, property_id, tvb_reported_length_remaining(tvb, offset));
4615 } else {
4616 //Property field length is unknown, fail to dissect
4617 offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_remainder_not_dissected, tvb, offset, property_id, tvb_reported_length_remaining(tvb, offset));
4619 return offset - initial_offset;
4622 static int
4623 dissect_property_raw_value_entry(proto_tree *tree, tvbuff_t *tvb, int offset, uint16_t property_id, const bt_property_raw_value_entry_t *property_raw_value_entry_hfs)
4625 bool display_raw;
4626 int idx;
4627 int initial_offset = offset;
4628 int guessed_field_length;
4630 idx = find_btmesh_property_characteristic_idx(property_id);
4631 display_raw = true;
4632 guessed_field_length = tvb_reported_length_remaining(tvb, offset);
4633 if ( idx != NOT_SUPPORTED_CHARACTERISTIC) {
4634 if (bt_gatt_characteristics[idx].dissector_type == DISSECTOR_SIMPLE) {
4635 //Single value
4636 offset+=dissect_btmesh_property(tree, *property_raw_value_entry_hfs->hf_raw_value_a, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
4637 display_raw = false;
4638 } else {
4639 //Three values expected
4640 int idx_3 = find_column_properties_idx(idx);
4641 if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4642 int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4643 if (idx_x != NOT_SUPPORTED_CHARACTERISTIC) {
4644 if ( bt_gatt_characteristics[idx_x].characteristic_value_length != 0) {
4645 if (bt_gatt_characteristics[idx_x].hfindex != NULL &&
4646 bt_gatt_characteristics[idx_x].dissector_type == DISSECTOR_SIMPLE)
4648 //Full dissection
4649 display_raw = false;
4650 proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_a, tvb, offset, bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_NA);
4651 dissect_btmesh_property_idx(tvb, tree, offset, idx_x);
4652 offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4653 proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_b, tvb, offset, bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_NA);
4654 dissect_btmesh_property_idx(tvb, tree, offset, idx_x);
4655 offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4656 //Value C
4657 int idx_y = find_characteristic_idx(btmesh_column_properties[idx_3].y_characteristic_id);
4658 if (idx_y != NOT_SUPPORTED_CHARACTERISTIC &&
4659 bt_gatt_characteristics[idx_y].characteristic_value_length != 0 &&
4660 bt_gatt_characteristics[idx_y].hfindex != NULL &&
4661 bt_gatt_characteristics[idx_y].dissector_type == DISSECTOR_SIMPLE)
4663 proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_c, tvb, offset, bt_gatt_characteristics[idx_y].characteristic_value_length, ENC_NA);
4664 dissect_btmesh_property_idx(tvb, tree, offset, idx_y);
4665 offset+=bt_gatt_characteristics[idx_y].characteristic_value_length;
4666 } else {
4667 proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_c, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
4668 offset+=tvb_reported_length_remaining(tvb, offset);
4670 } else {
4671 //Raw value, but length is known
4672 guessed_field_length = bt_gatt_characteristics[idx_x].characteristic_value_length;
4679 if (display_raw) {
4680 //Raw value, no interpretation, just Value A
4681 proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_a, tvb, offset, guessed_field_length, ENC_NA);
4682 offset+=guessed_field_length;
4684 return offset - initial_offset;
4687 static int
4688 dissect_columns_raw_value(proto_tree *sub_tree, tvbuff_t *tvb, int offset, uint16_t property_id, const bt_property_columns_raw_value_t *columns_raw_value_hfs)
4690 bool display_raw;
4691 int idx;
4692 int initial_offset = offset;
4693 int guessed_field_length;
4695 idx = find_btmesh_property_characteristic_idx(property_id);
4696 display_raw = true;
4697 guessed_field_length = tvb_reported_length_remaining(tvb, offset);
4699 if (columns_raw_value_hfs->hf_raw_value_a2 != NULL && guessed_field_length > 1) {
4700 //Two values are expected
4701 guessed_field_length = guessed_field_length / 2;
4704 if ( idx != NOT_SUPPORTED_CHARACTERISTIC) {
4705 if (bt_gatt_characteristics[idx].dissector_type == DISSECTOR_SIMPLE) {
4706 //Index - phony characteristics, 2 octets
4707 display_raw = false;
4708 offset+=dissect_btmesh_property(sub_tree, *columns_raw_value_hfs->hf_raw_value_a1, tvb, offset, PHONY_PROPERTY_INDEX, 2);
4709 if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4710 offset+=dissect_btmesh_property(sub_tree, *columns_raw_value_hfs->hf_raw_value_a2, tvb, offset, PHONY_PROPERTY_INDEX, 2);
4712 } else {
4713 //DISSECTOR_THREE_VALUES, first value
4714 int idx_3 = find_column_properties_idx(idx);
4715 if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4716 int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4717 if (idx_x != NOT_SUPPORTED_CHARACTERISTIC) {
4718 if ( bt_gatt_characteristics[idx_x].characteristic_value_length != 0) {
4719 if (bt_gatt_characteristics[idx_x].hfindex != NULL &&
4720 bt_gatt_characteristics[idx_x].dissector_type == DISSECTOR_SIMPLE)
4722 //full dissection
4723 display_raw = false;
4724 proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a1, tvb, offset, bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_NA);
4725 dissect_btmesh_property_idx(tvb, sub_tree, offset, idx_x);
4726 offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4727 if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4728 proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a2, tvb, offset, bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_NA);
4729 dissect_btmesh_property_idx(tvb, sub_tree, offset, idx_x);
4730 offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4732 } else {
4733 //raw, but known length
4734 guessed_field_length = bt_gatt_characteristics[idx_x].characteristic_value_length;
4741 if (display_raw) {
4742 //Raw values, no interpretation
4743 proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a1, tvb, offset, guessed_field_length, ENC_NA);
4744 offset+=guessed_field_length;
4745 if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4746 proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a2, tvb, offset, guessed_field_length, ENC_NA);
4747 offset+=guessed_field_length;
4750 return offset - initial_offset;
4753 static void
4754 dissect_btmesh_model_layer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
4756 proto_tree *sub_tree;
4757 tvbuff_t *payload_tvb;
4758 uint32_t opcode;
4759 uint16_t vendor;
4760 proto_item *netapp_index_item, *app_index_item, *pub_app_index_item, *net_index_item;
4761 proto_item *relayretransmit_index, *transmit_index;
4762 proto_item *publishperiod_item, *publishretransmit_item;
4763 proto_item *month_item, *day_of_week_item, *scheduler_item;
4765 proto_tree *netapp_index_sub_tree, *app_index_sub_tree, *pub_app_index_sub_tree, *net_index_sub_tree;
4766 proto_tree *relayretransmit_sub_tree, *transmit_sub_tree, *subscriptionlist_tree;
4767 proto_tree *publishperiod_sub_tree, *publishretransmit_sub_tree;
4768 proto_tree *element_sub_tree, *model_sub_tree, *vendor_sub_tree;
4769 proto_tree *netkeylist_tree, *appkeylist_tree;
4770 proto_tree *fault_array_tree;
4771 proto_tree *sceneslist_tree, *month_sub_tree, *day_of_week_sub_tree;
4772 proto_tree *scheduler_tree;
4773 proto_tree *user_property_ids_tree;
4774 proto_tree *admin_property_ids_tree;
4775 proto_tree *manufacturer_property_ids_tree;
4776 proto_tree *generic_client_property_ids_tree;
4777 proto_tree *sensor_setting_property_ids_tree;
4778 proto_tree *root_tree = proto_tree_get_parent_tree(tree);
4780 uint32_t netkeyindexes, appkeyindexes;
4781 uint32_t nums, numv, element;
4782 unsigned i;
4783 uint16_t property_id;
4784 uint8_t trigger_type;
4785 uint32_t mpid_format, mpid_property_id, mpid_length;
4787 sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_model_layer, NULL, "Model Layer");
4789 opcode = tvb_get_uint8(tvb, offset);
4790 if (opcode & 0x80) {
4791 if (opcode & 0x40) {
4792 /* Vendor opcode */
4793 proto_tree_add_item(sub_tree, hf_btmesh_model_layer_vendor_opcode, tvb, offset, 1, ENC_NA);
4794 vendor = tvb_get_uint16(tvb, offset + 1, ENC_LITTLE_ENDIAN);
4795 proto_tree_add_item(sub_tree, hf_btmesh_model_layer_vendor, tvb, offset + 1, 2, ENC_LITTLE_ENDIAN);
4796 payload_tvb = tvb_new_subset_remaining(tvb, offset);
4797 col_set_str(pinfo->cinfo, COL_INFO, "Access Message - Vendor Opcode");
4798 dissector_try_uint_with_data(btmesh_model_vendor_dissector_table, vendor, payload_tvb, pinfo, root_tree, true, GUINT_TO_POINTER(vendor));
4799 offset+=3;
4800 } else {
4801 /* Two octet opcode */
4802 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_model_layer_opcode, tvb, offset, 2, ENC_NA, &opcode);
4803 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(opcode, btmesh_models_opcode_vals, "Access Message Unknown"));
4804 offset+=2;
4806 } else {
4807 /* One octet opcode */
4808 proto_tree_add_item(sub_tree, hf_btmesh_model_layer_opcode, tvb, offset, 1, ENC_NA);
4809 col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(opcode, btmesh_models_opcode_vals, "Access Message Unknown"));
4810 offset++;
4813 switch (opcode) {
4814 case CONFIG_APPKEY_ADD:
4815 netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4816 netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4817 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4818 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4819 offset+=3;
4820 proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_add_appkey, tvb, offset, 16, ENC_NA);
4821 offset+=16;
4822 break;
4823 case CONFIG_APPKEY_UPDATE:
4824 netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4825 netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4826 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4827 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4828 offset+=3;
4829 proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_update_appkey, tvb, offset, 16, ENC_NA);
4830 offset+=16;
4831 break;
4832 case CONFIG_COMPOSITION_DATA_STATUS:
4833 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_page, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4834 offset++;
4835 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_cid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4836 offset+=2;
4837 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_pid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4838 offset+=2;
4839 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_vid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4840 offset+=2;
4841 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_crpl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4842 offset+=2;
4843 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
4844 hf_btmesh_config_composition_data_status_features,
4845 ett_btmesh_config_composition_data_status_features,
4846 config_composition_data_status_features_headers,
4847 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
4848 offset+=2;
4849 /* Elements */
4850 element = 1;
4851 while (tvb_reported_length_remaining(tvb, offset) > 2) {
4852 nums = tvb_get_uint8(tvb, offset + 2 );
4853 numv = tvb_get_uint8(tvb, offset + 2 + 1);
4854 element_sub_tree = proto_tree_add_subtree_format(sub_tree, tvb, offset, 4 + nums * 2 + numv * 4, ett_btmesh_config_model_element, NULL, "Element #%u", element);
4855 proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_loc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4856 offset+=2;
4857 proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_nums, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4858 offset++;
4859 proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_numv, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4860 offset++;
4861 if (nums > 0 ) {
4862 model_sub_tree = proto_tree_add_subtree(element_sub_tree, tvb, offset, nums * 2, ett_btmesh_config_model_model, NULL, "SIG Models");
4863 for (i = 0; i < nums; i++) {
4864 proto_tree_add_item(model_sub_tree, hf_btmesh_config_composition_data_status_sig_model, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4865 offset+=2;
4868 if (numv > 0 ) {
4869 vendor_sub_tree = proto_tree_add_subtree(element_sub_tree, tvb, offset, numv * 4, ett_btmesh_config_model_vendor, NULL, "Vendor Models");
4870 for (i = 0; i < numv; i++) {
4871 proto_tree_add_item(vendor_sub_tree, hf_btmesh_config_composition_data_status_vendor_model, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4872 offset+=4;
4875 element++;
4877 break;
4878 case CONFIG_MODEL_PUBLICATION_SET:
4879 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4880 offset+=2;
4881 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4882 offset+=2;
4883 pub_app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_appkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4884 pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
4885 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4886 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4887 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4888 offset+=2;
4889 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4890 offset++;
4891 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4892 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
4893 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_set_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4894 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_set_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4895 offset++;
4896 publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4897 publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
4898 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_set_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4899 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4900 offset++;
4901 if (tvb_reported_length_remaining(tvb, offset) > 2) {
4902 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4903 offset+=4;
4904 } else {
4905 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4906 offset+=2;
4908 break;
4909 case HEALTH_CURRENT_STATUS:
4910 proto_tree_add_item(sub_tree, hf_btmesh_health_current_status_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4911 offset++;
4912 proto_tree_add_item(sub_tree, hf_btmesh_health_current_status_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4913 offset+=2;
4914 fault_array_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_fault_array, NULL, "FaultArray");
4915 while (tvb_reported_length_remaining(tvb, offset) > 0) {
4916 proto_tree_add_item(fault_array_tree, hf_btmesh_health_current_status_fault, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4917 offset++;
4919 break;
4920 case HEALTH_FAULT_STATUS:
4921 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_status_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4922 offset++;
4923 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_status_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4924 offset+=2;
4925 fault_array_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_fault_array, NULL, "FaultArray");
4926 while (tvb_reported_length_remaining(tvb, offset) > 0) {
4927 proto_tree_add_item(fault_array_tree, hf_btmesh_health_fault_status_fault, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4928 offset++;
4930 break;
4931 case CONFIG_HEARTBEAT_PUBLICATION_STATUS:
4932 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4933 offset++;
4934 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4935 offset+=2;
4936 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4937 offset++;
4938 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4939 offset++;
4940 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4941 offset++;
4942 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
4943 hf_btmesh_config_heartbeat_publication_status_features,
4944 ett_btmesh_config_heartbeat_publication_status_features,
4945 config_heartbeat_publication_status_features_headers,
4946 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
4947 offset+=2;
4948 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4949 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4950 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4951 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4952 offset+=2;
4953 break;
4954 case CONFIG_APPKEY_DELETE:
4955 netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4956 netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4957 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4958 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4959 offset+=3;
4960 break;
4961 case CONFIG_APPKEY_GET:
4962 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4963 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4964 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4965 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4966 offset+=2;
4967 break;
4968 case CONFIG_APPKEY_LIST:
4969 proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4970 offset++;
4971 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_list_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4972 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4973 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_list_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4974 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_list_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4975 offset+=2;
4976 appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
4977 while (tvb_reported_length_remaining(tvb, offset) >= 2) {
4978 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
4979 appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
4980 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
4981 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
4982 offset+=3;
4983 } else {
4984 appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4985 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
4986 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
4987 offset+=2;
4990 break;
4991 case CONFIG_APPKEY_STATUS:
4992 proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4993 offset++;
4994 netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4995 netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4996 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4997 proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4998 offset+=3;
4999 break;
5000 case HEALTH_ATTENTION_GET:
5001 break;
5002 case HEALTH_ATTENTION_SET:
5003 proto_tree_add_item(sub_tree, hf_btmesh_health_attention_set_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5004 offset++;
5005 break;
5006 case HEALTH_ATTENTION_SET_UNACKNOWLEDGED:
5007 proto_tree_add_item(sub_tree, hf_btmesh_health_attention_set_unacknowledged_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5008 offset++;
5009 break;
5010 case HEALTH_ATTENTION_STATUS:
5011 proto_tree_add_item(sub_tree, hf_btmesh_health_attention_status_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5012 offset++;
5013 break;
5014 case CONFIG_COMPOSITION_DATA_GET:
5015 proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_get_page, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5016 offset++;
5017 break;
5018 case CONFIG_BEACON_GET:
5019 break;
5020 case CONFIG_BEACON_SET:
5021 proto_tree_add_item(sub_tree, hf_btmesh_config_beacon_set_beacon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5022 offset++;
5023 break;
5024 case CONFIG_BEACON_STATUS:
5025 proto_tree_add_item(sub_tree, hf_btmesh_config_beacon_status_beacon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5026 offset++;
5027 break;
5028 case CONFIG_DEFAULT_TTL_GET:
5029 break;
5030 case CONFIG_DEFAULT_TTL_SET:
5031 proto_tree_add_item(sub_tree, hf_btmesh_config_default_ttl_set_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5032 offset++;
5033 break;
5034 case CONFIG_DEFAULT_TTL_STATUS:
5035 proto_tree_add_item(sub_tree, hf_btmesh_config_default_ttl_status_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5036 offset++;
5037 break;
5038 case CONFIG_FRIEND_GET:
5039 break;
5040 case CONFIG_FRIEND_SET:
5041 proto_tree_add_item(sub_tree, hf_btmesh_config_friend_set_friend, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5042 offset++;
5043 break;
5044 case CONFIG_FRIEND_STATUS:
5045 proto_tree_add_item(sub_tree, hf_btmesh_config_friend_status_friend, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5046 offset++;
5047 break;
5048 case CONFIG_GATT_PROXY_GET:
5049 break;
5050 case CONFIG_GATT_PROXY_SET:
5051 proto_tree_add_item(sub_tree, hf_btmesh_config_gatt_proxy_set_gattproxy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5052 offset++;
5053 break;
5054 case CONFIG_GATT_PROXY_STATUS:
5055 proto_tree_add_item(sub_tree, hf_btmesh_config_gatt_proxy_status_gattproxy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5056 offset++;
5057 break;
5058 case CONFIG_KEY_REFRESH_PHASE_GET:
5059 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5060 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5061 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5062 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5063 offset+=2;
5064 break;
5065 case CONFIG_KEY_REFRESH_PHASE_SET:
5066 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5067 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5068 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5069 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5070 offset+=2;
5071 proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_set_transition, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5072 offset++;
5073 break;
5074 case CONFIG_KEY_REFRESH_PHASE_STATUS:
5075 proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5076 offset++;
5077 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5078 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5079 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5080 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5081 offset+=2;
5082 proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_phase, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5083 offset++;
5084 break;
5085 case CONFIG_MODEL_PUBLICATION_GET:
5086 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5087 offset+=2;
5088 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5089 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5090 offset+=4;
5091 } else {
5092 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5093 offset+=2;
5095 break;
5096 case CONFIG_MODEL_PUBLICATION_STATUS:
5097 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5098 offset++;
5099 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5100 offset+=2;
5101 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5102 offset+=2;
5103 pub_app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_appkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5104 pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
5105 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5106 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5107 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5108 offset+=2;
5109 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5110 offset++;
5111 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5112 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5113 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_status_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5114 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_status_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5115 offset++;
5116 publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5117 publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
5118 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_status_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5119 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5120 offset++;
5121 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5122 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5123 offset+=4;
5124 } else {
5125 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5126 offset+=2;
5128 break;
5129 case CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET:
5130 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5131 offset+=2;
5132 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishaddress, tvb, offset, 16, ENC_NA);
5133 offset+=16;
5134 pub_app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_appkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5135 pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
5136 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5137 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5138 proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5139 offset+=2;
5140 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5141 offset++;
5142 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5143 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5144 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5145 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5146 offset++;
5147 publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5148 publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
5149 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5150 proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5151 offset++;
5152 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5153 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5154 offset+=4;
5155 } else {
5156 proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5157 offset+=2;
5159 break;
5160 case CONFIG_MODEL_SUBSCRIPTION_ADD:
5161 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5162 offset+=2;
5163 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5164 offset+=2;
5165 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5166 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5167 offset+=4;
5168 } else {
5169 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5170 offset+=2;
5172 break;
5173 case CONFIG_MODEL_SUBSCRIPTION_DELETE:
5174 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5175 offset+=2;
5176 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5177 offset+=2;
5178 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5179 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5180 offset+=4;
5181 } else {
5182 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5183 offset+=2;
5185 break;
5186 case CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL:
5187 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5188 offset+=2;
5189 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5190 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5191 offset+=4;
5192 } else {
5193 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5194 offset+=2;
5196 break;
5197 case CONFIG_MODEL_SUBSCRIPTION_OVERWRITE:
5198 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5199 offset+=2;
5200 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5201 offset+=2;
5202 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5203 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5204 offset+=4;
5205 } else {
5206 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5207 offset+=2;
5209 break;
5210 case CONFIG_MODEL_SUBSCRIPTION_STATUS:
5211 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5212 offset++;
5213 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5214 offset+=2;
5215 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5216 offset+=2;
5217 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5218 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5219 offset+=4;
5220 } else {
5221 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5222 offset+=2;
5224 break;
5225 case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD:
5226 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5227 offset+=2;
5228 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_label, tvb, offset, 16, ENC_NA);
5229 offset+=16;
5230 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5231 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5232 offset+=4;
5233 } else {
5234 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5235 offset+=2;
5237 break;
5238 case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE:
5239 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5240 offset+=2;
5241 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_label, tvb, offset, 16, ENC_NA);
5242 offset+=16;
5243 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5244 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5245 offset+=4;
5246 } else {
5247 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5248 offset+=2;
5250 break;
5251 case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE:
5252 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5253 offset+=2;
5254 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_label, tvb, offset, 16, ENC_NA);
5255 offset+=16;
5256 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5257 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5258 offset+=4;
5259 } else {
5260 proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5261 offset+=2;
5263 break;
5264 case CONFIG_NETWORK_TRANSMIT_GET:
5265 break;
5266 case CONFIG_NETWORK_TRANSMIT_SET:
5267 transmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_network_transmit_set_networktransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5268 transmit_sub_tree = proto_item_add_subtree(transmit_index, ett_btmesh_config_model_network_transmit);
5269 proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_set_networktransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5270 proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5271 offset++;
5272 break;
5273 case CONFIG_NETWORK_TRANSMIT_STATUS:
5274 transmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_network_transmit_status_networktransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5275 transmit_sub_tree = proto_item_add_subtree(transmit_index, ett_btmesh_config_model_network_transmit);
5276 proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_status_networktransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5277 proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5278 offset++;
5279 break;
5280 case CONFIG_RELAY_GET:
5281 break;
5282 case CONFIG_RELAY_SET:
5283 proto_tree_add_item(sub_tree, hf_btmesh_config_relay_set_relay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5284 offset++;
5285 relayretransmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_relay_set_relayretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5286 relayretransmit_sub_tree = proto_item_add_subtree(relayretransmit_index, ett_btmesh_config_model_relayretransmit);
5287 proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_set_relayretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5288 proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_set_relayretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5289 offset++;
5290 break;
5291 case CONFIG_RELAY_STATUS:
5292 proto_tree_add_item(sub_tree, hf_btmesh_config_relay_status_relay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5293 offset++;
5294 relayretransmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_relay_status_relayretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5295 relayretransmit_sub_tree = proto_item_add_subtree(relayretransmit_index, ett_btmesh_config_model_relayretransmit);
5296 proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_status_relayretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5297 proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_status_relayretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5298 offset++;
5299 break;
5300 case CONFIG_SIG_MODEL_SUBSCRIPTION_GET:
5301 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5302 offset+=2;
5303 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5304 offset+=2;
5305 break;
5306 case CONFIG_SIG_MODEL_SUBSCRIPTION_LIST:
5307 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5308 offset++;
5309 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5310 offset+=2;
5311 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5312 offset+=2;
5313 subscriptionlist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_addresses, NULL, "Addresses");
5314 while (tvb_reported_length_remaining(tvb, offset) > 1) {
5315 proto_tree_add_item(subscriptionlist_tree, hf_btmesh_config_sig_model_subscription_list_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5316 offset+=2;
5318 break;
5319 case CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET:
5320 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5321 offset+=2;
5322 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_get_modelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5323 offset+=4;
5324 break;
5325 case CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST:
5326 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5327 offset++;
5328 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5329 offset+=2;
5330 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_modelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5331 offset+=4;
5332 subscriptionlist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_addresses, NULL, "Addresses");
5333 while (tvb_reported_length_remaining(tvb, offset) > 1) {
5334 proto_tree_add_item(subscriptionlist_tree, hf_btmesh_config_vendor_model_subscription_list_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5335 offset+=2;
5337 break;
5338 case CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET:
5339 proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5340 offset+=2;
5341 break;
5342 case CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS:
5343 proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5344 offset+=2;
5345 proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_status_polltimeout, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5346 offset+=3;
5347 break;
5348 case HEALTH_FAULT_CLEAR:
5349 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_clear_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5350 offset+=2;
5351 break;
5352 case HEALTH_FAULT_CLEAR_UNACKNOWLEDGED:
5353 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_clear_unacknowledged_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5354 offset+=2;
5355 break;
5356 case HEALTH_FAULT_GET:
5357 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_get_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5358 offset+=2;
5359 break;
5360 case HEALTH_FAULT_TEST:
5361 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5362 offset++;
5363 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5364 offset+=2;
5365 break;
5366 case HEALTH_FAULT_TEST_UNACKNOWLEDGED:
5367 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_unacknowledged_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5368 offset++;
5369 proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_unacknowledged_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5370 offset+=2;
5371 break;
5372 case HEALTH_PERIOD_GET:
5373 break;
5374 case HEALTH_PERIOD_SET:
5375 proto_tree_add_item(sub_tree, hf_btmesh_health_period_set_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5376 offset++;
5377 break;
5378 case HEALTH_PERIOD_SET_UNACKNOWLEDGED:
5379 proto_tree_add_item(sub_tree, hf_btmesh_health_period_set_unacknowledged_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5380 offset++;
5381 break;
5382 case HEALTH_PERIOD_STATUS:
5383 proto_tree_add_item(sub_tree, hf_btmesh_health_period_status_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5384 offset++;
5385 break;
5386 case CONFIG_HEARTBEAT_PUBLICATION_GET:
5387 break;
5388 case CONFIG_HEARTBEAT_PUBLICATION_SET:
5389 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5390 offset+=2;
5391 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5392 offset++;
5393 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5394 offset++;
5395 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5396 offset++;
5397 proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
5398 hf_btmesh_config_heartbeat_publication_set_features,
5399 ett_btmesh_config_heartbeat_publication_set_features,
5400 config_heartbeat_publication_set_features_headers,
5401 ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
5402 offset+=2;
5403 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5404 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5405 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5406 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5407 offset+=2;
5408 break;
5409 case CONFIG_HEARTBEAT_SUBSCRIPTION_GET:
5410 break;
5411 case CONFIG_HEARTBEAT_SUBSCRIPTION_SET:
5412 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5413 offset+=2;
5414 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5415 offset+=2;
5416 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5417 offset++;
5418 break;
5419 case CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS:
5420 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5421 offset++;
5422 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5423 offset+=2;
5424 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5425 offset+=2;
5426 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5427 offset++;
5428 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5429 offset++;
5430 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_minhops, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5431 offset++;
5432 proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_maxhops, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5433 offset++;
5434 break;
5435 case CONFIG_MODEL_APP_BIND:
5436 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5437 offset+=2;
5438 app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5439 app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5440 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_bind_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5441 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_bind_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5442 offset+=2;
5443 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5444 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5445 offset+=4;
5446 } else {
5447 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5448 offset+=2;
5450 break;
5451 case CONFIG_MODEL_APP_STATUS:
5452 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5453 offset++;
5454 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5455 offset+=2;
5456 app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5457 app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5458 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_status_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5459 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_status_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5460 offset+=2;
5461 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5462 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5463 offset+=4;
5464 } else {
5465 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5466 offset+=2;
5468 break;
5469 case CONFIG_MODEL_APP_UNBIND:
5470 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5471 offset+=2;
5472 app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5473 app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5474 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5475 proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5476 offset+=2;
5477 if (tvb_reported_length_remaining(tvb, offset) > 2) {
5478 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5479 offset+=4;
5480 } else {
5481 proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5482 offset+=2;
5484 break;
5485 case CONFIG_NETKEY_ADD:
5486 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_add_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5487 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5488 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_add_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5489 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_add_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5490 offset+=2;
5491 proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_add_netkey, tvb, offset, 16, ENC_NA);
5492 offset+=16;
5493 break;
5494 case CONFIG_NETKEY_DELETE:
5495 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_delete_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5496 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5497 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_delete_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5498 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_delete_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5499 offset+=2;
5500 break;
5501 case CONFIG_NETKEY_GET:
5502 break;
5503 case CONFIG_NETKEY_LIST:
5504 netkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_netkey_list, NULL, "NetKeyIndexes");
5505 while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5506 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5507 netkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5508 proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset, 2, netkeyindexes & 0x000FFF);
5509 proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset + 1, 2, (netkeyindexes >> 12 ) & 0x000FFF);
5510 offset+=3;
5511 } else {
5512 netkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5513 proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset, 2, netkeyindexes & 0x0FFF);
5514 proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex_rfu, tvb, offset, 2, (netkeyindexes >> 12 ) & 0xF);
5515 offset+=2;
5518 break;
5519 case CONFIG_NETKEY_STATUS:
5520 proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5521 offset++;
5522 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5523 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5524 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5525 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5526 offset+=2;
5527 break;
5528 case CONFIG_NETKEY_UPDATE:
5529 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_update_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5530 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5531 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_update_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5532 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_update_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5533 offset+=2;
5534 proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_update_netkey, tvb, offset, 16, ENC_NA);
5535 offset+=16;
5536 break;
5537 case CONFIG_NODE_IDENTITY_GET:
5538 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5539 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5540 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5541 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5542 offset+=2;
5543 break;
5544 case CONFIG_NODE_IDENTITY_SET:
5545 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5546 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5547 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5548 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5549 offset+=2;
5550 proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_set_identity, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5551 offset++;
5552 break;
5553 case CONFIG_NODE_IDENTITY_STATUS:
5554 proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5555 offset++;
5556 net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5557 net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5558 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5559 proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5560 offset+=2;
5561 proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_identity, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5562 offset++;
5563 break;
5564 case CONFIG_NODE_RESET:
5565 break;
5566 case CONFIG_NODE_RESET_STATUS:
5567 break;
5568 case CONFIG_SIG_MODEL_APP_GET:
5569 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5570 offset+=2;
5571 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5572 offset+=2;
5573 break;
5574 case CONFIG_SIG_MODEL_APP_LIST:
5575 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5576 offset++;
5577 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5578 offset+=2;
5579 proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5580 offset+=2;
5581 appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
5582 while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5583 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5584 appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5585 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
5586 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
5587 offset+=3;
5588 } else {
5589 appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5590 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
5591 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
5592 offset+=2;
5595 break;
5596 case CONFIG_VENDOR_MODEL_APP_GET:
5597 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5598 offset+=2;
5599 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5600 offset+=4;
5601 break;
5602 case CONFIG_VENDOR_MODEL_APP_LIST:
5603 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5604 offset++;
5605 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5606 offset+=2;
5607 proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5608 offset+=4;
5609 appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
5610 while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5611 if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5612 appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5613 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
5614 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
5615 offset+=3;
5616 } else {
5617 appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5618 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
5619 proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
5620 offset+=2;
5623 break;
5625 // ******************************************************************************************
5627 case GENERIC_LOCATION_GLOBAL_STATUS:
5628 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5629 offset+=4;
5630 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5631 offset+=4;
5632 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5633 offset+=2;
5634 break;
5635 case GENERIC_LOCATION_GLOBAL_SET:
5636 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5637 offset+=4;
5638 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5639 offset+=4;
5640 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5641 offset+=2;
5642 break;
5643 case GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED:
5644 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5645 offset+=4;
5646 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5647 offset+=4;
5648 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5649 offset+=2;
5650 break;
5651 case GENERIC_ONOFF_GET:
5652 break;
5653 case GENERIC_ONOFF_SET:
5654 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5655 offset++;
5656 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5657 offset++;
5658 /* Optional */
5659 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5660 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5661 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5662 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5663 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5664 offset++;
5665 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5666 offset++;
5668 break;
5669 case GENERIC_ONOFF_SET_UNACKNOWLEDGED:
5670 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5671 offset++;
5672 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5673 offset++;
5674 /* Optional */
5675 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5676 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5677 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5678 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5679 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5680 offset++;
5681 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5682 offset++;
5684 break;
5685 case GENERIC_ONOFF_STATUS:
5686 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_present_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5687 offset++;
5688 /* Optional */
5689 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5690 proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_target_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5691 offset++;
5692 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5693 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5694 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5695 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5696 offset++;
5698 break;
5699 case GENERIC_LEVEL_GET:
5700 break;
5701 case GENERIC_LEVEL_SET:
5702 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5703 offset+=2;
5704 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5705 offset++;
5706 /* Optional */
5707 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5708 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5709 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5710 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5711 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5712 offset++;
5713 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5714 offset++;
5716 break;
5717 case GENERIC_LEVEL_SET_UNACKNOWLEDGED:
5718 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5719 offset+=2;
5720 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5721 offset++;
5722 /* Optional */
5723 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5724 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5725 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5726 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5727 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5728 offset++;
5729 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5730 offset++;
5732 break;
5733 case GENERIC_LEVEL_STATUS:
5734 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_present_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5735 offset+=2;
5736 /* Optional */
5737 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5738 proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_target_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5739 offset+=2;
5740 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5741 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5742 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5743 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5744 offset++;
5746 break;
5747 case GENERIC_DELTA_SET:
5748 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_delta_level, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5749 offset+=4;
5750 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5751 offset++;
5752 /* Optional */
5753 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5754 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5755 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5756 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5757 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5758 offset++;
5759 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5760 offset++;
5762 break;
5763 case GENERIC_DELTA_SET_UNACKNOWLEDGED:
5764 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_delta_level, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5765 offset+=4;
5766 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5767 offset++;
5768 /* Optional */
5769 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5770 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5771 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5772 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5773 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5774 offset++;
5775 proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5776 offset++;
5778 break;
5779 case GENERIC_MOVE_SET:
5780 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_delta_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5781 offset+=2;
5782 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5783 offset++;
5784 /* Optional */
5785 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5786 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5787 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5788 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5789 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5790 offset++;
5791 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5792 offset++;
5794 break;
5795 case GENERIC_MOVE_SET_UNACKNOWLEDGED:
5796 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_delta_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5797 offset+=2;
5798 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5799 offset++;
5800 /* Optional */
5801 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5802 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5803 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5804 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5805 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5806 offset++;
5807 proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5808 offset++;
5810 break;
5811 case GENERIC_DEFAULT_TRANSITION_TIME_GET:
5812 break;
5813 case GENERIC_DEFAULT_TRANSITION_TIME_SET:
5814 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5815 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5816 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5817 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5818 offset++;
5819 break;
5820 case GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED:
5821 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5822 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5823 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5824 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5825 offset++;
5826 break;
5827 case GENERIC_DEFAULT_TRANSITION_TIME_STATUS:
5828 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5829 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5830 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5831 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5832 offset++;
5833 break;
5834 case GENERIC_ONPOWERUP_GET:
5835 break;
5836 case GENERIC_ONPOWERUP_STATUS:
5837 proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_status_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5838 offset++;
5839 break;
5840 case GENERIC_ONPOWERUP_SET:
5841 proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_set_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5842 offset++;
5843 break;
5844 case GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED:
5845 proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5846 offset++;
5847 break;
5848 case GENERIC_POWER_LEVEL_GET:
5849 break;
5850 case GENERIC_POWER_LEVEL_SET:
5851 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5852 offset+=2;
5853 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5854 offset++;
5855 /* Optional */
5856 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5857 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5858 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5859 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5860 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5861 offset++;
5862 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5863 offset++;
5865 break;
5866 case GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED:
5867 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5868 offset+=2;
5869 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5870 offset++;
5871 /* Optional */
5872 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5873 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5874 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5875 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5876 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5877 offset++;
5878 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5879 offset++;
5881 break;
5882 case GENERIC_POWER_LEVEL_STATUS:
5883 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_present_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5884 offset+=2;
5885 /* Optional */
5886 if (tvb_reported_length_remaining(tvb, offset) > 0) {
5887 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_target_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5888 offset+=2;
5889 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5890 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5891 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5892 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5893 offset++;
5895 break;
5896 case GENERIC_POWER_LAST_GET:
5897 break;
5898 case GENERIC_POWER_LAST_STATUS:
5899 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_last_status_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5900 offset+=2;
5901 break;
5902 case GENERIC_POWER_DEFAULT_GET:
5903 break;
5904 case GENERIC_POWER_DEFAULT_STATUS:
5905 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_status_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5906 offset+=2;
5907 break;
5908 case GENERIC_POWER_RANGE_GET:
5909 break;
5910 case GENERIC_POWER_RANGE_STATUS:
5911 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5912 offset++;
5913 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5914 offset+=2;
5915 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5916 offset+=2;
5917 break;
5918 case GENERIC_POWER_DEFAULT_SET:
5919 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_set_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5920 offset+=2;
5921 break;
5922 case GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED:
5923 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_set_unacknowledged_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5924 offset+=2;
5925 break;
5926 case GENERIC_POWER_RANGE_SET:
5927 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5928 offset+=2;
5929 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5930 offset+=2;
5931 break;
5932 case GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED:
5933 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5934 offset+=2;
5935 proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5936 offset+=2;
5937 break;
5938 case GENERIC_BATTERY_GET:
5939 break;
5940 case GENERIC_BATTERY_STATUS:
5941 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_battery_level, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5942 offset++;
5943 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_time_to_discharge, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5944 offset+=3;
5945 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_time_to_charge, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5946 offset+=3;
5947 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_presence, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5948 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_indicator, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5949 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_charging, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5950 proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_serviceability, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5951 offset++;
5952 break;
5953 case GENERIC_LOCATION_GLOBAL_GET:
5954 break;
5955 case GENERIC_LOCATION_LOCAL_GET:
5956 break;
5957 case GENERIC_LOCATION_LOCAL_STATUS:
5958 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5959 offset+=2;
5960 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5961 offset+=2;
5962 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5963 offset+=2;
5964 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5965 offset++;
5966 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5967 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5968 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5969 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5970 offset+=2;
5971 break;
5972 case GENERIC_LOCATION_LOCAL_SET:
5973 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5974 offset+=2;
5975 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5976 offset+=2;
5977 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5978 offset+=2;
5979 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5980 offset++;
5981 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5982 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5983 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5984 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5985 offset+=2;
5986 break;
5987 case GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED:
5988 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5989 offset+=2;
5990 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5991 offset+=2;
5992 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5993 offset+=2;
5994 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5995 offset++;
5996 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5997 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5998 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5999 proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6000 offset+=2;
6001 break;
6003 case SCENE_STATUS:
6004 proto_tree_add_item(sub_tree, hf_btmesh_scene_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6005 offset++;
6006 proto_tree_add_item(sub_tree, hf_btmesh_scene_status_current_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6007 offset+=2;
6008 /* Optional */
6009 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6010 proto_tree_add_item(sub_tree, hf_btmesh_scene_status_target_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6011 offset+=2;
6012 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6013 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6014 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6015 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6016 offset++;
6018 break;
6019 case SCENE_GET:
6020 break;
6021 case SCENE_RECALL:
6022 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6023 offset+=2;
6024 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6025 offset++;
6026 /* Optional */
6027 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6028 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6029 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6030 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6031 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6032 offset++;
6033 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6034 offset++;
6036 break;
6037 case SCENE_RECALL_UNACKNOWLEDGED:
6038 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6039 offset+=2;
6040 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6041 offset++;
6042 /* Optional */
6043 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6044 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6045 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6046 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6047 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6048 offset++;
6049 proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6050 offset++;
6052 break;
6053 case SCENE_REGISTER_GET:
6054 break;
6055 case SCENE_REGISTER_STATUS:
6056 proto_tree_add_item(sub_tree, hf_btmesh_scene_register_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6057 offset++;
6058 proto_tree_add_item(sub_tree, hf_btmesh_scene_register_status_current_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6059 offset+=2;
6060 sceneslist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_scene_register_status_scenes, NULL, "Scenes");
6061 while (tvb_reported_length_remaining(tvb, offset) > 1) {
6062 proto_tree_add_item(sceneslist_tree, hf_btmesh_scene_register_status_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6063 offset+=2;
6065 break;
6066 case SCENE_STORE:
6067 proto_tree_add_item(sub_tree, hf_btmesh_scene_store_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6068 offset+=2;
6069 break;
6070 case SCENE_STORE_UNACKNOWLEDGED:
6071 proto_tree_add_item(sub_tree, hf_btmesh_scene_store_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6072 offset+=2;
6073 break;
6074 case SCENE_DELETE:
6075 proto_tree_add_item(sub_tree, hf_btmesh_scene_delete_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6076 offset+=2;
6077 break;
6078 case SCENE_DELETE_UNACKNOWLEDGED:
6079 proto_tree_add_item(sub_tree, hf_btmesh_scene_delete_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6080 offset+=2;
6081 break;
6082 case TIME_SET:
6083 proto_tree_add_item(sub_tree, hf_btmesh_time_set_tai_seconds, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6084 offset+=5;
6085 proto_tree_add_item(sub_tree, hf_btmesh_time_set_subsecond, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6086 offset++;
6087 proto_tree_add_item(sub_tree, hf_btmesh_time_set_uncertainty, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6088 offset++;
6089 proto_tree_add_item(sub_tree, hf_btmesh_time_set_time_authority, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6090 proto_tree_add_item(sub_tree, hf_btmesh_time_set_tai_utc_delta, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6091 offset+=2;
6092 proto_tree_add_item(sub_tree, hf_btmesh_time_set_time_zone_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6093 offset++;
6094 break;
6095 case TIME_STATUS:
6096 proto_tree_add_item(sub_tree, hf_btmesh_time_status_tai_seconds, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6097 offset+=5;
6098 /* Optional */
6099 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6100 proto_tree_add_item(sub_tree, hf_btmesh_time_status_subsecond, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6101 offset++;
6102 proto_tree_add_item(sub_tree, hf_btmesh_time_status_uncertainty, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6103 offset++;
6104 proto_tree_add_item(sub_tree, hf_btmesh_time_status_time_authority, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6105 proto_tree_add_item(sub_tree, hf_btmesh_time_status_tai_utc_delta, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6106 offset+=2;
6107 proto_tree_add_item(sub_tree, hf_btmesh_time_status_time_zone_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6108 offset++;
6110 break;
6111 case SCHEDULER_ACTION_STATUS:
6112 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6113 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6114 month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6115 month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6116 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6117 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6118 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6119 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6120 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6121 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6122 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6123 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6124 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6125 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6126 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6127 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6128 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6129 offset+=3;
6130 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6131 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6132 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6133 day_of_week_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_day_of_week, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6134 day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6135 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6136 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6137 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6138 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6139 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6140 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6141 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6142 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6143 offset+=4;
6144 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6145 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6146 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6147 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6148 offset+=1;
6149 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6150 offset+=2;
6151 break;
6152 case SCHEDULER_ACTION_SET:
6153 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6154 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6155 month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6156 month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6157 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6158 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6159 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6160 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6161 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6162 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6163 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6164 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6165 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6166 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6167 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6168 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6169 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6170 offset+=3;
6171 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6172 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6173 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6174 day_of_week_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_day_of_week, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6175 day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6176 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6177 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6178 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6179 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6180 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6181 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6182 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6183 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6184 offset+=4;
6185 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6186 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6187 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6188 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6189 offset+=1;
6190 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6191 offset+=2;
6192 break;
6193 case SCHEDULER_ACTION_SET_UNACKNOWLEDGED:
6194 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6195 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6196 month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6197 month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6198 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6199 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6200 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6201 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6202 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6203 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6204 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6205 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6206 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6207 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6208 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6209 proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6210 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6211 offset+=3;
6212 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6213 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6214 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6215 day_of_week_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day_of_week, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6216 day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6217 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6218 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6219 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6220 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6221 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6222 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6223 proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6224 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6225 offset+=4;
6226 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6227 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6228 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6229 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6230 offset+=1;
6231 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6232 offset+=2;
6233 break;
6234 case TIME_GET:
6235 break;
6236 case TIME_ROLE_GET:
6237 break;
6238 case TIME_ROLE_SET:
6239 proto_tree_add_item(sub_tree, hf_btmesh_time_role_set_time_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6240 offset++;
6241 break;
6242 case TIME_ROLE_STATUS:
6243 proto_tree_add_item(sub_tree, hf_btmesh_time_role_status_time_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6244 offset++;
6245 break;
6246 case TIME_ZONE_GET:
6247 break;
6248 case TIME_ZONE_SET:
6249 proto_tree_add_item(sub_tree, hf_btmesh_time_zone_set_time_zone_offset_new, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6250 offset++;
6251 proto_tree_add_item(sub_tree, hf_btmesh_time_zone_set_tai_of_zone_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6252 offset+=5;
6253 break;
6254 case TIME_ZONE_STATUS:
6255 proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_time_zone_offset_current, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6256 offset++;
6257 proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_time_zone_offset_new, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6258 offset++;
6259 proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_tai_of_zone_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6260 offset+=5;
6261 break;
6262 case TAI_UTC_DELTA_GET:
6263 break;
6264 case TAI_UTC_DELTA_SET:
6265 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_tai_utc_delta_new, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6266 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_padding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6267 offset+=2;
6268 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_tai_of_delta_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6269 offset+=5;
6270 break;
6271 case TAI_UTC_DELTA_STATUS:
6272 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_utc_delta_current, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6273 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_padding_1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6274 offset+=2;
6275 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_utc_delta_new, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6276 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_padding_2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6277 offset+=2;
6278 proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_of_delta_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6279 offset+=5;
6280 break;
6281 case SCHEDULER_ACTION_GET:
6282 proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_get_index, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6283 offset++;
6284 break;
6285 case SCHEDULER_GET:
6286 break;
6287 case SCHEDULER_STATUS:
6288 scheduler_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_status_schedules, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6289 scheduler_tree = proto_item_add_subtree(scheduler_item, ett_btmesh_scheduler_schedules);
6290 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6291 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6292 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6293 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6294 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6295 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6296 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6297 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6298 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_8, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6299 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_9, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6300 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_10, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6301 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_11, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6302 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_12, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6303 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_13, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6304 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_14, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6305 proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_15, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6306 offset+=2;
6307 break;
6308 case LIGHT_LC_PROPERTY_SET:
6309 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_property_set_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6310 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
6311 offset+=2;
6312 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_light_lc_property_set_light_lc_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
6313 break;
6314 case LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED:
6315 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6316 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
6317 offset+=2;
6318 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
6319 break;
6320 case LIGHT_LC_PROPERTY_STATUS:
6321 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_property_status_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6322 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
6323 offset+=2;
6324 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_light_lc_property_status_light_lc_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
6325 break;
6326 case LIGHT_LIGHTNESS_GET:
6327 break;
6328 case LIGHT_LIGHTNESS_SET:
6329 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6330 offset+=2;
6331 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6332 offset++;
6333 /* Optional */
6334 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6335 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6336 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6337 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6338 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6339 offset++;
6340 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6341 offset++;
6343 break;
6344 case LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED:
6345 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6346 offset+=2;
6347 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6348 offset++;
6349 /* Optional */
6350 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6351 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6352 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6353 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6354 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6355 offset++;
6356 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6357 offset++;
6359 break;
6360 case LIGHT_LIGHTNESS_STATUS:
6361 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_present_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6362 offset+=2;
6363 /* Optional */
6364 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6365 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_target_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6366 offset+=2;
6367 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6368 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6369 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6370 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6371 offset++;
6373 break;
6374 case LIGHT_LIGHTNESS_LINEAR_GET:
6375 break;
6376 case LIGHT_LIGHTNESS_LINEAR_SET:
6377 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6378 offset+=2;
6379 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6380 offset++;
6381 /* Optional */
6382 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6383 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6384 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6385 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6386 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6387 offset++;
6388 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6389 offset++;
6391 break;
6392 case LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED:
6393 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6394 offset+=2;
6395 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6396 offset++;
6397 /* Optional */
6398 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6399 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6400 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6401 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6402 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6403 offset++;
6404 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6405 offset++;
6407 break;
6408 case LIGHT_LIGHTNESS_LINEAR_STATUS:
6409 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_present_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6410 offset+=2;
6411 /* Optional */
6412 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6413 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_target_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6414 offset+=2;
6415 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6416 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6417 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6418 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6419 offset++;
6421 break;
6422 case LIGHT_LIGHTNESS_LAST_GET:
6423 break;
6424 case LIGHT_LIGHTNESS_LAST_STATUS:
6425 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_last_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6426 offset+=2;
6427 break;
6428 case LIGHT_LIGHTNESS_DEFAULT_GET:
6429 break;
6430 case LIGHT_LIGHTNESS_DEFAULT_STATUS:
6431 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6432 offset+=2;
6433 break;
6434 case LIGHT_LIGHTNESS_RANGE_GET:
6435 break;
6436 case LIGHT_LIGHTNESS_RANGE_STATUS:
6437 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6438 offset++;
6439 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6440 offset+=2;
6441 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6442 offset+=2;
6443 break;
6444 case LIGHT_LIGHTNESS_DEFAULT_SET:
6445 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6446 offset+=2;
6447 break;
6448 case LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED:
6449 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6450 offset+=2;
6451 break;
6452 case LIGHT_LIGHTNESS_RANGE_SET:
6453 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6454 offset+=2;
6455 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6456 offset+=2;
6457 break;
6458 case LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED:
6459 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6460 offset+=2;
6461 proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6462 offset+=2;
6463 break;
6464 case LIGHT_CTL_GET:
6465 break;
6466 case LIGHT_CTL_SET:
6467 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6468 offset+=2;
6469 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6470 offset+=2;
6471 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6472 offset+=2;
6473 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6474 offset++;
6475 /* Optional */
6476 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6477 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6478 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6479 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6480 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6481 offset++;
6482 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6483 offset++;
6485 break;
6486 case LIGHT_CTL_SET_UNACKNOWLEDGED:
6487 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6488 offset+=2;
6489 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6490 offset+=2;
6491 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6492 offset+=2;
6493 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6494 offset++;
6495 /* Optional */
6496 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6497 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6498 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6499 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6500 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6501 offset++;
6502 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6503 offset++;
6505 break;
6506 case LIGHT_CTL_STATUS:
6507 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_present_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6508 offset+=2;
6509 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_present_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6510 offset+=2;
6511 /* Optional */
6512 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6513 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_target_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6514 offset+=2;
6515 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_target_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6516 offset+=2;
6517 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6518 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6519 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6520 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6521 offset++;
6523 break;
6524 case LIGHT_CTL_TEMPERATURE_GET:
6525 break;
6526 case LIGHT_CTL_TEMPERATURE_RANGE_GET:
6527 break;
6528 case LIGHT_CTL_TEMPERATURE_RANGE_STATUS:
6529 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6530 offset++;
6531 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6532 offset+=2;
6533 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6534 offset+=2;
6535 break;
6536 case LIGHT_CTL_TEMPERATURE_SET:
6537 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6538 offset+=2;
6539 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6540 offset+=2;
6541 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6542 offset++;
6543 /* Optional */
6544 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6545 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6546 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6547 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6548 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6549 offset++;
6550 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6551 offset++;
6553 break;
6554 case LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED:
6555 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6556 offset+=2;
6557 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6558 offset+=2;
6559 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6560 offset++;
6561 /* Optional */
6562 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6563 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6564 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6565 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6566 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6567 offset++;
6568 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6569 offset++;
6571 break;
6572 case LIGHT_CTL_TEMPERATURE_STATUS:
6573 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_present_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6574 offset+=2;
6575 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6576 offset+=2;
6577 /* Optional */
6578 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6579 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_target_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6580 offset+=2;
6581 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6582 offset+=2;
6583 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6584 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6585 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6586 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6587 offset++;
6589 break;
6590 case LIGHT_CTL_DEFAULT_GET:
6591 break;
6592 case LIGHT_CTL_DEFAULT_STATUS:
6593 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6594 offset+=2;
6595 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6596 offset+=2;
6597 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6598 offset+=2;
6599 break;
6600 case LIGHT_CTL_DEFAULT_SET:
6601 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6602 offset+=2;
6603 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6604 offset+=2;
6605 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6606 offset+=2;
6607 break;
6608 case LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED:
6609 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6610 offset+=2;
6611 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6612 offset+=2;
6613 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6614 offset+=2;
6615 break;
6616 case LIGHT_CTL_TEMPERATURE_RANGE_SET:
6617 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6618 offset+=2;
6619 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6620 offset+=2;
6621 break;
6622 case LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED:
6623 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6624 offset+=2;
6625 proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6626 offset+=2;
6627 break;
6628 case LIGHT_HSL_GET:
6629 break;
6630 case LIGHT_HSL_HUE_GET:
6631 break;
6632 case LIGHT_HSL_HUE_SET:
6633 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6634 offset+=2;
6635 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6636 offset++;
6637 /* Optional */
6638 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6639 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6640 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6641 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6642 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6643 offset++;
6644 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6645 offset++;
6647 break;
6648 case LIGHT_HSL_HUE_SET_UNACKNOWLEDGED:
6649 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6650 offset+=2;
6651 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6652 offset++;
6653 /* Optional */
6654 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6655 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6656 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6657 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6658 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6659 offset++;
6660 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6661 offset++;
6663 break;
6664 case LIGHT_HSL_HUE_STATUS:
6665 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_present_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6666 offset+=2;
6667 /* Optional */
6668 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6669 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_target_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6670 offset+=2;
6671 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6672 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6673 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6674 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6675 offset++;
6677 break;
6678 case LIGHT_HSL_SATURATION_GET:
6679 break;
6680 case LIGHT_HSL_SATURATION_SET:
6681 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6682 offset+=2;
6683 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6684 offset++;
6685 /* Optional */
6686 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6687 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6688 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6689 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6690 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6691 offset++;
6692 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6693 offset++;
6695 break;
6696 case LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED:
6697 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6698 offset+=2;
6699 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6700 offset++;
6701 /* Optional */
6702 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6703 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6704 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6705 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6706 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6707 offset++;
6708 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6709 offset++;
6711 break;
6712 case LIGHT_HSL_SATURATION_STATUS:
6713 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_present_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6714 offset+=2;
6715 /* Optional */
6716 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6717 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_target_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6718 offset+=2;
6719 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6720 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6721 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6722 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6723 offset++;
6725 break;
6726 case LIGHT_HSL_SET:
6727 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6728 offset+=2;
6729 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6730 offset+=2;
6731 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6732 offset+=2;
6733 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6734 offset++;
6735 /* Optional */
6736 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6737 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6738 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6739 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6740 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6741 offset++;
6742 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6743 offset++;
6745 break;
6746 case LIGHT_HSL_SET_UNACKNOWLEDGED:
6747 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6748 offset+=2;
6749 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6750 offset+=2;
6751 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6752 offset+=2;
6753 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6754 offset++;
6755 /* Optional */
6756 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6757 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6758 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6759 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6760 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6761 offset++;
6762 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6763 offset++;
6765 break;
6766 case LIGHT_HSL_STATUS:
6767 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6768 offset+=2;
6769 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6770 offset+=2;
6771 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6772 offset+=2;
6773 /* Optional */
6774 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6775 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6776 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6777 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6778 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6779 offset++;
6781 break;
6782 case LIGHT_HSL_TARGET_GET:
6783 break;
6784 case LIGHT_HSL_TARGET_STATUS:
6785 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_lightness_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6786 offset+=2;
6787 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_hue_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6788 offset+=2;
6789 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_saturation_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6790 offset+=2;
6791 /* Optional */
6792 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6793 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6794 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6795 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_target_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6796 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_target_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6797 offset++;
6799 break;
6800 case LIGHT_HSL_DEFAULT_GET:
6801 break;
6802 case LIGHT_HSL_DEFAULT_STATUS:
6803 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6804 offset+=2;
6805 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6806 offset+=2;
6807 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6808 offset+=2;
6809 break;
6810 case LIGHT_HSL_RANGE_GET:
6811 break;
6812 case LIGHT_HSL_RANGE_STATUS:
6813 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6814 offset++;
6815 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6816 offset+=2;
6817 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6818 offset+=2;
6819 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6820 offset+=2;
6821 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6822 offset+=2;
6823 break;
6824 case LIGHT_HSL_DEFAULT_SET:
6825 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6826 offset+=2;
6827 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6828 offset+=2;
6829 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6830 offset+=2;
6831 break;
6832 case LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED:
6833 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6834 offset+=2;
6835 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6836 offset+=2;
6837 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6838 offset+=2;
6839 break;
6840 case LIGHT_HSL_RANGE_SET:
6841 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6842 offset+=2;
6843 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6844 offset+=2;
6845 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6846 offset+=2;
6847 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6848 offset+=2;
6849 break;
6850 case LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED:
6851 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6852 offset+=2;
6853 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6854 offset+=2;
6855 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6856 offset+=2;
6857 proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6858 offset+=2;
6859 break;
6860 case LIGHT_XYL_GET:
6861 break;
6862 case LIGHT_XYL_SET:
6863 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6864 offset+=2;
6865 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6866 offset+=2;
6867 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6868 offset+=2;
6869 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6870 offset++;
6871 /* Optional */
6872 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6873 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6874 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6875 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6876 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6877 offset++;
6878 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6879 offset++;
6881 break;
6882 case LIGHT_XYL_SET_UNACKNOWLEDGED:
6883 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6884 offset+=2;
6885 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6886 offset+=2;
6887 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6888 offset+=2;
6889 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6890 offset++;
6891 /* Optional */
6892 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6893 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6894 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6895 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6896 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6897 offset++;
6898 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6899 offset++;
6901 break;
6902 case LIGHT_XYL_STATUS:
6903 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6904 offset+=2;
6905 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6906 offset+=2;
6907 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6908 offset+=2;
6909 /* Optional */
6910 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6911 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6912 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6913 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6914 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6915 offset++;
6917 break;
6918 case LIGHT_XYL_TARGET_GET:
6919 break;
6920 case LIGHT_XYL_TARGET_STATUS:
6921 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6922 offset+=2;
6923 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6924 offset+=2;
6925 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6926 offset+=2;
6927 /* Optional */
6928 if (tvb_reported_length_remaining(tvb, offset) > 0) {
6929 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6930 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6931 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_target_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6932 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_target_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6933 offset++;
6935 break;
6936 case LIGHT_XYL_DEFAULT_GET:
6937 break;
6938 case LIGHT_XYL_DEFAULT_STATUS:
6939 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6940 offset+=2;
6941 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6942 offset+=2;
6943 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6944 offset+=2;
6945 break;
6946 case LIGHT_XYL_RANGE_GET:
6947 break;
6948 case LIGHT_XYL_RANGE_STATUS:
6949 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6950 offset++;
6951 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6952 offset+=2;
6953 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6954 offset+=2;
6955 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6956 offset+=2;
6957 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6958 offset+=2;
6959 break;
6960 case LIGHT_XYL_DEFAULT_SET:
6961 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6962 offset+=2;
6963 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6964 offset+=2;
6965 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6966 offset+=2;
6967 break;
6968 case LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED:
6969 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6970 offset+=2;
6971 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6972 offset+=2;
6973 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6974 offset+=2;
6975 break;
6976 case LIGHT_XYL_RANGE_SET:
6977 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6978 offset+=2;
6979 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6980 offset+=2;
6981 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6982 offset+=2;
6983 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6984 offset+=2;
6985 break;
6986 case LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED:
6987 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6988 offset+=2;
6989 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6990 offset+=2;
6991 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6992 offset+=2;
6993 proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6994 offset+=2;
6995 break;
6996 case LIGHT_LC_MODE_GET:
6997 break;
6998 case LIGHT_LC_MODE_SET:
6999 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_set_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7000 offset++;
7001 break;
7002 case LIGHT_LC_MODE_SET_UNACKNOWLEDGED:
7003 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_set_unacknowledged_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7004 offset++;
7005 break;
7006 case LIGHT_LC_MODE_STATUS:
7007 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_status_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7008 offset++;
7009 break;
7010 case LIGHT_LC_OM_GET:
7011 break;
7012 case LIGHT_LC_OM_SET:
7013 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_set_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7014 offset++;
7015 break;
7016 case LIGHT_LC_OM_SET_UNACKNOWLEDGED:
7017 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_set_unacknowledged_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7018 offset++;
7019 break;
7020 case LIGHT_LC_OM_STATUS:
7021 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_status_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7022 offset++;
7023 break;
7024 case LIGHT_LC_LIGHT_ONOFF_GET:
7025 break;
7026 case LIGHT_LC_LIGHT_ONOFF_SET:
7027 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7028 offset++;
7029 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7030 offset++;
7031 /* Optional */
7032 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7033 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7034 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7035 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7036 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7037 offset++;
7038 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7039 offset++;
7041 break;
7042 case LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED:
7043 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7044 offset++;
7045 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7046 offset++;
7047 /* Optional */
7048 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7049 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7050 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7051 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7052 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7053 offset++;
7054 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7055 offset++;
7057 break;
7058 case LIGHT_LC_LIGHT_ONOFF_STATUS:
7059 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_present_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7060 offset++;
7061 /* Optional */
7062 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7063 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_target_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7064 offset++;
7065 publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7066 publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7067 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7068 proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7069 offset++;
7071 break;
7072 case LIGHT_LC_PROPERTY_GET:
7073 proto_tree_add_item(sub_tree, hf_btmesh_light_lc_property_get_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7074 offset+=2;
7075 break;
7076 case GENERIC_MANUFACTURER_PROPERTIES_GET:
7077 break;
7078 case GENERIC_MANUFACTURER_PROPERTIES_STATUS:
7079 manufacturer_property_ids_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_manufacturer_property_ids, NULL, "Manufacturer Property IDs");
7080 while (tvb_reported_length_remaining(tvb, offset) > 1) {
7081 proto_tree_add_item(manufacturer_property_ids_tree, hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7082 offset+=2;
7084 break;
7085 case GENERIC_MANUFACTURER_PROPERTY_GET:
7086 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7087 offset+=2;
7088 break;
7089 case GENERIC_MANUFACTURER_PROPERTY_SET:
7090 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7091 offset+=2;
7092 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7093 offset++;
7094 break;
7095 case GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED:
7096 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7097 offset+=2;
7098 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7099 offset++;
7100 break;
7101 case GENERIC_MANUFACTURER_PROPERTY_STATUS:
7102 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7103 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7104 offset+=2;
7105 // Optional
7106 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7107 proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7108 offset++;
7109 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7111 break;
7112 case GENERIC_ADMIN_PROPERTIES_GET:
7113 break;
7114 case GENERIC_ADMIN_PROPERTIES_STATUS:
7115 admin_property_ids_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_admin_property_ids, NULL, "Admin Property IDs");
7116 while (tvb_reported_length_remaining(tvb, offset) > 1) {
7117 proto_tree_add_item(admin_property_ids_tree, hf_btmesh_generic_admin_properties_status_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7118 offset+=2;
7120 break;
7121 case GENERIC_ADMIN_PROPERTY_GET:
7122 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_get_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7123 offset+=2;
7124 break;
7125 case GENERIC_ADMIN_PROPERTY_SET:
7126 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7127 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7128 offset+=2;
7129 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7130 offset++;
7131 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_set_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7132 break;
7133 case GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED:
7134 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7135 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7136 offset+=2;
7137 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7138 offset++;
7139 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7140 break;
7141 case GENERIC_ADMIN_PROPERTY_STATUS:
7142 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_status_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7143 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7144 offset+=2;
7145 // Optional
7146 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7147 proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_status_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7148 offset++;
7149 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_status_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7151 break;
7152 case GENERIC_USER_PROPERTIES_GET:
7153 break;
7154 case GENERIC_USER_PROPERTIES_STATUS:
7155 user_property_ids_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_user_property_ids, NULL, "User Property IDs");
7156 while (tvb_reported_length_remaining(tvb, offset) > 1) {
7157 proto_tree_add_item(user_property_ids_tree, hf_btmesh_generic_user_properties_status_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7158 offset+=2;
7160 break;
7161 case GENERIC_USER_PROPERTY_GET:
7162 proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_get_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7163 offset+=2;
7164 break;
7165 case GENERIC_USER_PROPERTY_SET:
7166 proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_set_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7167 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7168 offset+=2;
7169 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_set_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7170 break;
7171 case GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED:
7172 proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_set_unacknowledged_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7173 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7174 offset+=2;
7175 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_set_unacknowledged_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7176 break;
7177 case GENERIC_USER_PROPERTY_STATUS:
7178 proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_status_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7179 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7180 offset+=2;
7181 // Optional
7182 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7183 proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_status_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7184 offset++;
7185 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_status_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7187 break;
7188 case GENERIC_CLIENT_PROPERTIES_GET:
7189 proto_tree_add_item(sub_tree, hf_btmesh_generic_client_properties_get_client_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7190 offset+=2;
7191 break;
7192 case GENERIC_CLIENT_PROPERTIES_STATUS:
7193 generic_client_property_ids_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_generic_client_property_ids, NULL, "Client Property IDs");
7194 while (tvb_reported_length_remaining(tvb, offset) > 1) {
7195 proto_tree_add_item(generic_client_property_ids_tree, hf_btmesh_generic_client_properties_status_client_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7196 offset+=2;
7198 break;
7199 case SENSOR_DESCRIPTOR_GET:
7200 // Optional
7201 if (tvb_reported_length_remaining(tvb, offset) > 1) {
7202 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7203 offset+=2;
7205 break;
7206 case SENSOR_DESCRIPTOR_STATUS:
7207 if (tvb_reported_length_remaining(tvb, offset) == 2) {
7208 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7209 offset+=2;
7210 } else {
7211 while (tvb_reported_length_remaining(tvb, offset) > 0) {
7212 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7213 offset+=2;
7214 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7215 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7216 offset+=3;
7217 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7218 offset+=1;
7219 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7220 offset+=1;
7221 proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7222 offset+=1;
7225 break;
7226 case SENSOR_CADENCE_GET:
7227 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7228 offset+=2;
7229 break;
7230 case SENSOR_CADENCE_SET:
7231 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7232 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7233 offset+=2;
7234 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7235 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7236 trigger_type = tvb_get_uint8(tvb, offset) >> 7;
7237 offset++;
7238 offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_set_hfs);
7239 break;
7240 case SENSOR_CADENCE_SET_UNACKNOWLEDGED:
7241 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7242 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7243 offset+=2;
7244 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7245 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7246 trigger_type = tvb_get_uint8(tvb, offset) >> 7;
7247 offset++;
7249 offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_set_unacknowledged_hfs);
7250 break;
7251 case SENSOR_CADENCE_STATUS:
7252 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7253 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7254 offset+=2;
7255 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7256 proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_status_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7257 trigger_type = tvb_get_uint8(tvb, offset) >> 7;
7258 offset++;
7259 offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_status_hfs);
7260 break;
7261 case SENSOR_SETTINGS_GET:
7262 proto_tree_add_item(sub_tree, hf_btmesh_sensor_settings_get_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7263 offset+=2;
7264 break;
7265 case SENSOR_SETTINGS_STATUS:
7266 proto_tree_add_item(sub_tree, hf_btmesh_sensor_settings_status_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7267 offset+=2;
7268 // Optional
7269 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7270 sensor_setting_property_ids_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_sensor_setting_property_ids, NULL, "Sensor Setting Property IDs");
7271 while (tvb_reported_length_remaining(tvb, offset) > 1) {
7272 proto_tree_add_item(sensor_setting_property_ids_tree, hf_btmesh_sensor_settings_status_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7273 offset+=2;
7276 break;
7277 case SENSOR_SETTING_GET:
7278 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_get_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7279 offset+=2;
7280 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_get_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7281 offset+=2;
7282 break;
7283 case SENSOR_SETTING_SET:
7284 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7285 offset+=2;
7286 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7287 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7288 offset+=2;
7289 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_set_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7290 break;
7291 case SENSOR_SETTING_SET_UNACKNOWLEDGED:
7292 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7293 offset+=2;
7294 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7295 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7296 offset+=2;
7297 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7298 break;
7299 case SENSOR_SETTING_STATUS:
7300 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_status_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7301 offset+=2;
7302 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7303 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7304 offset+=2;
7305 //Optional
7306 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7307 proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7308 offset++;
7309 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7311 break;
7312 case SENSOR_GET:
7313 // Optional
7314 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7315 proto_tree_add_item(sub_tree, hf_btmesh_sensor_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7316 offset+=2;
7318 break;
7319 case SENSOR_STATUS:
7320 // Optional
7321 while (tvb_reported_length_remaining(tvb, offset) > 0) {
7322 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_format);
7323 if (mpid_format == MPID_FORMAT_A) {
7324 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_a_length, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_length);
7325 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_a_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &mpid_property_id);
7326 offset+=2;
7327 } else {
7328 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_b_length, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_length);
7329 offset++;
7330 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_b_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &mpid_property_id);
7331 offset+=2;
7333 offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_status_raw_value, tvb, offset, (uint16_t)mpid_property_id, mpid_length);
7335 break;
7336 case SENSOR_COLUMN_GET:
7337 proto_tree_add_item(sub_tree, hf_btmesh_sensor_column_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7338 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7339 offset+=2;
7340 offset+=dissect_columns_raw_value(sub_tree, tvb, offset, property_id, &sensor_column_get_hfs);
7341 break;
7342 case SENSOR_COLUMN_STATUS:
7343 proto_tree_add_item(sub_tree, hf_btmesh_sensor_column_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7344 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7345 offset+=2;
7346 offset+=dissect_property_raw_value_entry(sub_tree, tvb, offset, property_id, &sensor_column_status_hfs);
7347 break;
7348 case SENSOR_SERIES_GET:
7349 proto_tree_add_item(sub_tree, hf_btmesh_sensor_series_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7350 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7351 offset+=2;
7352 // Optional
7353 if (tvb_reported_length_remaining(tvb, offset) > 0) {
7354 offset+=dissect_columns_raw_value(sub_tree, tvb, offset, property_id, &sensor_series_get_hfs);
7356 break;
7357 case SENSOR_SERIES_STATUS:
7358 //first property_id is manadatory
7359 proto_tree_add_item(sub_tree, hf_btmesh_sensor_series_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7360 property_id = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
7361 offset+=2;
7362 //Optional, dissect one or more values
7363 while (tvb_reported_length_remaining(tvb, offset) > 0) {
7364 offset+=dissect_property_raw_value_entry(sub_tree, tvb, offset, property_id, &sensor_series_status_hfs);
7366 break;
7368 // ******************************************************************************************
7370 default:
7371 if (tvb_reported_length_remaining(tvb, offset)) {
7372 proto_tree_add_item(sub_tree, hf_btmesh_model_layer_parameters, tvb, offset, -1, ENC_NA);
7373 offset+=tvb_reported_length_remaining(tvb, offset);
7376 /* Still some octets left */
7377 if (tvb_reported_length_remaining(tvb, offset)) {
7378 proto_tree_add_expert(sub_tree, pinfo, &ei_btmesh_unknown_payload, tvb, offset, -1);
7382 static void
7383 dissect_btmesh_access_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset)
7385 proto_tree *sub_tree;
7387 sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_access_pdu, NULL, "Access PDU");
7388 proto_tree_add_item(sub_tree, hf_btmesh_decrypted_access, tvb, offset, -1, ENC_NA);
7390 dissect_btmesh_model_layer(tvb, pinfo, tree, offset);
7393 static void
7394 dissect_btmesh_transport_control_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, uint32_t opcode)
7396 proto_tree *sub_tree;
7398 col_append_str(pinfo->cinfo, COL_INFO,
7399 val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Control Message Unknown"));
7401 sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_btmesh_transp_ctrl_msg, NULL, "Transport Control Message %s",
7402 val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Unknown"));
7404 switch (opcode) {
7405 case 1:
7406 /* 3.6.5.1 Friend Poll */
7407 /* Padding 7 bits */
7408 proto_tree_add_item(sub_tree, hf_btmesh_cntr_padding, tvb, offset, 1, ENC_BIG_ENDIAN);
7409 /* FSN 1 bit*/
7410 proto_tree_add_item(sub_tree, hf_btmesh_cntr_fsn, tvb, offset, 1, ENC_BIG_ENDIAN);
7411 break;
7412 case 2:
7413 /* 3.6.5.2 Friend Update */
7414 /* Flags 1 octet */
7415 proto_tree_add_item(sub_tree, hf_btmesh_cntr_key_refresh_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
7416 proto_tree_add_item(sub_tree, hf_btmesh_cntr_iv_update_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
7417 proto_tree_add_item(sub_tree, hf_btmesh_cntr_flags_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7418 offset++;
7419 /* IV Index 4 octets*/
7420 proto_tree_add_item(sub_tree, hf_btmesh_cntr_iv_index, tvb, offset, 4, ENC_BIG_ENDIAN);
7421 offset+=4;
7422 /* MD 1 octet */
7423 proto_tree_add_item(sub_tree, hf_btmesh_cntr_md, tvb, offset, 1, ENC_BIG_ENDIAN);
7424 offset++;
7425 break;
7426 case 3:
7427 /* Friend Request */
7428 /* Criteria 1 octet */
7429 /* RFU 1 bit */
7430 proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7431 /* RSSIFactor 2 bits */
7432 proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_rssifactor, tvb, offset, 1, ENC_BIG_ENDIAN);
7433 /* ReceiveWindowFactor 2 bits */
7434 proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_receivewindowfactor, tvb, offset, 1, ENC_BIG_ENDIAN);
7435 /* MinQueueSizeLog 3 bits */
7436 proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_minqueuesizelog, tvb, offset, 1, ENC_BIG_ENDIAN);
7437 offset++;
7438 /* ReceiveDelay 1 octet */
7439 proto_tree_add_item(sub_tree, hf_btmesh_cntr_receivedelay, tvb, offset, 1, ENC_BIG_ENDIAN);
7440 offset++;
7441 /* PollTimeout 3 octets */
7442 proto_tree_add_item(sub_tree, hf_btmesh_cntr_polltimeout, tvb, offset, 3, ENC_BIG_ENDIAN);
7443 offset+=3;
7444 /* PreviousAddress 2 octets */
7445 proto_tree_add_item(sub_tree, hf_btmesh_cntr_previousaddress, tvb, offset, 2, ENC_BIG_ENDIAN);
7446 offset+=2;
7447 /* NumElements 1 octets */
7448 proto_tree_add_item(sub_tree, hf_btmesh_cntr_numelements, tvb, offset, 1, ENC_BIG_ENDIAN);
7449 offset += 1;
7450 /* LPNCounter 1 octets */
7451 proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7452 break;
7453 case 4:
7454 /* 3.6.5.4 Friend Offer */
7455 /* ReceiveWindow 1 octet */
7456 proto_tree_add_item(sub_tree, hf_btmesh_cntr_receivewindow, tvb, offset, 1, ENC_BIG_ENDIAN);
7457 offset++;
7458 /* QueueSize 1 octet */
7459 proto_tree_add_item(sub_tree, hf_btmesh_cntr_queuesize, tvb, offset, 1, ENC_BIG_ENDIAN);
7460 offset++;
7461 /* SubscriptionListSize 1 octet */
7462 proto_tree_add_item(sub_tree, hf_btmesh_cntr_subscriptionlistsize, tvb, offset, 1, ENC_BIG_ENDIAN);
7463 offset++;
7464 /* RSSI 1 octet */
7465 proto_tree_add_item(sub_tree, hf_btmesh_cntr_rssi, tvb, offset, 1, ENC_BIG_ENDIAN);
7466 offset++;
7467 /* FriendCounter 2 octets */
7468 proto_tree_add_item(sub_tree, hf_btmesh_cntr_friendcounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7469 break;
7470 case 5:
7471 /* 3.6.5.5 Friend Clear */
7472 /* LPNAddress 2 octets */
7473 proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpnaddress, tvb, offset, 1, ENC_BIG_ENDIAN);
7474 offset += 2;
7475 /* LPNCounter 2 octets */
7476 proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7477 break;
7478 case 6:
7479 /* 3.6.5.6 Friend Clear Confirm */
7480 /* LPNAddress 2 octets */
7481 proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpnaddress, tvb, offset, 1, ENC_BIG_ENDIAN);
7482 offset += 2;
7483 /* LPNCounter 2 octets */
7484 proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7486 break;
7487 case 7:
7488 /* 3.6.5.7 Friend Subscription List Add */
7489 /* TransactionNumber 1 octet */
7490 proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7491 offset++;
7492 /* AddressList 2 * N */
7493 proto_tree_add_expert(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset, -1);
7494 break;
7495 case 8:
7496 /* 3.6.5.8 Friend Subscription List Remove */
7497 proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7498 offset++;
7499 /* AddressList 2 * N */
7500 proto_tree_add_expert(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset, -1);
7501 break;
7502 case 9:
7503 /* 3.6.5.9 Friend Subscription List Confirm */
7504 proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7505 offset++;
7506 break;
7507 case 10:
7508 /* 3.6.5.10 Heartbeat */
7509 /* RFU & InitTTL */
7510 proto_tree_add_item(sub_tree, hf_btmesh_cntr_heartbeat_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7511 proto_tree_add_item(sub_tree, hf_btmesh_cntr_init_ttl, tvb, offset, 1, ENC_BIG_ENDIAN);
7512 offset++;
7513 /* Features */
7514 proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_relay, tvb, offset, 2, ENC_BIG_ENDIAN);
7515 proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_proxy, tvb, offset, 2, ENC_BIG_ENDIAN);
7516 proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_friend, tvb, offset, 2, ENC_BIG_ENDIAN);
7517 proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_low_power, tvb, offset, 2, ENC_BIG_ENDIAN);
7518 proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_rfu, tvb, offset, 2, ENC_BIG_ENDIAN);
7519 break;
7520 default:
7521 /* Unknown Control Message */
7522 proto_tree_add_item(sub_tree, hf_btmesh_cntr_unknown_payload, tvb, offset, -1, ENC_NA);
7523 proto_tree_add_expert(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset, -1);
7524 break;
7528 static bool
7529 try_access_decrypt(tvbuff_t *tvb, int offset, uint8_t *decrypted_data, int enc_data_len, uint8_t *key, network_decryption_ctx_t *dec_ctx)
7531 uint8_t accessnonce[13];
7532 gcry_cipher_hd_t cipher_hd;
7533 gcry_error_t gcrypt_err;
7534 uint64_t ccm_lengths[3];
7535 uint8_t *tag;
7537 accessnonce[0] = dec_ctx->app_nonce_type;
7538 accessnonce[1] = (dec_ctx->transmic_size == 4 ? 0x00 : 0x80 );
7539 memcpy((uint8_t *)&accessnonce + 2, dec_ctx->seq_src_buf, 5);
7540 if (dec_ctx->seg) {
7541 accessnonce[2] = (dec_ctx->seqzero & 0xff0000 ) >> 16;
7542 accessnonce[3] = (dec_ctx->seqzero & 0x00ff00 ) >> 8;
7543 accessnonce[4] = (dec_ctx->seqzero & 0x0000ff );
7545 memcpy((uint8_t *)&accessnonce + 7, dec_ctx->dst_buf, sizeof(dec_ctx->dst_buf));
7546 memcpy((uint8_t *)&accessnonce + 9, dec_ctx->ivindex_buf, sizeof(dec_ctx->ivindex_buf));
7548 /* Decrypt packet EXPERIMENTAL CODE */
7549 if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM, 0)) {
7550 return false;
7552 /* Set key */
7553 gcrypt_err = gcry_cipher_setkey(cipher_hd, key, 16);
7554 if (gcrypt_err != 0) {
7555 gcry_cipher_close(cipher_hd);
7556 return false;
7558 /* Load nonce */
7559 gcrypt_err = gcry_cipher_setiv(cipher_hd, &accessnonce, 13);
7560 if (gcrypt_err != 0) {
7561 gcry_cipher_close(cipher_hd);
7562 return false;
7564 ccm_lengths[0] = enc_data_len;
7565 ccm_lengths[1] = (dec_ctx->label_uuid_idx == NO_LABEL_UUID_IDX_USED ? 0 : 16);
7566 ccm_lengths[2] = dec_ctx->transmic_size;
7568 gcrypt_err = gcry_cipher_ctl(cipher_hd, GCRYCTL_SET_CCM_LENGTHS, ccm_lengths, sizeof(ccm_lengths));
7569 if (gcrypt_err != 0) {
7570 gcry_cipher_close(cipher_hd);
7571 return false;
7574 if (dec_ctx->label_uuid_idx != NO_LABEL_UUID_IDX_USED) {
7575 gcrypt_err = gcry_cipher_authenticate(cipher_hd, uat_btmesh_label_uuid_records[dec_ctx->label_uuid_idx].label_uuid, 16);
7576 if (gcrypt_err != 0) {
7577 gcry_cipher_close(cipher_hd);
7578 return false;
7582 /* Decrypt */
7583 gcrypt_err = gcry_cipher_decrypt(cipher_hd, decrypted_data, enc_data_len, tvb_get_ptr(tvb, offset, enc_data_len), enc_data_len);
7584 if (gcrypt_err != 0) {
7585 gcry_cipher_close(cipher_hd);
7586 return false;
7589 tag = (uint8_t *)wmem_alloc(wmem_packet_scope(), dec_ctx->transmic_size);
7590 gcrypt_err = gcry_cipher_gettag(cipher_hd, tag, dec_ctx->transmic_size);
7591 gcry_cipher_close(cipher_hd);
7593 if (gcrypt_err != 0 || memcmp(tag, tvb_get_ptr(tvb, offset + enc_data_len, dec_ctx->transmic_size), dec_ctx->transmic_size)) {
7594 /* Tag mismatch or cipher error */
7595 return false;
7597 /* Tag authenticated */
7598 return true;
7601 static unsigned
7602 check_address_type(uint32_t btmesh_address)
7604 if (btmesh_address & 0x8000 ) {
7605 if (btmesh_address & 0x4000) {
7606 return BTMESH_ADDRESS_GROUP;
7608 return BTMESH_ADDRESS_VIRTUAL;
7609 } else {
7610 if (btmesh_address) {
7611 return BTMESH_ADDRESS_UNICAST;
7613 return BTMESH_ADDRESS_UNASSIGNED;
7617 static tvbuff_t *
7618 btmesh_access_find_key_and_decrypt(tvbuff_t *tvb, packet_info *pinfo, int offset, network_decryption_ctx_t *dec_ctx)
7620 unsigned i, j, dst_address_type;
7621 uat_btmesh_record_t *record;
7622 uat_btmesh_dev_key_record_t *dev_record;
7623 uat_btmesh_label_uuid_record_t *label_record;
7624 int enc_data_len;
7625 uint8_t *decrypted_data;
7627 enc_data_len = tvb_reported_length_remaining(tvb, offset) - dec_ctx->transmic_size;
7628 decrypted_data = (uint8_t *)wmem_alloc(pinfo->pool, enc_data_len);
7629 dec_ctx->label_uuid_idx = NO_LABEL_UUID_IDX_USED;
7631 if (enc_data_len <= 0) {
7632 return NULL;
7635 dst_address_type = check_address_type(dec_ctx->dst);
7637 /* Application key */
7638 if (dec_ctx->app_nonce_type == BTMESH_NONCE_TYPE_APPLICATION) {
7639 for (i = 0; i < num_btmesh_uat; i++) {
7640 record = &uat_btmesh_records[i];
7641 if (record->valid == BTMESH_KEY_ENTRY_VALID) {
7642 if (dec_ctx->net_key_iv_index_hash == record->net_key_iv_index_hash && dec_ctx->aid == record->aid) {
7643 /* Try Label UUID */
7644 if (dst_address_type == BTMESH_ADDRESS_VIRTUAL) {
7645 for (j = 0; j < num_btmesh_label_uuid_uat; j++) {
7646 label_record = &uat_btmesh_label_uuid_records[j];
7647 if (label_record->valid == BTMESH_LABEL_UUID_ENTRY_VALID && label_record->hash == dec_ctx->dst) {
7648 dec_ctx->label_uuid_idx = j;
7649 if (try_access_decrypt(tvb, offset, decrypted_data, enc_data_len, record->application_key, dec_ctx)) {
7650 return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7654 } else {
7655 if (try_access_decrypt(tvb, offset, decrypted_data, enc_data_len, record->application_key, dec_ctx)) {
7656 return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7663 /* Device key */
7664 if (dec_ctx->app_nonce_type == BTMESH_NONCE_TYPE_DEVICE) {
7665 for (i = 0; i < num_btmesh_dev_key_uat; i++) {
7666 dev_record = &uat_btmesh_dev_key_records[i];
7667 if (dev_record->valid == BTMESH_DEVICE_KEY_ENTRY_VALID) {
7668 /* Try Device Key from SRC */
7669 if ( !memcmp(dev_record->src, dec_ctx->seq_src_buf + 3, 2) ) {
7670 /* Try Label UUID */
7671 if (dst_address_type == BTMESH_ADDRESS_VIRTUAL) {
7672 for (j = 0; j < num_btmesh_label_uuid_uat; j++) {
7673 label_record = &uat_btmesh_label_uuid_records[j];
7674 if (label_record->valid == BTMESH_LABEL_UUID_ENTRY_VALID && label_record->hash == dec_ctx->dst) {
7675 dec_ctx->label_uuid_idx = j;
7676 if (try_access_decrypt(tvb, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7677 return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7681 } else {
7682 if (try_access_decrypt(tvb, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7683 return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7687 /* Try Device Key from DST when DST is a unicast address */
7688 if (dst_address_type == BTMESH_ADDRESS_UNICAST) {
7689 if ( !memcmp(dev_record->src, dec_ctx->dst_buf, 2) ) {
7690 if (try_access_decrypt(tvb, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7691 return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7698 return NULL;
7701 static void
7702 dissect_btmesh_transport_access_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, int offset, network_decryption_ctx_t *dec_ctx)
7704 tvbuff_t *de_acc_tvb;
7705 proto_tree *sub_tree;
7707 int length = tvb_reported_length_remaining(tvb, offset);
7709 sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_upper_transp_acc_pdu, NULL, "Upper Transport Access PDU");
7710 de_acc_tvb = btmesh_access_find_key_and_decrypt(tvb, pinfo, offset, dec_ctx);
7712 proto_tree_add_item(sub_tree, hf_btmesh_enc_access_pld, tvb, offset, length - dec_ctx->transmic_size, ENC_NA);
7713 offset += (length - dec_ctx->transmic_size);
7715 proto_tree_add_item(sub_tree, hf_btmesh_transtmic, tvb, offset, dec_ctx->transmic_size, ENC_NA);
7717 if (de_acc_tvb) {
7718 add_new_data_source(pinfo, de_acc_tvb, "Decrypted access data");
7719 dissect_btmesh_access_message(de_acc_tvb, pinfo, tree, 0);
7723 static void
7724 dissect_btmesh_transport_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bool cntrl, network_decryption_ctx_t *dec_ctx)
7726 proto_tree *sub_tree;
7727 proto_item *ti;
7728 int offset = 0;
7729 uint32_t seg, opcode, rfu;
7730 uint32_t seqzero, sego, segn;
7732 /* We receive the full decrypted buffer including DST, skip to opcode */
7733 offset += 2;
7734 sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_transp_pdu, &ti, "Lower Transport PDU");
7735 if (cntrl) {
7736 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_cntr_seg, tvb, offset, 1, ENC_BIG_ENDIAN, &seg);
7737 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_cntr_opcode, tvb, offset, 1, ENC_BIG_ENDIAN, &opcode);
7738 offset++;
7740 if (seg) {
7741 /* Segmented */
7742 fragment_head *fd_head = NULL;
7744 /* RFU */
7745 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seg_rfu, tvb, offset, 3, ENC_BIG_ENDIAN, &rfu);
7746 /* SeqZero 13 */
7747 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seqzero_data, tvb, offset, 3, ENC_BIG_ENDIAN, &seqzero);
7748 /* SegO 5 Segment Offset number */
7749 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sego, tvb, offset, 3, ENC_BIG_ENDIAN, &sego);
7750 /* SegN 5 Last Segment number */
7751 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_segn, tvb, offset, 3, ENC_BIG_ENDIAN, &segn);
7752 offset += 3;
7754 /* Segment */
7755 proto_tree_add_item(sub_tree, hf_btmesh_segment, tvb, offset, -1, ENC_NA);
7757 /* Use 13 Lsbs from seqzero */
7758 dec_ctx->seqzero = dec_ctx->seq;
7759 /* Check for overflow */
7760 if ((dec_ctx->seq & 0x1fff) < seqzero) {
7761 dec_ctx->seqzero -= 0x2000;
7763 dec_ctx->seqzero = dec_ctx->seqzero & ~0x1fff;
7764 dec_ctx->seqzero += seqzero;
7766 if (segn == 0) {
7767 dissect_btmesh_transport_control_message(tvb, pinfo, tree, offset, opcode);
7768 } else {
7769 upper_transport_fragment_key frg_key;
7770 frg_key.src = dec_ctx->src;
7771 frg_key.net_key_iv_index_hash = dec_ctx->net_key_iv_index_hash;
7772 memcpy(&frg_key.ivindex, dec_ctx->ivindex_buf, sizeof(frg_key.ivindex));
7773 frg_key.seq0 = dec_ctx->seqzero;
7775 if (!pinfo->fd->visited) {
7776 uint32_t total_length = 0;
7777 if (segn == sego) {
7778 total_length = segn * 8 + tvb_captured_length_remaining(tvb, offset);
7781 /* Last fragment can be delivered out of order, and can be the first one. */
7782 fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7784 if ((fd_head) && (total_length)) {
7785 fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7787 fd_head = fragment_add(&upper_transport_reassembly_table,
7788 tvb, offset, pinfo,
7789 BTMESH_NOT_USED, &frg_key,
7790 8 * sego,
7791 tvb_captured_length_remaining(tvb, offset),
7792 ( segn == 0 ? false : true) );
7794 if ((!fd_head) && (total_length)) {
7795 fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7797 } else {
7798 fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7799 if (fd_head && (fd_head->flags&FD_DEFRAGMENTED)) {
7800 tvbuff_t *next_tvb;
7801 next_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled Control PDU", fd_head, &btmesh_segmented_control_frag_items, NULL, sub_tree);
7802 if (next_tvb) {
7803 dissect_btmesh_transport_control_message(next_tvb, pinfo, tree, 0, opcode);
7804 col_append_str(pinfo->cinfo, COL_INFO, " (Message Reassembled)");
7805 } else {
7806 col_clear(pinfo->cinfo, COL_INFO);
7807 col_append_fstr(pinfo->cinfo, COL_INFO,"Control Message (fragment %u)", sego);
7812 } else {
7813 if (opcode == 0) {
7814 col_clear(pinfo->cinfo, COL_INFO);
7815 col_append_str(pinfo->cinfo, COL_INFO,
7816 val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Control Message Unknown"));
7817 /* OBO 1 */
7818 proto_tree_add_item(sub_tree, hf_btmesh_obo, tvb, offset, 2, ENC_BIG_ENDIAN);
7819 /* SeqZero 13 */
7820 proto_tree_add_item(sub_tree, hf_btmesh_seqzero, tvb, offset, 2, ENC_BIG_ENDIAN);
7821 /* RFU 2 */
7822 proto_tree_add_item(sub_tree, hf_btmesh_rfu, tvb, offset, 2, ENC_BIG_ENDIAN);
7823 offset += 2;
7824 /* BlockAck 32 */
7825 proto_tree_add_item(sub_tree, hf_btmesh_blockack, tvb, offset, 4, ENC_BIG_ENDIAN);
7826 return;
7828 dissect_btmesh_transport_control_message(tvb, pinfo, tree, offset, opcode);
7830 } else {
7831 /* Access message */
7832 uint32_t afk, aid, szmic;
7833 /* Access message */
7834 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_seg, tvb, offset, 1, ENC_BIG_ENDIAN, &seg);
7835 /* AKF 1 Application Key Flag */
7836 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_akf, tvb, offset, 1, ENC_BIG_ENDIAN, &afk);
7837 /* AID 6 Application key identifier */
7838 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_aid, tvb, offset, 1, ENC_BIG_ENDIAN, &aid);
7839 offset++;
7841 dec_ctx->seg = seg;
7842 dec_ctx->aid = aid;
7843 dec_ctx->app_nonce_type = (afk ? BTMESH_NONCE_TYPE_APPLICATION : BTMESH_NONCE_TYPE_DEVICE);
7845 if (seg) {
7846 /* Segmented */
7847 fragment_head *fd_head = NULL;
7849 /* SZMIC 1 Size of TransMIC */
7850 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_szmic, tvb, offset, 3, ENC_BIG_ENDIAN, &szmic);
7851 /* SeqZero 13 Least significant bits of SeqAuth */
7852 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seqzero_data, tvb, offset, 3, ENC_BIG_ENDIAN, &seqzero);
7853 /* SegO 5 Segment Offset number */
7854 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sego, tvb, offset, 3, ENC_BIG_ENDIAN, &sego);
7855 /* SegN 5 Last Segment number */
7856 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_segn, tvb, offset, 3, ENC_BIG_ENDIAN, &segn);
7857 offset += 3;
7859 /* Segment m 8 to 96 Segment m of the Upper Transport Access PDU */
7860 proto_tree_add_item(sub_tree, hf_btmesh_segment, tvb, offset, -1, ENC_NA);
7862 /* Use 13 Lsbs from seqzero */
7863 dec_ctx->seqzero = dec_ctx->seq;
7864 /* Check for overflow */
7865 if ((dec_ctx->seq & 0x1fff) < seqzero) {
7866 dec_ctx->seqzero -= 0x2000;
7868 dec_ctx->seqzero = dec_ctx->seqzero & ~0x1fff;
7869 dec_ctx->seqzero += seqzero;
7871 if (segn == 0) {
7872 proto_item_set_len(ti, 1);
7873 dec_ctx->transmic_size = 4; /*TransMic is 32 bits*/
7874 dissect_btmesh_transport_access_message(tvb, pinfo, tree, offset, dec_ctx);
7875 } else {
7876 upper_transport_fragment_key frg_key;
7877 frg_key.src = dec_ctx->src;
7878 frg_key.net_key_iv_index_hash = dec_ctx->net_key_iv_index_hash;
7879 memcpy(&frg_key.ivindex, dec_ctx->ivindex_buf, sizeof(frg_key.ivindex));
7880 frg_key.seq0 = dec_ctx->seqzero;
7882 if (!pinfo->fd->visited) {
7883 uint32_t total_length = 0;
7884 if (segn == sego) {
7885 total_length = segn * 12 + tvb_captured_length_remaining(tvb, offset);
7888 /* Last fragment can be delivered out of order, and can be the first one. */
7889 fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7891 if ((fd_head) && (total_length)) {
7892 fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7894 fd_head = fragment_add(&upper_transport_reassembly_table,
7895 tvb, offset, pinfo,
7896 BTMESH_NOT_USED, &frg_key,
7897 12 * sego,
7898 tvb_captured_length_remaining(tvb, offset),
7899 ( segn == 0 ? false : true) );
7901 if ((!fd_head) && (total_length)) {
7902 fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7904 } else {
7905 fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7906 if (fd_head && (fd_head->flags&FD_DEFRAGMENTED)) {
7907 tvbuff_t *next_tvb;
7908 next_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled Access PDU", fd_head, &btmesh_segmented_access_frag_items, NULL, sub_tree);
7909 if (next_tvb) {
7910 dec_ctx->transmic_size = (szmic ? 8 : 4 );
7911 dissect_btmesh_transport_access_message(next_tvb, pinfo, tree, 0, dec_ctx);
7912 col_append_str(pinfo->cinfo, COL_INFO, " (Message Reassembled)");
7913 } else {
7914 col_clear(pinfo->cinfo, COL_INFO);
7915 col_append_fstr(pinfo->cinfo, COL_INFO, "Access Message (fragment %u)", sego);
7920 } else {
7921 proto_item_set_len(ti, 1);
7922 dec_ctx->transmic_size = 4; /*TransMic is 32 bits*/
7923 dissect_btmesh_transport_access_message(tvb, pinfo, tree, offset, dec_ctx);
7928 tvbuff_t *
7929 btmesh_network_find_key_and_decrypt(tvbuff_t *tvb, packet_info *pinfo, uint8_t **decrypted_data, int *enc_data_len, network_decryption_ctx_t *dec_ctx) {
7930 unsigned i;
7931 uint8_t nid;
7932 int offset = 0;
7933 tvbuff_t *de_obf_tvb;
7934 uint8_t networknonce[13];
7935 uat_btmesh_record_t *record;
7936 gcry_cipher_hd_t cipher_hd;
7937 uint32_t net_mic_size;
7938 gcry_error_t gcrypt_err;
7939 uint64_t ccm_lengths[3];
7940 int enc_offset;
7942 nid = tvb_get_uint8(tvb, offset) & 0x7f;
7944 /* Get the next record to try */
7945 for (i = 0; i < num_btmesh_uat; i++) {
7946 record = &uat_btmesh_records[i];
7947 if (record->valid == BTMESH_KEY_ENTRY_VALID && nid == record->nid) {
7948 offset = 1;
7949 de_obf_tvb = btmesh_deobfuscate(tvb, pinfo, offset, record);
7951 if (de_obf_tvb == NULL) {
7952 continue;
7954 net_mic_size = (((tvb_get_uint8(de_obf_tvb, 0) & 0x80) >> 7 ) + 1 ) * 4; /* CTL */
7955 offset +=6;
7957 (*enc_data_len) = tvb_reported_length(tvb) - offset - net_mic_size;
7958 enc_offset = offset;
7960 /* Start setting network nonce.*/
7961 networknonce[0] = dec_ctx->net_nonce_type; /* Nonce Type */
7963 tvb_memcpy(de_obf_tvb, (uint8_t *)&networknonce + 1, 0, 6);
7964 if (dec_ctx->net_nonce_type == BTMESH_NONCE_TYPE_PROXY) {
7965 networknonce[1] = 0x00; /*Pad*/
7967 networknonce[7] = 0x00; /*Pad*/
7968 networknonce[8] = 0x00; /*Pad*/
7970 memcpy((uint8_t *)&networknonce + 9, record->ivindex, 4);
7971 /* Decrypt packet EXPERIMENTAL CODE */
7972 if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM, 0)) {
7973 return NULL;
7976 gcrypt_err = gcry_cipher_setkey(cipher_hd, record->encryptionkey, 16);
7977 if (gcrypt_err != 0) {
7978 gcry_cipher_close(cipher_hd);
7979 continue;
7982 /* Load nonce */
7983 gcrypt_err = gcry_cipher_setiv(cipher_hd, &networknonce, 13);
7984 if (gcrypt_err != 0) {
7985 gcry_cipher_close(cipher_hd);
7986 continue;
7988 /* */
7989 ccm_lengths[0] = (*enc_data_len);
7990 ccm_lengths[1] = 0; /* aad */
7991 ccm_lengths[2] = net_mic_size; /* icv */
7993 gcrypt_err = gcry_cipher_ctl(cipher_hd, GCRYCTL_SET_CCM_LENGTHS, ccm_lengths, sizeof(ccm_lengths));
7994 if (gcrypt_err != 0) {
7995 gcry_cipher_close(cipher_hd);
7996 continue;
7999 (*decrypted_data) = (uint8_t *)wmem_alloc(pinfo->pool, *enc_data_len);
8000 /* Decrypt */
8001 gcrypt_err = gcry_cipher_decrypt(cipher_hd, (*decrypted_data), *enc_data_len, tvb_get_ptr(tvb, enc_offset, *enc_data_len), *enc_data_len);
8002 if (gcrypt_err != 0) {
8003 gcry_cipher_close(cipher_hd);
8004 continue;
8007 uint8_t *tag;
8008 tag = (uint8_t *)wmem_alloc(pinfo->pool, net_mic_size);
8009 gcrypt_err = gcry_cipher_gettag(cipher_hd, tag, net_mic_size);
8011 if (gcrypt_err == 0 && !memcmp(tag, tvb_get_ptr(tvb, enc_offset + (*enc_data_len), net_mic_size), net_mic_size)) {
8012 /* Tag authenticated, now close the cypher handle */
8013 gcry_cipher_close(cipher_hd);
8014 dec_ctx->net_key_iv_index_hash = record->net_key_iv_index_hash;
8015 memcpy(dec_ctx->ivindex_buf, record->ivindex, sizeof(dec_ctx->ivindex_buf));
8017 return de_obf_tvb;
8018 } else {
8019 /* Now close the cypher handle */
8020 gcry_cipher_close(cipher_hd);
8022 /* Tag mismatch or cipher error */
8023 continue;
8027 return NULL;
8030 static int
8031 dissect_btmesh_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8033 proto_item *item;
8034 proto_tree *netw_tree, *sub_tree;
8035 int offset = 0;
8036 uint32_t net_mic_size, seq, src, dst;
8037 int enc_data_len = 0;
8038 tvbuff_t *de_obf_tvb;
8039 tvbuff_t *de_cry_tvb;
8040 int decry_off;
8041 uint8_t *decrypted_data = NULL;
8042 network_decryption_ctx_t *dec_ctx;
8044 col_set_str(pinfo->cinfo, COL_PROTOCOL, "BT Mesh");
8046 item = proto_tree_add_item(tree, proto_btmesh, tvb, offset, -1, ENC_NA);
8047 netw_tree = proto_item_add_subtree(item, ett_btmesh);
8049 sub_tree = proto_tree_add_subtree(netw_tree, tvb, offset, -1, ett_btmesh_net_pdu, NULL, "Network PDU");
8050 /* Check length >= , if not error packet */
8051 /* First byte in plaintext */
8052 /* IVI 1 bit Least significant bit of IV Index */
8053 proto_tree_add_item(sub_tree, hf_btmesh_ivi, tvb, offset, 1, ENC_BIG_ENDIAN);
8054 proto_tree_add_item(sub_tree, hf_btmesh_nid, tvb, offset, 1, ENC_BIG_ENDIAN);
8055 offset++;
8057 dec_ctx = wmem_new(pinfo->pool, network_decryption_ctx_t);
8058 dec_ctx->net_nonce_type = BTMESH_NONCE_TYPE_NETWORK;
8060 de_obf_tvb = btmesh_network_find_key_and_decrypt(tvb, pinfo, &decrypted_data, &enc_data_len, dec_ctx);
8062 if (de_obf_tvb) {
8063 add_new_data_source(pinfo, de_obf_tvb, "Deobfuscated data");
8065 bool cntrl;
8067 /* CTL 1 bit Network Control*/
8068 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_ctl, de_obf_tvb, 0, 1, ENC_BIG_ENDIAN, &net_mic_size);
8069 /* 32 or 64 bits ( 0 or 1 )*/
8070 cntrl = net_mic_size;
8071 net_mic_size = (net_mic_size + 1) * 4;
8072 /* The TTL field is a 7-bit field */
8073 proto_tree_add_item(sub_tree, hf_btmesh_ttl, de_obf_tvb, 0, 1, ENC_BIG_ENDIAN);
8075 /* SEQ field is a 24-bit integer */
8076 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seq, de_obf_tvb, 1, 3, ENC_BIG_ENDIAN, &seq);
8078 /* SRC field is a 16-bit value */
8079 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_src, de_obf_tvb, 4, 2, ENC_BIG_ENDIAN, &src);
8080 offset += 6;
8082 de_cry_tvb = tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
8083 add_new_data_source(pinfo, de_cry_tvb, "Decrypted network data");
8085 decry_off = 0;
8086 proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_dst, de_cry_tvb, decry_off, 2, ENC_BIG_ENDIAN, &dst);
8087 decry_off += 2;
8088 /* TransportPDU */
8089 proto_tree_add_item(sub_tree, hf_btmesh_transp_pdu, de_cry_tvb, decry_off, enc_data_len-2, ENC_NA);
8090 offset += enc_data_len;
8092 proto_tree_add_item(sub_tree, hf_btmesh_netmic, tvb, offset, net_mic_size, ENC_BIG_ENDIAN);
8093 offset += net_mic_size;
8095 if (de_cry_tvb) {
8096 dec_ctx->src = src;
8097 dec_ctx->seq = seq;
8098 dec_ctx->dst = dst;
8099 tvb_memcpy(de_obf_tvb, dec_ctx->seq_src_buf, 1, 5);
8100 tvb_memcpy(de_cry_tvb, dec_ctx->dst_buf, 0, 2);
8102 dissect_btmesh_transport_pdu(de_cry_tvb, pinfo, netw_tree, cntrl, dec_ctx);
8104 } else {
8105 proto_tree_add_item(sub_tree, hf_btmesh_obfuscated, tvb, offset, 6, ENC_NA);
8106 offset += 6;
8108 proto_tree_add_item(sub_tree, hf_btmesh_encrypted, tvb, offset, -1, ENC_NA);
8109 offset = tvb_reported_length(tvb);
8112 return offset;
8115 static int
8116 compute_ascii_key(unsigned char **ascii_key, const char *key, const char *key_name, unsigned expected_octets, char **err)
8118 unsigned key_len = 0, raw_key_len;
8119 int hex_digit;
8120 unsigned char key_byte;
8121 unsigned i, j;
8123 if (key != NULL)
8125 raw_key_len = (unsigned)strlen(key);
8126 if (((raw_key_len == expected_octets * 2 + 2) || (raw_key_len == expected_octets * 2 + 1)) &&
8127 (key[0] == '0')
8128 && ((key[1] == 'x') || (key[1] == 'X')))
8131 * Key begins with "0x" or "0X"; skip that and treat the rest
8132 * as a sequence of hex digits.
8134 i = 2; /* first character after "0[Xx]" */
8135 j = 0;
8136 if (raw_key_len % 2 == 1)
8139 * Key has an odd number of characters; we act as if the
8140 * first character had a 0 in front of it, making the
8141 * number of characters even.
8143 key_len = (raw_key_len - 2) / 2 + 1;
8144 *ascii_key = (unsigned char *)g_malloc((key_len + 1) * sizeof(char));
8145 hex_digit = g_ascii_xdigit_value(key[i]);
8146 i++;
8147 if (hex_digit == -1)
8149 g_free(*ascii_key);
8150 *ascii_key = NULL;
8151 *err = ws_strdup_printf("Key %s begins with an invalid hex char (%c)", key, key[i]);
8152 return -1; /* not a valid hex digit */
8154 (*ascii_key)[j] = (unsigned char)hex_digit;
8155 j++;
8157 else
8160 * Key has an even number of characters, so we treat each
8161 * pair of hex digits as a single byte value.
8163 key_len = (raw_key_len - 2) / 2;
8164 *ascii_key = (unsigned char *)g_malloc((key_len + 1) * sizeof(char));
8166 while (i < (raw_key_len - 1))
8168 hex_digit = g_ascii_xdigit_value(key[i]);
8169 i++;
8170 if (hex_digit == -1)
8172 g_free(*ascii_key);
8173 *ascii_key = NULL;
8174 *err = ws_strdup_printf("%s %s has an invalid hex char (%c)", key_name, key, key[i-1]);
8175 return -1; /* not a valid hex digit */
8177 key_byte = ((unsigned char)hex_digit) << 4;
8178 hex_digit = g_ascii_xdigit_value(key[i]);
8179 i++;
8180 if (hex_digit == -1)
8182 g_free(*ascii_key);
8183 *ascii_key = NULL;
8184 *err = ws_strdup_printf("%s %s has an invalid hex char (%c)", key_name, key, key[i-1]);
8185 return -1; /* not a valid hex digit */
8187 key_byte |= (unsigned char)hex_digit;
8188 (*ascii_key)[j] = key_byte;
8189 j++;
8191 (*ascii_key)[j] = '\0';
8192 } else {
8193 *ascii_key = NULL;
8194 *err = ws_strdup_printf("%s %s has to start with '0x' or '0X', and represent exactly %d octets", key_name, key, expected_octets);
8195 return -1;
8198 return key_len;
8201 static bool
8202 uat_btmesh_record_update_cb(void *r, char **err)
8204 uat_btmesh_record_t *rec = (uat_btmesh_record_t *)r;
8206 rec->valid = 0;
8208 /* Compute keys & lengths once and for all */
8209 if (rec->network_key_string) {
8210 g_free(rec->network_key);
8211 rec->network_key_length = compute_ascii_key(&rec->network_key, rec->network_key_string, "Network Key", 16, err);
8212 g_free(rec->encryptionkey);
8213 rec->encryptionkey = g_new(uint8_t, 16);
8214 memset(rec->encryptionkey, 0, 16 * sizeof(uint8_t));
8215 g_free(rec->privacykey);
8216 rec->privacykey = g_new(uint8_t, 16);
8217 if (*err == NULL && create_central_security_keys(rec)) {
8218 rec->valid++;
8220 } else {
8221 rec->network_key_length = 0;
8222 rec->network_key = NULL;
8224 if (*err == NULL && rec->application_key_string) {
8225 g_free(rec->application_key);
8226 rec->application_key_length = compute_ascii_key(&rec->application_key, rec->application_key_string, "Application Key", 16, err);
8227 /* compute AID */
8228 if (*err == NULL && k4(rec)) {
8229 rec->valid++;
8231 } else {
8232 rec->application_key_length = 0;
8233 rec->application_key = NULL;
8235 if (*err == NULL && rec->ivindex_string) {
8236 g_free(rec->ivindex);
8237 rec->ivindex_string_length = compute_ascii_key(&rec->ivindex, rec->ivindex_string, "IVindex", 4, err);
8238 if (*err == NULL) {
8239 rec->valid++;
8242 if (rec->valid == BTMESH_KEY_ENTRY_VALID - 1) {
8243 /* Compute net_key_index_hash */
8244 const uint8_t hash_buf_len = 16 + 4;
8245 unsigned idx=0;
8246 uint8_t* hash_buf = (uint8_t *)g_malloc(hash_buf_len);
8247 memcpy(hash_buf, rec->encryptionkey, 16);
8248 idx += 16;
8249 memcpy(&hash_buf[idx], rec->ivindex, 4);
8250 rec->net_key_iv_index_hash = wmem_strong_hash(hash_buf, hash_buf_len);
8251 g_free(hash_buf);
8252 rec->valid++;
8254 return rec->valid == BTMESH_KEY_ENTRY_VALID;
8257 static void *
8258 uat_btmesh_record_copy_cb(void *n, const void *o, size_t siz _U_)
8260 uat_btmesh_record_t *new_rec = (uat_btmesh_record_t *)n;
8261 const uat_btmesh_record_t* old_rec = (const uat_btmesh_record_t *)o;
8263 memset(new_rec, 0x00, sizeof(uat_btmesh_record_t));
8265 /* Copy UAT fields */
8266 new_rec->network_key_string = g_strdup(old_rec->network_key_string);
8267 new_rec->application_key_string = g_strdup(old_rec->application_key_string);
8268 new_rec->ivindex_string = g_strdup(old_rec->ivindex_string);
8270 /* Parse keys as in an update */
8271 char *err = NULL;
8272 uat_btmesh_record_update_cb(new_rec, &err);
8273 if (err) {
8274 g_free(err);
8276 return new_rec;
8279 static void
8280 uat_btmesh_record_free_cb(void *r)
8282 uat_btmesh_record_t *rec = (uat_btmesh_record_t *)r;
8284 g_free(rec->network_key_string);
8285 g_free(rec->network_key);
8286 g_free(rec->application_key_string);
8287 g_free(rec->application_key);
8288 g_free(rec->ivindex_string);
8289 g_free(rec->ivindex);
8290 g_free(rec->privacykey);
8291 g_free(rec->encryptionkey);
8294 UAT_CSTRING_CB_DEF(uat_btmesh_records, network_key_string, uat_btmesh_record_t)
8295 UAT_CSTRING_CB_DEF(uat_btmesh_records, application_key_string, uat_btmesh_record_t)
8296 UAT_CSTRING_CB_DEF(uat_btmesh_records, ivindex_string, uat_btmesh_record_t)
8298 static bool
8299 uat_btmesh_dev_key_record_update_cb(void *r, char **err)
8301 uat_btmesh_dev_key_record_t *rec = (uat_btmesh_dev_key_record_t *)r;
8303 rec->valid = 0;
8305 /* Compute key & lengths once and for all */
8306 if (rec->device_key_string) {
8307 g_free(rec->device_key);
8308 rec->device_key_length = compute_ascii_key(&rec->device_key, rec->device_key_string, "Device Key", 16, err);
8309 if (*err == NULL) {
8310 rec->valid++;
8312 } else {
8313 rec->device_key_length = 0;
8314 rec->device_key = NULL;
8316 if (*err == NULL && rec->src_string) {
8317 g_free(rec->src);
8318 rec->src_length = compute_ascii_key(&rec->src, rec->src_string, "SRC Address", 2, err);
8319 if (*err == NULL) {
8320 rec->valid++;
8322 } else {
8323 rec->src_length = 0;
8324 rec->src = NULL;
8326 return rec->valid == BTMESH_DEVICE_KEY_ENTRY_VALID;
8329 static void *
8330 uat_btmesh_dev_key_record_copy_cb(void *n, const void *o, size_t siz _U_)
8332 uat_btmesh_dev_key_record_t *new_rec = (uat_btmesh_dev_key_record_t *)n;
8333 const uat_btmesh_dev_key_record_t* old_rec = (const uat_btmesh_dev_key_record_t *)o;
8335 memset(new_rec, 0x00, sizeof(uat_btmesh_dev_key_record_t));
8337 /* Copy UAT fields */
8338 new_rec->device_key_string = g_strdup(old_rec->device_key_string);
8339 new_rec->src_string = g_strdup(old_rec->src_string);
8341 /* Parse key and src as in an update */
8342 char *err = NULL;
8343 uat_btmesh_dev_key_record_update_cb(new_rec, &err);
8344 if (err) {
8345 g_free(err);
8347 return new_rec;
8350 static void
8351 uat_btmesh_dev_key_record_free_cb(void *r)
8353 uat_btmesh_dev_key_record_t *rec = (uat_btmesh_dev_key_record_t *)r;
8355 g_free(rec->device_key_string);
8356 g_free(rec->device_key);
8357 g_free(rec->src_string);
8358 g_free(rec->src);
8361 UAT_CSTRING_CB_DEF(uat_btmesh_dev_key_records, device_key_string, uat_btmesh_dev_key_record_t)
8362 UAT_CSTRING_CB_DEF(uat_btmesh_dev_key_records, src_string, uat_btmesh_dev_key_record_t)
8364 static bool
8365 uat_btmesh_label_uuid_record_update_cb(void *r, char **err)
8367 uat_btmesh_label_uuid_record_t *rec = (uat_btmesh_label_uuid_record_t *)r;
8369 rec->valid = 0;
8371 /* Compute label UUID & lengths */
8372 if (rec->label_uuid_string) {
8373 g_free(rec->label_uuid);
8374 rec->label_uuid_length = compute_ascii_key(&rec->label_uuid, rec->label_uuid_string, "Label UUID", 16, err);
8375 if (*err == NULL && label_uuid_hash(rec)) {
8376 rec->valid++;
8378 } else {
8379 rec->label_uuid_length = 0;
8380 rec->label_uuid = NULL;
8382 return rec->valid == BTMESH_LABEL_UUID_ENTRY_VALID;
8385 static void *
8386 uat_btmesh_label_uuid_record_copy_cb(void *n, const void *o, size_t siz _U_)
8388 uat_btmesh_label_uuid_record_t *new_rec = (uat_btmesh_label_uuid_record_t *)n;
8389 const uat_btmesh_label_uuid_record_t* old_rec = (const uat_btmesh_label_uuid_record_t *)o;
8391 memset(new_rec, 0x00, sizeof(uat_btmesh_label_uuid_record_t));
8393 /* Copy UAT field */
8394 new_rec->label_uuid_string = g_strdup(old_rec->label_uuid_string);
8396 /* Parse Label UUID as in an update */
8397 char *err = NULL;
8398 uat_btmesh_label_uuid_record_update_cb(new_rec, &err);
8399 if (err) {
8400 g_free(err);
8403 return new_rec;
8406 static void
8407 uat_btmesh_label_uuid_record_free_cb(void *r)
8409 uat_btmesh_label_uuid_record_t *rec = (uat_btmesh_label_uuid_record_t *)r;
8411 g_free(rec->label_uuid_string);
8412 g_free(rec->label_uuid);
8415 UAT_CSTRING_CB_DEF(uat_btmesh_label_uuid_records, label_uuid_string, uat_btmesh_label_uuid_record_t)
8417 void
8418 proto_register_btmesh(void)
8420 static hf_register_info hf[] = {
8421 { &hf_btmesh_ivi,
8422 { "IVI", "btmesh.ivi",
8423 FT_UINT8, BASE_DEC, NULL, 0x80,
8424 NULL, HFILL }
8426 { &hf_btmesh_nid,
8427 { "NID", "btmesh.nid",
8428 FT_UINT8, BASE_DEC, NULL, 0x7f,
8429 NULL, HFILL }
8431 { &hf_btmesh_obfuscated,
8432 { "Obfuscated", "btmesh.obfuscated",
8433 FT_BYTES, BASE_NONE, NULL, 0x0,
8434 NULL, HFILL }
8436 { &hf_btmesh_encrypted,
8437 { "Encrypted data and NetMIC", "btmesh.encrypted",
8438 FT_BYTES, BASE_NONE, NULL, 0x0,
8439 NULL, HFILL }
8441 { &hf_btmesh_netmic,
8442 { "NetMIC", "btmesh.netmic",
8443 FT_UINT64, BASE_HEX, NULL, 0x0,
8444 NULL, HFILL }
8446 { &hf_btmesh_ctl,
8447 { "CTL", "btmesh.ctl",
8448 FT_UINT8, BASE_DEC, VALS(btmesh_ctl_vals), 0x80,
8449 NULL, HFILL }
8451 { &hf_btmesh_ttl,
8452 { "TTL", "btmesh.ttl",
8453 FT_UINT8, BASE_DEC, NULL, 0x7f,
8454 NULL, HFILL }
8456 { &hf_btmesh_seq,
8457 { "SEQ", "btmesh.seq",
8458 FT_UINT24, BASE_DEC, NULL, 0x0,
8459 NULL, HFILL }
8461 { &hf_btmesh_src,
8462 { "SRC", "btmesh.src",
8463 FT_UINT16, BASE_DEC, NULL, 0x0,
8464 NULL, HFILL }
8466 { &hf_btmesh_dst,
8467 { "DST", "btmesh.dst",
8468 FT_UINT16, BASE_DEC, NULL, 0x0,
8469 NULL, HFILL }
8471 { &hf_btmesh_transp_pdu,
8472 { "TransportPDU", "btmesh.transp_pdu",
8473 FT_BYTES, BASE_NONE, NULL, 0x0,
8474 NULL, HFILL }
8476 { &hf_btmesh_cntr_seg,
8477 { "SEG", "btmesh.cntr.seg",
8478 FT_UINT8, BASE_DEC, VALS(btmesh_ctrl_seg_vals), 0x80,
8479 NULL, HFILL }
8481 { &hf_btmesh_acc_seg,
8482 { "SEG", "btmesh.acc.seg",
8483 FT_UINT8, BASE_DEC, VALS(btmesh_acc_seg_vals), 0x80,
8484 NULL, HFILL }
8486 { &hf_btmesh_cntr_opcode,
8487 { "Opcode", "btmesh.cntr.opcode",
8488 FT_UINT8, BASE_DEC, VALS(btmesh_ctrl_opcode_vals), 0x7f,
8489 NULL, HFILL }
8491 { &hf_btmesh_acc_akf,
8492 { "AKF", "btmesh.acc.akf",
8493 FT_UINT8, BASE_DEC, VALS(btmesh_acc_akf_vals), 0x40,
8494 NULL, HFILL }
8496 { &hf_btmesh_acc_aid,
8497 { "AID", "btmesh.acc.aid",
8498 FT_UINT8, BASE_DEC, NULL, 0x3f,
8499 NULL, HFILL }
8501 { &hf_btmesh_obo,
8502 { "OBO", "btmesh.obo",
8503 FT_BOOLEAN, 16, TFS(&btmesh_obo), 0x8000,
8504 NULL, HFILL }
8506 { &hf_btmesh_seqzero,
8507 { "SeqZero", "btmesh.seqzero",
8508 FT_UINT16, BASE_DEC, NULL, 0x7ffc,
8509 NULL, HFILL }
8511 { &hf_btmesh_rfu,
8512 { "Reserved for Future Use", "btmesh.rfu",
8513 FT_UINT16, BASE_DEC, NULL, 0x0003,
8514 NULL, HFILL }
8516 { &hf_btmesh_blockack,
8517 { "BlockAck", "btmesh.blockack",
8518 FT_UINT32, BASE_DEC, NULL, 0x0,
8519 NULL, HFILL }
8521 { &hf_btmesh_cntr_criteria_rfu,
8522 { "RFU", "btmesh.cntr.criteria.rfu",
8523 FT_UINT8, BASE_DEC, NULL, 0x80,
8524 NULL, HFILL }
8526 { &hf_btmesh_cntr_padding,
8527 { "Padding", "btmesh.cntr.padding",
8528 FT_UINT8, BASE_DEC, NULL, 0xfe,
8529 NULL, HFILL }
8531 { &hf_btmesh_cntr_fsn,
8532 { "Friend Sequence Number(FSN)", "btmesh.cntr.fsn",
8533 FT_UINT8, BASE_DEC, NULL, 0x01,
8534 NULL, HFILL }
8536 { &hf_btmesh_cntr_key_refresh_flag,
8537 { "Key Refresh Flag", "btmesh.cntr.keyrefreshflag",
8538 FT_UINT8, BASE_DEC, VALS(btmesh_cntr_key_refresh_flag_vals), 0x01,
8539 NULL, HFILL }
8541 { &hf_btmesh_cntr_iv_update_flag,
8542 { "IV Update Flag", "btmesh.cntr.ivupdateflag",
8543 FT_UINT8, BASE_DEC, VALS(btmesh_cntr_iv_update_flag_vals), 0x02,
8544 NULL, HFILL }
8546 { &hf_btmesh_cntr_flags_rfu,
8547 { "IV Update Flag", "btmesh.cntr.flagsrfu",
8548 FT_UINT8, BASE_DEC, NULL, 0xFC,
8549 NULL, HFILL }
8551 { &hf_btmesh_cntr_iv_index,
8552 { "IV Index", "btmesh.cntr.ivindex",
8553 FT_UINT32, BASE_DEC, NULL, 0x0,
8554 NULL, HFILL }
8556 { &hf_btmesh_cntr_md,
8557 { "MD (More Data)", "btmesh.cntr.md",
8558 FT_UINT8, BASE_DEC, VALS(btmesh_cntr_md_vals), 0x0,
8559 NULL, HFILL }
8561 { &hf_btmesh_cntr_criteria_rssifactor,
8562 { "RSSIFactor", "btmesh.cntr.criteria.rssifactor",
8563 FT_UINT8, BASE_DEC, VALS(btmesh_criteria_rssifactor_vals), 0x60,
8564 NULL, HFILL }
8566 { &hf_btmesh_cntr_criteria_receivewindowfactor,
8567 { "ReceiveWindowFactor", "btmesh.cntr.criteria.receivewindowfactor",
8568 FT_UINT8, BASE_DEC, VALS(btmesh_criteria_receivewindowfactor_vals), 0x18,
8569 NULL, HFILL }
8571 { &hf_btmesh_cntr_criteria_minqueuesizelog,
8572 { "MinQueueSizeLog", "btmesh.cntr.criteria.minqueuesizelog",
8573 FT_UINT8, BASE_DEC, VALS(btmesh_criteria_minqueuesizelog_vals), 0x07,
8574 NULL, HFILL }
8576 { &hf_btmesh_cntr_receivedelay,
8577 { "ReceiveDelay", "btmesh.cntr.receivedelay",
8578 FT_UINT8, BASE_DEC, NULL, 0x0,
8579 NULL, HFILL }
8581 { &hf_btmesh_cntr_polltimeout,
8582 { "PollTimeout", "btmesh.cntr.polltimeout",
8583 FT_UINT24, BASE_DEC, NULL, 0x0,
8584 NULL, HFILL }
8586 { &hf_btmesh_cntr_previousaddress,
8587 { "PreviousAddress", "btmesh.cntr.previousaddress",
8588 FT_UINT16, BASE_DEC, NULL, 0x0,
8589 NULL, HFILL }
8591 { &hf_btmesh_cntr_numelements,
8592 { "NumElements", "btmesh.cntr.numelements",
8593 FT_UINT8, BASE_DEC, NULL, 0x0,
8594 NULL, HFILL }
8596 { &hf_btmesh_cntr_lpncounter,
8597 { "LPNCounter", "btmesh.cntr.lpncounter",
8598 FT_UINT8, BASE_DEC, NULL, 0x0,
8599 NULL, HFILL }
8601 { &hf_btmesh_cntr_receivewindow,
8602 { "ReceiveWindow", "btmesh.cntr.receivewindow",
8603 FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
8604 NULL, HFILL }
8606 { &hf_btmesh_cntr_queuesize,
8607 { "QueueSize", "btmesh.cntr.queuesize",
8608 FT_UINT8, BASE_DEC, NULL, 0x0,
8609 NULL, HFILL }
8611 { &hf_btmesh_cntr_subscriptionlistsize,
8612 { "SubscriptionListSize", "btmesh.cntr.subscriptionlistsize",
8613 FT_UINT8, BASE_DEC, NULL, 0x0,
8614 NULL, HFILL }
8616 { &hf_btmesh_cntr_rssi,
8617 { "RSSI", "btmesh.cntr.rssi",
8618 FT_UINT8, BASE_DEC, NULL, 0x0,
8619 NULL, HFILL }
8621 { &hf_btmesh_cntr_friendcounter,
8622 { "FriendCounter", "btmesh.cntr.friendcounter",
8623 FT_UINT16, BASE_DEC, NULL, 0x0,
8624 NULL, HFILL }
8626 { &hf_btmesh_cntr_lpnaddress,
8627 { "LPNAddress", "btmesh.cntr.lpnaddress",
8628 FT_UINT16, BASE_DEC, NULL, 0x0,
8629 NULL, HFILL }
8631 { &hf_btmesh_cntr_transactionnumber,
8632 { "TransactionNumber", "btmesh.cntr.transactionnumber",
8633 FT_UINT8, BASE_DEC, NULL, 0x0,
8634 NULL, HFILL }
8636 { &hf_btmesh_cntr_heartbeat_rfu,
8637 { "Reserved for Future Use", "btmesh.cntr.heartbeatrfu",
8638 FT_UINT8, BASE_DEC, NULL, 0x80,
8639 NULL, HFILL }
8641 { &hf_btmesh_cntr_init_ttl,
8642 { "InitTTL", "btmesh.cntr.initttl",
8643 FT_UINT8, BASE_DEC, NULL, 0x7F,
8644 NULL, HFILL }
8646 { &hf_btmesh_cntr_feature_relay,
8647 { "Relay feature in use", "btmesh.cntr.feature.relay",
8648 FT_BOOLEAN, 16, NULL, 0x0001,
8649 NULL, HFILL }
8651 { &hf_btmesh_cntr_feature_proxy,
8652 { "Proxy feature in use", "btmesh.cntr.feature.proxy",
8653 FT_BOOLEAN, 16, NULL, 0x0002,
8654 NULL, HFILL }
8656 { &hf_btmesh_cntr_feature_friend,
8657 { "Friend feature in use", "btmesh.cntr.feature.friend",
8658 FT_BOOLEAN, 16, NULL, 0x0004,
8659 NULL, HFILL }
8661 { &hf_btmesh_cntr_feature_low_power,
8662 { "Low Power feature in use", "btmesh.cntr.feature.lowpower",
8663 FT_BOOLEAN, 16, NULL, 0x0008,
8664 NULL, HFILL }
8666 { &hf_btmesh_cntr_feature_rfu,
8667 { "Reserved for Future Use", "btmesh.cntr.feature.rfu",
8668 FT_UINT16, BASE_DEC, NULL, 0xfff0,
8669 NULL, HFILL }
8671 { &hf_btmesh_cntr_unknown_payload,
8672 { "Unknown Control Message payload", "btmesh.cntr.unknownpayload",
8673 FT_BYTES, BASE_NONE, NULL, 0x0,
8674 NULL, HFILL }
8676 { &hf_btmesh_enc_access_pld,
8677 { "Encrypted Access Payload", "btmesh.enc_access_pld",
8678 FT_BYTES, BASE_NONE, NULL, 0x0,
8679 NULL, HFILL }
8681 { &hf_btmesh_transtmic,
8682 { "TransMIC", "btmesh.transtmic",
8683 FT_BYTES, BASE_NONE, NULL, 0x0,
8684 NULL, HFILL }
8686 { &hf_btmesh_szmic,
8687 { "SZMIC", "btmesh.szmic",
8688 FT_UINT24, BASE_DEC, VALS(btmesh_szmic_vals), 0x800000,
8689 NULL, HFILL }
8691 { &hf_btmesh_seqzero_data,
8692 { "SeqZero", "btmesh.seqzero_data",
8693 FT_UINT24, BASE_DEC, NULL, 0x7ffc00,
8694 NULL, HFILL }
8696 { &hf_btmesh_sego,
8697 { "Segment Offset number(SegO)", "btmesh.sego",
8698 FT_UINT24, BASE_DEC, NULL, 0x0003e0,
8699 NULL, HFILL }
8701 { &hf_btmesh_segn,
8702 { "Last Segment number(SegN)", "btmesh.segn",
8703 FT_UINT24, BASE_DEC, NULL, 0x00001f,
8704 NULL, HFILL }
8706 { &hf_btmesh_seg_rfu,
8707 { "RFU", "btmesh.seg.rfu",
8708 FT_UINT24, BASE_DEC, NULL, 0x800000,
8709 NULL, HFILL }
8711 { &hf_btmesh_segment,
8712 { "Segment", "btmesh.segment",
8713 FT_BYTES, BASE_NONE, NULL, 0x0,
8714 NULL, HFILL }
8716 /* Access Message Reassembly */
8717 { &hf_btmesh_segmented_access_fragments,
8718 { "Reassembled Segmented Access Message Fragments", "btmesh.segmented.access.fragments",
8719 FT_NONE, BASE_NONE, NULL, 0x0,
8720 NULL, HFILL }
8722 { &hf_btmesh_segmented_access_fragment,
8723 { "Segmented Access Message Fragment", "btmesh.segmented.access.fragment",
8724 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8725 NULL, HFILL }
8727 { &hf_btmesh_segmented_access_fragment_overlap,
8728 { "Fragment overlap", "btmesh.segmented.access.fragment.overlap",
8729 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8730 "Fragment overlaps with other fragments", HFILL }
8732 { &hf_btmesh_segmented_access_fragment_overlap_conflict,
8733 { "Conflicting data in fragment overlap", "btmesh.segmented.access.fragment.overlap.conflict",
8734 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8735 "Overlapping fragments contained conflicting data", HFILL }
8737 { &hf_btmesh_segmented_access_fragment_multiple_tails,
8738 { "Multiple tail fragments found", "btmesh.segmented.access.fragment.multipletails",
8739 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8740 "Several tails were found when defragmenting the packet", HFILL }
8742 { &hf_btmesh_segmented_access_fragment_too_long_fragment,
8743 { "Fragment too long", "btmesh.segmented.access.fragment.toolongfragment",
8744 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8745 "Fragment contained data past end of packet", HFILL }
8747 { &hf_btmesh_segmented_access_fragment_error,
8748 { "Defragmentation error", "btmesh.segmented.access.fragment.error",
8749 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8750 "Defragmentation error due to illegal fragments", HFILL }
8752 { &hf_btmesh_segmented_access_fragment_count,
8753 { "Fragment count", "btmesh.segmented.access.fragment.count",
8754 FT_UINT32, BASE_DEC, NULL, 0x0,
8755 NULL, HFILL }
8757 { &hf_btmesh_segmented_access_reassembled_length,
8758 { "Reassembled Segmented Access Message length", "btmesh.segmented.access.reassembled.length",
8759 FT_UINT32, BASE_DEC, NULL, 0x0,
8760 "The total length of the reassembled payload", HFILL }
8762 /* Control Message Reassembly */
8763 { &hf_btmesh_segmented_control_fragments,
8764 { "Reassembled Segmented Control Message Fragments", "btmesh.segmented.control.fragments",
8765 FT_NONE, BASE_NONE, NULL, 0x0,
8766 "Segmented Access Message Fragments", HFILL }
8768 { &hf_btmesh_segmented_control_fragment,
8769 { "Segmented Control Message Fragment", "btmesh.segmented.control.fragment",
8770 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8771 NULL, HFILL }
8773 { &hf_btmesh_segmented_control_fragment_overlap,
8774 { "Fragment overlap", "btmesh.segmented.control.fragment.overlap",
8775 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8776 "Fragment overlaps with other fragments", HFILL }
8778 { &hf_btmesh_segmented_control_fragment_overlap_conflict,
8779 { "Conflicting data in fragment overlap", "btmesh.segmented.control.fragment.overlap.conflict",
8780 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8781 "Overlapping fragments contained conflicting data", HFILL }
8783 { &hf_btmesh_segmented_control_fragment_multiple_tails,
8784 { "Multiple tail fragments found", "btmesh.segmented.control.fragment.multipletails",
8785 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8786 "Several tails were found when defragmenting the packet", HFILL }
8788 { &hf_btmesh_segmented_control_fragment_too_long_fragment,
8789 { "Fragment too long", "btmesh.segmented.control.fragment.toolongfragment",
8790 FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8791 "Fragment contained data past end of packet", HFILL }
8793 { &hf_btmesh_segmented_control_fragment_error,
8794 { "Defragmentation error", "btmesh.segmented.control.fragment.error",
8795 FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8796 "Defragmentation error due to illegal fragments", HFILL }
8798 { &hf_btmesh_segmented_control_fragment_count,
8799 { "Fragment count", "btmesh.segmented.control.fragment.count",
8800 FT_UINT32, BASE_DEC, NULL, 0x0,
8801 NULL, HFILL }
8803 { &hf_btmesh_segmented_control_reassembled_length,
8804 { "Reassembled Segmented Control Message length", "btmesh.segmented.control.reassembled.length",
8805 FT_UINT32, BASE_DEC, NULL, 0x0,
8806 "The total length of the reassembled payload", HFILL }
8808 { &hf_btmesh_decrypted_access,
8809 { "Decrypted Access", "btmesh.access.decrypted",
8810 FT_BYTES, BASE_NONE, NULL, 0x0,
8811 NULL, HFILL }
8813 { &hf_btmesh_model_layer_vendor_opcode,
8814 { "Opcode", "btmesh.model.vendor.opcode",
8815 FT_UINT8, BASE_DEC, NULL, 0x3f,
8816 NULL, HFILL }
8818 { &hf_btmesh_model_layer_vendor,
8819 { "Company ID", "btmesh.model.vendor",
8820 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
8821 NULL, HFILL }
8823 { &hf_btmesh_model_layer_opcode,
8824 { "Opcode", "btmesh.model.opcode",
8825 FT_UINT16, BASE_HEX, VALS(btmesh_models_opcode_vals), 0x0,
8826 NULL, HFILL }
8828 { &hf_btmesh_model_layer_parameters,
8829 { "Parameters", "btmesh.model.parameters",
8830 FT_BYTES, BASE_NONE, NULL, 0x0,
8831 NULL, HFILL }
8833 /* Config Model opcodes parameters */
8834 { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex,
8835 { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex",
8836 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
8837 NULL, HFILL }
8839 { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net,
8840 { "NetKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex.net",
8841 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
8842 NULL, HFILL }
8844 { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app,
8845 { "AppKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex.app",
8846 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
8847 NULL, HFILL }
8849 { &hf_btmesh_config_appkey_add_appkey,
8850 { "AppKey", "btmesh.model.config_appkey_add.appkey",
8851 FT_BYTES, BASE_NONE, NULL, 0x0,
8852 NULL, HFILL }
8854 { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex,
8855 { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex",
8856 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
8857 NULL, HFILL }
8859 { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net,
8860 { "NetKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex.net",
8861 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
8862 NULL, HFILL }
8864 { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app,
8865 { "AppKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex.app",
8866 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
8867 NULL, HFILL }
8869 { &hf_btmesh_config_appkey_update_appkey,
8870 { "AppKey", "btmesh.model.config_appkey_update.appkey",
8871 FT_BYTES, BASE_NONE, NULL, 0x0,
8872 NULL, HFILL }
8874 { &hf_btmesh_config_composition_data_status_page,
8875 { "Page", "btmesh.model.config_composition_data_status.page",
8876 FT_UINT8, BASE_HEX, NULL, 0x0,
8877 NULL, HFILL }
8879 { &hf_btmesh_config_composition_data_status_cid,
8880 { "CID", "btmesh.model.config_composition_data_status.cid",
8881 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
8882 NULL, HFILL }
8884 { &hf_btmesh_config_composition_data_status_pid,
8885 { "PID", "btmesh.model.config_composition_data_status.pid",
8886 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8887 NULL, HFILL }
8889 { &hf_btmesh_config_composition_data_status_vid,
8890 { "VID", "btmesh.model.config_composition_data_status.vid",
8891 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8892 NULL, HFILL }
8894 { &hf_btmesh_config_composition_data_status_crpl,
8895 { "CRPL", "btmesh.model.config_composition_data_status.crpl",
8896 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8897 NULL, HFILL }
8899 { &hf_btmesh_config_composition_data_status_features_relay,
8900 { "Relay feature", "btmesh.model.config_composition_data_status.features.relay",
8901 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8902 NULL, HFILL }
8904 { &hf_btmesh_config_composition_data_status_features_proxy,
8905 { "Proxy feature", "btmesh.model.config_composition_data_status.features.proxy",
8906 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8907 NULL, HFILL }
8909 { &hf_btmesh_config_composition_data_status_features_friend,
8910 { "Friend feature", "btmesh.model.config_composition_data_status.features.friend",
8911 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8912 NULL, HFILL }
8914 { &hf_btmesh_config_composition_data_status_features_low_power,
8915 { "Low Power feature", "btmesh.model.config_composition_data_status.features.low_power",
8916 FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8917 NULL, HFILL }
8919 { &hf_btmesh_config_composition_data_status_features_rfu,
8920 { "RFU", "btmesh.model.config_composition_data_status.features.rfu",
8921 FT_UINT16, BASE_HEX, NULL, 0xFFF0,
8922 NULL, HFILL }
8924 { &hf_btmesh_config_composition_data_status_features,
8925 { "Features", "btmesh.model.config_composition_data_status.features",
8926 FT_UINT16, BASE_HEX, NULL, 0x0,
8927 NULL, HFILL }
8929 { &hf_btmesh_config_composition_data_status_loc,
8930 { "Loc", "btmesh.model.config_composition_data_status.loc",
8931 FT_UINT16, BASE_HEX, VALS(characteristic_presentation_namespace_description_btsig_vals), 0x0,
8932 NULL, HFILL }
8934 { &hf_btmesh_config_composition_data_status_nums,
8935 { "NumS", "btmesh.model.config_composition_data_status.nums",
8936 FT_UINT8, BASE_DEC, NULL, 0x0,
8937 NULL, HFILL }
8939 { &hf_btmesh_config_composition_data_status_numv,
8940 { "NumV", "btmesh.model.config_composition_data_status.numv",
8941 FT_UINT8, BASE_DEC, NULL, 0x0,
8942 NULL, HFILL }
8944 { &hf_btmesh_config_composition_data_status_sig_model,
8945 { "SIG Model", "btmesh.model.config_composition_data_status.sig_model",
8946 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
8947 NULL, HFILL }
8949 { &hf_btmesh_config_composition_data_status_vendor_model,
8950 { "Vendor Model", "btmesh.model.config_composition_data_status.vendor_model",
8951 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
8952 NULL, HFILL }
8954 { &hf_btmesh_config_model_publication_set_elementaddress,
8955 { "ElementAddress", "btmesh.model.config_model_publication_set.elementaddress",
8956 FT_UINT16, BASE_HEX, NULL, 0x0,
8957 NULL, HFILL }
8959 { &hf_btmesh_config_model_publication_set_publishaddress,
8960 { "PublishAddress", "btmesh.model.config_model_publication_set.publishaddress",
8961 FT_UINT16, BASE_HEX, NULL, 0x0,
8962 NULL, HFILL }
8964 { &hf_btmesh_config_model_publication_set_appkey,
8965 { "AppKeyIndex", "btmesh.model.config_model_publication_set.appkey",
8966 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
8967 NULL, HFILL }
8969 { &hf_btmesh_config_model_publication_set_appkeyindex,
8970 { "AppKeyIndex", "btmesh.model.config_model_publication_set.appkeyindex",
8971 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
8972 NULL, HFILL }
8974 { &hf_btmesh_config_model_publication_set_credentialflag,
8975 { "CredentialFlag", "btmesh.model.config_model_publication_set.credentialflag",
8976 FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
8977 NULL, HFILL }
8979 { &hf_btmesh_config_model_publication_set_rfu,
8980 { "RFU", "btmesh.model.config_model_publication_set.rfu",
8981 FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0xE000,
8982 NULL, HFILL }
8984 { &hf_btmesh_config_model_publication_set_publishttl,
8985 { "PublishTTL", "btmesh.model.config_model_publication_set.publishttl",
8986 FT_UINT8, BASE_DEC, NULL, 0x0,
8987 NULL, HFILL }
8989 { &hf_btmesh_config_model_publication_set_publishperiod,
8990 { "PublishPeriod", "btmesh.model.config_model_publication_set.publishperiod",
8991 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
8992 NULL, HFILL }
8994 { &hf_btmesh_config_model_publication_set_publishperiod_resolution,
8995 { "Step Resolution", "btmesh.model.config_model_publication_set.publishperiod.resolution",
8996 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
8997 NULL, HFILL }
8999 { &hf_btmesh_config_model_publication_set_publishperiod_steps,
9000 { "Number of Steps", "btmesh.model.config_model_publication_set.publishperiod.steps",
9001 FT_UINT8, BASE_DEC, NULL, 0x3F,
9002 NULL, HFILL }
9004 { &hf_btmesh_config_model_publication_set_publishretransmit,
9005 { "PublishRetransmit", "btmesh.model.config_model_publication_set.publishretransmit",
9006 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9007 NULL, HFILL }
9009 { &hf_btmesh_config_model_publication_set_publishretransmit_count,
9010 { "PublishRetransmitCount", "btmesh.model.config_model_publication_set.publishretransmit.count",
9011 FT_UINT8, BASE_DEC, NULL, 0x07,
9012 NULL, HFILL }
9014 { &hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps,
9015 { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_set.publishretransmit.intervalsteps",
9016 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9017 NULL, HFILL }
9019 { &hf_btmesh_config_model_publication_set_modelidentifier,
9020 { "ModelIdentifier", "btmesh.model.config_model_publication_set.modelidentifier",
9021 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9022 NULL, HFILL }
9024 { &hf_btmesh_config_model_publication_set_vendormodelidentifier,
9025 { "ModelIdentifier", "btmesh.model.config_model_publication_set.vendormodelidentifier",
9026 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9027 NULL, HFILL }
9029 { &hf_btmesh_health_current_status_test_id,
9030 { "Test ID", "btmesh.model.health_current_status.test_id",
9031 FT_UINT8, BASE_HEX, NULL, 0x0,
9032 NULL, HFILL }
9034 { &hf_btmesh_health_current_status_company_id,
9035 { "Company ID", "btmesh.model.health_current_status.company_id",
9036 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9037 NULL, HFILL }
9039 { &hf_btmesh_health_current_status_fault,
9040 { "Fault", "btmesh.model.health_current_status.fault",
9041 FT_UINT8, BASE_DEC, VALS(btmesh_fault_array_vals), 0x0,
9042 NULL, HFILL }
9044 { &hf_btmesh_health_fault_status_test_id,
9045 { "Test ID", "btmesh.model.health_fault_status.test_id",
9046 FT_UINT8, BASE_HEX, NULL, 0x0,
9047 NULL, HFILL }
9049 { &hf_btmesh_health_fault_status_company_id,
9050 { "Company ID", "btmesh.model.health_fault_status.company_id",
9051 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9052 NULL, HFILL }
9054 { &hf_btmesh_health_fault_status_fault,
9055 { "Fault", "btmesh.model.health_fault_status.fault",
9056 FT_UINT8, BASE_DEC, VALS(btmesh_fault_array_vals), 0x0,
9057 NULL, HFILL }
9059 { &hf_btmesh_config_heartbeat_publication_status_status,
9060 { "Status", "btmesh.model.config_heartbeat_publication_status.status",
9061 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9062 NULL, HFILL }
9064 { &hf_btmesh_config_heartbeat_publication_status_destination,
9065 { "Destination", "btmesh.model.config_heartbeat_publication_status.destination",
9066 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9067 NULL, HFILL }
9069 { &hf_btmesh_config_heartbeat_publication_status_countlog,
9070 { "CountLog", "btmesh.model.config_heartbeat_publication_status.countlog",
9071 FT_UINT8, BASE_HEX, NULL, 0x0,
9072 NULL, HFILL }
9074 { &hf_btmesh_config_heartbeat_publication_status_periodlog,
9075 { "PeriodLog", "btmesh.model.config_heartbeat_publication_status.periodlog",
9076 FT_UINT8, BASE_HEX, NULL, 0x0,
9077 NULL, HFILL }
9079 { &hf_btmesh_config_heartbeat_publication_status_ttl,
9080 { "TTL", "btmesh.model.config_heartbeat_publication_status.ttl",
9081 FT_UINT8, BASE_DEC, NULL, 0x0,
9082 NULL, HFILL }
9084 { &hf_btmesh_config_heartbeat_publication_status_features_relay,
9085 { "Relay feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.relay",
9086 FT_BOOLEAN, 16, NULL, 0x0001,
9087 NULL, HFILL }
9089 { &hf_btmesh_config_heartbeat_publication_status_features_proxy,
9090 { "Proxy feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.proxy",
9091 FT_BOOLEAN, 16, NULL, 0x0002,
9092 NULL, HFILL }
9094 { &hf_btmesh_config_heartbeat_publication_status_features_friend,
9095 { "Friend feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.friend",
9096 FT_BOOLEAN, 16, NULL, 0x0004,
9097 NULL, HFILL }
9099 { &hf_btmesh_config_heartbeat_publication_status_features_low_power,
9100 { "Low Power feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.low_power",
9101 FT_BOOLEAN, 16, NULL, 0x0008,
9102 NULL, HFILL }
9104 { &hf_btmesh_config_heartbeat_publication_status_features_rfu,
9105 { "RFU", "btmesh.model.config_heartbeat_publication_status.features.rfu",
9106 FT_UINT16, BASE_HEX, NULL, 0xFFF0,
9107 NULL, HFILL }
9109 { &hf_btmesh_config_heartbeat_publication_status_features,
9110 { "Features", "btmesh.model.config_heartbeat_publication_status.features",
9111 FT_UINT16, BASE_HEX, NULL, 0x0,
9112 NULL, HFILL }
9114 { &hf_btmesh_config_heartbeat_publication_status_netkeyindex,
9115 { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_status.netkeyindex",
9116 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9117 NULL, HFILL }
9119 { &hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx,
9120 { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_status.netkeyindex.idx",
9121 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9122 NULL, HFILL }
9124 { &hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu,
9125 { "RFU", "btmesh.model.config_heartbeat_publication_status.netkeyindex.rfu",
9126 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9127 NULL, HFILL }
9129 { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex,
9130 { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex",
9131 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
9132 NULL, HFILL }
9134 { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net,
9135 { "NetKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex.net",
9136 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
9137 NULL, HFILL }
9139 { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app,
9140 { "AppKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex.app",
9141 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
9142 NULL, HFILL }
9144 { &hf_btmesh_config_appkey_get_netkeyindex,
9145 { "NetKeyIndex", "btmesh.model.config_appkey_get.netkeyindex",
9146 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9147 NULL, HFILL }
9149 { &hf_btmesh_config_appkey_get_netkeyindex_idx,
9150 { "NetKeyIndex", "btmesh.model.config_appkey_get.netkeyindex.idx",
9151 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9152 NULL, HFILL }
9154 { &hf_btmesh_config_appkey_get_netkeyindex_rfu,
9155 { "RFU", "btmesh.model.config_appkey_get.netkeyindex.rfu",
9156 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9157 NULL, HFILL }
9159 { &hf_btmesh_config_appkey_list_status,
9160 { "Status", "btmesh.model.config_appkey_list.status",
9161 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9162 NULL, HFILL }
9164 { &hf_btmesh_config_appkey_list_netkeyindex,
9165 { "NetKeyIndex", "btmesh.model.config_appkey_list.netkeyindex",
9166 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9167 NULL, HFILL }
9169 { &hf_btmesh_config_appkey_list_netkeyindex_idx,
9170 { "NetKeyIndex", "btmesh.model.config_appkey_list.netkeyindex.idx",
9171 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9172 NULL, HFILL }
9174 { &hf_btmesh_config_appkey_list_netkeyindex_rfu,
9175 { "RFU", "btmesh.model.config_appkey_list.netkeyindex.rfu",
9176 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9177 NULL, HFILL }
9179 { &hf_btmesh_config_appkey_list_appkeyindex,
9180 { "AppKeyIndex", "btmesh.model.config_appkey_list.appkeyindex",
9181 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9182 NULL, HFILL }
9184 { &hf_btmesh_config_appkey_list_appkeyindex_rfu,
9185 { "RFU", "btmesh.model.config_appkey_list.appkeyindex.rfu",
9186 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
9187 NULL, HFILL }
9189 { &hf_btmesh_config_appkey_status_status,
9190 { "Status", "btmesh.model.config_appkey_status.status",
9191 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9192 NULL, HFILL }
9194 { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex,
9195 { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex",
9196 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
9197 NULL, HFILL }
9199 { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net,
9200 { "NetKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex.net",
9201 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
9202 NULL, HFILL }
9204 { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app,
9205 { "AppKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex.app",
9206 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
9207 NULL, HFILL }
9209 { &hf_btmesh_health_attention_set_attention,
9210 { "Attention", "btmesh.model.health_attention_set.attention",
9211 FT_UINT8, BASE_DEC, NULL, 0x0,
9212 NULL, HFILL }
9214 { &hf_btmesh_health_attention_set_unacknowledged_attention,
9215 { "Attention", "btmesh.model.health_attention_set_unacknowledged.attention",
9216 FT_UINT8, BASE_DEC, NULL, 0x0,
9217 NULL, HFILL }
9219 { &hf_btmesh_health_attention_status_attention,
9220 { "Attention", "btmesh.model.health_attention_status.attention",
9221 FT_UINT8, BASE_DEC, NULL, 0x0,
9222 NULL, HFILL }
9224 { &hf_btmesh_config_composition_data_get_page,
9225 { "Page", "btmesh.model.config_composition_data_get.page",
9226 FT_UINT8, BASE_HEX, NULL, 0x0,
9227 NULL, HFILL }
9229 { &hf_btmesh_config_beacon_set_beacon,
9230 { "Beacon", "btmesh.model.config_beacon_set.beacon",
9231 FT_UINT8, BASE_DEC, VALS(btmesh_beacon_broadcast_vals), 0x0,
9232 NULL, HFILL }
9234 { &hf_btmesh_config_beacon_status_beacon,
9235 { "Beacon", "btmesh.model.config_beacon_status.beacon",
9236 FT_UINT8, BASE_DEC, VALS(btmesh_beacon_broadcast_vals), 0x0,
9237 NULL, HFILL }
9239 { &hf_btmesh_config_default_ttl_set_ttl,
9240 { "TTL", "btmesh.model.config_default_ttl_set.ttl",
9241 FT_UINT8, BASE_DEC, NULL, 0x0,
9242 NULL, HFILL }
9244 { &hf_btmesh_config_default_ttl_status_ttl,
9245 { "TTL", "btmesh.model.config_default_ttl_status.ttl",
9246 FT_UINT8, BASE_DEC, NULL, 0x0,
9247 NULL, HFILL }
9249 { &hf_btmesh_config_friend_set_friend,
9250 { "Friend", "btmesh.model.config_friend_set.friend",
9251 FT_UINT8, BASE_DEC, VALS(btmesh_friend_vals), 0x0,
9252 NULL, HFILL }
9254 { &hf_btmesh_config_friend_status_friend,
9255 { "Friend", "btmesh.model.config_friend_status.friend",
9256 FT_UINT8, BASE_DEC, VALS(btmesh_friend_vals), 0x0,
9257 NULL, HFILL }
9259 { &hf_btmesh_config_gatt_proxy_set_gattproxy,
9260 { "GATTProxy", "btmesh.model.config_gatt_proxy_set.gattproxy",
9261 FT_UINT8, BASE_HEX, VALS(btmesh_gatt_proxy_vals), 0x0,
9262 NULL, HFILL }
9264 { &hf_btmesh_config_gatt_proxy_status_gattproxy,
9265 { "GATTProxy", "btmesh.model.config_gatt_proxy_status.gattproxy",
9266 FT_UINT8, BASE_HEX, VALS(btmesh_gatt_proxy_vals), 0x0,
9267 NULL, HFILL }
9269 { &hf_btmesh_config_key_refresh_phase_get_netkeyindex,
9270 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_get.netkeyindex",
9271 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9272 NULL, HFILL }
9274 { &hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx,
9275 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_get.netkeyindex.idx",
9276 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9277 NULL, HFILL }
9279 { &hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu,
9280 { "RFU", "btmesh.model.config_key_refresh_phase_get.netkeyindex.rfu",
9281 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9282 NULL, HFILL }
9284 { &hf_btmesh_config_key_refresh_phase_set_netkeyindex,
9285 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_set.netkeyindex",
9286 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9287 NULL, HFILL }
9289 { &hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx,
9290 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_set.netkeyindex.idx",
9291 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9292 NULL, HFILL }
9294 { &hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu,
9295 { "RFU", "btmesh.model.config_key_refresh_phase_set.netkeyindex.rfu",
9296 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9297 NULL, HFILL }
9299 { &hf_btmesh_config_key_refresh_phase_set_transition,
9300 { "Transition", "btmesh.model.config_key_refresh_phase_set.transition",
9301 FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(btmesh_transition_vals), 0x0,
9302 NULL, HFILL }
9304 { &hf_btmesh_config_key_refresh_phase_status_status,
9305 { "Status", "btmesh.model.config_key_refresh_phase_status.status",
9306 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9307 NULL, HFILL }
9309 { &hf_btmesh_config_key_refresh_phase_status_netkeyindex,
9310 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_status.netkeyindex",
9311 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9312 NULL, HFILL }
9314 { &hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx,
9315 { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_status.netkeyindex.idx",
9316 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9317 NULL, HFILL }
9319 { &hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu,
9320 { "RFU", "btmesh.model.config_key_refresh_phase_status.netkeyindex.rfu",
9321 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9322 NULL, HFILL }
9324 { &hf_btmesh_config_key_refresh_phase_status_phase,
9325 { "Phase", "btmesh.model.config_key_refresh_phase_status.phase",
9326 FT_UINT8, BASE_DEC, VALS(btmesh_phase_vals), 0x0,
9327 NULL, HFILL }
9329 { &hf_btmesh_config_model_publication_get_elementaddress,
9330 { "ElementAddress", "btmesh.model.config_model_publication_get.elementaddress",
9331 FT_UINT16, BASE_HEX, NULL, 0x0,
9332 NULL, HFILL }
9334 { &hf_btmesh_config_model_publication_get_modelidentifier,
9335 { "ModelIdentifier", "btmesh.model.config_model_publication_get.modelidentifier",
9336 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9337 NULL, HFILL }
9339 { &hf_btmesh_config_model_publication_get_vendormodelidentifier,
9340 { "ModelIdentifier", "btmesh.model.config_model_publication_get.vendormodelidentifier",
9341 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9342 NULL, HFILL }
9344 { &hf_btmesh_config_model_publication_status_status,
9345 { "Status", "btmesh.model.config_model_publication_status.status",
9346 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9347 NULL, HFILL }
9349 { &hf_btmesh_config_model_publication_status_elementaddress,
9350 { "ElementAddress", "btmesh.model.config_model_publication_status.elementaddress",
9351 FT_UINT16, BASE_HEX, NULL, 0x0,
9352 NULL, HFILL }
9354 { &hf_btmesh_config_model_publication_status_publishaddress,
9355 { "PublishAddress", "btmesh.model.config_model_publication_status.publishaddress",
9356 FT_UINT16, BASE_HEX, NULL, 0x0,
9357 NULL, HFILL }
9359 { &hf_btmesh_config_model_publication_status_appkey,
9360 { "AppKeyIndex", "btmesh.model.config_model_publication_status.appkey",
9361 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
9362 NULL, HFILL }
9364 { &hf_btmesh_config_model_publication_status_appkeyindex,
9365 { "AppKeyIndex", "btmesh.model.config_model_publication_status.appkeyindex",
9366 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9367 NULL, HFILL }
9369 { &hf_btmesh_config_model_publication_status_credentialflag,
9370 { "CredentialFlag", "btmesh.model.config_model_publication_status.credentialflag",
9371 FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
9372 NULL, HFILL }
9374 { &hf_btmesh_config_model_publication_status_rfu,
9375 { "RFU", "btmesh.model.config_model_publication_status.rfu",
9376 FT_UINT16, BASE_HEX, NULL, 0xE000,
9377 NULL, HFILL }
9379 { &hf_btmesh_config_model_publication_status_publishttl,
9380 { "PublishTTL", "btmesh.model.config_model_publication_status.publishttl",
9381 FT_UINT8, BASE_DEC, NULL, 0x0,
9382 NULL, HFILL }
9384 { &hf_btmesh_config_model_publication_status_publishperiod,
9385 { "PublishPeriod", "btmesh.model.config_model_publication_status.publishperiod",
9386 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
9387 NULL, HFILL }
9389 { &hf_btmesh_config_model_publication_status_publishperiod_resolution,
9390 { "Step Resolution", "btmesh.model.config_model_publication_status.publishperiod.resolution",
9391 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
9392 NULL, HFILL }
9394 { &hf_btmesh_config_model_publication_status_publishperiod_steps,
9395 { "Number of Steps", "btmesh.model.config_model_publication_status.publishperiod.steps",
9396 FT_UINT8, BASE_DEC, NULL, 0x3F,
9397 NULL, HFILL }
9399 { &hf_btmesh_config_model_publication_status_publishretransmit,
9400 { "PublishRetransmit", "btmesh.model.config_model_publication_status.publishretransmit",
9401 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9402 NULL, HFILL }
9404 { &hf_btmesh_config_model_publication_status_publishretransmit_count,
9405 { "PublishRetransmitCount", "btmesh.model.config_model_publication_status.publishretransmit.count",
9406 FT_UINT8, BASE_DEC, NULL, 0x07,
9407 NULL, HFILL }
9409 { &hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps,
9410 { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_status.publishretransmit.intervalsteps",
9411 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9412 NULL, HFILL }
9414 { &hf_btmesh_config_model_publication_status_modelidentifier,
9415 { "ModelIdentifier", "btmesh.model.config_model_publication_status.modelidentifier",
9416 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9417 NULL, HFILL }
9419 { &hf_btmesh_config_model_publication_status_vendormodelidentifier,
9420 { "ModelIdentifier", "btmesh.model.config_model_publication_status.vendormodelidentifier",
9421 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9422 NULL, HFILL }
9424 { &hf_btmesh_config_model_publication_virtual_address_set_elementaddress,
9425 { "ElementAddress", "btmesh.model.config_model_publication_virtual_address_set.elementaddress",
9426 FT_UINT16, BASE_HEX, NULL, 0x0,
9427 NULL, HFILL }
9429 { &hf_btmesh_config_model_publication_virtual_address_set_publishaddress,
9430 { "PublishAddress", "btmesh.model.config_model_publication_virtual_address_set.publishaddress",
9431 FT_BYTES, BASE_NONE, NULL, 0x0,
9432 NULL, HFILL }
9434 { &hf_btmesh_config_model_publication_virtual_address_set_appkey,
9435 { "AppKeyIndex", "btmesh.model.config_model_publication_virtual_address_set.appkey",
9436 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
9437 NULL, HFILL }
9439 { &hf_btmesh_config_model_publication_virtual_address_set_appkeyindex,
9440 { "AppKeyIndex", "btmesh.model.config_model_publication_virtual_address_set.appkeyindex",
9441 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9442 NULL, HFILL }
9444 { &hf_btmesh_config_model_publication_virtual_address_set_credentialflag,
9445 { "CredentialFlag", "btmesh.model.config_model_publication_virtual_address_set.credentialflag",
9446 FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
9447 NULL, HFILL }
9449 { &hf_btmesh_config_model_publication_virtual_address_set_rfu,
9450 { "RFU", "btmesh.model.config_model_publication_virtual_address_set.rfu",
9451 FT_UINT16, BASE_HEX, NULL, 0xE000,
9452 NULL, HFILL }
9454 { &hf_btmesh_config_model_publication_virtual_address_set_publishttl,
9455 { "PublishTTL", "btmesh.model.config_model_publication_virtual_address_set.publishttl",
9456 FT_UINT8, BASE_DEC, NULL, 0x0,
9457 NULL, HFILL }
9459 { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod,
9460 { "PublishPeriod", "btmesh.model.config_model_publication_virtual_address_set.publishperiod",
9461 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
9462 NULL, HFILL }
9464 { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution,
9465 { "Step Resolution", "btmesh.model.config_model_publication_virtual_address_set.publishperiod.resolution",
9466 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
9467 NULL, HFILL }
9469 { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps,
9470 { "Number of Steps", "btmesh.model.config_model_publication_virtual_address_set.publishperiod.steps",
9471 FT_UINT8, BASE_DEC, NULL, 0x3F,
9472 NULL, HFILL }
9474 { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit,
9475 { "PublishRetransmit", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit",
9476 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9477 NULL, HFILL }
9479 { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count,
9480 { "PublishRetransmitCount", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit.count",
9481 FT_UINT8, BASE_DEC, NULL, 0x07,
9482 NULL, HFILL }
9484 { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps,
9485 { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit.intervalsteps",
9486 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9487 NULL, HFILL }
9489 { &hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier,
9490 { "ModelIdentifier", "btmesh.model.config_model_publication_virtual_address_set.vendormodelidentifier",
9491 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9492 NULL, HFILL }
9494 { &hf_btmesh_config_model_publication_virtual_address_set_modelidentifier,
9495 { "ModelIdentifier", "btmesh.model.config_model_publication_virtual_address_set.modelidentifier",
9496 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9497 NULL, HFILL }
9499 { &hf_btmesh_config_model_subscription_add_elementaddress,
9500 { "ElementAddress", "btmesh.model.config_model_subscription_add.elementaddress",
9501 FT_UINT16, BASE_HEX, NULL, 0x0,
9502 NULL, HFILL }
9504 { &hf_btmesh_config_model_subscription_add_address,
9505 { "Address", "btmesh.model.config_model_subscription_add.address",
9506 FT_UINT16, BASE_HEX, NULL, 0x0,
9507 NULL, HFILL }
9509 { &hf_btmesh_config_model_subscription_add_modelidentifier,
9510 { "ModelIdentifier", "btmesh.model.config_model_subscription_add.modelidentifier",
9511 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9512 NULL, HFILL }
9514 { &hf_btmesh_config_model_subscription_add_vendormodelidentifier,
9515 { "ModelIdentifier", "btmesh.model.config_model_subscription_add.vendormodelidentifier",
9516 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9517 NULL, HFILL }
9519 { &hf_btmesh_config_model_subscription_delete_elementaddress,
9520 { "ElementAddress", "btmesh.model.config_model_subscription_delete.elementaddress",
9521 FT_UINT16, BASE_HEX, NULL, 0x0,
9522 NULL, HFILL }
9524 { &hf_btmesh_config_model_subscription_delete_address,
9525 { "Address", "btmesh.model.config_model_subscription_delete.address",
9526 FT_UINT16, BASE_HEX, NULL, 0x0,
9527 NULL, HFILL }
9529 { &hf_btmesh_config_model_subscription_delete_modelidentifier,
9530 { "ModelIdentifier", "btmesh.model.config_model_subscription_delete.modelidentifier",
9531 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9532 NULL, HFILL }
9534 { &hf_btmesh_config_model_subscription_delete_vendormodelidentifier,
9535 { "ModelIdentifier", "btmesh.model.config_model_subscription_delete.vendormodelidentifier",
9536 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9537 NULL, HFILL }
9539 { &hf_btmesh_config_model_subscription_delete_all_elementaddress,
9540 { "ElementAddress", "btmesh.model.config_model_subscription_delete_all.elementaddress",
9541 FT_UINT16, BASE_HEX, NULL, 0x0,
9542 NULL, HFILL }
9544 { &hf_btmesh_config_model_subscription_delete_all_modelidentifier,
9545 { "ModelIdentifier", "btmesh.model.config_model_subscription_delete_all.modelidentifier",
9546 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9547 NULL, HFILL }
9549 { &hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier,
9550 { "ModelIdentifier", "btmesh.model.config_model_subscription_delete_all.vendormodelidentifier",
9551 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9552 NULL, HFILL }
9554 { &hf_btmesh_config_model_subscription_overwrite_elementaddress,
9555 { "ElementAddress", "btmesh.model.config_model_subscription_overwrite.elementaddress",
9556 FT_UINT16, BASE_HEX, NULL, 0x0,
9557 NULL, HFILL }
9559 { &hf_btmesh_config_model_subscription_overwrite_address,
9560 { "Address", "btmesh.model.config_model_subscription_overwrite.address",
9561 FT_UINT16, BASE_HEX, NULL, 0x0,
9562 NULL, HFILL }
9564 { &hf_btmesh_config_model_subscription_overwrite_modelidentifier,
9565 { "ModelIdentifier", "btmesh.model.config_model_subscription_overwrite.modelidentifier",
9566 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9567 NULL, HFILL }
9569 { &hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier,
9570 { "ModelIdentifier", "btmesh.model.config_model_subscription_overwrite.vendormodelidentifier",
9571 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9572 NULL, HFILL }
9574 { &hf_btmesh_config_model_subscription_status_status,
9575 { "Status", "btmesh.model.config_model_subscription_status.status",
9576 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9577 NULL, HFILL }
9579 { &hf_btmesh_config_model_subscription_status_elementaddress,
9580 { "ElementAddress", "btmesh.model.config_model_subscription_status.elementaddress",
9581 FT_UINT16, BASE_HEX, NULL, 0x0,
9582 NULL, HFILL }
9584 { &hf_btmesh_config_model_subscription_status_address,
9585 { "Address", "btmesh.model.config_model_subscription_status.address",
9586 FT_UINT16, BASE_HEX, NULL, 0x0,
9587 NULL, HFILL }
9589 { &hf_btmesh_config_model_subscription_status_modelidentifier,
9590 { "ModelIdentifier", "btmesh.model.config_model_subscription_status.modelidentifier",
9591 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9592 NULL, HFILL }
9594 { &hf_btmesh_config_model_subscription_status_vendormodelidentifier,
9595 { "ModelIdentifier", "btmesh.model.config_model_subscription_status.vendormodelidentifier",
9596 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9597 NULL, HFILL }
9599 { &hf_btmesh_config_model_subscription_virtual_address_add_elementaddress,
9600 { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_add.elementaddress",
9601 FT_UINT16, BASE_HEX, NULL, 0x0,
9602 NULL, HFILL }
9604 { &hf_btmesh_config_model_subscription_virtual_address_add_label,
9605 { "Label", "btmesh.model.config_model_subscription_virtual_address_add.label",
9606 FT_BYTES, BASE_NONE, NULL, 0x0,
9607 NULL, HFILL }
9609 { &hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier,
9610 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_add.modelidentifier",
9611 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9612 NULL, HFILL }
9614 { &hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier,
9615 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_add.vendormodelidentifier",
9616 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9617 NULL, HFILL }
9619 { &hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress,
9620 { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_delete.elementaddress",
9621 FT_UINT16, BASE_HEX, NULL, 0x0,
9622 NULL, HFILL }
9624 { &hf_btmesh_config_model_subscription_virtual_address_delete_label,
9625 { "Label", "btmesh.model.config_model_subscription_virtual_address_delete.label",
9626 FT_BYTES, BASE_NONE, NULL, 0x0,
9627 NULL, HFILL }
9629 { &hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier,
9630 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_delete.modelidentifier",
9631 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9632 NULL, HFILL }
9634 { &hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier,
9635 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_delete.vendormodelidentifier",
9636 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9637 NULL, HFILL }
9639 { &hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress,
9640 { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_overwrite.elementaddress",
9641 FT_UINT16, BASE_HEX, NULL, 0x0,
9642 NULL, HFILL }
9644 { &hf_btmesh_config_model_subscription_virtual_address_overwrite_label,
9645 { "Label", "btmesh.model.config_model_subscription_virtual_address_overwrite.label",
9646 FT_BYTES, BASE_NONE, NULL, 0x0,
9647 NULL, HFILL }
9649 { &hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier,
9650 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_overwrite.modelidentifier",
9651 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9652 NULL, HFILL }
9654 { &hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier,
9655 { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_overwrite.vendormodelidentifier",
9656 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9657 NULL, HFILL }
9659 { &hf_btmesh_config_network_transmit_set_networktransmit,
9660 { "NetworkTransmitCount", "btmesh.model.config_network_transmit_set.networktransmit",
9661 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_transmit), 0x00,
9662 NULL, HFILL }
9664 { &hf_btmesh_config_network_transmit_set_networktransmit_count,
9665 { "NetworkTransmitCount", "btmesh.model.config_network_transmit_set.networktransmit.count",
9666 FT_UINT8, BASE_DEC, NULL, 0x07,
9667 NULL, HFILL }
9669 { &hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps,
9670 { "NetworkTransmitIntervalSteps", "btmesh.model.config_network_transmit_set.networktransmitinterval.steps",
9671 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9672 NULL, HFILL }
9674 { &hf_btmesh_config_network_transmit_status_networktransmit,
9675 { "NetworkTransmitCount", "btmesh.model.config_network_transmit_status.networktransmit",
9676 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_transmit), 0x00,
9677 NULL, HFILL }
9679 { &hf_btmesh_config_network_transmit_status_networktransmit_count,
9680 { "NetworkTransmitCount", "btmesh.model.config_network_transmit_status.networktransmit.count",
9681 FT_UINT8, BASE_DEC, NULL, 0x07,
9682 NULL, HFILL }
9684 { &hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps,
9685 { "NetworkTransmitIntervalSteps", "btmesh.model.config_network_transmit_status.networktransmit.intervalsteps",
9686 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9687 NULL, HFILL }
9689 { &hf_btmesh_config_relay_set_relay,
9690 { "Relay", "btmesh.model.config_relay_set.relay",
9691 FT_UINT8, BASE_DEC, VALS(btmesh_relay_vals), 0x0,
9692 NULL, HFILL }
9694 { &hf_btmesh_config_relay_set_relayretransmit,
9695 { "RelayRetransmitCount", "btmesh.model.config_relay_set.relayretransmit",
9696 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9697 NULL, HFILL }
9699 { &hf_btmesh_config_relay_set_relayretransmit_count,
9700 { "RelayRetransmitCount", "btmesh.model.config_relay_set.relayretransmit.count",
9701 FT_UINT8, BASE_DEC, NULL, 0x07,
9702 NULL, HFILL }
9704 { &hf_btmesh_config_relay_set_relayretransmit_intervalsteps,
9705 { "RelayRetransmitIntervalSteps", "btmesh.model.config_relay_set.relayretransmit.intervalsteps",
9706 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9707 NULL, HFILL }
9709 { &hf_btmesh_config_relay_status_relay,
9710 { "Relay", "btmesh.model.config_relay_status.relay",
9711 FT_UINT8, BASE_DEC, VALS(btmesh_relay_vals), 0x0,
9712 NULL, HFILL }
9714 { &hf_btmesh_config_relay_status_relayretransmit,
9715 { "RelayRetransmit", "btmesh.model.config_relay_status.relayretransmit",
9716 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9717 NULL, HFILL }
9719 { &hf_btmesh_config_relay_status_relayretransmit_count,
9720 { "RelayRetransmitCount", "btmesh.model.config_relay_status.relayretransmit.count",
9721 FT_UINT8, BASE_DEC, NULL, 0x07,
9722 NULL, HFILL }
9724 { &hf_btmesh_config_relay_status_relayretransmit_intervalsteps,
9725 { "RelayRetransmitIntervalSteps", "btmesh.model.config_relay_status.relayretransmit.intervalsteps",
9726 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9727 NULL, HFILL }
9729 { &hf_btmesh_config_sig_model_subscription_get_elementaddress,
9730 { "ElementAddress", "btmesh.model.config_sig_model_subscription_get.elementaddress",
9731 FT_UINT16, BASE_HEX, NULL, 0x0,
9732 NULL, HFILL }
9734 { &hf_btmesh_config_sig_model_subscription_get_modelidentifier,
9735 { "ModelIdentifier", "btmesh.model.config_sig_model_subscription_get.modelidentifier",
9736 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9737 NULL, HFILL }
9739 { &hf_btmesh_config_sig_model_subscription_list_status,
9740 { "Status", "btmesh.model.config_sig_model_subscription_list.status",
9741 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9742 NULL, HFILL }
9744 { &hf_btmesh_config_sig_model_subscription_list_elementaddress,
9745 { "ElementAddress", "btmesh.model.config_sig_model_subscription_list.elementaddress",
9746 FT_UINT16, BASE_HEX, NULL, 0x0,
9747 NULL, HFILL }
9749 { &hf_btmesh_config_sig_model_subscription_list_modelidentifier,
9750 { "ModelIdentifier", "btmesh.model.config_sig_model_subscription_list.modelidentifier",
9751 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9752 NULL, HFILL }
9754 { &hf_btmesh_config_sig_model_subscription_list_address,
9755 { "Address", "btmesh.model.config_sig_model_subscription_list.address",
9756 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9757 NULL, HFILL }
9759 { &hf_btmesh_config_vendor_model_subscription_get_elementaddress,
9760 { "ElementAddress", "btmesh.model.config_vendor_model_subscription_get.elementaddress",
9761 FT_UINT16, BASE_HEX, NULL, 0x0,
9762 NULL, HFILL }
9764 { &hf_btmesh_config_vendor_model_subscription_get_modelidentifier,
9765 { "ModelIdentifier", "btmesh.model.config_vendor_model_subscription_get.modelidentifier",
9766 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9767 NULL, HFILL }
9769 { &hf_btmesh_config_vendor_model_subscription_list_status,
9770 { "Status", "btmesh.model.config_vendor_model_subscription_list.status",
9771 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9772 NULL, HFILL }
9774 { &hf_btmesh_config_vendor_model_subscription_list_elementaddress,
9775 { "ElementAddress", "btmesh.model.config_vendor_model_subscription_list.elementaddress",
9776 FT_UINT16, BASE_HEX, NULL, 0x0,
9777 NULL, HFILL }
9779 { &hf_btmesh_config_vendor_model_subscription_list_modelidentifier,
9780 { "ModelIdentifier", "btmesh.model.config_vendor_model_subscription_list.modelidentifier",
9781 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9782 NULL, HFILL }
9784 { &hf_btmesh_config_vendor_model_subscription_list_address,
9785 { "Address", "btmesh.model.config_vendor_model_subscription_list.address",
9786 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9787 NULL, HFILL }
9789 { &hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress,
9790 { "LPNAddress", "btmesh.model.config_low_power_node_polltimeout_get.lpnaddress",
9791 FT_UINT16, BASE_HEX, NULL, 0x0,
9792 NULL, HFILL }
9794 { &hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress,
9795 { "LPNAddress", "btmesh.model.config_low_power_node_polltimeout_status.lpnaddress",
9796 FT_UINT16, BASE_HEX, NULL, 0x0,
9797 NULL, HFILL }
9799 { &hf_btmesh_config_low_power_node_polltimeout_status_polltimeout,
9800 { "PollTimeout", "btmesh.model.config_low_power_node_polltimeout_status.polltimeout",
9801 FT_UINT24, BASE_DEC, NULL, 0x0,
9802 NULL, HFILL }
9804 { &hf_btmesh_health_fault_clear_company_id,
9805 { "Company ID", "btmesh.model.health_fault_clear.company_id",
9806 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9807 NULL, HFILL }
9809 { &hf_btmesh_health_fault_clear_unacknowledged_company_id,
9810 { "Company ID", "btmesh.model.health_fault_clear_unacknowledged.company_id",
9811 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9812 NULL, HFILL }
9814 { &hf_btmesh_health_fault_get_company_id,
9815 { "Company ID", "btmesh.model.health_fault_get.company_id",
9816 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9817 NULL, HFILL }
9819 { &hf_btmesh_health_fault_test_test_id,
9820 { "Test ID", "btmesh.model.health_fault_test.test_id",
9821 FT_UINT8, BASE_HEX, NULL, 0x0,
9822 NULL, HFILL }
9824 { &hf_btmesh_health_fault_test_company_id,
9825 { "Company ID", "btmesh.model.health_fault_test.company_id",
9826 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9827 NULL, HFILL }
9829 { &hf_btmesh_health_fault_test_unacknowledged_test_id,
9830 { "Test ID", "btmesh.model.health_fault_test_unacknowledged.test_id",
9831 FT_UINT8, BASE_HEX, NULL, 0x0,
9832 NULL, HFILL }
9834 { &hf_btmesh_health_fault_test_unacknowledged_company_id,
9835 { "Company ID", "btmesh.model.health_fault_test_unacknowledged.company_id",
9836 FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9837 NULL, HFILL }
9839 { &hf_btmesh_health_period_set_fast_period_divisor,
9840 { "Fast Period Divisor", "btmesh.model.health_period_set.fast_period_divisor",
9841 FT_UINT8, BASE_DEC, NULL, 0x0,
9842 NULL, HFILL }
9844 { &hf_btmesh_health_period_set_unacknowledged_fast_period_divisor,
9845 { "Fast Period Divisor", "btmesh.model.health_period_set_unacknowledged.fast_period_divisor",
9846 FT_UINT8, BASE_DEC, NULL, 0x0,
9847 NULL, HFILL }
9849 { &hf_btmesh_health_period_status_fast_period_divisor,
9850 { "Fast Period Divisor", "btmesh.model.health_period_status.fast_period_divisor",
9851 FT_UINT8, BASE_DEC, NULL, 0x0,
9852 NULL, HFILL }
9854 { &hf_btmesh_config_heartbeat_publication_set_destination,
9855 { "Destination", "btmesh.model.config_heartbeat_publication_set.destination",
9856 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9857 NULL, HFILL }
9859 { &hf_btmesh_config_heartbeat_publication_set_countlog,
9860 { "CountLog", "btmesh.model.config_heartbeat_publication_set.countlog",
9861 FT_UINT8, BASE_HEX, NULL, 0x0,
9862 NULL, HFILL }
9864 { &hf_btmesh_config_heartbeat_publication_set_periodlog,
9865 { "PeriodLog", "btmesh.model.config_heartbeat_publication_set.periodlog",
9866 FT_UINT8, BASE_HEX, NULL, 0x0,
9867 NULL, HFILL }
9869 { &hf_btmesh_config_heartbeat_publication_set_ttl,
9870 { "TTL", "btmesh.model.config_heartbeat_publication_set.ttl",
9871 FT_UINT8, BASE_DEC, NULL, 0x0,
9872 NULL, HFILL }
9874 { &hf_btmesh_config_heartbeat_publication_set_features_relay,
9875 { "Relay feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.relay",
9876 FT_BOOLEAN, 16, NULL, 0x0001,
9877 NULL, HFILL }
9879 { &hf_btmesh_config_heartbeat_publication_set_features_proxy,
9880 { "Proxy feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.proxy",
9881 FT_BOOLEAN, 16, NULL, 0x0002,
9882 NULL, HFILL }
9884 { &hf_btmesh_config_heartbeat_publication_set_features_friend,
9885 { "Friend feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.friend",
9886 FT_BOOLEAN, 16, NULL, 0x0004,
9887 NULL, HFILL }
9889 { &hf_btmesh_config_heartbeat_publication_set_features_low_power,
9890 { "Low Power feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.low_power",
9891 FT_BOOLEAN, 16, NULL, 0x0008,
9892 NULL, HFILL }
9894 { &hf_btmesh_config_heartbeat_publication_set_features_rfu,
9895 { "RFU", "btmesh.model.config_heartbeat_publication_set.features.rfu",
9896 FT_UINT16, BASE_HEX, NULL, 0xFFF0,
9897 NULL, HFILL }
9899 { &hf_btmesh_config_heartbeat_publication_set_features,
9900 { "Features", "btmesh.model.config_heartbeat_publication_set.features",
9901 FT_UINT16, BASE_HEX, NULL, 0x0,
9902 NULL, HFILL }
9904 { &hf_btmesh_config_heartbeat_publication_set_netkeyindex,
9905 { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_set.netkeyindex",
9906 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9907 NULL, HFILL }
9909 { &hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx,
9910 { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_set.netkeyindex.idx",
9911 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9912 NULL, HFILL }
9914 { &hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu,
9915 { "RFU", "btmesh.model.config_heartbeat_publication_set.netkeyindex.rfu",
9916 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9917 NULL, HFILL }
9919 { &hf_btmesh_config_heartbeat_subscription_set_source,
9920 { "Source", "btmesh.model.config_heartbeat_subscription_set.source",
9921 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9922 NULL, HFILL }
9924 { &hf_btmesh_config_heartbeat_subscription_set_destination,
9925 { "Destination", "btmesh.model.config_heartbeat_subscription_set.destination",
9926 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9927 NULL, HFILL }
9929 { &hf_btmesh_config_heartbeat_subscription_set_periodlog,
9930 { "PeriodLog", "btmesh.model.config_heartbeat_subscription_set.periodlog",
9931 FT_UINT8, BASE_HEX, NULL, 0x0,
9932 NULL, HFILL }
9934 { &hf_btmesh_config_heartbeat_subscription_status_status,
9935 { "Status", "btmesh.model.config_heartbeat_subscription_status.status",
9936 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9937 NULL, HFILL }
9939 { &hf_btmesh_config_heartbeat_subscription_status_source,
9940 { "Source", "btmesh.model.config_heartbeat_subscription_status.source",
9941 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9942 NULL, HFILL }
9944 { &hf_btmesh_config_heartbeat_subscription_status_destination,
9945 { "Destination", "btmesh.model.config_heartbeat_subscription_status.destination",
9946 FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9947 NULL, HFILL }
9949 { &hf_btmesh_config_heartbeat_subscription_status_periodlog,
9950 { "PeriodLog", "btmesh.model.config_heartbeat_subscription_status.periodlog",
9951 FT_UINT8, BASE_HEX, NULL, 0x0,
9952 NULL, HFILL }
9954 { &hf_btmesh_config_heartbeat_subscription_status_countlog,
9955 { "CountLog", "btmesh.model.config_heartbeat_subscription_status.countlog",
9956 FT_UINT8, BASE_HEX, NULL, 0x0,
9957 NULL, HFILL }
9959 { &hf_btmesh_config_heartbeat_subscription_status_minhops,
9960 { "MinHops", "btmesh.model.config_heartbeat_subscription_status.minhops",
9961 FT_UINT8, BASE_DEC, NULL, 0x0,
9962 NULL, HFILL }
9964 { &hf_btmesh_config_heartbeat_subscription_status_maxhops,
9965 { "MaxHops", "btmesh.model.config_heartbeat_subscription_status.maxhops",
9966 FT_UINT8, BASE_DEC, NULL, 0x0,
9967 NULL, HFILL }
9969 { &hf_btmesh_config_model_app_bind_elementaddress,
9970 { "ElementAddress", "btmesh.model.config_model_app_bind.elementaddress",
9971 FT_UINT16, BASE_HEX, NULL, 0x0,
9972 NULL, HFILL }
9974 { &hf_btmesh_config_model_app_bind_appkeyindex,
9975 { "AppKeyIndex", "btmesh.model.config_model_app_bind.appkeyindex",
9976 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9977 NULL, HFILL }
9979 { &hf_btmesh_config_model_app_bind_appkeyindex_idx,
9980 { "AppKeyIndex", "btmesh.model.config_model_app_bind.appkeyindex.idx",
9981 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9982 NULL, HFILL }
9984 { &hf_btmesh_config_model_app_bind_appkeyindex_rfu,
9985 { "RFU", "btmesh.model.config_model_app_bind.appkeyindex.rfu",
9986 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9987 NULL, HFILL }
9989 { &hf_btmesh_config_model_app_bind_modelidentifier,
9990 { "ModelIdentifier", "btmesh.model.config_model_app_bind.modelidentifier",
9991 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9992 NULL, HFILL }
9994 { &hf_btmesh_config_model_app_bind_vendormodelidentifier,
9995 { "ModelIdentifier", "btmesh.model.config_model_app_bind.vendormodelidentifier",
9996 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9997 NULL, HFILL }
9999 { &hf_btmesh_config_model_app_status_status,
10000 { "Status", "btmesh.model.config_model_app_status.status",
10001 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10002 NULL, HFILL }
10004 { &hf_btmesh_config_model_app_status_elementaddress,
10005 { "ElementAddress", "btmesh.model.config_model_app_status.elementaddress",
10006 FT_UINT16, BASE_HEX, NULL, 0x0,
10007 NULL, HFILL }
10009 { &hf_btmesh_config_model_app_status_appkeyindex,
10010 { "AppKeyIndex", "btmesh.model.config_model_app_status.appkeyindex",
10011 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10012 NULL, HFILL }
10014 { &hf_btmesh_config_model_app_status_appkeyindex_idx,
10015 { "AppKeyIndex", "btmesh.model.config_model_app_status.appkeyindex.idx",
10016 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10017 NULL, HFILL }
10019 { &hf_btmesh_config_model_app_status_appkeyindex_rfu,
10020 { "RFU", "btmesh.model.config_model_app_status.appkeyindex.rfu",
10021 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10022 NULL, HFILL }
10024 { &hf_btmesh_config_model_app_status_modelidentifier,
10025 { "ModelIdentifier", "btmesh.model.config_model_app_status.modelidentifier",
10026 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10027 NULL, HFILL }
10029 { &hf_btmesh_config_model_app_status_vendormodelidentifier,
10030 { "ModelIdentifier", "btmesh.model.config_model_app_status.vendormodelidentifier",
10031 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10032 NULL, HFILL }
10034 { &hf_btmesh_config_model_app_unbind_elementaddress,
10035 { "ElementAddress", "btmesh.model.config_model_app_unbind.elementaddress",
10036 FT_UINT16, BASE_HEX, NULL, 0x0,
10037 NULL, HFILL }
10039 { &hf_btmesh_config_model_app_unbind_appkeyindex,
10040 { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex",
10041 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10042 NULL, HFILL }
10044 { &hf_btmesh_config_model_app_unbind_appkeyindex_idx,
10045 { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex.idx",
10046 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10047 NULL, HFILL }
10049 { &hf_btmesh_config_model_app_unbind_appkeyindex_rfu,
10050 { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex.rfu",
10051 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10052 NULL, HFILL }
10054 { &hf_btmesh_config_model_app_unbind_modelidentifier,
10055 { "ModelIdentifier", "btmesh.model.config_model_app_unbind.modelidentifier",
10056 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10057 NULL, HFILL }
10059 { &hf_btmesh_config_model_app_unbind_vendormodelidentifier,
10060 { "ModelIdentifier", "btmesh.model.config_model_app_unbind.vendormodelidentifier",
10061 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10062 NULL, HFILL }
10064 { &hf_btmesh_config_netkey_add_netkeyindex,
10065 { "NetKeyIndex", "btmesh.model.config_netkey_add.netkeyindex",
10066 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10067 NULL, HFILL }
10069 { &hf_btmesh_config_netkey_add_netkeyindex_idx,
10070 { "NetKeyIndex", "btmesh.model.config_netkey_add.netkeyindex.idx",
10071 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10072 NULL, HFILL }
10074 { &hf_btmesh_config_netkey_add_netkeyindex_rfu,
10075 { "RFU", "btmesh.model.config_netkey_add.netkeyindex.rfu",
10076 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10077 NULL, HFILL }
10079 { &hf_btmesh_config_netkey_add_netkey,
10080 { "NetKey", "btmesh.model.config_netkey_add.netkey",
10081 FT_BYTES, BASE_NONE, NULL, 0x0,
10082 NULL, HFILL }
10084 { &hf_btmesh_config_netkey_delete_netkeyindex,
10085 { "NetKeyIndex", "btmesh.model.config_netkey_delete.netkeyindex",
10086 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10087 NULL, HFILL }
10089 { &hf_btmesh_config_netkey_delete_netkeyindex_idx,
10090 { "NetKeyIndex", "btmesh.model.config_netkey_delete.netkeyindex.idx",
10091 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10092 NULL, HFILL }
10094 { &hf_btmesh_config_netkey_delete_netkeyindex_rfu,
10095 { "RFU", "btmesh.model.config_netkey_delete.netkeyindex.rfu",
10096 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10097 NULL, HFILL }
10099 { &hf_btmesh_config_netkey_list_netkeyindex,
10100 { "NetKeyIndex", "btmesh.model.config_netkey_list.netkeyindex",
10101 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10102 NULL, HFILL }
10104 { &hf_btmesh_config_netkey_list_netkeyindex_rfu,
10105 { "NetKeyIndex RFU", "btmesh.model.config_netkey_list.netkeyindex.rfu",
10106 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10107 NULL, HFILL }
10109 { &hf_btmesh_config_netkey_status_status,
10110 { "Status", "btmesh.model.config_netkey_status.status",
10111 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10112 NULL, HFILL }
10114 { &hf_btmesh_config_netkey_status_netkeyindex,
10115 { "NetKeyIndex", "btmesh.model.config_netkey_status.netkeyindex",
10116 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10117 NULL, HFILL }
10119 { &hf_btmesh_config_netkey_status_netkeyindex_idx,
10120 { "NetKeyIndex", "btmesh.model.config_netkey_status.netkeyindex.idx",
10121 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10122 NULL, HFILL }
10124 { &hf_btmesh_config_netkey_status_netkeyindex_rfu,
10125 { "RFU", "btmesh.model.config_netkey_status.netkeyindex.rfu",
10126 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10127 NULL, HFILL }
10129 { &hf_btmesh_config_netkey_update_netkeyindex,
10130 { "NetKeyIndex", "btmesh.model.config_netkey_update.netkeyindex",
10131 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10132 NULL, HFILL }
10134 { &hf_btmesh_config_netkey_update_netkeyindex_idx,
10135 { "NetKeyIndex", "btmesh.model.config_netkey_update.netkeyindex.idx",
10136 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10137 NULL, HFILL }
10139 { &hf_btmesh_config_netkey_update_netkeyindex_rfu,
10140 { "RFU", "btmesh.model.config_netkey_update.netkeyindex.rfu",
10141 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10142 NULL, HFILL }
10144 { &hf_btmesh_config_netkey_update_netkey,
10145 { "NetKey", "btmesh.model.config_netkey_update.netkey",
10146 FT_BYTES, BASE_NONE, NULL, 0x0,
10147 NULL, HFILL }
10149 { &hf_btmesh_config_node_identity_get_netkeyindex,
10150 { "NetKeyIndex", "btmesh.model.config_node_identity_get.netkeyindex",
10151 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10152 NULL, HFILL }
10154 { &hf_btmesh_config_node_identity_get_netkeyindex_idx,
10155 { "NetKeyIndex", "btmesh.model.config_node_identity_get.netkeyindex.idx",
10156 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10157 NULL, HFILL }
10159 { &hf_btmesh_config_node_identity_get_netkeyindex_rfu,
10160 { "RFU", "btmesh.model.config_node_identity_get.netkeyindex.rfu",
10161 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10162 NULL, HFILL }
10164 { &hf_btmesh_config_node_identity_set_netkeyindex,
10165 { "NetKeyIndex", "btmesh.model.config_node_identity_set.netkeyindex",
10166 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10167 NULL, HFILL }
10169 { &hf_btmesh_config_node_identity_set_netkeyindex_idx,
10170 { "NetKeyIndex", "btmesh.model.config_node_identity_set.netkeyindex.idx",
10171 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10172 NULL, HFILL }
10174 { &hf_btmesh_config_node_identity_set_netkeyindex_rfu,
10175 { "RFU", "btmesh.model.config_node_identity_set.netkeyindex.rfu",
10176 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10177 NULL, HFILL }
10179 { &hf_btmesh_config_node_identity_set_identity,
10180 { "Identity", "btmesh.model.config_node_identity_set.identity",
10181 FT_UINT8, BASE_DEC, NULL, 0x0,
10182 NULL, HFILL }
10184 { &hf_btmesh_config_node_identity_status_status,
10185 { "Status", "btmesh.model.config_node_identity_status.status",
10186 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10187 NULL, HFILL }
10189 { &hf_btmesh_config_node_identity_status_netkeyindex,
10190 { "NetKeyIndex", "btmesh.model.config_node_identity_status.netkeyindex",
10191 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10192 NULL, HFILL }
10194 { &hf_btmesh_config_node_identity_status_netkeyindex_idx,
10195 { "NetKeyIndex", "btmesh.model.config_node_identity_status.netkeyindex.idx",
10196 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10197 NULL, HFILL }
10199 { &hf_btmesh_config_node_identity_status_netkeyindex_rfu,
10200 { "RFU", "btmesh.model.config_node_identity_status.netkeyindex.rfu",
10201 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10202 NULL, HFILL }
10204 { &hf_btmesh_config_node_identity_status_identity,
10205 { "Identity", "btmesh.model.config_node_identity_status.identity",
10206 FT_UINT8, BASE_DEC, NULL, 0x0,
10207 NULL, HFILL }
10209 { &hf_btmesh_config_sig_model_app_get_elementaddress,
10210 { "ElementAddress", "btmesh.model.config_sig_model_app_get.elementaddress",
10211 FT_UINT16, BASE_HEX, NULL, 0x0,
10212 NULL, HFILL }
10214 { &hf_btmesh_config_sig_model_app_get_modelidentifier,
10215 { "ModelIdentifier", "btmesh.model.config_sig_model_app_get.modelidentifier",
10216 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10217 NULL, HFILL }
10219 { &hf_btmesh_config_sig_model_app_list_status,
10220 { "Status", "btmesh.model.config_sig_model_app_list.status",
10221 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10222 NULL, HFILL }
10224 { &hf_btmesh_config_sig_model_app_list_elementaddress,
10225 { "ElementAddress", "btmesh.model.config_sig_model_app_list.elementaddress",
10226 FT_UINT16, BASE_HEX, NULL, 0x0,
10227 NULL, HFILL }
10229 { &hf_btmesh_config_sig_model_app_list_modelidentifier,
10230 { "ModelIdentifier", "btmesh.model.config_sig_model_app_list.modelidentifier",
10231 FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10232 NULL, HFILL }
10234 { &hf_btmesh_config_sig_model_app_list_appkeyindex,
10235 { "AppKeyIndex", "btmesh.model.config_sig_model_app_list.appkeyindex",
10236 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10237 NULL, HFILL }
10239 { &hf_btmesh_config_sig_model_app_list_appkeyindex_rfu,
10240 { "RFU", "btmesh.model.config_sig_model_app_list.appkeyindex.rfu",
10241 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10242 NULL, HFILL }
10244 { &hf_btmesh_config_vendor_model_app_get_elementaddress,
10245 { "ElementAddress", "btmesh.model.config_vendor_model_app_get.elementaddress",
10246 FT_UINT16, BASE_HEX, NULL, 0x0,
10247 NULL, HFILL }
10249 { &hf_btmesh_config_vendor_model_app_get_modelidentifier,
10250 { "ModelIdentifier", "btmesh.model.config_vendor_model_app_get.modelidentifier",
10251 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10252 NULL, HFILL }
10254 { &hf_btmesh_config_vendor_model_app_list_status,
10255 { "Status", "btmesh.model.config_vendor_model_app_list.status",
10256 FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10257 NULL, HFILL }
10259 { &hf_btmesh_config_vendor_model_app_list_elementaddress,
10260 { "ElementAddress", "btmesh.model.config_vendor_model_app_list.elementaddress",
10261 FT_UINT16, BASE_HEX, NULL, 0x0,
10262 NULL, HFILL }
10264 { &hf_btmesh_config_vendor_model_app_list_modelidentifier,
10265 { "ModelIdentifier", "btmesh.model.config_vendor_model_app_list.modelidentifier",
10266 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10267 NULL, HFILL }
10269 { &hf_btmesh_config_vendor_model_app_list_appkeyindex,
10270 { "AppKeyIndex", "btmesh.model.config_vendor_model_app_list.appkeyindex",
10271 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10272 NULL, HFILL }
10274 { &hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu,
10275 { "RFU", "btmesh.model.config_vendor_model_app_list.appkeyindex.rfu",
10276 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10277 NULL, HFILL }
10279 { &hf_btmesh_generic_location_global_status_global_latitude,
10280 { "Global Latitude", "btmesh.model.generic_location_global_status.global_latitude",
10281 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10282 NULL, HFILL }
10284 { &hf_btmesh_generic_location_global_status_global_longitude,
10285 { "Global Longitude", "btmesh.model.generic_location_global_status.global_longitude",
10286 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10287 NULL, HFILL }
10289 { &hf_btmesh_generic_location_global_status_global_altitude,
10290 { "Global Altitude", "btmesh.model.generic_location_global_status.global_altitude",
10291 FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10292 NULL, HFILL }
10294 { &hf_btmesh_generic_location_global_set_global_latitude,
10295 { "Global Latitude", "btmesh.model.generic_location_global_set.global_latitude",
10296 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10297 NULL, HFILL }
10299 { &hf_btmesh_generic_location_global_set_global_longitude,
10300 { "Global Longitude", "btmesh.model.generic_location_global_set.global_longitude",
10301 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10302 NULL, HFILL }
10304 { &hf_btmesh_generic_location_global_set_global_altitude,
10305 { "Global Altitude", "btmesh.model.generic_location_global_set.global_altitude",
10306 FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10307 NULL, HFILL }
10309 { &hf_btmesh_generic_location_global_set_unacknowledged_global_latitude,
10310 { "Global Latitude", "btmesh.model.generic_location_global_set_unacknowledged.global_latitude",
10311 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10312 NULL, HFILL }
10314 { &hf_btmesh_generic_location_global_set_unacknowledged_global_longitude,
10315 { "Global Longitude", "btmesh.model.generic_location_global_set_unacknowledged.global_longitude",
10316 FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10317 NULL, HFILL }
10319 { &hf_btmesh_generic_location_global_set_unacknowledged_global_altitude,
10320 { "Global Altitude", "btmesh.model.generic_location_global_set_unacknowledged.global_altitude",
10321 FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10322 NULL, HFILL }
10324 { &hf_btmesh_generic_onoff_set_onoff,
10325 { "OnOff", "btmesh.model.generic_onoff_set.onoff",
10326 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10327 NULL, HFILL }
10329 { &hf_btmesh_generic_onoff_set_tid,
10330 { "TID", "btmesh.model.generic_onoff_set.tid",
10331 FT_UINT8, BASE_DEC, NULL, 0x0,
10332 NULL, HFILL }
10334 { &hf_btmesh_generic_onoff_set_transition_time,
10335 { "Transition Time", "btmesh.model.generic_onoff_set.transition_time",
10336 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10337 NULL, HFILL }
10339 { &hf_btmesh_generic_onoff_set_transition_time_resolution,
10340 { "Step Resolution", "btmesh.model.generic_onoff_set.transition_time.resolution",
10341 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10342 NULL, HFILL }
10344 { &hf_btmesh_generic_onoff_set_transition_time_steps,
10345 { "Number of Steps", "btmesh.model.generic_onoff_set.transition_time.steps",
10346 FT_UINT8, BASE_DEC, NULL, 0x3F,
10347 NULL, HFILL }
10349 { &hf_btmesh_generic_onoff_set_delay,
10350 { "Delay", "btmesh.model.generic_onoff_set.delay",
10351 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10352 NULL, HFILL }
10354 { &hf_btmesh_generic_onoff_set_unacknowledged_onoff,
10355 { "OnOff", "btmesh.model.generic_onoff_set_unacknowledged.onoff",
10356 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10357 NULL, HFILL }
10359 { &hf_btmesh_generic_onoff_set_unacknowledged_tid,
10360 { "TID", "btmesh.model.generic_onoff_set_unacknowledged.tid",
10361 FT_UINT8, BASE_DEC, NULL, 0x0,
10362 NULL, HFILL }
10364 { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time,
10365 { "Transition Time", "btmesh.model.generic_onoff_set_unacknowledged.transition_time",
10366 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10367 NULL, HFILL }
10369 { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution,
10370 { "Step Resolution", "btmesh.model.generic_onoff_set_unacknowledged.transition_time.resolution",
10371 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10372 NULL, HFILL }
10374 { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps,
10375 { "Number of Steps", "btmesh.model.generic_onoff_set_unacknowledged.transition_time.steps",
10376 FT_UINT8, BASE_DEC, NULL, 0x3F,
10377 NULL, HFILL }
10379 { &hf_btmesh_generic_onoff_set_unacknowledged_delay,
10380 { "Delay", "btmesh.model.generic_onoff_set_unacknowledged.delay",
10381 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10382 NULL, HFILL }
10384 { &hf_btmesh_generic_onoff_status_present_onoff,
10385 { "Present OnOff", "btmesh.model.generic_onoff_status.present_onoff",
10386 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10387 NULL, HFILL }
10389 { &hf_btmesh_generic_onoff_status_target_onoff,
10390 { "Target OnOff", "btmesh.model.generic_onoff_status.target_onoff",
10391 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10392 NULL, HFILL }
10394 { &hf_btmesh_generic_onoff_status_remaining_time,
10395 { "Remaining Time", "btmesh.model.generic_onoff_status.remaining_time",
10396 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10397 NULL, HFILL }
10399 { &hf_btmesh_generic_onoff_status_remaining_time_resolution,
10400 { "Step Resolution", "btmesh.model.generic_onoff_status.remaining_time.resolution",
10401 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10402 NULL, HFILL }
10404 { &hf_btmesh_generic_onoff_status_remaining_time_steps,
10405 { "Number of Steps", "btmesh.model.generic_onoff_status.remaining_time.steps",
10406 FT_UINT8, BASE_DEC, NULL, 0x3F,
10407 NULL, HFILL }
10409 { &hf_btmesh_generic_level_set_level,
10410 { "Level", "btmesh.model.generic_level_set.level",
10411 FT_INT16, BASE_DEC, NULL, 0x0,
10412 NULL, HFILL }
10414 { &hf_btmesh_generic_level_set_tid,
10415 { "TID", "btmesh.model.generic_level_set.tid",
10416 FT_UINT8, BASE_DEC, NULL, 0x0,
10417 NULL, HFILL }
10419 { &hf_btmesh_generic_level_set_transition_time,
10420 { "Transition Time", "btmesh.model.generic_level_set.transition_time",
10421 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10422 NULL, HFILL }
10424 { &hf_btmesh_generic_level_set_transition_time_resolution,
10425 { "Step Resolution", "btmesh.model.generic_level_set.transition_time.resolution",
10426 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10427 NULL, HFILL }
10429 { &hf_btmesh_generic_level_set_transition_time_steps,
10430 { "Number of Steps", "btmesh.model.generic_level_set.transition_time.steps",
10431 FT_UINT8, BASE_DEC, NULL, 0x3F,
10432 NULL, HFILL }
10434 { &hf_btmesh_generic_level_set_delay,
10435 { "Delay", "btmesh.model.generic_level_set.delay",
10436 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10437 NULL, HFILL }
10439 { &hf_btmesh_generic_level_set_unacknowledged_level,
10440 { "Level", "btmesh.model.generic_level_set_unacknowledged.level",
10441 FT_INT16, BASE_DEC, NULL, 0x0,
10442 NULL, HFILL }
10444 { &hf_btmesh_generic_level_set_unacknowledged_tid,
10445 { "TID", "btmesh.model.generic_level_set_unacknowledged.tid",
10446 FT_UINT8, BASE_DEC, NULL, 0x0,
10447 NULL, HFILL }
10449 { &hf_btmesh_generic_level_set_unacknowledged_transition_time,
10450 { "Transition Time", "btmesh.model.generic_level_set_unacknowledged.transition_time",
10451 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10452 NULL, HFILL }
10454 { &hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution,
10455 { "Step Resolution", "btmesh.model.generic_level_set_unacknowledged.transition_time.resolution",
10456 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10457 NULL, HFILL }
10459 { &hf_btmesh_generic_level_set_unacknowledged_transition_time_steps,
10460 { "Number of Steps", "btmesh.model.generic_level_set_unacknowledged.transition_time.steps",
10461 FT_UINT8, BASE_DEC, NULL, 0x3F,
10462 NULL, HFILL }
10464 { &hf_btmesh_generic_level_set_unacknowledged_delay,
10465 { "Delay", "btmesh.model.generic_level_set_unacknowledged.delay",
10466 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10467 NULL, HFILL }
10469 { &hf_btmesh_generic_level_status_present_level,
10470 { "Present Level", "btmesh.model.generic_level_status.present_level",
10471 FT_INT16, BASE_DEC, NULL, 0x0,
10472 NULL, HFILL }
10474 { &hf_btmesh_generic_level_status_target_level,
10475 { "Target Level", "btmesh.model.generic_level_status.target_level",
10476 FT_INT16, BASE_DEC, NULL, 0x0,
10477 NULL, HFILL }
10479 { &hf_btmesh_generic_level_status_remaining_time,
10480 { "Remaining Time", "btmesh.model.generic_level_status.remaining_time",
10481 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10482 NULL, HFILL }
10484 { &hf_btmesh_generic_level_status_remaining_time_resolution,
10485 { "Step Resolution", "btmesh.model.generic_level_status.remaining_time.resolution",
10486 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10487 NULL, HFILL }
10489 { &hf_btmesh_generic_level_status_remaining_time_steps,
10490 { "Number of Steps", "btmesh.model.generic_level_status.remaining_time.steps",
10491 FT_UINT8, BASE_DEC, NULL, 0x3F,
10492 NULL, HFILL }
10494 { &hf_btmesh_generic_delta_set_delta_level,
10495 { "Delta Level", "btmesh.model.generic_delta_set.delta_level",
10496 FT_INT32, BASE_DEC, NULL, 0x0,
10497 NULL, HFILL }
10499 { &hf_btmesh_generic_delta_set_tid,
10500 { "TID", "btmesh.model.generic_delta_set.tid",
10501 FT_UINT8, BASE_DEC, NULL, 0x0,
10502 NULL, HFILL }
10504 { &hf_btmesh_generic_delta_set_transition_time,
10505 { "Transition Time", "btmesh.model.generic_delta_set.transition_time",
10506 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10507 NULL, HFILL }
10509 { &hf_btmesh_generic_delta_set_transition_time_resolution,
10510 { "Step Resolution", "btmesh.model.generic_delta_set.transition_time.resolution",
10511 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10512 NULL, HFILL }
10514 { &hf_btmesh_generic_delta_set_transition_time_steps,
10515 { "Number of Steps", "btmesh.model.generic_delta_set.transition_time.steps",
10516 FT_UINT8, BASE_DEC, NULL, 0x3F,
10517 NULL, HFILL }
10519 { &hf_btmesh_generic_delta_set_delay,
10520 { "Delay", "btmesh.model.generic_delta_set.delay",
10521 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10522 NULL, HFILL }
10524 { &hf_btmesh_generic_delta_set_unacknowledged_delta_level,
10525 { "Delta Level", "btmesh.model.generic_delta_set_unacknowledged.delta_level",
10526 FT_INT32, BASE_DEC, NULL, 0x0,
10527 NULL, HFILL }
10529 { &hf_btmesh_generic_delta_set_unacknowledged_tid,
10530 { "TID", "btmesh.model.generic_delta_set_unacknowledged.tid",
10531 FT_UINT8, BASE_DEC, NULL, 0x0,
10532 NULL, HFILL }
10534 { &hf_btmesh_generic_delta_set_unacknowledged_transition_time,
10535 { "Transition Time", "btmesh.model.generic_delta_set_unacknowledged.transition_time",
10536 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10537 NULL, HFILL }
10539 { &hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution,
10540 { "Step Resolution", "btmesh.model.generic_delta_set_unacknowledged.transition_time.resolution",
10541 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10542 NULL, HFILL }
10544 { &hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps,
10545 { "Number of Steps", "btmesh.model.generic_delta_set_unacknowledged.transition_time.steps",
10546 FT_UINT8, BASE_DEC, NULL, 0x3F,
10547 NULL, HFILL }
10549 { &hf_btmesh_generic_delta_set_unacknowledged_delay,
10550 { "Delay", "btmesh.model.generic_delta_set_unacknowledged.delay",
10551 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10552 NULL, HFILL }
10554 { &hf_btmesh_generic_move_set_delta_level,
10555 { "Delta Level", "btmesh.model.generic_move_set.delta_level",
10556 FT_INT16, BASE_DEC, NULL, 0x0,
10557 NULL, HFILL }
10559 { &hf_btmesh_generic_move_set_tid,
10560 { "TID", "btmesh.model.generic_move_set.tid",
10561 FT_UINT8, BASE_DEC, NULL, 0x0,
10562 NULL, HFILL }
10564 { &hf_btmesh_generic_move_set_transition_time,
10565 { "Transition Time", "btmesh.model.generic_move_set.transition_time",
10566 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10567 NULL, HFILL }
10569 { &hf_btmesh_generic_move_set_transition_time_resolution,
10570 { "Step Resolution", "btmesh.model.generic_move_set.transition_time.resolution",
10571 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10572 NULL, HFILL }
10574 { &hf_btmesh_generic_move_set_transition_time_steps,
10575 { "Number of Steps", "btmesh.model.generic_move_set.transition_time.steps",
10576 FT_UINT8, BASE_DEC, NULL, 0x3F,
10577 NULL, HFILL }
10579 { &hf_btmesh_generic_move_set_delay,
10580 { "Delay", "btmesh.model.generic_move_set.delay",
10581 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10582 NULL, HFILL }
10584 { &hf_btmesh_generic_move_set_unacknowledged_delta_level,
10585 { "Delta Level", "btmesh.model.generic_move_set_unacknowledged.delta_level",
10586 FT_INT16, BASE_DEC, NULL, 0x0,
10587 NULL, HFILL }
10589 { &hf_btmesh_generic_move_set_unacknowledged_tid,
10590 { "TID", "btmesh.model.generic_move_set_unacknowledged.tid",
10591 FT_UINT8, BASE_DEC, NULL, 0x0,
10592 NULL, HFILL }
10594 { &hf_btmesh_generic_move_set_unacknowledged_transition_time,
10595 { "Transition Time", "btmesh.model.generic_move_set_unacknowledged.transition_time",
10596 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10597 NULL, HFILL }
10599 { &hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution,
10600 { "Step Resolution", "btmesh.model.generic_move_set_unacknowledged.transition_time.resolution",
10601 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10602 NULL, HFILL }
10604 { &hf_btmesh_generic_move_set_unacknowledged_transition_time_steps,
10605 { "Number of Steps", "btmesh.model.generic_move_set_unacknowledged.transition_time.steps",
10606 FT_UINT8, BASE_DEC, NULL, 0x3F,
10607 NULL, HFILL }
10609 { &hf_btmesh_generic_move_set_unacknowledged_delay,
10610 { "Delay", "btmesh.model.generic_move_set_unacknowledged.delay",
10611 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10612 NULL, HFILL }
10614 { &hf_btmesh_generic_default_transition_time_set_transition_time,
10615 { "Transition Time", "btmesh.model.generic_default_transition_time_set.transition_time",
10616 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10617 NULL, HFILL }
10619 { &hf_btmesh_generic_default_transition_time_set_transition_time_resolution,
10620 { "Step Resolution", "btmesh.model.generic_default_transition_time_set.transition_time.resolution",
10621 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10622 NULL, HFILL }
10624 { &hf_btmesh_generic_default_transition_time_set_transition_time_steps,
10625 { "Number of Steps", "btmesh.model.generic_default_transition_time_set.transition_time.steps",
10626 FT_UINT8, BASE_DEC, NULL, 0x3F,
10627 NULL, HFILL }
10629 { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time,
10630 { "Transition Time", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time",
10631 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10632 NULL, HFILL }
10634 { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution,
10635 { "Step Resolution", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time.resolution",
10636 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10637 NULL, HFILL }
10639 { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps,
10640 { "Number of Steps", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time.steps",
10641 FT_UINT8, BASE_DEC, NULL, 0x3F,
10642 NULL, HFILL }
10644 { &hf_btmesh_generic_default_transition_time_status_transition_time,
10645 { "Transition Time", "btmesh.model.generic_default_transition_time_status.transition_time",
10646 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10647 NULL, HFILL }
10649 { &hf_btmesh_generic_default_transition_time_status_transition_time_resolution,
10650 { "Step Resolution", "btmesh.model.generic_default_transition_time_status.transition_time.resolution",
10651 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10652 NULL, HFILL }
10654 { &hf_btmesh_generic_default_transition_time_status_transition_time_steps,
10655 { "Number of Steps", "btmesh.model.generic_default_transition_time_status.transition_time.steps",
10656 FT_UINT8, BASE_DEC, NULL, 0x3F,
10657 NULL, HFILL }
10659 { &hf_btmesh_generic_onpowerup_status_onpowerup,
10660 { "OnPowerUp", "btmesh.model.generic_onpowerup_status.onpowerup",
10661 FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10662 NULL, HFILL }
10664 { &hf_btmesh_generic_onpowerup_set_onpowerup,
10665 { "OnPowerUp", "btmesh.model.generic_onpowerup_set.onpowerup",
10666 FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10667 NULL, HFILL }
10669 { &hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup,
10670 { "OnPowerUp", "btmesh.model.generic_onpowerup_set_unacknowledged.onpowerup",
10671 FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10672 NULL, HFILL }
10674 { &hf_btmesh_generic_power_level_set_power,
10675 { "Power", "btmesh.model.generic_power_level_set.power",
10676 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10677 NULL, HFILL }
10679 { &hf_btmesh_generic_power_level_set_tid,
10680 { "TID", "btmesh.model.generic_power_level_set.tid",
10681 FT_UINT8, BASE_DEC, NULL, 0x0,
10682 NULL, HFILL }
10684 { &hf_btmesh_generic_power_level_set_transition_time,
10685 { "Transition Time", "btmesh.model.generic_power_level_set.transition_time",
10686 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10687 NULL, HFILL }
10689 { &hf_btmesh_generic_power_level_set_transition_time_resolution,
10690 { "Step Resolution", "btmesh.model.generic_power_level_set.transition_time.resolution",
10691 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10692 NULL, HFILL }
10694 { &hf_btmesh_generic_power_level_set_transition_time_steps,
10695 { "Number of Steps", "btmesh.model.generic_power_level_set.transition_time.steps",
10696 FT_UINT8, BASE_DEC, NULL, 0x3F,
10697 NULL, HFILL }
10699 { &hf_btmesh_generic_power_level_set_delay,
10700 { "Delay", "btmesh.model.generic_power_level_set.delay",
10701 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10702 NULL, HFILL }
10704 { &hf_btmesh_generic_power_level_set_unacknowledged_power,
10705 { "Power", "btmesh.model.generic_power_level_set_unacknowledged.power",
10706 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10707 NULL, HFILL }
10709 { &hf_btmesh_generic_power_level_set_unacknowledged_tid,
10710 { "TID", "btmesh.model.generic_power_level_set_unacknowledged.tid",
10711 FT_UINT8, BASE_DEC, NULL, 0x0,
10712 NULL, HFILL }
10714 { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time,
10715 { "Transition Time", "btmesh.model.generic_power_level_set_unacknowledged.transition_time",
10716 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10717 NULL, HFILL }
10719 { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution,
10720 { "Step Resolution", "btmesh.model.generic_power_level_set_unacknowledged.transition_time.resolution",
10721 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10722 NULL, HFILL }
10724 { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps,
10725 { "Number of Steps", "btmesh.model.generic_power_level_set_unacknowledged.transition_time.steps",
10726 FT_UINT8, BASE_DEC, NULL, 0x3F,
10727 NULL, HFILL }
10729 { &hf_btmesh_generic_power_level_set_unacknowledged_delay,
10730 { "Delay", "btmesh.model.generic_power_level_set_unacknowledged.delay",
10731 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10732 NULL, HFILL }
10734 { &hf_btmesh_generic_power_level_status_present_power,
10735 { "Present Power", "btmesh.model.generic_power_level_status.present_power",
10736 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10737 NULL, HFILL }
10739 { &hf_btmesh_generic_power_level_status_target_power,
10740 { "Target Power", "btmesh.model.generic_power_level_status.target_power",
10741 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10742 NULL, HFILL }
10744 { &hf_btmesh_generic_power_level_status_remaining_time,
10745 { "Remaining Time", "btmesh.model.generic_power_level_status.remaining_time",
10746 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10747 NULL, HFILL }
10749 { &hf_btmesh_generic_power_level_status_remaining_time_resolution,
10750 { "Step Resolution", "btmesh.model.generic_power_level_status.remaining_time.resolution",
10751 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10752 NULL, HFILL }
10754 { &hf_btmesh_generic_power_level_status_remaining_time_steps,
10755 { "Number of Steps", "btmesh.model.generic_power_level_status.remaining_time.steps",
10756 FT_UINT8, BASE_DEC, NULL, 0x3F,
10757 NULL, HFILL }
10759 { &hf_btmesh_generic_power_last_status_power,
10760 { "Power", "btmesh.model.generic_power_last_status.power",
10761 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10762 NULL, HFILL }
10764 { &hf_btmesh_generic_power_default_status_power,
10765 { "Power", "btmesh.model.generic_power_default_status.power",
10766 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10767 NULL, HFILL }
10769 { &hf_btmesh_generic_power_range_status_status_code,
10770 { "Status Code", "btmesh.model.generic_power_range_status.status_code",
10771 FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
10772 NULL, HFILL }
10774 { &hf_btmesh_generic_power_range_status_range_min,
10775 { "Range Min", "btmesh.model.generic_power_range_status.range_min",
10776 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10777 NULL, HFILL }
10779 { &hf_btmesh_generic_power_range_status_range_max,
10780 { "Range Max", "btmesh.model.generic_power_range_status.range_max",
10781 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10782 NULL, HFILL }
10784 { &hf_btmesh_generic_power_default_set_power,
10785 { "Power", "btmesh.model.generic_power_default_set.power",
10786 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10787 NULL, HFILL }
10789 { &hf_btmesh_generic_power_default_set_unacknowledged_power,
10790 { "Power", "btmesh.model.generic_power_default_set_unacknowledged.power",
10791 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10792 NULL, HFILL }
10794 { &hf_btmesh_generic_power_range_set_range_min,
10795 { "Range Min", "btmesh.model.generic_power_range_set.range_min",
10796 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10797 NULL, HFILL }
10799 { &hf_btmesh_generic_power_range_set_range_max,
10800 { "Range Max", "btmesh.model.generic_power_range_set.range_max",
10801 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10802 NULL, HFILL }
10804 { &hf_btmesh_generic_power_range_set_unacknowledged_range_min,
10805 { "Range Min", "btmesh.model.generic_power_range_set_unacknowledged.range_min",
10806 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10807 NULL, HFILL }
10809 { &hf_btmesh_generic_power_range_set_unacknowledged_range_max,
10810 { "Range Max", "btmesh.model.generic_power_range_set_unacknowledged.range_max",
10811 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10812 NULL, HFILL }
10814 { &hf_btmesh_generic_battery_status_battery_level,
10815 { "Battery Level", "btmesh.model.generic_battery_status.battery_level",
10816 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_battery_level), 0x0,
10817 NULL, HFILL }
10819 { &hf_btmesh_generic_battery_status_time_to_discharge,
10820 { "Time to Discharge", "btmesh.model.generic_battery_status.time_to_discharge",
10821 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_battery_time), 0x0,
10822 NULL, HFILL }
10824 { &hf_btmesh_generic_battery_status_time_to_charge,
10825 { "Time to Charge", "btmesh.model.generic_battery_status.time_to_charge",
10826 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_battery_time), 0x0,
10827 NULL, HFILL }
10829 { &hf_btmesh_generic_battery_status_flags_presence,
10830 { "Flags", "btmesh.model.generic_battery_status.flags.presence",
10831 FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_presence_vals), 0x03,
10832 NULL, HFILL }
10834 { &hf_btmesh_generic_battery_status_flags_indicator,
10835 { "Flags", "btmesh.model.generic_battery_status.flags.indicator",
10836 FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_indicator_vals), 0x0C,
10837 NULL, HFILL }
10839 { &hf_btmesh_generic_battery_status_flags_charging,
10840 { "Flags", "btmesh.model.generic_battery_status.flags.charging",
10841 FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_charging_vals), 0x30,
10842 NULL, HFILL }
10844 { &hf_btmesh_generic_battery_status_flags_serviceability,
10845 { "Flags", "btmesh.model.generic_battery_status.flags.serviceability",
10846 FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_serviceability_vals), 0xC0,
10847 NULL, HFILL }
10849 { &hf_btmesh_generic_location_local_status_local_north,
10850 { "Local North", "btmesh.model.generic_location_local_status.local_north",
10851 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10852 NULL, HFILL }
10854 { &hf_btmesh_generic_location_local_status_local_east,
10855 { "Local East", "btmesh.model.generic_location_local_status.local_east",
10856 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10857 NULL, HFILL }
10859 { &hf_btmesh_generic_location_local_status_local_altitude,
10860 { "Local Altitude", "btmesh.model.generic_location_local_status.local_altitude",
10861 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10862 NULL, HFILL }
10864 { &hf_btmesh_generic_location_local_status_floor_number,
10865 { "Floor Number", "btmesh.model.generic_location_local_status.floor_number",
10866 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10867 NULL, HFILL }
10869 { &hf_btmesh_generic_location_local_status_uncertainty_stationary,
10870 { "Stationary", "btmesh.model.generic_location_local_status.uncertainty.stationary",
10871 FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10872 NULL, HFILL }
10874 { &hf_btmesh_generic_location_local_status_uncertainty_rfu,
10875 { "RFU", "btmesh.model.generic_location_local_status.uncertainty.rfu",
10876 FT_UINT16, BASE_DEC, NULL, 0x00FE,
10877 NULL, HFILL }
10879 { &hf_btmesh_generic_location_local_status_uncertainty_update_time,
10880 { "Update Time", "btmesh.model.generic_location_local_status.uncertainty.update_time",
10881 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10882 NULL, HFILL }
10884 { &hf_btmesh_generic_location_local_status_uncertainty_precision,
10885 { "Precision", "btmesh.model.generic_location_local_status.uncertainty.precision",
10886 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10887 NULL, HFILL }
10889 { &hf_btmesh_generic_location_local_set_local_north,
10890 { "Local North", "btmesh.model.generic_location_local_set.local_north",
10891 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10892 NULL, HFILL }
10894 { &hf_btmesh_generic_location_local_set_local_east,
10895 { "Local East", "btmesh.model.generic_location_local_set.local_east",
10896 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10897 NULL, HFILL }
10899 { &hf_btmesh_generic_location_local_set_local_altitude,
10900 { "Local Altitude", "btmesh.model.generic_location_local_set.local_altitude",
10901 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10902 NULL, HFILL }
10904 { &hf_btmesh_generic_location_local_set_floor_number,
10905 { "Floor Number", "btmesh.model.generic_location_local_set.floor_number",
10906 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10907 NULL, HFILL }
10909 { &hf_btmesh_generic_location_local_set_uncertainty_stationary,
10910 { "Stationary", "btmesh.model.generic_location_local_set.uncertainty.stationary",
10911 FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10912 NULL, HFILL }
10914 { &hf_btmesh_generic_location_local_set_uncertainty_rfu,
10915 { "RFU", "btmesh.model.generic_location_local_set.uncertainty.rfu",
10916 FT_UINT16, BASE_DEC, NULL, 0x00FE,
10917 NULL, HFILL }
10919 { &hf_btmesh_generic_location_local_set_uncertainty_update_time,
10920 { "Update Time", "btmesh.model.generic_location_local_set.uncertainty.update_time",
10921 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10922 NULL, HFILL }
10924 { &hf_btmesh_generic_location_local_set_uncertainty_precision,
10925 { "Precision", "btmesh.model.generic_location_local_set.uncertainty.precision",
10926 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10927 NULL, HFILL }
10929 { &hf_btmesh_generic_location_local_set_unacknowledged_local_north,
10930 { "Local North", "btmesh.model.generic_location_local_set_unacknowledged.local_north",
10931 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10932 NULL, HFILL }
10934 { &hf_btmesh_generic_location_local_set_unacknowledged_local_east,
10935 { "Local East", "btmesh.model.generic_location_local_set_unacknowledged.local_east",
10936 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10937 NULL, HFILL }
10939 { &hf_btmesh_generic_location_local_set_unacknowledged_local_altitude,
10940 { "Local Altitude", "btmesh.model.generic_location_local_set_unacknowledged.local_altitude",
10941 FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10942 NULL, HFILL }
10944 { &hf_btmesh_generic_location_local_set_unacknowledged_floor_number,
10945 { "Floor Number", "btmesh.model.generic_location_local_set_unacknowledged.floor_number",
10946 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10947 NULL, HFILL }
10949 { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary,
10950 { "Stationary", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.stationary",
10951 FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10952 NULL, HFILL }
10954 { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu,
10955 { "RFU", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.rfu",
10956 FT_UINT16, BASE_DEC, NULL, 0x00FE,
10957 NULL, HFILL }
10959 { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time,
10960 { "Update Time", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.update_time",
10961 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10962 NULL, HFILL }
10964 { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision,
10965 { "Precision", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.precision",
10966 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10967 NULL, HFILL }
10969 { &hf_btmesh_scene_status_status_code,
10970 { "Status Code", "btmesh.model.scene_status.status_code",
10971 FT_UINT8, BASE_DEC, VALS(btmesh_scene_status_code_vals), 0x0,
10972 NULL, HFILL }
10974 { &hf_btmesh_scene_status_current_scene,
10975 { "Current Scene", "btmesh.model.scene_status.current_scene",
10976 FT_UINT16, BASE_DEC, NULL, 0x0,
10977 NULL, HFILL }
10979 { &hf_btmesh_scene_status_target_scene,
10980 { "Target Scene", "btmesh.model.scene_status.target_scene",
10981 FT_UINT16, BASE_DEC, NULL, 0x0,
10982 NULL, HFILL }
10984 { &hf_btmesh_scene_status_remaining_time,
10985 { "Remaining Time", "btmesh.model.scene_status.remaining_time",
10986 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10987 NULL, HFILL }
10989 { &hf_btmesh_scene_status_remaining_time_resolution,
10990 { "Step Resolution", "btmesh.model.scene_status.remaining_time.resolution",
10991 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10992 NULL, HFILL }
10994 { &hf_btmesh_scene_status_remaining_time_steps,
10995 { "Number of Steps", "btmesh.model.scene_status.remaining_time.steps",
10996 FT_UINT8, BASE_DEC, NULL, 0x3F,
10997 NULL, HFILL }
10999 { &hf_btmesh_scene_recall_scene_number,
11000 { "Scene Number", "btmesh.model.scene_recall.scene_number",
11001 FT_UINT16, BASE_DEC, NULL, 0x0,
11002 NULL, HFILL }
11004 { &hf_btmesh_scene_recall_tid,
11005 { "TID", "btmesh.model.scene_recall.tid",
11006 FT_UINT8, BASE_DEC, NULL, 0x0,
11007 NULL, HFILL }
11009 { &hf_btmesh_scene_recall_transition_time,
11010 { "Transition Time", "btmesh.model.scene_recall.transition_time",
11011 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11012 NULL, HFILL }
11014 { &hf_btmesh_scene_recall_transition_time_resolution,
11015 { "Step Resolution", "btmesh.model.scene_recall.transition_time.resolution",
11016 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11017 NULL, HFILL }
11019 { &hf_btmesh_scene_recall_transition_time_steps,
11020 { "Number of Steps", "btmesh.model.scene_recall.transition_time.steps",
11021 FT_UINT8, BASE_DEC, NULL, 0x3F,
11022 NULL, HFILL }
11024 { &hf_btmesh_scene_recall_delay,
11025 { "Delay", "btmesh.model.scene_recall.delay",
11026 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11027 NULL, HFILL }
11029 { &hf_btmesh_scene_recall_unacknowledged_scene_number,
11030 { "Scene Number", "btmesh.model.scene_recall_unacknowledged.scene_number",
11031 FT_UINT16, BASE_DEC, NULL, 0x0,
11032 NULL, HFILL }
11034 { &hf_btmesh_scene_recall_unacknowledged_tid,
11035 { "TID", "btmesh.model.scene_recall_unacknowledged.tid",
11036 FT_UINT8, BASE_DEC, NULL, 0x0,
11037 NULL, HFILL }
11039 { &hf_btmesh_scene_recall_unacknowledged_transition_time,
11040 { "Transition Time", "btmesh.model.scene_recall_unacknowledged.transition_time",
11041 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11042 NULL, HFILL }
11044 { &hf_btmesh_scene_recall_unacknowledged_transition_time_resolution,
11045 { "Step Resolution", "btmesh.model.scene_recall_unacknowledged.transition_time.resolution",
11046 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11047 NULL, HFILL }
11049 { &hf_btmesh_scene_recall_unacknowledged_transition_time_steps,
11050 { "Number of Steps", "btmesh.model.scene_recall_unacknowledged.transition_time.steps",
11051 FT_UINT8, BASE_DEC, NULL, 0x3F,
11052 NULL, HFILL }
11054 { &hf_btmesh_scene_recall_unacknowledged_delay,
11055 { "Delay", "btmesh.model.scene_recall_unacknowledged.delay",
11056 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11057 NULL, HFILL }
11059 { &hf_btmesh_scene_register_status_status_code,
11060 { "Status Code", "btmesh.model.scene_register_status.status_code",
11061 FT_UINT8, BASE_DEC, VALS(btmesh_scene_status_code_vals), 0x0,
11062 NULL, HFILL }
11064 { &hf_btmesh_scene_register_status_current_scene,
11065 { "Current Scene", "btmesh.model.scene_register_status.current_scene",
11066 FT_UINT16, BASE_DEC, NULL, 0x0,
11067 NULL, HFILL }
11069 { &hf_btmesh_scene_register_status_scene,
11070 { "Scene", "btmesh.model.scene_register_status.scene",
11071 FT_UINT16, BASE_DEC, NULL, 0x0,
11072 NULL, HFILL }
11074 { &hf_btmesh_scene_store_scene_number,
11075 { "Scene Number", "btmesh.model.scene_store.scene_number",
11076 FT_UINT16, BASE_DEC, NULL, 0x0,
11077 NULL, HFILL }
11079 { &hf_btmesh_scene_store_unacknowledged_scene_number,
11080 { "Scene Number", "btmesh.model.scene_store_unacknowledged.scene_number",
11081 FT_UINT16, BASE_DEC, NULL, 0x0,
11082 NULL, HFILL }
11084 { &hf_btmesh_scene_delete_scene_number,
11085 { "Scene Number", "btmesh.model.scene_delete.scene_number",
11086 FT_UINT16, BASE_DEC, NULL, 0x0,
11087 NULL, HFILL }
11089 { &hf_btmesh_scene_delete_unacknowledged_scene_number,
11090 { "Scene Number", "btmesh.model.scene_delete_unacknowledged.scene_number",
11091 FT_UINT16, BASE_DEC, NULL, 0x0,
11092 NULL, HFILL }
11094 { &hf_btmesh_time_set_tai_seconds,
11095 { "TAI Seconds", "btmesh.model.time_set.tai_seconds",
11096 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11097 NULL, HFILL }
11099 { &hf_btmesh_time_set_subsecond,
11100 { "Subsecond", "btmesh.model.time_set.subsecond",
11101 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_subsecond_ms), 0x0,
11102 NULL, HFILL }
11104 { &hf_btmesh_time_set_uncertainty,
11105 { "Uncertainty", "btmesh.model.time_set.uncertainty",
11106 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_uncertainty_ms), 0x0,
11107 NULL, HFILL }
11109 { &hf_btmesh_time_set_time_authority,
11110 { "Time Authority", "btmesh.model.time_set.time_authority",
11111 FT_UINT16, BASE_DEC, VALS(btmesh_time_authority_vals), 0x0001,
11112 NULL, HFILL }
11114 { &hf_btmesh_time_set_tai_utc_delta,
11115 { "TAI-UTC Delta", "btmesh.model.time_set.tai_utc_delta",
11116 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0xFFFE,
11117 NULL, HFILL }
11119 { &hf_btmesh_time_set_time_zone_offset,
11120 { "Time Zone Offset", "btmesh.model.time_set.time_zone_offset",
11121 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11122 NULL, HFILL }
11124 { &hf_btmesh_time_status_tai_seconds,
11125 { "TAI Seconds", "btmesh.model.time_status.tai_seconds",
11126 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11127 NULL, HFILL }
11129 { &hf_btmesh_time_status_subsecond,
11130 { "Subsecond", "btmesh.model.time_status.subsecond",
11131 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_subsecond_ms), 0x0,
11132 NULL, HFILL }
11134 { &hf_btmesh_time_status_uncertainty,
11135 { "Uncertainty", "btmesh.model.time_status.uncertainty",
11136 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_uncertainty_ms), 0x0,
11137 NULL, HFILL }
11139 { &hf_btmesh_time_status_time_authority,
11140 { "Time Authority", "btmesh.model.time_status.time_authority",
11141 FT_UINT16, BASE_DEC, VALS(btmesh_time_authority_vals), 0x0001,
11142 NULL, HFILL }
11144 { &hf_btmesh_time_status_tai_utc_delta,
11145 { "TAI-UTC Delta", "btmesh.model.time_status.tai_utc_delta",
11146 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0xFFFE,
11147 NULL, HFILL }
11149 { &hf_btmesh_time_status_time_zone_offset,
11150 { "Time Zone Offset", "btmesh.model.time_status.time_zone_offset",
11151 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11152 NULL, HFILL }
11154 { &hf_btmesh_scheduler_schedule_register_month_january,
11155 { "January", "btmesh.model.schedule_register.month.january",
11156 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00000800,
11157 NULL, HFILL }
11159 { &hf_btmesh_scheduler_schedule_register_month_february,
11160 { "February", "btmesh.model.schedule_register.month.february",
11161 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00001000,
11162 NULL, HFILL }
11164 { &hf_btmesh_scheduler_schedule_register_month_march,
11165 { "March", "btmesh.model.schedule_register.month.march",
11166 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00002000,
11167 NULL, HFILL }
11169 { &hf_btmesh_scheduler_schedule_register_month_april,
11170 { "April", "btmesh.model.schedule_register.month.april",
11171 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00004000,
11172 NULL, HFILL }
11174 { &hf_btmesh_scheduler_schedule_register_month_may,
11175 { "May", "btmesh.model.schedule_register.month.may",
11176 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00008000,
11177 NULL, HFILL }
11179 { &hf_btmesh_scheduler_schedule_register_month_june,
11180 { "June", "btmesh.model.schedule_register.month.june",
11181 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00010000,
11182 NULL, HFILL }
11184 { &hf_btmesh_scheduler_schedule_register_month_july,
11185 { "July", "btmesh.model.schedule_register.month.july",
11186 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00020000,
11187 NULL, HFILL }
11189 { &hf_btmesh_scheduler_schedule_register_month_august,
11190 { "August", "btmesh.model.schedule_register.month.august",
11191 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00040000,
11192 NULL, HFILL }
11194 { &hf_btmesh_scheduler_schedule_register_month_september,
11195 { "September", "btmesh.model.schedule_register.month.september",
11196 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00080000,
11197 NULL, HFILL }
11199 { &hf_btmesh_scheduler_schedule_register_month_october,
11200 { "October", "btmesh.model.schedule_register.month.october",
11201 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00100000,
11202 NULL, HFILL }
11204 { &hf_btmesh_scheduler_schedule_register_month_november,
11205 { "November", "btmesh.model.schedule_register.month.november",
11206 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00200000,
11207 NULL, HFILL }
11209 { &hf_btmesh_scheduler_schedule_register_month_december,
11210 { "December", "btmesh.model.schedule_register.month.december",
11211 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00400000,
11212 NULL, HFILL }
11214 { &hf_btmesh_scheduler_schedule_register_day_of_week_monday,
11215 { "Monday", "btmesh.model.schedule_register.day_of_week.monday",
11216 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00200000,
11217 NULL, HFILL }
11219 { &hf_btmesh_scheduler_schedule_register_day_of_week_tuesday,
11220 { "Tuesday", "btmesh.model.schedule_register.day_of_week.tuesday",
11221 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00400000,
11222 NULL, HFILL }
11224 { &hf_btmesh_scheduler_schedule_register_day_of_week_wednesday,
11225 { "Wednesday", "btmesh.model.schedule_register.day_of_week.wednesday",
11226 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00800000,
11227 NULL, HFILL }
11229 { &hf_btmesh_scheduler_schedule_register_day_of_week_thursday,
11230 { "Thursday", "btmesh.model.schedule_register.day_of_week.thursday",
11231 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x01000000,
11232 NULL, HFILL }
11234 { &hf_btmesh_scheduler_schedule_register_day_of_week_friday,
11235 { "Friday", "btmesh.model.schedule_register.day_of_week.friday",
11236 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x02000000,
11237 NULL, HFILL }
11239 { &hf_btmesh_scheduler_schedule_register_day_of_week_saturday,
11240 { "Saturday", "btmesh.model.schedule_register.day_of_week.saturday",
11241 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x04000000,
11242 NULL, HFILL }
11244 { &hf_btmesh_scheduler_schedule_register_day_of_week_sunday,
11245 { "Sunday", "btmesh.model.schedule_register.day_of_week.sunday",
11246 FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x08000000,
11247 NULL, HFILL }
11249 { &hf_btmesh_scheduler_action_status_index,
11250 { "Index", "btmesh.model.scheduler_action_status.index",
11251 FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11252 NULL, HFILL }
11254 { &hf_btmesh_scheduler_action_status_schedule_register_year,
11255 { "Year", "btmesh.model.scheduler_action_status.schedule_register.year",
11256 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11257 NULL, HFILL }
11259 { &hf_btmesh_scheduler_action_status_schedule_register_month,
11260 { "Month", "btmesh.model.scheduler_action_status.schedule_register.month",
11261 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11262 NULL, HFILL }
11264 { &hf_btmesh_scheduler_action_status_schedule_register_day,
11265 { "Day", "btmesh.model.scheduler_action_status.schedule_register.day",
11266 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11267 NULL, HFILL }
11269 { &hf_btmesh_scheduler_action_status_schedule_register_hour,
11270 { "Hour", "btmesh.model.scheduler_action_status.schedule_register.hour",
11271 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11272 NULL, HFILL }
11274 { &hf_btmesh_scheduler_action_status_schedule_register_minute,
11275 { "Minute", "btmesh.model.scheduler_action_status.schedule_register.minute",
11276 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11277 NULL, HFILL }
11279 { &hf_btmesh_scheduler_action_status_schedule_register_second,
11280 { "Second", "btmesh.model.scheduler_action_status.schedule_register.second",
11281 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11282 NULL, HFILL }
11284 { &hf_btmesh_scheduler_action_status_schedule_register_day_of_week,
11285 { "DayOfWeek", "btmesh.model.scheduler_action_status.schedule_register.day_of_week",
11286 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11287 NULL, HFILL }
11289 { &hf_btmesh_scheduler_action_status_schedule_register_action,
11290 { "Action", "btmesh.model.scheduler_action_status.schedule_register.action",
11291 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11292 NULL, HFILL }
11294 { &hf_btmesh_scheduler_action_status_schedule_register_transition_time,
11295 { "Transition Time", "btmesh.model.scheduler_action_status.schedule_register.transition_time",
11296 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11297 NULL, HFILL }
11299 { &hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution,
11300 { "Step Resolution", "btmesh.model.scheduler_action_status.schedule_register.transition_time.resolution",
11301 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11302 NULL, HFILL }
11304 { &hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps,
11305 { "Number of Steps", "btmesh.model.scheduler_action_status.schedule_register.transition_time.steps",
11306 FT_UINT8, BASE_DEC, NULL, 0x3F,
11307 NULL, HFILL }
11309 { &hf_btmesh_scheduler_action_status_schedule_register_scene_number,
11310 { "Scene Number", "btmesh.model.scheduler_action_status.schedule_register.scene_number",
11311 FT_UINT16, BASE_HEX, NULL, 0x0,
11312 NULL, HFILL }
11314 { &hf_btmesh_scheduler_action_set_index,
11315 { "Index", "btmesh.model.scheduler_action_set.index",
11316 FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11317 NULL, HFILL }
11319 { &hf_btmesh_scheduler_action_set_schedule_register_year,
11320 { "Year", "btmesh.model.scheduler_action_set.schedule_register.year",
11321 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11322 NULL, HFILL }
11324 { &hf_btmesh_scheduler_action_set_schedule_register_month,
11325 { "Month", "btmesh.model.scheduler_action_set.schedule_register.month",
11326 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11327 NULL, HFILL }
11329 { &hf_btmesh_scheduler_action_set_schedule_register_day,
11330 { "Day", "btmesh.model.scheduler_action_set.schedule_register.day",
11331 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11332 NULL, HFILL }
11334 { &hf_btmesh_scheduler_action_set_schedule_register_hour,
11335 { "Hour", "btmesh.model.scheduler_action_set.schedule_register.hour",
11336 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11337 NULL, HFILL }
11339 { &hf_btmesh_scheduler_action_set_schedule_register_minute,
11340 { "Minute", "btmesh.model.scheduler_action_set.schedule_register.minute",
11341 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11342 NULL, HFILL }
11344 { &hf_btmesh_scheduler_action_set_schedule_register_second,
11345 { "Second", "btmesh.model.scheduler_action_set.schedule_register.second",
11346 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11347 NULL, HFILL }
11349 { &hf_btmesh_scheduler_action_set_schedule_register_day_of_week,
11350 { "DayOfWeek", "btmesh.model.scheduler_action_set.schedule_register.day_of_week",
11351 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11352 NULL, HFILL }
11354 { &hf_btmesh_scheduler_action_set_schedule_register_action,
11355 { "Action", "btmesh.model.scheduler_action_set.schedule_register.action",
11356 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11357 NULL, HFILL }
11359 { &hf_btmesh_scheduler_action_set_schedule_register_transition_time,
11360 { "Transition Time", "btmesh.model.scheduler_action_set.schedule_register.transition_time",
11361 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11362 NULL, HFILL }
11364 { &hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution,
11365 { "Step Resolution", "btmesh.model.scheduler_action_set.schedule_register.transition_time.resolution",
11366 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11367 NULL, HFILL }
11369 { &hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps,
11370 { "Number of Steps", "btmesh.model.scheduler_action_set.schedule_register.transition_time.steps",
11371 FT_UINT8, BASE_DEC, NULL, 0x3F,
11372 NULL, HFILL }
11374 { &hf_btmesh_scheduler_action_set_schedule_register_scene_number,
11375 { "Scene Number", "btmesh.model.scheduler_action_set.schedule_register.scene_number",
11376 FT_UINT16, BASE_HEX, NULL, 0x0,
11377 NULL, HFILL }
11379 { &hf_btmesh_scheduler_action_set_unacknowledged_index,
11380 { "Index", "btmesh.model.scheduler_action_set_unacknowledged.index",
11381 FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11382 NULL, HFILL }
11384 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year,
11385 { "Year", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.year",
11386 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11387 NULL, HFILL }
11389 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month,
11390 { "Month", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.month",
11391 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11392 NULL, HFILL }
11394 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day,
11395 { "Day", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.day",
11396 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11397 NULL, HFILL }
11399 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour,
11400 { "Hour", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.hour",
11401 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11402 NULL, HFILL }
11404 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute,
11405 { "Minute", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.minute",
11406 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11407 NULL, HFILL }
11409 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second,
11410 { "Second", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.second",
11411 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11412 NULL, HFILL }
11414 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day_of_week,
11415 { "DayOfWeek", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.day_of_week",
11416 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11417 NULL, HFILL }
11419 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action,
11420 { "Action", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.action",
11421 FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11422 NULL, HFILL }
11424 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time,
11425 { "Transition Time", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time",
11426 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11427 NULL, HFILL }
11429 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution,
11430 { "Step Resolution", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time.resolution",
11431 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11432 NULL, HFILL }
11434 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps,
11435 { "Number of Steps", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time.steps",
11436 FT_UINT8, BASE_DEC, NULL, 0x3F,
11437 NULL, HFILL }
11439 { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number,
11440 { "Scene Number", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.scene_number",
11441 FT_UINT16, BASE_HEX, NULL, 0x0,
11442 NULL, HFILL }
11444 { &hf_btmesh_time_role_set_time_role,
11445 { "Time Role", "btmesh.model.time_role_set.time_role",
11446 FT_UINT8, BASE_DEC, VALS(btmesh_time_role_vals), 0x0,
11447 NULL, HFILL }
11449 { &hf_btmesh_time_role_status_time_role,
11450 { "Time Role", "btmesh.model.time_role_status.time_role",
11451 FT_UINT8, BASE_DEC, VALS(btmesh_time_role_vals), 0x0,
11452 NULL, HFILL }
11454 { &hf_btmesh_time_zone_set_time_zone_offset_new,
11455 { "Time Zone Offset New", "btmesh.model.time_zone_set.time_zone_offset_new",
11456 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11457 NULL, HFILL }
11459 { &hf_btmesh_time_zone_set_tai_of_zone_change,
11460 { "TAI of Zone Change", "btmesh.model.time_zone_set.tai_of_zone_change",
11461 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11462 NULL, HFILL }
11464 { &hf_btmesh_time_zone_status_time_zone_offset_current,
11465 { "Time Zone Offset Current", "btmesh.model.time_zone_status.time_zone_offset_current",
11466 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11467 NULL, HFILL }
11469 { &hf_btmesh_time_zone_status_time_zone_offset_new,
11470 { "Time Zone Offset New", "btmesh.model.time_zone_status.time_zone_offset_new",
11471 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11472 NULL, HFILL }
11474 { &hf_btmesh_time_zone_status_tai_of_zone_change,
11475 { "TAI of Zone Change", "btmesh.model.time_zone_status.tai_of_zone_change",
11476 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11477 NULL, HFILL }
11479 { &hf_btmesh_tai_utc_delta_set_tai_utc_delta_new,
11480 { "TAI-UTC Delta New", "btmesh.model.tai_utc_delta_set.tai_utc_delta_new",
11481 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11482 NULL, HFILL }
11484 { &hf_btmesh_tai_utc_delta_set_padding,
11485 { "Padding", "btmesh.model.tai_utc_delta_set.padding",
11486 FT_UINT16, BASE_DEC, NULL, 0x8000,
11487 NULL, HFILL }
11489 { &hf_btmesh_tai_utc_delta_set_tai_of_delta_change,
11490 { "TAI of Delta Change", "btmesh.model.tai_utc_delta_set.tai_of_delta_change",
11491 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11492 NULL, HFILL }
11494 { &hf_btmesh_tai_utc_delta_status_tai_utc_delta_current,
11495 { "TAI-UTC Delta Current", "btmesh.model.tai_utc_delta_status.tai_utc_delta_current",
11496 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11497 NULL, HFILL }
11499 { &hf_btmesh_tai_utc_delta_status_padding_1,
11500 { "Padding 1", "btmesh.model.tai_utc_delta_status.padding_1",
11501 FT_UINT16, BASE_DEC, NULL, 0x8000,
11502 NULL, HFILL }
11504 { &hf_btmesh_tai_utc_delta_status_tai_utc_delta_new,
11505 { "TAI-UTC Delta New", "btmesh.model.tai_utc_delta_status.tai_utc_delta_new",
11506 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11507 NULL, HFILL }
11509 { &hf_btmesh_tai_utc_delta_status_padding_2,
11510 { "Padding 2", "btmesh.model.tai_utc_delta_status.padding_2",
11511 FT_UINT16, BASE_DEC, NULL, 0x8000,
11512 NULL, HFILL }
11514 { &hf_btmesh_tai_utc_delta_status_tai_of_delta_change,
11515 { "TAI of Delta Change", "btmesh.model.tai_utc_delta_status.tai_of_delta_change",
11516 FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11517 NULL, HFILL }
11519 { &hf_btmesh_scheduler_action_get_index,
11520 { "Index", "btmesh.model.scheduler_action_get.index",
11521 FT_UINT8, BASE_DEC, NULL, 0x0,
11522 NULL, HFILL }
11524 { &hf_btmesh_scheduler_status_schedules,
11525 { "Schedules", "btmesh.model.scheduler_status.schedules",
11526 FT_UINT16, BASE_HEX, NULL, 0x0,
11527 NULL, HFILL }
11529 { &hf_btmesh_scheduler_status_schedules_schedule_0,
11530 { "Schedule 0", "btmesh.model.scheduler_status.schedules.schedule_0",
11531 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0001,
11532 NULL, HFILL }
11534 { &hf_btmesh_scheduler_status_schedules_schedule_1,
11535 { "Schedule 1", "btmesh.model.scheduler_status.schedules.schedule_1",
11536 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0002,
11537 NULL, HFILL }
11539 { &hf_btmesh_scheduler_status_schedules_schedule_2,
11540 { "Schedule 2", "btmesh.model.scheduler_status.schedules.schedule_2",
11541 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0004,
11542 NULL, HFILL }
11544 { &hf_btmesh_scheduler_status_schedules_schedule_3,
11545 { "Schedule 3", "btmesh.model.scheduler_status.schedules.schedule_3",
11546 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0008,
11547 NULL, HFILL }
11549 { &hf_btmesh_scheduler_status_schedules_schedule_4,
11550 { "Schedule 4", "btmesh.model.scheduler_status.schedules.schedule_4",
11551 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0010,
11552 NULL, HFILL }
11554 { &hf_btmesh_scheduler_status_schedules_schedule_5,
11555 { "Schedule 5", "btmesh.model.scheduler_status.schedules.schedule_5",
11556 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0020,
11557 NULL, HFILL }
11559 { &hf_btmesh_scheduler_status_schedules_schedule_6,
11560 { "Schedule 6", "btmesh.model.scheduler_status.schedules.schedule_6",
11561 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0040,
11562 NULL, HFILL }
11564 { &hf_btmesh_scheduler_status_schedules_schedule_7,
11565 { "Schedule 7", "btmesh.model.scheduler_status.schedules.schedule_7",
11566 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0080,
11567 NULL, HFILL }
11569 { &hf_btmesh_scheduler_status_schedules_schedule_8,
11570 { "Schedule 8", "btmesh.model.scheduler_status.schedules.schedule_8",
11571 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0100,
11572 NULL, HFILL }
11574 { &hf_btmesh_scheduler_status_schedules_schedule_9,
11575 { "Schedule 9", "btmesh.model.scheduler_status.schedules.schedule_9",
11576 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0200,
11577 NULL, HFILL }
11579 { &hf_btmesh_scheduler_status_schedules_schedule_10,
11580 { "Schedule 10", "btmesh.model.scheduler_status.schedules.schedule_10",
11581 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0400,
11582 NULL, HFILL }
11584 { &hf_btmesh_scheduler_status_schedules_schedule_11,
11585 { "Schedule 11", "btmesh.model.scheduler_status.schedules.schedule_11",
11586 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0800,
11587 NULL, HFILL }
11589 { &hf_btmesh_scheduler_status_schedules_schedule_12,
11590 { "Schedule 12", "btmesh.model.scheduler_status.schedules.schedule_12",
11591 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x1000,
11592 NULL, HFILL }
11594 { &hf_btmesh_scheduler_status_schedules_schedule_13,
11595 { "Schedule 13", "btmesh.model.scheduler_status.schedules.schedule_13",
11596 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x2000,
11597 NULL, HFILL }
11599 { &hf_btmesh_scheduler_status_schedules_schedule_14,
11600 { "Schedule 14", "btmesh.model.scheduler_status.schedules.schedule_14",
11601 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x4000,
11602 NULL, HFILL }
11604 { &hf_btmesh_scheduler_status_schedules_schedule_15,
11605 { "Schedule 15", "btmesh.model.scheduler_status.schedules.schedule_15",
11606 FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x8000,
11607 NULL, HFILL }
11609 { &hf_btmesh_light_lc_property_set_light_lc_property_id,
11610 { "Light LC Property ID", "btmesh.model.light_lc_property_set.light_lc_property_id",
11611 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11612 NULL, HFILL }
11614 { &hf_btmesh_light_lc_property_set_light_lc_property_value,
11615 { "Light LC Property Value", "btmesh.model.light_lc_property_set.light_lc_property_value",
11616 FT_BYTES, BASE_NONE, NULL, 0x0,
11617 NULL, HFILL }
11619 { &hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id,
11620 { "Light LC Property ID", "btmesh.model.light_lc_property_set_unacknowledged.light_lc_property_id",
11621 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11622 NULL, HFILL }
11624 { &hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_value,
11625 { "Light LC Property Value", "btmesh.model.light_lc_property_set_unacknowledged.light_lc_property_value",
11626 FT_BYTES, BASE_NONE, NULL, 0x0,
11627 NULL, HFILL }
11629 { &hf_btmesh_light_lc_property_status_light_lc_property_id,
11630 { "Light LC Property ID", "btmesh.model.light_lc_property_status.light_lc_property_id",
11631 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11632 NULL, HFILL }
11634 { &hf_btmesh_light_lc_property_status_light_lc_property_value,
11635 { "Light LC Property Value", "btmesh.model.light_lc_property_status.light_lc_property_value",
11636 FT_BYTES, BASE_NONE, NULL, 0x0,
11637 NULL, HFILL }
11639 { &hf_btmesh_light_lightness_set_lightness,
11640 { "Lightness", "btmesh.model.light_lightness_set.lightness",
11641 FT_UINT16, BASE_DEC, NULL, 0x0,
11642 NULL, HFILL }
11644 { &hf_btmesh_light_lightness_set_tid,
11645 { "TID", "btmesh.model.light_lightness_set.tid",
11646 FT_UINT8, BASE_DEC, NULL, 0x0,
11647 NULL, HFILL }
11649 { &hf_btmesh_light_lightness_set_transition_time,
11650 { "Transition Time", "btmesh.model.light_lightness_set.transition_time",
11651 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11652 NULL, HFILL }
11654 { &hf_btmesh_light_lightness_set_transition_time_resolution,
11655 { "Step Resolution", "btmesh.model.light_lightness_set.transition_time.resolution",
11656 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11657 NULL, HFILL }
11659 { &hf_btmesh_light_lightness_set_transition_time_steps,
11660 { "Number of Steps", "btmesh.model.light_lightness_set.transition_time.steps",
11661 FT_UINT8, BASE_DEC, NULL, 0x3F,
11662 NULL, HFILL }
11664 { &hf_btmesh_light_lightness_set_delay,
11665 { "Delay", "btmesh.model.light_lightness_set.delay",
11666 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11667 NULL, HFILL }
11669 { &hf_btmesh_light_lightness_set_unacknowledged_lightness,
11670 { "Lightness", "btmesh.model.light_lightness_set_unacknowledged.lightness",
11671 FT_UINT16, BASE_DEC, NULL, 0x0,
11672 NULL, HFILL }
11674 { &hf_btmesh_light_lightness_set_unacknowledged_tid,
11675 { "TID", "btmesh.model.light_lightness_set_unacknowledged.tid",
11676 FT_UINT8, BASE_DEC, NULL, 0x0,
11677 NULL, HFILL }
11679 { &hf_btmesh_light_lightness_set_unacknowledged_transition_time,
11680 { "Transition Time", "btmesh.model.light_lightness_set_unacknowledged.transition_time",
11681 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11682 NULL, HFILL }
11684 { &hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution,
11685 { "Step Resolution", "btmesh.model.light_lightness_set_unacknowledged.transition_time.resolution",
11686 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11687 NULL, HFILL }
11689 { &hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps,
11690 { "Number of Steps", "btmesh.model.light_lightness_set_unacknowledged.transition_time.steps",
11691 FT_UINT8, BASE_DEC, NULL, 0x3F,
11692 NULL, HFILL }
11694 { &hf_btmesh_light_lightness_set_unacknowledged_delay,
11695 { "Delay", "btmesh.model.light_lightness_set_unacknowledged.delay",
11696 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11697 NULL, HFILL }
11699 { &hf_btmesh_light_lightness_status_present_lightness,
11700 { "Present Lightness", "btmesh.model.light_lightness_status.present_lightness",
11701 FT_UINT16, BASE_DEC, NULL, 0x0,
11702 NULL, HFILL }
11704 { &hf_btmesh_light_lightness_status_target_lightness,
11705 { "Target Lightness", "btmesh.model.light_lightness_status.target_lightness",
11706 FT_UINT16, BASE_DEC, NULL, 0x0,
11707 NULL, HFILL }
11709 { &hf_btmesh_light_lightness_status_remaining_time,
11710 { "Remaining Time", "btmesh.model.light_lightness_status.remaining_time",
11711 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11712 NULL, HFILL }
11714 { &hf_btmesh_light_lightness_status_remaining_time_resolution,
11715 { "Step Resolution", "btmesh.model.light_lightness_status.remaining_time.resolution",
11716 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11717 NULL, HFILL }
11719 { &hf_btmesh_light_lightness_status_remaining_time_steps,
11720 { "Number of Steps", "btmesh.model.light_lightness_status.remaining_time.steps",
11721 FT_UINT8, BASE_DEC, NULL, 0x3F,
11722 NULL, HFILL }
11724 { &hf_btmesh_light_lightness_linear_set_lightness,
11725 { "Lightness", "btmesh.model.light_lightness_linear_set.lightness",
11726 FT_UINT16, BASE_DEC, NULL, 0x0,
11727 NULL, HFILL }
11729 { &hf_btmesh_light_lightness_linear_set_tid,
11730 { "TID", "btmesh.model.light_lightness_linear_set.tid",
11731 FT_UINT8, BASE_DEC, NULL, 0x0,
11732 NULL, HFILL }
11734 { &hf_btmesh_light_lightness_linear_set_transition_time,
11735 { "Transition Time", "btmesh.model.light_lightness_linear_set.transition_time",
11736 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11737 NULL, HFILL }
11739 { &hf_btmesh_light_lightness_linear_set_transition_time_resolution,
11740 { "Step Resolution", "btmesh.model.light_lightness_linear_set.transition_time.resolution",
11741 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11742 NULL, HFILL }
11744 { &hf_btmesh_light_lightness_linear_set_transition_time_steps,
11745 { "Number of Steps", "btmesh.model.light_lightness_linear_set.transition_time.steps",
11746 FT_UINT8, BASE_DEC, NULL, 0x3F,
11747 NULL, HFILL }
11749 { &hf_btmesh_light_lightness_linear_set_delay,
11750 { "Delay", "btmesh.model.light_lightness_linear_set.delay",
11751 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11752 NULL, HFILL }
11754 { &hf_btmesh_light_lightness_linear_set_unacknowledged_lightness,
11755 { "Lightness", "btmesh.model.light_lightness_linear_set_unacknowledged.lightness",
11756 FT_UINT16, BASE_DEC, NULL, 0x0,
11757 NULL, HFILL }
11759 { &hf_btmesh_light_lightness_linear_set_unacknowledged_tid,
11760 { "TID", "btmesh.model.light_lightness_linear_set_unacknowledged.tid",
11761 FT_UINT8, BASE_DEC, NULL, 0x0,
11762 NULL, HFILL }
11764 { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time,
11765 { "Transition Time", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time",
11766 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11767 NULL, HFILL }
11769 { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution,
11770 { "Step Resolution", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time.resolution",
11771 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11772 NULL, HFILL }
11774 { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps,
11775 { "Number of Steps", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time.steps",
11776 FT_UINT8, BASE_DEC, NULL, 0x3F,
11777 NULL, HFILL }
11779 { &hf_btmesh_light_lightness_linear_set_unacknowledged_delay,
11780 { "Delay", "btmesh.model.light_lightness_linear_set_unacknowledged.delay",
11781 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11782 NULL, HFILL }
11784 { &hf_btmesh_light_lightness_linear_status_present_lightness,
11785 { "Present Lightness", "btmesh.model.light_lightness_linear_status.present_lightness",
11786 FT_UINT16, BASE_DEC, NULL, 0x0,
11787 NULL, HFILL }
11789 { &hf_btmesh_light_lightness_linear_status_target_lightness,
11790 { "Target Lightness", "btmesh.model.light_lightness_linear_status.target_lightness",
11791 FT_UINT16, BASE_DEC, NULL, 0x0,
11792 NULL, HFILL }
11794 { &hf_btmesh_light_lightness_linear_status_remaining_time,
11795 { "Remaining Time", "btmesh.model.light_lightness_linear_status.remaining_time",
11796 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11797 NULL, HFILL }
11799 { &hf_btmesh_light_lightness_linear_status_remaining_time_resolution,
11800 { "Step Resolution", "btmesh.model.light_lightness_linear_status.remaining_time.resolution",
11801 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11802 NULL, HFILL }
11804 { &hf_btmesh_light_lightness_linear_status_remaining_time_steps,
11805 { "Number of Steps", "btmesh.model.light_lightness_linear_status.remaining_time.steps",
11806 FT_UINT8, BASE_DEC, NULL, 0x3F,
11807 NULL, HFILL }
11809 { &hf_btmesh_light_lightness_last_status_lightness,
11810 { "Lightness", "btmesh.model.light_lightness_last_status.lightness",
11811 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11812 NULL, HFILL }
11814 { &hf_btmesh_light_lightness_default_status_lightness,
11815 { "Lightness", "btmesh.model.light_lightness_default_status.lightness",
11816 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11817 NULL, HFILL }
11819 { &hf_btmesh_light_lightness_range_status_status_code,
11820 { "Status Code", "btmesh.model.light_lightness_range_status.status_code",
11821 FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
11822 NULL, HFILL }
11824 { &hf_btmesh_light_lightness_range_status_range_min,
11825 { "Range Min", "btmesh.model.light_lightness_range_status.range_min",
11826 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11827 NULL, HFILL }
11829 { &hf_btmesh_light_lightness_range_status_range_max,
11830 { "Range Max", "btmesh.model.light_lightness_range_status.range_max",
11831 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11832 NULL, HFILL }
11834 { &hf_btmesh_light_lightness_default_set_lightness,
11835 { "Lightness", "btmesh.model.light_lightness_default_set.lightness",
11836 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11837 NULL, HFILL }
11839 { &hf_btmesh_light_lightness_default_set_unacknowledged_lightness,
11840 { "Lightness", "btmesh.model.light_lightness_default_set_unacknowledged.lightness",
11841 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11842 NULL, HFILL }
11844 { &hf_btmesh_light_lightness_range_set_range_min,
11845 { "Range Min", "btmesh.model.light_lightness_range_set.range_min",
11846 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11847 NULL, HFILL }
11849 { &hf_btmesh_light_lightness_range_set_range_max,
11850 { "Range Max", "btmesh.model.light_lightness_range_set.range_max",
11851 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11852 NULL, HFILL }
11854 { &hf_btmesh_light_lightness_range_set_unacknowledged_range_min,
11855 { "Range Min", "btmesh.model.light_lightness_range_set_unacknowledged.range_min",
11856 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11857 NULL, HFILL }
11859 { &hf_btmesh_light_lightness_range_set_unacknowledged_range_max,
11860 { "Range Max", "btmesh.model.light_lightness_range_set_unacknowledged.range_max",
11861 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11862 NULL, HFILL }
11864 { &hf_btmesh_light_ctl_set_ctl_lightness,
11865 { "CTL Lightness", "btmesh.model.light_ctl_set.ctl_lightness",
11866 FT_UINT16, BASE_DEC, NULL, 0x0,
11867 NULL, HFILL }
11869 { &hf_btmesh_light_ctl_set_ctl_temperature,
11870 { "CTL Temperature", "btmesh.model.light_ctl_set.ctl_temperature",
11871 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11872 NULL, HFILL }
11874 { &hf_btmesh_light_ctl_set_ctl_delta_uv,
11875 { "CTL Delta UV", "btmesh.model.light_ctl_set.ctl_delta_uv",
11876 FT_INT16, BASE_DEC, NULL, 0x0,
11877 NULL, HFILL }
11879 { &hf_btmesh_light_ctl_set_tid,
11880 { "TID", "btmesh.model.light_ctl_set.tid",
11881 FT_UINT8, BASE_DEC, NULL, 0x0,
11882 NULL, HFILL }
11884 { &hf_btmesh_light_ctl_set_transition_time,
11885 { "Transition Time", "btmesh.model.light_ctl_set.transition_time",
11886 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11887 NULL, HFILL }
11889 { &hf_btmesh_light_ctl_set_transition_time_resolution,
11890 { "Step Resolution", "btmesh.model.light_ctl_set.transition_time.resolution",
11891 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11892 NULL, HFILL }
11894 { &hf_btmesh_light_ctl_set_transition_time_steps,
11895 { "Number of Steps", "btmesh.model.light_ctl_set.transition_time.steps",
11896 FT_UINT8, BASE_DEC, NULL, 0x3F,
11897 NULL, HFILL }
11899 { &hf_btmesh_light_ctl_set_delay,
11900 { "Delay", "btmesh.model.light_ctl_set.delay",
11901 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11902 NULL, HFILL }
11904 { &hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness,
11905 { "CTL Lightness", "btmesh.model.light_ctl_set_unacknowledged.ctl_lightness",
11906 FT_UINT16, BASE_DEC, NULL, 0x0,
11907 NULL, HFILL }
11909 { &hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature,
11910 { "CTL Temperature", "btmesh.model.light_ctl_set_unacknowledged.ctl_temperature",
11911 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11912 NULL, HFILL }
11914 { &hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv,
11915 { "CTL Delta UV", "btmesh.model.light_ctl_set_unacknowledged.ctl_delta_uv",
11916 FT_INT16, BASE_DEC, NULL, 0x0,
11917 NULL, HFILL }
11919 { &hf_btmesh_light_ctl_set_unacknowledged_tid,
11920 { "TID", "btmesh.model.light_ctl_set_unacknowledged.tid",
11921 FT_UINT8, BASE_DEC, NULL, 0x0,
11922 NULL, HFILL }
11924 { &hf_btmesh_light_ctl_set_unacknowledged_transition_time,
11925 { "Transition Time", "btmesh.model.light_ctl_set_unacknowledged.transition_time",
11926 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11927 NULL, HFILL }
11929 { &hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution,
11930 { "Step Resolution", "btmesh.model.light_ctl_set_unacknowledged.transition_time.resolution",
11931 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11932 NULL, HFILL }
11934 { &hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps,
11935 { "Number of Steps", "btmesh.model.light_ctl_set_unacknowledged.transition_time.steps",
11936 FT_UINT8, BASE_DEC, NULL, 0x3F,
11937 NULL, HFILL }
11939 { &hf_btmesh_light_ctl_set_unacknowledged_delay,
11940 { "Delay", "btmesh.model.light_ctl_set_unacknowledged.delay",
11941 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11942 NULL, HFILL }
11944 { &hf_btmesh_light_ctl_status_present_ctl_lightness,
11945 { "Present CTL Lightness", "btmesh.model.light_ctl_status.present_ctl_lightness",
11946 FT_UINT16, BASE_DEC, NULL, 0x0,
11947 NULL, HFILL }
11949 { &hf_btmesh_light_ctl_status_present_ctl_temperature,
11950 { "Present CTL Temperature", "btmesh.model.light_ctl_status.present_ctl_temperature",
11951 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11952 NULL, HFILL }
11954 { &hf_btmesh_light_ctl_status_target_ctl_lightness,
11955 { "Target CTL Lightness", "btmesh.model.light_ctl_status.target_ctl_lightness",
11956 FT_UINT16, BASE_DEC, NULL, 0x0,
11957 NULL, HFILL }
11959 { &hf_btmesh_light_ctl_status_target_ctl_temperature,
11960 { "Target CTL Temperature", "btmesh.model.light_ctl_status.target_ctl_temperature",
11961 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11962 NULL, HFILL }
11964 { &hf_btmesh_light_ctl_status_remaining_time,
11965 { "Remaining Time", "btmesh.model.light_ctl_status.remaining_time",
11966 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11967 NULL, HFILL }
11969 { &hf_btmesh_light_ctl_status_remaining_time_resolution,
11970 { "Step Resolution", "btmesh.model.light_ctl_status.remaining_time.resolution",
11971 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11972 NULL, HFILL }
11974 { &hf_btmesh_light_ctl_status_remaining_time_steps,
11975 { "Number of Steps", "btmesh.model.light_ctl_status.remaining_time.steps",
11976 FT_UINT8, BASE_DEC, NULL, 0x3F,
11977 NULL, HFILL }
11979 { &hf_btmesh_light_ctl_temperature_range_status_status_code,
11980 { "Status Code", "btmesh.model.light_ctl_temperature_range_status.status_code",
11981 FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
11982 NULL, HFILL }
11984 { &hf_btmesh_light_ctl_temperature_range_status_range_min,
11985 { "Range Min", "btmesh.model.light_ctl_temperature_range_status.range_min",
11986 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
11987 NULL, HFILL }
11989 { &hf_btmesh_light_ctl_temperature_range_status_range_max,
11990 { "Range Max", "btmesh.model.light_ctl_temperature_range_status.range_max",
11991 FT_UINT16,BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
11992 NULL, HFILL }
11994 { &hf_btmesh_light_ctl_temperature_set_ctl_temperature,
11995 { "CTL Temperature", "btmesh.model.light_ctl_temperature_set.ctl_temperature",
11996 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11997 NULL, HFILL }
11999 { &hf_btmesh_light_ctl_temperature_set_ctl_delta_uv,
12000 { "CTL Delta UV", "btmesh.model.light_ctl_temperature_set.ctl_delta_uv",
12001 FT_INT16, BASE_DEC, NULL, 0x0,
12002 NULL, HFILL }
12004 { &hf_btmesh_light_ctl_temperature_set_tid,
12005 { "TID", "btmesh.model.light_ctl_temperature_set.tid",
12006 FT_UINT8, BASE_DEC, NULL, 0x0,
12007 NULL, HFILL }
12009 { &hf_btmesh_light_ctl_temperature_set_transition_time,
12010 { "Transition Time", "btmesh.model.light_ctl_temperature_set.transition_time",
12011 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12012 NULL, HFILL }
12014 { &hf_btmesh_light_ctl_temperature_set_transition_time_resolution,
12015 { "Step Resolution", "btmesh.model.light_ctl_temperature_set.transition_time.resolution",
12016 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12017 NULL, HFILL }
12019 { &hf_btmesh_light_ctl_temperature_set_transition_time_steps,
12020 { "Number of Steps", "btmesh.model.light_ctl_temperature_set.transition_time.steps",
12021 FT_UINT8, BASE_DEC, NULL, 0x3F,
12022 NULL, HFILL }
12024 { &hf_btmesh_light_ctl_temperature_set_delay,
12025 { "Delay", "btmesh.model.light_ctl_temperature_set.delay",
12026 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12027 NULL, HFILL }
12029 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature,
12030 { "CTL Temperature", "btmesh.model.light_ctl_temperature_set_unacknowledged.ctl_temperature",
12031 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12032 NULL, HFILL }
12034 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv,
12035 { "CTL Delta UV", "btmesh.model.light_ctl_temperature_set_unacknowledged.ctl_delta_uv",
12036 FT_INT16, BASE_DEC, NULL, 0x0,
12037 NULL, HFILL }
12039 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_tid,
12040 { "TID", "btmesh.model.light_ctl_temperature_set_unacknowledged.tid",
12041 FT_UINT8, BASE_DEC, NULL, 0x0,
12042 NULL, HFILL }
12044 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time,
12045 { "Transition Time", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time",
12046 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12047 NULL, HFILL }
12049 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution,
12050 { "Step Resolution", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time.resolution",
12051 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12052 NULL, HFILL }
12054 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps,
12055 { "Number of Steps", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time.steps",
12056 FT_UINT8, BASE_DEC, NULL, 0x3F,
12057 NULL, HFILL }
12059 { &hf_btmesh_light_ctl_temperature_set_unacknowledged_delay,
12060 { "Delay", "btmesh.model.light_ctl_temperature_set_unacknowledged.delay",
12061 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12062 NULL, HFILL }
12064 { &hf_btmesh_light_ctl_temperature_status_present_ctl_temperature,
12065 { "Present CTL Temperature", "btmesh.model.light_ctl_temperature_status.present_ctl_temperature",
12066 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12067 NULL, HFILL }
12069 { &hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv,
12070 { "Present CTL Delta UV", "btmesh.model.light_ctl_temperature_status.present_ctl_delta_uv",
12071 FT_INT16, BASE_DEC, NULL, 0x0,
12072 NULL, HFILL }
12074 { &hf_btmesh_light_ctl_temperature_status_target_ctl_temperature,
12075 { "Target CTL Temperature", "btmesh.model.light_ctl_temperature_status.target_ctl_temperature",
12076 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12077 NULL, HFILL }
12079 { &hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv,
12080 { "Target CTL Delta UV", "btmesh.model.light_ctl_temperature_status.target_ctl_delta_uv",
12081 FT_INT16, BASE_DEC, NULL, 0x0,
12082 NULL, HFILL }
12084 { &hf_btmesh_light_ctl_temperature_status_remaining_time,
12085 { "Remaining Time", "btmesh.model.light_ctl_temperature_status.remaining_time",
12086 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12087 NULL, HFILL }
12089 { &hf_btmesh_light_ctl_temperature_status_remaining_time_resolution,
12090 { "Step Resolution", "btmesh.model.light_ctl_temperature_status.remaining_time.resolution",
12091 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12092 NULL, HFILL }
12094 { &hf_btmesh_light_ctl_temperature_status_remaining_time_steps,
12095 { "Number of Steps", "btmesh.model.light_ctl_temperature_status.remaining_time.steps",
12096 FT_UINT8, BASE_DEC, NULL, 0x3F,
12097 NULL, HFILL }
12099 { &hf_btmesh_light_ctl_default_status_lightness,
12100 { "Lightness", "btmesh.model.light_ctl_default_status.lightness",
12101 FT_UINT16, BASE_DEC, NULL, 0x0,
12102 NULL, HFILL }
12104 { &hf_btmesh_light_ctl_default_status_temperature,
12105 { "Temperature", "btmesh.model.light_ctl_default_status.temperature",
12106 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12107 NULL, HFILL }
12109 { &hf_btmesh_light_ctl_default_status_delta_uv,
12110 { "Delta UV", "btmesh.model.light_ctl_default_status.delta_uv",
12111 FT_INT16, BASE_DEC, NULL, 0x0,
12112 NULL, HFILL }
12114 { &hf_btmesh_light_ctl_default_set_lightness,
12115 { "Lightness", "btmesh.model.light_ctl_default_set.lightness",
12116 FT_UINT16, BASE_DEC, NULL, 0x0,
12117 NULL, HFILL }
12119 { &hf_btmesh_light_ctl_default_set_temperature,
12120 { "Temperature", "btmesh.model.light_ctl_default_set.temperature",
12121 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12122 NULL, HFILL }
12124 { &hf_btmesh_light_ctl_default_set_delta_uv,
12125 { "Delta UV", "btmesh.model.light_ctl_default_set.delta_uv",
12126 FT_INT16, BASE_DEC, NULL, 0x0,
12127 NULL, HFILL }
12129 { &hf_btmesh_light_ctl_default_set_unacknowledged_lightness,
12130 { "Lightness", "btmesh.model.light_ctl_default_set_unacknowledged.lightness",
12131 FT_UINT16, BASE_DEC, NULL, 0x0,
12132 NULL, HFILL }
12134 { &hf_btmesh_light_ctl_default_set_unacknowledged_temperature,
12135 { "Temperature", "btmesh.model.light_ctl_default_set_unacknowledged.temperature",
12136 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12137 NULL, HFILL }
12139 { &hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv,
12140 { "Delta UV", "btmesh.model.light_ctl_default_set_unacknowledged.delta_uv",
12141 FT_INT16, BASE_DEC, NULL, 0x0,
12142 NULL, HFILL }
12144 { &hf_btmesh_light_ctl_temperature_range_set_range_min,
12145 { "Range Min", "btmesh.model.light_ctl_temperature_range_set.range_min",
12146 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12147 NULL, HFILL }
12149 { &hf_btmesh_light_ctl_temperature_range_set_range_max,
12150 { "Range Max", "btmesh.model.light_ctl_temperature_range_set.range_max",
12151 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12152 NULL, HFILL }
12154 { &hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min,
12155 { "Range Min", "btmesh.model.light_ctl_temperature_range_set_unacknowledged.range_min",
12156 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12157 NULL, HFILL }
12159 { &hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max,
12160 { "Range Max", "btmesh.model.light_ctl_temperature_range_set_unacknowledged.range_max",
12161 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12162 NULL, HFILL }
12164 { &hf_btmesh_light_hsl_hue_set_hue,
12165 { "Hue", "btmesh.model.light_hsl_hue_set.hue",
12166 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12167 NULL, HFILL }
12169 { &hf_btmesh_light_hsl_hue_set_tid,
12170 { "TID", "btmesh.model.light_hsl_hue_set.tid",
12171 FT_UINT8, BASE_DEC, NULL, 0x0,
12172 NULL, HFILL }
12174 { &hf_btmesh_light_hsl_hue_set_transition_time,
12175 { "Transition Time", "btmesh.model.light_hsl_hue_set.transition_time",
12176 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12177 NULL, HFILL }
12179 { &hf_btmesh_light_hsl_hue_set_transition_time_resolution,
12180 { "Step Resolution", "btmesh.model.light_hsl_hue_set.transition_time.resolution",
12181 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12182 NULL, HFILL }
12184 { &hf_btmesh_light_hsl_hue_set_transition_time_steps,
12185 { "Number of Steps", "btmesh.model.light_hsl_hue_set.transition_time.steps",
12186 FT_UINT8, BASE_DEC, NULL, 0x3F,
12187 NULL, HFILL }
12189 { &hf_btmesh_light_hsl_hue_set_delay,
12190 { "Delay", "btmesh.model.light_hsl_hue_set.delay",
12191 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12192 NULL, HFILL }
12194 { &hf_btmesh_light_hsl_hue_set_unacknowledged_hue,
12195 { "Hue", "btmesh.model.light_hsl_hue_set_unacknowledged.hue",
12196 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12197 NULL, HFILL }
12199 { &hf_btmesh_light_hsl_hue_set_unacknowledged_tid,
12200 { "TID", "btmesh.model.light_hsl_hue_set_unacknowledged.tid",
12201 FT_UINT8, BASE_DEC, NULL, 0x0,
12202 NULL, HFILL }
12204 { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time,
12205 { "Transition Time", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time",
12206 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12207 NULL, HFILL }
12209 { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution,
12210 { "Step Resolution", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time.resolution",
12211 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12212 NULL, HFILL }
12214 { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps,
12215 { "Number of Steps", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time.steps",
12216 FT_UINT8, BASE_DEC, NULL, 0x3F,
12217 NULL, HFILL }
12219 { &hf_btmesh_light_hsl_hue_set_unacknowledged_delay,
12220 { "Delay", "btmesh.model.light_hsl_hue_set_unacknowledged.delay",
12221 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12222 NULL, HFILL }
12224 { &hf_btmesh_light_hsl_hue_status_present_hue,
12225 { "Present Hue", "btmesh.model.light_hsl_hue_status.present_hue",
12226 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12227 NULL, HFILL }
12229 { &hf_btmesh_light_hsl_hue_status_target_hue,
12230 { "Target Hue", "btmesh.model.light_hsl_hue_status.target_hue",
12231 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12232 NULL, HFILL }
12234 { &hf_btmesh_light_hsl_hue_status_remaining_time,
12235 { "Remaining Time", "btmesh.model.light_hsl_hue_status.remaining_time",
12236 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12237 NULL, HFILL }
12239 { &hf_btmesh_light_hsl_hue_status_remaining_time_resolution,
12240 { "Step Resolution", "btmesh.model.light_hsl_hue_status.remaining_time.resolution",
12241 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12242 NULL, HFILL }
12244 { &hf_btmesh_light_hsl_hue_status_remaining_time_steps,
12245 { "Number of Steps", "btmesh.model.light_hsl_hue_status.remaining_time.steps",
12246 FT_UINT8, BASE_DEC, NULL, 0x3F,
12247 NULL, HFILL }
12249 { &hf_btmesh_light_hsl_saturation_set_saturation,
12250 { "Saturation", "btmesh.model.light_hsl_saturation_set.saturation",
12251 FT_UINT16, BASE_DEC, NULL, 0x0,
12252 NULL, HFILL }
12254 { &hf_btmesh_light_hsl_saturation_set_tid,
12255 { "TID", "btmesh.model.light_hsl_saturation_set.tid",
12256 FT_UINT8, BASE_DEC, NULL, 0x0,
12257 NULL, HFILL }
12259 { &hf_btmesh_light_hsl_saturation_set_transition_time,
12260 { "Transition Time", "btmesh.model.light_hsl_saturation_set.transition_time",
12261 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12262 NULL, HFILL }
12264 { &hf_btmesh_light_hsl_saturation_set_transition_time_resolution,
12265 { "Step Resolution", "btmesh.model.light_hsl_saturation_set.transition_time.resolution",
12266 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12267 NULL, HFILL }
12269 { &hf_btmesh_light_hsl_saturation_set_transition_time_steps,
12270 { "Number of Steps", "btmesh.model.light_hsl_saturation_set.transition_time.steps",
12271 FT_UINT8, BASE_DEC, NULL, 0x3F,
12272 NULL, HFILL }
12274 { &hf_btmesh_light_hsl_saturation_set_delay,
12275 { "Delay", "btmesh.model.light_hsl_saturation_set.delay",
12276 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12277 NULL, HFILL }
12279 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation,
12280 { "Saturation", "btmesh.model.light_hsl_saturation_set_unacknowledged.saturation",
12281 FT_UINT16, BASE_DEC, NULL, 0x0,
12282 NULL, HFILL }
12284 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_tid,
12285 { "TID", "btmesh.model.light_hsl_saturation_set_unacknowledged.tid",
12286 FT_UINT8, BASE_DEC, NULL, 0x0,
12287 NULL, HFILL }
12289 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time,
12290 { "Transition Time", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time",
12291 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12292 NULL, HFILL }
12294 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution,
12295 { "Step Resolution", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time.resolution",
12296 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12297 NULL, HFILL }
12299 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps,
12300 { "Number of Steps", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time.steps",
12301 FT_UINT8, BASE_DEC, NULL, 0x3F,
12302 NULL, HFILL }
12304 { &hf_btmesh_light_hsl_saturation_set_unacknowledged_delay,
12305 { "Delay", "btmesh.model.light_hsl_saturation_set_unacknowledged.delay",
12306 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12307 NULL, HFILL }
12309 { &hf_btmesh_light_hsl_saturation_status_present_saturation,
12310 { "Present Saturation", "btmesh.model.light_hsl_saturation_status.present_saturation",
12311 FT_UINT16, BASE_DEC, NULL, 0x0,
12312 NULL, HFILL }
12314 { &hf_btmesh_light_hsl_saturation_status_target_saturation,
12315 { "Target Saturation", "btmesh.model.light_hsl_saturation_status.target_saturation",
12316 FT_UINT16, BASE_DEC, NULL, 0x0,
12317 NULL, HFILL }
12319 { &hf_btmesh_light_hsl_saturation_status_remaining_time,
12320 { "Remaining Time", "btmesh.model.light_hsl_saturation_status.remaining_time",
12321 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12322 NULL, HFILL }
12324 { &hf_btmesh_light_hsl_saturation_status_remaining_time_resolution,
12325 { "Step Resolution", "btmesh.model.light_hsl_saturation_status.remaining_time.resolution",
12326 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12327 NULL, HFILL }
12329 { &hf_btmesh_light_hsl_saturation_status_remaining_time_steps,
12330 { "Number of Steps", "btmesh.model.light_hsl_saturation_status.remaining_time.steps",
12331 FT_UINT8, BASE_DEC, NULL, 0x3F,
12332 NULL, HFILL }
12334 { &hf_btmesh_light_hsl_set_hsl_lightness,
12335 { "HSL Lightness", "btmesh.model.light_hsl_set.hsl_lightness",
12336 FT_UINT16, BASE_DEC, NULL, 0x0,
12337 NULL, HFILL }
12339 { &hf_btmesh_light_hsl_set_hsl_hue,
12340 { "HSL Hue", "btmesh.model.light_hsl_set.hsl_hue",
12341 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12342 NULL, HFILL }
12344 { &hf_btmesh_light_hsl_set_hsl_saturation,
12345 { "HSL Saturation", "btmesh.model.light_hsl_set.hsl_saturation",
12346 FT_UINT16, BASE_DEC, NULL, 0x0,
12347 NULL, HFILL }
12349 { &hf_btmesh_light_hsl_set_tid,
12350 { "TID", "btmesh.model.light_hsl_set.tid",
12351 FT_UINT8, BASE_DEC, NULL, 0x0,
12352 NULL, HFILL }
12354 { &hf_btmesh_light_hsl_set_transition_time,
12355 { "Transition Time", "btmesh.model.light_hsl_set.transition_time",
12356 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12357 NULL, HFILL }
12359 { &hf_btmesh_light_hsl_set_transition_time_resolution,
12360 { "Step Resolution", "btmesh.model.light_hsl_set.transition_time.resolution",
12361 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12362 NULL, HFILL }
12364 { &hf_btmesh_light_hsl_set_transition_time_steps,
12365 { "Number of Steps", "btmesh.model.light_hsl_set.transition_time.steps",
12366 FT_UINT8, BASE_DEC, NULL, 0x3F,
12367 NULL, HFILL }
12369 { &hf_btmesh_light_hsl_set_delay,
12370 { "Delay", "btmesh.model.light_hsl_set.delay",
12371 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12372 NULL, HFILL }
12374 { &hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness,
12375 { "HSL Lightness", "btmesh.model.light_hsl_set_unacknowledged.hsl_lightness",
12376 FT_UINT16, BASE_DEC, NULL, 0x0,
12377 NULL, HFILL }
12379 { &hf_btmesh_light_hsl_set_unacknowledged_hsl_hue,
12380 { "HSL Hue", "btmesh.model.light_hsl_set_unacknowledged.hsl_hue",
12381 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12382 NULL, HFILL }
12384 { &hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation,
12385 { "HSL Saturation", "btmesh.model.light_hsl_set_unacknowledged.hsl_saturation",
12386 FT_UINT16, BASE_DEC, NULL, 0x0,
12387 NULL, HFILL }
12389 { &hf_btmesh_light_hsl_set_unacknowledged_tid,
12390 { "TID", "btmesh.model.light_hsl_set_unacknowledged.tid",
12391 FT_UINT8, BASE_DEC, NULL, 0x0,
12392 NULL, HFILL }
12394 { &hf_btmesh_light_hsl_set_unacknowledged_transition_time,
12395 { "Transition Time", "btmesh.model.light_hsl_set_unacknowledged.transition_time",
12396 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12397 NULL, HFILL }
12399 { &hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution,
12400 { "Step Resolution", "btmesh.model.light_hsl_set_unacknowledged.transition_time.resolution",
12401 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12402 NULL, HFILL }
12404 { &hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps,
12405 { "Number of Steps", "btmesh.model.light_hsl_set_unacknowledged.transition_time.steps",
12406 FT_UINT8, BASE_DEC, NULL, 0x3F,
12407 NULL, HFILL }
12409 { &hf_btmesh_light_hsl_set_unacknowledged_delay,
12410 { "Delay", "btmesh.model.light_hsl_set_unacknowledged.delay",
12411 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12412 NULL, HFILL }
12414 { &hf_btmesh_light_hsl_status_hsl_lightness,
12415 { "HSL Lightness", "btmesh.model.light_hsl_status.hsl_lightness",
12416 FT_UINT16, BASE_DEC, NULL, 0x0,
12417 NULL, HFILL }
12419 { &hf_btmesh_light_hsl_status_hsl_hue,
12420 { "HSL Hue", "btmesh.model.light_hsl_status.hsl_hue",
12421 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12422 NULL, HFILL }
12424 { &hf_btmesh_light_hsl_status_hsl_saturation,
12425 { "HSL Saturation", "btmesh.model.light_hsl_status.hsl_saturation",
12426 FT_UINT16, BASE_DEC, NULL, 0x0,
12427 NULL, HFILL }
12429 { &hf_btmesh_light_hsl_status_remaining_time,
12430 { "Remaining Time", "btmesh.model.light_hsl_status.remaining_time",
12431 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12432 NULL, HFILL }
12434 { &hf_btmesh_light_hsl_status_remaining_time_resolution,
12435 { "Step Resolution", "btmesh.model.light_hsl_status.remaining_time.resolution",
12436 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12437 NULL, HFILL }
12439 { &hf_btmesh_light_hsl_status_remaining_time_steps,
12440 { "Number of Steps", "btmesh.model.light_hsl_status.remaining_time.steps",
12441 FT_UINT8, BASE_DEC, NULL, 0x3F,
12442 NULL, HFILL }
12444 { &hf_btmesh_light_hsl_target_status_hsl_lightness_target,
12445 { "HSL Lightness Target", "btmesh.model.light_hsl_target_status.hsl_lightness_target",
12446 FT_UINT16, BASE_DEC, NULL, 0x0,
12447 NULL, HFILL }
12449 { &hf_btmesh_light_hsl_target_status_hsl_hue_target,
12450 { "HSL Hue Target", "btmesh.model.light_hsl_target_status.hsl_hue_target",
12451 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12452 NULL, HFILL }
12454 { &hf_btmesh_light_hsl_target_status_hsl_saturation_target,
12455 { "HSL Saturation Target", "btmesh.model.light_hsl_target_status.hsl_saturation_target",
12456 FT_UINT16, BASE_DEC, NULL, 0x0,
12457 NULL, HFILL }
12459 { &hf_btmesh_light_hsl_target_status_remaining_time,
12460 { "Remaining Time", "btmesh.model.light_hsl_target_status.remaining_time",
12461 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12462 NULL, HFILL }
12464 { &hf_btmesh_light_hsl_target_status_remaining_time_resolution,
12465 { "Step Resolution", "btmesh.model.light_hsl_target_status.remaining_time.resolution",
12466 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12467 NULL, HFILL }
12469 { &hf_btmesh_light_hsl_target_status_remaining_time_steps,
12470 { "Number of Steps", "btmesh.model.light_hsl_target_status.remaining_time.steps",
12471 FT_UINT8, BASE_DEC, NULL, 0x3F,
12472 NULL, HFILL }
12474 { &hf_btmesh_light_hsl_default_status_lightness,
12475 { "Lightness", "btmesh.model.light_hsl_default_status.lightness",
12476 FT_UINT16, BASE_DEC, NULL, 0x0,
12477 NULL, HFILL }
12479 { &hf_btmesh_light_hsl_default_status_hue,
12480 { "Hue", "btmesh.model.light_hsl_default_status.hue",
12481 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12482 NULL, HFILL }
12484 { &hf_btmesh_light_hsl_default_status_saturation,
12485 { "Saturation", "btmesh.model.light_hsl_default_status.saturation",
12486 FT_UINT16, BASE_DEC, NULL, 0x0,
12487 NULL, HFILL }
12489 { &hf_btmesh_light_hsl_range_status_status_code,
12490 { "Status Code", "btmesh.model.light_hsl_range_status.status_code",
12491 FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
12492 NULL, HFILL }
12494 { &hf_btmesh_light_hsl_range_status_hue_range_min,
12495 { "Hue Range Min", "btmesh.model.light_hsl_range_status.hue_range_min",
12496 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12497 NULL, HFILL }
12499 { &hf_btmesh_light_hsl_range_status_hue_range_max,
12500 { "Hue Range Max", "btmesh.model.light_hsl_range_status.hue_range_max",
12501 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12502 NULL, HFILL }
12504 { &hf_btmesh_light_hsl_range_status_saturation_range_min,
12505 { "Saturation Range Min", "btmesh.model.light_hsl_range_status.saturation_range_min",
12506 FT_UINT16, BASE_DEC, NULL, 0x0,
12507 NULL, HFILL }
12509 { &hf_btmesh_light_hsl_range_status_saturation_range_max,
12510 { "Saturation Range Max", "btmesh.model.light_hsl_range_status.saturation_range_max",
12511 FT_UINT16, BASE_DEC, NULL, 0x0,
12512 NULL, HFILL }
12514 { &hf_btmesh_light_hsl_default_set_lightness,
12515 { "Lightness", "btmesh.model.light_hsl_default_set.lightness",
12516 FT_UINT16, BASE_DEC, NULL, 0x0,
12517 NULL, HFILL }
12519 { &hf_btmesh_light_hsl_default_set_hue,
12520 { "Hue", "btmesh.model.light_hsl_default_set.hue",
12521 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12522 NULL, HFILL }
12524 { &hf_btmesh_light_hsl_default_set_saturation,
12525 { "Saturation", "btmesh.model.light_hsl_default_set.saturation",
12526 FT_UINT16, BASE_DEC, NULL, 0x0,
12527 NULL, HFILL }
12529 { &hf_btmesh_light_hsl_default_set_unacknowledged_lightness,
12530 { "Lightness", "btmesh.model.light_hsl_default_set_unacknowledged.lightness",
12531 FT_UINT16, BASE_DEC, NULL, 0x0,
12532 NULL, HFILL }
12534 { &hf_btmesh_light_hsl_default_set_unacknowledged_hue,
12535 { "Hue", "btmesh.model.light_hsl_default_set_unacknowledged.hue",
12536 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12537 NULL, HFILL }
12539 { &hf_btmesh_light_hsl_default_set_unacknowledged_saturation,
12540 { "Saturation", "btmesh.model.light_hsl_default_set_unacknowledged.saturation",
12541 FT_UINT16, BASE_DEC, NULL, 0x0,
12542 NULL, HFILL }
12544 { &hf_btmesh_light_hsl_range_set_hue_range_min,
12545 { "Hue Range Min", "btmesh.model.light_hsl_range_set.hue_range_min",
12546 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12547 NULL, HFILL }
12549 { &hf_btmesh_light_hsl_range_set_hue_range_max,
12550 { "Hue Range Max", "btmesh.model.light_hsl_range_set.hue_range_max",
12551 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12552 NULL, HFILL }
12554 { &hf_btmesh_light_hsl_range_set_saturation_range_min,
12555 { "Saturation Range Min", "btmesh.model.light_hsl_range_set.saturation_range_min",
12556 FT_UINT16, BASE_DEC, NULL, 0x0,
12557 NULL, HFILL }
12559 { &hf_btmesh_light_hsl_range_set_saturation_range_max,
12560 { "Saturation Range Max", "btmesh.model.light_hsl_range_set.saturation_range_max",
12561 FT_UINT16, BASE_DEC, NULL, 0x0,
12562 NULL, HFILL }
12564 { &hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min,
12565 { "Hue Range Min", "btmesh.model.light_hsl_range_set_unacknowledged.hue_range_min",
12566 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12567 NULL, HFILL }
12569 { &hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max,
12570 { "Hue Range Max", "btmesh.model.light_hsl_range_set_unacknowledged.hue_range_max",
12571 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12572 NULL, HFILL }
12574 { &hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min,
12575 { "Saturation Range Min", "btmesh.model.light_hsl_range_set_unacknowledged.saturation_range_min",
12576 FT_UINT16, BASE_DEC, NULL, 0x0,
12577 NULL, HFILL }
12579 { &hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max,
12580 { "Saturation Range Max", "btmesh.model.light_hsl_range_set_unacknowledged.saturation_range_max",
12581 FT_UINT16, BASE_DEC, NULL, 0x0,
12582 NULL, HFILL }
12584 { &hf_btmesh_light_xyl_set_xyl_lightness,
12585 { "xyL Lightness", "btmesh.model.light_xyl_set.xyl_lightness",
12586 FT_UINT16, BASE_DEC, NULL, 0x0,
12587 NULL, HFILL }
12589 { &hf_btmesh_light_xyl_set_xyl_x,
12590 { "xyL x", "btmesh.model.light_xyl_set.xyl_x",
12591 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12592 NULL, HFILL }
12594 { &hf_btmesh_light_xyl_set_xyl_y,
12595 { "xyL y", "btmesh.model.light_xyl_set.xyl_y",
12596 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12597 NULL, HFILL }
12599 { &hf_btmesh_light_xyl_set_tid,
12600 { "TID", "btmesh.model.light_xyl_set.tid",
12601 FT_UINT8, BASE_DEC, NULL, 0x0,
12602 NULL, HFILL }
12604 { &hf_btmesh_light_xyl_set_transition_time,
12605 { "Transition Time", "btmesh.model.light_xyl_set.transition_time",
12606 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12607 NULL, HFILL }
12609 { &hf_btmesh_light_xyl_set_transition_time_resolution,
12610 { "Step Resolution", "btmesh.model.light_xyl_set.transition_time.resolution",
12611 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12612 NULL, HFILL }
12614 { &hf_btmesh_light_xyl_set_transition_time_steps,
12615 { "Number of Steps", "btmesh.model.light_xyl_set.transition_time.steps",
12616 FT_UINT8, BASE_DEC, NULL, 0x3F,
12617 NULL, HFILL }
12619 { &hf_btmesh_light_xyl_set_delay,
12620 { "Delay", "btmesh.model.light_xyl_set.delay",
12621 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12622 NULL, HFILL }
12624 { &hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness,
12625 { "xyL Lightness", "btmesh.model.light_xyl_set_unacknowledged.xyl_lightness",
12626 FT_UINT16, BASE_DEC, NULL, 0x0,
12627 NULL, HFILL }
12629 { &hf_btmesh_light_xyl_set_unacknowledged_xyl_x,
12630 { "xyL x", "btmesh.model.light_xyl_set_unacknowledged.xyl_x",
12631 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12632 NULL, HFILL }
12634 { &hf_btmesh_light_xyl_set_unacknowledged_xyl_y,
12635 { "xyL y", "btmesh.model.light_xyl_set_unacknowledged.xyl_y",
12636 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12637 NULL, HFILL }
12639 { &hf_btmesh_light_xyl_set_unacknowledged_tid,
12640 { "TID", "btmesh.model.light_xyl_set_unacknowledged.tid",
12641 FT_UINT8, BASE_DEC, NULL, 0x0,
12642 NULL, HFILL }
12644 { &hf_btmesh_light_xyl_set_unacknowledged_transition_time,
12645 { "Transition Time", "btmesh.model.light_xyl_set_unacknowledged.transition_time",
12646 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12647 NULL, HFILL }
12649 { &hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution,
12650 { "Step Resolution", "btmesh.model.light_xyl_set_unacknowledged.transition_time.resolution",
12651 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12652 NULL, HFILL }
12654 { &hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps,
12655 { "Number of Steps", "btmesh.model.light_xyl_set_unacknowledged.transition_time.steps",
12656 FT_UINT8, BASE_DEC, NULL, 0x3F,
12657 NULL, HFILL }
12659 { &hf_btmesh_light_xyl_set_unacknowledged_delay,
12660 { "Delay", "btmesh.model.light_xyl_set_unacknowledged.delay",
12661 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12662 NULL, HFILL }
12664 { &hf_btmesh_light_xyl_status_xyl_lightness,
12665 { "xyL Lightness", "btmesh.model.light_xyl_status.xyl_lightness",
12666 FT_UINT16, BASE_DEC, NULL, 0x0,
12667 NULL, HFILL }
12669 { &hf_btmesh_light_xyl_status_xyl_x,
12670 { "xyL x", "btmesh.model.light_xyl_status.xyl_x",
12671 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12672 NULL, HFILL }
12674 { &hf_btmesh_light_xyl_status_xyl_y,
12675 { "xyL y", "btmesh.model.light_xyl_status.xyl_y",
12676 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12677 NULL, HFILL }
12679 { &hf_btmesh_light_xyl_status_remaining_time,
12680 { "Remaining Time", "btmesh.model.light_xyl_status.remaining_time",
12681 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12682 NULL, HFILL }
12684 { &hf_btmesh_light_xyl_status_remaining_time_resolution,
12685 { "Step Resolution", "btmesh.model.light_xyl_status.remaining_time.resolution",
12686 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12687 NULL, HFILL }
12689 { &hf_btmesh_light_xyl_status_remaining_time_steps,
12690 { "Number of Steps", "btmesh.model.light_xyl_status.remaining_time.steps",
12691 FT_UINT8, BASE_DEC, NULL, 0x3F,
12692 NULL, HFILL }
12694 { &hf_btmesh_light_xyl_target_status_target_xyl_lightness,
12695 { "Target xyL Lightness", "btmesh.model.light_xyl_target_status.target_xyl_lightness",
12696 FT_UINT16, BASE_DEC, NULL, 0x0,
12697 NULL, HFILL }
12699 { &hf_btmesh_light_xyl_target_status_target_xyl_x,
12700 { "Target xyL x", "btmesh.model.light_xyl_target_status.target_xyl_x",
12701 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12702 NULL, HFILL }
12704 { &hf_btmesh_light_xyl_target_status_target_xyl_y,
12705 { "Target xyL y", "btmesh.model.light_xyl_target_status.target_xyl_y",
12706 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12707 NULL, HFILL }
12709 { &hf_btmesh_light_xyl_target_status_remaining_time,
12710 { "Remaining Time", "btmesh.model.light_xyl_target_status.remaining_time",
12711 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12712 NULL, HFILL }
12714 { &hf_btmesh_light_xyl_target_status_remaining_time_resolution,
12715 { "Step Resolution", "btmesh.model.light_xyl_target_status.remaining_time.resolution",
12716 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12717 NULL, HFILL }
12719 { &hf_btmesh_light_xyl_target_status_remaining_time_steps,
12720 { "Number of Steps", "btmesh.model.light_xyl_target_status.remaining_time.steps",
12721 FT_UINT8, BASE_DEC, NULL, 0x3F,
12722 NULL, HFILL }
12724 { &hf_btmesh_light_xyl_default_status_lightness,
12725 { "Lightness", "btmesh.model.light_xyl_default_status.lightness",
12726 FT_UINT16, BASE_DEC, NULL, 0x0,
12727 NULL, HFILL }
12729 { &hf_btmesh_light_xyl_default_status_xyl_x,
12730 { "xyL x", "btmesh.model.light_xyl_default_status.xyl_x",
12731 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12732 NULL, HFILL }
12734 { &hf_btmesh_light_xyl_default_status_xyl_y,
12735 { "xyL y", "btmesh.model.light_xyl_default_status.xyl_y",
12736 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12737 NULL, HFILL }
12739 { &hf_btmesh_light_xyl_range_status_status_code,
12740 { "Status Code", "btmesh.model.light_xyl_range_status.status_code",
12741 FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
12742 NULL, HFILL }
12744 { &hf_btmesh_light_xyl_range_status_xyl_x_range_min,
12745 { "xyL x Range Min", "btmesh.model.light_xyl_range_status.xyl_x_range_min",
12746 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12747 NULL, HFILL }
12749 { &hf_btmesh_light_xyl_range_status_xyl_x_range_max,
12750 { "xyL x Range Max", "btmesh.model.light_xyl_range_status.xyl_x_range_max",
12751 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12752 NULL, HFILL }
12754 { &hf_btmesh_light_xyl_range_status_xyl_y_range_min,
12755 { "xyL y Range Min", "btmesh.model.light_xyl_range_status.xyl_y_range_min",
12756 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12757 NULL, HFILL }
12759 { &hf_btmesh_light_xyl_range_status_xyl_y_range_max,
12760 { "xyL y Range Max", "btmesh.model.light_xyl_range_status.xyl_y_range_max",
12761 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12762 NULL, HFILL }
12764 { &hf_btmesh_light_xyl_default_set_lightness,
12765 { "Lightness", "btmesh.model.light_xyl_default_set.lightness",
12766 FT_UINT16, BASE_DEC, NULL, 0x0,
12767 NULL, HFILL }
12769 { &hf_btmesh_light_xyl_default_set_xyl_x,
12770 { "xyL x", "btmesh.model.light_xyl_default_set.xyl_x",
12771 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12772 NULL, HFILL }
12774 { &hf_btmesh_light_xyl_default_set_xyl_y,
12775 { "xyL y", "btmesh.model.light_xyl_default_set.xyl_y",
12776 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12777 NULL, HFILL }
12779 { &hf_btmesh_light_xyl_default_set_unacknowledged_lightness,
12780 { "Lightness", "btmesh.model.light_xyl_default_set_unacknowledged.lightness",
12781 FT_UINT16, BASE_DEC, NULL, 0x0,
12782 NULL, HFILL }
12784 { &hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x,
12785 { "xyL x", "btmesh.model.light_xyl_default_set_unacknowledged.xyl_x",
12786 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12787 NULL, HFILL }
12789 { &hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y,
12790 { "xyL y", "btmesh.model.light_xyl_default_set_unacknowledged.xyl_y",
12791 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12792 NULL, HFILL }
12794 { &hf_btmesh_light_xyl_range_set_xyl_x_range_min,
12795 { "xyL x Range Min", "btmesh.model.light_xyl_range_set.xyl_x_range_min",
12796 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12797 NULL, HFILL }
12799 { &hf_btmesh_light_xyl_range_set_xyl_x_range_max,
12800 { "xyL x Range Max", "btmesh.model.light_xyl_range_set.xyl_x_range_max",
12801 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12802 NULL, HFILL }
12804 { &hf_btmesh_light_xyl_range_set_xyl_y_range_min,
12805 { "xyL y Range Min", "btmesh.model.light_xyl_range_set.xyl_y_range_min",
12806 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12807 NULL, HFILL }
12809 { &hf_btmesh_light_xyl_range_set_xyl_y_range_max,
12810 { "xyL y Range Max", "btmesh.model.light_xyl_range_set.xyl_y_range_max",
12811 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12812 NULL, HFILL }
12814 { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min,
12815 { "xyL x Range Min", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_x_range_min",
12816 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12817 NULL, HFILL }
12819 { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max,
12820 { "xyL x Range Max", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_x_range_max",
12821 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12822 NULL, HFILL }
12824 { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min,
12825 { "xyL y Range Min", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_y_range_min",
12826 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12827 NULL, HFILL }
12829 { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max,
12830 { "xyL y Range Max", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_y_range_max",
12831 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12832 NULL, HFILL }
12834 { &hf_btmesh_light_lc_mode_set_mode,
12835 { "Mode", "btmesh.model.light_lc_mode_set.mode",
12836 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12837 NULL, HFILL }
12839 { &hf_btmesh_light_lc_mode_set_unacknowledged_mode,
12840 { "Mode", "btmesh.model.light_lc_mode_set_unacknowledged.mode",
12841 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12842 NULL, HFILL }
12844 { &hf_btmesh_light_lc_mode_status_mode,
12845 { "Mode", "btmesh.model.light_lc_mode_status.mode",
12846 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12847 NULL, HFILL }
12849 { &hf_btmesh_light_lc_om_set_mode,
12850 { "Mode", "btmesh.model.light_lc_om_set.mode",
12851 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12852 NULL, HFILL }
12854 { &hf_btmesh_light_lc_om_set_unacknowledged_mode,
12855 { "Mode", "btmesh.model.light_lc_om_set_unacknowledged.mode",
12856 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12857 NULL, HFILL }
12859 { &hf_btmesh_light_lc_om_status_mode,
12860 { "Mode", "btmesh.model.light_lc_om_status.mode",
12861 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12862 NULL, HFILL }
12864 { &hf_btmesh_light_lc_light_onoff_set_light_onoff,
12865 { "Light OnOff", "btmesh.model.light_lc_light_onoff_set.light_onoff",
12866 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12867 NULL, HFILL }
12869 { &hf_btmesh_light_lc_light_onoff_set_tid,
12870 { "TID", "btmesh.model.light_lc_light_onoff_set.tid",
12871 FT_UINT8, BASE_DEC, NULL, 0x0,
12872 NULL, HFILL }
12874 { &hf_btmesh_light_lc_light_onoff_set_transition_time,
12875 { "Transition Time", "btmesh.model.light_lc_light_onoff_set.transition_time",
12876 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12877 NULL, HFILL }
12879 { &hf_btmesh_light_lc_light_onoff_set_transition_time_resolution,
12880 { "Step Resolution", "btmesh.model.light_lc_light_onoff_set.transition_time.resolution",
12881 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12882 NULL, HFILL }
12884 { &hf_btmesh_light_lc_light_onoff_set_transition_time_steps,
12885 { "Number of Steps", "btmesh.model.light_lc_light_onoff_set.transition_time.steps",
12886 FT_UINT8, BASE_DEC, NULL, 0x3F,
12887 NULL, HFILL }
12889 { &hf_btmesh_light_lc_light_onoff_set_delay,
12890 { "Delay", "btmesh.model.light_lc_light_onoff_set.delay",
12891 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12892 NULL, HFILL }
12894 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff,
12895 { "Light OnOff", "btmesh.model.light_lc_light_onoff_set_unacknowledged.light_onoff",
12896 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12897 NULL, HFILL }
12899 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid,
12900 { "TID", "btmesh.model.light_lc_light_onoff_set_unacknowledged.tid",
12901 FT_UINT8, BASE_DEC, NULL, 0x0,
12902 NULL, HFILL }
12904 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time,
12905 { "Transition Time", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time",
12906 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12907 NULL, HFILL }
12909 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution,
12910 { "Step Resolution", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time.resolution",
12911 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12912 NULL, HFILL }
12914 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps,
12915 { "Number of Steps", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time.steps",
12916 FT_UINT8, BASE_DEC, NULL, 0x3F,
12917 NULL, HFILL }
12919 { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay,
12920 { "Delay", "btmesh.model.light_lc_light_onoff_set_unacknowledged.delay",
12921 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12922 NULL, HFILL }
12924 { &hf_btmesh_light_lc_light_onoff_status_present_light_onoff,
12925 { "Present Light OnOff", "btmesh.model.light_lc_light_onoff_status.present_light_onoff",
12926 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12927 NULL, HFILL }
12929 { &hf_btmesh_light_lc_light_onoff_status_target_light_onoff,
12930 { "Target Light OnOff", "btmesh.model.light_lc_light_onoff_status.target_light_onoff",
12931 FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12932 NULL, HFILL }
12934 { &hf_btmesh_light_lc_light_onoff_status_remaining_time,
12935 { "Remaining Time", "btmesh.model.light_lc_light_onoff_status.remaining_time",
12936 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12937 NULL, HFILL }
12939 { &hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution,
12940 { "Step Resolution", "btmesh.model.light_lc_light_onoff_status.remaining_time.resolution",
12941 FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12942 NULL, HFILL }
12944 { &hf_btmesh_light_lc_light_onoff_status_remaining_time_steps,
12945 { "Number of Steps", "btmesh.model.light_lc_light_onoff_status.remaining_time.steps",
12946 FT_UINT8, BASE_DEC, NULL, 0x3F,
12947 NULL, HFILL }
12949 { &hf_btmesh_light_lc_property_get_light_lc_property_id,
12950 { "Light LC Property ID", "btmesh.model.light_lc_property_get.light_lc_property_id",
12951 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12952 NULL, HFILL }
12954 { &hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id,
12955 { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_properties_status.manufacturer_property_id",
12956 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12957 NULL, HFILL }
12959 { &hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id,
12960 { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_set.manufacturer_property_id",
12961 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12962 NULL, HFILL }
12964 { &hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access,
12965 { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_set.manufacturer_user_access",
12966 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12967 NULL, HFILL }
12969 { &hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id,
12970 { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_set_unacknowledged.manufacturer_property_id",
12971 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12972 NULL, HFILL }
12974 { &hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access,
12975 { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_set_unacknowledged.manufacturer_user_access",
12976 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12977 NULL, HFILL }
12979 { &hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id,
12980 { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_status.manufacturer_property_id",
12981 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12982 NULL, HFILL }
12984 { &hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access,
12985 { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_status.manufacturer_user_access",
12986 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12987 NULL, HFILL }
12989 { &hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value,
12990 { "Manufacturer Property Value", "btmesh.model.generic_manufacturer_property_status.manufacturer_property_value",
12991 FT_BYTES, BASE_NONE, NULL, 0x0,
12992 NULL, HFILL }
12994 { &hf_btmesh_generic_admin_properties_status_admin_property_id,
12995 { "Admin Property ID", "btmesh.model.generic_admin_properties_status.admin_property_id",
12996 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12997 NULL, HFILL }
12999 { &hf_btmesh_generic_admin_property_set_admin_property_id,
13000 { "Admin Property ID", "btmesh.model.generic_admin_property_set.admin_property_id",
13001 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13002 NULL, HFILL }
13004 { &hf_btmesh_generic_admin_property_set_admin_user_access,
13005 { "Admin User Access", "btmesh.model.generic_admin_property_set.admin_user_access",
13006 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
13007 NULL, HFILL }
13009 { &hf_btmesh_generic_admin_property_set_admin_property_value,
13010 { "Admin Property Value", "btmesh.model.generic_admin_property_set.admin_property_value",
13011 FT_BYTES, BASE_NONE, NULL, 0x0,
13012 NULL, HFILL }
13014 { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id,
13015 { "Admin Property ID", "btmesh.model.generic_admin_property_set_unacknowledged.admin_property_id",
13016 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13017 NULL, HFILL }
13019 { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access,
13020 { "Admin User Access", "btmesh.model.generic_admin_property_set_unacknowledged.admin_user_access",
13021 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
13022 NULL, HFILL }
13024 { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value,
13025 { "Admin Property Value", "btmesh.model.generic_admin_property_set_unacknowledged.admin_property_value",
13026 FT_BYTES, BASE_NONE, NULL, 0x0,
13027 NULL, HFILL }
13029 { &hf_btmesh_generic_admin_property_status_admin_property_id,
13030 { "Admin Property ID", "btmesh.model.generic_admin_property_status.admin_property_id",
13031 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13032 NULL, HFILL }
13034 { &hf_btmesh_generic_admin_property_status_admin_user_access,
13035 { "Admin User Access", "btmesh.model.generic_admin_property_status.admin_user_access",
13036 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
13037 NULL, HFILL }
13039 { &hf_btmesh_generic_admin_property_status_admin_property_value,
13040 { "Admin Property Value", "btmesh.model.generic_admin_property_status.admin_property_value",
13041 FT_BYTES, BASE_NONE, NULL, 0x0,
13042 NULL, HFILL }
13044 { &hf_btmesh_generic_user_properties_status_user_property_id,
13045 { "User Property ID", "btmesh.model.generic_user_properties_status.user_property_id",
13046 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13047 NULL, HFILL }
13049 { &hf_btmesh_generic_user_property_set_user_property_id,
13050 { "User Property ID", "btmesh.model.generic_user_property_set.user_property_id",
13051 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13052 NULL, HFILL }
13054 { &hf_btmesh_generic_user_property_set_user_property_value,
13055 { "User Property Value", "btmesh.model.generic_user_property_set.user_property_value",
13056 FT_BYTES, BASE_NONE, NULL, 0x0,
13057 NULL, HFILL }
13059 { &hf_btmesh_generic_user_property_set_unacknowledged_user_property_id,
13060 { "User Property ID", "btmesh.model.generic_user_property_set_unacknowledged.user_property_id",
13061 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13062 NULL, HFILL }
13064 { &hf_btmesh_generic_user_property_set_unacknowledged_user_property_value,
13065 { "User Property Value", "btmesh.model.generic_user_property_set_unacknowledged.user_property_value",
13066 FT_BYTES, BASE_NONE, NULL, 0x0,
13067 NULL, HFILL }
13069 { &hf_btmesh_generic_user_property_status_user_property_id,
13070 { "User Property ID", "btmesh.model.generic_user_property_status.user_property_id",
13071 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13072 NULL, HFILL }
13074 { &hf_btmesh_generic_user_property_status_user_access,
13075 { "User Access", "btmesh.model.generic_user_property_status.user_access",
13076 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_user_access), 0x0,
13077 NULL, HFILL }
13079 { &hf_btmesh_generic_user_property_status_user_property_value,
13080 { "User Property Value", "btmesh.model.generic_user_property_status.user_property_value",
13081 FT_BYTES, BASE_NONE, NULL, 0x0,
13082 NULL, HFILL }
13084 { &hf_btmesh_generic_client_properties_get_client_property_id,
13085 { "Client Property ID", "btmesh.model.generic_client_properties_get.client_property_id",
13086 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13087 NULL, HFILL }
13089 { &hf_btmesh_generic_client_properties_status_client_property_id,
13090 { "Client Property ID", "btmesh.model.generic_client_properties_status.client_property_id",
13091 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13092 NULL, HFILL }
13094 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id,
13095 { "Sensor Property ID", "btmesh.model.sensor_descriptor_status.descriptor_sensor_property_id",
13096 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13097 NULL, HFILL }
13099 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance,
13100 { "Sensor Positive Tolerance", "btmesh.model.sensor_descriptor_status.descriptor_positive_tolerance",
13101 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_sensor_descriptor_tolerance), 0x000FFF,
13102 NULL, HFILL }
13104 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance,
13105 { "Sensor Negative Tolerance", "btmesh.model.sensor_descriptor_status.descriptor_negative_tolerance",
13106 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_sensor_descriptor_tolerance), 0xFFF000,
13107 NULL, HFILL }
13109 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function,
13110 { "Sensor Sampling Function", "btmesh.model.sensor_descriptor_status.descriptor_sensor_sampling_function",
13111 FT_UINT8, BASE_DEC, VALS(btmesh_sensor_sampling_function_vals), 0x0,
13112 NULL, HFILL }
13114 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period,
13115 { "Sensor Measurement Period", "btmesh.model.sensor_descriptor_status.descriptor_sensor_measurement_period",
13116 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_period), 0x0,
13117 NULL, HFILL }
13119 { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval,
13120 { "Sensor Update Interval", "btmesh.model.sensor_descriptor_status.descriptor_sensor_update_interval",
13121 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_period), 0x0,
13122 NULL, HFILL }
13124 { &hf_btmesh_sensor_status_mpid_format,
13125 { "MPID Format", "btmesh.model.sensor_status.mpid.format",
13126 FT_UINT8, BASE_DEC, VALS(btmesh_mpid_format_vals), 0x01,
13127 NULL, HFILL }
13129 { &hf_btmesh_sensor_status_mpid_format_a_length,
13130 { "MPID Length", "btmesh.model.sensor_status.mpid.format_a.length",
13131 FT_UINT8, BASE_DEC, NULL, 0x1e,
13132 NULL, HFILL }
13134 { &hf_btmesh_sensor_status_mpid_format_b_length,
13135 { "MPID Length", "btmesh.model.sensor_status.mpid.format_b.length",
13136 FT_UINT8, BASE_DEC, NULL, 0xfe,
13137 NULL, HFILL }
13139 { &hf_btmesh_sensor_status_mpid_format_a_property_id,
13140 { "MPID Property ID", "btmesh.model.sensor_status.mpid.format_a.property_id",
13141 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0xFFE0,
13142 NULL, HFILL }
13144 { &hf_btmesh_sensor_status_mpid_format_b_property_id,
13145 { "MPID Property ID", "btmesh.model.sensor_status.mpid.format_b.property_id",
13146 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13147 NULL, HFILL }
13149 { &hf_btmesh_sensor_status_raw_value,
13150 { "Raw Value", "btmesh.model.sensor_status.raw_value",
13151 FT_BYTES, BASE_NONE, NULL, 0x0,
13152 NULL, HFILL }
13154 { &hf_btmesh_sensor_column_status_property_id,
13155 { "Property ID", "btmesh.model.sensor_column_status.property_id",
13156 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13157 NULL, HFILL }
13159 { &hf_btmesh_sensor_column_status_raw_value_a,
13160 { "Raw Value A", "btmesh.model.sensor_column_status.raw_value_a",
13161 FT_BYTES, BASE_NONE, NULL, 0x0,
13162 NULL, HFILL }
13164 { &hf_btmesh_sensor_column_status_raw_value_b,
13165 { "Raw Value B", "btmesh.model.sensor_column_status.raw_value_b",
13166 FT_BYTES, BASE_NONE, NULL, 0x0,
13167 NULL, HFILL }
13169 { &hf_btmesh_sensor_column_status_raw_value_c,
13170 { "Raw Value C", "btmesh.model.sensor_column_status.raw_value_c",
13171 FT_BYTES, BASE_NONE, NULL, 0x0,
13172 NULL, HFILL }
13174 { &hf_btmesh_sensor_series_status_property_id,
13175 { "Property ID", "btmesh.model.sensor_series_status.property_id",
13176 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13177 NULL, HFILL }
13179 { &hf_btmesh_sensor_series_status_raw_value_a,
13180 { "Raw Value A", "btmesh.model.sensor_series_status.raw_value_a",
13181 FT_BYTES, BASE_NONE, NULL, 0x0,
13182 NULL, HFILL }
13184 { &hf_btmesh_sensor_series_status_raw_value_b,
13185 { "Raw Value B", "btmesh.model.sensor_series_status.raw_value_b",
13186 FT_BYTES, BASE_NONE, NULL, 0x0,
13187 NULL, HFILL }
13189 { &hf_btmesh_sensor_series_status_raw_value_c,
13190 { "Raw Value C", "btmesh.model.sensor_series_status.raw_value_c",
13191 FT_BYTES, BASE_NONE, NULL, 0x0,
13192 NULL, HFILL }
13194 { &hf_btmesh_sensor_cadence_set_property_id,
13195 { "Property ID", "btmesh.model.sensor_cadence_set.property_id",
13196 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13197 NULL, HFILL }
13199 { &hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor,
13200 { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_set.fast_cadence_period_divisor",
13201 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13202 NULL, HFILL }
13204 { &hf_btmesh_sensor_cadence_set_status_trigger_type,
13205 { "Status Trigger Type", "btmesh.model.sensor_cadence_set.status_trigger_type",
13206 FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13207 NULL, HFILL }
13209 { &hf_btmesh_sensor_cadence_set_status_trigger_delta_down,
13210 { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_set.status_trigger_delta_down",
13211 FT_BYTES, BASE_NONE, NULL, 0x0,
13212 NULL, HFILL }
13214 { &hf_btmesh_sensor_cadence_set_status_trigger_delta_up,
13215 { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_set.status_trigger_delta_up",
13216 FT_BYTES, BASE_NONE, NULL, 0x0,
13217 NULL, HFILL }
13219 { &hf_btmesh_sensor_cadence_set_status_min_interval,
13220 { "Status Min Interval", "btmesh.model.sensor_cadence_set.status_min_interval",
13221 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13222 NULL, HFILL }
13224 { &hf_btmesh_sensor_cadence_set_fast_cadence_low,
13225 { "Fast Cadence Low", "btmesh.model.sensor_cadence_set.fast_cadence_low",
13226 FT_BYTES, BASE_NONE, NULL, 0x0,
13227 NULL, HFILL }
13229 { &hf_btmesh_sensor_cadence_set_fast_cadence_high,
13230 { "Fast Cadence High", "btmesh.model.sensor_cadence_set.fast_cadence_high",
13231 FT_BYTES, BASE_NONE, NULL, 0x0,
13232 NULL, HFILL }
13234 { &hf_btmesh_sensor_cadence_set_remainder_not_dissected,
13235 { "Remainder Not Dissected", "btmesh.model.sensor_cadence_set.remainder_not_dissected",
13236 FT_BYTES, BASE_NONE, NULL, 0x0,
13237 NULL, HFILL }
13239 { &hf_btmesh_sensor_cadence_set_unacknowledged_property_id,
13240 { "Property ID", "btmesh.model.sensor_cadence_set_unacknowledged.property_id",
13241 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13242 NULL, HFILL }
13244 { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor,
13245 { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_period_divisor",
13246 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13247 NULL, HFILL }
13249 { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type,
13250 { "Status Trigger Type", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_type",
13251 FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13252 NULL, HFILL }
13254 { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down,
13255 { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_delta_down",
13256 FT_BYTES, BASE_NONE, NULL, 0x0,
13257 NULL, HFILL }
13259 { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up,
13260 { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_delta_up",
13261 FT_BYTES, BASE_NONE, NULL, 0x0,
13262 NULL, HFILL }
13264 { &hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval,
13265 { "Status Min Interval", "btmesh.model.sensor_cadence_set_unacknowledged.status_min_interval",
13266 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13267 NULL, HFILL }
13269 { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low,
13270 { "Fast Cadence Low", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_low",
13271 FT_BYTES, BASE_NONE, NULL, 0x0,
13272 NULL, HFILL }
13274 { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high,
13275 { "Fast Cadence High", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_high",
13276 FT_BYTES, BASE_NONE, NULL, 0x0,
13277 NULL, HFILL }
13279 { &hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected,
13280 { "Remainder Not Dissected", "btmesh.model.sensor_cadence_set_unacknowledged.remainder_not_dissected",
13281 FT_BYTES, BASE_NONE, NULL, 0x0,
13282 NULL, HFILL }
13284 { &hf_btmesh_sensor_cadence_status_property_id,
13285 { "Property ID", "btmesh.model.sensor_cadence_status.property_id",
13286 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13287 NULL, HFILL }
13289 { &hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor,
13290 { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_status.fast_cadence_period_divisor",
13291 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13292 NULL, HFILL }
13294 { &hf_btmesh_sensor_cadence_status_status_trigger_type,
13295 { "Status Trigger Type", "btmesh.model.sensor_cadence_status.status_trigger_type",
13296 FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13297 NULL, HFILL }
13299 { &hf_btmesh_sensor_cadence_status_status_trigger_delta_down,
13300 { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_status.status_trigger_delta_down",
13301 FT_BYTES, BASE_NONE, NULL, 0x0,
13302 NULL, HFILL }
13304 { &hf_btmesh_sensor_cadence_status_status_trigger_delta_up,
13305 { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_status.status_trigger_delta_up",
13306 FT_BYTES, BASE_NONE, NULL, 0x0,
13307 NULL, HFILL }
13309 { &hf_btmesh_sensor_cadence_status_status_min_interval,
13310 { "Status Min Interval", "btmesh.model.sensor_cadence_status.status_min_interval",
13311 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13312 NULL, HFILL }
13314 { &hf_btmesh_sensor_cadence_status_fast_cadence_low,
13315 { "Fast Cadence Low", "btmesh.model.sensor_cadence_status.fast_cadence_low",
13316 FT_BYTES, BASE_NONE, NULL, 0x0,
13317 NULL, HFILL }
13319 { &hf_btmesh_sensor_cadence_status_fast_cadence_high,
13320 { "Fast Cadence High", "btmesh.model.sensor_cadence_status.fast_cadence_high",
13321 FT_BYTES, BASE_NONE, NULL, 0x0,
13322 NULL, HFILL }
13324 { &hf_btmesh_sensor_cadence_status_remainder_not_dissected,
13325 { "Remainder Not Dissected", "btmesh.model.sensor_cadence_status.remainder_not_dissected",
13326 FT_BYTES, BASE_NONE, NULL, 0x0,
13327 NULL, HFILL }
13329 { &hf_btmesh_sensor_settings_status_sensor_property_id,
13330 { "Sensor Property ID", "btmesh.model.sensor_settings_status.sensor_property_id",
13331 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13332 NULL, HFILL }
13334 { &hf_btmesh_sensor_settings_status_sensor_setting_property_id,
13335 { "Sensor Setting Property ID", "btmesh.model.sensor_settings_status.sensor_setting_property_id",
13336 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13337 NULL, HFILL }
13339 { &hf_btmesh_sensor_setting_set_sensor_property_id,
13340 { "Sensor Property ID", "btmesh.model.sensor_setting_set.sensor_property_id",
13341 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13342 NULL, HFILL }
13344 { &hf_btmesh_sensor_setting_set_sensor_setting_property_id,
13345 { "Sensor Setting Property ID", "btmesh.model.sensor_setting_set.sensor_setting_property_id",
13346 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13347 NULL, HFILL }
13349 { &hf_btmesh_sensor_setting_set_sensor_setting_raw,
13350 { "Sensor Setting Raw", "btmesh.model.sensor_setting_set.sensor_setting_raw",
13351 FT_BYTES, BASE_NONE, NULL, 0x0,
13352 NULL, HFILL }
13354 { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id,
13355 { "Sensor Property ID", "btmesh.model.sensor_setting_set_unacknowledged.sensor_property_id",
13356 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13357 NULL, HFILL }
13359 { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id,
13360 { "Sensor Setting Property ID", "btmesh.model.sensor_setting_set_unacknowledged.sensor_setting_property_id",
13361 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13362 NULL, HFILL }
13364 { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw,
13365 { "Sensor Setting Raw", "btmesh.model.sensor_setting_set_unacknowledged.sensor_setting_raw",
13366 FT_BYTES, BASE_NONE, NULL, 0x0,
13367 NULL, HFILL }
13369 { &hf_btmesh_sensor_setting_status_sensor_property_id,
13370 { "Sensor Property ID", "btmesh.model.sensor_setting_status.sensor_property_id",
13371 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13372 NULL, HFILL }
13374 { &hf_btmesh_sensor_setting_status_sensor_setting_property_id,
13375 { "Sensor Setting Property ID", "btmesh.model.sensor_setting_status.sensor_setting_property_id",
13376 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13377 NULL, HFILL }
13379 { &hf_btmesh_sensor_setting_status_sensor_setting_access,
13380 { "Sensor Setting Access", "btmesh.model.sensor_setting_status.sensor_setting_access",
13381 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_setting_access), 0x0,
13382 NULL, HFILL }
13384 { &hf_btmesh_sensor_setting_status_sensor_setting_raw,
13385 { "Sensor Setting Raw", "btmesh.model.sensor_setting_status.sensor_setting_raw",
13386 FT_BYTES, BASE_NONE, NULL, 0x0,
13387 NULL, HFILL }
13389 { &hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id,
13390 { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_get.manufacturer_property_id",
13391 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13392 NULL, HFILL }
13394 { &hf_btmesh_generic_admin_property_get_admin_property_id,
13395 { "Admin Property ID", "btmesh.model.generic_admin_property_get.admin_property_id",
13396 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13397 NULL, HFILL }
13399 { &hf_btmesh_generic_user_property_get_user_property_id,
13400 { "User Property ID", "btmesh.model.generic_user_property_get.user_property_id",
13401 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13402 NULL, HFILL }
13404 { &hf_btmesh_sensor_descriptor_get_property_id,
13405 { "Property ID", "btmesh.model.sensor_descriptor_get.property_id",
13406 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13407 NULL, HFILL }
13409 { &hf_btmesh_sensor_get_property_id,
13410 { "Property ID", "btmesh.model.sensor_get.property_id",
13411 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13412 NULL, HFILL }
13414 { &hf_btmesh_sensor_column_get_property_id,
13415 { "Property ID", "btmesh.model.sensor_column_get.property_id",
13416 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13417 NULL, HFILL }
13419 { &hf_btmesh_sensor_column_get_raw_value_a,
13420 { "Raw Value A", "btmesh.model.sensor_column_get.raw_value_a",
13421 FT_BYTES, BASE_NONE, NULL, 0x0,
13422 NULL, HFILL }
13424 { &hf_btmesh_sensor_series_get_property_id,
13425 { "Property ID", "btmesh.model.sensor_series_get.property_id",
13426 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13427 NULL, HFILL }
13429 { &hf_btmesh_sensor_series_get_raw_value_a1,
13430 { "Raw Value A1", "btmesh.model.sensor_series_get.raw_value_a1",
13431 FT_BYTES, BASE_NONE, NULL, 0x0,
13432 NULL, HFILL }
13434 { &hf_btmesh_sensor_series_get_raw_value_a2,
13435 { "Raw Value A2", "btmesh.model.sensor_series_get.raw_value_a2",
13436 FT_BYTES, BASE_NONE, NULL, 0x0,
13437 NULL, HFILL }
13439 { &hf_btmesh_sensor_cadence_get_property_id,
13440 { "Property ID", "btmesh.model.sensor_cadence_get.property_id",
13441 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13442 NULL, HFILL }
13444 { &hf_btmesh_sensor_settings_get_sensor_property_id,
13445 { "Sensor Property ID", "btmesh.model.sensor_settings_get.sensor_property_id",
13446 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13447 NULL, HFILL }
13449 { &hf_btmesh_sensor_setting_get_sensor_property_id,
13450 { "Sensor Property ID", "btmesh.model.sensor_setting_get.sensor_property_id",
13451 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13452 NULL, HFILL }
13454 { &hf_btmesh_sensor_setting_get_sensor_setting_property_id,
13455 { "Sensor Setting Property ID", "btmesh.model.sensor_setting_get.sensor_setting_property_id",
13456 FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13457 NULL, HFILL }
13459 { &hf_bt_characteristic_illuminance,
13460 { "Illuminance", "btmesh.property.illuminance",
13461 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_illuminance), 0x0,
13462 NULL, HFILL }
13464 { &hf_bt_characteristic_perceived_lightness,
13465 { "Perceived Lightness", "btmesh.property.perceived_lightness",
13466 FT_UINT16, BASE_DEC, NULL, 0x0,
13467 NULL, HFILL }
13469 { &hf_bt_characteristic_percentage_8,
13470 { "Percentage 8", "btmesh.property.percentage_8",
13471 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_percentage_8), 0x0,
13472 NULL, HFILL }
13474 { &hf_bt_characteristic_coefficient,
13475 { "Coefficient", "btmesh.property.coefficient",
13476 FT_FLOAT, BASE_NONE, NULL, 0x0,
13477 NULL, HFILL }
13479 { &hf_bt_characteristic_time_millisecond_24,
13480 { "Time Millisecond 24", "btmesh.property.time_millisecond_24",
13481 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_time_millisecond_24), 0x0,
13482 NULL, HFILL }
13484 { &hf_bt_characteristic_count_16,
13485 { "Count 16", "btmesh.property.count_16",
13486 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_count_16), 0x0,
13487 NULL, HFILL }
13489 { &hf_bt_phony_characteristic_percentage_change_16,
13490 { "Percentage Change", "btmesh.property.percentage_change_16",
13491 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_percentage_change_16), 0x0,
13492 NULL, HFILL }
13494 { &hf_bt_phony_characteristic_index,
13495 { "Index", "btmesh.property.index",
13496 FT_UINT16, BASE_DEC, NULL, 0x0,
13497 NULL, HFILL }
13499 { &hf_bt_characteristic_time_decihour_8,
13500 { "Time Decihour 8", "btmesh.property.time_decihour_8",
13501 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_decihour_8), 0x0,
13502 NULL, HFILL }
13504 { &hf_bt_characteristic_temperature_8,
13505 { "Temperature 8", "btmesh.property.temperature_8",
13506 FT_INT8, BASE_CUSTOM, CF_FUNC(format_temperature_8), 0x0,
13507 NULL, HFILL }
13509 { &hf_bt_characteristic_temperature,
13510 { "Temperature", "btmesh.property.temperature",
13511 FT_INT16, BASE_CUSTOM, CF_FUNC(format_temperature), 0x0,
13512 NULL, HFILL }
13514 { &hf_bt_characteristic_electric_current,
13515 { "Electric Current", "btmesh.property.electric_current",
13516 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_electric_current), 0x0,
13517 NULL, HFILL }
13519 { &hf_bt_characteristic_energy,
13520 { "Energy", "btmesh.property.energy",
13521 FT_UINT24, BASE_CUSTOM, CF_FUNC(format_energy), 0x0,
13522 NULL, HFILL }
13524 { &hf_bt_characteristic_generic_level,
13525 { "Generic Level", "btmesh.property.generic_level",
13526 FT_UINT16, BASE_DEC, NULL, 0x0,
13527 NULL, HFILL }
13529 { &hf_bt_characteristic_boolean,
13530 { "Boolean", "btmesh.property.boolean",
13531 FT_UINT8, BASE_CUSTOM, CF_FUNC(format_boolean), 0x0,
13532 NULL, HFILL }
13534 { &hf_bt_characteristic_time_second_16,
13535 { "Time Second 16", "btmesh.property.time_second_16",
13536 FT_UINT16, BASE_CUSTOM, CF_FUNC(format_time_second_16), 0x0,
13537 NULL, HFILL }
13541 static int *ett[] = {
13542 &ett_btmesh,
13543 &ett_btmesh_net_pdu,
13544 &ett_btmesh_transp_pdu,
13545 &ett_btmesh_transp_ctrl_msg,
13546 &ett_btmesh_upper_transp_acc_pdu,
13547 &ett_btmesh_segmented_access_fragments,
13548 &ett_btmesh_segmented_access_fragment,
13549 &ett_btmesh_segmented_control_fragments,
13550 &ett_btmesh_segmented_control_fragment,
13551 &ett_btmesh_access_pdu,
13552 &ett_btmesh_model_layer,
13553 &ett_btmesh_config_model_netapp_index,
13554 &ett_btmesh_config_model_publishperiod,
13555 &ett_btmesh_config_model_publishretransmit,
13556 &ett_btmesh_config_model_relayretransmit,
13557 &ett_btmesh_config_model_network_transmit,
13558 &ett_btmesh_config_model_element,
13559 &ett_btmesh_config_model_model,
13560 &ett_btmesh_config_model_vendor,
13561 &ett_btmesh_config_composition_data_status_features,
13562 &ett_btmesh_config_model_pub_app_index,
13563 &ett_btmesh_config_model_addresses,
13564 &ett_btmesh_config_model_netkey_list,
13565 &ett_btmesh_config_model_appkey_list,
13566 &ett_btmesh_config_model_net_index,
13567 &ett_btmesh_config_model_app_index,
13568 &ett_btmesh_config_heartbeat_publication_set_features,
13569 &ett_btmesh_config_heartbeat_publication_status_features,
13570 &ett_btmesh_config_model_fault_array,
13571 &ett_btmesh_scene_register_status_scenes,
13572 &ett_btmesh_scheduler_model_month,
13573 &ett_btmesh_scheduler_model_day_of_week,
13574 &ett_btmesh_scheduler_schedules,
13575 &ett_btmesh_user_property_ids,
13576 &ett_btmesh_admin_property_ids,
13577 &ett_btmesh_manufacturer_property_ids,
13578 &ett_btmesh_generic_client_property_ids,
13579 &ett_btmesh_sensor_setting_property_ids,
13582 static ei_register_info ei[] = {
13583 { &ei_btmesh_not_decoded_yet,{ "btmesh.not_decoded_yet", PI_PROTOCOL, PI_NOTE, "Not decoded yet", EXPFILL } },
13584 { &ei_btmesh_unknown_payload,{ "btmesh.unknown_payload", PI_PROTOCOL, PI_ERROR, "Unknown Payload", EXPFILL } },
13587 expert_module_t* expert_btmesh;
13589 module_t *btmesh_module;
13591 /* UAT Net Key and App Key definitions */
13592 static uat_field_t btmesh_uat_flds[] = {
13593 UAT_FLD_CSTRING(uat_btmesh_records, network_key_string, "Network Key", "Network Key"),
13594 UAT_FLD_CSTRING(uat_btmesh_records, application_key_string, "Application Key", "Application Key"),
13595 UAT_FLD_CSTRING(uat_btmesh_records, ivindex_string, "IVindex", "IVindex"),
13596 UAT_END_FIELDS
13599 /* UAT Device Key definition */
13600 static uat_field_t btmesh_dev_key_uat_flds[] = {
13601 UAT_FLD_CSTRING(uat_btmesh_dev_key_records, device_key_string, "Device Key", "Device Key"),
13602 UAT_FLD_CSTRING(uat_btmesh_dev_key_records, src_string, "SRC Address", "SRC Address"),
13603 UAT_END_FIELDS
13606 /* UAT Label UUID definition */
13607 static uat_field_t btmesh_label_uuid_uat_flds[] = {
13608 UAT_FLD_CSTRING(uat_btmesh_label_uuid_records, label_uuid_string, "Label UUID", "Label UUID"),
13609 UAT_END_FIELDS
13612 proto_btmesh = proto_register_protocol("Bluetooth Mesh", "BT Mesh", "btmesh");
13614 proto_register_field_array(proto_btmesh, hf, array_length(hf));
13615 proto_register_subtree_array(ett, array_length(ett));
13617 expert_btmesh = expert_register_protocol(proto_btmesh);
13618 expert_register_field_array(expert_btmesh, ei, array_length(ei));
13620 btmesh_module = prefs_register_protocol_subtree("Bluetooth", proto_btmesh, NULL);
13622 prefs_register_static_text_preference(btmesh_module, "version",
13623 "Bluetooth Mesh Profile v1.0",
13624 "Version of protocol supported by this dissector.");
13626 btmesh_uat = uat_new("BTMesh Network and Application keys",
13627 sizeof(uat_btmesh_record_t), /* record size */
13628 "btmesh_nw_keys", /* filename */
13629 true, /* from_profile */
13630 &uat_btmesh_records, /* data_ptr */
13631 &num_btmesh_uat, /* numitems_ptr */
13632 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
13633 NULL, /* help */
13634 uat_btmesh_record_copy_cb, /* copy callback */
13635 uat_btmesh_record_update_cb, /* update callback */
13636 uat_btmesh_record_free_cb, /* free callback */
13637 NULL, /* post update callback */
13638 NULL, /* reset callback */
13639 btmesh_uat_flds); /* UAT field definitions */
13641 prefs_register_uat_preference(btmesh_module,
13642 "mesh_keys_table",
13643 "Mesh Keys",
13644 "Configured Mesh Keys",
13645 btmesh_uat);
13647 btmesh_dev_key_uat = uat_new("BTMesh Device keys",
13648 sizeof(uat_btmesh_dev_key_record_t), /* record size */
13649 "btmesh_dev_keys", /* filename */
13650 true, /* from_profile */
13651 &uat_btmesh_dev_key_records, /* data_ptr */
13652 &num_btmesh_dev_key_uat, /* numitems_ptr */
13653 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
13654 NULL, /* help */
13655 uat_btmesh_dev_key_record_copy_cb, /* copy callback */
13656 uat_btmesh_dev_key_record_update_cb, /* update callback */
13657 uat_btmesh_dev_key_record_free_cb, /* free callback */
13658 NULL, /* post update callback */
13659 NULL, /* reset callback */
13660 btmesh_dev_key_uat_flds); /* UAT field definitions */
13662 prefs_register_uat_preference(btmesh_module,
13663 "mesh_dev_key_table",
13664 "Device Keys",
13665 "Configured Mesh Device Keys",
13666 btmesh_dev_key_uat);
13668 btmesh_label_uuid_uat = uat_new("BTMesh Label UUIDs",
13669 sizeof(uat_btmesh_label_uuid_record_t), /* record size */
13670 "btmesh_label_uuids", /* filename */
13671 true, /* from_profile */
13672 &uat_btmesh_label_uuid_records, /* data_ptr */
13673 &num_btmesh_label_uuid_uat, /* numitems_ptr */
13674 UAT_AFFECTS_DISSECTION, /* affects dissection of packets, but not set of named fields */
13675 NULL, /* help */
13676 uat_btmesh_label_uuid_record_copy_cb, /* copy callback */
13677 uat_btmesh_label_uuid_record_update_cb, /* update callback */
13678 uat_btmesh_label_uuid_record_free_cb, /* free callback */
13679 NULL, /* post update callback */
13680 NULL, /* reset callback */
13681 btmesh_label_uuid_uat_flds); /* UAT field definitions */
13683 prefs_register_uat_preference(btmesh_module,
13684 "mesh_label_uuid_table",
13685 "Label UUIDs",
13686 "Configured Mesh Label UUIDs",
13687 btmesh_label_uuid_uat);
13689 btmesh_model_vendor_dissector_table = register_dissector_table("btmesh.model.vendor", "BT Mesh model vendor", proto_btmesh, FT_UINT16, BASE_DEC);
13691 register_dissector("btmesh.msg", dissect_btmesh_msg, proto_btmesh);
13693 reassembly_table_register(&upper_transport_reassembly_table, &upper_transport_reassembly_table_functions);
13697 * Editor modelines
13699 * Local Variables:
13700 * c-basic-offset: 4
13701 * tab-width: 8
13702 * indent-tabs-mode: nil
13703 * End:
13705 * ex: set shiftwidth=4 tabstop=8 expandtab:
13706 * :indentSize=4:tabSize=8:noTabs=true: