Coverage Report

Created: 2026-09-28 06:52

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-btmesh.c
Line
Count
Source
1
/* packet-btmesh.c
2
 * Routines for Bluetooth mesh dissection
3
 *
4
 * Copyright 2017, Anders Broman <anders.broman@ericsson.com>
5
 * Copyright 2019-2021, Piotr Winiarczyk <wino45@gmail.com>
6
 *
7
 * Wireshark - Network traffic analyzer
8
 * By Gerald Combs <gerald@wireshark.org>
9
 * Copyright 1998 Gerald Combs
10
 *
11
 * SPDX-License-Identifier: GPL-2.0-or-later
12
 *
13
 * Ref: Mesh Profile v1.0
14
 */
15
#include "config.h"
16
17
#include "packet-bluetooth.h"
18
#include "packet-btatt.h"
19
#include "packet-btmesh.h"
20
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>
31
#include <wsutil/epochs.h>
32
33
0
#define BTMESH_NOT_USED 0
34
0
#define BTMESH_KEY_ENTRY_VALID 4
35
0
#define BTMESH_DEVICE_KEY_ENTRY_VALID 2
36
0
#define BTMESH_LABEL_UUID_ENTRY_VALID 1
37
0
#define NO_LABEL_UUID_IDX_USED -1
38
0
#define PROPERTY_LENGTH_NO_HINT -1
39
40
0
#define SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY 0
41
#define SENSOR_CADENCE_TRIGGER_TYPE_PERCENTAGE 1
42
43
0
#define MPID_FORMAT_A 0
44
#define MPID_FORMAT_B 1
45
46
0
#define DISSECTOR_SIMPLE       0
47
#define DISSECTOR_THREE_VALUES 1
48
49
0
#define NOT_SUPPORTED_PROPERTY 0
50
0
#define NOT_SUPPORTED_CHARACTERISTIC -1
51
52
0
#define CONFIG_APPKEY_ADD                                        0x0000
53
0
#define CONFIG_APPKEY_UPDATE                                     0x0001
54
0
#define CONFIG_COMPOSITION_DATA_STATUS                           0x0002
55
0
#define CONFIG_MODEL_PUBLICATION_SET                             0x0003
56
0
#define HEALTH_CURRENT_STATUS                                    0x0004
57
0
#define HEALTH_FAULT_STATUS                                      0x0005
58
0
#define CONFIG_HEARTBEAT_PUBLICATION_STATUS                      0x0006
59
0
#define LIGHT_LC_PROPERTY_SET                                    0x0062
60
0
#define LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED                     0x0063
61
0
#define LIGHT_LC_PROPERTY_STATUS                                 0x0064
62
0
#define CONFIG_APPKEY_DELETE                                     0x8000
63
0
#define CONFIG_APPKEY_GET                                        0x8001
64
0
#define CONFIG_APPKEY_LIST                                       0x8002
65
0
#define CONFIG_APPKEY_STATUS                                     0x8003
66
0
#define HEALTH_ATTENTION_GET                                     0x8004
67
0
#define HEALTH_ATTENTION_SET                                     0x8005
68
0
#define HEALTH_ATTENTION_SET_UNACKNOWLEDGED                      0x8006
69
0
#define HEALTH_ATTENTION_STATUS                                  0x8007
70
0
#define CONFIG_COMPOSITION_DATA_GET                              0x8008
71
0
#define CONFIG_BEACON_GET                                        0x8009
72
0
#define CONFIG_BEACON_SET                                        0x800a
73
0
#define CONFIG_BEACON_STATUS                                     0x800b
74
0
#define CONFIG_DEFAULT_TTL_GET                                   0x800c
75
0
#define CONFIG_DEFAULT_TTL_SET                                   0x800d
76
0
#define CONFIG_DEFAULT_TTL_STATUS                                0x800e
77
0
#define CONFIG_FRIEND_GET                                        0x800f
78
0
#define CONFIG_FRIEND_SET                                        0x8010
79
0
#define CONFIG_FRIEND_STATUS                                     0x8011
80
0
#define CONFIG_GATT_PROXY_GET                                    0x8012
81
0
#define CONFIG_GATT_PROXY_SET                                    0x8013
82
0
#define CONFIG_GATT_PROXY_STATUS                                 0x8014
83
0
#define CONFIG_KEY_REFRESH_PHASE_GET                             0x8015
84
0
#define CONFIG_KEY_REFRESH_PHASE_SET                             0x8016
85
0
#define CONFIG_KEY_REFRESH_PHASE_STATUS                          0x8017
86
0
#define CONFIG_MODEL_PUBLICATION_GET                             0x8018
87
0
#define CONFIG_MODEL_PUBLICATION_STATUS                          0x8019
88
0
#define CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET             0x801a
89
0
#define CONFIG_MODEL_SUBSCRIPTION_ADD                            0x801b
90
0
#define CONFIG_MODEL_SUBSCRIPTION_DELETE                         0x801c
91
0
#define CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL                     0x801d
92
0
#define CONFIG_MODEL_SUBSCRIPTION_OVERWRITE                      0x801e
93
0
#define CONFIG_MODEL_SUBSCRIPTION_STATUS                         0x801f
94
0
#define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD            0x8020
95
0
#define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE         0x8021
96
0
#define CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE      0x8022
97
0
#define CONFIG_NETWORK_TRANSMIT_GET                              0x8023
98
0
#define CONFIG_NETWORK_TRANSMIT_SET                              0x8024
99
0
#define CONFIG_NETWORK_TRANSMIT_STATUS                           0x8025
100
0
#define CONFIG_RELAY_GET                                         0x8026
101
0
#define CONFIG_RELAY_SET                                         0x8027
102
0
#define CONFIG_RELAY_STATUS                                      0x8028
103
0
#define CONFIG_SIG_MODEL_SUBSCRIPTION_GET                        0x8029
104
0
#define CONFIG_SIG_MODEL_SUBSCRIPTION_LIST                       0x802a
105
0
#define CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET                     0x802b
106
0
#define CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST                    0x802c
107
0
#define CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET                    0x802d
108
0
#define CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS                 0x802e
109
0
#define HEALTH_FAULT_CLEAR                                       0x802f
110
0
#define HEALTH_FAULT_CLEAR_UNACKNOWLEDGED                        0x8030
111
0
#define HEALTH_FAULT_GET                                         0x8031
112
0
#define HEALTH_FAULT_TEST                                        0x8032
113
0
#define HEALTH_FAULT_TEST_UNACKNOWLEDGED                         0x8033
114
0
#define HEALTH_PERIOD_GET                                        0x8034
115
0
#define HEALTH_PERIOD_SET                                        0x8035
116
0
#define HEALTH_PERIOD_SET_UNACKNOWLEDGED                         0x8036
117
0
#define HEALTH_PERIOD_STATUS                                     0x8037
118
0
#define CONFIG_HEARTBEAT_PUBLICATION_GET                         0x8038
119
0
#define CONFIG_HEARTBEAT_PUBLICATION_SET                         0x8039
120
0
#define CONFIG_HEARTBEAT_SUBSCRIPTION_GET                        0x803a
121
0
#define CONFIG_HEARTBEAT_SUBSCRIPTION_SET                        0x803b
122
0
#define CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS                     0x803c
123
0
#define CONFIG_MODEL_APP_BIND                                    0x803d
124
0
#define CONFIG_MODEL_APP_STATUS                                  0x803e
125
0
#define CONFIG_MODEL_APP_UNBIND                                  0x803f
126
0
#define CONFIG_NETKEY_ADD                                        0x8040
127
0
#define CONFIG_NETKEY_DELETE                                     0x8041
128
0
#define CONFIG_NETKEY_GET                                        0x8042
129
0
#define CONFIG_NETKEY_LIST                                       0x8043
130
0
#define CONFIG_NETKEY_STATUS                                     0x8044
131
0
#define CONFIG_NETKEY_UPDATE                                     0x8045
132
0
#define CONFIG_NODE_IDENTITY_GET                                 0x8046
133
0
#define CONFIG_NODE_IDENTITY_SET                                 0x8047
134
0
#define CONFIG_NODE_IDENTITY_STATUS                              0x8048
135
0
#define CONFIG_NODE_RESET                                        0x8049
136
0
#define CONFIG_NODE_RESET_STATUS                                 0x804a
137
0
#define CONFIG_SIG_MODEL_APP_GET                                 0x804b
138
0
#define CONFIG_SIG_MODEL_APP_LIST                                0x804c
139
0
#define CONFIG_VENDOR_MODEL_APP_GET                              0x804d
140
0
#define CONFIG_VENDOR_MODEL_APP_LIST                             0x804e
141
0
#define GENERIC_LOCATION_GLOBAL_STATUS                           0x0040
142
0
#define GENERIC_LOCATION_GLOBAL_SET                              0x0041
143
0
#define GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED               0x0042
144
0
#define GENERIC_ONOFF_GET                                        0x8201
145
0
#define GENERIC_ONOFF_SET                                        0x8202
146
0
#define GENERIC_ONOFF_SET_UNACKNOWLEDGED                         0x8203
147
0
#define GENERIC_ONOFF_STATUS                                     0x8204
148
0
#define GENERIC_LEVEL_GET                                        0x8205
149
0
#define GENERIC_LEVEL_SET                                        0x8206
150
0
#define GENERIC_LEVEL_SET_UNACKNOWLEDGED                         0x8207
151
0
#define GENERIC_LEVEL_STATUS                                     0x8208
152
0
#define GENERIC_DELTA_SET                                        0x8209
153
0
#define GENERIC_DELTA_SET_UNACKNOWLEDGED                         0x820a
154
0
#define GENERIC_MOVE_SET                                         0x820b
155
0
#define GENERIC_MOVE_SET_UNACKNOWLEDGED                          0x820c
156
0
#define GENERIC_DEFAULT_TRANSITION_TIME_GET                      0x820d
157
0
#define GENERIC_DEFAULT_TRANSITION_TIME_SET                      0x820e
158
0
#define GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED       0x820f
159
0
#define GENERIC_DEFAULT_TRANSITION_TIME_STATUS                   0x8210
160
0
#define GENERIC_ONPOWERUP_GET                                    0x8211
161
0
#define GENERIC_ONPOWERUP_STATUS                                 0x8212
162
0
#define GENERIC_ONPOWERUP_SET                                    0x8213
163
0
#define GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED                     0x8214
164
0
#define GENERIC_POWER_LEVEL_GET                                  0x8215
165
0
#define GENERIC_POWER_LEVEL_SET                                  0x8216
166
0
#define GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED                   0x8217
167
0
#define GENERIC_POWER_LEVEL_STATUS                               0x8218
168
0
#define GENERIC_POWER_LAST_GET                                   0x8219
169
0
#define GENERIC_POWER_LAST_STATUS                                0x821a
170
0
#define GENERIC_POWER_DEFAULT_GET                                0x821b
171
0
#define GENERIC_POWER_DEFAULT_STATUS                             0x821c
172
0
#define GENERIC_POWER_RANGE_GET                                  0x821d
173
0
#define GENERIC_POWER_RANGE_STATUS                               0x821e
174
0
#define GENERIC_POWER_DEFAULT_SET                                0x821f
175
0
#define GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED                 0x8220
176
0
#define GENERIC_POWER_RANGE_SET                                  0x8221
177
0
#define GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED                   0x8222
178
0
#define GENERIC_BATTERY_GET                                      0x8223
179
0
#define GENERIC_BATTERY_STATUS                                   0x8224
180
0
#define GENERIC_LOCATION_GLOBAL_GET                              0x8225
181
0
#define GENERIC_LOCATION_LOCAL_GET                               0x8226
182
0
#define GENERIC_LOCATION_LOCAL_STATUS                            0x8227
183
0
#define GENERIC_LOCATION_LOCAL_SET                               0x8228
184
0
#define GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED                0x8229
185
0
#define SCENE_STATUS                                             0x005e
186
0
#define SCENE_GET                                                0x8241
187
0
#define SCENE_RECALL                                             0x8242
188
0
#define SCENE_RECALL_UNACKNOWLEDGED                              0x8243
189
0
#define SCENE_REGISTER_GET                                       0x8244
190
0
#define SCENE_REGISTER_STATUS                                    0x8245
191
0
#define SCENE_STORE                                              0x8246
192
0
#define SCENE_STORE_UNACKNOWLEDGED                               0x8247
193
0
#define SCENE_DELETE                                             0x829e
194
0
#define SCENE_DELETE_UNACKNOWLEDGED                              0x829f
195
0
#define TIME_SET                                                 0x005c
196
0
#define TIME_STATUS                                              0x005d
197
0
#define SCHEDULER_ACTION_STATUS                                  0x005f
198
0
#define SCHEDULER_ACTION_SET                                     0x0060
199
0
#define SCHEDULER_ACTION_SET_UNACKNOWLEDGED                      0x0061
200
0
#define TIME_GET                                                 0x8237
201
0
#define TIME_ROLE_GET                                            0x8238
202
0
#define TIME_ROLE_SET                                            0x8239
203
0
#define TIME_ROLE_STATUS                                         0x823a
204
0
#define TIME_ZONE_GET                                            0x823b
205
0
#define TIME_ZONE_SET                                            0x823c
206
0
#define TIME_ZONE_STATUS                                         0x823d
207
0
#define TAI_UTC_DELTA_GET                                        0x823e
208
0
#define TAI_UTC_DELTA_SET                                        0x823f
209
0
#define TAI_UTC_DELTA_STATUS                                     0x8240
210
0
#define SCHEDULER_ACTION_GET                                     0x8248
211
0
#define SCHEDULER_GET                                            0x8249
212
0
#define SCHEDULER_STATUS                                         0x824a
213
214
0
#define GENERIC_MANUFACTURER_PROPERTIES_STATUS                   0x0043
215
0
#define GENERIC_MANUFACTURER_PROPERTY_SET                        0x0044
216
0
#define GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED         0x0045
217
0
#define GENERIC_MANUFACTURER_PROPERTY_STATUS                     0x0046
218
0
#define GENERIC_ADMIN_PROPERTIES_STATUS                          0x0047
219
0
#define GENERIC_ADMIN_PROPERTY_SET                               0x0048
220
0
#define GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED                0x0049
221
0
#define GENERIC_ADMIN_PROPERTY_STATUS                            0x004a
222
0
#define GENERIC_USER_PROPERTIES_STATUS                           0x004b
223
0
#define GENERIC_USER_PROPERTY_SET                                0x004c
224
0
#define GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED                 0x004d
225
0
#define GENERIC_USER_PROPERTY_STATUS                             0x004e
226
0
#define GENERIC_CLIENT_PROPERTIES_GET                            0x004f
227
0
#define GENERIC_CLIENT_PROPERTIES_STATUS                         0x0050
228
229
0
#define SENSOR_DESCRIPTOR_STATUS                                 0x0051
230
0
#define SENSOR_STATUS                                            0x0052
231
0
#define SENSOR_COLUMN_STATUS                                     0x0053
232
0
#define SENSOR_SERIES_STATUS                                     0x0054
233
0
#define SENSOR_CADENCE_SET                                       0x0055
234
0
#define SENSOR_CADENCE_SET_UNACKNOWLEDGED                        0x0056
235
0
#define SENSOR_CADENCE_STATUS                                    0x0057
236
0
#define SENSOR_SETTINGS_STATUS                                   0x0058
237
0
#define SENSOR_SETTING_SET                                       0x0059
238
0
#define SENSOR_SETTING_SET_UNACKNOWLEDGED                        0x005a
239
0
#define SENSOR_SETTING_STATUS                                    0x005b
240
0
#define GENERIC_MANUFACTURER_PROPERTIES_GET                      0x822a
241
0
#define GENERIC_MANUFACTURER_PROPERTY_GET                        0x822b
242
0
#define GENERIC_ADMIN_PROPERTIES_GET                             0x822c
243
0
#define GENERIC_ADMIN_PROPERTY_GET                               0x822d
244
0
#define GENERIC_USER_PROPERTIES_GET                              0x822e
245
0
#define GENERIC_USER_PROPERTY_GET                                0x822f
246
0
#define SENSOR_DESCRIPTOR_GET                                    0x8230
247
0
#define SENSOR_GET                                               0x8231
248
0
#define SENSOR_COLUMN_GET                                        0x8232
249
0
#define SENSOR_SERIES_GET                                        0x8233
250
0
#define SENSOR_CADENCE_GET                                       0x8234
251
0
#define SENSOR_SETTINGS_GET                                      0x8235
252
0
#define SENSOR_SETTING_GET                                       0x8236
253
254
0
#define LIGHT_LIGHTNESS_GET                                      0x824b
255
0
#define LIGHT_LIGHTNESS_SET                                      0x824c
256
0
#define LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED                       0x824d
257
0
#define LIGHT_LIGHTNESS_STATUS                                   0x824e
258
0
#define LIGHT_LIGHTNESS_LINEAR_GET                               0x824f
259
0
#define LIGHT_LIGHTNESS_LINEAR_SET                               0x8250
260
0
#define LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED                0x8251
261
0
#define LIGHT_LIGHTNESS_LINEAR_STATUS                            0x8252
262
0
#define LIGHT_LIGHTNESS_LAST_GET                                 0x8253
263
0
#define LIGHT_LIGHTNESS_LAST_STATUS                              0x8254
264
0
#define LIGHT_LIGHTNESS_DEFAULT_GET                              0x8255
265
0
#define LIGHT_LIGHTNESS_DEFAULT_STATUS                           0x8256
266
0
#define LIGHT_LIGHTNESS_RANGE_GET                                0x8257
267
0
#define LIGHT_LIGHTNESS_RANGE_STATUS                             0x8258
268
0
#define LIGHT_LIGHTNESS_DEFAULT_SET                              0x8259
269
0
#define LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED               0x825a
270
0
#define LIGHT_LIGHTNESS_RANGE_SET                                0x825b
271
0
#define LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED                 0x825c
272
0
#define LIGHT_CTL_GET                                            0x825d
273
0
#define LIGHT_CTL_SET                                            0x825e
274
0
#define LIGHT_CTL_SET_UNACKNOWLEDGED                             0x825f
275
0
#define LIGHT_CTL_STATUS                                         0x8260
276
0
#define LIGHT_CTL_TEMPERATURE_GET                                0x8261
277
0
#define LIGHT_CTL_TEMPERATURE_RANGE_GET                          0x8262
278
0
#define LIGHT_CTL_TEMPERATURE_RANGE_STATUS                       0x8263
279
0
#define LIGHT_CTL_TEMPERATURE_SET                                0x8264
280
0
#define LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED                 0x8265
281
0
#define LIGHT_CTL_TEMPERATURE_STATUS                             0x8266
282
0
#define LIGHT_CTL_DEFAULT_GET                                    0x8267
283
0
#define LIGHT_CTL_DEFAULT_STATUS                                 0x8268
284
0
#define LIGHT_CTL_DEFAULT_SET                                    0x8269
285
0
#define LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED                     0x826a
286
0
#define LIGHT_CTL_TEMPERATURE_RANGE_SET                          0x826b
287
0
#define LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED           0x826c
288
0
#define LIGHT_HSL_GET                                            0x826d
289
0
#define LIGHT_HSL_HUE_GET                                        0x826e
290
0
#define LIGHT_HSL_HUE_SET                                        0x826f
291
0
#define LIGHT_HSL_HUE_SET_UNACKNOWLEDGED                         0x8270
292
0
#define LIGHT_HSL_HUE_STATUS                                     0x8271
293
0
#define LIGHT_HSL_SATURATION_GET                                 0x8272
294
0
#define LIGHT_HSL_SATURATION_SET                                 0x8273
295
0
#define LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED                  0x8274
296
0
#define LIGHT_HSL_SATURATION_STATUS                              0x8275
297
0
#define LIGHT_HSL_SET                                            0x8276
298
0
#define LIGHT_HSL_SET_UNACKNOWLEDGED                             0x8277
299
0
#define LIGHT_HSL_STATUS                                         0x8278
300
0
#define LIGHT_HSL_TARGET_GET                                     0x8279
301
0
#define LIGHT_HSL_TARGET_STATUS                                  0x827a
302
0
#define LIGHT_HSL_DEFAULT_GET                                    0x827b
303
0
#define LIGHT_HSL_DEFAULT_STATUS                                 0x827c
304
0
#define LIGHT_HSL_RANGE_GET                                      0x827d
305
0
#define LIGHT_HSL_RANGE_STATUS                                   0x827e
306
0
#define LIGHT_HSL_DEFAULT_SET                                    0x827f
307
0
#define LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED                     0x8280
308
0
#define LIGHT_HSL_RANGE_SET                                      0x8281
309
0
#define LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED                       0x8282
310
0
#define LIGHT_XYL_GET                                            0x8283
311
0
#define LIGHT_XYL_SET                                            0x8284
312
0
#define LIGHT_XYL_SET_UNACKNOWLEDGED                             0x8285
313
0
#define LIGHT_XYL_STATUS                                         0x8286
314
0
#define LIGHT_XYL_TARGET_GET                                     0x8287
315
0
#define LIGHT_XYL_TARGET_STATUS                                  0x8288
316
0
#define LIGHT_XYL_DEFAULT_GET                                    0x8289
317
0
#define LIGHT_XYL_DEFAULT_STATUS                                 0x828a
318
0
#define LIGHT_XYL_RANGE_GET                                      0x828b
319
0
#define LIGHT_XYL_RANGE_STATUS                                   0x828c
320
0
#define LIGHT_XYL_DEFAULT_SET                                    0x828d
321
0
#define LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED                     0x828e
322
0
#define LIGHT_XYL_RANGE_SET                                      0x828f
323
0
#define LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED                       0x8290
324
0
#define LIGHT_LC_MODE_GET                                        0x8291
325
0
#define LIGHT_LC_MODE_SET                                        0x8292
326
0
#define LIGHT_LC_MODE_SET_UNACKNOWLEDGED                         0x8293
327
0
#define LIGHT_LC_MODE_STATUS                                     0x8294
328
0
#define LIGHT_LC_OM_GET                                          0x8295
329
0
#define LIGHT_LC_OM_SET                                          0x8296
330
0
#define LIGHT_LC_OM_SET_UNACKNOWLEDGED                           0x8297
331
0
#define LIGHT_LC_OM_STATUS                                       0x8298
332
0
#define LIGHT_LC_LIGHT_ONOFF_GET                                 0x8299
333
0
#define LIGHT_LC_LIGHT_ONOFF_SET                                 0x829a
334
0
#define LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED                  0x829b
335
0
#define LIGHT_LC_LIGHT_ONOFF_STATUS                              0x829c
336
0
#define LIGHT_LC_PROPERTY_GET                                    0x829d
337
338
0
#define PHONY_PROPERTY_PERCENTAGE_CHANGE_16                                 0xFFFF
339
0
#define PHONY_PROPERTY_INDEX                                                0xFFFE
340
#define PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY             0x0001
341
#define PROPERTY_AVERAGE_INPUT_CURRENT                                      0x0002
342
#define PROPERTY_AVERAGE_INPUT_VOLTAGE                                      0x0003
343
#define PROPERTY_AVERAGE_OUTPUT_CURRENT                                     0x0004
344
#define PROPERTY_AVERAGE_OUTPUT_VOLTAGE                                     0x0005
345
#define PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER                        0x0006
346
#define PROPERTY_CHROMATICITY_TOLERANCE                                     0x0007
347
#define PROPERTY_COLOR_RENDERING_INDEX_R9                                   0x0008
348
#define PROPERTY_COLOR_RENDERING_INDEX_RA                                   0x0009
349
#define PROPERTY_DEVICE_APPEARANCE                                          0x000A
350
#define PROPERTY_DEVICE_COUNTRY_OF_ORIGIN                                   0x000B
351
#define PROPERTY_DEVICE_DATE_OF_MANUFACTURE                                 0x000C
352
#define PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON                            0x000D
353
#define PROPERTY_DEVICE_FIRMWARE_REVISION                                   0x000E
354
#define PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER                            0x000F
355
#define PROPERTY_DEVICE_HARDWARE_REVISION                                   0x0010
356
#define PROPERTY_DEVICE_MANUFACTURER_NAME                                   0x0011
357
#define PROPERTY_DEVICE_MODEL_NUMBER                                        0x0012
358
#define PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION           0x0013
359
#define PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES            0x0014
360
#define PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS                   0x0015
361
#define PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION                           0x0016
362
#define PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON                               0x0017
363
#define PROPERTY_DEVICE_RUNTIME_WARRANTY                                    0x0018
364
#define PROPERTY_DEVICE_SERIAL_NUMBER                                       0x0019
365
#define PROPERTY_DEVICE_SOFTWARE_REVISION                                   0x001A
366
#define PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS                  0x001B
367
#define PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES              0x001C
368
#define PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES                  0x001D
369
#define PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE                       0x001E
370
#define PROPERTY_INITIAL_LUMINOUS_FLUX                                      0x001F
371
#define PROPERTY_INITIAL_PLANCKIAN_DISTANCE                                 0x0020
372
#define PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION                          0x0021
373
#define PROPERTY_INPUT_CURRENT_STATISTICS                                   0x0022
374
#define PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS                        0x0023
375
#define PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS                 0x0024
376
#define PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS                        0x0025
377
#define PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS                       0x0026
378
#define PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS                       0x0027
379
#define PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION                          0x0028
380
#define PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION                         0x0029
381
#define PROPERTY_INPUT_VOLTAGE_STATISTICS                                   0x002A
382
#define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON                         0x002B
383
#define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG                    0x002C
384
#define PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY                    0x002D
385
#define PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON                                 0x002E
386
#define PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG                            0x002F
387
#define PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY                            0x0030
388
#define PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY                           0x0031
389
#define PROPERTY_LIGHT_CONTROL_REGULATOR_KID                                0x0032
390
#define PROPERTY_LIGHT_CONTROL_REGULATOR_KIU                                0x0033
391
#define PROPERTY_LIGHT_CONTROL_REGULATOR_KPD                                0x0034
392
#define PROPERTY_LIGHT_CONTROL_REGULATOR_KPU                                0x0035
393
#define PROPERTY_LIGHT_CONTROL_TIME_FADE                                    0x0036
394
#define PROPERTY_LIGHT_CONTROL_TIME_FADE_ON                                 0x0037
395
#define PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO                       0x0038
396
#define PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL                     0x0039
397
#define PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY                         0x003A
398
#define PROPERTY_LIGHT_CONTROL_TIME_PROLONG                                 0x003B
399
#define PROPERTY_LIGHT_CONTROL_TIME_RUN_ON                                  0x003C
400
#define PROPERTY_LUMEN_MAINTENANCE_FACTOR                                   0x003D
401
#define PROPERTY_LUMINOUS_EFFICACY                                          0x003E
402
#define PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON                              0x003F
403
#define PROPERTY_LUMINOUS_EXPOSURE                                          0x0040
404
#define PROPERTY_LUMINOUS_FLUX_RANGE                                        0x0041
405
#define PROPERTY_MOTION_SENSED                                              0x0042
406
#define PROPERTY_MOTION_THRESHOLD                                           0x0043
407
#define PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS                              0x0044
408
#define PROPERTY_OUTDOOR_STATISTICAL_VALUES                                 0x0045
409
#define PROPERTY_OUTPUT_CURRENT_RANGE                                       0x0046
410
#define PROPERTY_OUTPUT_CURRENT_STATISTICS                                  0x0047
411
#define PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION                        0x0048
412
#define PROPERTY_OUTPUT_VOLTAGE_RANGE                                       0x0049
413
#define PROPERTY_OUTPUT_VOLTAGE_STATISTICS                                  0x004A
414
#define PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS                0x004B
415
#define PROPERTY_PEOPLE_COUNT                                               0x004C
416
#define PROPERTY_PRESENCE_DETECTED                                          0x004D
417
#define PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL                                0x004E
418
#define PROPERTY_PRESENT_AMBIENT_TEMPERATURE                                0x004F
419
#define PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES                  0x0050
420
#define PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE                       0x0051
421
#define PROPERTY_PRESENT_DEVICE_INPUT_POWER                                 0x0052
422
#define PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY                        0x0053
423
#define PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE                       0x0054
424
#define PROPERTY_PRESENT_ILLUMINANCE                                        0x0055
425
#define PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE                         0x0056
426
#define PROPERTY_PRESENT_INPUT_CURRENT                                      0x0057
427
#define PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE                               0x0058
428
#define PROPERTY_PRESENT_INPUT_VOLTAGE                                      0x0059
429
#define PROPERTY_PRESENT_LUMINOUS_FLUX                                      0x005A
430
#define PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE                        0x005B
431
#define PROPERTY_PRESENT_OUTPUT_CURRENT                                     0x005C
432
#define PROPERTY_PRESENT_OUTPUT_VOLTAGE                                     0x005D
433
#define PROPERTY_PRESENT_PLANCKIAN_DISTANCE                                 0x005E
434
#define PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE                     0x005F
435
#define PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY              0x0060
436
#define PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE           0x0061
437
#define PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE             0x0062
438
#define PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE   0x0063
439
#define PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE   0x0064
440
#define PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE                 0x0065
441
#define PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE                 0x0066
442
#define PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS                             0x0067
443
#define PROPERTY_TIME_SINCE_MOTION_SENSED                                   0x0068
444
#define PROPERTY_TIME_SINCE_PRESENCE_DETECTED                               0x0069
445
#define PROPERTY_TOTAL_DEVICE_ENERGY_USE                                    0x006A
446
#define PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES                                 0x006B
447
#define PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES                               0x006C
448
#define PROPERTY_TOTAL_DEVICE_POWER_ON_TIME                                 0x006D
449
#define PROPERTY_TOTAL_DEVICE_RUNTIME                                       0x006E
450
#define PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME                                  0x006F
451
#define PROPERTY_TOTAL_LUMINOUS_ENERGY                                      0x0070
452
#define PROPERTY_DESIRED_AMBIENT_TEMPERATURE                                0x0071
453
#define PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE                            0x0072
454
#define PROPERTY_POWER_FACTOR                                               0x0073
455
#define PROPERTY_SENSOR_GAIN                                                0x0074
456
#define PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE                        0x0075
457
#define PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY                          0x0076
458
#define PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION               0x0077
459
#define PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION   0x0078
460
#define PROPERTY_PRESENT_AMBIENT_NOISE                                      0x0079
461
#define PROPERTY_ACTIVE_ENERGY_LOADSIDE                                     0x0080
462
#define PROPERTY_ACTIVE_POWER_LOADSIDE                                      0x0081
463
#define PROPERTY_AIR_PRESSURE                                               0x0082
464
#define PROPERTY_APPARENT_ENERGY                                            0x0083
465
#define PROPERTY_APPARENT_POWER                                             0x0084
466
#define PROPERTY_APPARENT_WIND_DIRECTION                                    0x0085
467
#define PROPERTY_APPARENT_WIND_SPEED                                        0x0086
468
#define PROPERTY_DEW_POINT                                                  0x0087
469
#define PROPERTY_EXTERNAL_SUPPLY_VOLTAGE                                    0x0088
470
#define PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY                          0x0089
471
#define PROPERTY_GUST_FACTOR                                                0x008A
472
#define PROPERTY_HEAT_INDEX                                                 0x008B
473
#define PROPERTY_LIGHT_DISTRIBUTION                                         0x008C
474
#define PROPERTY_LIGHT_SOURCE_CURRENT                                       0x008D
475
#define PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE                        0x008E
476
#define PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE                            0x008F
477
#define PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS                       0x0090
478
#define PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS                   0x0091
479
#define PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS                      0x0092
480
#define PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE                      0x0093
481
#define PROPERTY_LIGHT_SOURCE_TEMPERATURE                                   0x0094
482
#define PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS                   0x0095
483
#define PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS                   0x0096
484
#define PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES                         0x0097
485
#define PROPERTY_LIGHT_SOURCE_VOLTAGE                                       0x0098
486
#define PROPERTY_LUMINAIRE_COLOR                                            0x0099
487
#define PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER                            0x009A
488
#define PROPERTY_LUMINAIRE_MANUFACTURER_GTIN                                0x009B
489
#define PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER                              0x009C
490
#define PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE                 0x009D
491
#define PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE                 0x009E
492
#define PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL                       0x009F
493
#define PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE                              0x00A0
494
#define PROPERTY_MAGNETIC_DECLINATION                                       0x00A1
495
#define PROPERTY_MAGNETIC_FLUX_DENSITY_2_D                                  0x00A2
496
#define PROPERTY_MAGNETIC_FLUX_DENSITY_3_D                                  0x00A3
497
#define PROPERTY_NOMINAL_LIGHT_OUTPUT                                       0x00A4
498
#define PROPERTY_OVERALL_FAILURE_CONDITION                                  0x00A5
499
#define PROPERTY_POLLEN_CONCENTRATION                                       0x00A6
500
#define PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY                           0x00A7
501
#define PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY                          0x00A8
502
#define PROPERTY_PRESSURE                                                   0x00A9
503
#define PROPERTY_RAINFALL                                                   0x00AA
504
#define PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE                      0x00AB
505
#define PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS                    0x00AC
506
#define PROPERTY_REFERENCE_TEMPERATURE                                      0x00AD
507
#define PROPERTY_TOTAL_DEVICE_STARTS                                        0x00AE
508
#define PROPERTY_TRUE_WIND_DIRECTION                                        0x00AF
509
#define PROPERTY_TRUE_WIND_SPEED                                            0x00B0
510
#define PROPERTY_UV_INDEX                                                   0x00B1
511
#define PROPERTY_WIND_CHILL                                                 0x00B2
512
#define PROPERTY_LIGHT_SOURCE_TYPE                                          0x00B3
513
#define PROPERTY_LUMINAIRE_IDENTIFICATION_STRING                            0x00B4
514
#define PROPERTY_OUTPUT_POWER_LIMITATION                                    0x00B5
515
#define PROPERTY_THERMAL_DERATING                                           0x00B6
516
#define PROPERTY_OUTPUT_CURRENT_PERCENT                                     0x00B7
517
518
#define PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16                 0xFFFF
519
#define PHONY_CHARACTERISTIC_INDEX                                0xFFFE
520
#define CHARACTERISTIC_APPARENT_ENERGY32                          0x2BCF
521
#define CHARACTERISTIC_APPARENT_POWER                             0x2BD0
522
#define CHARACTERISTIC_APPARENT_WIND_DIRECTION                    0x2A73
523
#define CHARACTERISTIC_APPARENT_WIND_SPEED                        0x2A72
524
#define CHARACTERISTIC_APPEARANCE                                 0x2A01
525
#define CHARACTERISTIC_AVERAGE_CURRENT                            0x2AE0
526
#define CHARACTERISTIC_AVERAGE_VOLTAGE                            0x2AE1
527
#define CHARACTERISTIC_BOOLEAN                                    0x2AE2
528
#define CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN          0x2AE3
529
#define CHARACTERISTIC_CHROMATICITY_COORDINATES                   0x2AE4
530
#define CHARACTERISTIC_CHROMATICITY_TOLERANCE                     0x2AE6
531
#define CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX        0x2AE7
532
#define CHARACTERISTIC_CO2_CONCENTRATION                          0x2BD1
533
#define CHARACTERISTIC_COEFFICIENT                                0x2AE8
534
#define CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE               0x2AE9
535
#define CHARACTERISTIC_COSINE_OF_THE_ANGLE                        0x2BD2
536
#define CHARACTERISTIC_COUNT_16                                   0x2AEA
537
#define CHARACTERISTIC_COUNT_24                                   0x2AEB
538
#define CHARACTERISTIC_COUNTRY_CODE                               0x2AEC
539
#define CHARACTERISTIC_DATE_UTC                                   0x2AED
540
#define CHARACTERISTIC_DECIHOUR_8                                 0x2B12
541
#define CHARACTERISTIC_DEW_POINT                                  0x2BD3
542
#define CHARACTERISTIC_ELECTRIC_CURRENT                           0x2AEE
543
#define CHARACTERISTIC_ELECTRIC_CURRENT_RANGE                     0x2AEF
544
#define CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION             0x2AF0
545
#define CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS                0x2AF1
546
#define CHARACTERISTIC_ENERGY                                     0x2AF2
547
#define CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY                  0x2AF3
548
#define CHARACTERISTIC_ENERGY32                                   0x2BD4
549
#define CHARACTERISTIC_EVENT_STATISTICS                           0x2AF4
550
#define CHARACTERISTIC_FIXED_STRING_16                            0x2AF5
551
#define CHARACTERISTIC_FIXED_STRING_24                            0x2AF6
552
#define CHARACTERISTIC_FIXED_STRING_36                            0x2AF7
553
#define CHARACTERISTIC_FIXED_STRING_64                            0x2BD5
554
#define CHARACTERISTIC_FIXED_STRING_8                             0x2AF8
555
#define CHARACTERISTIC_GENERIC_LEVEL                              0X2AF9
556
#define CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER                   0x2AFA
557
#define CHARACTERISTIC_GUST_FACTOR                                0x2A74
558
#define CHARACTERISTIC_HEAT_INDEX                                 0x2A7A
559
#define CHARACTERISTIC_HIGH_TEMPERATURE                           0x2BD6
560
#define CHARACTERISTIC_HIGH_VOLTAGE                               0x2BD7
561
#define CHARACTERISTIC_HUMIDITY                                   0x2A6F
562
#define CHARACTERISTIC_ILLUMINANCE                                0x2AFB
563
#define CHARACTERISTIC_LIGHT_DISTRIBUTION                         0x2BD8
564
#define CHARACTERISTIC_LIGHT_OUTPUT                               0x2BD9
565
#define CHARACTERISTIC_LIGHT_SOURCE_TYPE                          0x2BDA
566
#define CHARACTERISTIC_LUMINOUS_EFFICACY                          0x2AFC
567
#define CHARACTERISTIC_LUMINOUS_ENERGY                            0x2AFD
568
#define CHARACTERISTIC_LUMINOUS_EXPOSURE                          0x2AFE
569
#define CHARACTERISTIC_LUMINOUS_FLUX                              0x2AFF
570
#define CHARACTERISTIC_LUMINOUS_FLUX_RANGE                        0x2B00
571
#define CHARACTERISTIC_LUMINOUS_INTENSITY                         0x2B01
572
#define CHARACTERISTIC_MAGNETIC_DECLINATION                       0x2BDB
573
#define CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D                  0x2AA0
574
#define CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D                  0x2AA1
575
#define CHARACTERISTIC_NOISE                                      0x2BDC
576
#define CHARACTERISTIC_PERCEIVED_LIGHTNESS                        0x2B03
577
#define CHARACTERISTIC_PERCENTAGE_8                               0x2B04
578
#define CHARACTERISTIC_POLLEN_CONCENTRATION                       0x2A75
579
#define CHARACTERISTIC_POWER                                      0x2B05
580
#define CHARACTERISTIC_POWER_SPECIFICATION                        0x2B06
581
#define CHARACTERISTIC_PRESSURE                                   0x2A6D
582
#define CHARACTERISTIC_RAINFALL                                   0x2A78
583
#define CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE        0x2B07
584
#define CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE  0x2B08
585
#define CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE      0x2B0C
586
#define CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE          0x2B09
587
#define CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE     0x2B0A
588
#define CHARACTERISTIC_TEMPERATURE                                0x2A6E
589
#define CHARACTERISTIC_TEMPERATURE_8                              0x2B0D
590
#define CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY           0x2B0E
591
#define CHARACTERISTIC_TEMPERATURE_8_STATISTICS                   0x2B0F
592
#define CHARACTERISTIC_TEMPERATURE_RANGE                          0x2B10
593
#define CHARACTERISTIC_TEMPERATURE_STATISTICS                     0x2B11
594
#define CHARACTERISTIC_TIME_HOUR_24                               0x2B14
595
#define CHARACTERISTIC_TIME_MILLISECOND_24                        0x2B15
596
#define CHARACTERISTIC_TIME_SECOND_16                             0x2B16
597
#define CHARACTERISTIC_TIME_SECOND_32                             0x2BDE
598
#define CHARACTERISTIC_TRUE_WIND_DIRECTION                        0x2A71
599
#define CHARACTERISTIC_TRUE_WIND_SPEED                            0x2A70
600
#define CHARACTERISTIC_UV_INDEX                                   0x2A76
601
#define CHARACTERISTIC_VOC_CONCENTRATION                          0x2BDF
602
#define CHARACTERISTIC_VOLTAGE                                    0x2B18
603
#define CHARACTERISTIC_VOLTAGE_FREQUENCY                          0x2BE0
604
#define CHARACTERISTIC_VOLTAGE_SPECIFICATION                      0x2B19
605
#define CHARACTERISTIC_VOLTAGE_STATISTICS                         0x2B1A
606
#define CHARACTERISTIC_WIND_CHILL                                 0x2A79
607
608
void proto_register_btmesh(void);
609
610
static int proto_btmesh;
611
static dissector_table_t btmesh_model_vendor_dissector_table;
612
613
/*-------------------------------------
614
 * UAT for BT Mesh
615
 *-------------------------------------
616
 */
617
static uat_t *btmesh_uat;
618
static unsigned num_btmesh_uat;
619
620
/* UAT Network, Application and IVIndex entry structure. */
621
typedef struct {
622
    char *network_key_string;
623
    uint8_t *network_key;
624
    int network_key_length;
625
    char *ivindex_string;
626
    int ivindex_string_length;
627
    uint8_t *ivindex;
628
    uint8_t *privacykey;
629
    uint8_t *encryptionkey;
630
    uint8_t nid;
631
    char *application_key_string;
632
    uint8_t *application_key;
633
    int application_key_length;
634
    uint8_t aid;
635
    uint8_t valid; /* this counter must be equal to BTMESH_KEY_ENTRY_VALID make UAT entry valid */
636
    uint32_t net_key_iv_index_hash; /* Used to identify net key / IV index pair */
637
} uat_btmesh_record_t;
638
639
static uat_btmesh_record_t *uat_btmesh_records;
640
641
static uat_t *btmesh_dev_key_uat;
642
static unsigned num_btmesh_dev_key_uat;
643
644
/* UAT Device Key entry structure. */
645
typedef struct {
646
    char *device_key_string;
647
    uint8_t *device_key;
648
    int device_key_length;
649
    char *src_string;
650
    int src_length;
651
    uint8_t *src;
652
    uint8_t valid; /* this counter must be equal to BTMESH_DEVICE_KEY_ENTRY_VALID make UAT entry valid */
653
} uat_btmesh_dev_key_record_t;
654
655
static uat_btmesh_dev_key_record_t *uat_btmesh_dev_key_records;
656
657
static uat_t * btmesh_label_uuid_uat;
658
static unsigned num_btmesh_label_uuid_uat;
659
660
/* UAT Label UUID entry structure. */
661
typedef struct {
662
    char *label_uuid_string;
663
    uint8_t *label_uuid;
664
    int label_uuid_length;
665
    uint16_t hash;
666
    uint8_t valid; /* this counter must be equal to BTMESH_LABEL_UUID_ENTRY_VALID make UAT entry valid */
667
} uat_btmesh_label_uuid_record_t;
668
669
static uat_btmesh_label_uuid_record_t *uat_btmesh_label_uuid_records;
670
671
typedef struct {
672
    uint16_t property_id;
673
    uint16_t characteristic_id;
674
} btmesh_property_t;
675
676
typedef struct {
677
    uint16_t characteristic_id;
678
    uint16_t characteristic_value_length;
679
    int     *hfindex;
680
    uint8_t dissector_type;
681
} bt_gatt_characteristic_t;
682
683
typedef struct {
684
    uint16_t characteristic_id;
685
    uint16_t x_characteristic_id;
686
    uint16_t y_characteristic_id;
687
} btmesh_column_property_t;
688
689
typedef struct {
690
    int *hf_status_trigger_delta_up;
691
    int *hf_status_trigger_delta_down;
692
    int *hf_status_min_interval;
693
    int *hf_fast_cadence_low;
694
    int *hf_fast_cadence_high;
695
    int *hf_remainder_not_dissected;
696
} bt_sensor_cadence_dissector_t;
697
698
typedef struct {
699
    int *hf_raw_value_a;
700
    int *hf_raw_value_b;
701
    int *hf_raw_value_c;
702
} bt_property_raw_value_entry_t;
703
704
typedef struct {
705
    int *hf_raw_value_a1;
706
    int *hf_raw_value_a2;
707
} bt_property_columns_raw_value_t;
708
709
static int hf_btmesh_ivi;
710
static int hf_btmesh_nid;
711
static int hf_btmesh_obfuscated;
712
static int hf_btmesh_encrypted;
713
static int hf_btmesh_netmic;
714
715
static int hf_btmesh_ctl;
716
static int hf_btmesh_ttl;
717
static int hf_btmesh_seq;
718
static int hf_btmesh_src;
719
static int hf_btmesh_dst;
720
721
static int hf_btmesh_transp_pdu;
722
static int hf_btmesh_cntr_seg;
723
static int hf_btmesh_acc_seg;
724
static int hf_btmesh_cntr_opcode;
725
static int hf_btmesh_acc_akf;
726
static int hf_btmesh_acc_aid;
727
static int hf_btmesh_obo;
728
static int hf_btmesh_seqzero;
729
static int hf_btmesh_rfu;
730
static int hf_btmesh_blockack;
731
static int hf_btmesh_cntr_criteria_rfu;
732
static int hf_btmesh_cntr_padding;
733
static int hf_btmesh_cntr_fsn;
734
735
static int hf_btmesh_cntr_key_refresh_flag;
736
static int hf_btmesh_cntr_iv_update_flag;
737
static int hf_btmesh_cntr_flags_rfu;
738
static int hf_btmesh_cntr_iv_index;
739
static int hf_btmesh_cntr_md;
740
741
static int hf_btmesh_cntr_heartbeat_rfu;
742
static int hf_btmesh_cntr_init_ttl;
743
static int hf_btmesh_cntr_feature_relay;
744
static int hf_btmesh_cntr_feature_proxy;
745
static int hf_btmesh_cntr_feature_friend;
746
static int hf_btmesh_cntr_feature_low_power;
747
static int hf_btmesh_cntr_feature_rfu;
748
749
static int hf_btmesh_cntr_criteria_rssifactor;
750
static int hf_btmesh_cntr_criteria_receivewindowfactor;
751
static int hf_btmesh_cntr_criteria_minqueuesizelog;
752
static int hf_btmesh_cntr_receivedelay;
753
static int hf_btmesh_cntr_polltimeout;
754
static int hf_btmesh_cntr_previousaddress;
755
static int hf_btmesh_cntr_numelements;
756
static int hf_btmesh_cntr_lpncounter;
757
static int hf_btmesh_cntr_receivewindow;
758
static int hf_btmesh_cntr_queuesize;
759
static int hf_btmesh_cntr_subscriptionlistsize;
760
static int hf_btmesh_cntr_rssi;
761
static int hf_btmesh_cntr_friendcounter;
762
static int hf_btmesh_cntr_lpnaddress;
763
static int hf_btmesh_cntr_transactionnumber;
764
static int hf_btmesh_enc_access_pld;
765
static int hf_btmesh_transtmic;
766
static int hf_btmesh_szmic;
767
static int hf_btmesh_seqzero_data;
768
static int hf_btmesh_sego;
769
static int hf_btmesh_segn;
770
static int hf_btmesh_seg_rfu;
771
static int hf_btmesh_segment;
772
static int hf_btmesh_cntr_unknown_payload;
773
774
static int hf_btmesh_segmented_access_fragments;
775
static int hf_btmesh_segmented_access_fragment;
776
static int hf_btmesh_segmented_access_fragment_overlap;
777
static int hf_btmesh_segmented_access_fragment_overlap_conflict;
778
static int hf_btmesh_segmented_access_fragment_multiple_tails;
779
static int hf_btmesh_segmented_access_fragment_too_long_fragment;
780
static int hf_btmesh_segmented_access_fragment_error;
781
static int hf_btmesh_segmented_access_fragment_count;
782
static int hf_btmesh_segmented_access_reassembled_length;
783
784
static int hf_btmesh_segmented_control_fragments;
785
static int hf_btmesh_segmented_control_fragment;
786
static int hf_btmesh_segmented_control_fragment_overlap;
787
static int hf_btmesh_segmented_control_fragment_overlap_conflict;
788
static int hf_btmesh_segmented_control_fragment_multiple_tails;
789
static int hf_btmesh_segmented_control_fragment_too_long_fragment;
790
static int hf_btmesh_segmented_control_fragment_error;
791
static int hf_btmesh_segmented_control_fragment_count;
792
static int hf_btmesh_segmented_control_reassembled_length;
793
794
static int hf_btmesh_decrypted_access;
795
static int hf_btmesh_model_layer_opcode;
796
static int hf_btmesh_model_layer_parameters;
797
static int hf_btmesh_model_layer_vendor_opcode;
798
static int hf_btmesh_model_layer_vendor;
799
800
static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex;
801
static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net;
802
static int hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app;
803
static int hf_btmesh_config_appkey_add_appkey;
804
static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex;
805
static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net;
806
static int hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app;
807
static int hf_btmesh_config_appkey_update_appkey;
808
static int hf_btmesh_config_composition_data_status_page;
809
static int hf_btmesh_config_composition_data_status_cid;
810
static int hf_btmesh_config_composition_data_status_pid;
811
static int hf_btmesh_config_composition_data_status_vid;
812
static int hf_btmesh_config_composition_data_status_crpl;
813
static int hf_btmesh_config_composition_data_status_features_relay;
814
static int hf_btmesh_config_composition_data_status_features_proxy;
815
static int hf_btmesh_config_composition_data_status_features_friend;
816
static int hf_btmesh_config_composition_data_status_features_low_power;
817
static int hf_btmesh_config_composition_data_status_features_rfu;
818
static int hf_btmesh_config_composition_data_status_features;
819
static int hf_btmesh_config_composition_data_status_loc;
820
static int hf_btmesh_config_composition_data_status_nums;
821
static int hf_btmesh_config_composition_data_status_numv;
822
static int hf_btmesh_config_composition_data_status_sig_model;
823
static int hf_btmesh_config_composition_data_status_vendor_model;
824
static int hf_btmesh_config_model_publication_set_elementaddress;
825
static int hf_btmesh_config_model_publication_set_publishaddress;
826
static int hf_btmesh_config_model_publication_set_appkey;
827
static int hf_btmesh_config_model_publication_set_appkeyindex;
828
static int hf_btmesh_config_model_publication_set_credentialflag;
829
static int hf_btmesh_config_model_publication_set_rfu;
830
static int hf_btmesh_config_model_publication_set_publishttl;
831
static int hf_btmesh_config_model_publication_set_publishperiod;
832
static int hf_btmesh_config_model_publication_set_publishperiod_resolution;
833
static int hf_btmesh_config_model_publication_set_publishperiod_steps;
834
static int hf_btmesh_config_model_publication_set_publishretransmit;
835
static int hf_btmesh_config_model_publication_set_publishretransmit_count;
836
static int hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps;
837
static int hf_btmesh_config_model_publication_set_modelidentifier;
838
static int hf_btmesh_config_model_publication_set_vendormodelidentifier;
839
static int hf_btmesh_health_current_status_test_id;
840
static int hf_btmesh_health_current_status_company_id;
841
static int hf_btmesh_health_current_status_fault;
842
static int hf_btmesh_health_fault_status_test_id;
843
static int hf_btmesh_health_fault_status_company_id;
844
static int hf_btmesh_health_fault_status_fault;
845
static int hf_btmesh_config_heartbeat_publication_status_status;
846
static int hf_btmesh_config_heartbeat_publication_status_destination;
847
static int hf_btmesh_config_heartbeat_publication_status_countlog;
848
static int hf_btmesh_config_heartbeat_publication_status_periodlog;
849
static int hf_btmesh_config_heartbeat_publication_status_ttl;
850
static int hf_btmesh_config_heartbeat_publication_status_features_relay;
851
static int hf_btmesh_config_heartbeat_publication_status_features_proxy;
852
static int hf_btmesh_config_heartbeat_publication_status_features_friend;
853
static int hf_btmesh_config_heartbeat_publication_status_features_low_power;
854
static int hf_btmesh_config_heartbeat_publication_status_features_rfu;
855
static int hf_btmesh_config_heartbeat_publication_status_features;
856
static int hf_btmesh_config_heartbeat_publication_status_netkeyindex;
857
static int hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx;
858
static int hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu;
859
static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex;
860
static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net;
861
static int hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app;
862
static int hf_btmesh_config_appkey_get_netkeyindex;
863
static int hf_btmesh_config_appkey_get_netkeyindex_idx;
864
static int hf_btmesh_config_appkey_get_netkeyindex_rfu;
865
static int hf_btmesh_config_appkey_list_status;
866
static int hf_btmesh_config_appkey_list_netkeyindex;
867
static int hf_btmesh_config_appkey_list_netkeyindex_idx;
868
static int hf_btmesh_config_appkey_list_netkeyindex_rfu;
869
static int hf_btmesh_config_appkey_list_appkeyindex;
870
static int hf_btmesh_config_appkey_list_appkeyindex_rfu;
871
static int hf_btmesh_config_appkey_status_status;
872
static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex;
873
static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net;
874
static int hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app;
875
static int hf_btmesh_health_attention_set_attention;
876
static int hf_btmesh_health_attention_set_unacknowledged_attention;
877
static int hf_btmesh_health_attention_status_attention;
878
static int hf_btmesh_config_composition_data_get_page;
879
static int hf_btmesh_config_beacon_set_beacon;
880
static int hf_btmesh_config_beacon_status_beacon;
881
static int hf_btmesh_config_default_ttl_set_ttl;
882
static int hf_btmesh_config_default_ttl_status_ttl;
883
static int hf_btmesh_config_friend_set_friend;
884
static int hf_btmesh_config_friend_status_friend;
885
static int hf_btmesh_config_gatt_proxy_set_gattproxy;
886
static int hf_btmesh_config_gatt_proxy_status_gattproxy;
887
static int hf_btmesh_config_key_refresh_phase_get_netkeyindex;
888
static int hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx;
889
static int hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu;
890
static int hf_btmesh_config_key_refresh_phase_set_netkeyindex;
891
static int hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx;
892
static int hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu;
893
static int hf_btmesh_config_key_refresh_phase_set_transition;
894
static int hf_btmesh_config_key_refresh_phase_status_status;
895
static int hf_btmesh_config_key_refresh_phase_status_netkeyindex;
896
static int hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx;
897
static int hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu;
898
static int hf_btmesh_config_key_refresh_phase_status_phase;
899
static int hf_btmesh_config_model_publication_get_elementaddress;
900
static int hf_btmesh_config_model_publication_get_modelidentifier;
901
static int hf_btmesh_config_model_publication_get_vendormodelidentifier;
902
static int hf_btmesh_config_model_publication_status_status;
903
static int hf_btmesh_config_model_publication_status_elementaddress;
904
static int hf_btmesh_config_model_publication_status_publishaddress;
905
static int hf_btmesh_config_model_publication_status_appkey;
906
static int hf_btmesh_config_model_publication_status_appkeyindex;
907
static int hf_btmesh_config_model_publication_status_credentialflag;
908
static int hf_btmesh_config_model_publication_status_rfu;
909
static int hf_btmesh_config_model_publication_status_publishttl;
910
static int hf_btmesh_config_model_publication_status_publishperiod;
911
static int hf_btmesh_config_model_publication_status_publishperiod_resolution;
912
static int hf_btmesh_config_model_publication_status_publishperiod_steps;
913
static int hf_btmesh_config_model_publication_status_publishretransmit;
914
static int hf_btmesh_config_model_publication_status_publishretransmit_count;
915
static int hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps;
916
static int hf_btmesh_config_model_publication_status_modelidentifier;
917
static int hf_btmesh_config_model_publication_status_vendormodelidentifier;
918
static int hf_btmesh_config_model_publication_virtual_address_set_elementaddress;
919
static int hf_btmesh_config_model_publication_virtual_address_set_publishaddress;
920
static int hf_btmesh_config_model_publication_virtual_address_set_appkey;
921
static int hf_btmesh_config_model_publication_virtual_address_set_appkeyindex;
922
static int hf_btmesh_config_model_publication_virtual_address_set_credentialflag;
923
static int hf_btmesh_config_model_publication_virtual_address_set_rfu;
924
static int hf_btmesh_config_model_publication_virtual_address_set_publishttl;
925
static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod;
926
static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution;
927
static int hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps;
928
static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit;
929
static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count;
930
static int hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps;
931
static int hf_btmesh_config_model_publication_virtual_address_set_modelidentifier;
932
static int hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier;
933
static int hf_btmesh_config_model_subscription_add_elementaddress;
934
static int hf_btmesh_config_model_subscription_add_address;
935
static int hf_btmesh_config_model_subscription_add_modelidentifier;
936
static int hf_btmesh_config_model_subscription_add_vendormodelidentifier;
937
static int hf_btmesh_config_model_subscription_delete_elementaddress;
938
static int hf_btmesh_config_model_subscription_delete_address;
939
static int hf_btmesh_config_model_subscription_delete_modelidentifier;
940
static int hf_btmesh_config_model_subscription_delete_vendormodelidentifier;
941
static int hf_btmesh_config_model_subscription_delete_all_elementaddress;
942
static int hf_btmesh_config_model_subscription_delete_all_modelidentifier;
943
static int hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier;
944
static int hf_btmesh_config_model_subscription_overwrite_elementaddress;
945
static int hf_btmesh_config_model_subscription_overwrite_address;
946
static int hf_btmesh_config_model_subscription_overwrite_modelidentifier;
947
static int hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier;
948
static int hf_btmesh_config_model_subscription_status_status;
949
static int hf_btmesh_config_model_subscription_status_elementaddress;
950
static int hf_btmesh_config_model_subscription_status_address;
951
static int hf_btmesh_config_model_subscription_status_modelidentifier;
952
static int hf_btmesh_config_model_subscription_status_vendormodelidentifier;
953
static int hf_btmesh_config_model_subscription_virtual_address_add_elementaddress;
954
static int hf_btmesh_config_model_subscription_virtual_address_add_label;
955
static int hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier;
956
static int hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier;
957
static int hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress;
958
static int hf_btmesh_config_model_subscription_virtual_address_delete_label;
959
static int hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier;
960
static int hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier;
961
static int hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress;
962
static int hf_btmesh_config_model_subscription_virtual_address_overwrite_label;
963
static int hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier;
964
static int hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier;
965
static int hf_btmesh_config_network_transmit_set_networktransmit;
966
static int hf_btmesh_config_network_transmit_set_networktransmit_count;
967
static int hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps;
968
static int hf_btmesh_config_network_transmit_status_networktransmit;
969
static int hf_btmesh_config_network_transmit_status_networktransmit_count;
970
static int hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps;
971
static int hf_btmesh_config_relay_set_relay;
972
static int hf_btmesh_config_relay_set_relayretransmit;
973
static int hf_btmesh_config_relay_set_relayretransmit_count;
974
static int hf_btmesh_config_relay_set_relayretransmit_intervalsteps;
975
static int hf_btmesh_config_relay_status_relay;
976
static int hf_btmesh_config_relay_status_relayretransmit;
977
static int hf_btmesh_config_relay_status_relayretransmit_count;
978
static int hf_btmesh_config_relay_status_relayretransmit_intervalsteps;
979
static int hf_btmesh_config_sig_model_subscription_get_elementaddress;
980
static int hf_btmesh_config_sig_model_subscription_get_modelidentifier;
981
static int hf_btmesh_config_sig_model_subscription_list_status;
982
static int hf_btmesh_config_sig_model_subscription_list_elementaddress;
983
static int hf_btmesh_config_sig_model_subscription_list_modelidentifier;
984
static int hf_btmesh_config_sig_model_subscription_list_address;
985
static int hf_btmesh_config_vendor_model_subscription_get_elementaddress;
986
static int hf_btmesh_config_vendor_model_subscription_get_modelidentifier;
987
static int hf_btmesh_config_vendor_model_subscription_list_status;
988
static int hf_btmesh_config_vendor_model_subscription_list_elementaddress;
989
static int hf_btmesh_config_vendor_model_subscription_list_modelidentifier;
990
static int hf_btmesh_config_vendor_model_subscription_list_address;
991
static int hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress;
992
static int hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress;
993
static int hf_btmesh_config_low_power_node_polltimeout_status_polltimeout;
994
static int hf_btmesh_health_fault_clear_company_id;
995
static int hf_btmesh_health_fault_clear_unacknowledged_company_id;
996
static int hf_btmesh_health_fault_get_company_id;
997
static int hf_btmesh_health_fault_test_test_id;
998
static int hf_btmesh_health_fault_test_company_id;
999
static int hf_btmesh_health_fault_test_unacknowledged_test_id;
1000
static int hf_btmesh_health_fault_test_unacknowledged_company_id;
1001
static int hf_btmesh_health_period_set_fast_period_divisor;
1002
static int hf_btmesh_health_period_set_unacknowledged_fast_period_divisor;
1003
static int hf_btmesh_health_period_status_fast_period_divisor;
1004
static int hf_btmesh_config_heartbeat_publication_set_destination;
1005
static int hf_btmesh_config_heartbeat_publication_set_countlog;
1006
static int hf_btmesh_config_heartbeat_publication_set_periodlog;
1007
static int hf_btmesh_config_heartbeat_publication_set_ttl;
1008
static int hf_btmesh_config_heartbeat_publication_set_features_relay;
1009
static int hf_btmesh_config_heartbeat_publication_set_features_proxy;
1010
static int hf_btmesh_config_heartbeat_publication_set_features_friend;
1011
static int hf_btmesh_config_heartbeat_publication_set_features_low_power;
1012
static int hf_btmesh_config_heartbeat_publication_set_features_rfu;
1013
static int hf_btmesh_config_heartbeat_publication_set_features;
1014
static int hf_btmesh_config_heartbeat_publication_set_netkeyindex;
1015
static int hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx;
1016
static int hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu;
1017
static int hf_btmesh_config_heartbeat_subscription_set_source;
1018
static int hf_btmesh_config_heartbeat_subscription_set_destination;
1019
static int hf_btmesh_config_heartbeat_subscription_set_periodlog;
1020
static int hf_btmesh_config_heartbeat_subscription_status_status;
1021
static int hf_btmesh_config_heartbeat_subscription_status_source;
1022
static int hf_btmesh_config_heartbeat_subscription_status_destination;
1023
static int hf_btmesh_config_heartbeat_subscription_status_periodlog;
1024
static int hf_btmesh_config_heartbeat_subscription_status_countlog;
1025
static int hf_btmesh_config_heartbeat_subscription_status_minhops;
1026
static int hf_btmesh_config_heartbeat_subscription_status_maxhops;
1027
static int hf_btmesh_config_model_app_bind_elementaddress;
1028
static int hf_btmesh_config_model_app_bind_appkeyindex;
1029
static int hf_btmesh_config_model_app_bind_appkeyindex_idx;
1030
static int hf_btmesh_config_model_app_bind_appkeyindex_rfu;
1031
static int hf_btmesh_config_model_app_bind_modelidentifier;
1032
static int hf_btmesh_config_model_app_bind_vendormodelidentifier;
1033
static int hf_btmesh_config_model_app_status_status;
1034
static int hf_btmesh_config_model_app_status_elementaddress;
1035
static int hf_btmesh_config_model_app_status_appkeyindex;
1036
static int hf_btmesh_config_model_app_status_appkeyindex_idx;
1037
static int hf_btmesh_config_model_app_status_appkeyindex_rfu;
1038
static int hf_btmesh_config_model_app_status_modelidentifier;
1039
static int hf_btmesh_config_model_app_status_vendormodelidentifier;
1040
static int hf_btmesh_config_model_app_unbind_elementaddress;
1041
static int hf_btmesh_config_model_app_unbind_appkeyindex;
1042
static int hf_btmesh_config_model_app_unbind_appkeyindex_idx;
1043
static int hf_btmesh_config_model_app_unbind_appkeyindex_rfu;
1044
static int hf_btmesh_config_model_app_unbind_modelidentifier;
1045
static int hf_btmesh_config_model_app_unbind_vendormodelidentifier;
1046
static int hf_btmesh_config_netkey_add_netkeyindex;
1047
static int hf_btmesh_config_netkey_add_netkeyindex_idx;
1048
static int hf_btmesh_config_netkey_add_netkeyindex_rfu;
1049
static int hf_btmesh_config_netkey_add_netkey;
1050
static int hf_btmesh_config_netkey_delete_netkeyindex;
1051
static int hf_btmesh_config_netkey_delete_netkeyindex_idx;
1052
static int hf_btmesh_config_netkey_delete_netkeyindex_rfu;
1053
static int hf_btmesh_config_netkey_list_netkeyindex;
1054
static int hf_btmesh_config_netkey_list_netkeyindex_rfu;
1055
static int hf_btmesh_config_netkey_status_status;
1056
static int hf_btmesh_config_netkey_status_netkeyindex;
1057
static int hf_btmesh_config_netkey_status_netkeyindex_idx;
1058
static int hf_btmesh_config_netkey_status_netkeyindex_rfu;
1059
static int hf_btmesh_config_netkey_update_netkeyindex;
1060
static int hf_btmesh_config_netkey_update_netkeyindex_idx;
1061
static int hf_btmesh_config_netkey_update_netkeyindex_rfu;
1062
static int hf_btmesh_config_netkey_update_netkey;
1063
static int hf_btmesh_config_node_identity_get_netkeyindex;
1064
static int hf_btmesh_config_node_identity_get_netkeyindex_idx;
1065
static int hf_btmesh_config_node_identity_get_netkeyindex_rfu;
1066
static int hf_btmesh_config_node_identity_set_netkeyindex;
1067
static int hf_btmesh_config_node_identity_set_netkeyindex_idx;
1068
static int hf_btmesh_config_node_identity_set_netkeyindex_rfu;
1069
static int hf_btmesh_config_node_identity_set_identity;
1070
static int hf_btmesh_config_node_identity_status_status;
1071
static int hf_btmesh_config_node_identity_status_netkeyindex;
1072
static int hf_btmesh_config_node_identity_status_netkeyindex_idx;
1073
static int hf_btmesh_config_node_identity_status_netkeyindex_rfu;
1074
static int hf_btmesh_config_node_identity_status_identity;
1075
static int hf_btmesh_config_sig_model_app_get_elementaddress;
1076
static int hf_btmesh_config_sig_model_app_get_modelidentifier;
1077
static int hf_btmesh_config_sig_model_app_list_status;
1078
static int hf_btmesh_config_sig_model_app_list_elementaddress;
1079
static int hf_btmesh_config_sig_model_app_list_modelidentifier;
1080
static int hf_btmesh_config_sig_model_app_list_appkeyindex;
1081
static int hf_btmesh_config_sig_model_app_list_appkeyindex_rfu;
1082
static int hf_btmesh_config_vendor_model_app_get_elementaddress;
1083
static int hf_btmesh_config_vendor_model_app_get_modelidentifier;
1084
static int hf_btmesh_config_vendor_model_app_list_status;
1085
static int hf_btmesh_config_vendor_model_app_list_elementaddress;
1086
static int hf_btmesh_config_vendor_model_app_list_modelidentifier;
1087
static int hf_btmesh_config_vendor_model_app_list_appkeyindex;
1088
static int hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu;
1089
static int hf_btmesh_generic_location_global_status_global_latitude;
1090
static int hf_btmesh_generic_location_global_status_global_longitude;
1091
static int hf_btmesh_generic_location_global_status_global_altitude;
1092
static int hf_btmesh_generic_location_global_set_global_latitude;
1093
static int hf_btmesh_generic_location_global_set_global_longitude;
1094
static int hf_btmesh_generic_location_global_set_global_altitude;
1095
static int hf_btmesh_generic_location_global_set_unacknowledged_global_latitude;
1096
static int hf_btmesh_generic_location_global_set_unacknowledged_global_longitude;
1097
static int hf_btmesh_generic_location_global_set_unacknowledged_global_altitude;
1098
static int hf_btmesh_generic_onoff_set_onoff;
1099
static int hf_btmesh_generic_onoff_set_tid;
1100
static int hf_btmesh_generic_onoff_set_transition_time;
1101
static int hf_btmesh_generic_onoff_set_transition_time_steps;
1102
static int hf_btmesh_generic_onoff_set_transition_time_resolution;
1103
static int hf_btmesh_generic_onoff_set_delay;
1104
static int hf_btmesh_generic_onoff_set_unacknowledged_onoff;
1105
static int hf_btmesh_generic_onoff_set_unacknowledged_tid;
1106
static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time;
1107
static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps;
1108
static int hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution;
1109
static int hf_btmesh_generic_onoff_set_unacknowledged_delay;
1110
static int hf_btmesh_generic_onoff_status_present_onoff;
1111
static int hf_btmesh_generic_onoff_status_target_onoff;
1112
static int hf_btmesh_generic_onoff_status_remaining_time;
1113
static int hf_btmesh_generic_onoff_status_remaining_time_steps;
1114
static int hf_btmesh_generic_onoff_status_remaining_time_resolution;
1115
static int hf_btmesh_generic_level_set_level;
1116
static int hf_btmesh_generic_level_set_tid;
1117
static int hf_btmesh_generic_level_set_transition_time;
1118
static int hf_btmesh_generic_level_set_transition_time_steps;
1119
static int hf_btmesh_generic_level_set_transition_time_resolution;
1120
static int hf_btmesh_generic_level_set_delay;
1121
static int hf_btmesh_generic_level_set_unacknowledged_level;
1122
static int hf_btmesh_generic_level_set_unacknowledged_tid;
1123
static int hf_btmesh_generic_level_set_unacknowledged_transition_time;
1124
static int hf_btmesh_generic_level_set_unacknowledged_transition_time_steps;
1125
static int hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution;
1126
static int hf_btmesh_generic_level_set_unacknowledged_delay;
1127
static int hf_btmesh_generic_level_status_present_level;
1128
static int hf_btmesh_generic_level_status_target_level;
1129
static int hf_btmesh_generic_level_status_remaining_time;
1130
static int hf_btmesh_generic_level_status_remaining_time_steps;
1131
static int hf_btmesh_generic_level_status_remaining_time_resolution;
1132
static int hf_btmesh_generic_delta_set_delta_level;
1133
static int hf_btmesh_generic_delta_set_tid;
1134
static int hf_btmesh_generic_delta_set_transition_time;
1135
static int hf_btmesh_generic_delta_set_transition_time_steps;
1136
static int hf_btmesh_generic_delta_set_transition_time_resolution;
1137
static int hf_btmesh_generic_delta_set_delay;
1138
static int hf_btmesh_generic_delta_set_unacknowledged_delta_level;
1139
static int hf_btmesh_generic_delta_set_unacknowledged_tid;
1140
static int hf_btmesh_generic_delta_set_unacknowledged_transition_time;
1141
static int hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps;
1142
static int hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution;
1143
static int hf_btmesh_generic_delta_set_unacknowledged_delay;
1144
static int hf_btmesh_generic_move_set_delta_level;
1145
static int hf_btmesh_generic_move_set_tid;
1146
static int hf_btmesh_generic_move_set_transition_time;
1147
static int hf_btmesh_generic_move_set_transition_time_steps;
1148
static int hf_btmesh_generic_move_set_transition_time_resolution;
1149
static int hf_btmesh_generic_move_set_delay;
1150
static int hf_btmesh_generic_move_set_unacknowledged_delta_level;
1151
static int hf_btmesh_generic_move_set_unacknowledged_tid;
1152
static int hf_btmesh_generic_move_set_unacknowledged_transition_time;
1153
static int hf_btmesh_generic_move_set_unacknowledged_transition_time_steps;
1154
static int hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution;
1155
static int hf_btmesh_generic_move_set_unacknowledged_delay;
1156
static int hf_btmesh_generic_default_transition_time_set_transition_time;
1157
static int hf_btmesh_generic_default_transition_time_set_transition_time_steps;
1158
static int hf_btmesh_generic_default_transition_time_set_transition_time_resolution;
1159
static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time;
1160
static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps;
1161
static int hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution;
1162
static int hf_btmesh_generic_default_transition_time_status_transition_time;
1163
static int hf_btmesh_generic_default_transition_time_status_transition_time_steps;
1164
static int hf_btmesh_generic_default_transition_time_status_transition_time_resolution;
1165
static int hf_btmesh_generic_onpowerup_status_onpowerup;
1166
static int hf_btmesh_generic_onpowerup_set_onpowerup;
1167
static int hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup;
1168
static int hf_btmesh_generic_power_level_set_power;
1169
static int hf_btmesh_generic_power_level_set_tid;
1170
static int hf_btmesh_generic_power_level_set_transition_time;
1171
static int hf_btmesh_generic_power_level_set_transition_time_steps;
1172
static int hf_btmesh_generic_power_level_set_transition_time_resolution;
1173
static int hf_btmesh_generic_power_level_set_delay;
1174
static int hf_btmesh_generic_power_level_set_unacknowledged_power;
1175
static int hf_btmesh_generic_power_level_set_unacknowledged_tid;
1176
static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time;
1177
static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps;
1178
static int hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution;
1179
static int hf_btmesh_generic_power_level_set_unacknowledged_delay;
1180
static int hf_btmesh_generic_power_level_status_present_power;
1181
static int hf_btmesh_generic_power_level_status_target_power;
1182
static int hf_btmesh_generic_power_level_status_remaining_time;
1183
static int hf_btmesh_generic_power_level_status_remaining_time_steps;
1184
static int hf_btmesh_generic_power_level_status_remaining_time_resolution;
1185
static int hf_btmesh_generic_power_last_status_power;
1186
static int hf_btmesh_generic_power_default_status_power;
1187
static int hf_btmesh_generic_power_range_status_status_code;
1188
static int hf_btmesh_generic_power_range_status_range_min;
1189
static int hf_btmesh_generic_power_range_status_range_max;
1190
static int hf_btmesh_generic_power_default_set_power;
1191
static int hf_btmesh_generic_power_default_set_unacknowledged_power;
1192
static int hf_btmesh_generic_power_range_set_range_min;
1193
static int hf_btmesh_generic_power_range_set_range_max;
1194
static int hf_btmesh_generic_power_range_set_unacknowledged_range_min;
1195
static int hf_btmesh_generic_power_range_set_unacknowledged_range_max;
1196
static int hf_btmesh_generic_battery_status_battery_level;
1197
static int hf_btmesh_generic_battery_status_time_to_discharge;
1198
static int hf_btmesh_generic_battery_status_time_to_charge;
1199
static int hf_btmesh_generic_battery_status_flags_presence;
1200
static int hf_btmesh_generic_battery_status_flags_indicator;
1201
static int hf_btmesh_generic_battery_status_flags_charging;
1202
static int hf_btmesh_generic_battery_status_flags_serviceability;
1203
static int hf_btmesh_generic_location_local_status_local_north;
1204
static int hf_btmesh_generic_location_local_status_local_east;
1205
static int hf_btmesh_generic_location_local_status_local_altitude;
1206
static int hf_btmesh_generic_location_local_status_floor_number;
1207
static int hf_btmesh_generic_location_local_status_uncertainty_stationary;
1208
static int hf_btmesh_generic_location_local_status_uncertainty_rfu;
1209
static int hf_btmesh_generic_location_local_status_uncertainty_update_time;
1210
static int hf_btmesh_generic_location_local_status_uncertainty_precision;
1211
static int hf_btmesh_generic_location_local_set_local_north;
1212
static int hf_btmesh_generic_location_local_set_local_east;
1213
static int hf_btmesh_generic_location_local_set_local_altitude;
1214
static int hf_btmesh_generic_location_local_set_floor_number;
1215
static int hf_btmesh_generic_location_local_set_uncertainty_stationary;
1216
static int hf_btmesh_generic_location_local_set_uncertainty_rfu;
1217
static int hf_btmesh_generic_location_local_set_uncertainty_update_time;
1218
static int hf_btmesh_generic_location_local_set_uncertainty_precision;
1219
static int hf_btmesh_generic_location_local_set_unacknowledged_local_north;
1220
static int hf_btmesh_generic_location_local_set_unacknowledged_local_east;
1221
static int hf_btmesh_generic_location_local_set_unacknowledged_local_altitude;
1222
static int hf_btmesh_generic_location_local_set_unacknowledged_floor_number;
1223
static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary;
1224
static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu;
1225
static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time;
1226
static int hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision;
1227
static int hf_btmesh_scene_status_status_code;
1228
static int hf_btmesh_scene_status_current_scene;
1229
static int hf_btmesh_scene_status_target_scene;
1230
static int hf_btmesh_scene_status_remaining_time;
1231
static int hf_btmesh_scene_status_remaining_time_steps;
1232
static int hf_btmesh_scene_status_remaining_time_resolution;
1233
static int hf_btmesh_scene_recall_scene_number;
1234
static int hf_btmesh_scene_recall_tid;
1235
static int hf_btmesh_scene_recall_transition_time;
1236
static int hf_btmesh_scene_recall_transition_time_steps;
1237
static int hf_btmesh_scene_recall_transition_time_resolution;
1238
static int hf_btmesh_scene_recall_delay;
1239
static int hf_btmesh_scene_recall_unacknowledged_scene_number;
1240
static int hf_btmesh_scene_recall_unacknowledged_tid;
1241
static int hf_btmesh_scene_recall_unacknowledged_transition_time;
1242
static int hf_btmesh_scene_recall_unacknowledged_transition_time_steps;
1243
static int hf_btmesh_scene_recall_unacknowledged_transition_time_resolution;
1244
static int hf_btmesh_scene_recall_unacknowledged_delay;
1245
static int hf_btmesh_scene_register_status_status_code;
1246
static int hf_btmesh_scene_register_status_current_scene;
1247
static int hf_btmesh_scene_register_status_scene;
1248
static int hf_btmesh_scene_store_scene_number;
1249
static int hf_btmesh_scene_store_unacknowledged_scene_number;
1250
static int hf_btmesh_scene_delete_scene_number;
1251
static int hf_btmesh_scene_delete_unacknowledged_scene_number;
1252
static int hf_btmesh_time_set_tai_seconds;
1253
static int hf_btmesh_time_set_subsecond;
1254
static int hf_btmesh_time_set_uncertainty;
1255
static int hf_btmesh_time_set_time_authority;
1256
static int hf_btmesh_time_set_tai_utc_delta;
1257
static int hf_btmesh_time_set_time_zone_offset;
1258
static int hf_btmesh_time_status_tai_seconds;
1259
static int hf_btmesh_time_status_subsecond;
1260
static int hf_btmesh_time_status_uncertainty;
1261
static int hf_btmesh_time_status_time_authority;
1262
static int hf_btmesh_time_status_tai_utc_delta;
1263
static int hf_btmesh_time_status_time_zone_offset;
1264
static int hf_btmesh_scheduler_action_status_index;
1265
static int hf_btmesh_scheduler_action_status_schedule_register_year;
1266
static int hf_btmesh_scheduler_action_status_schedule_register_month;
1267
static int hf_btmesh_scheduler_action_status_schedule_register_day;
1268
static int hf_btmesh_scheduler_action_status_schedule_register_hour;
1269
static int hf_btmesh_scheduler_action_status_schedule_register_minute;
1270
static int hf_btmesh_scheduler_action_status_schedule_register_second;
1271
static int hf_btmesh_scheduler_action_status_schedule_register_day_of_week;
1272
static int hf_btmesh_scheduler_action_status_schedule_register_action;
1273
static int hf_btmesh_scheduler_action_status_schedule_register_transition_time;
1274
static int hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps;
1275
static int hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution;
1276
static int hf_btmesh_scheduler_action_status_schedule_register_scene_number;
1277
static int hf_btmesh_scheduler_schedule_register_month_january;
1278
static int hf_btmesh_scheduler_schedule_register_month_february;
1279
static int hf_btmesh_scheduler_schedule_register_month_march;
1280
static int hf_btmesh_scheduler_schedule_register_month_april;
1281
static int hf_btmesh_scheduler_schedule_register_month_may;
1282
static int hf_btmesh_scheduler_schedule_register_month_june;
1283
static int hf_btmesh_scheduler_schedule_register_month_july;
1284
static int hf_btmesh_scheduler_schedule_register_month_august;
1285
static int hf_btmesh_scheduler_schedule_register_month_september;
1286
static int hf_btmesh_scheduler_schedule_register_month_october;
1287
static int hf_btmesh_scheduler_schedule_register_month_november;
1288
static int hf_btmesh_scheduler_schedule_register_month_december;
1289
static int hf_btmesh_scheduler_schedule_register_day_of_week_monday;
1290
static int hf_btmesh_scheduler_schedule_register_day_of_week_tuesday;
1291
static int hf_btmesh_scheduler_schedule_register_day_of_week_wednesday;
1292
static int hf_btmesh_scheduler_schedule_register_day_of_week_thursday;
1293
static int hf_btmesh_scheduler_schedule_register_day_of_week_friday;
1294
static int hf_btmesh_scheduler_schedule_register_day_of_week_saturday;
1295
static int hf_btmesh_scheduler_schedule_register_day_of_week_sunday;
1296
static int hf_btmesh_scheduler_action_set_index;
1297
static int hf_btmesh_scheduler_action_set_schedule_register_year;
1298
static int hf_btmesh_scheduler_action_set_schedule_register_month;
1299
static int hf_btmesh_scheduler_action_set_schedule_register_day;
1300
static int hf_btmesh_scheduler_action_set_schedule_register_hour;
1301
static int hf_btmesh_scheduler_action_set_schedule_register_minute;
1302
static int hf_btmesh_scheduler_action_set_schedule_register_second;
1303
static int hf_btmesh_scheduler_action_set_schedule_register_day_of_week;
1304
static int hf_btmesh_scheduler_action_set_schedule_register_action;
1305
static int hf_btmesh_scheduler_action_set_schedule_register_transition_time;
1306
static int hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps;
1307
static int hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution;
1308
static int hf_btmesh_scheduler_action_set_schedule_register_scene_number;
1309
static int hf_btmesh_scheduler_action_set_unacknowledged_index;
1310
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year;
1311
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month;
1312
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day;
1313
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour;
1314
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute;
1315
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second;
1316
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day_of_week;
1317
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action;
1318
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time;
1319
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps;
1320
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution;
1321
static int hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number;
1322
static int hf_btmesh_time_role_set_time_role;
1323
static int hf_btmesh_time_role_status_time_role;
1324
static int hf_btmesh_time_zone_set_time_zone_offset_new;
1325
static int hf_btmesh_time_zone_set_tai_of_zone_change;
1326
static int hf_btmesh_time_zone_status_time_zone_offset_current;
1327
static int hf_btmesh_time_zone_status_time_zone_offset_new;
1328
static int hf_btmesh_time_zone_status_tai_of_zone_change;
1329
static int hf_btmesh_tai_utc_delta_set_tai_utc_delta_new;
1330
static int hf_btmesh_tai_utc_delta_set_padding;
1331
static int hf_btmesh_tai_utc_delta_set_tai_of_delta_change;
1332
static int hf_btmesh_tai_utc_delta_status_tai_utc_delta_current;
1333
static int hf_btmesh_tai_utc_delta_status_padding_1;
1334
static int hf_btmesh_tai_utc_delta_status_tai_utc_delta_new;
1335
static int hf_btmesh_tai_utc_delta_status_padding_2;
1336
static int hf_btmesh_tai_utc_delta_status_tai_of_delta_change;
1337
static int hf_btmesh_scheduler_action_get_index;
1338
static int hf_btmesh_scheduler_status_schedules;
1339
static int hf_btmesh_scheduler_status_schedules_schedule_0;
1340
static int hf_btmesh_scheduler_status_schedules_schedule_1;
1341
static int hf_btmesh_scheduler_status_schedules_schedule_2;
1342
static int hf_btmesh_scheduler_status_schedules_schedule_3;
1343
static int hf_btmesh_scheduler_status_schedules_schedule_4;
1344
static int hf_btmesh_scheduler_status_schedules_schedule_5;
1345
static int hf_btmesh_scheduler_status_schedules_schedule_6;
1346
static int hf_btmesh_scheduler_status_schedules_schedule_7;
1347
static int hf_btmesh_scheduler_status_schedules_schedule_8;
1348
static int hf_btmesh_scheduler_status_schedules_schedule_9;
1349
static int hf_btmesh_scheduler_status_schedules_schedule_10;
1350
static int hf_btmesh_scheduler_status_schedules_schedule_11;
1351
static int hf_btmesh_scheduler_status_schedules_schedule_12;
1352
static int hf_btmesh_scheduler_status_schedules_schedule_13;
1353
static int hf_btmesh_scheduler_status_schedules_schedule_14;
1354
static int hf_btmesh_scheduler_status_schedules_schedule_15;
1355
1356
static int hf_btmesh_light_lc_property_set_light_lc_property_id;
1357
static int hf_btmesh_light_lc_property_set_light_lc_property_value;
1358
static int hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id;
1359
static int hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_value;
1360
static int hf_btmesh_light_lc_property_status_light_lc_property_id;
1361
static int hf_btmesh_light_lc_property_status_light_lc_property_value;
1362
static int hf_btmesh_light_lightness_set_lightness;
1363
static int hf_btmesh_light_lightness_set_tid;
1364
static int hf_btmesh_light_lightness_set_transition_time;
1365
static int hf_btmesh_light_lightness_set_transition_time_steps;
1366
static int hf_btmesh_light_lightness_set_transition_time_resolution;
1367
static int hf_btmesh_light_lightness_set_delay;
1368
static int hf_btmesh_light_lightness_set_unacknowledged_lightness;
1369
static int hf_btmesh_light_lightness_set_unacknowledged_tid;
1370
static int hf_btmesh_light_lightness_set_unacknowledged_transition_time;
1371
static int hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps;
1372
static int hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution;
1373
static int hf_btmesh_light_lightness_set_unacknowledged_delay;
1374
static int hf_btmesh_light_lightness_status_present_lightness;
1375
static int hf_btmesh_light_lightness_status_target_lightness;
1376
static int hf_btmesh_light_lightness_status_remaining_time;
1377
static int hf_btmesh_light_lightness_status_remaining_time_steps;
1378
static int hf_btmesh_light_lightness_status_remaining_time_resolution;
1379
static int hf_btmesh_light_lightness_linear_set_lightness;
1380
static int hf_btmesh_light_lightness_linear_set_tid;
1381
static int hf_btmesh_light_lightness_linear_set_transition_time;
1382
static int hf_btmesh_light_lightness_linear_set_transition_time_steps;
1383
static int hf_btmesh_light_lightness_linear_set_transition_time_resolution;
1384
static int hf_btmesh_light_lightness_linear_set_delay;
1385
static int hf_btmesh_light_lightness_linear_set_unacknowledged_lightness;
1386
static int hf_btmesh_light_lightness_linear_set_unacknowledged_tid;
1387
static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time;
1388
static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps;
1389
static int hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution;
1390
static int hf_btmesh_light_lightness_linear_set_unacknowledged_delay;
1391
static int hf_btmesh_light_lightness_linear_status_present_lightness;
1392
static int hf_btmesh_light_lightness_linear_status_target_lightness;
1393
static int hf_btmesh_light_lightness_linear_status_remaining_time;
1394
static int hf_btmesh_light_lightness_linear_status_remaining_time_steps;
1395
static int hf_btmesh_light_lightness_linear_status_remaining_time_resolution;
1396
static int hf_btmesh_light_lightness_last_status_lightness;
1397
static int hf_btmesh_light_lightness_default_status_lightness;
1398
static int hf_btmesh_light_lightness_range_status_status_code;
1399
static int hf_btmesh_light_lightness_range_status_range_min;
1400
static int hf_btmesh_light_lightness_range_status_range_max;
1401
static int hf_btmesh_light_lightness_default_set_lightness;
1402
static int hf_btmesh_light_lightness_default_set_unacknowledged_lightness;
1403
static int hf_btmesh_light_lightness_range_set_range_min;
1404
static int hf_btmesh_light_lightness_range_set_range_max;
1405
static int hf_btmesh_light_lightness_range_set_unacknowledged_range_min;
1406
static int hf_btmesh_light_lightness_range_set_unacknowledged_range_max;
1407
static int hf_btmesh_light_ctl_set_ctl_lightness;
1408
static int hf_btmesh_light_ctl_set_ctl_temperature;
1409
static int hf_btmesh_light_ctl_set_ctl_delta_uv;
1410
static int hf_btmesh_light_ctl_set_tid;
1411
static int hf_btmesh_light_ctl_set_transition_time;
1412
static int hf_btmesh_light_ctl_set_transition_time_steps;
1413
static int hf_btmesh_light_ctl_set_transition_time_resolution;
1414
static int hf_btmesh_light_ctl_set_delay;
1415
static int hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness;
1416
static int hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature;
1417
static int hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv;
1418
static int hf_btmesh_light_ctl_set_unacknowledged_tid;
1419
static int hf_btmesh_light_ctl_set_unacknowledged_transition_time;
1420
static int hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps;
1421
static int hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution;
1422
static int hf_btmesh_light_ctl_set_unacknowledged_delay;
1423
static int hf_btmesh_light_ctl_status_present_ctl_lightness;
1424
static int hf_btmesh_light_ctl_status_present_ctl_temperature;
1425
static int hf_btmesh_light_ctl_status_target_ctl_lightness;
1426
static int hf_btmesh_light_ctl_status_target_ctl_temperature;
1427
static int hf_btmesh_light_ctl_status_remaining_time;
1428
static int hf_btmesh_light_ctl_status_remaining_time_steps;
1429
static int hf_btmesh_light_ctl_status_remaining_time_resolution;
1430
static int hf_btmesh_light_ctl_temperature_range_status_status_code;
1431
static int hf_btmesh_light_ctl_temperature_range_status_range_min;
1432
static int hf_btmesh_light_ctl_temperature_range_status_range_max;
1433
static int hf_btmesh_light_ctl_temperature_set_ctl_temperature;
1434
static int hf_btmesh_light_ctl_temperature_set_ctl_delta_uv;
1435
static int hf_btmesh_light_ctl_temperature_set_tid;
1436
static int hf_btmesh_light_ctl_temperature_set_transition_time;
1437
static int hf_btmesh_light_ctl_temperature_set_transition_time_steps;
1438
static int hf_btmesh_light_ctl_temperature_set_transition_time_resolution;
1439
static int hf_btmesh_light_ctl_temperature_set_delay;
1440
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature;
1441
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv;
1442
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_tid;
1443
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time;
1444
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps;
1445
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution;
1446
static int hf_btmesh_light_ctl_temperature_set_unacknowledged_delay;
1447
static int hf_btmesh_light_ctl_temperature_status_present_ctl_temperature;
1448
static int hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv;
1449
static int hf_btmesh_light_ctl_temperature_status_target_ctl_temperature;
1450
static int hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv;
1451
static int hf_btmesh_light_ctl_temperature_status_remaining_time;
1452
static int hf_btmesh_light_ctl_temperature_status_remaining_time_steps;
1453
static int hf_btmesh_light_ctl_temperature_status_remaining_time_resolution;
1454
static int hf_btmesh_light_ctl_default_status_lightness;
1455
static int hf_btmesh_light_ctl_default_status_temperature;
1456
static int hf_btmesh_light_ctl_default_status_delta_uv;
1457
static int hf_btmesh_light_ctl_default_set_lightness;
1458
static int hf_btmesh_light_ctl_default_set_temperature;
1459
static int hf_btmesh_light_ctl_default_set_delta_uv;
1460
static int hf_btmesh_light_ctl_default_set_unacknowledged_lightness;
1461
static int hf_btmesh_light_ctl_default_set_unacknowledged_temperature;
1462
static int hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv;
1463
static int hf_btmesh_light_ctl_temperature_range_set_range_min;
1464
static int hf_btmesh_light_ctl_temperature_range_set_range_max;
1465
static int hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min;
1466
static int hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max;
1467
static int hf_btmesh_light_hsl_hue_set_hue;
1468
static int hf_btmesh_light_hsl_hue_set_tid;
1469
static int hf_btmesh_light_hsl_hue_set_transition_time;
1470
static int hf_btmesh_light_hsl_hue_set_transition_time_steps;
1471
static int hf_btmesh_light_hsl_hue_set_transition_time_resolution;
1472
static int hf_btmesh_light_hsl_hue_set_delay;
1473
static int hf_btmesh_light_hsl_hue_set_unacknowledged_hue;
1474
static int hf_btmesh_light_hsl_hue_set_unacknowledged_tid;
1475
static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time;
1476
static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps;
1477
static int hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution;
1478
static int hf_btmesh_light_hsl_hue_set_unacknowledged_delay;
1479
static int hf_btmesh_light_hsl_hue_status_present_hue;
1480
static int hf_btmesh_light_hsl_hue_status_target_hue;
1481
static int hf_btmesh_light_hsl_hue_status_remaining_time;
1482
static int hf_btmesh_light_hsl_hue_status_remaining_time_steps;
1483
static int hf_btmesh_light_hsl_hue_status_remaining_time_resolution;
1484
static int hf_btmesh_light_hsl_saturation_set_saturation;
1485
static int hf_btmesh_light_hsl_saturation_set_tid;
1486
static int hf_btmesh_light_hsl_saturation_set_transition_time;
1487
static int hf_btmesh_light_hsl_saturation_set_transition_time_steps;
1488
static int hf_btmesh_light_hsl_saturation_set_transition_time_resolution;
1489
static int hf_btmesh_light_hsl_saturation_set_delay;
1490
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation;
1491
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_tid;
1492
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time;
1493
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps;
1494
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution;
1495
static int hf_btmesh_light_hsl_saturation_set_unacknowledged_delay;
1496
static int hf_btmesh_light_hsl_saturation_status_present_saturation;
1497
static int hf_btmesh_light_hsl_saturation_status_target_saturation;
1498
static int hf_btmesh_light_hsl_saturation_status_remaining_time;
1499
static int hf_btmesh_light_hsl_saturation_status_remaining_time_steps;
1500
static int hf_btmesh_light_hsl_saturation_status_remaining_time_resolution;
1501
static int hf_btmesh_light_hsl_set_hsl_lightness;
1502
static int hf_btmesh_light_hsl_set_hsl_hue;
1503
static int hf_btmesh_light_hsl_set_hsl_saturation;
1504
static int hf_btmesh_light_hsl_set_tid;
1505
static int hf_btmesh_light_hsl_set_transition_time;
1506
static int hf_btmesh_light_hsl_set_transition_time_steps;
1507
static int hf_btmesh_light_hsl_set_transition_time_resolution;
1508
static int hf_btmesh_light_hsl_set_delay;
1509
static int hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness;
1510
static int hf_btmesh_light_hsl_set_unacknowledged_hsl_hue;
1511
static int hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation;
1512
static int hf_btmesh_light_hsl_set_unacknowledged_tid;
1513
static int hf_btmesh_light_hsl_set_unacknowledged_transition_time;
1514
static int hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps;
1515
static int hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution;
1516
static int hf_btmesh_light_hsl_set_unacknowledged_delay;
1517
static int hf_btmesh_light_hsl_status_hsl_lightness;
1518
static int hf_btmesh_light_hsl_status_hsl_hue;
1519
static int hf_btmesh_light_hsl_status_hsl_saturation;
1520
static int hf_btmesh_light_hsl_status_remaining_time;
1521
static int hf_btmesh_light_hsl_status_remaining_time_steps;
1522
static int hf_btmesh_light_hsl_status_remaining_time_resolution;
1523
static int hf_btmesh_light_hsl_target_status_hsl_lightness_target;
1524
static int hf_btmesh_light_hsl_target_status_hsl_hue_target;
1525
static int hf_btmesh_light_hsl_target_status_hsl_saturation_target;
1526
static int hf_btmesh_light_hsl_target_status_remaining_time;
1527
static int hf_btmesh_light_hsl_target_status_remaining_time_steps;
1528
static int hf_btmesh_light_hsl_target_status_remaining_time_resolution;
1529
static int hf_btmesh_light_hsl_default_status_lightness;
1530
static int hf_btmesh_light_hsl_default_status_hue;
1531
static int hf_btmesh_light_hsl_default_status_saturation;
1532
static int hf_btmesh_light_hsl_range_status_status_code;
1533
static int hf_btmesh_light_hsl_range_status_hue_range_min;
1534
static int hf_btmesh_light_hsl_range_status_hue_range_max;
1535
static int hf_btmesh_light_hsl_range_status_saturation_range_min;
1536
static int hf_btmesh_light_hsl_range_status_saturation_range_max;
1537
static int hf_btmesh_light_hsl_default_set_lightness;
1538
static int hf_btmesh_light_hsl_default_set_hue;
1539
static int hf_btmesh_light_hsl_default_set_saturation;
1540
static int hf_btmesh_light_hsl_default_set_unacknowledged_lightness;
1541
static int hf_btmesh_light_hsl_default_set_unacknowledged_hue;
1542
static int hf_btmesh_light_hsl_default_set_unacknowledged_saturation;
1543
static int hf_btmesh_light_hsl_range_set_hue_range_min;
1544
static int hf_btmesh_light_hsl_range_set_hue_range_max;
1545
static int hf_btmesh_light_hsl_range_set_saturation_range_min;
1546
static int hf_btmesh_light_hsl_range_set_saturation_range_max;
1547
static int hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min;
1548
static int hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max;
1549
static int hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min;
1550
static int hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max;
1551
static int hf_btmesh_light_xyl_set_xyl_lightness;
1552
static int hf_btmesh_light_xyl_set_xyl_x;
1553
static int hf_btmesh_light_xyl_set_xyl_y;
1554
static int hf_btmesh_light_xyl_set_tid;
1555
static int hf_btmesh_light_xyl_set_transition_time;
1556
static int hf_btmesh_light_xyl_set_transition_time_steps;
1557
static int hf_btmesh_light_xyl_set_transition_time_resolution;
1558
static int hf_btmesh_light_xyl_set_delay;
1559
static int hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness;
1560
static int hf_btmesh_light_xyl_set_unacknowledged_xyl_x;
1561
static int hf_btmesh_light_xyl_set_unacknowledged_xyl_y;
1562
static int hf_btmesh_light_xyl_set_unacknowledged_tid;
1563
static int hf_btmesh_light_xyl_set_unacknowledged_transition_time;
1564
static int hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps;
1565
static int hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution;
1566
static int hf_btmesh_light_xyl_set_unacknowledged_delay;
1567
static int hf_btmesh_light_xyl_status_xyl_lightness;
1568
static int hf_btmesh_light_xyl_status_xyl_x;
1569
static int hf_btmesh_light_xyl_status_xyl_y;
1570
static int hf_btmesh_light_xyl_status_remaining_time;
1571
static int hf_btmesh_light_xyl_status_remaining_time_steps;
1572
static int hf_btmesh_light_xyl_status_remaining_time_resolution;
1573
static int hf_btmesh_light_xyl_target_status_target_xyl_lightness;
1574
static int hf_btmesh_light_xyl_target_status_target_xyl_x;
1575
static int hf_btmesh_light_xyl_target_status_target_xyl_y;
1576
static int hf_btmesh_light_xyl_target_status_remaining_time;
1577
static int hf_btmesh_light_xyl_target_status_remaining_time_steps;
1578
static int hf_btmesh_light_xyl_target_status_remaining_time_resolution;
1579
static int hf_btmesh_light_xyl_default_status_lightness;
1580
static int hf_btmesh_light_xyl_default_status_xyl_x;
1581
static int hf_btmesh_light_xyl_default_status_xyl_y;
1582
static int hf_btmesh_light_xyl_range_status_status_code;
1583
static int hf_btmesh_light_xyl_range_status_xyl_x_range_min;
1584
static int hf_btmesh_light_xyl_range_status_xyl_x_range_max;
1585
static int hf_btmesh_light_xyl_range_status_xyl_y_range_min;
1586
static int hf_btmesh_light_xyl_range_status_xyl_y_range_max;
1587
static int hf_btmesh_light_xyl_default_set_lightness;
1588
static int hf_btmesh_light_xyl_default_set_xyl_x;
1589
static int hf_btmesh_light_xyl_default_set_xyl_y;
1590
static int hf_btmesh_light_xyl_default_set_unacknowledged_lightness;
1591
static int hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x;
1592
static int hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y;
1593
static int hf_btmesh_light_xyl_range_set_xyl_x_range_min;
1594
static int hf_btmesh_light_xyl_range_set_xyl_x_range_max;
1595
static int hf_btmesh_light_xyl_range_set_xyl_y_range_min;
1596
static int hf_btmesh_light_xyl_range_set_xyl_y_range_max;
1597
static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min;
1598
static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max;
1599
static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min;
1600
static int hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max;
1601
static int hf_btmesh_light_lc_mode_set_mode;
1602
static int hf_btmesh_light_lc_mode_set_unacknowledged_mode;
1603
static int hf_btmesh_light_lc_mode_status_mode;
1604
static int hf_btmesh_light_lc_om_set_mode;
1605
static int hf_btmesh_light_lc_om_set_unacknowledged_mode;
1606
static int hf_btmesh_light_lc_om_status_mode;
1607
static int hf_btmesh_light_lc_light_onoff_set_light_onoff;
1608
static int hf_btmesh_light_lc_light_onoff_set_tid;
1609
static int hf_btmesh_light_lc_light_onoff_set_transition_time;
1610
static int hf_btmesh_light_lc_light_onoff_set_transition_time_steps;
1611
static int hf_btmesh_light_lc_light_onoff_set_transition_time_resolution;
1612
static int hf_btmesh_light_lc_light_onoff_set_delay;
1613
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff;
1614
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid;
1615
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time;
1616
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps;
1617
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution;
1618
static int hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay;
1619
static int hf_btmesh_light_lc_light_onoff_status_present_light_onoff;
1620
static int hf_btmesh_light_lc_light_onoff_status_target_light_onoff;
1621
static int hf_btmesh_light_lc_light_onoff_status_remaining_time;
1622
static int hf_btmesh_light_lc_light_onoff_status_remaining_time_steps;
1623
static int hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution;
1624
static int hf_btmesh_light_lc_property_get_light_lc_property_id;
1625
1626
static int hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id;
1627
static int hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id;
1628
static int hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access;
1629
static int hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id;
1630
static int hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access;
1631
static int hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id;
1632
static int hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access;
1633
static int hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value;
1634
static int hf_btmesh_generic_admin_properties_status_admin_property_id;
1635
static int hf_btmesh_generic_admin_property_set_admin_property_id;
1636
static int hf_btmesh_generic_admin_property_set_admin_user_access;
1637
static int hf_btmesh_generic_admin_property_set_admin_property_value;
1638
static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id;
1639
static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access;
1640
static int hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value;
1641
static int hf_btmesh_generic_admin_property_status_admin_property_id;
1642
static int hf_btmesh_generic_admin_property_status_admin_user_access;
1643
static int hf_btmesh_generic_admin_property_status_admin_property_value;
1644
static int hf_btmesh_generic_user_properties_status_user_property_id;
1645
static int hf_btmesh_generic_user_property_set_user_property_id;
1646
static int hf_btmesh_generic_user_property_set_user_property_value;
1647
static int hf_btmesh_generic_user_property_set_unacknowledged_user_property_id;
1648
static int hf_btmesh_generic_user_property_set_unacknowledged_user_property_value;
1649
static int hf_btmesh_generic_user_property_status_user_property_id;
1650
static int hf_btmesh_generic_user_property_status_user_access;
1651
static int hf_btmesh_generic_user_property_status_user_property_value;
1652
static int hf_btmesh_generic_client_properties_get_client_property_id;
1653
static int hf_btmesh_generic_client_properties_status_client_property_id;
1654
static int hf_btmesh_sensor_descriptor_get_property_id;
1655
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id;
1656
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance;
1657
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance;
1658
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function;
1659
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period;
1660
static int hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval;
1661
static int hf_btmesh_sensor_status_mpid_format;
1662
static int hf_btmesh_sensor_status_mpid_format_a_length;
1663
static int hf_btmesh_sensor_status_mpid_format_a_property_id;
1664
static int hf_btmesh_sensor_status_mpid_format_b_length;
1665
static int hf_btmesh_sensor_status_mpid_format_b_property_id;
1666
static int hf_btmesh_sensor_status_raw_value;
1667
static int hf_btmesh_sensor_column_status_property_id;
1668
static int hf_btmesh_sensor_column_status_raw_value_a;
1669
static int hf_btmesh_sensor_column_status_raw_value_b;
1670
static int hf_btmesh_sensor_column_status_raw_value_c;
1671
static int hf_btmesh_sensor_series_status_property_id;
1672
static int hf_btmesh_sensor_series_status_raw_value_a;
1673
static int hf_btmesh_sensor_series_status_raw_value_b;
1674
static int hf_btmesh_sensor_series_status_raw_value_c;
1675
static int hf_btmesh_sensor_cadence_set_property_id;
1676
static int hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor;
1677
static int hf_btmesh_sensor_cadence_set_status_trigger_type;
1678
static int hf_btmesh_sensor_cadence_set_status_trigger_delta_down;
1679
static int hf_btmesh_sensor_cadence_set_status_trigger_delta_up;
1680
static int hf_btmesh_sensor_cadence_set_status_min_interval;
1681
static int hf_btmesh_sensor_cadence_set_fast_cadence_low;
1682
static int hf_btmesh_sensor_cadence_set_fast_cadence_high;
1683
static int hf_btmesh_sensor_cadence_set_remainder_not_dissected;
1684
static int hf_btmesh_sensor_cadence_set_unacknowledged_property_id;
1685
static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor;
1686
static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type;
1687
static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down;
1688
static int hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up;
1689
static int hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval;
1690
static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low;
1691
static int hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high;
1692
static int hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected;
1693
static int hf_btmesh_sensor_cadence_status_property_id;
1694
static int hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor;
1695
static int hf_btmesh_sensor_cadence_status_status_trigger_type;
1696
static int hf_btmesh_sensor_cadence_status_status_trigger_delta_down;
1697
static int hf_btmesh_sensor_cadence_status_status_trigger_delta_up;
1698
static int hf_btmesh_sensor_cadence_status_status_min_interval;
1699
static int hf_btmesh_sensor_cadence_status_fast_cadence_low;
1700
static int hf_btmesh_sensor_cadence_status_fast_cadence_high;
1701
static int hf_btmesh_sensor_cadence_status_remainder_not_dissected;
1702
static int hf_btmesh_sensor_settings_status_sensor_property_id;
1703
static int hf_btmesh_sensor_settings_status_sensor_setting_property_id;
1704
static int hf_btmesh_sensor_setting_set_sensor_property_id;
1705
static int hf_btmesh_sensor_setting_set_sensor_setting_property_id;
1706
static int hf_btmesh_sensor_setting_set_sensor_setting_raw;
1707
static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id;
1708
static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id;
1709
static int hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw;
1710
static int hf_btmesh_sensor_setting_status_sensor_property_id;
1711
static int hf_btmesh_sensor_setting_status_sensor_setting_property_id;
1712
static int hf_btmesh_sensor_setting_status_sensor_setting_access;
1713
static int hf_btmesh_sensor_setting_status_sensor_setting_raw;
1714
static int hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id;
1715
static int hf_btmesh_generic_admin_property_get_admin_property_id;
1716
static int hf_btmesh_generic_user_property_get_user_property_id;
1717
1718
static int hf_btmesh_sensor_get_property_id;
1719
static int hf_btmesh_sensor_column_get_property_id;
1720
static int hf_btmesh_sensor_column_get_raw_value_a;
1721
static int hf_btmesh_sensor_series_get_property_id;
1722
static int hf_btmesh_sensor_series_get_raw_value_a1;
1723
static int hf_btmesh_sensor_series_get_raw_value_a2;
1724
static int hf_btmesh_sensor_cadence_get_property_id;
1725
static int hf_btmesh_sensor_settings_get_sensor_property_id;
1726
static int hf_btmesh_sensor_setting_get_sensor_property_id;
1727
static int hf_btmesh_sensor_setting_get_sensor_setting_property_id;
1728
1729
static int hf_bt_phony_characteristic_percentage_change_16;
1730
static int hf_bt_phony_characteristic_index;
1731
static int hf_bt_characteristic_time_decihour_8;
1732
static int hf_bt_characteristic_temperature_8;
1733
static int hf_bt_characteristic_temperature;
1734
static int hf_bt_characteristic_electric_current;
1735
static int hf_bt_characteristic_energy;
1736
static int hf_bt_characteristic_generic_level;
1737
static int hf_bt_characteristic_boolean;
1738
static int hf_bt_characteristic_coefficient;
1739
static int hf_bt_characteristic_count_16;
1740
static int hf_bt_characteristic_illuminance;
1741
static int hf_bt_characteristic_perceived_lightness;
1742
static int hf_bt_characteristic_percentage_8;
1743
static int hf_bt_characteristic_time_millisecond_24;
1744
static int hf_bt_characteristic_time_second_16;
1745
1746
static const
1747
bt_property_raw_value_entry_t sensor_column_status_hfs = {
1748
    .hf_raw_value_a = &hf_btmesh_sensor_column_status_raw_value_a,
1749
    .hf_raw_value_b = &hf_btmesh_sensor_column_status_raw_value_b,
1750
    .hf_raw_value_c = &hf_btmesh_sensor_column_status_raw_value_c
1751
};
1752
1753
static const
1754
bt_property_raw_value_entry_t sensor_series_status_hfs = {
1755
    .hf_raw_value_a = &hf_btmesh_sensor_series_status_raw_value_a,
1756
    .hf_raw_value_b = &hf_btmesh_sensor_series_status_raw_value_b,
1757
    .hf_raw_value_c = &hf_btmesh_sensor_series_status_raw_value_c
1758
};
1759
1760
static const
1761
bt_sensor_cadence_dissector_t sensor_cadence_set_hfs = {
1762
    .hf_status_trigger_delta_up   = &hf_btmesh_sensor_cadence_set_status_trigger_delta_down,
1763
    .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_set_status_trigger_delta_up,
1764
    .hf_status_min_interval       = &hf_btmesh_sensor_cadence_set_status_min_interval,
1765
    .hf_fast_cadence_low          = &hf_btmesh_sensor_cadence_set_fast_cadence_low,
1766
    .hf_fast_cadence_high         = &hf_btmesh_sensor_cadence_set_fast_cadence_high,
1767
    .hf_remainder_not_dissected   = &hf_btmesh_sensor_cadence_set_remainder_not_dissected
1768
};
1769
1770
static const
1771
bt_sensor_cadence_dissector_t sensor_cadence_set_unacknowledged_hfs = {
1772
    .hf_status_trigger_delta_up   = &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down,
1773
    .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up,
1774
    .hf_status_min_interval       = &hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval,
1775
    .hf_fast_cadence_low          = &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low,
1776
    .hf_fast_cadence_high         = &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high,
1777
    .hf_remainder_not_dissected   = &hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected
1778
};
1779
1780
static const
1781
bt_sensor_cadence_dissector_t sensor_cadence_status_hfs = {
1782
    .hf_status_trigger_delta_up   = &hf_btmesh_sensor_cadence_status_status_trigger_delta_down,
1783
    .hf_status_trigger_delta_down = &hf_btmesh_sensor_cadence_status_status_trigger_delta_up,
1784
    .hf_status_min_interval       = &hf_btmesh_sensor_cadence_status_status_min_interval,
1785
    .hf_fast_cadence_low          = &hf_btmesh_sensor_cadence_status_fast_cadence_low,
1786
    .hf_fast_cadence_high         = &hf_btmesh_sensor_cadence_status_fast_cadence_high,
1787
    .hf_remainder_not_dissected   = &hf_btmesh_sensor_cadence_status_remainder_not_dissected
1788
};
1789
1790
static const
1791
bt_property_columns_raw_value_t sensor_column_get_hfs = {
1792
    .hf_raw_value_a1 = &hf_btmesh_sensor_column_get_raw_value_a,
1793
    .hf_raw_value_a2 = NULL
1794
};
1795
1796
static const
1797
bt_property_columns_raw_value_t sensor_series_get_hfs = {
1798
    .hf_raw_value_a1 = &hf_btmesh_sensor_series_get_raw_value_a1,
1799
    .hf_raw_value_a2 = &hf_btmesh_sensor_series_get_raw_value_a2
1800
};
1801
1802
static int ett_btmesh;
1803
static int ett_btmesh_net_pdu;
1804
static int ett_btmesh_transp_pdu;
1805
static int ett_btmesh_transp_ctrl_msg;
1806
static int ett_btmesh_upper_transp_acc_pdu;
1807
static int ett_btmesh_segmented_access_fragments;
1808
static int ett_btmesh_segmented_access_fragment;
1809
static int ett_btmesh_segmented_control_fragments;
1810
static int ett_btmesh_segmented_control_fragment;
1811
static int ett_btmesh_access_pdu;
1812
static int ett_btmesh_model_layer;
1813
1814
static int ett_btmesh_config_model_netapp_index;
1815
static int ett_btmesh_config_model_publishperiod;
1816
static int ett_btmesh_config_model_publishretransmit;
1817
static int ett_btmesh_config_model_relayretransmit;
1818
static int ett_btmesh_config_model_network_transmit;
1819
static int ett_btmesh_config_model_element;
1820
static int ett_btmesh_config_model_model;
1821
static int ett_btmesh_config_model_vendor;
1822
static int ett_btmesh_config_composition_data_status_features;
1823
static int ett_btmesh_config_model_pub_app_index;
1824
static int ett_btmesh_config_model_addresses;
1825
static int ett_btmesh_config_model_netkey_list;
1826
static int ett_btmesh_config_model_appkey_list;
1827
static int ett_btmesh_config_model_net_index;
1828
static int ett_btmesh_config_model_app_index;
1829
static int ett_btmesh_config_heartbeat_publication_set_features;
1830
static int ett_btmesh_config_heartbeat_publication_status_features;
1831
static int ett_btmesh_config_model_fault_array;
1832
static int ett_btmesh_scene_register_status_scenes;
1833
static int ett_btmesh_scheduler_model_month;
1834
static int ett_btmesh_scheduler_model_day_of_week;
1835
static int ett_btmesh_scheduler_schedules;
1836
static int ett_btmesh_user_property_ids;
1837
static int ett_btmesh_admin_property_ids;
1838
static int ett_btmesh_manufacturer_property_ids;
1839
static int ett_btmesh_generic_client_property_ids;
1840
static int ett_btmesh_sensor_setting_property_ids;
1841
1842
static expert_field ei_btmesh_not_decoded_yet;
1843
static expert_field ei_btmesh_unknown_payload;
1844
1845
static const value_string btmesh_ctl_vals[] = {
1846
    { 0, "Access Message" },
1847
    { 1, "Control Message" },
1848
    { 0, NULL }
1849
};
1850
1851
static const value_string btmesh_ctrl_seg_vals[] = {
1852
    { 0, "Unsegmented Control Message" },
1853
    { 1, "Segmented Control Message" },
1854
    { 0, NULL }
1855
};
1856
1857
static const value_string btmesh_acc_seg_vals[] = {
1858
    { 0, "Unsegmented Access Message" },
1859
    { 1, "Segmented Access Message" },
1860
    { 0, NULL }
1861
};
1862
1863
static const value_string btmesh_acc_akf_vals[] = {
1864
    { 0, "Device key" },
1865
    { 1, "Application key" },
1866
    { 0, NULL }
1867
};
1868
1869
static const value_string btmesh_ctrl_opcode_vals[] = {
1870
    { 0x0, "Segment Acknowledgment" }, /* Reserved for lower transport layer */
1871
    { 0x1, "Friend Poll" },
1872
    { 0x2, "Friend Update" },
1873
    { 0x3, "Friend Request" },
1874
    { 0x4, "Friend Offer" },
1875
    { 0x5, "Friend Clear" },
1876
    { 0x6, "Friend Clear Confirm" },
1877
    { 0x7, "Friend Subscription List Add" },
1878
    { 0x8, "Friend Subscription List Remove" },
1879
    { 0x9, "Friend Subscription List Confirm" },
1880
    { 0xa, "Heartbeat" },
1881
    { 0, NULL }
1882
};
1883
1884
static const value_string btmesh_cntr_key_refresh_flag_vals[] = {
1885
    { 0x0, "Not-In-Phase2" },
1886
    { 0x1, "In-Phase2" },
1887
    { 0, NULL }
1888
};
1889
1890
static const value_string btmesh_cntr_iv_update_flag_vals[] = {
1891
    { 0x0, "Normal operation" },
1892
    { 0x1, "IV Update active" },
1893
    { 0, NULL }
1894
};
1895
1896
static const value_string btmesh_cntr_md_vals[] = {
1897
    { 0x0, "Friend Queue is empty" },
1898
    { 0x1, "Friend Queue is not empty" },
1899
    { 0, NULL }
1900
};
1901
1902
static const true_false_string  btmesh_obo = {
1903
    "Friend node that is acknowledging this message on behalf of a Low Power node",
1904
    "Node that is directly addressed by the received message"
1905
};
1906
1907
static const value_string btmesh_criteria_rssifactor_vals[] = {
1908
    { 0x0, "1" },
1909
    { 0x1, "1.5" },
1910
    { 0x2, "2" },
1911
    { 0x3, "2.5" },
1912
    { 0, NULL }
1913
};
1914
1915
static const value_string btmesh_criteria_receivewindowfactor_vals[] = {
1916
    { 0x0, "1" },
1917
    { 0x1, "1.5" },
1918
    { 0x2, "2" },
1919
    { 0x3, "2.5" },
1920
    { 0, NULL }
1921
};
1922
1923
static const value_string btmesh_criteria_minqueuesizelog_vals[] = {
1924
    { 0x0, "Prohibited" },
1925
    { 0x1, "N = 2" },
1926
    { 0x2, "N = 4" },
1927
    { 0x3, "N = 8" },
1928
    { 0x4, "N = 16" },
1929
    { 0x5, "N = 32" },
1930
    { 0x6, "N = 64" },
1931
    { 0x7, "N = 128" },
1932
    { 0, NULL }
1933
};
1934
1935
static const value_string btmesh_szmic_vals[] = {
1936
    { 0x0, "32-bit" },
1937
    { 0x1, "64-bit" },
1938
    { 0, NULL }
1939
};
1940
1941
static const value_string btmesh_models_opcode_vals[] = {
1942
    /* Bluetooth Mesh Foundation messages */
1943
    { CONFIG_APPKEY_ADD                                   , "Config AppKey Add"                                  },
1944
    { CONFIG_APPKEY_UPDATE                                , "Config AppKey Update"                               },
1945
    { CONFIG_COMPOSITION_DATA_STATUS                      , "Config Composition Data Status"                     },
1946
    { CONFIG_MODEL_PUBLICATION_SET                        , "Config Model Publication Set"                       },
1947
    { HEALTH_CURRENT_STATUS                               , "Health Current Status"                              },
1948
    { HEALTH_FAULT_STATUS                                 , "Health Fault Status"                                },
1949
    { CONFIG_HEARTBEAT_PUBLICATION_STATUS                 , "Config Heartbeat Publication Status"                },
1950
    { CONFIG_APPKEY_DELETE                                , "Config AppKey Delete"                               },
1951
    { CONFIG_APPKEY_GET                                   , "Config AppKey Get"                                  },
1952
    { CONFIG_APPKEY_LIST                                  , "Config AppKey List"                                 },
1953
    { CONFIG_APPKEY_STATUS                                , "Config AppKey Status"                               },
1954
    { HEALTH_ATTENTION_GET                                , "Health Attention Get"                               },
1955
    { HEALTH_ATTENTION_SET                                , "Health Attention Set"                               },
1956
    { HEALTH_ATTENTION_SET_UNACKNOWLEDGED                 , "Health Attention Set Unacknowledged"                },
1957
    { HEALTH_ATTENTION_STATUS                             , "Health Attention Status"                            },
1958
    { CONFIG_COMPOSITION_DATA_GET                         , "Config Composition Data Get"                        },
1959
    { CONFIG_BEACON_GET                                   , "Config Beacon Get"                                  },
1960
    { CONFIG_BEACON_SET                                   , "Config Beacon Set"                                  },
1961
    { CONFIG_BEACON_STATUS                                , "Config Beacon Status"                               },
1962
    { CONFIG_DEFAULT_TTL_GET                              , "Config Default TTL Get"                             },
1963
    { CONFIG_DEFAULT_TTL_SET                              , "Config Default TTL Set"                             },
1964
    { CONFIG_DEFAULT_TTL_STATUS                           , "Config Default TTL Status"                          },
1965
    { CONFIG_FRIEND_GET                                   , "Config Friend Get"                                  },
1966
    { CONFIG_FRIEND_SET                                   , "Config Friend Set"                                  },
1967
    { CONFIG_FRIEND_STATUS                                , "Config Friend Status"                               },
1968
    { CONFIG_GATT_PROXY_GET                               , "Config GATT Proxy Get"                              },
1969
    { CONFIG_GATT_PROXY_SET                               , "Config GATT Proxy Set"                              },
1970
    { CONFIG_GATT_PROXY_STATUS                            , "Config GATT Proxy Status"                           },
1971
    { CONFIG_KEY_REFRESH_PHASE_GET                        , "Config Key Refresh Phase Get"                       },
1972
    { CONFIG_KEY_REFRESH_PHASE_SET                        , "Config Key Refresh Phase Set"                       },
1973
    { CONFIG_KEY_REFRESH_PHASE_STATUS                     , "Config Key Refresh Phase Status"                    },
1974
    { CONFIG_MODEL_PUBLICATION_GET                        , "Config Model Publication Get"                       },
1975
    { CONFIG_MODEL_PUBLICATION_STATUS                     , "Config Model Publication Status"                    },
1976
    { CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET        , "Config Model Publication Virtual Address Set"       },
1977
    { CONFIG_MODEL_SUBSCRIPTION_ADD                       , "Config Model Subscription Add"                      },
1978
    { CONFIG_MODEL_SUBSCRIPTION_DELETE                    , "Config Model Subscription Delete"                   },
1979
    { CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL                , "Config Model Subscription Delete All"               },
1980
    { CONFIG_MODEL_SUBSCRIPTION_OVERWRITE                 , "Config Model Subscription Overwrite"                },
1981
    { CONFIG_MODEL_SUBSCRIPTION_STATUS                    , "Config Model Subscription Status"                   },
1982
    { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD       , "Config Model Subscription Virtual Address Add"      },
1983
    { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE    , "Config Model Subscription Virtual Address Delete"   },
1984
    { CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE , "Config Model Subscription Virtual Address Overwrite"},
1985
    { CONFIG_NETWORK_TRANSMIT_GET                         , "Config Network Transmit Get"                        },
1986
    { CONFIG_NETWORK_TRANSMIT_SET                         , "Config Network Transmit Set"                        },
1987
    { CONFIG_NETWORK_TRANSMIT_STATUS                      , "Config Network Transmit Status"                     },
1988
    { CONFIG_RELAY_GET                                    , "Config Relay Get"                                   },
1989
    { CONFIG_RELAY_SET                                    , "Config Relay Set"                                   },
1990
    { CONFIG_RELAY_STATUS                                 , "Config Relay Status"                                },
1991
    { CONFIG_SIG_MODEL_SUBSCRIPTION_GET                   , "Config SIG Model Subscription Get"                  },
1992
    { CONFIG_SIG_MODEL_SUBSCRIPTION_LIST                  , "Config SIG Model Subscription List"                 },
1993
    { CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET                , "Config Vendor Model Subscription Get"               },
1994
    { CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST               , "Config Vendor Model Subscription List"              },
1995
    { CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET               , "Config Low Power Node PollTimeout Get"              },
1996
    { CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS            , "Config Low Power Node PollTimeout Status"           },
1997
    { HEALTH_FAULT_CLEAR                                  , "Health Fault Clear"                                 },
1998
    { HEALTH_FAULT_CLEAR_UNACKNOWLEDGED                   , "Health Fault Clear Unacknowledged"                  },
1999
    { HEALTH_FAULT_GET                                    , "Health Fault Get"                                   },
2000
    { HEALTH_FAULT_TEST                                   , "Health Fault Test"                                  },
2001
    { HEALTH_FAULT_TEST_UNACKNOWLEDGED                    , "Health Fault Test Unacknowledged"                   },
2002
    { HEALTH_PERIOD_GET                                   , "Health Period Get"                                  },
2003
    { HEALTH_PERIOD_SET                                   , "Health Period Set"                                  },
2004
    { HEALTH_PERIOD_SET_UNACKNOWLEDGED                    , "Health Period Set Unacknowledged"                   },
2005
    { HEALTH_PERIOD_STATUS                                , "Health Period Status"                               },
2006
    { CONFIG_HEARTBEAT_PUBLICATION_GET                    , "Config Heartbeat Publication Get"                   },
2007
    { CONFIG_HEARTBEAT_PUBLICATION_SET                    , "Config Heartbeat Publication Set"                   },
2008
    { CONFIG_HEARTBEAT_SUBSCRIPTION_GET                   , "Config Heartbeat Subscription Get"                  },
2009
    { CONFIG_HEARTBEAT_SUBSCRIPTION_SET                   , "Config Heartbeat Subscription Set"                  },
2010
    { CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS                , "Config Heartbeat Subscription Status"               },
2011
    { CONFIG_MODEL_APP_BIND                               , "Config Model App Bind"                              },
2012
    { CONFIG_MODEL_APP_STATUS                             , "Config Model App Status"                            },
2013
    { CONFIG_MODEL_APP_UNBIND                             , "Config Model App Unbind"                            },
2014
    { CONFIG_NETKEY_ADD                                   , "Config NetKey Add"                                  },
2015
    { CONFIG_NETKEY_DELETE                                , "Config NetKey Delete"                               },
2016
    { CONFIG_NETKEY_GET                                   , "Config NetKey Get"                                  },
2017
    { CONFIG_NETKEY_LIST                                  , "Config NetKey List"                                 },
2018
    { CONFIG_NETKEY_STATUS                                , "Config NetKey Status"                               },
2019
    { CONFIG_NETKEY_UPDATE                                , "Config NetKey Update"                               },
2020
    { CONFIG_NODE_IDENTITY_GET                            , "Config Node Identity Get"                           },
2021
    { CONFIG_NODE_IDENTITY_SET                            , "Config Node Identity Set"                           },
2022
    { CONFIG_NODE_IDENTITY_STATUS                         , "Config Node Identity Status"                        },
2023
    { CONFIG_NODE_RESET                                   , "Config Node Reset"                                  },
2024
    { CONFIG_NODE_RESET_STATUS                            , "Config Node Reset Status"                           },
2025
    { CONFIG_SIG_MODEL_APP_GET                            , "Config SIG Model App Get"                           },
2026
    { CONFIG_SIG_MODEL_APP_LIST                           , "Config SIG Model App List"                          },
2027
    { CONFIG_VENDOR_MODEL_APP_GET                         , "Config Vendor Model App Get"                        },
2028
    { CONFIG_VENDOR_MODEL_APP_LIST                        , "Config Vendor Model App List"                       },
2029
2030
      /* Bluetooth Mesh Model messages */
2031
    { GENERIC_ONOFF_GET                                   , "Generic OnOff Get"                                  },
2032
    { GENERIC_ONOFF_SET                                   , "Generic OnOff Set"                                  },
2033
    { GENERIC_ONOFF_SET_UNACKNOWLEDGED                    , "Generic OnOff Set Unacknowledged"                   },
2034
    { GENERIC_ONOFF_STATUS                                , "Generic OnOff Status"                               },
2035
    { GENERIC_LEVEL_GET                                   , "Generic Level Get"                                  },
2036
    { GENERIC_LEVEL_SET                                   , "Generic Level Set"                                  },
2037
    { GENERIC_LEVEL_SET_UNACKNOWLEDGED                    , "Generic Level Set Unacknowledged"                   },
2038
    { GENERIC_LEVEL_STATUS                                , "Generic Level Status"                               },
2039
    { GENERIC_DELTA_SET                                   , "Generic Delta Set"                                  },
2040
    { GENERIC_DELTA_SET_UNACKNOWLEDGED                    , "Generic Delta Set Unacknowledged"                   },
2041
    { GENERIC_MOVE_SET                                    , "Generic Move Set"                                   },
2042
    { GENERIC_MOVE_SET_UNACKNOWLEDGED                     , "Generic Move Set Unacknowledged"                    },
2043
    { GENERIC_DEFAULT_TRANSITION_TIME_GET                 , "Generic Default Transition Time Get"                },
2044
    { GENERIC_DEFAULT_TRANSITION_TIME_SET                 , "Generic Default Transition Time Set"                },
2045
    { GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED  , "Generic Default Transition Time Set Unacknowledged" },
2046
    { GENERIC_DEFAULT_TRANSITION_TIME_STATUS              , "Generic Default Transition Time Status"             },
2047
    { GENERIC_ONPOWERUP_GET                               , "Generic OnPowerUp Get"                              },
2048
    { GENERIC_ONPOWERUP_STATUS                            , "Generic OnPowerUp Status"                           },
2049
    { GENERIC_ONPOWERUP_SET                               , "Generic OnPowerUp Set"                              },
2050
    { GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED                , "Generic OnPowerUp Set Unacknowledged"               },
2051
    { GENERIC_POWER_LEVEL_GET                             , "Generic Power Level Get"                            },
2052
    { GENERIC_POWER_LEVEL_SET                             , "Generic Power Level Set"                            },
2053
    { GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED              , "Generic Power Level Set Unacknowledged"             },
2054
    { GENERIC_POWER_LEVEL_STATUS                          , "Generic Power Level Status"                         },
2055
    { GENERIC_POWER_LAST_GET                              , "Generic Power Last Get"                             },
2056
    { GENERIC_POWER_LAST_STATUS                           , "Generic Power Last Status"                          },
2057
    { GENERIC_POWER_DEFAULT_GET                           , "Generic Power Default Get"                          },
2058
    { GENERIC_POWER_DEFAULT_STATUS                        , "Generic Power Default Status"                       },
2059
    { GENERIC_POWER_RANGE_GET                             , "Generic Power Range Get"                            },
2060
    { GENERIC_POWER_RANGE_STATUS                          , "Generic Power Range Status"                         },
2061
    { GENERIC_POWER_DEFAULT_SET                           , "Generic Power Default Set"                          },
2062
    { GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED            , "Generic Power Default Set Unacknowledged"           },
2063
    { GENERIC_POWER_RANGE_SET                             , "Generic Power Range Set"                            },
2064
    { GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED              , "Generic Power Range Set Unacknowledged"             },
2065
    { GENERIC_BATTERY_GET                                 , "Generic Battery Get"                                },
2066
    { GENERIC_BATTERY_STATUS                              , "Generic Battery Status"                             },
2067
    { GENERIC_LOCATION_GLOBAL_GET                         , "Generic Location Global Get"                        },
2068
    { GENERIC_LOCATION_GLOBAL_STATUS                      , "Generic Location Global Status"                     },
2069
    { GENERIC_LOCATION_LOCAL_GET                          , "Generic Location Local Get"                         },
2070
    { GENERIC_LOCATION_LOCAL_STATUS                       , "Generic Location Local Status"                      },
2071
    { GENERIC_LOCATION_GLOBAL_SET                         , "Generic Location Global Set"                        },
2072
    { GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED          , "Generic Location Global Set Unacknowledged"         },
2073
    { GENERIC_LOCATION_LOCAL_SET                          , "Generic Location Local Set"                         },
2074
    { GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED           , "Generic Location Local Set Unacknowledged"          },
2075
    { GENERIC_MANUFACTURER_PROPERTIES_GET                 , "Generic Manufacturer Properties Get"                },
2076
    { GENERIC_MANUFACTURER_PROPERTIES_STATUS              , "Generic Manufacturer Properties Status"             },
2077
    { GENERIC_MANUFACTURER_PROPERTY_GET                   , "Generic Manufacturer Property Get"                  },
2078
    { GENERIC_MANUFACTURER_PROPERTY_SET                   , "Generic Manufacturer Property Set"                  },
2079
    { GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED    , "Generic Manufacturer Property Set Unacknowledged"   },
2080
    { GENERIC_MANUFACTURER_PROPERTY_STATUS                , "Generic Manufacturer Property Status"               },
2081
    { GENERIC_ADMIN_PROPERTIES_GET                        , "Generic Admin Properties Get"                       },
2082
    { GENERIC_ADMIN_PROPERTIES_STATUS                     , "Generic Admin Properties Status"                    },
2083
    { GENERIC_ADMIN_PROPERTY_GET                          , "Generic Admin Property Get"                         },
2084
    { GENERIC_ADMIN_PROPERTY_SET                          , "Generic Admin Property Set"                         },
2085
    { GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED           , "Generic Admin Property Set Unacknowledged"          },
2086
    { GENERIC_ADMIN_PROPERTY_STATUS                       , "Generic Admin Property Status"                      },
2087
    { GENERIC_USER_PROPERTIES_GET                         , "Generic User Properties Get"                        },
2088
    { GENERIC_USER_PROPERTIES_STATUS                      , "Generic User Properties Status"                     },
2089
    { GENERIC_USER_PROPERTY_GET                           , "Generic User Property Get"                          },
2090
    { GENERIC_USER_PROPERTY_SET                           , "Generic User Property Set"                          },
2091
    { GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED            , "Generic User Property Set Unacknowledged"           },
2092
    { GENERIC_USER_PROPERTY_STATUS                        , "Generic User Property Status"                       },
2093
    { GENERIC_CLIENT_PROPERTIES_GET                       , "Generic Client Properties Get"                      },
2094
    { GENERIC_CLIENT_PROPERTIES_STATUS                    , "Generic Client Properties Status"                   },
2095
    { SENSOR_DESCRIPTOR_GET                               , "Sensor Descriptor Get"                              },
2096
    { SENSOR_DESCRIPTOR_STATUS                            , "Sensor Descriptor Status"                           },
2097
    { SENSOR_GET                                          , "Sensor Get"                                         },
2098
    { SENSOR_STATUS                                       , "Sensor Status"                                      },
2099
    { SENSOR_COLUMN_GET                                   , "Sensor Column Get"                                  },
2100
    { SENSOR_COLUMN_STATUS                                , "Sensor Column Status"                               },
2101
    { SENSOR_SERIES_GET                                   , "Sensor Series Get"                                  },
2102
    { SENSOR_SERIES_STATUS                                , "Sensor Series Status"                               },
2103
    { SENSOR_CADENCE_GET                                  , "Sensor Cadence Get"                                 },
2104
    { SENSOR_CADENCE_SET                                  , "Sensor Cadence Set"                                 },
2105
    { SENSOR_CADENCE_SET_UNACKNOWLEDGED                   , "Sensor Cadence Set Unacknowledged"                  },
2106
    { SENSOR_CADENCE_STATUS                               , "Sensor Cadence Status"                              },
2107
    { SENSOR_SETTINGS_GET                                 , "Sensor Settings Get"                                },
2108
    { SENSOR_SETTINGS_STATUS                              , "Sensor Settings Status"                             },
2109
    { SENSOR_SETTING_GET                                  , "Sensor Setting Get"                                 },
2110
    { SENSOR_SETTING_SET                                  , "Sensor Setting Set"                                 },
2111
    { SENSOR_SETTING_SET_UNACKNOWLEDGED                   , "Sensor Setting Set Unacknowledged"                  },
2112
    { SENSOR_SETTING_STATUS                               , "Sensor Setting Status"                              },
2113
    { TIME_GET                                            , "Time Get"                                           },
2114
    { TIME_SET                                            , "Time Set"                                           },
2115
    { TIME_STATUS                                         , "Time Status"                                        },
2116
    { TIME_ROLE_GET                                       , "Time Role Get"                                      },
2117
    { TIME_ROLE_SET                                       , "Time Role Set"                                      },
2118
    { TIME_ROLE_STATUS                                    , "Time Role Status"                                   },
2119
    { TIME_ZONE_GET                                       , "Time Zone Get"                                      },
2120
    { TIME_ZONE_SET                                       , "Time Zone Set"                                      },
2121
    { TIME_ZONE_STATUS                                    , "Time Zone Status"                                   },
2122
    { TAI_UTC_DELTA_GET                                   , "TAI-UTC Delta Get"                                  },
2123
    { TAI_UTC_DELTA_SET                                   , "TAI-UTC Delta Set"                                  },
2124
    { TAI_UTC_DELTA_STATUS                                , "TAI-UTC Delta Status"                               },
2125
    { SCENE_GET                                           , "Scene Get"                                          },
2126
    { SCENE_RECALL                                        , "Scene Recall"                                       },
2127
    { SCENE_RECALL_UNACKNOWLEDGED                         , "Scene Recall Unacknowledged"                        },
2128
    { SCENE_STATUS                                        , "Scene Status"                                       },
2129
    { SCENE_REGISTER_GET                                  , "Scene Register Get"                                 },
2130
    { SCENE_REGISTER_STATUS                               , "Scene Register Status"                              },
2131
    { SCENE_STORE                                         , "Scene Store"                                        },
2132
    { SCENE_STORE_UNACKNOWLEDGED                          , "Scene Store Unacknowledged"                         },
2133
    { SCENE_DELETE                                        , "Scene Delete"                                       },
2134
    { SCENE_DELETE_UNACKNOWLEDGED                         , "Scene Delete Unacknowledged"                        },
2135
    { SCHEDULER_ACTION_GET                                , "Scheduler Action Get"                               },
2136
    { SCHEDULER_ACTION_STATUS                             , "Scheduler Action Status"                            },
2137
    { SCHEDULER_GET                                       , "Scheduler Get"                                      },
2138
    { SCHEDULER_STATUS                                    , "Scheduler Status"                                   },
2139
    { SCHEDULER_ACTION_SET                                , "Scheduler Action Set"                               },
2140
    { SCHEDULER_ACTION_SET_UNACKNOWLEDGED                 , "Scheduler Action Set Unacknowledged"                },
2141
    { LIGHT_LIGHTNESS_GET                                 , "Light Lightness Get"                                },
2142
    { LIGHT_LIGHTNESS_SET                                 , "Light Lightness Set"                                },
2143
    { LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED                  , "Light Lightness Set Unacknowledged"                 },
2144
    { LIGHT_LIGHTNESS_STATUS                              , "Light Lightness Status"                             },
2145
    { LIGHT_LIGHTNESS_LINEAR_GET                          , "Light Lightness Linear Get"                         },
2146
    { LIGHT_LIGHTNESS_LINEAR_SET                          , "Light Lightness Linear Set"                         },
2147
    { LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED           , "Light Lightness Linear Set Unacknowledged"          },
2148
    { LIGHT_LIGHTNESS_LINEAR_STATUS                       , "Light Lightness Linear Status"                      },
2149
    { LIGHT_LIGHTNESS_LAST_GET                            , "Light Lightness Last Get"                           },
2150
    { LIGHT_LIGHTNESS_LAST_STATUS                         , "Light Lightness Last Status"                        },
2151
    { LIGHT_LIGHTNESS_DEFAULT_GET                         , "Light Lightness Default Get"                        },
2152
    { LIGHT_LIGHTNESS_DEFAULT_STATUS                      , "Light Lightness Default Status"                     },
2153
    { LIGHT_LIGHTNESS_RANGE_GET                           , "Light Lightness Range Get"                          },
2154
    { LIGHT_LIGHTNESS_RANGE_STATUS                        , "Light Lightness Range Status"                       },
2155
    { LIGHT_LIGHTNESS_DEFAULT_SET                         , "Light Lightness Default Set"                        },
2156
    { LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED          , "Light Lightness Default Set Unacknowledged"         },
2157
    { LIGHT_LIGHTNESS_RANGE_SET                           , "Light Lightness Range Set"                          },
2158
    { LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED            , "Light Lightness Range Set Unacknowledged"           },
2159
    { LIGHT_CTL_GET                                       , "Light CTL Get"                                      },
2160
    { LIGHT_CTL_SET                                       , "Light CTL Set"                                      },
2161
    { LIGHT_CTL_SET_UNACKNOWLEDGED                        , "Light CTL Set Unacknowledged"                       },
2162
    { LIGHT_CTL_STATUS                                    , "Light CTL Status"                                   },
2163
    { LIGHT_CTL_TEMPERATURE_GET                           , "Light CTL Temperature Get"                          },
2164
    { LIGHT_CTL_TEMPERATURE_RANGE_GET                     , "Light CTL Temperature Range Get"                    },
2165
    { LIGHT_CTL_TEMPERATURE_RANGE_STATUS                  , "Light CTL Temperature Range Status"                 },
2166
    { LIGHT_CTL_TEMPERATURE_SET                           , "Light CTL Temperature Set"                          },
2167
    { LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED            , "Light CTL Temperature Set Unacknowledged"           },
2168
    { LIGHT_CTL_TEMPERATURE_STATUS                        , "Light CTL Temperature Status"                       },
2169
    { LIGHT_CTL_DEFAULT_GET                               , "Light CTL Default Get"                              },
2170
    { LIGHT_CTL_DEFAULT_STATUS                            , "Light CTL Default Status"                           },
2171
    { LIGHT_CTL_DEFAULT_SET                               , "Light CTL Default Set"                              },
2172
    { LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED                , "Light CTL Default Set Unacknowledged"               },
2173
    { LIGHT_CTL_TEMPERATURE_RANGE_SET                     , "Light CTL Temperature Range Set"                    },
2174
    { LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED      , "Light CTL Temperature Range Set Unacknowledged"     },
2175
    { LIGHT_HSL_GET                                       , "Light HSL Get"                                      },
2176
    { LIGHT_HSL_HUE_GET                                   , "Light HSL Hue Get"                                  },
2177
    { LIGHT_HSL_HUE_SET                                   , "Light HSL Hue Set"                                  },
2178
    { LIGHT_HSL_HUE_SET_UNACKNOWLEDGED                    , "Light HSL Hue Set Unacknowledged"                   },
2179
    { LIGHT_HSL_HUE_STATUS                                , "Light HSL Hue Status"                               },
2180
    { LIGHT_HSL_SATURATION_GET                            , "Light HSL Saturation Get"                           },
2181
    { LIGHT_HSL_SATURATION_SET                            , "Light HSL Saturation Set"                           },
2182
    { LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED             , "Light HSL Saturation Set Unacknowledged"            },
2183
    { LIGHT_HSL_SATURATION_STATUS                         , "Light HSL Saturation Status"                        },
2184
    { LIGHT_HSL_SET                                       , "Light HSL Set"                                      },
2185
    { LIGHT_HSL_SET_UNACKNOWLEDGED                        , "Light HSL Set Unacknowledged"                       },
2186
    { LIGHT_HSL_STATUS                                    , "Light HSL Status"                                   },
2187
    { LIGHT_HSL_TARGET_GET                                , "Light HSL Target Get"                               },
2188
    { LIGHT_HSL_TARGET_STATUS                             , "Light HSL Target Status"                            },
2189
    { LIGHT_HSL_DEFAULT_GET                               , "Light HSL Default Get"                              },
2190
    { LIGHT_HSL_DEFAULT_STATUS                            , "Light HSL Default Status"                           },
2191
    { LIGHT_HSL_RANGE_GET                                 , "Light HSL Range Get"                                },
2192
    { LIGHT_HSL_RANGE_STATUS                              , "Light HSL Range Status"                             },
2193
    { LIGHT_HSL_DEFAULT_SET                               , "Light HSL Default Set"                              },
2194
    { LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED                , "Light HSL Default Set Unacknowledged"               },
2195
    { LIGHT_HSL_RANGE_SET                                 , "Light HSL Range Set"                                },
2196
    { LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED                  , "Light HSL Range Set Unacknowledged"                 },
2197
    { LIGHT_XYL_GET                                       , "Light xyL Get"                                      },
2198
    { LIGHT_XYL_SET                                       , "Light xyL Set"                                      },
2199
    { LIGHT_XYL_SET_UNACKNOWLEDGED                        , "Light xyL Set Unacknowledged"                       },
2200
    { LIGHT_XYL_STATUS                                    , "Light xyL Status"                                   },
2201
    { LIGHT_XYL_TARGET_GET                                , "Light xyL Target Get"                               },
2202
    { LIGHT_XYL_TARGET_STATUS                             , "Light xyL Target Status"                            },
2203
    { LIGHT_XYL_DEFAULT_GET                               , "Light xyL Default Get"                              },
2204
    { LIGHT_XYL_DEFAULT_STATUS                            , "Light xyL Default Status"                           },
2205
    { LIGHT_XYL_RANGE_GET                                 , "Light xyL Range Get"                                },
2206
    { LIGHT_XYL_RANGE_STATUS                              , "Light xyL Range Status"                             },
2207
    { LIGHT_XYL_DEFAULT_SET                               , "Light xyL Default Set"                              },
2208
    { LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED                , "Light xyL Default Set Unacknowledged"               },
2209
    { LIGHT_XYL_RANGE_SET                                 , "Light xyL Range Set"                                },
2210
    { LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED                  , "Light xyL Range Set Unacknowledged"                 },
2211
    { LIGHT_LC_MODE_GET                                   , "Light LC Mode Get"                                  },
2212
    { LIGHT_LC_MODE_SET                                   , "Light LC Mode Set"                                  },
2213
    { LIGHT_LC_MODE_SET_UNACKNOWLEDGED                    , "Light LC Mode Set Unacknowledged"                   },
2214
    { LIGHT_LC_MODE_STATUS                                , "Light LC Mode Status"                               },
2215
    { LIGHT_LC_OM_GET                                     , "Light LC OM Get"                                    },
2216
    { LIGHT_LC_OM_SET                                     , "Light LC OM Set"                                    },
2217
    { LIGHT_LC_OM_SET_UNACKNOWLEDGED                      , "Light LC OM Set Unacknowledged"                     },
2218
    { LIGHT_LC_OM_STATUS                                  , "Light LC OM Status"                                 },
2219
    { LIGHT_LC_LIGHT_ONOFF_GET                            , "Light LC Light OnOff Get"                           },
2220
    { LIGHT_LC_LIGHT_ONOFF_SET                            , "Light LC Light OnOff Set"                           },
2221
    { LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED             , "Light LC Light OnOff Set Unacknowledged"            },
2222
    { LIGHT_LC_LIGHT_ONOFF_STATUS                         , "Light LC Light OnOff Status"                        },
2223
    { LIGHT_LC_PROPERTY_GET                               , "Light LC Property Get"                              },
2224
    { LIGHT_LC_PROPERTY_SET                               , "Light LC Property Set"                              },
2225
    { LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED                , "Light LC Property Set Unacknowledged"               },
2226
    { LIGHT_LC_PROPERTY_STATUS                            , "Light LC Property Status"                           },
2227
    { 0, NULL }
2228
};
2229
2230
static const value_string btmesh_beacon_broadcast_vals[] = {
2231
    { 0x00, "Not broadcasting a Secure Network beacon" },
2232
    { 0x01, "Broadcasting a Secure Network beacon" },
2233
    { 0, NULL }
2234
};
2235
2236
static const value_string btmesh_gatt_proxy_vals[] = {
2237
    { 0x00, "Proxy feature is supported and disabled" },
2238
    { 0x01, "Proxy feature is supported and enabled" },
2239
    { 0x02, "Proxy feature is not supported" },
2240
    { 0, NULL }
2241
};
2242
2243
static const value_string btmesh_relay_vals[] = {
2244
    { 0x00, "Relay feature is supported and disabled" },
2245
    { 0x01, "Relay feature is supported and enabled" },
2246
    { 0x02, "Relay feature is not supported" },
2247
    { 0, NULL }
2248
};
2249
2250
static const value_string btmesh_friend_vals[] = {
2251
    { 0x00, "Friend feature is supported and disabled" },
2252
    { 0x01, "Friend feature is supported and enabled" },
2253
    { 0x02, "Friend feature is not supported" },
2254
    { 0, NULL }
2255
};
2256
2257
static const value_string btmesh_publishperiod_resolution_vals[] = {
2258
    { 0x00, "100 milliseconds" },
2259
    { 0x01, "1 second" },
2260
    { 0x02, "10 seconds" },
2261
    { 0x03, "10 minutes" },
2262
    { 0, NULL }
2263
};
2264
2265
static const value_string btmesh_friendship_credentials_flag_vals[] = {
2266
    { 0x00, "Central security material is used" },
2267
    { 0x01, "Friendship security material is used" },
2268
    { 0, NULL }
2269
};
2270
2271
static const value_string btmesh_phase_vals[] = {
2272
    { 0x00, "Normal operation" },
2273
    { 0x01, "First phase of Key Refresh procedure" },
2274
    { 0x02, "Second phase of Key Refresh procedure" },
2275
    { 0, NULL }
2276
};
2277
2278
static const range_string btmesh_transition_vals[] = {
2279
    { 0x00, 0x01, "Prohibited" },
2280
    { 0x02, 0x02, "Transition 2" },
2281
    { 0x03, 0x03, "Transition 3" },
2282
    { 0x04, 0xFF, "Prohibited" },
2283
    { 0, 0, NULL }
2284
};
2285
2286
static const value_string btmesh_fault_array_vals[] = {
2287
    { 0x00, "No Fault" },
2288
    { 0x01, "Battery Low Warning" },
2289
    { 0x02, "Battery Low Error" },
2290
    { 0x03, "Supply Voltage Too Low Warning" },
2291
    { 0x04, "Supply Voltage Too Low Error" },
2292
    { 0x05, "Supply Voltage Too High Warning" },
2293
    { 0x06, "Supply Voltage Too High Error" },
2294
    { 0x07, "Power Supply Interrupted Warning" },
2295
    { 0x08, "Power Supply Interrupted Error" },
2296
    { 0x09, "No Load Warning" },
2297
    { 0x0A, "No Load Error" },
2298
    { 0x0B, "Overload Warning" },
2299
    { 0x0C, "Overload Error" },
2300
    { 0x0D, "Overheat Warning" },
2301
    { 0x0E, "Overheat Error" },
2302
    { 0x0F, "Condensation Warning" },
2303
    { 0x10, "Condensation Error" },
2304
    { 0x11, "Vibration Warning" },
2305
    { 0x12, "Vibration Error" },
2306
    { 0x13, "Configuration Warning" },
2307
    { 0x14, "Configuration Error" },
2308
    { 0x15, "Element Not Calibrated Warning" },
2309
    { 0x16, "Element Not Calibrated Error" },
2310
    { 0x17, "Memory Warning" },
2311
    { 0x18, "Memory Error" },
2312
    { 0x19, "Self-Test Warning" },
2313
    { 0x1A, "Self-Test Error" },
2314
    { 0x1B, "Input Too Low Warning" },
2315
    { 0x1C, "Input Too Low Error" },
2316
    { 0x1D, "Input Too High Warning" },
2317
    { 0x1E, "Input Too High Error" },
2318
    { 0x1F, "Input No Change Warning" },
2319
    { 0x20, "Input No Change Error" },
2320
    { 0x21, "Actuator Blocked Warning" },
2321
    { 0x22, "Actuator Blocked Error" },
2322
    { 0x23, "Housing Opened Warning" },
2323
    { 0x24, "Housing Opened Error" },
2324
    { 0x25, "Tamper Warning" },
2325
    { 0x26, "Tamper Error" },
2326
    { 0x27, "Device Moved Warning" },
2327
    { 0x28, "Device Moved Error" },
2328
    { 0x29, "Device Dropped Warning" },
2329
    { 0x2A, "Device Dropped Error" },
2330
    { 0x2B, "Overflow Warning" },
2331
    { 0x2C, "Overflow Error" },
2332
    { 0x2D, "Empty Warning" },
2333
    { 0x2E, "Empty Error" },
2334
    { 0x2F, "Internal Bus Warning" },
2335
    { 0x30, "Internal Bus Error" },
2336
    { 0x31, "Mechanism Jammed Warning" },
2337
    { 0x32, "Mechanism Jammed Error" },
2338
    { 0, NULL }
2339
};
2340
2341
static const value_string btmesh_generic_onpowerup_vals[] = {
2342
    { 0x00, "Off" },
2343
    { 0x01, "Default" },
2344
    { 0x02, "Restore" },
2345
    { 0, NULL }
2346
};
2347
2348
static const value_string btmesh_on_off_vals[] = {
2349
    { 0x0, "Off" },
2350
    { 0x1, "On" },
2351
    { 0, NULL }
2352
};
2353
2354
static const value_string btmesh_generic_battery_flags_presence_vals[] = {
2355
    { 0x0, "The battery is not present." },
2356
    { 0x1, "The battery is present and is removable." },
2357
    { 0x2, "The battery is present and is non-removable." },
2358
    { 0x3, "The battery presence is unknown." },
2359
    { 0, NULL }
2360
};
2361
2362
static const value_string btmesh_generic_battery_flags_indicator_vals[] = {
2363
    { 0x0, "The battery charge is Critically Low Level." },
2364
    { 0x1, "The battery charge is Low Level." },
2365
    { 0x2, "The battery charge is Good Level." },
2366
    { 0x3, "The battery charge is unknown." },
2367
    { 0, NULL }
2368
};
2369
2370
static const value_string btmesh_generic_battery_flags_charging_vals[] = {
2371
    { 0x0, "The battery is not chargeable." },
2372
    { 0x1, "The battery is chargeable and is not charging." },
2373
    { 0x2, "The battery is chargeable and is charging." },
2374
    { 0x3, "The battery charging state is unknown." },
2375
    { 0, NULL }
2376
};
2377
2378
static const value_string btmesh_generic_battery_flags_serviceability_vals[] = {
2379
    { 0x0, "Reserved for Future Use" },
2380
    { 0x1, "The battery does not require service." },
2381
    { 0x2, "The battery requires service." },
2382
    { 0x3, "The battery serviceability is unknown." },
2383
    { 0, NULL }
2384
};
2385
2386
static const value_string btmesh_generic_location_local_stationary_vals[] = {
2387
    { 0x0, "Stationary" },
2388
    { 0x1, "Mobile" },
2389
    { 0, NULL }
2390
};
2391
2392
static const value_string btmesh_yes_or_dash_vals[] = {
2393
    { 0x0, "-" },
2394
    { 0x1, "Scheduled" },
2395
    { 0, NULL }
2396
};
2397
2398
static const value_string btmesh_time_authority_vals[] = {
2399
    { 0x0, "No Time Authority" },
2400
    { 0x1, "Time Authority" },
2401
    { 0, NULL }
2402
};
2403
2404
static const value_string btmesh_time_role_vals[] = {
2405
    { 0x0, "None" },
2406
    { 0x1, "Mesh Time Authority" },
2407
    { 0x2, "Mesh Time Relay" },
2408
    { 0x3, "Mesh Time Client" },
2409
    { 0, NULL }
2410
};
2411
2412
static const value_string btmesh_defined_or_dash_vals[] = {
2413
    { 0x0, "-" },
2414
    { 0x1, "Defined" },
2415
    { 0, NULL }
2416
};
2417
2418
static int * const config_composition_data_status_features_headers[] = {
2419
    &hf_btmesh_config_composition_data_status_features_relay,
2420
    &hf_btmesh_config_composition_data_status_features_proxy,
2421
    &hf_btmesh_config_composition_data_status_features_friend,
2422
    &hf_btmesh_config_composition_data_status_features_low_power,
2423
    &hf_btmesh_config_composition_data_status_features_rfu,
2424
    NULL
2425
};
2426
2427
static int * const config_heartbeat_publication_set_features_headers[] = {
2428
    &hf_btmesh_config_heartbeat_publication_set_features_relay,
2429
    &hf_btmesh_config_heartbeat_publication_set_features_proxy,
2430
    &hf_btmesh_config_heartbeat_publication_set_features_friend,
2431
    &hf_btmesh_config_heartbeat_publication_set_features_low_power,
2432
    &hf_btmesh_config_heartbeat_publication_set_features_rfu,
2433
    NULL
2434
};
2435
2436
static int * const config_heartbeat_publication_status_features_headers[] = {
2437
    &hf_btmesh_config_heartbeat_publication_status_features_relay,
2438
    &hf_btmesh_config_heartbeat_publication_status_features_proxy,
2439
    &hf_btmesh_config_heartbeat_publication_status_features_friend,
2440
    &hf_btmesh_config_heartbeat_publication_status_features_low_power,
2441
    &hf_btmesh_config_heartbeat_publication_status_features_rfu,
2442
    NULL
2443
};
2444
2445
static const fragment_items btmesh_segmented_access_frag_items = {
2446
    &ett_btmesh_segmented_access_fragments,
2447
    &ett_btmesh_segmented_access_fragment,
2448
2449
    &hf_btmesh_segmented_access_fragments,
2450
    &hf_btmesh_segmented_access_fragment,
2451
    &hf_btmesh_segmented_access_fragment_overlap,
2452
    &hf_btmesh_segmented_access_fragment_overlap_conflict,
2453
    &hf_btmesh_segmented_access_fragment_multiple_tails,
2454
    &hf_btmesh_segmented_access_fragment_too_long_fragment,
2455
    &hf_btmesh_segmented_access_fragment_error,
2456
    &hf_btmesh_segmented_access_fragment_count,
2457
    NULL,
2458
    &hf_btmesh_segmented_access_reassembled_length,
2459
    /* Reassembled data field */
2460
    NULL,
2461
    "fragments"
2462
};
2463
2464
static const fragment_items btmesh_segmented_control_frag_items = {
2465
    &ett_btmesh_segmented_control_fragments,
2466
    &ett_btmesh_segmented_control_fragment,
2467
2468
    &hf_btmesh_segmented_control_fragments,
2469
    &hf_btmesh_segmented_control_fragment,
2470
    &hf_btmesh_segmented_control_fragment_overlap,
2471
    &hf_btmesh_segmented_control_fragment_overlap_conflict,
2472
    &hf_btmesh_segmented_control_fragment_multiple_tails,
2473
    &hf_btmesh_segmented_control_fragment_too_long_fragment,
2474
    &hf_btmesh_segmented_control_fragment_error,
2475
    &hf_btmesh_segmented_control_fragment_count,
2476
    NULL,
2477
    &hf_btmesh_segmented_control_reassembled_length,
2478
    /* Reassembled data field */
2479
    NULL,
2480
    "fragments"
2481
};
2482
2483
static const value_string btmesh_status_code_vals[] = {
2484
    { 0x00, "Success" },
2485
    { 0x01, "Invalid Address" },
2486
    { 0x02, "Invalid Model" },
2487
    { 0x03, "Invalid AppKey Index" },
2488
    { 0x04, "Invalid NetKey Index" },
2489
    { 0x05, "Insufficient Resources" },
2490
    { 0x06, "Key Index Already Stored" },
2491
    { 0x07, "Invalid Publish Parameters" },
2492
    { 0x08, "Not a Subscribe Model" },
2493
    { 0x09, "Storage Failure" },
2494
    { 0x0A, "Feature Not Supported" },
2495
    { 0x0B, "Cannot Update" },
2496
    { 0x0C, "Cannot Remove" },
2497
    { 0x0D, "Cannot Bind" },
2498
    { 0x0E, "Temporarily Unable to Change State" },
2499
    { 0x0F, "Cannot Set" },
2500
    { 0x10, "Unspecified Error" },
2501
    { 0x11, "Invalid Binding" },
2502
    { 0, NULL }
2503
};
2504
2505
static const value_string btmesh_generic_status_code_vals[] = {
2506
    { 0x00, "Success" },
2507
    { 0x01, "Cannot Set Range Min" },
2508
    { 0x02, "Cannot Set Range Max" },
2509
    { 0, NULL }
2510
};
2511
2512
static const value_string btmesh_scene_status_code_vals[] = {
2513
    { 0x00, "Success" },
2514
    { 0x01, "Scene Register Full" },
2515
    { 0x02, "Scene Not Found" },
2516
    { 0, NULL }
2517
};
2518
2519
static const value_string btmesh_sensor_sampling_function_vals[] = {
2520
    { 0x00, "Unspecified" },
2521
    { 0x01, "Instantaneous" },
2522
    { 0x02, "Arithmetic Mean" },
2523
    { 0x03, "RMS" },
2524
    { 0x04, "Maximum" },
2525
    { 0x05, "Minimum" },
2526
    { 0x06, "Accumulated" },
2527
    { 0x07, "Count" },
2528
    { 0, NULL }
2529
};
2530
2531
static const value_string btmesh_status_trigger_type_vals[] = {
2532
    { 0x00, "same format as property" },
2533
    { 0x01, "unitless" },
2534
    { 0, NULL }
2535
};
2536
2537
static const value_string btmesh_mpid_format_vals[] = {
2538
    { 0x00, "Format A" },
2539
    { 0x01, "Format B" },
2540
    { 0, NULL }
2541
};
2542
2543
static const value_string btmesh_model_vals[] = {
2544
    { 0x0000, "Configuration Server" },
2545
    { 0x0001, "Configuration Client" },
2546
    { 0x0002, "Health Server" },
2547
    { 0x0003, "Health Client" },
2548
    { 0x1000, "Generic OnOff Server" },
2549
    { 0x1001, "Generic OnOff Client" },
2550
    { 0x1002, "Generic Level Server" },
2551
    { 0x1003, "Generic Level Client" },
2552
    { 0x1004, "Generic Default Transition Time Server" },
2553
    { 0x1005, "Generic Default Transition Time Client" },
2554
    { 0x1006, "Generic Power OnOff Server" },
2555
    { 0x1007, "Generic Power OnOff Setup Server" },
2556
    { 0x1008, "Generic Power OnOff Client" },
2557
    { 0x1009, "Generic Power Level Server" },
2558
    { 0x100A, "Generic Power Level Setup Server" },
2559
    { 0x100B, "Generic Power Level Client" },
2560
    { 0x100C, "Generic Battery Server" },
2561
    { 0x100D, "Generic Battery Client" },
2562
    { 0x100E, "Generic Location Server" },
2563
    { 0x100F, "Generic Location Setup Server" },
2564
    { 0x1010, "Generic Location Client" },
2565
    { 0x1011, "Generic Admin Property Server" },
2566
    { 0x1012, "Generic Manufacturer Property Server" },
2567
    { 0x1013, "Generic User Property Server" },
2568
    { 0x1014, "Generic Client Property Server" },
2569
    { 0x1015, "Generic Property Client" },
2570
    { 0x1100, "Sensors Sensor Server" },
2571
    { 0x1101, "Sensor Setup Server" },
2572
    { 0x1102, "Sensor Client" },
2573
    { 0x1200, "Time Server" },
2574
    { 0x1201, "Time Setup Server" },
2575
    { 0x1202, "Time Client" },
2576
    { 0x1203, "Scene Server" },
2577
    { 0x1204, "Scene Setup Server" },
2578
    { 0x1205, "Scene Client" },
2579
    { 0x1206, "Scheduler Server" },
2580
    { 0x1207, "Scheduler Setup Server" },
2581
    { 0x1208, "Scheduler Client" },
2582
    { 0x1300, "Light Lightness Server" },
2583
    { 0x1301, "Light Lightness Setup Server" },
2584
    { 0x1302, "Light Lightness Client" },
2585
    { 0x1303, "Light CTL Server" },
2586
    { 0x1304, "Light CTL Setup Server" },
2587
    { 0x1305, "Light CTL Client" },
2588
    { 0x1306, "Light CTL Temperature Server" },
2589
    { 0x1307, "Light HSL Server" },
2590
    { 0x1308, "Light HSL Setup Server" },
2591
    { 0x1309, "Light HSL Client" },
2592
    { 0x130A, "Light HSL Hue Server" },
2593
    { 0x130B, "Light HSL Saturation Server" },
2594
    { 0x130C, "Light xyL Server" },
2595
    { 0x130D, "Light xyL Setup Server" },
2596
    { 0x130E, "Light xyL Client" },
2597
    { 0x130F, "Light LC Server" },
2598
    { 0x1310, "Light LC Setup Server" },
2599
    { 0x1311, "Light LC Client" },
2600
    { 0, NULL }
2601
};
2602
2603
static const value_string btmesh_properties_vals[] = {
2604
    { PHONY_PROPERTY_PERCENTAGE_CHANGE_16                              , "Percentage Change"                                        },
2605
    { PHONY_PROPERTY_INDEX                                             , "Index"                                                    },
2606
    { PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY          , "Average Ambient Temperature In A Period Of Day"           },
2607
    { PROPERTY_AVERAGE_INPUT_CURRENT                                   , "Average Input Current"                                    },
2608
    { PROPERTY_AVERAGE_INPUT_VOLTAGE                                   , "Average Input Voltage"                                    },
2609
    { PROPERTY_AVERAGE_OUTPUT_CURRENT                                  , "Average Output Current"                                   },
2610
    { PROPERTY_AVERAGE_OUTPUT_VOLTAGE                                  , "Average Output Voltage"                                   },
2611
    { PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER                     , "Center Beam Intensity At Full Power"                      },
2612
    { PROPERTY_CHROMATICITY_TOLERANCE                                  , "Chromaticity Tolerance"                                   },
2613
    { PROPERTY_COLOR_RENDERING_INDEX_R9                                , "Color Rendering Index R9"                                 },
2614
    { PROPERTY_COLOR_RENDERING_INDEX_RA                                , "Color Rendering Index Ra"                                 },
2615
    { PROPERTY_DEVICE_APPEARANCE                                       , "Device Appearance"                                        },
2616
    { PROPERTY_DEVICE_COUNTRY_OF_ORIGIN                                , "Device Country Of Origin"                                 },
2617
    { PROPERTY_DEVICE_DATE_OF_MANUFACTURE                              , "Device Date Of Manufacture"                               },
2618
    { PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON                         , "Device Energy Use Since Turn On"                          },
2619
    { PROPERTY_DEVICE_FIRMWARE_REVISION                                , "Device Firmware Revision"                                 },
2620
    { PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER                         , "Device Global Trade Item Number"                          },
2621
    { PROPERTY_DEVICE_HARDWARE_REVISION                                , "Device Hardware Revision"                                 },
2622
    { PROPERTY_DEVICE_MANUFACTURER_NAME                                , "Device Manufacturer Name"                                 },
2623
    { PROPERTY_DEVICE_MODEL_NUMBER                                     , "Device Model Number"                                      },
2624
    { PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION        , "Device Operating Temperature Range Specification"         },
2625
    { PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES         , "Device Operating Temperature Statistical Values"          },
2626
    { PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS                , "Device Over Temperature Event Statistics"                 },
2627
    { PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION                        , "Device Power Range Specification"                         },
2628
    { PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON                            , "Device Runtime Since Turn On"                             },
2629
    { PROPERTY_DEVICE_RUNTIME_WARRANTY                                 , "Device Runtime Warranty"                                  },
2630
    { PROPERTY_DEVICE_SERIAL_NUMBER                                    , "Device Serial Number"                                     },
2631
    { PROPERTY_DEVICE_SOFTWARE_REVISION                                , "Device Software Revision"                                 },
2632
    { PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS               , "Device Under Temperature Event Statistics"                },
2633
    { PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES           , "Indoor Ambient Temperature Statistical Values"            },
2634
    { PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES               , "Initial CIE 1931 Chromaticity Coordinates"                },
2635
    { PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE                    , "Initial Correlated Color Temperature"                     },
2636
    { PROPERTY_INITIAL_LUMINOUS_FLUX                                   , "Initial Luminous Flux"                                    },
2637
    { PROPERTY_INITIAL_PLANCKIAN_DISTANCE                              , "Initial Planckian Distance"                               },
2638
    { PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION                       , "Input Current Range Specification"                        },
2639
    { PROPERTY_INPUT_CURRENT_STATISTICS                                , "Input Current Statistics"                                 },
2640
    { PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS                     , "Input Over Current Event Statistics"                      },
2641
    { PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS              , "Input Over Ripple Voltage Event Statistics"               },
2642
    { PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS                     , "Input Over Voltage Event Statistics"                      },
2643
    { PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS                    , "Input Under Current Event Statistics"                     },
2644
    { PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS                    , "Input Under Voltage Event Statistics"                     },
2645
    { PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION                       , "Input Voltage Range Specification"                        },
2646
    { PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION                      , "Input Voltage Ripple Specification"                       },
2647
    { PROPERTY_INPUT_VOLTAGE_STATISTICS                                , "Input Voltage Statistics"                                 },
2648
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON                      , "Light Control Ambient LuxLevel On"                        },
2649
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG                 , "Light Control Ambient LuxLevel Prolong"                   },
2650
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY                 , "Light Control Ambient LuxLevel Standby"                   },
2651
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON                              , "Light Control Lightness On"                               },
2652
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG                         , "Light Control Lightness Prolong"                          },
2653
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY                         , "Light Control Lightness Standby"                          },
2654
    { PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY                        , "Light Control Regulator Accuracy"                         },
2655
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KID                             , "Light Control Regulator Kid"                              },
2656
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KIU                             , "Light Control Regulator Kiu"                              },
2657
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KPD                             , "Light Control Regulator Kpd"                              },
2658
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KPU                             , "Light Control Regulator Kpu"                              },
2659
    { PROPERTY_LIGHT_CONTROL_TIME_FADE                                 , "Light Control Time Fade"                                  },
2660
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_ON                              , "Light Control Time Fade On"                               },
2661
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO                    , "Light Control Time Fade Standby Auto"                     },
2662
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL                  , "Light Control Time Fade Standby Manual"                   },
2663
    { PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY                      , "Light Control Time Occupancy Delay"                       },
2664
    { PROPERTY_LIGHT_CONTROL_TIME_PROLONG                              , "Light Control Time Prolong"                               },
2665
    { PROPERTY_LIGHT_CONTROL_TIME_RUN_ON                               , "Light Control Time Run On"                                },
2666
    { PROPERTY_LUMEN_MAINTENANCE_FACTOR                                , "Lumen Maintenance Factor"                                 },
2667
    { PROPERTY_LUMINOUS_EFFICACY                                       , "Luminous Efficacy"                                        },
2668
    { PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON                           , "Luminous Energy Since Turn On"                            },
2669
    { PROPERTY_LUMINOUS_EXPOSURE                                       , "Luminous Exposure"                                        },
2670
    { PROPERTY_LUMINOUS_FLUX_RANGE                                     , "Luminous Flux Range"                                      },
2671
    { PROPERTY_MOTION_SENSED                                           , "Motion Sensed"                                            },
2672
    { PROPERTY_MOTION_THRESHOLD                                        , "Motion Threshold"                                         },
2673
    { PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS                           , "Open Circuit Event Statistics"                            },
2674
    { PROPERTY_OUTDOOR_STATISTICAL_VALUES                              , "Outdoor Statistical Values"                               },
2675
    { PROPERTY_OUTPUT_CURRENT_RANGE                                    , "Output Current Range"                                     },
2676
    { PROPERTY_OUTPUT_CURRENT_STATISTICS                               , "Output Current Statistics"                                },
2677
    { PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION                     , "Output Ripple Voltage Specification"                      },
2678
    { PROPERTY_OUTPUT_VOLTAGE_RANGE                                    , "Output Voltage Range"                                     },
2679
    { PROPERTY_OUTPUT_VOLTAGE_STATISTICS                               , "Output Voltage Statistics"                                },
2680
    { PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS             , "Over Output Ripple Voltage Event Statistics"              },
2681
    { PROPERTY_PEOPLE_COUNT                                            , "People Count"                                             },
2682
    { PROPERTY_PRESENCE_DETECTED                                       , "Presence Detected"                                        },
2683
    { PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL                             , "Present Ambient Light Level"                              },
2684
    { PROPERTY_PRESENT_AMBIENT_TEMPERATURE                             , "Present Ambient Temperature"                              },
2685
    { PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES               , "Present CIE 1931 Chromaticity Coordinates"                },
2686
    { PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE                    , "Present Correlated Color Temperature"                     },
2687
    { PROPERTY_PRESENT_DEVICE_INPUT_POWER                              , "Present Device Input Power"                               },
2688
    { PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY                     , "Present Device Operating Efficiency"                      },
2689
    { PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE                    , "Present Device Operating Temperature"                     },
2690
    { PROPERTY_PRESENT_ILLUMINANCE                                     , "Present Illuminance"                                      },
2691
    { PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE                      , "Present Indoor Ambient Temperature"                       },
2692
    { PROPERTY_PRESENT_INPUT_CURRENT                                   , "Present Input Current"                                    },
2693
    { PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE                            , "Present Input Ripple Voltage"                             },
2694
    { PROPERTY_PRESENT_INPUT_VOLTAGE                                   , "Present Input Voltage"                                    },
2695
    { PROPERTY_PRESENT_LUMINOUS_FLUX                                   , "Present Luminous Flux"                                    },
2696
    { PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE                     , "Present Outdoor Ambient Temperature"                      },
2697
    { PROPERTY_PRESENT_OUTPUT_CURRENT                                  , "Present Output Current"                                   },
2698
    { PROPERTY_PRESENT_OUTPUT_VOLTAGE                                  , "Present Output Voltage"                                   },
2699
    { PROPERTY_PRESENT_PLANCKIAN_DISTANCE                              , "Present Planckian Distance"                               },
2700
    { PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE                  , "Present Relative Output Ripple Voltage"                   },
2701
    { PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY           , "Relative Device Energy Use In A Period Of Day"            },
2702
    { PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE        , "Relative Device Runtime In A Generic Level Range"         },
2703
    { PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE          , "Relative Exposure Time In An Illuminance Range"           },
2704
    { PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE, "Relative Runtime In A Correlated Color Temperature Range" },
2705
    { PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE, "Relative Runtime In A Device Operating Temperature Range" },
2706
    { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE              , "Relative Runtime In An Input Current Range"               },
2707
    { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE              , "Relative Runtime In An Input Voltage Range"               },
2708
    { PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS                          , "Short Circuit Event Statistics"                           },
2709
    { PROPERTY_TIME_SINCE_MOTION_SENSED                                , "Time Since Motion Sensed"                                 },
2710
    { PROPERTY_TIME_SINCE_PRESENCE_DETECTED                            , "Time Since Presence Detected"                             },
2711
    { PROPERTY_TOTAL_DEVICE_ENERGY_USE                                 , "Total Device Energy Use"                                  },
2712
    { PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES                              , "Total Device Off On Cycles"                               },
2713
    { PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES                            , "Total Device Power On Cycles"                             },
2714
    { PROPERTY_TOTAL_DEVICE_POWER_ON_TIME                              , "Total Device Power On Time"                               },
2715
    { PROPERTY_TOTAL_DEVICE_RUNTIME                                    , "Total Device Runtime"                                     },
2716
    { PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME                               , "Total Light Exposure Time"                                },
2717
    { PROPERTY_TOTAL_LUMINOUS_ENERGY                                   , "Total Luminous Energy"                                    },
2718
    { PROPERTY_DESIRED_AMBIENT_TEMPERATURE                             , "Desired Ambient Temperature"                              },
2719
    { PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE                         , "Precise Total Device Energy Use"                          },
2720
    { PROPERTY_POWER_FACTOR                                            , "Power Factor"                                             },
2721
    { PROPERTY_SENSOR_GAIN                                             , "Sensor Gain"                                              },
2722
    { PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE                     , "Precise Present Ambient Temperature"                      },
2723
    { PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY                       , "Present Ambient Relative Humidity"                        },
2724
    { PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION            , "Present Ambient Carbon Dioxide Concentration"             },
2725
    { PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION, "Present Ambient Volatile Organic Compounds Concentration" },
2726
    { PROPERTY_PRESENT_AMBIENT_NOISE                                   , "Present Ambient Noise"                                    },
2727
    { PROPERTY_ACTIVE_ENERGY_LOADSIDE                                  , "Active Energy Loadside"                                   },
2728
    { PROPERTY_ACTIVE_POWER_LOADSIDE                                   , "Active Power Loadside"                                    },
2729
    { PROPERTY_AIR_PRESSURE                                            , "Air Pressure"                                             },
2730
    { PROPERTY_APPARENT_ENERGY                                         , "Apparent Energy"                                          },
2731
    { PROPERTY_APPARENT_POWER                                          , "Apparent Power"                                           },
2732
    { PROPERTY_APPARENT_WIND_DIRECTION                                 , "Apparent Wind Direction"                                  },
2733
    { PROPERTY_APPARENT_WIND_SPEED                                     , "Apparent Wind Speed"                                      },
2734
    { PROPERTY_DEW_POINT                                               , "Dew Point"                                                },
2735
    { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE                                 , "External Supply Voltage"                                  },
2736
    { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY                       , "External Supply Voltage Frequency"                        },
2737
    { PROPERTY_GUST_FACTOR                                             , "Gust Factor"                                              },
2738
    { PROPERTY_HEAT_INDEX                                              , "Heat Index"                                               },
2739
    { PROPERTY_LIGHT_DISTRIBUTION                                      , "Light Distribution"                                       },
2740
    { PROPERTY_LIGHT_SOURCE_CURRENT                                    , "Light Source Current"                                     },
2741
    { PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE                     , "Light Source On Time Not Resettable"                      },
2742
    { PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE                         , "Light Source On Time Resettable"                          },
2743
    { PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS                    , "Light Source Open Circuit Statistics"                     },
2744
    { PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS                , "Light Source Overall Failures Statistics"                 },
2745
    { PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS                   , "Light Source Short Circuit Statistics"                    },
2746
    { PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE                   , "Light Source Start Counter Resettable"                    },
2747
    { PROPERTY_LIGHT_SOURCE_TEMPERATURE                                , "Light Source Temperature"                                 },
2748
    { PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS                , "Light Source Thermal Derating Statistics"                 },
2749
    { PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS                , "Light Source Thermal Shutdown Statistics"                 },
2750
    { PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES                      , "Light Source Total Power On Cycles"                       },
2751
    { PROPERTY_LIGHT_SOURCE_VOLTAGE                                    , "Light Source Voltage"                                     },
2752
    { PROPERTY_LUMINAIRE_COLOR                                         , "Luminaire Color"                                          },
2753
    { PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER                         , "Luminaire Identification Number"                          },
2754
    { PROPERTY_LUMINAIRE_MANUFACTURER_GTIN                             , "Luminaire Manufacturer GTIN"                              },
2755
    { PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER                           , "Luminaire Nominal Input Power"                            },
2756
    { PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE              , "Luminaire Nominal Maximum AC Mains Voltage"               },
2757
    { PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE              , "Luminaire Nominal Minimum AC Mains Voltage"               },
2758
    { PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL                    , "Luminaire Power At Minimum Dim Level"                     },
2759
    { PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE                           , "Luminaire Time Of Manufacture"                            },
2760
    { PROPERTY_MAGNETIC_DECLINATION                                    , "Magnetic Declination"                                     },
2761
    { PROPERTY_MAGNETIC_FLUX_DENSITY_2_D                               , "Magnetic Flux Density - 2D"                               },
2762
    { PROPERTY_MAGNETIC_FLUX_DENSITY_3_D                               , "Magnetic Flux Density - 3D"                               },
2763
    { PROPERTY_NOMINAL_LIGHT_OUTPUT                                    , "Nominal Light Output"                                     },
2764
    { PROPERTY_OVERALL_FAILURE_CONDITION                               , "Overall Failure Condition"                                },
2765
    { PROPERTY_POLLEN_CONCENTRATION                                    , "Pollen Concentration"                                     },
2766
    { PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY                        , "Present Indoor Relative Humidity"                         },
2767
    { PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY                       , "Present Outdoor Relative Humidity"                        },
2768
    { PROPERTY_PRESSURE                                                , "Pressure"                                                 },
2769
    { PROPERTY_RAINFALL                                                , "Rainfall"                                                 },
2770
    { PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE                   , "Rated Median Useful Life Of Luminaire"                    },
2771
    { PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS                 , "Rated Median Useful Light Source Starts"                  },
2772
    { PROPERTY_REFERENCE_TEMPERATURE                                   , "Reference Temperature"                                    },
2773
    { PROPERTY_TOTAL_DEVICE_STARTS                                     , "Total Device Starts"                                      },
2774
    { PROPERTY_TRUE_WIND_DIRECTION                                     , "True Wind Direction"                                      },
2775
    { PROPERTY_TRUE_WIND_SPEED                                         , "True Wind Speed"                                          },
2776
    { PROPERTY_UV_INDEX                                                , "UV Index"                                                 },
2777
    { PROPERTY_WIND_CHILL                                              , "Wind Chill"                                               },
2778
    { PROPERTY_LIGHT_SOURCE_TYPE                                       , "Light Source Type"                                        },
2779
    { PROPERTY_LUMINAIRE_IDENTIFICATION_STRING                         , "Luminaire Identification String"                          },
2780
    { PROPERTY_OUTPUT_POWER_LIMITATION                                 , "Output Power Limitation"                                  },
2781
    { PROPERTY_THERMAL_DERATING                                        , "Thermal Derating"                                         },
2782
    { PROPERTY_OUTPUT_CURRENT_PERCENT                                  , "Output Current Percent"                                   },
2783
    { 0, NULL }
2784
};
2785
2786
static const btmesh_property_t btmesh_properties[] = {
2787
    { PHONY_PROPERTY_PERCENTAGE_CHANGE_16                              , PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16                },
2788
    { PHONY_PROPERTY_INDEX                                             , PHONY_CHARACTERISTIC_INDEX                               },
2789
    { PROPERTY_ACTIVE_ENERGY_LOADSIDE                                  , CHARACTERISTIC_ENERGY32                                  },
2790
    { PROPERTY_ACTIVE_POWER_LOADSIDE                                   , CHARACTERISTIC_POWER                                     },
2791
    { PROPERTY_AIR_PRESSURE                                            , CHARACTERISTIC_PRESSURE                                  },
2792
    { PROPERTY_APPARENT_ENERGY                                         , CHARACTERISTIC_APPARENT_ENERGY32                         },
2793
    { PROPERTY_APPARENT_POWER                                          , CHARACTERISTIC_APPARENT_POWER                            },
2794
    { PROPERTY_APPARENT_WIND_DIRECTION                                 , CHARACTERISTIC_APPARENT_WIND_DIRECTION                   },
2795
    { PROPERTY_APPARENT_WIND_SPEED                                     , CHARACTERISTIC_APPARENT_WIND_SPEED                       },
2796
    { PROPERTY_AVERAGE_AMBIENT_TEMPERATURE_IN_A_PERIOD_OF_DAY          , CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY          },
2797
    { PROPERTY_AVERAGE_INPUT_CURRENT                                   , CHARACTERISTIC_AVERAGE_CURRENT                           },
2798
    { PROPERTY_AVERAGE_INPUT_VOLTAGE                                   , CHARACTERISTIC_AVERAGE_VOLTAGE                           },
2799
    { PROPERTY_AVERAGE_OUTPUT_CURRENT                                  , CHARACTERISTIC_AVERAGE_CURRENT                           },
2800
    { PROPERTY_AVERAGE_OUTPUT_VOLTAGE                                  , CHARACTERISTIC_AVERAGE_VOLTAGE                           },
2801
    { PROPERTY_CENTER_BEAM_INTENSITY_AT_FULL_POWER                     , CHARACTERISTIC_LUMINOUS_INTENSITY                        },
2802
    { PROPERTY_CHROMATICITY_TOLERANCE                                  , CHARACTERISTIC_CHROMATICITY_TOLERANCE                    },
2803
    { PROPERTY_COLOR_RENDERING_INDEX_R9                                , CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX       },
2804
    { PROPERTY_COLOR_RENDERING_INDEX_RA                                , CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX       },
2805
    { PROPERTY_DESIRED_AMBIENT_TEMPERATURE                             , CHARACTERISTIC_TEMPERATURE_8                             },
2806
    { PROPERTY_DEVICE_APPEARANCE                                       , CHARACTERISTIC_APPEARANCE                                },
2807
    { PROPERTY_DEVICE_COUNTRY_OF_ORIGIN                                , CHARACTERISTIC_COUNTRY_CODE                              },
2808
    { PROPERTY_DEVICE_DATE_OF_MANUFACTURE                              , CHARACTERISTIC_DATE_UTC                                  },
2809
    { PROPERTY_DEVICE_ENERGY_USE_SINCE_TURN_ON                         , CHARACTERISTIC_ENERGY                                    },
2810
    { PROPERTY_DEVICE_FIRMWARE_REVISION                                , CHARACTERISTIC_FIXED_STRING_8                            },
2811
    { PROPERTY_DEVICE_GLOBAL_TRADE_ITEM_NUMBER                         , CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER                  },
2812
    { PROPERTY_DEVICE_HARDWARE_REVISION                                , CHARACTERISTIC_FIXED_STRING_16                           },
2813
    { PROPERTY_DEVICE_MANUFACTURER_NAME                                , CHARACTERISTIC_FIXED_STRING_36                           },
2814
    { PROPERTY_DEVICE_MODEL_NUMBER                                     , CHARACTERISTIC_FIXED_STRING_24                           },
2815
    { PROPERTY_DEVICE_OPERATING_TEMPERATURE_RANGE_SPECIFICATION        , CHARACTERISTIC_TEMPERATURE_RANGE                         },
2816
    { PROPERTY_DEVICE_OPERATING_TEMPERATURE_STATISTICAL_VALUES         , CHARACTERISTIC_TEMPERATURE_STATISTICS                    },
2817
    { PROPERTY_DEVICE_OVER_TEMPERATURE_EVENT_STATISTICS                , CHARACTERISTIC_EVENT_STATISTICS                          },
2818
    { PROPERTY_DEVICE_POWER_RANGE_SPECIFICATION                        , CHARACTERISTIC_POWER_SPECIFICATION                       },
2819
    { PROPERTY_DEVICE_RUNTIME_SINCE_TURN_ON                            , CHARACTERISTIC_TIME_HOUR_24                              },
2820
    { PROPERTY_DEVICE_RUNTIME_WARRANTY                                 , CHARACTERISTIC_TIME_HOUR_24                              },
2821
    { PROPERTY_DEVICE_SERIAL_NUMBER                                    , CHARACTERISTIC_FIXED_STRING_16                           },
2822
    { PROPERTY_DEVICE_SOFTWARE_REVISION                                , CHARACTERISTIC_FIXED_STRING_8                            },
2823
    { PROPERTY_DEVICE_UNDER_TEMPERATURE_EVENT_STATISTICS               , CHARACTERISTIC_EVENT_STATISTICS                          },
2824
    { PROPERTY_DEW_POINT                                               , CHARACTERISTIC_DEW_POINT                                 },
2825
    { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE                                 , CHARACTERISTIC_HIGH_VOLTAGE                              },
2826
    { PROPERTY_EXTERNAL_SUPPLY_VOLTAGE_FREQUENCY                       , CHARACTERISTIC_VOLTAGE_FREQUENCY                         },
2827
    { PROPERTY_GUST_FACTOR                                             , CHARACTERISTIC_GUST_FACTOR                               },
2828
    { PROPERTY_HEAT_INDEX                                              , CHARACTERISTIC_HEAT_INDEX                                },
2829
    { PROPERTY_INDOOR_AMBIENT_TEMPERATURE_STATISTICAL_VALUES           , CHARACTERISTIC_TEMPERATURE_8_STATISTICS                  },
2830
    { PROPERTY_INITIAL_CIE_1931_CHROMATICITY_COORDINATES               , CHARACTERISTIC_CHROMATICITY_COORDINATES                  },
2831
    { PROPERTY_INITIAL_CORRELATED_COLOR_TEMPERATURE                    , CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE              },
2832
    { PROPERTY_INITIAL_LUMINOUS_FLUX                                   , CHARACTERISTIC_LUMINOUS_FLUX                             },
2833
    { PROPERTY_INITIAL_PLANCKIAN_DISTANCE                              , CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN         },
2834
    { PROPERTY_INPUT_CURRENT_RANGE_SPECIFICATION                       , CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION            },
2835
    { PROPERTY_INPUT_CURRENT_STATISTICS                                , CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS               },
2836
    { PROPERTY_INPUT_OVER_CURRENT_EVENT_STATISTICS                     , CHARACTERISTIC_EVENT_STATISTICS                          },
2837
    { PROPERTY_INPUT_OVER_RIPPLE_VOLTAGE_EVENT_STATISTICS              , CHARACTERISTIC_EVENT_STATISTICS                          },
2838
    { PROPERTY_INPUT_OVER_VOLTAGE_EVENT_STATISTICS                     , CHARACTERISTIC_EVENT_STATISTICS                          },
2839
    { PROPERTY_INPUT_UNDER_CURRENT_EVENT_STATISTICS                    , CHARACTERISTIC_EVENT_STATISTICS                          },
2840
    { PROPERTY_INPUT_UNDER_VOLTAGE_EVENT_STATISTICS                    , CHARACTERISTIC_EVENT_STATISTICS                          },
2841
    { PROPERTY_INPUT_VOLTAGE_RANGE_SPECIFICATION                       , CHARACTERISTIC_VOLTAGE_SPECIFICATION                     },
2842
    { PROPERTY_INPUT_VOLTAGE_RIPPLE_SPECIFICATION                      , CHARACTERISTIC_PERCENTAGE_8                              },
2843
    { PROPERTY_INPUT_VOLTAGE_STATISTICS                                , CHARACTERISTIC_VOLTAGE_STATISTICS                        },
2844
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_ON                      , CHARACTERISTIC_ILLUMINANCE                               },
2845
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_PROLONG                 , CHARACTERISTIC_ILLUMINANCE                               },
2846
    { PROPERTY_LIGHT_CONTROL_AMBIENT_LUX_LEVEL_STANDBY                 , CHARACTERISTIC_ILLUMINANCE                               },
2847
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_ON                              , CHARACTERISTIC_PERCEIVED_LIGHTNESS                       },
2848
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_PROLONG                         , CHARACTERISTIC_PERCEIVED_LIGHTNESS                       },
2849
    { PROPERTY_LIGHT_CONTROL_LIGHTNESS_STANDBY                         , CHARACTERISTIC_PERCEIVED_LIGHTNESS                       },
2850
    { PROPERTY_LIGHT_CONTROL_REGULATOR_ACCURACY                        , CHARACTERISTIC_PERCENTAGE_8                              },
2851
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KID                             , CHARACTERISTIC_COEFFICIENT                               },
2852
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KIU                             , CHARACTERISTIC_COEFFICIENT                               },
2853
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KPD                             , CHARACTERISTIC_COEFFICIENT                               },
2854
    { PROPERTY_LIGHT_CONTROL_REGULATOR_KPU                             , CHARACTERISTIC_COEFFICIENT                               },
2855
    { PROPERTY_LIGHT_CONTROL_TIME_FADE                                 , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2856
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_ON                              , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2857
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_AUTO                    , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2858
    { PROPERTY_LIGHT_CONTROL_TIME_FADE_STANDBY_MANUAL                  , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2859
    { PROPERTY_LIGHT_CONTROL_TIME_OCCUPANCY_DELAY                      , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2860
    { PROPERTY_LIGHT_CONTROL_TIME_PROLONG                              , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2861
    { PROPERTY_LIGHT_CONTROL_TIME_RUN_ON                               , CHARACTERISTIC_TIME_MILLISECOND_24                       },
2862
    { PROPERTY_LIGHT_DISTRIBUTION                                      , CHARACTERISTIC_LIGHT_DISTRIBUTION                        },
2863
    { PROPERTY_LIGHT_SOURCE_CURRENT                                    , CHARACTERISTIC_AVERAGE_CURRENT                           },
2864
    { PROPERTY_LIGHT_SOURCE_ON_TIME_NOT_RESETTABLE                     , CHARACTERISTIC_TIME_SECOND_32                            },
2865
    { PROPERTY_LIGHT_SOURCE_ON_TIME_RESETTABLE                         , CHARACTERISTIC_TIME_SECOND_32                            },
2866
    { PROPERTY_LIGHT_SOURCE_OPEN_CIRCUIT_STATISTICS                    , CHARACTERISTIC_EVENT_STATISTICS                          },
2867
    { PROPERTY_LIGHT_SOURCE_OVERALL_FAILURES_STATISTICS                , CHARACTERISTIC_EVENT_STATISTICS                          },
2868
    { PROPERTY_LIGHT_SOURCE_SHORT_CIRCUIT_STATISTICS                   , CHARACTERISTIC_EVENT_STATISTICS                          },
2869
    { PROPERTY_LIGHT_SOURCE_START_COUNTER_RESETTABLE                   , CHARACTERISTIC_COUNT_24                                  },
2870
    { PROPERTY_LIGHT_SOURCE_TEMPERATURE                                , CHARACTERISTIC_HIGH_TEMPERATURE                          },
2871
    { PROPERTY_LIGHT_SOURCE_THERMAL_DERATING_STATISTICS                , CHARACTERISTIC_EVENT_STATISTICS                          },
2872
    { PROPERTY_LIGHT_SOURCE_THERMAL_SHUTDOWN_STATISTICS                , CHARACTERISTIC_EVENT_STATISTICS                          },
2873
    { PROPERTY_LIGHT_SOURCE_TOTAL_POWER_ON_CYCLES                      , CHARACTERISTIC_COUNT_24                                  },
2874
    { PROPERTY_LIGHT_SOURCE_TYPE                                       , CHARACTERISTIC_LIGHT_SOURCE_TYPE                         },
2875
    { PROPERTY_LIGHT_SOURCE_VOLTAGE                                    , CHARACTERISTIC_AVERAGE_VOLTAGE                           },
2876
    { PROPERTY_LUMEN_MAINTENANCE_FACTOR                                , CHARACTERISTIC_PERCENTAGE_8                              },
2877
    { PROPERTY_LUMINAIRE_COLOR                                         , CHARACTERISTIC_FIXED_STRING_24                           },
2878
    { PROPERTY_LUMINAIRE_IDENTIFICATION_NUMBER                         , CHARACTERISTIC_FIXED_STRING_24                           },
2879
    { PROPERTY_LUMINAIRE_IDENTIFICATION_STRING                         , CHARACTERISTIC_FIXED_STRING_64                           },
2880
    { PROPERTY_LUMINAIRE_MANUFACTURER_GTIN                             , CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER                  },
2881
    { PROPERTY_LUMINAIRE_NOMINAL_INPUT_POWER                           , CHARACTERISTIC_POWER                                     },
2882
    { PROPERTY_LUMINAIRE_NOMINAL_MAXIMUM_AC_MAINS_VOLTAGE              , CHARACTERISTIC_VOLTAGE                                   },
2883
    { PROPERTY_LUMINAIRE_NOMINAL_MINIMUM_AC_MAINS_VOLTAGE              , CHARACTERISTIC_VOLTAGE                                   },
2884
    { PROPERTY_LUMINAIRE_POWER_AT_MINIMUM_DIM_LEVEL                    , CHARACTERISTIC_POWER                                     },
2885
    { PROPERTY_LUMINAIRE_TIME_OF_MANUFACTURE                           , CHARACTERISTIC_DATE_UTC                                  },
2886
    { PROPERTY_LUMINOUS_EFFICACY                                       , CHARACTERISTIC_LUMINOUS_EFFICACY                         },
2887
    { PROPERTY_LUMINOUS_ENERGY_SINCE_TURN_ON                           , CHARACTERISTIC_LUMINOUS_ENERGY                           },
2888
    { PROPERTY_LUMINOUS_EXPOSURE                                       , CHARACTERISTIC_LUMINOUS_EXPOSURE                         },
2889
    { PROPERTY_LUMINOUS_FLUX_RANGE                                     , CHARACTERISTIC_LUMINOUS_FLUX_RANGE                       },
2890
    { PROPERTY_MAGNETIC_DECLINATION                                    , CHARACTERISTIC_MAGNETIC_DECLINATION                      },
2891
    { PROPERTY_MAGNETIC_FLUX_DENSITY_2_D                               , CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D                 },
2892
    { PROPERTY_MAGNETIC_FLUX_DENSITY_3_D                               , CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D                 },
2893
    { PROPERTY_MOTION_SENSED                                           , CHARACTERISTIC_PERCENTAGE_8                              },
2894
    { PROPERTY_MOTION_THRESHOLD                                        , CHARACTERISTIC_PERCENTAGE_8                              },
2895
    { PROPERTY_NOMINAL_LIGHT_OUTPUT                                    , CHARACTERISTIC_LIGHT_OUTPUT                              },
2896
    { PROPERTY_OPEN_CIRCUIT_EVENT_STATISTICS                           , CHARACTERISTIC_EVENT_STATISTICS                          },
2897
    { PROPERTY_OUTDOOR_STATISTICAL_VALUES                              , CHARACTERISTIC_TEMPERATURE_8_STATISTICS                  },
2898
    { PROPERTY_OUTPUT_CURRENT_PERCENT                                  , CHARACTERISTIC_PERCENTAGE_8                              },
2899
    { PROPERTY_OUTPUT_CURRENT_RANGE                                    , CHARACTERISTIC_ELECTRIC_CURRENT_RANGE                    },
2900
    { PROPERTY_OUTPUT_CURRENT_STATISTICS                               , CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS               },
2901
    { PROPERTY_OUTPUT_POWER_LIMITATION                                 , CHARACTERISTIC_EVENT_STATISTICS                          },
2902
    { PROPERTY_OUTPUT_RIPPLE_VOLTAGE_SPECIFICATION                     , CHARACTERISTIC_PERCENTAGE_8                              },
2903
    { PROPERTY_OUTPUT_VOLTAGE_RANGE                                    , CHARACTERISTIC_VOLTAGE_SPECIFICATION                     },
2904
    { PROPERTY_OUTPUT_VOLTAGE_STATISTICS                               , CHARACTERISTIC_VOLTAGE_STATISTICS                        },
2905
    { PROPERTY_OVER_OUTPUT_RIPPLE_VOLTAGE_EVENT_STATISTICS             , CHARACTERISTIC_EVENT_STATISTICS                          },
2906
    { PROPERTY_OVERALL_FAILURE_CONDITION                               , CHARACTERISTIC_EVENT_STATISTICS                          },
2907
    { PROPERTY_PEOPLE_COUNT                                            , CHARACTERISTIC_COUNT_16                                  },
2908
    { PROPERTY_POLLEN_CONCENTRATION                                    , CHARACTERISTIC_POLLEN_CONCENTRATION                      },
2909
    { PROPERTY_POWER_FACTOR                                            , CHARACTERISTIC_COSINE_OF_THE_ANGLE                       },
2910
    { PROPERTY_PRECISE_PRESENT_AMBIENT_TEMPERATURE                     , CHARACTERISTIC_TEMPERATURE                               },
2911
    { PROPERTY_PRECISE_TOTAL_DEVICE_ENERGY_USE                         , CHARACTERISTIC_ENERGY32                                  },
2912
    { PROPERTY_PRESENCE_DETECTED                                       , CHARACTERISTIC_BOOLEAN                                   },
2913
    { PROPERTY_PRESENT_AMBIENT_CARBON_DIOXIDE_CONCENTRATION            , CHARACTERISTIC_CO2_CONCENTRATION                         },
2914
    { PROPERTY_PRESENT_AMBIENT_LIGHT_LEVEL                             , CHARACTERISTIC_ILLUMINANCE                               },
2915
    { PROPERTY_PRESENT_AMBIENT_NOISE                                   , CHARACTERISTIC_NOISE                                     },
2916
    { PROPERTY_PRESENT_AMBIENT_RELATIVE_HUMIDITY                       , CHARACTERISTIC_HUMIDITY                                  },
2917
    { PROPERTY_PRESENT_AMBIENT_TEMPERATURE                             , CHARACTERISTIC_TEMPERATURE_8                             },
2918
    { PROPERTY_PRESENT_AMBIENT_VOLATILE_ORGANIC_COMPOUNDS_CONCENTRATION, CHARACTERISTIC_VOC_CONCENTRATION                         },
2919
    { PROPERTY_PRESENT_CIE_1931_CHROMATICITY_COORDINATES               , CHARACTERISTIC_CHROMATICITY_COORDINATES                  },
2920
    { PROPERTY_PRESENT_CORRELATED_COLOR_TEMPERATURE                    , CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE              },
2921
    { PROPERTY_PRESENT_DEVICE_INPUT_POWER                              , CHARACTERISTIC_POWER                                     },
2922
    { PROPERTY_PRESENT_DEVICE_OPERATING_EFFICIENCY                     , CHARACTERISTIC_PERCENTAGE_8                              },
2923
    { PROPERTY_PRESENT_DEVICE_OPERATING_TEMPERATURE                    , CHARACTERISTIC_TEMPERATURE                               },
2924
    { PROPERTY_PRESENT_ILLUMINANCE                                     , CHARACTERISTIC_ILLUMINANCE                               },
2925
    { PROPERTY_PRESENT_INDOOR_AMBIENT_TEMPERATURE                      , CHARACTERISTIC_TEMPERATURE_8                             },
2926
    { PROPERTY_PRESENT_INDOOR_RELATIVE_HUMIDITY                        , CHARACTERISTIC_HUMIDITY                                  },
2927
    { PROPERTY_PRESENT_INPUT_CURRENT                                   , CHARACTERISTIC_ELECTRIC_CURRENT                          },
2928
    { PROPERTY_PRESENT_INPUT_RIPPLE_VOLTAGE                            , CHARACTERISTIC_PERCENTAGE_8                              },
2929
    { PROPERTY_PRESENT_INPUT_VOLTAGE                                   , CHARACTERISTIC_VOLTAGE                                   },
2930
    { PROPERTY_PRESENT_LUMINOUS_FLUX                                   , CHARACTERISTIC_LUMINOUS_FLUX                             },
2931
    { PROPERTY_PRESENT_OUTDOOR_AMBIENT_TEMPERATURE                     , CHARACTERISTIC_TEMPERATURE_8                             },
2932
    { PROPERTY_PRESENT_OUTDOOR_RELATIVE_HUMIDITY                       , CHARACTERISTIC_HUMIDITY                                  },
2933
    { PROPERTY_PRESENT_OUTPUT_CURRENT                                  , CHARACTERISTIC_ELECTRIC_CURRENT                          },
2934
    { PROPERTY_PRESENT_OUTPUT_VOLTAGE                                  , CHARACTERISTIC_VOLTAGE                                   },
2935
    { PROPERTY_PRESENT_PLANCKIAN_DISTANCE                              , CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN         },
2936
    { PROPERTY_PRESENT_RELATIVE_OUTPUT_RIPPLE_VOLTAGE                  , CHARACTERISTIC_PERCENTAGE_8                              },
2937
    { PROPERTY_PRESSURE                                                , CHARACTERISTIC_PRESSURE                                  },
2938
    { PROPERTY_RAINFALL                                                , CHARACTERISTIC_RAINFALL                                  },
2939
    { PROPERTY_RATED_MEDIAN_USEFUL_LIFE_OF_LUMINAIRE                   , CHARACTERISTIC_TIME_HOUR_24                              },
2940
    { PROPERTY_RATED_MEDIAN_USEFUL_LIGHT_SOURCE_STARTS                 , CHARACTERISTIC_COUNT_24                                  },
2941
    { PROPERTY_REFERENCE_TEMPERATURE                                   , CHARACTERISTIC_HIGH_TEMPERATURE                          },
2942
    { PROPERTY_RELATIVE_DEVICE_ENERGY_USE_IN_A_PERIOD_OF_DAY           , CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY                 },
2943
    { PROPERTY_RELATIVE_DEVICE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE        , CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE },
2944
    { PROPERTY_RELATIVE_EXPOSURE_TIME_IN_AN_ILLUMINANCE_RANGE          , CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE    },
2945
    { PROPERTY_RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE, CHARACTERISTIC_LUMINOUS_ENERGY                           },
2946
    { PROPERTY_RELATIVE_RUNTIME_IN_A_DEVICE_OPERATING_TEMPERATURE_RANGE, CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE     },
2947
    { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_CURRENT_RANGE              , CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE       },
2948
    { PROPERTY_RELATIVE_RUNTIME_IN_AN_INPUT_VOLTAGE_RANGE              , CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE         },
2949
    { PROPERTY_SENSOR_GAIN                                             , CHARACTERISTIC_COEFFICIENT                               },
2950
    { PROPERTY_SHORT_CIRCUIT_EVENT_STATISTICS                          , CHARACTERISTIC_EVENT_STATISTICS                          },
2951
    { PROPERTY_THERMAL_DERATING                                        , CHARACTERISTIC_EVENT_STATISTICS                          },
2952
    { PROPERTY_TIME_SINCE_MOTION_SENSED                                , CHARACTERISTIC_TIME_SECOND_16                            },
2953
    { PROPERTY_TIME_SINCE_PRESENCE_DETECTED                            , CHARACTERISTIC_TIME_SECOND_16                            },
2954
    { PROPERTY_TOTAL_DEVICE_ENERGY_USE                                 , CHARACTERISTIC_ENERGY                                    },
2955
    { PROPERTY_TOTAL_DEVICE_OFF_ON_CYCLES                              , CHARACTERISTIC_COUNT_24                                  },
2956
    { PROPERTY_TOTAL_DEVICE_POWER_ON_CYCLES                            , CHARACTERISTIC_COUNT_24                                  },
2957
    { PROPERTY_TOTAL_DEVICE_POWER_ON_TIME                              , CHARACTERISTIC_TIME_HOUR_24                              },
2958
    { PROPERTY_TOTAL_DEVICE_RUNTIME                                    , CHARACTERISTIC_TIME_HOUR_24                              },
2959
    { PROPERTY_TOTAL_DEVICE_STARTS                                     , CHARACTERISTIC_COUNT_24                                  },
2960
    { PROPERTY_TOTAL_LIGHT_EXPOSURE_TIME                               , CHARACTERISTIC_TIME_HOUR_24                              },
2961
    { PROPERTY_TOTAL_LUMINOUS_ENERGY                                   , CHARACTERISTIC_LUMINOUS_ENERGY                           },
2962
    { PROPERTY_TRUE_WIND_DIRECTION                                     , CHARACTERISTIC_TRUE_WIND_DIRECTION                       },
2963
    { PROPERTY_TRUE_WIND_SPEED                                         , CHARACTERISTIC_TRUE_WIND_SPEED                           },
2964
    { PROPERTY_UV_INDEX                                                , CHARACTERISTIC_UV_INDEX                                  },
2965
    { PROPERTY_WIND_CHILL                                              , CHARACTERISTIC_WIND_CHILL                                },
2966
    { 0, 0},
2967
};
2968
2969
static const btmesh_column_property_t  btmesh_column_properties[] = {
2970
    { CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY, CHARACTERISTIC_DECIHOUR_8, CHARACTERISTIC_TEMPERATURE_8 },
2971
    { CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE, CHARACTERISTIC_TEMPERATURE, CHARACTERISTIC_PERCENTAGE_8 },
2972
    { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE, CHARACTERISTIC_ELECTRIC_CURRENT, CHARACTERISTIC_PERCENTAGE_8 },
2973
    { CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY, CHARACTERISTIC_DECIHOUR_8, CHARACTERISTIC_ENERGY },
2974
    { CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE, CHARACTERISTIC_ILLUMINANCE, CHARACTERISTIC_PERCENTAGE_8 },
2975
    { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE, CHARACTERISTIC_GENERIC_LEVEL, CHARACTERISTIC_PERCENTAGE_8 },
2976
    { 0, 0, 0},
2977
};
2978
2979
static const bt_gatt_characteristic_t bt_gatt_characteristics[] = {
2980
    { PHONY_CHARACTERISTIC_PERCENTAGE_CHANGE_16               , 2, &hf_bt_phony_characteristic_percentage_change_16 , DISSECTOR_SIMPLE },
2981
    { PHONY_CHARACTERISTIC_INDEX                              , 2, &hf_bt_phony_characteristic_index         , DISSECTOR_SIMPLE },
2982
    { CHARACTERISTIC_APPARENT_ENERGY32                        , 4, NULL                                      , DISSECTOR_SIMPLE },
2983
    { CHARACTERISTIC_APPARENT_POWER                           , 3, NULL                                      , DISSECTOR_SIMPLE },
2984
    { CHARACTERISTIC_APPARENT_WIND_DIRECTION                  , 2, NULL                                      , DISSECTOR_SIMPLE },
2985
    { CHARACTERISTIC_APPARENT_WIND_SPEED                      , 2, NULL                                      , DISSECTOR_SIMPLE },
2986
    { CHARACTERISTIC_APPEARANCE                               , 2, NULL                                      , DISSECTOR_SIMPLE },
2987
    { CHARACTERISTIC_AVERAGE_CURRENT                          , 3, NULL                                      , DISSECTOR_SIMPLE },
2988
    { CHARACTERISTIC_AVERAGE_VOLTAGE                          , 3, NULL                                      , DISSECTOR_SIMPLE },
2989
    { CHARACTERISTIC_BOOLEAN                                  , 1, &hf_bt_characteristic_boolean             , DISSECTOR_SIMPLE },
2990
    { CHARACTERISTIC_CHROMATIC_DISTANCE_FROM_PLANCKIAN        , 2, NULL                                      , DISSECTOR_SIMPLE },
2991
    { CHARACTERISTIC_CHROMATICITY_COORDINATES                 , 2, NULL                                      , DISSECTOR_SIMPLE },
2992
    { CHARACTERISTIC_CHROMATICITY_TOLERANCE                   , 1, NULL                                      , DISSECTOR_SIMPLE },
2993
    { CHARACTERISTIC_CIE_13_3_1995_COLOR_RENDERING_INDEX      , 1, NULL                                      , DISSECTOR_SIMPLE },
2994
    { CHARACTERISTIC_CO2_CONCENTRATION                        , 2, NULL                                      , DISSECTOR_SIMPLE },
2995
    { CHARACTERISTIC_COEFFICIENT                              , 4, &hf_bt_characteristic_coefficient         , DISSECTOR_SIMPLE },
2996
    { CHARACTERISTIC_CORRELATED_COLOR_TEMPERATURE             , 2, NULL                                      , DISSECTOR_SIMPLE },
2997
    { CHARACTERISTIC_COSINE_OF_THE_ANGLE                      , 1, NULL                                      , DISSECTOR_SIMPLE },
2998
    { CHARACTERISTIC_COUNT_16                                 , 2, &hf_bt_characteristic_count_16            , DISSECTOR_SIMPLE },
2999
    { CHARACTERISTIC_COUNT_24                                 , 3, NULL                                      , DISSECTOR_SIMPLE },
3000
    { CHARACTERISTIC_COUNTRY_CODE                             , 2, NULL                                      , DISSECTOR_SIMPLE },
3001
    { CHARACTERISTIC_DATE_UTC                                 , 3, NULL                                      , DISSECTOR_SIMPLE },
3002
    { CHARACTERISTIC_DECIHOUR_8                               , 1, &hf_bt_characteristic_time_decihour_8     , DISSECTOR_SIMPLE },
3003
    { CHARACTERISTIC_DEW_POINT                                , 1, NULL                                      , DISSECTOR_SIMPLE },
3004
    { CHARACTERISTIC_ELECTRIC_CURRENT                         , 2, &hf_bt_characteristic_electric_current    , DISSECTOR_SIMPLE },
3005
    { CHARACTERISTIC_ELECTRIC_CURRENT_RANGE                   , 4, NULL                                      , DISSECTOR_SIMPLE },
3006
    { CHARACTERISTIC_ELECTRIC_CURRENT_SPECIFICATION           , 6, NULL                                      , DISSECTOR_SIMPLE },
3007
    { CHARACTERISTIC_ELECTRIC_CURRENT_STATISTICS              , 9, NULL                                      , DISSECTOR_SIMPLE },
3008
    { CHARACTERISTIC_ENERGY                                   , 3, &hf_bt_characteristic_energy              , DISSECTOR_SIMPLE },
3009
    { CHARACTERISTIC_ENERGY_IN_A_PERIOD_OF_DAY                , 5, NULL                                      , DISSECTOR_THREE_VALUES },
3010
    { CHARACTERISTIC_ENERGY32                                 , 4, NULL                                      , DISSECTOR_SIMPLE },
3011
    { CHARACTERISTIC_EVENT_STATISTICS                         , 6, NULL                                      , DISSECTOR_SIMPLE },
3012
    { CHARACTERISTIC_FIXED_STRING_16                          , 16, NULL                                     , DISSECTOR_SIMPLE },
3013
    { CHARACTERISTIC_FIXED_STRING_24                          , 24, NULL                                     , DISSECTOR_SIMPLE },
3014
    { CHARACTERISTIC_FIXED_STRING_36                          , 36, NULL                                     , DISSECTOR_SIMPLE },
3015
    { CHARACTERISTIC_FIXED_STRING_64                          , 64, NULL                                     , DISSECTOR_SIMPLE },
3016
    { CHARACTERISTIC_FIXED_STRING_8                           , 8, NULL                                      , DISSECTOR_SIMPLE },
3017
    { CHARACTERISTIC_GENERIC_LEVEL                            , 2, &hf_bt_characteristic_generic_level       , DISSECTOR_SIMPLE },
3018
    { CHARACTERISTIC_GLOBAL_TRADE_ITEM_NUMBER                 , 6, NULL                                      , DISSECTOR_SIMPLE },
3019
    { CHARACTERISTIC_GUST_FACTOR                              , 1, NULL                                      , DISSECTOR_SIMPLE },
3020
    { CHARACTERISTIC_HEAT_INDEX                               , 1, NULL                                      , DISSECTOR_SIMPLE },
3021
    { CHARACTERISTIC_HIGH_TEMPERATURE                         , 2, NULL                                      , DISSECTOR_SIMPLE },
3022
    { CHARACTERISTIC_HIGH_VOLTAGE                             , 3, NULL                                      , DISSECTOR_SIMPLE },
3023
    { CHARACTERISTIC_HUMIDITY                                 , 2, NULL                                      , DISSECTOR_SIMPLE },
3024
    { CHARACTERISTIC_ILLUMINANCE                              , 3, &hf_bt_characteristic_illuminance         , DISSECTOR_SIMPLE },
3025
    { CHARACTERISTIC_LIGHT_DISTRIBUTION                       , 1, NULL                                      , DISSECTOR_SIMPLE },
3026
    { CHARACTERISTIC_LIGHT_OUTPUT                             , 3, NULL                                      , DISSECTOR_SIMPLE },
3027
    { CHARACTERISTIC_LIGHT_SOURCE_TYPE                        , 1, NULL                                      , DISSECTOR_SIMPLE },
3028
    { CHARACTERISTIC_LUMINOUS_EFFICACY                        , 2, NULL                                      , DISSECTOR_SIMPLE },
3029
    { CHARACTERISTIC_LUMINOUS_ENERGY                          , 3, NULL                                      , DISSECTOR_SIMPLE },
3030
    { CHARACTERISTIC_LUMINOUS_EXPOSURE                        , 3, NULL                                      , DISSECTOR_SIMPLE },
3031
    { CHARACTERISTIC_LUMINOUS_FLUX                            , 2, NULL                                      , DISSECTOR_SIMPLE },
3032
    { CHARACTERISTIC_LUMINOUS_FLUX_RANGE                      , 4, NULL                                      , DISSECTOR_SIMPLE },
3033
    { CHARACTERISTIC_LUMINOUS_INTENSITY                       , 2, NULL                                      , DISSECTOR_SIMPLE },
3034
    { CHARACTERISTIC_MAGNETIC_DECLINATION                     , 2, NULL                                      , DISSECTOR_SIMPLE },
3035
    { CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_2_D                , 4, NULL                                      , DISSECTOR_SIMPLE },
3036
    { CHARACTERISTIC_MAGNETIC_FLUX_DENSITY_3_D                , 6, NULL                                      , DISSECTOR_SIMPLE },
3037
    { CHARACTERISTIC_NOISE                                    , 1, NULL                                      , DISSECTOR_SIMPLE },
3038
    { CHARACTERISTIC_PERCEIVED_LIGHTNESS                      , 2, &hf_bt_characteristic_perceived_lightness , DISSECTOR_SIMPLE },
3039
    { CHARACTERISTIC_PERCENTAGE_8                             , 1, &hf_bt_characteristic_percentage_8        , DISSECTOR_SIMPLE },
3040
    { CHARACTERISTIC_POLLEN_CONCENTRATION                     , 3, NULL                                      , DISSECTOR_SIMPLE },
3041
    { CHARACTERISTIC_POWER                                    , 3, NULL                                      , DISSECTOR_SIMPLE },
3042
    { CHARACTERISTIC_POWER_SPECIFICATION                      , 9, NULL                                      , DISSECTOR_SIMPLE },
3043
    { CHARACTERISTIC_PRESSURE                                 , 4, NULL                                      , DISSECTOR_SIMPLE },
3044
    { CHARACTERISTIC_RAINFALL                                 , 2, NULL                                      , DISSECTOR_SIMPLE },
3045
    { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_CURRENT_RANGE      , 5, NULL                                      , DISSECTOR_THREE_VALUES },
3046
    { CHARACTERISTIC_RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE, 5, NULL                                      , DISSECTOR_THREE_VALUES },
3047
    { CHARACTERISTIC_RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE    , 5, NULL                                      , DISSECTOR_THREE_VALUES },
3048
    { CHARACTERISTIC_RELATIVE_VALUE_IN_A_VOLTAGE_RANGE        , 5, NULL                                      , DISSECTOR_SIMPLE },
3049
    { CHARACTERISTIC_RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE   , 7, NULL                                      , DISSECTOR_THREE_VALUES },
3050
    { CHARACTERISTIC_TEMPERATURE                              , 2, &hf_bt_characteristic_temperature         , DISSECTOR_SIMPLE },
3051
    { CHARACTERISTIC_TEMPERATURE_8                            , 1, &hf_bt_characteristic_temperature_8       , DISSECTOR_SIMPLE },
3052
    { CHARACTERISTIC_TEMPERATURE_8_IN_A_PERIOD_OF_DAY         , 3, NULL                                      , DISSECTOR_THREE_VALUES },
3053
    { CHARACTERISTIC_TEMPERATURE_8_STATISTICS                 , 5, NULL                                      , DISSECTOR_SIMPLE },
3054
    { CHARACTERISTIC_TEMPERATURE_RANGE                        , 4, NULL                                      , DISSECTOR_SIMPLE },
3055
    { CHARACTERISTIC_TEMPERATURE_STATISTICS                   , 9, NULL                                      , DISSECTOR_SIMPLE },
3056
    { CHARACTERISTIC_TIME_HOUR_24                             , 3, NULL                                      , DISSECTOR_SIMPLE },
3057
    { CHARACTERISTIC_TIME_MILLISECOND_24                      , 3, &hf_bt_characteristic_time_millisecond_24 , DISSECTOR_SIMPLE },
3058
    { CHARACTERISTIC_TIME_SECOND_16                           , 2, &hf_bt_characteristic_time_second_16      , DISSECTOR_SIMPLE },
3059
    { CHARACTERISTIC_TIME_SECOND_32                           , 4, NULL                                      , DISSECTOR_SIMPLE },
3060
    { CHARACTERISTIC_TRUE_WIND_DIRECTION                      , 2, NULL                                      , DISSECTOR_SIMPLE },
3061
    { CHARACTERISTIC_TRUE_WIND_SPEED                          , 2, NULL                                      , DISSECTOR_SIMPLE },
3062
    { CHARACTERISTIC_UV_INDEX                                 , 1, NULL                                      , DISSECTOR_SIMPLE },
3063
    { CHARACTERISTIC_VOC_CONCENTRATION                        , 2, NULL                                      , DISSECTOR_SIMPLE },
3064
    { CHARACTERISTIC_VOLTAGE                                  , 2, NULL                                      , DISSECTOR_SIMPLE },
3065
    { CHARACTERISTIC_VOLTAGE_FREQUENCY                        , 2, NULL                                      , DISSECTOR_SIMPLE },
3066
    { CHARACTERISTIC_VOLTAGE_SPECIFICATION                    , 6, NULL                                      , DISSECTOR_SIMPLE },
3067
    { CHARACTERISTIC_VOLTAGE_STATISTICS                       , 9, NULL                                      , DISSECTOR_SIMPLE },
3068
    { CHARACTERISTIC_WIND_CHILL                               , 1, NULL                                      , DISSECTOR_SIMPLE },
3069
    { 0, 0, NULL, 0},
3070
};
3071
3072
/* Upper Transport Message reassembly */
3073
3074
static reassembly_table upper_transport_reassembly_table;
3075
3076
typedef struct _upper_transport_fragment_key {
3077
    uint16_t src;
3078
    unsigned seq0;
3079
    unsigned ivindex;
3080
    uint32_t net_key_iv_index_hash;
3081
} upper_transport_fragment_key;
3082
3083
static unsigned
3084
upper_transport_fragment_hash(const void *k)
3085
0
{
3086
0
    const upper_transport_fragment_key* key = (const upper_transport_fragment_key*) k;
3087
0
    unsigned hash_val;
3088
0
    uint8_t hash_buf[sizeof(uint16_t) + 2 * sizeof(unsigned) + sizeof(uint32_t)];
3089
3090
0
    unsigned idx=0;
3091
0
    memcpy(hash_buf, &key->src, sizeof(uint16_t));
3092
0
    idx += sizeof(uint16_t);
3093
0
    memcpy(&hash_buf[idx], &key->seq0, sizeof(unsigned));
3094
0
    idx += sizeof(unsigned);
3095
0
    memcpy(&hash_buf[idx], &key->ivindex, sizeof(key->ivindex));
3096
0
    idx += sizeof(unsigned);
3097
0
    memcpy(&hash_buf[idx], &key->net_key_iv_index_hash, sizeof(key->net_key_iv_index_hash));
3098
0
    hash_val = wmem_strong_hash(hash_buf, sizeof(hash_buf));
3099
3100
0
    return hash_val;
3101
0
}
3102
3103
static int
3104
upper_transport_fragment_equal(const void *k1, const void *k2)
3105
0
{
3106
0
    const upper_transport_fragment_key* key1 = (const upper_transport_fragment_key*) k1;
3107
0
    const upper_transport_fragment_key* key2 = (const upper_transport_fragment_key*) k2;
3108
3109
0
    return ((key1->src == key2->src) && (key1->seq0 == key2->seq0) &&
3110
0
            (key1->ivindex == key2->ivindex) && (key1->net_key_iv_index_hash == key2->net_key_iv_index_hash)
3111
0
            ? true : false);
3112
0
}
3113
3114
static void *
3115
upper_transport_fragment_temporary_key(const packet_info *pinfo _U_, const uint32_t id _U_,
3116
                              const void *data)
3117
0
{
3118
0
    upper_transport_fragment_key *key = g_slice_new(upper_transport_fragment_key);
3119
0
    const upper_transport_fragment_key *pkt = (const upper_transport_fragment_key *)data;
3120
3121
0
    key->src = pkt->src;
3122
0
    key->seq0 = pkt->seq0;
3123
0
    key->ivindex = pkt->ivindex;
3124
0
    key->net_key_iv_index_hash = pkt->net_key_iv_index_hash;
3125
3126
0
    return key;
3127
0
}
3128
3129
static void
3130
upper_transport_fragment_free_temporary_key(void *ptr)
3131
0
{
3132
0
    upper_transport_fragment_key *key = (upper_transport_fragment_key *)ptr;
3133
3134
0
    g_slice_free(upper_transport_fragment_key, key);
3135
0
}
3136
3137
static void *
3138
upper_transport_fragment_persistent_key(const packet_info *pinfo _U_, const uint32_t id _U_,
3139
                              const void *data)
3140
0
{
3141
0
    upper_transport_fragment_key *key = g_slice_new(upper_transport_fragment_key);
3142
0
    const upper_transport_fragment_key *pkt = (const upper_transport_fragment_key *)data;
3143
3144
0
    key->src = pkt->src;
3145
0
    key->seq0 = pkt->seq0;
3146
0
    key->ivindex = pkt->ivindex;
3147
0
    key->net_key_iv_index_hash = pkt->net_key_iv_index_hash;
3148
3149
0
    return key;
3150
0
}
3151
3152
static void
3153
upper_transport_fragment_free_persistent_key(void *ptr)
3154
0
{
3155
0
    upper_transport_fragment_key *key = (upper_transport_fragment_key *)ptr;
3156
0
    if (key) {
3157
0
        g_slice_free(upper_transport_fragment_key, key);
3158
0
    }
3159
0
}
3160
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
3168
};
3169
3170
/* A BT Mesh dissector is not really useful without decryption as all packets are encrypted. Just leave a stub dissector outside of */
3171
3172
/* BT Mesh s1 function */
3173
static bool
3174
s1(uint8_t *m, size_t mlen, uint8_t *salt)
3175
0
{
3176
3177
0
    gcry_mac_hd_t mac_hd;
3178
0
    gcry_error_t gcrypt_err;
3179
0
    size_t read_digest_length = 16;
3180
0
    uint8_t zero[16] = { 0 };
3181
3182
    /* Open gcrypt handle */
3183
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3184
0
    if (gcrypt_err != 0) {
3185
0
        return false;
3186
0
    }
3187
3188
    /* Set the key */
3189
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &zero, 16);
3190
0
    if (gcrypt_err != 0) {
3191
0
        gcry_mac_close(mac_hd);
3192
0
        return false;
3193
0
    }
3194
3195
0
    gcrypt_err = gcry_mac_write(mac_hd, m, mlen);
3196
0
    if (gcrypt_err != 0) {
3197
0
        gcry_mac_close(mac_hd);
3198
0
        return false;
3199
0
    }
3200
3201
    /* Read out the digest */
3202
0
    gcrypt_err = gcry_mac_read(mac_hd, salt, &read_digest_length);
3203
0
    if (gcrypt_err != 0) {
3204
0
        gcry_mac_close(mac_hd);
3205
0
        return false;
3206
0
    }
3207
3208
    /* Now close the mac handle */
3209
0
    gcry_mac_close(mac_hd);
3210
0
    return true;
3211
0
}
3212
3213
/* BT Mesh Labebl UUID hash function
3214
 *
3215
 * SALT = s1 ("vtad")
3216
 * hash = AES-CMAC(SALT, Label UUID) mod 2(pow)14
3217
 *
3218
 */
3219
static bool
3220
label_uuid_hash(uat_btmesh_label_uuid_record_t *label_uuid_record)
3221
0
{
3222
0
    gcry_mac_hd_t mac_hd;
3223
0
    gcry_error_t gcrypt_err;
3224
0
    uint8_t vtad[4] = { 'v', 't', 'a', 'd' };
3225
0
    size_t mlen = 4;
3226
0
    uint8_t salt[16];
3227
0
    uint8_t hash[16];
3228
0
    size_t read_digest_length = 16;
3229
3230
0
    if (label_uuid_record->label_uuid_length != 16) {
3231
0
        return false;
3232
0
    }
3233
3234
    /* SALT = s1("vtad") */
3235
0
    if (s1(vtad, mlen, salt) == false) {
3236
0
        return false;
3237
0
    }
3238
3239
    /* hash = AES-CMAC(SALT, Label UUID) */
3240
    /* Open gcrypt handle */
3241
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3242
0
    if (gcrypt_err != 0) {
3243
0
        return false;
3244
0
    }
3245
3246
    /* Set the key */
3247
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3248
0
    if (gcrypt_err != 0) {
3249
0
        gcry_mac_close(mac_hd);
3250
0
        return false;
3251
0
    }
3252
3253
0
    gcrypt_err = gcry_mac_write(mac_hd, label_uuid_record->label_uuid, 16);
3254
0
    if (gcrypt_err != 0) {
3255
0
        gcry_mac_close(mac_hd);
3256
0
        return false;
3257
0
    }
3258
3259
    /* Read out the digest */
3260
0
    gcrypt_err = gcry_mac_read(mac_hd, hash, &read_digest_length);
3261
0
    if (gcrypt_err != 0) {
3262
0
        gcry_mac_close(mac_hd);
3263
0
        return false;
3264
0
    }
3265
3266
0
    label_uuid_record->hash = hash[15] + ((uint16_t)(hash[14] & 0x3f) << 8) + 0x8000;
3267
3268
    /* Now close the mac handle */
3269
0
    gcry_mac_close(mac_hd);
3270
0
    return true;
3271
0
}
3272
3273
/* BT Mesh K2 function
3274
 * Allow plen up to 9 char
3275
 *
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
3286
 */
3287
static bool
3288
k2(uat_btmesh_record_t * net_key_set, uint8_t *p, size_t plen)
3289
0
{
3290
0
    gcry_mac_hd_t mac_hd;
3291
0
    gcry_error_t gcrypt_err;
3292
0
    uint8_t smk2[4] = { 's', 'm', 'k', '2' };
3293
0
    size_t mlen = 4;
3294
0
    uint8_t salt[16];
3295
0
    uint8_t t[16];
3296
0
    uint8_t t1[16];
3297
0
    uint8_t p_t1[9 + 1];
3298
0
    uint8_t p_t2[16 + 9 + 1];
3299
0
    uint8_t p_t3[16 + 9 + 1];
3300
3301
0
    size_t read_digest_length = 16;
3302
3303
0
    if (plen > 8) {
3304
0
        return false;
3305
0
    }
3306
3307
0
    if (net_key_set->network_key_length != 16) {
3308
0
        return false;
3309
0
    }
3310
3311
    /* SALT = s1("smk2") */
3312
0
    if (s1(smk2, mlen, salt) == false) {
3313
0
        return false;
3314
0
    }
3315
3316
    /* T = AES-CMAC_SALT(N) */
3317
    /* Open gcrypt handle */
3318
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3319
0
    if (gcrypt_err != 0) {
3320
0
        return false;
3321
0
    }
3322
3323
    /* Set the key */
3324
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3325
0
    if (gcrypt_err != 0) {
3326
0
        gcry_mac_close(mac_hd);
3327
0
        return false;
3328
0
    }
3329
3330
0
    gcrypt_err = gcry_mac_write(mac_hd, net_key_set->network_key, 16);
3331
0
    if (gcrypt_err != 0) {
3332
0
        gcry_mac_close(mac_hd);
3333
0
        return false;
3334
0
    }
3335
3336
    /* Read out the digest */
3337
0
    gcrypt_err = gcry_mac_read(mac_hd, t, &read_digest_length);
3338
0
    if (gcrypt_err != 0) {
3339
0
        gcry_mac_close(mac_hd);
3340
0
        return false;
3341
0
    }
3342
3343
    /* Now close the mac handle */
3344
0
    gcry_mac_close(mac_hd);
3345
3346
    /*
3347
     * T0 = empty string (zero length)
3348
     * T1 = AES-CMAC_T(T0 || P || 0x01)
3349
     */
3350
0
    memcpy(p_t1, p, plen);
3351
0
    p_t1[plen] = 0x01;
3352
3353
    /* Open gcrypt handle */
3354
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3355
0
    if (gcrypt_err != 0) {
3356
0
        return false;
3357
0
    }
3358
3359
    /* Set the key */
3360
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3361
0
    if (gcrypt_err != 0) {
3362
0
        gcry_mac_close(mac_hd);
3363
0
        return false;
3364
0
    }
3365
3366
0
    gcrypt_err = gcry_mac_write(mac_hd, &p_t1, plen + 1);
3367
0
    if (gcrypt_err != 0) {
3368
0
        gcry_mac_close(mac_hd);
3369
0
        return false;
3370
0
    }
3371
3372
    /* Read out the digest */
3373
0
    gcrypt_err = gcry_mac_read(mac_hd, t1, &read_digest_length);
3374
0
    if (gcrypt_err != 0) {
3375
0
        gcry_mac_close(mac_hd);
3376
0
        return false;
3377
0
    }
3378
0
    net_key_set->nid = (t1[15] & 0x7f);
3379
    /*
3380
     * T2 = AES-CMAC_T(T1 || P || 0x02)
3381
     * (EncryptionKey)
3382
     */
3383
3384
    /* Now close the mac handle */
3385
0
    gcry_mac_close(mac_hd);
3386
3387
0
    memcpy(p_t2, t1, 16);
3388
0
    memcpy(&p_t2[16], p, plen);
3389
0
    p_t2[16 + plen] = 0x02;
3390
3391
    /* Open gcrypt handle */
3392
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3393
0
    if (gcrypt_err != 0) {
3394
0
        return false;
3395
0
    }
3396
3397
    /* Set the key */
3398
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3399
0
    if (gcrypt_err != 0) {
3400
0
        gcry_mac_close(mac_hd);
3401
0
        return false;
3402
0
    }
3403
3404
0
    gcrypt_err = gcry_mac_write(mac_hd, &p_t2, 16 + plen + 1);
3405
0
    if (gcrypt_err != 0) {
3406
0
        gcry_mac_close(mac_hd);
3407
0
        return false;
3408
0
    }
3409
3410
    /* Read out the digest */
3411
0
    gcrypt_err = gcry_mac_read(mac_hd, net_key_set->encryptionkey, &read_digest_length);
3412
0
    if (gcrypt_err != 0) {
3413
0
        gcry_mac_close(mac_hd);
3414
0
        return false;
3415
0
    }
3416
3417
    /* Now close the mac handle */
3418
0
    gcry_mac_close(mac_hd);
3419
3420
    /* T3 = AES-CMAC_T(T2 || P || 0x03) */
3421
    /* PrivacyKey */
3422
0
    memcpy(p_t3, net_key_set->encryptionkey, 16);
3423
0
    memcpy(&p_t3[16], p, plen);
3424
0
    p_t3[16 + plen] = 0x03;
3425
3426
    /* Open gcrypt handle */
3427
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3428
0
    if (gcrypt_err != 0) {
3429
0
        return false;
3430
0
    }
3431
3432
    /* Set the key */
3433
0
    gcrypt_err = gcry_mac_setkey(mac_hd, t, 16);
3434
0
    if (gcrypt_err != 0) {
3435
0
        gcry_mac_close(mac_hd);
3436
0
        return false;
3437
0
    }
3438
3439
0
    gcrypt_err = gcry_mac_write(mac_hd, p_t3, 16 + plen + 1);
3440
0
    if (gcrypt_err != 0) {
3441
0
        gcry_mac_close(mac_hd);
3442
0
        return false;
3443
0
    }
3444
3445
    /* Read out the digest */
3446
0
    gcrypt_err = gcry_mac_read(mac_hd, net_key_set->privacykey, &read_digest_length);
3447
0
    if (gcrypt_err != 0) {
3448
0
        gcry_mac_close(mac_hd);
3449
0
        return false;
3450
0
    }
3451
3452
    /* Now close the mac handle */
3453
0
    gcry_mac_close(mac_hd);
3454
0
    return true;
3455
0
}
3456
3457
/* BT Mesh K4 function
3458
3459
   The inputs to function k4 is:
3460
   N is 128 bits
3461
3462
   The key (T) is computed as follows:
3463
   T = AES-CMAC (SALT, N)
3464
3465
   SALT is the 128-bit value computed as follows:
3466
   SALT = s1("smk4")
3467
3468
   The output of the derivation function k4 is as follows:
3469
   K4(N) = AES-CMAC (T, "id6" || 0x01 ) mod 2(pow)6
3470
*/
3471
3472
static bool
3473
k4(uat_btmesh_record_t *key_set)
3474
0
{
3475
0
    gcry_mac_hd_t mac_hd;
3476
0
    gcry_error_t gcrypt_err;
3477
3478
0
    uint8_t smk4[4] = { 's', 'm', 'k', '4' };
3479
0
    size_t mlen = 4;
3480
0
    uint8_t id6[4] = { 'i', 'd', '6', 0x01 };
3481
0
    size_t id6len = 4;
3482
0
    uint8_t salt[16];
3483
0
    uint8_t t[16];
3484
0
    uint8_t t1[16];
3485
3486
0
    size_t read_digest_length = 16;
3487
3488
0
    if (key_set->application_key_length != 16) {
3489
0
        return false;
3490
0
    }
3491
3492
    /* SALT = s1("smk4") */
3493
0
    if (s1(smk4, mlen, salt) == false) {
3494
0
        return false;
3495
0
    }
3496
3497
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3498
0
    if (gcrypt_err != 0) {
3499
0
        return false;
3500
0
    }
3501
3502
    /* Set the key */
3503
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &salt, 16);
3504
0
    if (gcrypt_err != 0) {
3505
0
        gcry_mac_close(mac_hd);
3506
0
        return false;
3507
0
    }
3508
3509
0
    gcrypt_err = gcry_mac_write(mac_hd, key_set->application_key, 16);
3510
0
    if (gcrypt_err != 0) {
3511
0
        gcry_mac_close(mac_hd);
3512
0
        return false;
3513
0
    }
3514
3515
    /* Read out the digest */
3516
0
    gcrypt_err = gcry_mac_read(mac_hd, t, &read_digest_length);
3517
0
    if (gcrypt_err != 0) {
3518
0
        gcry_mac_close(mac_hd);
3519
0
        return false;
3520
0
    }
3521
3522
    /* Now close the mac handle */
3523
0
    gcry_mac_close(mac_hd);
3524
3525
    /* Open gcrypt handle */
3526
0
    gcrypt_err = gcry_mac_open(&mac_hd, GCRY_MAC_CMAC_AES, 0, NULL);
3527
0
    if (gcrypt_err != 0) {
3528
0
        return false;
3529
0
    }
3530
3531
    /* Set the key */
3532
0
    gcrypt_err = gcry_mac_setkey(mac_hd, &t, 16);
3533
0
    if (gcrypt_err != 0) {
3534
0
        gcry_mac_close(mac_hd);
3535
0
        return false;
3536
0
    }
3537
3538
0
    gcrypt_err = gcry_mac_write(mac_hd, &id6, id6len);
3539
0
    if (gcrypt_err != 0) {
3540
0
        gcry_mac_close(mac_hd);
3541
0
        return false;
3542
0
    }
3543
3544
    /* Read out the digest */
3545
0
    gcrypt_err = gcry_mac_read(mac_hd, t1, &read_digest_length);
3546
0
    if (gcrypt_err != 0) {
3547
0
        gcry_mac_close(mac_hd);
3548
0
        return false;
3549
0
    }
3550
3551
0
    key_set->aid = (t1[15] & 0x3f);
3552
3553
    /* Now close the mac handle */
3554
0
    gcry_mac_close(mac_hd);
3555
0
    return true;
3556
0
}
3557
3558
static bool
3559
create_central_security_keys(uat_btmesh_record_t * net_key_set)
3560
0
{
3561
0
    uint8_t p[1] = { 0 };
3562
0
    size_t plen = 1;
3563
3564
0
    return k2(net_key_set, p, plen);
3565
0
}
3566
3567
static tvbuff_t *
3568
btmesh_deobfuscate(tvbuff_t *tvb, packet_info *pinfo, unsigned offset _U_, uat_btmesh_record_t *net_key_set)
3569
0
{
3570
0
    tvbuff_t *de_obf_tvb = NULL;
3571
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
3576
     */
3577
0
    uint8_t in[16]; /*  0x0000000000 || IV Index || Privacy Random */
3578
0
    gcry_cipher_hd_t cipher_hd;
3579
0
    uint8_t pecb[16];
3580
0
    uint8_t *plaintextnetworkheader = (uint8_t *)wmem_alloc(pinfo->pool, 6);
3581
0
    int i;
3582
3583
    /* at least 1 + 6 + 2 + 1 + 4 + 4 = 18 octets must be present in tvb to decrypt */
3584
0
    if (!tvb_bytes_exist(tvb, 0, 18)) {
3585
0
        return NULL;
3586
0
    }
3587
3588
0
    memset(in, 0x00, 5);
3589
0
    memcpy(&in[5], net_key_set->ivindex, 4);
3590
3591
    /* Privacy random */
3592
0
    tvb_memcpy(tvb, &in[9], 7, 7);
3593
3594
0
    if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_ECB, 0)) {
3595
0
        return NULL;
3596
0
    }
3597
3598
0
    if (gcry_cipher_setkey(cipher_hd, net_key_set->privacykey, 16)) {
3599
0
        gcry_cipher_close(cipher_hd);
3600
0
        return NULL;
3601
0
    }
3602
3603
    /* Decrypt */
3604
0
    if (gcry_cipher_encrypt(cipher_hd, pecb, 16, in, 16)) {
3605
0
        gcry_cipher_close(cipher_hd);
3606
0
        return NULL;
3607
0
    }
3608
3609
    /* Now close the cipher handle */
3610
0
    gcry_cipher_close(cipher_hd);
3611
3612
0
    for ( i = 0; i < 6; i++) {
3613
0
        plaintextnetworkheader[i] = tvb_get_uint8(tvb, i + 1) ^ pecb[i];
3614
0
    }
3615
3616
0
    de_obf_tvb = tvb_new_child_real_data(tvb, plaintextnetworkheader, 6, 6);
3617
0
    return de_obf_tvb;
3618
0
}
3619
3620
static const char *period_interval_unit[] = {"ms", "s", "s", "min"};
3621
static const uint32_t period_interval_multiplier[] = {100, 1, 10, 10};
3622
3623
static void
3624
0
format_publish_period(char *buf, uint32_t value) {
3625
0
    uint32_t idx = (value & 0xC0 ) >> 6;
3626
0
    uint32_t val = (value & 0x3F ) * period_interval_multiplier[idx];
3627
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u %s", val, period_interval_unit[idx]);
3628
0
}
3629
3630
static void
3631
0
format_transmit(char *buf, uint32_t value) {
3632
0
    uint32_t prd = (((value & 0xF8 ) >> 3 ) + 1 ) * 10;
3633
0
    uint32_t ctr = (value & 0x07 );
3634
0
    switch (ctr) {
3635
0
    case 0:
3636
0
        snprintf(buf, ITEM_LABEL_LENGTH, "One transmissions");
3637
0
        break;
3638
3639
0
    default:
3640
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%u transmissions at interval of %u ms", ctr, prd);
3641
0
    }
3642
0
}
3643
3644
static void
3645
0
format_retransmit(char *buf, uint32_t value) {
3646
0
    uint32_t prd = (((value & 0xF8 ) >> 3 ) + 1 ) * 10;
3647
0
    uint32_t ctr = (value & 0x07 );
3648
0
    switch (ctr) {
3649
0
    case 0:
3650
0
        snprintf(buf, ITEM_LABEL_LENGTH, "No retransmissions");
3651
0
        break;
3652
3653
0
    case 1:
3654
0
        snprintf(buf, ITEM_LABEL_LENGTH, "One retransmission after %u ms", prd);
3655
0
        break;
3656
3657
0
    default:
3658
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%u retransmissions at interval of %u ms", ctr, prd);
3659
0
    }
3660
0
}
3661
3662
static void
3663
0
format_interval_steps(char *buf, uint32_t value) {
3664
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u ms (%u)", (value + 1) * 10, value);
3665
0
}
3666
3667
static void
3668
0
format_key_index(char *buf, uint32_t value) {
3669
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x)", value & 0xFFF, value & 0xFFF);
3670
0
}
3671
3672
static void
3673
0
format_key_index_rfu(char *buf, uint32_t value) {
3674
0
    snprintf(buf, ITEM_LABEL_LENGTH, "0x%1x", (value & 0xF000) >> 12);
3675
0
}
3676
3677
static void
3678
0
format_dual_key_index(char *buf, uint32_t value) {
3679
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x), %u (0x%03x)", value & 0xFFF, value & 0xFFF, ( value & 0xFFF000 ) >> 12, ( value & 0xFFF000 ) >> 12);
3680
0
}
3681
3682
static void
3683
0
format_vendor_model(char *buf, uint32_t value) {
3684
0
    snprintf(buf, ITEM_LABEL_LENGTH, "0x%04x of %s", value >> 16, val_to_str_ext_const(value & 0xFFFF, &bluetooth_company_id_vals_ext, "Unknown"));
3685
0
}
3686
3687
static void
3688
0
format_publish_appkeyindex_model(char *buf, uint32_t value) {
3689
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u (0x%03x) using %s security material", value & 0x0FFF, value & 0x0FFF, ((value & 0x1000) ? "Friendship" : "Central"));
3690
0
}
3691
3692
static void
3693
0
format_delay_ms(char *buf, uint32_t value) {
3694
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u ms", value * 5);
3695
0
}
3696
3697
static void
3698
0
format_power(char *buf, uint32_t value) {
3699
0
    double val;
3700
0
    val =  (double)value / (double)655.35;
3701
0
    snprintf(buf, ITEM_LABEL_LENGTH, "% 3.2f %%", val);
3702
0
}
3703
3704
static void
3705
0
format_battery_level(char *buf, uint32_t value) {
3706
0
    if (value == 0xFF) {
3707
0
        snprintf(buf, ITEM_LABEL_LENGTH, "The percentage of the charge level is unknown");
3708
0
        return;
3709
0
    }
3710
0
    if (value <= 0x64) {
3711
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%u %%", value);
3712
0
        return;
3713
0
    }
3714
0
    snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%u)", value);
3715
0
}
3716
3717
static void
3718
0
format_battery_time(char *buf, uint32_t value) {
3719
0
    if (value == 0xFFFFFF) {
3720
0
        snprintf(buf, ITEM_LABEL_LENGTH, "The remaining time is not known");
3721
0
        return;
3722
0
    }
3723
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u minutes", value);
3724
0
}
3725
3726
static void
3727
0
format_global_latitude(char *buf, int32_t value) {
3728
0
    if (value == INT_MIN) {
3729
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Global Latitude is not configured.");
3730
0
        return;
3731
0
    }
3732
0
    double val;
3733
0
    val =  (double)90.0 / (double) (0x7FFFFFFF) * (double)value ;
3734
0
    snprintf(buf, ITEM_LABEL_LENGTH, "% 2.6f°", val);
3735
0
}
3736
3737
static void
3738
0
format_global_longitude(char *buf, int32_t value) {
3739
0
    if (value == INT_MIN) {
3740
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Global Longitude is not configured.");
3741
0
        return;
3742
0
    }
3743
0
    double val;
3744
0
    val =  (double)180.0 / (double) (0x7FFFFFFF) * (double)value;
3745
0
    snprintf(buf, ITEM_LABEL_LENGTH, "% 2.6f°", val);
3746
0
}
3747
3748
static void
3749
0
format_global_altitude(char *buf, int16_t value) {
3750
0
    if (value == 0x7FFF) {
3751
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Global Altitude is not configured.");
3752
0
        return;
3753
0
    }
3754
0
    if (value == 0x7FFE) {
3755
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Global Altitude is greater than or equal to 32766 meters.");
3756
0
        return;
3757
0
    }
3758
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%d meters", value);
3759
0
}
3760
3761
static void
3762
0
format_local_north(char *buf, int16_t value) {
3763
0
    if (value == -32768) {
3764
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Local North information is not configured.");
3765
0
        return;
3766
0
    }
3767
0
    double val;
3768
0
    val =  (double)value / (double) 10.0;
3769
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3770
0
}
3771
3772
static void
3773
0
format_local_east(char *buf, int16_t value) {
3774
0
    if (value == -32768) {
3775
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Local East information is not configured.");
3776
0
        return;
3777
0
    }
3778
0
    double val;
3779
0
    val =  (double)value / (double) 10.0;
3780
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3781
0
}
3782
3783
static void
3784
0
format_local_altitude(char *buf, int16_t value) {
3785
0
    if (value == 0x7FFF) {
3786
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Local Altitude is not configured.");
3787
0
        return;
3788
0
    }
3789
0
    if (value == 0x7FFE) {
3790
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Local Altitude is greater than or equal to 3276.6 meters.");
3791
0
        return;
3792
0
    }
3793
0
    double val;
3794
0
    val =  (double)value / (double) 10.0;
3795
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.1f meters", val);
3796
0
}
3797
3798
static void
3799
0
format_floor_number(char *buf, uint8_t value) {
3800
0
    switch (value) {
3801
0
        case 0x00:
3802
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Floor -20 or any floor below -20.");
3803
0
        break;
3804
3805
0
        case 0xFC:
3806
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Floor 232 or any floor above 232.");
3807
0
        break;
3808
3809
0
        case 0xFD:
3810
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Ground floor. Floor 0.");
3811
0
        break;
3812
3813
0
        case 0xFE:
3814
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Ground floor. Floor 1.");
3815
0
        break;
3816
3817
0
        case 0xFF:
3818
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Not configured.");
3819
0
        break;
3820
3821
0
        default:
3822
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%d", (int16_t)value - (int16_t)20 );
3823
0
        break;
3824
0
    }
3825
0
}
3826
3827
static void
3828
0
format_update_time(char *buf, uint16_t value) {
3829
0
    double val;
3830
0
    val =  pow((double)2.0, (double)(value - 3));
3831
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.*f seconds", (value<4?3-value:0), val);
3832
0
}
3833
3834
static void
3835
0
format_precision(char *buf, uint16_t value) {
3836
0
    double val;
3837
0
    val =  pow((double)2.0, (double)(value - 3));
3838
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.*f meters", (value<4?3-value:0),val);
3839
0
}
3840
3841
static void
3842
0
format_scheduler_year(char *buf, int32_t value) {
3843
0
    if (value <= 0x63) {
3844
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", 2000+value);
3845
0
    } else if (value == 0x64 ) {
3846
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Any year");
3847
0
    } else {
3848
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
3849
0
    }
3850
0
}
3851
3852
static void
3853
0
format_scheduler_day(char *buf, int32_t value) {
3854
0
    if (value > 0x0) {
3855
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3856
0
    } else {
3857
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Any day");
3858
0
    }
3859
0
}
3860
3861
static void
3862
0
format_scheduler_hour(char *buf, int32_t value) {
3863
0
    if (value < 24 ) {
3864
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3865
0
    } else if (value == 0x18 ) {
3866
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Any hour of the day");
3867
0
    } else if (value == 0x19 ) {
3868
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Once a day (at a random hour)");
3869
0
    } else {
3870
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
3871
0
    }
3872
0
}
3873
3874
static void
3875
0
format_scheduler_minute(char *buf, int32_t value) {
3876
0
    switch (value) {
3877
0
        case 0x3C:
3878
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Any minute of the hour");
3879
0
        break;
3880
3881
0
        case 0x3D:
3882
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Every 15 minutes (minute modulo 15 is 0) (0, 15, 30, 45)");
3883
0
        break;
3884
3885
0
        case 0x3E:
3886
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Every 20 minutes (minute modulo 20 is 0) (0, 20, 40)");
3887
0
        break;
3888
3889
0
        case 0x3F:
3890
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Once an hour (at a random minute)");
3891
0
        break;
3892
3893
0
        default:
3894
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3895
0
        break;
3896
0
    }
3897
0
}
3898
3899
static void
3900
0
format_scheduler_second(char *buf, int32_t value) {
3901
0
    switch (value) {
3902
0
        case 0x3C:
3903
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Any second of the minute");
3904
0
        break;
3905
3906
0
        case 0x3D:
3907
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Every 15 seconds (second modulo 15 is 0) (0, 15, 30, 45)");
3908
0
        break;
3909
3910
0
        case 0x3E:
3911
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Every 20 seconds (second modulo 20 is 0) (0, 20, 40)");
3912
0
        break;
3913
3914
0
        case 0x3F:
3915
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Once a minute (at a random second)");
3916
0
        break;
3917
3918
0
        default:
3919
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
3920
0
        break;
3921
0
    }
3922
0
}
3923
3924
static void
3925
0
format_scheduler_action(char *buf, int32_t value) {
3926
0
    switch (value) {
3927
0
        case 0x0:
3928
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Turn Off");
3929
0
        break;
3930
3931
0
        case 0x1:
3932
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Turn On");
3933
0
        break;
3934
3935
0
        case 0x2:
3936
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Scene Recall");
3937
0
        break;
3938
3939
0
        case 0xF:
3940
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Inactive");
3941
0
        break;
3942
3943
0
        default:
3944
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Reserved for Future Use");
3945
0
        break;
3946
0
    }
3947
0
}
3948
3949
static void
3950
0
format_scheduler_month(char *buf, int32_t value) {
3951
0
    static const char ab_month_name[][4] =
3952
0
    {
3953
0
        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
3954
0
        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
3955
0
    };
3956
3957
0
    int i;
3958
0
    bool is_first = true;
3959
3960
0
    *buf = '\0';
3961
0
    for (i = 0; i < 12; i++) {
3962
0
        if (value & (1 << i)) {
3963
0
            if (is_first) {
3964
0
                is_first = false;
3965
0
            } else {
3966
0
                buf = g_stpcpy(buf, ", ");
3967
0
            }
3968
0
            buf = g_stpcpy(buf, ab_month_name[i]);
3969
0
        }
3970
0
    }
3971
0
}
3972
3973
static void
3974
0
format_scheduler_day_of_week(char *buf, int32_t value) {
3975
0
    static char const ab_weekday_name[][4] =
3976
0
    {
3977
0
        "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"
3978
0
    };
3979
3980
0
    int i;
3981
0
    bool is_first = true;
3982
3983
0
    *buf = '\0';
3984
0
    for (i = 0; i < 7; i++) {
3985
0
        if (value & (1 << i)) {
3986
0
            if (is_first) {
3987
0
                is_first = false;
3988
0
            } else {
3989
0
                buf = g_stpcpy(buf, ", ");
3990
0
            }
3991
0
            buf = g_stpcpy(buf, ab_weekday_name[i]);
3992
0
        }
3993
0
    }
3994
0
}
3995
3996
static void
3997
0
format_subsecond_ms(char *buf, uint32_t value) {
3998
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.1f ms", (double)value / 0.256);
3999
0
}
4000
4001
static void
4002
0
format_uncertainty_ms(char *buf, uint32_t value) {
4003
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%u ms", value * 10);
4004
0
}
4005
4006
static void
4007
0
format_tai_utc_delta_s(char *buf, uint32_t value) {
4008
0
    int32_t val = (int32_t)value - 255;
4009
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%d s", val);
4010
0
}
4011
4012
static void
4013
0
format_time_zone_offset_h(char *buf, uint32_t value) {
4014
0
    int32_t val = (int32_t)value - 64;
4015
0
    if (val >= 0) {
4016
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%+d:%02d", val/4, (val%4)*15 );
4017
0
    } else {
4018
0
        val *=-1;
4019
0
        snprintf(buf, ITEM_LABEL_LENGTH, "-%d:%02d", val/4, (val%4)*15 );
4020
0
    }
4021
0
}
4022
4023
static void
4024
0
format_tai_to_utc_date(char *buf, uint64_t value) {
4025
4026
0
    if (value == 0 ) {
4027
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Unknown");
4028
0
    } else {
4029
0
        char *time_str;
4030
0
        time_t val;
4031
4032
        // Leap seconds removal
4033
0
        uint64_t delta = 0;
4034
        // TAI epoch is 2000-01-01T00:00:00 TAI
4035
0
        uint64_t leap_seconds[] = {
4036
0
            189388800, // 1 January 2006, 00:00:00, seconds from TAI epoch
4037
0
            284083200, // 1 January 2009, 00:00:00, seconds from TAI epoch
4038
0
            394416000, // 1 July 2012, 00:00:00, seconds from TAI epoch
4039
0
            489024000, // 1 July 2015, 00:00:00, seconds from TAI epoch
4040
0
            536544000, // 1 January 2017, 00:00:00, seconds from TAI epoch
4041
0
        };
4042
0
        for (int i = 0; i < 5; i++) {
4043
0
            if (value >= leap_seconds[i]) {
4044
0
                delta++;
4045
0
            } else {
4046
0
                break;
4047
0
            }
4048
0
        }
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
0
        val = (time_t)(value + EPOCH_DELTA_2000_01_01_00_00_00_UTC - 32ll - delta);
4052
0
        time_str = abs_time_secs_to_str(NULL, val, ABSOLUTE_TIME_UTC, true);
4053
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%s", time_str);
4054
0
    }
4055
0
}
4056
4057
static void
4058
0
format_temperature_kelvin(char *buf, uint32_t value) {
4059
0
    if (value < 0x0320 ) {
4060
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4061
0
    } else if (value > 0x4E20 ) {
4062
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4063
0
    } else {
4064
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d K", value);
4065
0
    }
4066
0
}
4067
4068
static void
4069
0
format_temperature_kelvin_unknown(char *buf, uint32_t value) {
4070
0
    if (value < 0x0320 ) {
4071
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4072
0
    } else if (value > 0x4E20 && value != 0xFFFF) {
4073
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4074
0
    } else if (value == 0xFFFF ) {
4075
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Unknown");
4076
0
    } else {
4077
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d K", value);
4078
0
    }
4079
0
}
4080
4081
static void
4082
0
format_light_lightness_prohibited(char *buf, uint32_t value) {
4083
0
    if (value == 0x0 ) {
4084
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4085
0
    } else {
4086
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4087
0
    }
4088
0
}
4089
4090
static void
4091
0
format_light_lightness_default(char *buf, uint32_t value) {
4092
0
    if (value == 0x0 ) {
4093
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Use the Light Lightness Last value");
4094
0
    } else {
4095
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4096
0
    }
4097
0
}
4098
4099
static void
4100
0
format_hsl_hue(char *buf, uint32_t value) {
4101
0
    double val;
4102
0
    val =  (double)360.0 / (double) (0x10000) * (double)value;
4103
0
    snprintf(buf, ITEM_LABEL_LENGTH, "% 3.3f°", val);
4104
0
}
4105
4106
static void
4107
0
format_xyl_coordinate(char *buf, uint32_t value) {
4108
0
    double val;
4109
0
    val =  (double)value / (double) (0xFFFF);
4110
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%1.5f", val);
4111
0
}
4112
4113
static void
4114
format_sensor_setting_access(char *buf, uint32_t value)
4115
0
{
4116
0
    if (value == 0x01 ) {
4117
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4118
0
    } else if (value == 0x03) {
4119
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4120
0
    } else {
4121
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4122
0
    }
4123
0
}
4124
4125
static void
4126
format_fast_cadence_period_divisor(char *buf, uint32_t value)
4127
0
{
4128
0
    if (value > 15) {
4129
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4130
0
    } else {
4131
0
        uint32_t v = (1 << value);
4132
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", v);
4133
0
    }
4134
0
}
4135
4136
static void
4137
format_status_min_interval(char *buf, uint32_t value)
4138
0
{
4139
0
    if (value > 26) {
4140
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4141
0
    } else {
4142
0
        uint32_t v = (1 << value);
4143
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d ms", v);
4144
0
    }
4145
0
}
4146
4147
static void
4148
format_admin_user_access(char *buf, uint32_t value)
4149
0
{
4150
0
    switch (value) {
4151
0
        case 0x0:
4152
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Not a Generic User Property");
4153
0
        break;
4154
4155
0
        case 0x1:
4156
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4157
0
        break;
4158
4159
0
        case 0x2:
4160
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be written");
4161
0
        break;
4162
4163
0
        case 0x3:
4164
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4165
0
        break;
4166
4167
0
        default:
4168
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4169
0
        break;
4170
0
    }
4171
0
}
4172
4173
static void
4174
format_manufacturer_user_access(char *buf, uint32_t value)
4175
0
{
4176
0
    if (value == 0x00) {
4177
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Not a Generic User Property");
4178
0
    } else if (value == 0x01) {
4179
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4180
0
    } else {
4181
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4182
0
    }
4183
0
}
4184
4185
static void
4186
format_user_access(char *buf, uint32_t value)
4187
0
{
4188
0
    switch (value) {
4189
0
        case 0x1:
4190
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be read");
4191
0
        break;
4192
4193
0
        case 0x2:
4194
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be written");
4195
0
        break;
4196
4197
0
        case 0x3:
4198
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Can be read and written");
4199
0
        break;
4200
4201
0
        default:
4202
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4203
0
        break;
4204
0
    }
4205
0
}
4206
4207
static void
4208
format_sensor_descriptor_tolerance(char *buf, uint32_t value)
4209
0
{
4210
0
    if (value == 0x000) {
4211
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Unspecified");
4212
0
    } else {
4213
0
        double val;
4214
0
        val =  (double)value / (double)40.95;
4215
0
        snprintf(buf, ITEM_LABEL_LENGTH, "% 3.2f %%", val);
4216
0
    }
4217
0
}
4218
4219
static void
4220
format_sensor_period(char *buf, uint32_t value)
4221
0
{
4222
0
    if (value == 0) {
4223
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Not Applicable");
4224
0
    } else {
4225
0
        double val;
4226
4227
0
        val = pow((double)1.1, (double)value - (double)64.0);
4228
0
        if ( val < 1.0 ) { //Milliseconds
4229
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%.0f ms", val * 1000.0);
4230
0
        } else {
4231
0
            if ( val < 60.0 ) { //Seconds
4232
0
                snprintf(buf, ITEM_LABEL_LENGTH, "%.1f s", val);
4233
0
            } else {
4234
0
                unsigned long v = (unsigned long)val;
4235
0
                    if ( val < 86400 ) { //Hours:Minutes:Seconds
4236
0
                        snprintf(buf, ITEM_LABEL_LENGTH, "%02lu:%02lu:%02lu", v/3600, (v % 3600)/60, v % 60);
4237
0
                    } else { //Days Hours:Minutes:Seconds
4238
0
                        snprintf(buf, ITEM_LABEL_LENGTH, "%lu days %02lu:%02lu:%02lu", v/86400, (v % 86400)/3600, (v % 3600)/60, v % 60);
4239
0
                    }
4240
0
            }
4241
0
        }
4242
0
    }
4243
0
}
4244
4245
static void
4246
format_percentage_change_16(char *buf, uint32_t value)
4247
0
{
4248
0
    double val;
4249
0
    val =  (double)value / (double)(100);
4250
0
    snprintf(buf, ITEM_LABEL_LENGTH, "%.2f %%", val);
4251
0
}
4252
4253
static void
4254
format_decihour_8(char *buf, uint32_t value)
4255
0
{
4256
0
    if (value == 0xFF) {
4257
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4258
0
    } else {
4259
0
        if (value > 240) {
4260
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4261
0
        } else {
4262
0
            double val;
4263
0
            val =  (double)value / (double)(10);
4264
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%.1f h", val);
4265
0
        }
4266
0
    }
4267
0
}
4268
4269
static void
4270
format_temperature_8(char *buf, int32_t value)
4271
0
{
4272
0
    if (value == 0x7F) {
4273
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4274
0
    } else {
4275
0
        double val;
4276
0
        val =  (double)value * (double)(0.5);
4277
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%.1f C", val);
4278
0
    }
4279
0
}
4280
4281
static void
4282
format_temperature(char *buf, int32_t value)
4283
0
{
4284
0
    if (value == INT16_MIN ) {
4285
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4286
0
    } else {
4287
0
        if (value < (int32_t)(-27315)) {
4288
0
            snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited");
4289
0
        } else {
4290
0
            double val;
4291
0
            val =  (double)value / (double)(100);
4292
0
            snprintf(buf, ITEM_LABEL_LENGTH, "%.2f C", val);
4293
0
        }
4294
0
    }
4295
0
}
4296
4297
static void
4298
format_electric_current(char *buf, uint32_t value)
4299
0
{
4300
0
    if (value == 0xFFFF) {
4301
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4302
0
    } else {
4303
0
        double val;
4304
0
        val =  (double)value / (double)(100);
4305
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%.2f A", val);
4306
0
    }
4307
0
}
4308
4309
static void
4310
format_energy(char *buf, uint32_t value)
4311
0
{
4312
0
    if (value == 0xFFFFFF) {
4313
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4314
0
    } else {
4315
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d kWh", value);
4316
0
    }
4317
0
}
4318
4319
static void
4320
0
format_illuminance(char *buf, uint32_t value) {
4321
0
    if (value == 0xFFFFFF) {
4322
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4323
0
    } else {
4324
0
        double val;
4325
0
        val =  (double)value / (double)(100);
4326
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%.2f lux", val);
4327
0
    }
4328
0
}
4329
4330
static void
4331
0
format_percentage_8(char *buf, uint32_t value) {
4332
0
    if (value == 0xFF) {
4333
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4334
0
    } else if (value > 200) {
4335
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4336
0
    } else {
4337
0
        double val;
4338
0
        val =  (double)value / (double)(2);
4339
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%.1f %%", val);
4340
0
    }
4341
0
}
4342
4343
static void
4344
0
format_time_millisecond_24(char *buf, uint32_t value) {
4345
0
    if (value == 0xFFFFFF) {
4346
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4347
0
    } else {
4348
0
        double val;
4349
0
        val =  (double)value / (double)(1000);
4350
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%.2f s", val);
4351
0
    }
4352
0
}
4353
4354
static void
4355
0
format_count_16(char *buf, uint32_t value) {
4356
0
    if (value == 0xFFFF) {
4357
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4358
0
    } else {
4359
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d", value);
4360
0
    }
4361
0
}
4362
4363
static void
4364
0
format_boolean(char *buf, uint32_t value) {
4365
0
    if (value == 0x00) {
4366
0
        snprintf(buf, ITEM_LABEL_LENGTH, "False");
4367
0
    } else if (value == 0x01) {
4368
0
        snprintf(buf, ITEM_LABEL_LENGTH, "True");
4369
0
    } else {
4370
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Prohibited (%d)", value);
4371
0
    }
4372
0
}
4373
4374
static void
4375
0
format_time_second_16(char *buf, uint32_t value) {
4376
0
    if (value == 0xFFFF) {
4377
0
        snprintf(buf, ITEM_LABEL_LENGTH, "Value is not known");
4378
0
    } else {
4379
0
        snprintf(buf, ITEM_LABEL_LENGTH, "%d s", value);
4380
0
    }
4381
0
}
4382
4383
static uint16_t
4384
find_characteristic_id(uint16_t property_id)
4385
0
{
4386
0
    int i;
4387
0
    uint16_t characteristic_id = NOT_SUPPORTED_PROPERTY;
4388
4389
0
    for (i=0; btmesh_properties[i].characteristic_id !=0; i++ ) {
4390
0
        if (btmesh_properties[i].property_id == property_id) {
4391
0
            characteristic_id = btmesh_properties[i].characteristic_id;
4392
0
            break;
4393
0
        }
4394
0
    }
4395
0
    return characteristic_id;
4396
0
}
4397
4398
static int
4399
find_characteristic_idx(uint16_t characteristic_id)
4400
0
{
4401
0
    int i, idx = NOT_SUPPORTED_CHARACTERISTIC;
4402
4403
0
    for (i=0; bt_gatt_characteristics[i].characteristic_id !=0; i++ ) {
4404
0
        if (bt_gatt_characteristics[i].characteristic_id == characteristic_id) {
4405
0
            idx = i;
4406
0
            break;
4407
0
        }
4408
0
    }
4409
0
    return idx;
4410
0
}
4411
4412
static int
4413
find_column_properties_idx(int idx)
4414
0
{
4415
0
    int idx_3 = NOT_SUPPORTED_CHARACTERISTIC;
4416
0
    for (int i=0; btmesh_column_properties[i].characteristic_id !=0; i++ ) {
4417
0
        if (btmesh_column_properties[i].characteristic_id == bt_gatt_characteristics[idx].characteristic_id) {
4418
0
            idx_3 = i;
4419
0
            break;
4420
0
        }
4421
0
    }
4422
0
    return idx_3;
4423
0
}
4424
4425
static uint16_t
4426
dissect_btmesh_property_idx(tvbuff_t *tvb, proto_tree *tree, unsigned offset, int characteristic_idx)
4427
0
{
4428
0
    uint16_t characteristic_value_length = 0;
4429
0
    int hfindex = -1;
4430
0
    proto_item *pi;
4431
4432
0
    if (characteristic_idx < 0) {
4433
0
        return 0;
4434
0
    }
4435
4436
0
    characteristic_value_length = bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4437
0
    if (bt_gatt_characteristics[characteristic_idx].characteristic_value_length == 0) {
4438
0
        return 0;
4439
0
    }
4440
4441
0
    if (bt_gatt_characteristics[characteristic_idx].dissector_type == DISSECTOR_SIMPLE) {
4442
        //DISSECTOR_SIMPLE case
4443
0
        if (bt_gatt_characteristics[characteristic_idx].hfindex == NULL) {
4444
0
            return 0;
4445
0
        }
4446
0
        hfindex = *bt_gatt_characteristics[characteristic_idx].hfindex;
4447
4448
0
        pi = proto_tree_add_item(tree, hfindex, tvb, offset, characteristic_value_length, ENC_LITTLE_ENDIAN);
4449
0
        proto_item_set_generated(pi);
4450
0
    } else {
4451
        //DISSECTOR_THREE_VALUES case
4452
0
        int idx_3 = find_column_properties_idx(characteristic_idx);
4453
0
        if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4454
0
            int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4455
0
            if (idx_x == NOT_SUPPORTED_CHARACTERISTIC ||
4456
0
                bt_gatt_characteristics[idx_x].characteristic_value_length == 0 ||
4457
0
                bt_gatt_characteristics[idx_x].hfindex == NULL ||
4458
0
                bt_gatt_characteristics[idx_x].dissector_type != DISSECTOR_SIMPLE) {
4459
0
                return 0;
4460
0
            }
4461
0
            int idx_y = find_characteristic_idx(btmesh_column_properties[idx_3].y_characteristic_id);
4462
0
            if (idx_y == NOT_SUPPORTED_CHARACTERISTIC ||
4463
0
                bt_gatt_characteristics[idx_y].characteristic_value_length == 0 ||
4464
0
                bt_gatt_characteristics[idx_y].hfindex == NULL ||
4465
0
                bt_gatt_characteristics[idx_y].dissector_type != DISSECTOR_SIMPLE) {
4466
0
                return 0;
4467
0
            }
4468
0
            characteristic_value_length=0;
4469
0
            pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_x].hfindex,
4470
0
                tvb, offset,
4471
0
                bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_LITTLE_ENDIAN);
4472
0
            proto_item_set_generated(pi);
4473
0
            characteristic_value_length+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4474
4475
0
            pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_x].hfindex,
4476
0
                tvb, offset+characteristic_value_length,
4477
0
                bt_gatt_characteristics[idx_x].characteristic_value_length, ENC_LITTLE_ENDIAN);
4478
0
            proto_item_set_generated(pi);
4479
0
            characteristic_value_length+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4480
4481
0
            pi = proto_tree_add_item(tree, *bt_gatt_characteristics[idx_y].hfindex,
4482
0
                tvb, offset+characteristic_value_length,
4483
0
                bt_gatt_characteristics[idx_y].characteristic_value_length, ENC_LITTLE_ENDIAN);
4484
0
            proto_item_set_generated(pi);
4485
0
            characteristic_value_length+=bt_gatt_characteristics[idx_y].characteristic_value_length;
4486
0
        } else {
4487
0
            return 0;
4488
0
        }
4489
0
    }
4490
0
    return characteristic_value_length;
4491
0
}
4492
4493
static int
4494
find_btmesh_property_characteristic_idx(uint16_t property_id)
4495
0
{
4496
0
    int characteristic_idx;
4497
0
    uint16_t characteristic_id = 0;
4498
4499
0
    characteristic_id = find_characteristic_id(property_id);
4500
0
    if (characteristic_id == NOT_SUPPORTED_PROPERTY) {
4501
0
        return NOT_SUPPORTED_CHARACTERISTIC;
4502
0
    }
4503
0
    characteristic_idx = find_characteristic_idx(characteristic_id);
4504
0
    if (characteristic_idx == NOT_SUPPORTED_CHARACTERISTIC) {
4505
0
        return NOT_SUPPORTED_CHARACTERISTIC;
4506
0
    }
4507
0
    return characteristic_idx;
4508
0
}
4509
4510
static int
4511
find_btmesh_property_length(uint16_t property_id)
4512
0
{
4513
0
    int characteristic_idx;
4514
0
    uint16_t characteristic_id = 0;
4515
4516
0
    characteristic_id = find_characteristic_id(property_id);
4517
0
    if (characteristic_id == NOT_SUPPORTED_PROPERTY) {
4518
0
        return 0;
4519
0
    }
4520
0
    characteristic_idx = find_characteristic_idx(characteristic_id);
4521
0
    if (characteristic_idx == NOT_SUPPORTED_CHARACTERISTIC) {
4522
0
        return 0;
4523
0
    }
4524
0
    return bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4525
0
}
4526
4527
static uint16_t
4528
dissect_btmesh_property(proto_tree *tree, int p_id, tvbuff_t *tvb, unsigned offset, uint16_t property_id, int length_hint)
4529
0
{
4530
0
    int characteristic_idx;
4531
0
    int characteristic_length;
4532
0
    int guessed_property_length;
4533
0
    uint16_t delta = 0;
4534
4535
0
    if (length_hint == PROPERTY_LENGTH_NO_HINT) {
4536
0
        guessed_property_length = tvb_reported_length_remaining(tvb, offset);
4537
0
    } else {
4538
0
        guessed_property_length = length_hint;
4539
0
    }
4540
4541
0
    characteristic_idx = find_btmesh_property_characteristic_idx(property_id);
4542
0
    if (characteristic_idx != NOT_SUPPORTED_CHARACTERISTIC) {
4543
0
        characteristic_length = bt_gatt_characteristics[characteristic_idx].characteristic_value_length;
4544
0
        if (characteristic_length > 0 ) {
4545
0
            proto_tree_add_item(tree, p_id, tvb, offset, characteristic_length, ENC_NA);
4546
0
            dissect_btmesh_property_idx(tvb, tree, offset, characteristic_idx);
4547
0
            delta = characteristic_length;
4548
0
        } else {
4549
0
            proto_tree_add_item(tree, p_id, tvb, offset, guessed_property_length, ENC_NA);
4550
0
            delta = guessed_property_length;
4551
0
        }
4552
0
    } else {
4553
0
        proto_tree_add_item(tree, p_id, tvb, offset, guessed_property_length, ENC_NA);
4554
0
        delta = guessed_property_length;
4555
0
    }
4556
0
    return delta;
4557
0
}
4558
4559
static unsigned
4560
dissect_sensor_cadence(proto_tree *tree, tvbuff_t *tvb, unsigned offset, uint16_t property_id, uint8_t trigger_type, const bt_sensor_cadence_dissector_t *sensor_cadence_hfs)
4561
0
{
4562
0
    unsigned initial_offset = offset;
4563
0
    unsigned guessed_property_length;
4564
0
    int      trigger_delta_length = 0;
4565
0
    int      fast_cadence_length = 0;
4566
4567
    //Trigger delta length
4568
0
    if ( trigger_type == SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY) {
4569
        //Find or guess trigger delta and fast cadence fields length
4570
0
        trigger_delta_length = find_btmesh_property_length(property_id);
4571
0
        if (trigger_delta_length == 0) {
4572
            // tvb_reported_length_remaining returns 0 if offset is past the
4573
            // reported bytes, so we check if there's an odd byte for the
4574
            // minimal interval a slightly different way.
4575
0
            guessed_property_length = tvb_reported_length_remaining(tvb, offset);
4576
0
            if (guessed_property_length % 4 == 1) {
4577
0
                trigger_delta_length = guessed_property_length/4;
4578
0
            } else {
4579
                //Failed to guess fields length
4580
0
                trigger_delta_length = PROPERTY_LENGTH_NO_HINT;
4581
0
            }
4582
0
        }
4583
0
        fast_cadence_length = trigger_delta_length;
4584
0
    } else {
4585
        //Trigger delta length is always 2 octets here
4586
0
        trigger_delta_length = 2;
4587
        //Find or guess fast cadence field length
4588
0
        fast_cadence_length = find_btmesh_property_length(property_id);
4589
0
        if (fast_cadence_length == 0) {
4590
0
            guessed_property_length = tvb_reported_length_remaining(tvb, offset + 2 * trigger_delta_length);
4591
0
            if (guessed_property_length % 2 == 1) {
4592
0
                fast_cadence_length = guessed_property_length/2;
4593
0
            } else {
4594
                //Failed to guess field length
4595
0
                fast_cadence_length = PROPERTY_LENGTH_NO_HINT;
4596
0
            }
4597
0
        }
4598
0
    }
4599
4600
0
    if (trigger_delta_length != PROPERTY_LENGTH_NO_HINT) {
4601
        //Trigger delta field length is known, so dissect individual fields
4602
0
        if ( trigger_type == SENSOR_CADENCE_TRIGGER_TYPE_PROPERTY) {
4603
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_down, tvb, offset, property_id, trigger_delta_length);
4604
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_up, tvb, offset, property_id, trigger_delta_length);
4605
0
        } else {
4606
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_down, tvb, offset, PHONY_PROPERTY_PERCENTAGE_CHANGE_16, trigger_delta_length);
4607
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_status_trigger_delta_up, tvb, offset, PHONY_PROPERTY_PERCENTAGE_CHANGE_16, trigger_delta_length);
4608
0
        }
4609
0
        proto_tree_add_item(tree, *sensor_cadence_hfs->hf_status_min_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4610
0
        offset++;
4611
0
        if (fast_cadence_length != PROPERTY_LENGTH_NO_HINT) {
4612
            //Fast cadence field length is known
4613
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_fast_cadence_low, tvb, offset, property_id, fast_cadence_length);
4614
0
            offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_fast_cadence_high, tvb, offset, property_id, fast_cadence_length);
4615
0
        } else {
4616
0
           offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_remainder_not_dissected, tvb, offset, property_id, tvb_reported_length_remaining(tvb, offset));
4617
0
        }
4618
0
    } else {
4619
        //Property field length is unknown, fail to dissect
4620
0
        offset+=dissect_btmesh_property(tree, *sensor_cadence_hfs->hf_remainder_not_dissected, tvb, offset, property_id, tvb_reported_length_remaining(tvb, offset));
4621
0
    }
4622
0
    return offset - initial_offset;
4623
0
}
4624
4625
static unsigned
4626
dissect_property_raw_value_entry(proto_tree *tree, tvbuff_t *tvb, unsigned offset, uint16_t property_id, const bt_property_raw_value_entry_t *property_raw_value_entry_hfs)
4627
0
{
4628
0
    bool display_raw;
4629
0
    int idx;
4630
0
    unsigned initial_offset = offset;
4631
0
    unsigned guessed_field_length;
4632
4633
0
    idx = find_btmesh_property_characteristic_idx(property_id);
4634
0
    display_raw = true;
4635
0
    guessed_field_length = tvb_reported_length_remaining(tvb, offset);
4636
0
    if ( idx != NOT_SUPPORTED_CHARACTERISTIC) {
4637
0
        if (bt_gatt_characteristics[idx].dissector_type == DISSECTOR_SIMPLE) {
4638
            //Single value
4639
0
            offset+=dissect_btmesh_property(tree, *property_raw_value_entry_hfs->hf_raw_value_a, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
4640
0
            display_raw = false;
4641
0
        } else {
4642
            //Three values expected
4643
0
            int idx_3 = find_column_properties_idx(idx);
4644
0
            if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4645
0
                int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4646
0
                if (idx_x != NOT_SUPPORTED_CHARACTERISTIC) {
4647
0
                    if ( bt_gatt_characteristics[idx_x].characteristic_value_length != 0) {
4648
0
                        if (bt_gatt_characteristics[idx_x].hfindex != NULL &&
4649
0
                            bt_gatt_characteristics[idx_x].dissector_type == DISSECTOR_SIMPLE)
4650
0
                        {
4651
                            //Full dissection
4652
0
                            display_raw = false;
4653
0
                            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);
4654
0
                            dissect_btmesh_property_idx(tvb, tree, offset, idx_x);
4655
0
                            offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4656
0
                            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);
4657
0
                            dissect_btmesh_property_idx(tvb, tree, offset, idx_x);
4658
0
                            offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4659
                            //Value C
4660
0
                            int idx_y = find_characteristic_idx(btmesh_column_properties[idx_3].y_characteristic_id);
4661
0
                            if (idx_y != NOT_SUPPORTED_CHARACTERISTIC &&
4662
0
                                bt_gatt_characteristics[idx_y].characteristic_value_length != 0 &&
4663
0
                                bt_gatt_characteristics[idx_y].hfindex != NULL &&
4664
0
                                bt_gatt_characteristics[idx_y].dissector_type == DISSECTOR_SIMPLE)
4665
0
                            {
4666
0
                                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);
4667
0
                                dissect_btmesh_property_idx(tvb, tree, offset, idx_y);
4668
0
                                offset+=bt_gatt_characteristics[idx_y].characteristic_value_length;
4669
0
                            } else {
4670
0
                                proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_c, tvb, offset, tvb_reported_length_remaining(tvb, offset), ENC_NA);
4671
0
                                offset+=tvb_reported_length_remaining(tvb, offset);
4672
0
                            }
4673
0
                        } else {
4674
                            //Raw value, but length is known
4675
0
                            guessed_field_length = bt_gatt_characteristics[idx_x].characteristic_value_length;
4676
0
                        }
4677
0
                    }
4678
0
                }
4679
0
            }
4680
0
        }
4681
0
    }
4682
0
    if (display_raw) {
4683
        //Raw value, no interpretation, just Value A
4684
0
        proto_tree_add_item(tree, *property_raw_value_entry_hfs->hf_raw_value_a, tvb, offset, guessed_field_length, ENC_NA);
4685
0
        offset+=guessed_field_length;
4686
0
    }
4687
0
    return offset - initial_offset;
4688
0
}
4689
4690
static unsigned
4691
dissect_columns_raw_value(proto_tree *sub_tree, tvbuff_t *tvb, unsigned offset, uint16_t property_id, const bt_property_columns_raw_value_t *columns_raw_value_hfs)
4692
0
{
4693
0
    bool display_raw;
4694
0
    int idx;
4695
0
    unsigned initial_offset = offset;
4696
0
    unsigned guessed_field_length;
4697
4698
0
    idx = find_btmesh_property_characteristic_idx(property_id);
4699
0
    display_raw = true;
4700
0
    guessed_field_length = tvb_reported_length_remaining(tvb, offset);
4701
4702
0
    if (columns_raw_value_hfs->hf_raw_value_a2 != NULL && guessed_field_length > 1) {
4703
        //Two values are expected
4704
0
        guessed_field_length = guessed_field_length / 2;
4705
0
    }
4706
4707
0
    if ( idx != NOT_SUPPORTED_CHARACTERISTIC) {
4708
0
        if (bt_gatt_characteristics[idx].dissector_type == DISSECTOR_SIMPLE) {
4709
            //Index - phony characteristics, 2 octets
4710
0
            display_raw = false;
4711
0
            offset+=dissect_btmesh_property(sub_tree, *columns_raw_value_hfs->hf_raw_value_a1, tvb, offset, PHONY_PROPERTY_INDEX, 2);
4712
0
            if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4713
0
                offset+=dissect_btmesh_property(sub_tree, *columns_raw_value_hfs->hf_raw_value_a2, tvb, offset, PHONY_PROPERTY_INDEX, 2);
4714
0
            }
4715
0
        } else {
4716
            //DISSECTOR_THREE_VALUES, first value
4717
0
            int idx_3 = find_column_properties_idx(idx);
4718
0
            if (idx_3 != NOT_SUPPORTED_CHARACTERISTIC) {
4719
0
                int idx_x = find_characteristic_idx(btmesh_column_properties[idx_3].x_characteristic_id);
4720
0
                if (idx_x != NOT_SUPPORTED_CHARACTERISTIC) {
4721
0
                    if ( bt_gatt_characteristics[idx_x].characteristic_value_length != 0) {
4722
0
                        if (bt_gatt_characteristics[idx_x].hfindex != NULL &&
4723
0
                            bt_gatt_characteristics[idx_x].dissector_type == DISSECTOR_SIMPLE)
4724
0
                        {
4725
                            //full dissection
4726
0
                            display_raw = false;
4727
0
                            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);
4728
0
                            dissect_btmesh_property_idx(tvb, sub_tree, offset, idx_x);
4729
0
                            offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4730
0
                            if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4731
0
                                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);
4732
0
                                dissect_btmesh_property_idx(tvb, sub_tree, offset, idx_x);
4733
0
                                offset+=bt_gatt_characteristics[idx_x].characteristic_value_length;
4734
0
                            }
4735
0
                        } else {
4736
                            //raw, but known length
4737
0
                            guessed_field_length = bt_gatt_characteristics[idx_x].characteristic_value_length;
4738
0
                        }
4739
0
                    }
4740
0
                }
4741
0
            }
4742
0
        }
4743
0
    }
4744
0
    if (display_raw) {
4745
        //Raw values, no interpretation
4746
0
        proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a1, tvb, offset, guessed_field_length, ENC_NA);
4747
0
        offset+=guessed_field_length;
4748
0
        if (columns_raw_value_hfs->hf_raw_value_a2 != NULL ) {
4749
0
            proto_tree_add_item(sub_tree, *columns_raw_value_hfs->hf_raw_value_a2, tvb, offset, guessed_field_length, ENC_NA);
4750
0
            offset+=guessed_field_length;
4751
0
        }
4752
0
    }
4753
0
    return offset - initial_offset;
4754
0
}
4755
4756
static void
4757
dissect_btmesh_model_layer(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset)
4758
0
{
4759
0
    proto_tree *sub_tree;
4760
0
    tvbuff_t *payload_tvb;
4761
0
    uint32_t opcode;
4762
0
    uint16_t vendor;
4763
0
    proto_item *netapp_index_item, *app_index_item, *pub_app_index_item, *net_index_item;
4764
0
    proto_item *relayretransmit_index, *transmit_index;
4765
0
    proto_item *publishperiod_item, *publishretransmit_item;
4766
0
    proto_item *month_item, *day_of_week_item, *scheduler_item;
4767
4768
0
    proto_tree *netapp_index_sub_tree, *app_index_sub_tree, *pub_app_index_sub_tree, *net_index_sub_tree;
4769
0
    proto_tree *relayretransmit_sub_tree, *transmit_sub_tree, *subscriptionlist_tree;
4770
0
    proto_tree *publishperiod_sub_tree, *publishretransmit_sub_tree;
4771
0
    proto_tree *element_sub_tree, *model_sub_tree, *vendor_sub_tree;
4772
0
    proto_tree *netkeylist_tree, *appkeylist_tree;
4773
0
    proto_tree *fault_array_tree;
4774
0
    proto_tree *sceneslist_tree, *month_sub_tree, *day_of_week_sub_tree;
4775
0
    proto_tree *scheduler_tree;
4776
0
    proto_tree *user_property_ids_tree;
4777
0
    proto_tree *admin_property_ids_tree;
4778
0
    proto_tree *manufacturer_property_ids_tree;
4779
0
    proto_tree *generic_client_property_ids_tree;
4780
0
    proto_tree *sensor_setting_property_ids_tree;
4781
0
    proto_tree *root_tree = proto_tree_get_parent_tree(tree);
4782
4783
0
    uint32_t netkeyindexes, appkeyindexes;
4784
0
    uint32_t nums, numv, element;
4785
0
    unsigned i;
4786
0
    uint16_t property_id;
4787
0
    uint8_t trigger_type;
4788
0
    uint32_t mpid_format, mpid_property_id, mpid_length;
4789
4790
0
    sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_model_layer, NULL, "Model Layer");
4791
4792
0
    opcode = tvb_get_uint8(tvb, offset);
4793
0
    if (opcode & 0x80) {
4794
0
        if (opcode & 0x40) {
4795
            /* Vendor opcode */
4796
0
            proto_tree_add_item(sub_tree, hf_btmesh_model_layer_vendor_opcode, tvb, offset, 1, ENC_NA);
4797
0
            proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_model_layer_vendor, tvb, offset + 1, 2, ENC_LITTLE_ENDIAN, &vendor);
4798
0
            payload_tvb = tvb_new_subset_remaining(tvb, offset);
4799
0
            col_set_str(pinfo->cinfo, COL_INFO, "Access Message - Vendor Opcode");
4800
0
            dissector_try_uint_with_data(btmesh_model_vendor_dissector_table, vendor, payload_tvb, pinfo, root_tree, true, GUINT_TO_POINTER(vendor));
4801
0
            offset+=3;
4802
0
        } else {
4803
            /* Two octet opcode */
4804
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_model_layer_opcode, tvb, offset, 2, ENC_BIG_ENDIAN, &opcode);
4805
0
            col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(opcode, btmesh_models_opcode_vals, "Access Message Unknown"));
4806
0
            offset+=2;
4807
0
        }
4808
0
    } else {
4809
        /* One octet opcode */
4810
0
        proto_tree_add_item(sub_tree, hf_btmesh_model_layer_opcode, tvb, offset, 1, ENC_BIG_ENDIAN);
4811
0
        col_set_str(pinfo->cinfo, COL_INFO, val_to_str_const(opcode, btmesh_models_opcode_vals, "Access Message Unknown"));
4812
0
        offset++;
4813
0
    }
4814
4815
0
    switch (opcode) {
4816
0
    case CONFIG_APPKEY_ADD:
4817
0
        netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4818
0
        netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4819
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4820
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4821
0
        offset+=3;
4822
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_add_appkey, tvb, offset, 16, ENC_NA);
4823
0
        offset+=16;
4824
0
        break;
4825
0
    case CONFIG_APPKEY_UPDATE:
4826
0
        netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4827
0
        netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4828
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4829
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4830
0
        offset+=3;
4831
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_update_appkey, tvb, offset, 16, ENC_NA);
4832
0
        offset+=16;
4833
0
        break;
4834
0
    case CONFIG_COMPOSITION_DATA_STATUS:
4835
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_page, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4836
0
        offset++;
4837
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_cid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4838
0
        offset+=2;
4839
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_pid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4840
0
        offset+=2;
4841
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_vid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4842
0
        offset+=2;
4843
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_status_crpl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4844
0
        offset+=2;
4845
0
        proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
4846
0
            hf_btmesh_config_composition_data_status_features,
4847
0
            ett_btmesh_config_composition_data_status_features,
4848
0
            config_composition_data_status_features_headers,
4849
0
            ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
4850
0
        offset+=2;
4851
        /* Elements */
4852
0
        element = 1;
4853
0
        while (tvb_reported_length_remaining(tvb, offset) > 2) {
4854
0
            nums = tvb_get_uint8(tvb, offset + 2 );
4855
0
            numv = tvb_get_uint8(tvb, offset + 2 + 1);
4856
0
            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);
4857
0
            proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_loc, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4858
0
            offset+=2;
4859
0
            proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_nums, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4860
0
            offset++;
4861
0
            proto_tree_add_item(element_sub_tree, hf_btmesh_config_composition_data_status_numv, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4862
0
            offset++;
4863
0
            if (nums > 0 ) {
4864
0
                model_sub_tree = proto_tree_add_subtree(element_sub_tree, tvb, offset, nums * 2, ett_btmesh_config_model_model, NULL, "SIG Models");
4865
0
                for (i = 0; i < nums; i++) {
4866
0
                    proto_tree_add_item(model_sub_tree, hf_btmesh_config_composition_data_status_sig_model, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4867
0
                    offset+=2;
4868
0
                }
4869
0
            }
4870
0
            if (numv > 0 ) {
4871
0
                vendor_sub_tree = proto_tree_add_subtree(element_sub_tree, tvb, offset, numv * 4, ett_btmesh_config_model_vendor, NULL, "Vendor Models");
4872
0
                for (i = 0; i < numv; i++) {
4873
0
                    proto_tree_add_item(vendor_sub_tree, hf_btmesh_config_composition_data_status_vendor_model, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4874
0
                    offset+=4;
4875
0
                }
4876
0
            }
4877
0
            element++;
4878
0
        }
4879
0
        break;
4880
0
    case CONFIG_MODEL_PUBLICATION_SET:
4881
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4882
0
        offset+=2;
4883
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4884
0
        offset+=2;
4885
0
        pub_app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_appkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4886
0
        pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
4887
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4888
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4889
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_set_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4890
0
        offset+=2;
4891
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4892
0
        offset++;
4893
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4894
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
4895
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_set_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4896
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_set_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4897
0
        offset++;
4898
0
        publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4899
0
        publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
4900
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_set_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4901
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4902
0
        offset++;
4903
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
4904
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
4905
0
            offset+=4;
4906
0
        } else {
4907
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_set_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4908
0
            offset+=2;
4909
0
        }
4910
0
        break;
4911
0
    case HEALTH_CURRENT_STATUS:
4912
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_current_status_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4913
0
        offset++;
4914
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_current_status_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4915
0
        offset+=2;
4916
0
        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");
4917
0
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
4918
0
            proto_tree_add_item(fault_array_tree, hf_btmesh_health_current_status_fault, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4919
0
            offset++;
4920
0
        }
4921
0
        break;
4922
0
    case HEALTH_FAULT_STATUS:
4923
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_status_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4924
0
        offset++;
4925
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_status_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4926
0
        offset+=2;
4927
0
        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");
4928
0
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
4929
0
            proto_tree_add_item(fault_array_tree, hf_btmesh_health_fault_status_fault, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4930
0
            offset++;
4931
0
        }
4932
0
        break;
4933
0
    case CONFIG_HEARTBEAT_PUBLICATION_STATUS:
4934
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4935
0
        offset++;
4936
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4937
0
        offset+=2;
4938
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4939
0
        offset++;
4940
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4941
0
        offset++;
4942
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4943
0
        offset++;
4944
0
        proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
4945
0
            hf_btmesh_config_heartbeat_publication_status_features,
4946
0
            ett_btmesh_config_heartbeat_publication_status_features,
4947
0
            config_heartbeat_publication_status_features_headers,
4948
0
            ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
4949
0
        offset+=2;
4950
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4951
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4952
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4953
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4954
0
        offset+=2;
4955
0
        break;
4956
0
    case CONFIG_APPKEY_DELETE:
4957
0
        netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4958
0
        netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4959
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4960
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4961
0
        offset+=3;
4962
0
        break;
4963
0
    case CONFIG_APPKEY_GET:
4964
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4965
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4966
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4967
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4968
0
        offset+=2;
4969
0
        break;
4970
0
    case CONFIG_APPKEY_LIST:
4971
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4972
0
        offset++;
4973
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_list_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4974
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
4975
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_list_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4976
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_appkey_list_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
4977
0
        offset+=2;
4978
0
        appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
4979
0
        while (tvb_reported_length_remaining(tvb, offset) >= 2) {
4980
0
            if (tvb_reported_length_remaining(tvb, offset) >= 3) {
4981
0
                appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
4982
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
4983
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
4984
0
                offset+=3;
4985
0
            } else {
4986
0
                appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
4987
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
4988
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_appkey_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
4989
0
                offset+=2;
4990
0
            }
4991
0
        }
4992
0
        break;
4993
0
    case CONFIG_APPKEY_STATUS:
4994
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
4995
0
        offset++;
4996
0
        netapp_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4997
0
        netapp_index_sub_tree = proto_item_add_subtree(netapp_index_item, ett_btmesh_config_model_netapp_index);
4998
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net, tvb, offset, 3, ENC_LITTLE_ENDIAN);
4999
0
        proto_tree_add_item(netapp_index_sub_tree, hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5000
0
        offset+=3;
5001
0
        break;
5002
0
    case HEALTH_ATTENTION_GET:
5003
0
        break;
5004
0
    case HEALTH_ATTENTION_SET:
5005
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_attention_set_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5006
0
        offset++;
5007
0
        break;
5008
0
    case HEALTH_ATTENTION_SET_UNACKNOWLEDGED:
5009
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_attention_set_unacknowledged_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5010
0
        offset++;
5011
0
        break;
5012
0
    case HEALTH_ATTENTION_STATUS:
5013
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_attention_status_attention, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5014
0
        offset++;
5015
0
        break;
5016
0
    case CONFIG_COMPOSITION_DATA_GET:
5017
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_composition_data_get_page, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5018
0
        offset++;
5019
0
        break;
5020
0
    case CONFIG_BEACON_GET:
5021
0
        break;
5022
0
    case CONFIG_BEACON_SET:
5023
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_beacon_set_beacon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5024
0
        offset++;
5025
0
        break;
5026
0
    case CONFIG_BEACON_STATUS:
5027
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_beacon_status_beacon, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5028
0
        offset++;
5029
0
        break;
5030
0
    case CONFIG_DEFAULT_TTL_GET:
5031
0
        break;
5032
0
    case CONFIG_DEFAULT_TTL_SET:
5033
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_default_ttl_set_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5034
0
        offset++;
5035
0
        break;
5036
0
    case CONFIG_DEFAULT_TTL_STATUS:
5037
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_default_ttl_status_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5038
0
        offset++;
5039
0
        break;
5040
0
    case CONFIG_FRIEND_GET:
5041
0
        break;
5042
0
    case CONFIG_FRIEND_SET:
5043
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_friend_set_friend, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5044
0
        offset++;
5045
0
        break;
5046
0
    case CONFIG_FRIEND_STATUS:
5047
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_friend_status_friend, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5048
0
        offset++;
5049
0
        break;
5050
0
    case CONFIG_GATT_PROXY_GET:
5051
0
        break;
5052
0
    case CONFIG_GATT_PROXY_SET:
5053
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_gatt_proxy_set_gattproxy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5054
0
        offset++;
5055
0
        break;
5056
0
    case CONFIG_GATT_PROXY_STATUS:
5057
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_gatt_proxy_status_gattproxy, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5058
0
        offset++;
5059
0
        break;
5060
0
    case CONFIG_KEY_REFRESH_PHASE_GET:
5061
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5062
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5063
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5064
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5065
0
        offset+=2;
5066
0
        break;
5067
0
    case CONFIG_KEY_REFRESH_PHASE_SET:
5068
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5069
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5070
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5071
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5072
0
        offset+=2;
5073
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_set_transition, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5074
0
        offset++;
5075
0
        break;
5076
0
    case CONFIG_KEY_REFRESH_PHASE_STATUS:
5077
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5078
0
        offset++;
5079
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5080
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5081
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5082
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5083
0
        offset+=2;
5084
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_key_refresh_phase_status_phase, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5085
0
        offset++;
5086
0
        break;
5087
0
    case CONFIG_MODEL_PUBLICATION_GET:
5088
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5089
0
        offset+=2;
5090
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5091
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5092
0
            offset+=4;
5093
0
        } else {
5094
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5095
0
            offset+=2;
5096
0
        }
5097
0
        break;
5098
0
    case CONFIG_MODEL_PUBLICATION_STATUS:
5099
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5100
0
        offset++;
5101
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5102
0
        offset+=2;
5103
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5104
0
        offset+=2;
5105
0
        pub_app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_appkey, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5106
0
        pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
5107
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5108
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5109
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_status_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5110
0
        offset+=2;
5111
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5112
0
        offset++;
5113
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5114
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5115
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_status_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5116
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_status_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5117
0
        offset++;
5118
0
        publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5119
0
        publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
5120
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_status_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5121
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5122
0
        offset++;
5123
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5124
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5125
0
            offset+=4;
5126
0
        } else {
5127
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5128
0
            offset+=2;
5129
0
        }
5130
0
        break;
5131
0
    case CONFIG_MODEL_PUBLICATION_VIRTUAL_ADDRESS_SET:
5132
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5133
0
        offset+=2;
5134
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishaddress, tvb, offset, 16, ENC_NA);
5135
0
        offset+=16;
5136
0
        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);
5137
0
        pub_app_index_sub_tree= proto_item_add_subtree(pub_app_index_item, ett_btmesh_config_model_pub_app_index);
5138
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5139
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_credentialflag, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5140
0
        proto_tree_add_item(pub_app_index_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5141
0
        offset+=2;
5142
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5143
0
        offset++;
5144
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5145
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5146
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5147
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5148
0
        offset++;
5149
0
        publishretransmit_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5150
0
        publishretransmit_sub_tree = proto_item_add_subtree(publishretransmit_item, ett_btmesh_config_model_publishretransmit);
5151
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5152
0
        proto_tree_add_item(publishretransmit_sub_tree, hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5153
0
        offset++;
5154
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5155
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5156
0
            offset+=4;
5157
0
        } else {
5158
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_publication_virtual_address_set_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5159
0
            offset+=2;
5160
0
        }
5161
0
        break;
5162
0
    case CONFIG_MODEL_SUBSCRIPTION_ADD:
5163
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5164
0
        offset+=2;
5165
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5166
0
        offset+=2;
5167
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5168
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5169
0
            offset+=4;
5170
0
        } else {
5171
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_add_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5172
0
            offset+=2;
5173
0
        }
5174
0
        break;
5175
0
    case CONFIG_MODEL_SUBSCRIPTION_DELETE:
5176
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5177
0
        offset+=2;
5178
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5179
0
        offset+=2;
5180
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5181
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5182
0
            offset+=4;
5183
0
        } else {
5184
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5185
0
            offset+=2;
5186
0
        }
5187
0
        break;
5188
0
    case CONFIG_MODEL_SUBSCRIPTION_DELETE_ALL:
5189
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5190
0
        offset+=2;
5191
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5192
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5193
0
            offset+=4;
5194
0
        } else {
5195
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_delete_all_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5196
0
            offset+=2;
5197
0
        }
5198
0
        break;
5199
0
    case CONFIG_MODEL_SUBSCRIPTION_OVERWRITE:
5200
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5201
0
        offset+=2;
5202
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5203
0
        offset+=2;
5204
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5205
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5206
0
            offset+=4;
5207
0
        } else {
5208
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_overwrite_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5209
0
            offset+=2;
5210
0
        }
5211
0
        break;
5212
0
    case CONFIG_MODEL_SUBSCRIPTION_STATUS:
5213
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5214
0
        offset++;
5215
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5216
0
        offset+=2;
5217
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5218
0
        offset+=2;
5219
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5220
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5221
0
            offset+=4;
5222
0
        } else {
5223
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5224
0
            offset+=2;
5225
0
        }
5226
0
        break;
5227
0
    case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_ADD:
5228
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5229
0
        offset+=2;
5230
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_label, tvb, offset, 16, ENC_NA);
5231
0
        offset+=16;
5232
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5233
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5234
0
            offset+=4;
5235
0
        } else {
5236
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5237
0
            offset+=2;
5238
0
        }
5239
0
        break;
5240
0
    case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_DELETE:
5241
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5242
0
        offset+=2;
5243
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_label, tvb, offset, 16, ENC_NA);
5244
0
        offset+=16;
5245
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5246
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5247
0
            offset+=4;
5248
0
        } else {
5249
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5250
0
            offset+=2;
5251
0
        }
5252
0
        break;
5253
0
    case CONFIG_MODEL_SUBSCRIPTION_VIRTUAL_ADDRESS_OVERWRITE:
5254
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5255
0
        offset+=2;
5256
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_label, tvb, offset, 16, ENC_NA);
5257
0
        offset+=16;
5258
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5259
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5260
0
            offset+=4;
5261
0
        } else {
5262
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5263
0
            offset+=2;
5264
0
        }
5265
0
        break;
5266
0
    case CONFIG_NETWORK_TRANSMIT_GET:
5267
0
        break;
5268
0
    case CONFIG_NETWORK_TRANSMIT_SET:
5269
0
        transmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_network_transmit_set_networktransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5270
0
        transmit_sub_tree = proto_item_add_subtree(transmit_index, ett_btmesh_config_model_network_transmit);
5271
0
        proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_set_networktransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5272
0
        proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5273
0
        offset++;
5274
0
        break;
5275
0
    case CONFIG_NETWORK_TRANSMIT_STATUS:
5276
0
        transmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_network_transmit_status_networktransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5277
0
        transmit_sub_tree = proto_item_add_subtree(transmit_index, ett_btmesh_config_model_network_transmit);
5278
0
        proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_status_networktransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5279
0
        proto_tree_add_item(transmit_sub_tree, hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5280
0
        offset++;
5281
0
        break;
5282
0
    case CONFIG_RELAY_GET:
5283
0
        break;
5284
0
    case CONFIG_RELAY_SET:
5285
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_relay_set_relay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5286
0
        offset++;
5287
0
        relayretransmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_relay_set_relayretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5288
0
        relayretransmit_sub_tree = proto_item_add_subtree(relayretransmit_index, ett_btmesh_config_model_relayretransmit);
5289
0
        proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_set_relayretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5290
0
        proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_set_relayretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5291
0
        offset++;
5292
0
        break;
5293
0
    case CONFIG_RELAY_STATUS:
5294
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_relay_status_relay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5295
0
        offset++;
5296
0
        relayretransmit_index = proto_tree_add_item(sub_tree, hf_btmesh_config_relay_status_relayretransmit, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5297
0
        relayretransmit_sub_tree = proto_item_add_subtree(relayretransmit_index, ett_btmesh_config_model_relayretransmit);
5298
0
        proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_status_relayretransmit_count, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5299
0
        proto_tree_add_item(relayretransmit_sub_tree, hf_btmesh_config_relay_status_relayretransmit_intervalsteps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5300
0
        offset++;
5301
0
        break;
5302
0
    case CONFIG_SIG_MODEL_SUBSCRIPTION_GET:
5303
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5304
0
        offset+=2;
5305
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5306
0
        offset+=2;
5307
0
        break;
5308
0
    case CONFIG_SIG_MODEL_SUBSCRIPTION_LIST:
5309
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5310
0
        offset++;
5311
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5312
0
        offset+=2;
5313
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_subscription_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5314
0
        offset+=2;
5315
0
        subscriptionlist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_addresses, NULL, "Addresses");
5316
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
5317
0
            proto_tree_add_item(subscriptionlist_tree, hf_btmesh_config_sig_model_subscription_list_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5318
0
            offset+=2;
5319
0
        }
5320
0
        break;
5321
0
    case CONFIG_VENDOR_MODEL_SUBSCRIPTION_GET:
5322
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5323
0
        offset+=2;
5324
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_get_modelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5325
0
        offset+=4;
5326
0
        break;
5327
0
    case CONFIG_VENDOR_MODEL_SUBSCRIPTION_LIST:
5328
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5329
0
        offset++;
5330
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5331
0
        offset+=2;
5332
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_subscription_list_modelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5333
0
        offset+=4;
5334
0
        subscriptionlist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_addresses, NULL, "Addresses");
5335
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
5336
0
            proto_tree_add_item(subscriptionlist_tree, hf_btmesh_config_vendor_model_subscription_list_address, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5337
0
            offset+=2;
5338
0
        }
5339
0
        break;
5340
0
    case CONFIG_LOW_POWER_NODE_POLLTIMEOUT_GET:
5341
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5342
0
        offset+=2;
5343
0
        break;
5344
0
    case CONFIG_LOW_POWER_NODE_POLLTIMEOUT_STATUS:
5345
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5346
0
        offset+=2;
5347
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_low_power_node_polltimeout_status_polltimeout, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5348
0
        offset+=3;
5349
0
        break;
5350
0
    case HEALTH_FAULT_CLEAR:
5351
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_clear_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5352
0
        offset+=2;
5353
0
        break;
5354
0
    case HEALTH_FAULT_CLEAR_UNACKNOWLEDGED:
5355
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_clear_unacknowledged_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5356
0
        offset+=2;
5357
0
        break;
5358
0
    case HEALTH_FAULT_GET:
5359
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_get_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5360
0
        offset+=2;
5361
0
        break;
5362
0
    case HEALTH_FAULT_TEST:
5363
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5364
0
        offset++;
5365
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5366
0
        offset+=2;
5367
0
        break;
5368
0
    case HEALTH_FAULT_TEST_UNACKNOWLEDGED:
5369
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_unacknowledged_test_id, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5370
0
        offset++;
5371
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_fault_test_unacknowledged_company_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5372
0
        offset+=2;
5373
0
        break;
5374
0
    case HEALTH_PERIOD_GET:
5375
0
        break;
5376
0
    case HEALTH_PERIOD_SET:
5377
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_period_set_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5378
0
        offset++;
5379
0
        break;
5380
0
    case HEALTH_PERIOD_SET_UNACKNOWLEDGED:
5381
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_period_set_unacknowledged_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5382
0
        offset++;
5383
0
        break;
5384
0
    case HEALTH_PERIOD_STATUS:
5385
0
        proto_tree_add_item(sub_tree, hf_btmesh_health_period_status_fast_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5386
0
        offset++;
5387
0
        break;
5388
0
    case CONFIG_HEARTBEAT_PUBLICATION_GET:
5389
0
        break;
5390
0
    case CONFIG_HEARTBEAT_PUBLICATION_SET:
5391
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5392
0
        offset+=2;
5393
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5394
0
        offset++;
5395
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5396
0
        offset++;
5397
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_ttl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5398
0
        offset++;
5399
0
        proto_tree_add_bitmask_with_flags(sub_tree, tvb, offset,
5400
0
            hf_btmesh_config_heartbeat_publication_set_features,
5401
0
            ett_btmesh_config_heartbeat_publication_set_features,
5402
0
            config_heartbeat_publication_set_features_headers,
5403
0
            ENC_LITTLE_ENDIAN, BMT_NO_APPEND);
5404
0
        offset+=2;
5405
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5406
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5407
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5408
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5409
0
        offset+=2;
5410
0
        break;
5411
0
    case CONFIG_HEARTBEAT_SUBSCRIPTION_GET:
5412
0
        break;
5413
0
    case CONFIG_HEARTBEAT_SUBSCRIPTION_SET:
5414
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5415
0
        offset+=2;
5416
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5417
0
        offset+=2;
5418
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_set_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5419
0
        offset++;
5420
0
        break;
5421
0
    case CONFIG_HEARTBEAT_SUBSCRIPTION_STATUS:
5422
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5423
0
        offset++;
5424
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_source, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5425
0
        offset+=2;
5426
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_destination, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5427
0
        offset+=2;
5428
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_periodlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5429
0
        offset++;
5430
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_countlog, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5431
0
        offset++;
5432
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_minhops, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5433
0
        offset++;
5434
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_heartbeat_subscription_status_maxhops, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5435
0
        offset++;
5436
0
        break;
5437
0
    case CONFIG_MODEL_APP_BIND:
5438
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5439
0
        offset+=2;
5440
0
        app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5441
0
        app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5442
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_bind_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5443
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_bind_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5444
0
        offset+=2;
5445
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5446
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5447
0
            offset+=4;
5448
0
        } else {
5449
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_bind_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5450
0
            offset+=2;
5451
0
        }
5452
0
        break;
5453
0
    case CONFIG_MODEL_APP_STATUS:
5454
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5455
0
        offset++;
5456
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5457
0
        offset+=2;
5458
0
        app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5459
0
        app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5460
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_status_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5461
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_status_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5462
0
        offset+=2;
5463
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5464
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5465
0
            offset+=4;
5466
0
        } else {
5467
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_status_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5468
0
            offset+=2;
5469
0
        }
5470
0
        break;
5471
0
    case CONFIG_MODEL_APP_UNBIND:
5472
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5473
0
        offset+=2;
5474
0
        app_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5475
0
        app_index_sub_tree = proto_item_add_subtree(app_index_item, ett_btmesh_config_model_app_index);
5476
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5477
0
        proto_tree_add_item(app_index_sub_tree, hf_btmesh_config_model_app_unbind_appkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5478
0
        offset+=2;
5479
0
        if (tvb_reported_length_remaining(tvb, offset) > 2) {
5480
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_vendormodelidentifier, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5481
0
            offset+=4;
5482
0
        } else {
5483
0
            proto_tree_add_item(sub_tree, hf_btmesh_config_model_app_unbind_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5484
0
            offset+=2;
5485
0
        }
5486
0
        break;
5487
0
    case CONFIG_NETKEY_ADD:
5488
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_add_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5489
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5490
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_add_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5491
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_add_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5492
0
        offset+=2;
5493
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_add_netkey, tvb, offset, 16, ENC_NA);
5494
0
        offset+=16;
5495
0
        break;
5496
0
    case CONFIG_NETKEY_DELETE:
5497
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_delete_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5498
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5499
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_delete_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5500
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_delete_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5501
0
        offset+=2;
5502
0
        break;
5503
0
    case CONFIG_NETKEY_GET:
5504
0
        break;
5505
0
    case CONFIG_NETKEY_LIST:
5506
0
        netkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_netkey_list, NULL, "NetKeyIndexes");
5507
0
        while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5508
0
            if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5509
0
                netkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5510
0
                proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset, 2, netkeyindexes & 0x000FFF);
5511
0
                proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset + 1, 2, (netkeyindexes >> 12 ) & 0x000FFF);
5512
0
                offset+=3;
5513
0
            } else {
5514
0
                netkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5515
0
                proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex, tvb, offset, 2, netkeyindexes & 0x0FFF);
5516
0
                proto_tree_add_uint(netkeylist_tree, hf_btmesh_config_netkey_list_netkeyindex_rfu, tvb, offset, 2, (netkeyindexes >> 12 ) & 0xF);
5517
0
                offset+=2;
5518
0
            }
5519
0
        }
5520
0
        break;
5521
0
    case CONFIG_NETKEY_STATUS:
5522
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5523
0
        offset++;
5524
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5525
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5526
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5527
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5528
0
        offset+=2;
5529
0
        break;
5530
0
    case CONFIG_NETKEY_UPDATE:
5531
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_update_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5532
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5533
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_update_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5534
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_netkey_update_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5535
0
        offset+=2;
5536
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_netkey_update_netkey, tvb, offset, 16, ENC_NA);
5537
0
        offset+=16;
5538
0
        break;
5539
0
    case CONFIG_NODE_IDENTITY_GET:
5540
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_get_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5541
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5542
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_get_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5543
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_get_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5544
0
        offset+=2;
5545
0
        break;
5546
0
    case CONFIG_NODE_IDENTITY_SET:
5547
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_set_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5548
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5549
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_set_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5550
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_set_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5551
0
        offset+=2;
5552
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_set_identity, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5553
0
        offset++;
5554
0
        break;
5555
0
    case CONFIG_NODE_IDENTITY_STATUS:
5556
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5557
0
        offset++;
5558
0
        net_index_item = proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_netkeyindex, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5559
0
        net_index_sub_tree = proto_item_add_subtree(net_index_item, ett_btmesh_config_model_net_index);
5560
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_status_netkeyindex_idx, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5561
0
        proto_tree_add_item(net_index_sub_tree, hf_btmesh_config_node_identity_status_netkeyindex_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5562
0
        offset+=2;
5563
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_node_identity_status_identity, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5564
0
        offset++;
5565
0
        break;
5566
0
    case CONFIG_NODE_RESET:
5567
0
        break;
5568
0
    case CONFIG_NODE_RESET_STATUS:
5569
0
        break;
5570
0
    case CONFIG_SIG_MODEL_APP_GET:
5571
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5572
0
        offset+=2;
5573
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5574
0
        offset+=2;
5575
0
        break;
5576
0
    case CONFIG_SIG_MODEL_APP_LIST:
5577
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5578
0
        offset++;
5579
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5580
0
        offset+=2;
5581
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_sig_model_app_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5582
0
        offset+=2;
5583
0
        appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
5584
0
        while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5585
0
            if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5586
0
                appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5587
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
5588
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
5589
0
                offset+=3;
5590
0
            } else {
5591
0
                appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5592
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
5593
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_sig_model_app_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
5594
0
                offset+=2;
5595
0
            }
5596
0
        }
5597
0
        break;
5598
0
    case CONFIG_VENDOR_MODEL_APP_GET:
5599
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_get_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5600
0
        offset+=2;
5601
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_get_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5602
0
        offset+=4;
5603
0
        break;
5604
0
    case CONFIG_VENDOR_MODEL_APP_LIST:
5605
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_status, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5606
0
        offset++;
5607
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_elementaddress, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5608
0
        offset+=2;
5609
0
        proto_tree_add_item(sub_tree, hf_btmesh_config_vendor_model_app_list_modelidentifier, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5610
0
        offset+=4;
5611
0
        appkeylist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_config_model_appkey_list, NULL, "AppKeyIndexes");
5612
0
        while (tvb_reported_length_remaining(tvb, offset) >= 2) {
5613
0
            if (tvb_reported_length_remaining(tvb, offset) >= 3) {
5614
0
                appkeyindexes = tvb_get_uint24(tvb, offset, ENC_LITTLE_ENDIAN);
5615
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x000FFF);
5616
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset + 1, 2, (appkeyindexes >> 12 ) & 0x000FFF);
5617
0
                offset+=3;
5618
0
            } else {
5619
0
                appkeyindexes = tvb_get_uint16(tvb, offset, ENC_LITTLE_ENDIAN);
5620
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex, tvb, offset, 2, appkeyindexes & 0x0FFF);
5621
0
                proto_tree_add_uint(appkeylist_tree, hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu, tvb, offset, 2, (appkeyindexes >> 12 ) & 0xF);
5622
0
                offset+=2;
5623
0
            }
5624
0
        }
5625
0
        break;
5626
//
5627
//  ******************************************************************************************
5628
//
5629
0
    case GENERIC_LOCATION_GLOBAL_STATUS:
5630
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5631
0
        offset+=4;
5632
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5633
0
        offset+=4;
5634
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_status_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5635
0
        offset+=2;
5636
0
        break;
5637
0
    case GENERIC_LOCATION_GLOBAL_SET:
5638
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5639
0
        offset+=4;
5640
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5641
0
        offset+=4;
5642
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5643
0
        offset+=2;
5644
0
        break;
5645
0
    case GENERIC_LOCATION_GLOBAL_SET_UNACKNOWLEDGED:
5646
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_latitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5647
0
        offset+=4;
5648
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_longitude, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5649
0
        offset+=4;
5650
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_global_set_unacknowledged_global_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5651
0
        offset+=2;
5652
0
        break;
5653
0
    case GENERIC_ONOFF_GET:
5654
0
        break;
5655
0
    case GENERIC_ONOFF_SET:
5656
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5657
0
        offset++;
5658
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5659
0
        offset++;
5660
        /* Optional */
5661
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5662
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5663
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5664
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5665
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5666
0
            offset++;
5667
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5668
0
            offset++;
5669
0
        }
5670
0
        break;
5671
0
    case GENERIC_ONOFF_SET_UNACKNOWLEDGED:
5672
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5673
0
        offset++;
5674
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5675
0
        offset++;
5676
        /* Optional */
5677
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5678
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5679
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5680
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5681
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5682
0
            offset++;
5683
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5684
0
            offset++;
5685
0
        }
5686
0
        break;
5687
0
    case GENERIC_ONOFF_STATUS:
5688
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_present_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5689
0
        offset++;
5690
        /* Optional */
5691
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5692
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_target_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5693
0
            offset++;
5694
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_onoff_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5695
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5696
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5697
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_onoff_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5698
0
            offset++;
5699
0
        }
5700
0
        break;
5701
0
    case GENERIC_LEVEL_GET:
5702
0
        break;
5703
0
    case GENERIC_LEVEL_SET:
5704
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5705
0
        offset+=2;
5706
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5707
0
        offset++;
5708
        /* Optional */
5709
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5710
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5711
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5712
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5713
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5714
0
            offset++;
5715
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5716
0
            offset++;
5717
0
        }
5718
0
        break;
5719
0
    case GENERIC_LEVEL_SET_UNACKNOWLEDGED:
5720
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5721
0
        offset+=2;
5722
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5723
0
        offset++;
5724
        /* Optional */
5725
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5726
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5727
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5728
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5729
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5730
0
            offset++;
5731
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_level_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5732
0
            offset++;
5733
0
        }
5734
0
        break;
5735
0
    case GENERIC_LEVEL_STATUS:
5736
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_present_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5737
0
        offset+=2;
5738
        /* Optional */
5739
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5740
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_target_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5741
0
            offset+=2;
5742
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_level_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5743
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5744
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5745
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_level_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5746
0
            offset++;
5747
0
        }
5748
0
        break;
5749
0
    case GENERIC_DELTA_SET:
5750
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_delta_level, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5751
0
        offset+=4;
5752
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5753
0
        offset++;
5754
        /* Optional */
5755
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5756
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5757
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5758
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5759
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5760
0
            offset++;
5761
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5762
0
            offset++;
5763
0
        }
5764
0
        break;
5765
0
    case GENERIC_DELTA_SET_UNACKNOWLEDGED:
5766
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_delta_level, tvb, offset, 4, ENC_LITTLE_ENDIAN);
5767
0
        offset+=4;
5768
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5769
0
        offset++;
5770
        /* Optional */
5771
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5772
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5773
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5774
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5775
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5776
0
            offset++;
5777
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_delta_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5778
0
            offset++;
5779
0
        }
5780
0
        break;
5781
0
    case GENERIC_MOVE_SET:
5782
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_delta_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5783
0
        offset+=2;
5784
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5785
0
        offset++;
5786
        /* Optional */
5787
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5788
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5789
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5790
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5791
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5792
0
            offset++;
5793
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5794
0
            offset++;
5795
0
        }
5796
0
        break;
5797
0
    case GENERIC_MOVE_SET_UNACKNOWLEDGED:
5798
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_delta_level, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5799
0
        offset+=2;
5800
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5801
0
        offset++;
5802
        /* Optional */
5803
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5804
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5805
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5806
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5807
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5808
0
            offset++;
5809
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_move_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5810
0
            offset++;
5811
0
        }
5812
0
        break;
5813
0
    case GENERIC_DEFAULT_TRANSITION_TIME_GET:
5814
0
        break;
5815
0
    case GENERIC_DEFAULT_TRANSITION_TIME_SET:
5816
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5817
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5818
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5819
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5820
0
        offset++;
5821
0
        break;
5822
0
    case GENERIC_DEFAULT_TRANSITION_TIME_SET_UNACKNOWLEDGED:
5823
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5824
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5825
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5826
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5827
0
        offset++;
5828
0
        break;
5829
0
    case GENERIC_DEFAULT_TRANSITION_TIME_STATUS:
5830
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5831
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5832
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5833
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_default_transition_time_status_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5834
0
        offset++;
5835
0
        break;
5836
0
    case GENERIC_ONPOWERUP_GET:
5837
0
        break;
5838
0
    case GENERIC_ONPOWERUP_STATUS:
5839
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_status_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5840
0
        offset++;
5841
0
        break;
5842
0
    case GENERIC_ONPOWERUP_SET:
5843
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_set_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5844
0
        offset++;
5845
0
        break;
5846
0
    case GENERIC_ONPOWERUP_SET_UNACKNOWLEDGED:
5847
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5848
0
        offset++;
5849
0
        break;
5850
0
    case GENERIC_POWER_LEVEL_GET:
5851
0
        break;
5852
0
    case GENERIC_POWER_LEVEL_SET:
5853
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5854
0
        offset+=2;
5855
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5856
0
        offset++;
5857
        /* Optional */
5858
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5859
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5860
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5861
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5862
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5863
0
            offset++;
5864
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5865
0
            offset++;
5866
0
        }
5867
0
        break;
5868
0
    case GENERIC_POWER_LEVEL_SET_UNACKNOWLEDGED:
5869
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5870
0
        offset+=2;
5871
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5872
0
        offset++;
5873
        /* Optional */
5874
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5875
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5876
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5877
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5878
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5879
0
            offset++;
5880
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5881
0
            offset++;
5882
0
        }
5883
0
        break;
5884
0
    case GENERIC_POWER_LEVEL_STATUS:
5885
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_present_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5886
0
        offset+=2;
5887
        /* Optional */
5888
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
5889
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_target_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5890
0
            offset+=2;
5891
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_generic_power_level_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5892
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
5893
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5894
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_generic_power_level_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5895
0
            offset++;
5896
0
        }
5897
0
        break;
5898
0
    case GENERIC_POWER_LAST_GET:
5899
0
        break;
5900
0
    case GENERIC_POWER_LAST_STATUS:
5901
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_last_status_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5902
0
        offset+=2;
5903
0
        break;
5904
0
    case GENERIC_POWER_DEFAULT_GET:
5905
0
        break;
5906
0
    case GENERIC_POWER_DEFAULT_STATUS:
5907
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_status_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5908
0
        offset+=2;
5909
0
        break;
5910
0
    case GENERIC_POWER_RANGE_GET:
5911
0
        break;
5912
0
    case GENERIC_POWER_RANGE_STATUS:
5913
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5914
0
        offset++;
5915
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5916
0
        offset+=2;
5917
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5918
0
        offset+=2;
5919
0
        break;
5920
0
    case GENERIC_POWER_DEFAULT_SET:
5921
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_set_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5922
0
        offset+=2;
5923
0
        break;
5924
0
    case GENERIC_POWER_DEFAULT_SET_UNACKNOWLEDGED:
5925
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_default_set_unacknowledged_power, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5926
0
        offset+=2;
5927
0
        break;
5928
0
    case GENERIC_POWER_RANGE_SET:
5929
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5930
0
        offset+=2;
5931
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5932
0
        offset+=2;
5933
0
        break;
5934
0
    case GENERIC_POWER_RANGE_SET_UNACKNOWLEDGED:
5935
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5936
0
        offset+=2;
5937
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_power_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5938
0
        offset+=2;
5939
0
        break;
5940
0
    case GENERIC_BATTERY_GET:
5941
0
        break;
5942
0
    case GENERIC_BATTERY_STATUS:
5943
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_battery_level, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5944
0
        offset++;
5945
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_time_to_discharge, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5946
0
        offset+=3;
5947
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_time_to_charge, tvb, offset, 3, ENC_LITTLE_ENDIAN);
5948
0
        offset+=3;
5949
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_presence, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5950
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_indicator, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5951
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_charging, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5952
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_battery_status_flags_serviceability, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5953
0
        offset++;
5954
0
        break;
5955
0
    case GENERIC_LOCATION_GLOBAL_GET:
5956
0
        break;
5957
0
    case GENERIC_LOCATION_LOCAL_GET:
5958
0
        break;
5959
0
    case GENERIC_LOCATION_LOCAL_STATUS:
5960
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5961
0
        offset+=2;
5962
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5963
0
        offset+=2;
5964
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5965
0
        offset+=2;
5966
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5967
0
        offset++;
5968
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5969
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5970
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5971
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_status_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5972
0
        offset+=2;
5973
0
        break;
5974
0
    case GENERIC_LOCATION_LOCAL_SET:
5975
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5976
0
        offset+=2;
5977
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5978
0
        offset+=2;
5979
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5980
0
        offset+=2;
5981
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5982
0
        offset++;
5983
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5984
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5985
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5986
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5987
0
        offset+=2;
5988
0
        break;
5989
0
    case GENERIC_LOCATION_LOCAL_SET_UNACKNOWLEDGED:
5990
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_north, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5991
0
        offset+=2;
5992
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_east, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5993
0
        offset+=2;
5994
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_local_altitude, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5995
0
        offset+=2;
5996
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_floor_number, tvb, offset, 1, ENC_LITTLE_ENDIAN);
5997
0
        offset++;
5998
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary, tvb, offset, 2, ENC_LITTLE_ENDIAN);
5999
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6000
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6001
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6002
0
        offset+=2;
6003
0
        break;
6004
6005
0
    case SCENE_STATUS:
6006
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6007
0
        offset++;
6008
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_status_current_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6009
0
        offset+=2;
6010
        /* Optional */
6011
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6012
0
            proto_tree_add_item(sub_tree, hf_btmesh_scene_status_target_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6013
0
            offset+=2;
6014
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6015
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6016
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6017
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6018
0
            offset++;
6019
0
        }
6020
0
        break;
6021
0
    case SCENE_GET:
6022
0
        break;
6023
0
    case SCENE_RECALL:
6024
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6025
0
        offset+=2;
6026
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6027
0
        offset++;
6028
        /* Optional */
6029
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6030
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6031
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6032
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6033
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6034
0
            offset++;
6035
0
            proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6036
0
            offset++;
6037
0
        }
6038
0
        break;
6039
0
    case SCENE_RECALL_UNACKNOWLEDGED:
6040
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6041
0
        offset+=2;
6042
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6043
0
        offset++;
6044
        /* Optional */
6045
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6046
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6047
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6048
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6049
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scene_recall_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6050
0
            offset++;
6051
0
            proto_tree_add_item(sub_tree, hf_btmesh_scene_recall_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6052
0
            offset++;
6053
0
        }
6054
0
        break;
6055
0
    case SCENE_REGISTER_GET:
6056
0
        break;
6057
0
    case SCENE_REGISTER_STATUS:
6058
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_register_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6059
0
        offset++;
6060
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_register_status_current_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6061
0
        offset+=2;
6062
0
        sceneslist_tree = proto_tree_add_subtree(sub_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_btmesh_scene_register_status_scenes, NULL, "Scenes");
6063
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
6064
0
            proto_tree_add_item(sceneslist_tree, hf_btmesh_scene_register_status_scene, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6065
0
            offset+=2;
6066
0
        }
6067
0
        break;
6068
0
    case SCENE_STORE:
6069
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_store_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6070
0
        offset+=2;
6071
0
        break;
6072
0
    case SCENE_STORE_UNACKNOWLEDGED:
6073
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_store_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6074
0
        offset+=2;
6075
0
        break;
6076
0
    case SCENE_DELETE:
6077
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_delete_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6078
0
        offset+=2;
6079
0
        break;
6080
0
    case SCENE_DELETE_UNACKNOWLEDGED:
6081
0
        proto_tree_add_item(sub_tree, hf_btmesh_scene_delete_unacknowledged_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6082
0
        offset+=2;
6083
0
        break;
6084
0
    case TIME_SET:
6085
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_tai_seconds, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6086
0
        offset+=5;
6087
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_subsecond, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6088
0
        offset++;
6089
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_uncertainty, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6090
0
        offset++;
6091
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_time_authority, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6092
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_tai_utc_delta, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6093
0
        offset+=2;
6094
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_set_time_zone_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6095
0
        offset++;
6096
0
        break;
6097
0
    case TIME_STATUS:
6098
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_status_tai_seconds, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6099
0
        offset+=5;
6100
        /* Optional */
6101
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6102
0
            proto_tree_add_item(sub_tree, hf_btmesh_time_status_subsecond, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6103
0
            offset++;
6104
0
            proto_tree_add_item(sub_tree, hf_btmesh_time_status_uncertainty, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6105
0
            offset++;
6106
0
            proto_tree_add_item(sub_tree, hf_btmesh_time_status_time_authority, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6107
0
            proto_tree_add_item(sub_tree, hf_btmesh_time_status_tai_utc_delta, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6108
0
            offset+=2;
6109
0
            proto_tree_add_item(sub_tree, hf_btmesh_time_status_time_zone_offset, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6110
0
            offset++;
6111
0
        }
6112
0
        break;
6113
0
    case SCHEDULER_ACTION_STATUS:
6114
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6115
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6116
0
        month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6117
0
        month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6118
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6119
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6120
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6121
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6122
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6123
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6124
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6125
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6126
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6127
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6128
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6129
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6130
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6131
0
        offset+=3;
6132
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6133
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6134
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6135
0
        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);
6136
0
        day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6137
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6138
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6139
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6140
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6141
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6142
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6143
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6144
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6145
0
        offset+=4;
6146
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6147
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6148
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6149
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6150
0
         offset+=1;
6151
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_status_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6152
0
        offset+=2;
6153
0
        break;
6154
0
    case SCHEDULER_ACTION_SET:
6155
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6156
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6157
0
        month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6158
0
        month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6159
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6160
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6161
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6162
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6163
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6164
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6165
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6166
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6167
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6168
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6169
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6170
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6171
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6172
0
        offset+=3;
6173
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6174
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6175
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6176
0
        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);
6177
0
        day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6178
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6179
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6180
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6181
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6182
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6183
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6184
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6185
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6186
0
        offset+=4;
6187
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6188
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6189
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6190
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6191
0
        offset+=1;
6192
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6193
0
        offset+=2;
6194
0
        break;
6195
0
    case SCHEDULER_ACTION_SET_UNACKNOWLEDGED:
6196
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_index, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6197
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6198
0
        month_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6199
0
        month_sub_tree = proto_item_add_subtree(month_item, ett_btmesh_scheduler_model_month);
6200
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_january, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6201
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_february, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6202
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_march, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6203
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_april, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6204
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_may, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6205
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_june, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6206
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_july, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6207
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_august, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6208
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_september, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6209
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_october, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6210
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_november, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6211
0
        proto_tree_add_item(month_sub_tree, hf_btmesh_scheduler_schedule_register_month_december, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6212
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6213
0
        offset+=3;
6214
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6215
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6216
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6217
0
        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);
6218
0
        day_of_week_sub_tree = proto_item_add_subtree(day_of_week_item, ett_btmesh_scheduler_model_day_of_week);
6219
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_monday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6220
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_tuesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6221
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_wednesday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6222
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_thursday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6223
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_friday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6224
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_saturday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6225
0
        proto_tree_add_item(day_of_week_sub_tree, hf_btmesh_scheduler_schedule_register_day_of_week_sunday, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6226
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action, tvb, offset, 4, ENC_LITTLE_ENDIAN);
6227
0
        offset+=4;
6228
0
        publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6229
0
        publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6230
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6231
0
        proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6232
0
        offset+=1;
6233
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6234
0
        offset+=2;
6235
0
        break;
6236
0
    case TIME_GET:
6237
0
        break;
6238
0
    case TIME_ROLE_GET:
6239
0
        break;
6240
0
    case TIME_ROLE_SET:
6241
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_role_set_time_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6242
0
        offset++;
6243
0
        break;
6244
0
    case TIME_ROLE_STATUS:
6245
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_role_status_time_role, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6246
0
        offset++;
6247
0
        break;
6248
0
    case TIME_ZONE_GET:
6249
0
        break;
6250
0
    case TIME_ZONE_SET:
6251
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_zone_set_time_zone_offset_new, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6252
0
        offset++;
6253
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_zone_set_tai_of_zone_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6254
0
        offset+=5;
6255
0
        break;
6256
0
    case TIME_ZONE_STATUS:
6257
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_time_zone_offset_current, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6258
0
        offset++;
6259
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_time_zone_offset_new, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6260
0
        offset++;
6261
0
        proto_tree_add_item(sub_tree, hf_btmesh_time_zone_status_tai_of_zone_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6262
0
        offset+=5;
6263
0
        break;
6264
0
    case TAI_UTC_DELTA_GET:
6265
0
        break;
6266
0
    case TAI_UTC_DELTA_SET:
6267
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_tai_utc_delta_new, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6268
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_padding, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6269
0
        offset+=2;
6270
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_set_tai_of_delta_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6271
0
        offset+=5;
6272
0
        break;
6273
0
    case TAI_UTC_DELTA_STATUS:
6274
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_utc_delta_current, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6275
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_padding_1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6276
0
        offset+=2;
6277
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_utc_delta_new, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6278
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_padding_2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6279
0
        offset+=2;
6280
0
        proto_tree_add_item(sub_tree, hf_btmesh_tai_utc_delta_status_tai_of_delta_change, tvb, offset, 5, ENC_LITTLE_ENDIAN);
6281
0
        offset+=5;
6282
0
        break;
6283
0
    case SCHEDULER_ACTION_GET:
6284
0
        proto_tree_add_item(sub_tree, hf_btmesh_scheduler_action_get_index, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6285
0
        offset++;
6286
0
        break;
6287
0
    case SCHEDULER_GET:
6288
0
        break;
6289
0
    case SCHEDULER_STATUS:
6290
0
        scheduler_item = proto_tree_add_item(sub_tree, hf_btmesh_scheduler_status_schedules, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6291
0
        scheduler_tree = proto_item_add_subtree(scheduler_item, ett_btmesh_scheduler_schedules);
6292
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_0, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6293
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_1, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6294
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_2, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6295
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_3, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6296
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_4, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6297
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_5, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6298
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_6, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6299
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_7, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6300
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_8, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6301
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_9, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6302
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_10, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6303
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_11, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6304
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_12, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6305
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_13, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6306
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_14, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6307
0
        proto_tree_add_item(scheduler_tree, hf_btmesh_scheduler_status_schedules_schedule_15, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6308
0
        offset+=2;
6309
0
        break;
6310
0
    case LIGHT_LC_PROPERTY_SET:
6311
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_light_lc_property_set_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
6312
0
        offset+=2;
6313
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_light_lc_property_set_light_lc_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
6314
0
        break;
6315
0
    case LIGHT_LC_PROPERTY_SET_UNACKNOWLEDGED:
6316
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
6317
0
        offset+=2;
6318
0
        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
0
        break;
6320
0
    case LIGHT_LC_PROPERTY_STATUS:
6321
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_light_lc_property_status_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
6322
0
        offset+=2;
6323
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_light_lc_property_status_light_lc_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
6324
0
        break;
6325
0
    case LIGHT_LIGHTNESS_GET:
6326
0
        break;
6327
0
    case LIGHT_LIGHTNESS_SET:
6328
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6329
0
        offset+=2;
6330
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6331
0
        offset++;
6332
        /* Optional */
6333
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6334
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6335
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6336
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6337
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6338
0
            offset++;
6339
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6340
0
            offset++;
6341
0
        }
6342
0
        break;
6343
0
    case LIGHT_LIGHTNESS_SET_UNACKNOWLEDGED:
6344
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6345
0
        offset+=2;
6346
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6347
0
        offset++;
6348
        /* Optional */
6349
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6350
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6351
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6352
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6353
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6354
0
            offset++;
6355
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6356
0
            offset++;
6357
0
        }
6358
0
        break;
6359
0
    case LIGHT_LIGHTNESS_STATUS:
6360
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_present_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6361
0
        offset+=2;
6362
        /* Optional */
6363
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6364
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_target_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6365
0
            offset+=2;
6366
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6367
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6368
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6369
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6370
0
            offset++;
6371
0
        }
6372
0
        break;
6373
0
    case LIGHT_LIGHTNESS_LINEAR_GET:
6374
0
        break;
6375
0
    case LIGHT_LIGHTNESS_LINEAR_SET:
6376
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6377
0
        offset+=2;
6378
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6379
0
        offset++;
6380
        /* Optional */
6381
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6382
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6383
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6384
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6385
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6386
0
            offset++;
6387
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6388
0
            offset++;
6389
0
        }
6390
0
        break;
6391
0
    case LIGHT_LIGHTNESS_LINEAR_SET_UNACKNOWLEDGED:
6392
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6393
0
        offset+=2;
6394
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6395
0
        offset++;
6396
        /* Optional */
6397
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6398
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6399
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6400
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6401
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6402
0
            offset++;
6403
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6404
0
            offset++;
6405
0
        }
6406
0
        break;
6407
0
    case LIGHT_LIGHTNESS_LINEAR_STATUS:
6408
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_present_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6409
0
        offset+=2;
6410
        /* Optional */
6411
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6412
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_target_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6413
0
            offset+=2;
6414
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6415
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6416
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6417
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lightness_linear_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6418
0
            offset++;
6419
0
        }
6420
0
        break;
6421
0
    case LIGHT_LIGHTNESS_LAST_GET:
6422
0
        break;
6423
0
    case LIGHT_LIGHTNESS_LAST_STATUS:
6424
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_last_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6425
0
        offset+=2;
6426
0
        break;
6427
0
    case LIGHT_LIGHTNESS_DEFAULT_GET:
6428
0
        break;
6429
0
    case LIGHT_LIGHTNESS_DEFAULT_STATUS:
6430
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6431
0
        offset+=2;
6432
0
        break;
6433
0
    case LIGHT_LIGHTNESS_RANGE_GET:
6434
0
        break;
6435
0
    case LIGHT_LIGHTNESS_RANGE_STATUS:
6436
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6437
0
        offset++;
6438
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6439
0
        offset+=2;
6440
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6441
0
        offset+=2;
6442
0
        break;
6443
0
    case LIGHT_LIGHTNESS_DEFAULT_SET:
6444
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6445
0
        offset+=2;
6446
0
        break;
6447
0
    case LIGHT_LIGHTNESS_DEFAULT_SET_UNACKNOWLEDGED:
6448
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6449
0
        offset+=2;
6450
0
        break;
6451
0
    case LIGHT_LIGHTNESS_RANGE_SET:
6452
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6453
0
        offset+=2;
6454
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6455
0
        offset+=2;
6456
0
        break;
6457
0
    case LIGHT_LIGHTNESS_RANGE_SET_UNACKNOWLEDGED:
6458
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6459
0
        offset+=2;
6460
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lightness_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6461
0
        offset+=2;
6462
0
        break;
6463
0
    case LIGHT_CTL_GET:
6464
0
        break;
6465
0
    case LIGHT_CTL_SET:
6466
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6467
0
        offset+=2;
6468
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6469
0
        offset+=2;
6470
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6471
0
        offset+=2;
6472
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6473
0
        offset++;
6474
        /* Optional */
6475
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6476
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6477
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6478
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6479
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6480
0
            offset++;
6481
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6482
0
            offset++;
6483
0
        }
6484
0
        break;
6485
0
    case LIGHT_CTL_SET_UNACKNOWLEDGED:
6486
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6487
0
        offset+=2;
6488
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6489
0
        offset+=2;
6490
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6491
0
        offset+=2;
6492
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6493
0
        offset++;
6494
        /* Optional */
6495
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6496
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6497
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6498
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6499
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6500
0
            offset++;
6501
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6502
0
            offset++;
6503
0
        }
6504
0
        break;
6505
0
    case LIGHT_CTL_STATUS:
6506
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_present_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6507
0
        offset+=2;
6508
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_present_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6509
0
        offset+=2;
6510
        /* Optional */
6511
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6512
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_target_ctl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6513
0
            offset+=2;
6514
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_target_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6515
0
            offset+=2;
6516
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6517
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6518
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6519
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6520
0
            offset++;
6521
0
        }
6522
0
        break;
6523
0
    case LIGHT_CTL_TEMPERATURE_GET:
6524
0
        break;
6525
0
    case LIGHT_CTL_TEMPERATURE_RANGE_GET:
6526
0
        break;
6527
0
    case LIGHT_CTL_TEMPERATURE_RANGE_STATUS:
6528
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6529
0
        offset++;
6530
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6531
0
        offset+=2;
6532
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_status_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6533
0
        offset+=2;
6534
0
        break;
6535
0
    case LIGHT_CTL_TEMPERATURE_SET:
6536
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6537
0
        offset+=2;
6538
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6539
0
        offset+=2;
6540
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6541
0
        offset++;
6542
        /* Optional */
6543
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6544
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6545
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6546
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6547
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6548
0
            offset++;
6549
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6550
0
            offset++;
6551
0
        }
6552
0
        break;
6553
0
    case LIGHT_CTL_TEMPERATURE_SET_UNACKNOWLEDGED:
6554
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6555
0
        offset+=2;
6556
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6557
0
        offset+=2;
6558
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6559
0
        offset++;
6560
        /* Optional */
6561
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6562
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6563
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6564
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6565
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6566
0
            offset++;
6567
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6568
0
            offset++;
6569
0
        }
6570
0
        break;
6571
0
    case LIGHT_CTL_TEMPERATURE_STATUS:
6572
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_present_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6573
0
        offset+=2;
6574
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6575
0
        offset+=2;
6576
        /* Optional */
6577
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6578
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_target_ctl_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6579
0
            offset+=2;
6580
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6581
0
            offset+=2;
6582
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6583
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6584
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6585
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_ctl_temperature_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6586
0
            offset++;
6587
0
        }
6588
0
        break;
6589
0
    case LIGHT_CTL_DEFAULT_GET:
6590
0
        break;
6591
0
    case LIGHT_CTL_DEFAULT_STATUS:
6592
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6593
0
        offset+=2;
6594
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6595
0
        offset+=2;
6596
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_status_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6597
0
        offset+=2;
6598
0
        break;
6599
0
    case LIGHT_CTL_DEFAULT_SET:
6600
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6601
0
        offset+=2;
6602
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6603
0
        offset+=2;
6604
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6605
0
        offset+=2;
6606
0
        break;
6607
0
    case LIGHT_CTL_DEFAULT_SET_UNACKNOWLEDGED:
6608
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6609
0
        offset+=2;
6610
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_temperature, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6611
0
        offset+=2;
6612
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6613
0
        offset+=2;
6614
0
        break;
6615
0
    case LIGHT_CTL_TEMPERATURE_RANGE_SET:
6616
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6617
0
        offset+=2;
6618
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6619
0
        offset+=2;
6620
0
        break;
6621
0
    case LIGHT_CTL_TEMPERATURE_RANGE_SET_UNACKNOWLEDGED:
6622
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6623
0
        offset+=2;
6624
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6625
0
        offset+=2;
6626
0
        break;
6627
0
    case LIGHT_HSL_GET:
6628
0
        break;
6629
0
    case LIGHT_HSL_HUE_GET:
6630
0
        break;
6631
0
    case LIGHT_HSL_HUE_SET:
6632
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6633
0
        offset+=2;
6634
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6635
0
        offset++;
6636
        /* Optional */
6637
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6638
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6639
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6640
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6641
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6642
0
            offset++;
6643
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6644
0
            offset++;
6645
0
        }
6646
0
        break;
6647
0
    case LIGHT_HSL_HUE_SET_UNACKNOWLEDGED:
6648
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6649
0
        offset+=2;
6650
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6651
0
        offset++;
6652
        /* Optional */
6653
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6654
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6655
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6656
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6657
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6658
0
            offset++;
6659
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6660
0
            offset++;
6661
0
        }
6662
0
        break;
6663
0
    case LIGHT_HSL_HUE_STATUS:
6664
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_present_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6665
0
        offset+=2;
6666
        /* Optional */
6667
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6668
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_target_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6669
0
            offset+=2;
6670
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6671
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6672
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6673
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_hue_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6674
0
            offset++;
6675
0
        }
6676
0
        break;
6677
0
    case LIGHT_HSL_SATURATION_GET:
6678
0
        break;
6679
0
    case LIGHT_HSL_SATURATION_SET:
6680
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6681
0
        offset+=2;
6682
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6683
0
        offset++;
6684
        /* Optional */
6685
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6686
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6687
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6688
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6689
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6690
0
            offset++;
6691
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6692
0
            offset++;
6693
0
        }
6694
0
        break;
6695
0
    case LIGHT_HSL_SATURATION_SET_UNACKNOWLEDGED:
6696
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6697
0
        offset+=2;
6698
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6699
0
        offset++;
6700
        /* Optional */
6701
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6702
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6703
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6704
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6705
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6706
0
            offset++;
6707
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6708
0
            offset++;
6709
0
        }
6710
0
        break;
6711
0
    case LIGHT_HSL_SATURATION_STATUS:
6712
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_present_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6713
0
        offset+=2;
6714
        /* Optional */
6715
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6716
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_target_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6717
0
            offset+=2;
6718
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6719
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6720
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6721
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_saturation_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6722
0
            offset++;
6723
0
        }
6724
0
        break;
6725
0
    case LIGHT_HSL_SET:
6726
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6727
0
        offset+=2;
6728
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6729
0
        offset+=2;
6730
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6731
0
        offset+=2;
6732
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6733
0
        offset++;
6734
        /* Optional */
6735
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6736
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6737
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6738
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6739
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6740
0
            offset++;
6741
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6742
0
            offset++;
6743
0
        }
6744
0
        break;
6745
0
    case LIGHT_HSL_SET_UNACKNOWLEDGED:
6746
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6747
0
        offset+=2;
6748
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6749
0
        offset+=2;
6750
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6751
0
        offset+=2;
6752
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6753
0
        offset++;
6754
        /* Optional */
6755
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6756
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6757
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6758
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6759
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6760
0
            offset++;
6761
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6762
0
            offset++;
6763
0
        }
6764
0
        break;
6765
0
    case LIGHT_HSL_STATUS:
6766
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6767
0
        offset+=2;
6768
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6769
0
        offset+=2;
6770
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_hsl_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6771
0
        offset+=2;
6772
        /* Optional */
6773
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6774
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6775
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6776
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6777
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6778
0
            offset++;
6779
0
        }
6780
0
        break;
6781
0
    case LIGHT_HSL_TARGET_GET:
6782
0
        break;
6783
0
    case LIGHT_HSL_TARGET_STATUS:
6784
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_lightness_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6785
0
        offset+=2;
6786
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_hue_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6787
0
        offset+=2;
6788
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_hsl_saturation_target, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6789
0
        offset+=2;
6790
        /* Optional */
6791
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6792
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_target_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6793
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6794
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_target_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6795
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_hsl_target_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6796
0
            offset++;
6797
0
        }
6798
0
        break;
6799
0
    case LIGHT_HSL_DEFAULT_GET:
6800
0
        break;
6801
0
    case LIGHT_HSL_DEFAULT_STATUS:
6802
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6803
0
        offset+=2;
6804
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6805
0
        offset+=2;
6806
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_status_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6807
0
        offset+=2;
6808
0
        break;
6809
0
    case LIGHT_HSL_RANGE_GET:
6810
0
        break;
6811
0
    case LIGHT_HSL_RANGE_STATUS:
6812
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6813
0
        offset++;
6814
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6815
0
        offset+=2;
6816
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6817
0
        offset+=2;
6818
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6819
0
        offset+=2;
6820
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_status_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6821
0
        offset+=2;
6822
0
        break;
6823
0
    case LIGHT_HSL_DEFAULT_SET:
6824
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6825
0
        offset+=2;
6826
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6827
0
        offset+=2;
6828
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6829
0
        offset+=2;
6830
0
        break;
6831
0
    case LIGHT_HSL_DEFAULT_SET_UNACKNOWLEDGED:
6832
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6833
0
        offset+=2;
6834
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_hue, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6835
0
        offset+=2;
6836
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_default_set_unacknowledged_saturation, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6837
0
        offset+=2;
6838
0
        break;
6839
0
    case LIGHT_HSL_RANGE_SET:
6840
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6841
0
        offset+=2;
6842
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6843
0
        offset+=2;
6844
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6845
0
        offset+=2;
6846
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6847
0
        offset+=2;
6848
0
        break;
6849
0
    case LIGHT_HSL_RANGE_SET_UNACKNOWLEDGED:
6850
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6851
0
        offset+=2;
6852
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6853
0
        offset+=2;
6854
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6855
0
        offset+=2;
6856
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6857
0
        offset+=2;
6858
0
        break;
6859
0
    case LIGHT_XYL_GET:
6860
0
        break;
6861
0
    case LIGHT_XYL_SET:
6862
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6863
0
        offset+=2;
6864
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6865
0
        offset+=2;
6866
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6867
0
        offset+=2;
6868
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6869
0
        offset++;
6870
        /* Optional */
6871
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6872
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6873
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6874
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6875
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6876
0
            offset++;
6877
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6878
0
            offset++;
6879
0
        }
6880
0
        break;
6881
0
    case LIGHT_XYL_SET_UNACKNOWLEDGED:
6882
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6883
0
        offset+=2;
6884
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6885
0
        offset+=2;
6886
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6887
0
        offset+=2;
6888
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6889
0
        offset++;
6890
        /* Optional */
6891
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6892
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6893
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6894
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6895
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6896
0
            offset++;
6897
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6898
0
            offset++;
6899
0
        }
6900
0
        break;
6901
0
    case LIGHT_XYL_STATUS:
6902
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6903
0
        offset+=2;
6904
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6905
0
        offset+=2;
6906
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6907
0
        offset+=2;
6908
        /* Optional */
6909
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6910
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6911
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6912
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6913
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6914
0
            offset++;
6915
0
        }
6916
0
        break;
6917
0
    case LIGHT_XYL_TARGET_GET:
6918
0
        break;
6919
0
    case LIGHT_XYL_TARGET_STATUS:
6920
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6921
0
        offset+=2;
6922
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6923
0
        offset+=2;
6924
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_target_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6925
0
        offset+=2;
6926
        /* Optional */
6927
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
6928
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_target_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6929
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
6930
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_target_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6931
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_xyl_target_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6932
0
            offset++;
6933
0
        }
6934
0
        break;
6935
0
    case LIGHT_XYL_DEFAULT_GET:
6936
0
        break;
6937
0
    case LIGHT_XYL_DEFAULT_STATUS:
6938
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6939
0
        offset+=2;
6940
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6941
0
        offset+=2;
6942
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_status_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6943
0
        offset+=2;
6944
0
        break;
6945
0
    case LIGHT_XYL_RANGE_GET:
6946
0
        break;
6947
0
    case LIGHT_XYL_RANGE_STATUS:
6948
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_status_code, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6949
0
        offset++;
6950
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6951
0
        offset+=2;
6952
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6953
0
        offset+=2;
6954
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6955
0
        offset+=2;
6956
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_status_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6957
0
        offset+=2;
6958
0
        break;
6959
0
    case LIGHT_XYL_DEFAULT_SET:
6960
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6961
0
        offset+=2;
6962
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6963
0
        offset+=2;
6964
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6965
0
        offset+=2;
6966
0
        break;
6967
0
    case LIGHT_XYL_DEFAULT_SET_UNACKNOWLEDGED:
6968
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_lightness, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6969
0
        offset+=2;
6970
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6971
0
        offset+=2;
6972
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6973
0
        offset+=2;
6974
0
        break;
6975
0
    case LIGHT_XYL_RANGE_SET:
6976
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6977
0
        offset+=2;
6978
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6979
0
        offset+=2;
6980
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6981
0
        offset+=2;
6982
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6983
0
        offset+=2;
6984
0
        break;
6985
0
    case LIGHT_XYL_RANGE_SET_UNACKNOWLEDGED:
6986
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6987
0
        offset+=2;
6988
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6989
0
        offset+=2;
6990
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6991
0
        offset+=2;
6992
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max, tvb, offset, 2, ENC_LITTLE_ENDIAN);
6993
0
        offset+=2;
6994
0
        break;
6995
0
    case LIGHT_LC_MODE_GET:
6996
0
        break;
6997
0
    case LIGHT_LC_MODE_SET:
6998
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_set_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
6999
0
        offset++;
7000
0
        break;
7001
0
    case LIGHT_LC_MODE_SET_UNACKNOWLEDGED:
7002
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_set_unacknowledged_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7003
0
        offset++;
7004
0
        break;
7005
0
    case LIGHT_LC_MODE_STATUS:
7006
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_mode_status_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7007
0
        offset++;
7008
0
        break;
7009
0
    case LIGHT_LC_OM_GET:
7010
0
        break;
7011
0
    case LIGHT_LC_OM_SET:
7012
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_set_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7013
0
        offset++;
7014
0
        break;
7015
0
    case LIGHT_LC_OM_SET_UNACKNOWLEDGED:
7016
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_set_unacknowledged_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7017
0
        offset++;
7018
0
        break;
7019
0
    case LIGHT_LC_OM_STATUS:
7020
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_om_status_mode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7021
0
        offset++;
7022
0
        break;
7023
0
    case LIGHT_LC_LIGHT_ONOFF_GET:
7024
0
        break;
7025
0
    case LIGHT_LC_LIGHT_ONOFF_SET:
7026
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7027
0
        offset++;
7028
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7029
0
        offset++;
7030
        /* Optional */
7031
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7032
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7033
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7034
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7035
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7036
0
            offset++;
7037
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7038
0
            offset++;
7039
0
        }
7040
0
        break;
7041
0
    case LIGHT_LC_LIGHT_ONOFF_SET_UNACKNOWLEDGED:
7042
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7043
0
        offset++;
7044
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7045
0
        offset++;
7046
        /* Optional */
7047
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7048
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7049
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7050
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7051
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7052
0
            offset++;
7053
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7054
0
            offset++;
7055
0
        }
7056
0
        break;
7057
0
    case LIGHT_LC_LIGHT_ONOFF_STATUS:
7058
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_present_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7059
0
        offset++;
7060
        /* Optional */
7061
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7062
0
            proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_target_light_onoff, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7063
0
            offset++;
7064
0
            publishperiod_item = proto_tree_add_item(sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7065
0
            publishperiod_sub_tree = proto_item_add_subtree(publishperiod_item, ett_btmesh_config_model_publishperiod);
7066
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time_steps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7067
0
            proto_tree_add_item(publishperiod_sub_tree, hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7068
0
            offset++;
7069
0
        }
7070
0
        break;
7071
0
    case LIGHT_LC_PROPERTY_GET:
7072
0
        proto_tree_add_item(sub_tree, hf_btmesh_light_lc_property_get_light_lc_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7073
0
        offset+=2;
7074
0
        break;
7075
0
    case GENERIC_MANUFACTURER_PROPERTIES_GET:
7076
0
        break;
7077
0
    case GENERIC_MANUFACTURER_PROPERTIES_STATUS:
7078
0
        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");
7079
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
7080
0
            proto_tree_add_item(manufacturer_property_ids_tree, hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7081
0
            offset+=2;
7082
0
        }
7083
0
        break;
7084
0
    case GENERIC_MANUFACTURER_PROPERTY_GET:
7085
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7086
0
        offset+=2;
7087
0
        break;
7088
0
    case GENERIC_MANUFACTURER_PROPERTY_SET:
7089
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7090
0
        offset+=2;
7091
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7092
0
        offset++;
7093
0
        break;
7094
0
    case GENERIC_MANUFACTURER_PROPERTY_SET_UNACKNOWLEDGED:
7095
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7096
0
        offset+=2;
7097
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7098
0
        offset++;
7099
0
        break;
7100
0
    case GENERIC_MANUFACTURER_PROPERTY_STATUS:
7101
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7102
0
        offset+=2;
7103
        // Optional
7104
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7105
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7106
0
            offset++;
7107
0
            offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7108
0
        }
7109
0
        break;
7110
0
    case GENERIC_ADMIN_PROPERTIES_GET:
7111
0
        break;
7112
0
    case GENERIC_ADMIN_PROPERTIES_STATUS:
7113
0
        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");
7114
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
7115
0
            proto_tree_add_item(admin_property_ids_tree, hf_btmesh_generic_admin_properties_status_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7116
0
            offset+=2;
7117
0
        }
7118
0
        break;
7119
0
    case GENERIC_ADMIN_PROPERTY_GET:
7120
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_get_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7121
0
        offset+=2;
7122
0
        break;
7123
0
    case GENERIC_ADMIN_PROPERTY_SET:
7124
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_admin_property_set_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7125
0
        offset+=2;
7126
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7127
0
        offset++;
7128
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_set_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7129
0
        break;
7130
0
    case GENERIC_ADMIN_PROPERTY_SET_UNACKNOWLEDGED:
7131
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7132
0
        offset+=2;
7133
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7134
0
        offset++;
7135
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7136
0
        break;
7137
0
    case GENERIC_ADMIN_PROPERTY_STATUS:
7138
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_admin_property_status_admin_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7139
0
        offset+=2;
7140
        // Optional
7141
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7142
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_admin_property_status_admin_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7143
0
            offset++;
7144
0
            offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_admin_property_status_admin_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7145
0
        }
7146
0
        break;
7147
0
    case GENERIC_USER_PROPERTIES_GET:
7148
0
        break;
7149
0
    case GENERIC_USER_PROPERTIES_STATUS:
7150
0
        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");
7151
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
7152
0
            proto_tree_add_item(user_property_ids_tree, hf_btmesh_generic_user_properties_status_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7153
0
            offset+=2;
7154
0
        }
7155
0
        break;
7156
0
    case GENERIC_USER_PROPERTY_GET:
7157
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_get_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7158
0
        offset+=2;
7159
0
        break;
7160
0
    case GENERIC_USER_PROPERTY_SET:
7161
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_user_property_set_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7162
0
        offset+=2;
7163
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_set_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7164
0
        break;
7165
0
    case GENERIC_USER_PROPERTY_SET_UNACKNOWLEDGED:
7166
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_user_property_set_unacknowledged_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7167
0
        offset+=2;
7168
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_set_unacknowledged_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7169
0
        break;
7170
0
    case GENERIC_USER_PROPERTY_STATUS:
7171
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_generic_user_property_status_user_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7172
0
        offset+=2;
7173
        // Optional
7174
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7175
0
            proto_tree_add_item(sub_tree, hf_btmesh_generic_user_property_status_user_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7176
0
            offset++;
7177
0
            offset+=dissect_btmesh_property(sub_tree, hf_btmesh_generic_user_property_status_user_property_value, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7178
0
        }
7179
0
        break;
7180
0
    case GENERIC_CLIENT_PROPERTIES_GET:
7181
0
        proto_tree_add_item(sub_tree, hf_btmesh_generic_client_properties_get_client_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7182
0
        offset+=2;
7183
0
        break;
7184
0
    case GENERIC_CLIENT_PROPERTIES_STATUS:
7185
0
        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");
7186
0
        while (tvb_reported_length_remaining(tvb, offset) > 1) {
7187
0
            proto_tree_add_item(generic_client_property_ids_tree, hf_btmesh_generic_client_properties_status_client_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7188
0
            offset+=2;
7189
0
        }
7190
0
        break;
7191
0
    case SENSOR_DESCRIPTOR_GET:
7192
        // Optional
7193
0
        if (tvb_reported_length_remaining(tvb, offset) > 1) {
7194
0
            proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7195
0
            offset+=2;
7196
0
        }
7197
0
        break;
7198
0
    case SENSOR_DESCRIPTOR_STATUS:
7199
0
        if (tvb_reported_length_remaining(tvb, offset) == 2) {
7200
0
            proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7201
0
            offset+=2;
7202
0
        } else {
7203
0
            while (tvb_reported_length_remaining(tvb, offset) > 0) {
7204
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7205
0
                offset+=2;
7206
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7207
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance, tvb, offset, 3, ENC_LITTLE_ENDIAN);
7208
0
                offset+=3;
7209
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7210
0
                offset+=1;
7211
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7212
0
                offset+=1;
7213
0
                proto_tree_add_item(sub_tree, hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7214
0
                offset+=1;
7215
0
            }
7216
0
        }
7217
0
        break;
7218
0
    case SENSOR_CADENCE_GET:
7219
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7220
0
        offset+=2;
7221
0
        break;
7222
0
    case SENSOR_CADENCE_SET:
7223
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_cadence_set_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7224
0
        offset+=2;
7225
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7226
0
        proto_tree_add_item_ret_uint8(sub_tree, hf_btmesh_sensor_cadence_set_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN, &trigger_type);
7227
0
        offset++;
7228
0
        offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_set_hfs);
7229
0
        break;
7230
0
    case SENSOR_CADENCE_SET_UNACKNOWLEDGED:
7231
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7232
0
        offset+=2;
7233
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7234
0
        proto_tree_add_item_ret_uint8(sub_tree, hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN, &trigger_type);
7235
0
        offset++;
7236
7237
0
        offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_set_unacknowledged_hfs);
7238
0
        break;
7239
0
    case SENSOR_CADENCE_STATUS:
7240
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_cadence_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7241
0
        offset+=2;
7242
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7243
0
        proto_tree_add_item_ret_uint8(sub_tree, hf_btmesh_sensor_cadence_status_status_trigger_type, tvb, offset, 1, ENC_LITTLE_ENDIAN, &trigger_type);
7244
0
        offset++;
7245
0
        offset+=dissect_sensor_cadence(sub_tree, tvb, offset, property_id, trigger_type, &sensor_cadence_status_hfs);
7246
0
        break;
7247
0
    case SENSOR_SETTINGS_GET:
7248
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_settings_get_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7249
0
        offset+=2;
7250
0
        break;
7251
0
    case SENSOR_SETTINGS_STATUS:
7252
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_settings_status_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7253
0
        offset+=2;
7254
        // Optional
7255
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7256
0
            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");
7257
0
            while (tvb_reported_length_remaining(tvb, offset) > 1) {
7258
0
                proto_tree_add_item(sensor_setting_property_ids_tree, hf_btmesh_sensor_settings_status_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7259
0
                offset+=2;
7260
0
            }
7261
0
        }
7262
0
        break;
7263
0
    case SENSOR_SETTING_GET:
7264
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_get_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7265
0
        offset+=2;
7266
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_get_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7267
0
        offset+=2;
7268
0
        break;
7269
0
    case SENSOR_SETTING_SET:
7270
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7271
0
        offset+=2;
7272
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_setting_set_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7273
0
        offset+=2;
7274
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_set_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7275
0
        break;
7276
0
    case SENSOR_SETTING_SET_UNACKNOWLEDGED:
7277
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7278
0
        offset+=2;
7279
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7280
0
        offset+=2;
7281
0
        offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7282
0
        break;
7283
0
    case SENSOR_SETTING_STATUS:
7284
0
        proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_status_sensor_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7285
0
        offset+=2;
7286
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7287
0
        offset+=2;
7288
        //Optional
7289
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7290
0
            proto_tree_add_item(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_access, tvb, offset, 1, ENC_LITTLE_ENDIAN);
7291
0
            offset++;
7292
0
            offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_setting_status_sensor_setting_raw, tvb, offset, property_id, PROPERTY_LENGTH_NO_HINT);
7293
0
        }
7294
0
        break;
7295
0
    case SENSOR_GET:
7296
        // Optional
7297
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7298
0
            proto_tree_add_item(sub_tree, hf_btmesh_sensor_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN);
7299
0
            offset+=2;
7300
0
        }
7301
0
        break;
7302
0
    case SENSOR_STATUS:
7303
        // Optional
7304
0
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
7305
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_format);
7306
0
            if (mpid_format == MPID_FORMAT_A) {
7307
0
                proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_a_length, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_length);
7308
0
                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);
7309
0
                offset+=2;
7310
0
            } else {
7311
0
                proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sensor_status_mpid_format_b_length, tvb, offset, 1, ENC_LITTLE_ENDIAN, &mpid_length);
7312
0
                offset++;
7313
0
                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);
7314
0
                offset+=2;
7315
0
            }
7316
0
            offset+=dissect_btmesh_property(sub_tree, hf_btmesh_sensor_status_raw_value, tvb, offset, (uint16_t)mpid_property_id, mpid_length);
7317
0
        }
7318
0
        break;
7319
0
    case SENSOR_COLUMN_GET:
7320
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_column_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7321
0
        offset+=2;
7322
0
        offset+=dissect_columns_raw_value(sub_tree, tvb, offset, property_id, &sensor_column_get_hfs);
7323
0
        break;
7324
0
    case SENSOR_COLUMN_STATUS:
7325
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_column_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7326
0
        offset+=2;
7327
0
        offset+=dissect_property_raw_value_entry(sub_tree, tvb, offset, property_id, &sensor_column_status_hfs);
7328
0
        break;
7329
0
    case SENSOR_SERIES_GET:
7330
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_series_get_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7331
0
        offset+=2;
7332
        // Optional
7333
0
        if (tvb_reported_length_remaining(tvb, offset) > 0) {
7334
0
            offset+=dissect_columns_raw_value(sub_tree, tvb, offset, property_id, &sensor_series_get_hfs);
7335
0
        }
7336
0
        break;
7337
0
    case SENSOR_SERIES_STATUS:
7338
        //first property_id is manadatory
7339
0
        proto_tree_add_item_ret_uint16(sub_tree, hf_btmesh_sensor_series_status_property_id, tvb, offset, 2, ENC_LITTLE_ENDIAN, &property_id);
7340
0
        offset+=2;
7341
        //Optional, dissect one or more values
7342
0
        while (tvb_reported_length_remaining(tvb, offset) > 0) {
7343
0
            offset+=dissect_property_raw_value_entry(sub_tree, tvb, offset, property_id, &sensor_series_status_hfs);
7344
0
        }
7345
0
        break;
7346
//
7347
//  ******************************************************************************************
7348
//
7349
0
    default:
7350
0
        if (tvb_reported_length_remaining(tvb, offset)) {
7351
0
            proto_tree_add_item(sub_tree, hf_btmesh_model_layer_parameters, tvb, offset, -1, ENC_NA);
7352
0
            offset+=tvb_reported_length_remaining(tvb, offset);
7353
0
        }
7354
0
    }
7355
    /* Still some octets left */
7356
0
    if (tvb_reported_length_remaining(tvb, offset)) {
7357
0
        proto_tree_add_expert_remaining(sub_tree, pinfo, &ei_btmesh_unknown_payload, tvb, offset);
7358
0
    }
7359
0
}
7360
7361
static void
7362
dissect_btmesh_access_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset)
7363
0
{
7364
0
   proto_tree *sub_tree;
7365
7366
0
   sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_access_pdu, NULL, "Access PDU");
7367
0
   proto_tree_add_item(sub_tree, hf_btmesh_decrypted_access, tvb, offset, -1, ENC_NA);
7368
7369
0
   dissect_btmesh_model_layer(tvb, pinfo, tree, offset);
7370
0
}
7371
7372
static void
7373
dissect_btmesh_transport_control_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, uint32_t opcode)
7374
0
{
7375
0
    proto_tree *sub_tree;
7376
7377
0
    col_append_str(pinfo->cinfo, COL_INFO,
7378
0
        val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Control Message Unknown"));
7379
7380
0
    sub_tree = proto_tree_add_subtree_format(tree, tvb, offset, -1, ett_btmesh_transp_ctrl_msg, NULL, "Transport Control Message %s",
7381
0
        val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Unknown"));
7382
7383
0
    switch (opcode) {
7384
0
    case 1:
7385
        /* 3.6.5.1 Friend Poll */
7386
        /* Padding 7 bits */
7387
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_padding, tvb, offset, 1, ENC_BIG_ENDIAN);
7388
        /* FSN 1 bit*/
7389
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_fsn, tvb, offset, 1, ENC_BIG_ENDIAN);
7390
0
        break;
7391
0
    case 2:
7392
        /* 3.6.5.2 Friend Update */
7393
        /* Flags 1 octet */
7394
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_key_refresh_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
7395
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_iv_update_flag, tvb, offset, 1, ENC_BIG_ENDIAN);
7396
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_flags_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7397
0
        offset++;
7398
        /* IV Index 4 octets*/
7399
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_iv_index, tvb, offset, 4, ENC_BIG_ENDIAN);
7400
0
        offset+=4;
7401
        /* MD 1 octet */
7402
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_md, tvb, offset, 1, ENC_BIG_ENDIAN);
7403
0
        offset++;
7404
0
        break;
7405
0
    case 3:
7406
        /* Friend Request */
7407
        /* Criteria 1 octet */
7408
        /* RFU 1 bit */
7409
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7410
        /* RSSIFactor 2 bits */
7411
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_rssifactor, tvb, offset, 1, ENC_BIG_ENDIAN);
7412
        /* ReceiveWindowFactor 2 bits */
7413
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_receivewindowfactor, tvb, offset, 1, ENC_BIG_ENDIAN);
7414
        /* MinQueueSizeLog 3 bits */
7415
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_criteria_minqueuesizelog, tvb, offset, 1, ENC_BIG_ENDIAN);
7416
0
        offset++;
7417
        /* ReceiveDelay 1 octet */
7418
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_receivedelay, tvb, offset, 1, ENC_BIG_ENDIAN);
7419
0
        offset++;
7420
        /* PollTimeout 3 octets */
7421
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_polltimeout, tvb, offset, 3, ENC_BIG_ENDIAN);
7422
0
        offset+=3;
7423
        /* PreviousAddress 2 octets */
7424
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_previousaddress, tvb, offset, 2, ENC_BIG_ENDIAN);
7425
0
        offset+=2;
7426
        /* NumElements 1 octets */
7427
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_numelements, tvb, offset, 1, ENC_BIG_ENDIAN);
7428
0
        offset += 1;
7429
        /* LPNCounter 1 octets */
7430
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7431
0
        break;
7432
0
    case 4:
7433
        /* 3.6.5.4 Friend Offer */
7434
        /* ReceiveWindow 1 octet */
7435
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_receivewindow, tvb, offset, 1, ENC_BIG_ENDIAN);
7436
0
        offset++;
7437
        /* QueueSize 1 octet */
7438
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_queuesize, tvb, offset, 1, ENC_BIG_ENDIAN);
7439
0
        offset++;
7440
        /* SubscriptionListSize 1 octet */
7441
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_subscriptionlistsize, tvb, offset, 1, ENC_BIG_ENDIAN);
7442
0
        offset++;
7443
        /* RSSI 1 octet */
7444
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_rssi, tvb, offset, 1, ENC_BIG_ENDIAN);
7445
0
        offset++;
7446
        /* FriendCounter 2 octets */
7447
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_friendcounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7448
0
        break;
7449
0
    case 5:
7450
        /* 3.6.5.5 Friend Clear */
7451
        /* LPNAddress 2 octets */
7452
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpnaddress, tvb, offset, 1, ENC_BIG_ENDIAN);
7453
0
        offset += 2;
7454
        /* LPNCounter 2 octets */
7455
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7456
0
        break;
7457
0
    case 6:
7458
        /* 3.6.5.6 Friend Clear Confirm */
7459
        /* LPNAddress 2 octets */
7460
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpnaddress, tvb, offset, 1, ENC_BIG_ENDIAN);
7461
0
        offset += 2;
7462
        /* LPNCounter 2 octets */
7463
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_lpncounter, tvb, offset, 1, ENC_BIG_ENDIAN);
7464
7465
0
        break;
7466
0
    case 7:
7467
        /* 3.6.5.7 Friend Subscription List Add */
7468
        /* TransactionNumber 1 octet */
7469
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7470
0
        offset++;
7471
        /* AddressList 2 * N */
7472
0
        proto_tree_add_expert_remaining(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset);
7473
0
        break;
7474
0
    case 8:
7475
        /* 3.6.5.8 Friend Subscription List Remove */
7476
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7477
0
        offset++;
7478
        /* AddressList 2 * N */
7479
0
        proto_tree_add_expert_remaining(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset);
7480
0
        break;
7481
0
    case 9:
7482
        /* 3.6.5.9 Friend Subscription List Confirm */
7483
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_transactionnumber, tvb, offset, 1, ENC_BIG_ENDIAN);
7484
0
        offset++;
7485
0
        break;
7486
0
    case 10:
7487
        /* 3.6.5.10 Heartbeat */
7488
        /* RFU & InitTTL */
7489
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_heartbeat_rfu, tvb, offset, 1, ENC_BIG_ENDIAN);
7490
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_init_ttl, tvb, offset, 1, ENC_BIG_ENDIAN);
7491
0
        offset++;
7492
        /* Features */
7493
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_relay, tvb, offset, 2, ENC_BIG_ENDIAN);
7494
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_proxy, tvb, offset, 2, ENC_BIG_ENDIAN);
7495
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_friend, tvb, offset, 2, ENC_BIG_ENDIAN);
7496
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_low_power, tvb, offset, 2, ENC_BIG_ENDIAN);
7497
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_feature_rfu, tvb, offset, 2, ENC_BIG_ENDIAN);
7498
0
        break;
7499
0
    default:
7500
        /* Unknown Control Message */
7501
0
        proto_tree_add_item(sub_tree, hf_btmesh_cntr_unknown_payload, tvb, offset, -1, ENC_NA);
7502
0
        proto_tree_add_expert_remaining(sub_tree, pinfo, &ei_btmesh_not_decoded_yet, tvb, offset);
7503
0
        break;
7504
0
    }
7505
0
}
7506
7507
static bool
7508
try_access_decrypt(tvbuff_t *tvb, packet_info* pinfo, unsigned offset, uint8_t *decrypted_data, int enc_data_len, uint8_t *key, network_decryption_ctx_t *dec_ctx)
7509
0
{
7510
0
    uint8_t accessnonce[13];
7511
0
    gcry_cipher_hd_t cipher_hd;
7512
0
    gcry_error_t gcrypt_err;
7513
0
    uint64_t ccm_lengths[3];
7514
0
    uint8_t *tag;
7515
7516
0
    accessnonce[0] = dec_ctx->app_nonce_type;
7517
0
    accessnonce[1] = (dec_ctx->transmic_size == 4 ? 0x00 : 0x80 );
7518
0
    memcpy((uint8_t *)&accessnonce + 2, dec_ctx->seq_src_buf, 5);
7519
0
    if (dec_ctx->seg) {
7520
0
        accessnonce[2] = (dec_ctx->seqzero & 0xff0000 ) >> 16;
7521
0
        accessnonce[3] = (dec_ctx->seqzero & 0x00ff00 ) >> 8;
7522
0
        accessnonce[4] = (dec_ctx->seqzero & 0x0000ff );
7523
0
    }
7524
0
    memcpy((uint8_t *)&accessnonce + 7, dec_ctx->dst_buf, sizeof(dec_ctx->dst_buf));
7525
0
    memcpy((uint8_t *)&accessnonce + 9, dec_ctx->ivindex_buf, sizeof(dec_ctx->ivindex_buf));
7526
7527
    /* Decrypt packet EXPERIMENTAL CODE */
7528
0
    if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM, 0)) {
7529
0
        return false;
7530
0
    }
7531
    /* Set key */
7532
0
    gcrypt_err = gcry_cipher_setkey(cipher_hd, key, 16);
7533
0
    if (gcrypt_err != 0) {
7534
0
        gcry_cipher_close(cipher_hd);
7535
0
        return false;
7536
0
    }
7537
   /* Load nonce */
7538
0
    gcrypt_err = gcry_cipher_setiv(cipher_hd, &accessnonce, 13);
7539
0
    if (gcrypt_err != 0) {
7540
0
        gcry_cipher_close(cipher_hd);
7541
0
        return false;
7542
0
    }
7543
0
    ccm_lengths[0] = enc_data_len;
7544
0
    ccm_lengths[1] = (dec_ctx->label_uuid_idx == NO_LABEL_UUID_IDX_USED ? 0 : 16);
7545
0
    ccm_lengths[2] = dec_ctx->transmic_size;
7546
7547
0
    gcrypt_err = gcry_cipher_ctl(cipher_hd, GCRYCTL_SET_CCM_LENGTHS, ccm_lengths, sizeof(ccm_lengths));
7548
0
    if (gcrypt_err != 0) {
7549
0
        gcry_cipher_close(cipher_hd);
7550
0
        return false;
7551
0
    }
7552
7553
0
    if (dec_ctx->label_uuid_idx != NO_LABEL_UUID_IDX_USED) {
7554
0
        gcrypt_err = gcry_cipher_authenticate(cipher_hd, uat_btmesh_label_uuid_records[dec_ctx->label_uuid_idx].label_uuid, 16);
7555
0
        if (gcrypt_err != 0) {
7556
0
            gcry_cipher_close(cipher_hd);
7557
0
            return false;
7558
0
        }
7559
0
    }
7560
7561
    /* Decrypt */
7562
0
    gcrypt_err = gcry_cipher_decrypt(cipher_hd, decrypted_data, enc_data_len, tvb_get_ptr(tvb, offset, enc_data_len), enc_data_len);
7563
0
    if (gcrypt_err != 0) {
7564
0
        gcry_cipher_close(cipher_hd);
7565
0
        return false;
7566
0
    }
7567
7568
0
    tag = (uint8_t *)wmem_alloc(pinfo->pool, dec_ctx->transmic_size);
7569
0
    gcrypt_err = gcry_cipher_gettag(cipher_hd, tag, dec_ctx->transmic_size);
7570
0
    gcry_cipher_close(cipher_hd);
7571
7572
0
    if (gcrypt_err != 0 || memcmp(tag, tvb_get_ptr(tvb, offset + enc_data_len, dec_ctx->transmic_size), dec_ctx->transmic_size)) {
7573
        /* Tag mismatch or cipher error */
7574
0
        return false;
7575
0
    }
7576
    /* Tag authenticated */
7577
0
    return true;
7578
0
}
7579
7580
static unsigned
7581
check_address_type(uint32_t btmesh_address)
7582
0
{
7583
0
    if (btmesh_address & 0x8000 ) {
7584
0
        if (btmesh_address & 0x4000) {
7585
0
            return BTMESH_ADDRESS_GROUP;
7586
0
        }
7587
0
        return BTMESH_ADDRESS_VIRTUAL;
7588
0
    } else {
7589
0
        if (btmesh_address) {
7590
0
            return BTMESH_ADDRESS_UNICAST;
7591
0
        }
7592
0
        return BTMESH_ADDRESS_UNASSIGNED;
7593
0
    }
7594
0
}
7595
7596
static tvbuff_t *
7597
btmesh_access_find_key_and_decrypt(tvbuff_t *tvb, packet_info *pinfo, unsigned offset, network_decryption_ctx_t *dec_ctx)
7598
0
{
7599
0
    unsigned i, j, dst_address_type;
7600
0
    uat_btmesh_record_t *record;
7601
0
    uat_btmesh_dev_key_record_t *dev_record;
7602
0
    uat_btmesh_label_uuid_record_t *label_record;
7603
0
    int enc_data_len;
7604
0
    uint8_t *decrypted_data;
7605
7606
0
    enc_data_len = tvb_reported_length_remaining(tvb, offset) - dec_ctx->transmic_size;
7607
0
    decrypted_data = (uint8_t *)wmem_alloc(pinfo->pool, enc_data_len);
7608
0
    dec_ctx->label_uuid_idx = NO_LABEL_UUID_IDX_USED;
7609
7610
0
    if (enc_data_len <= 0) {
7611
0
        return NULL;
7612
0
    }
7613
7614
0
    dst_address_type = check_address_type(dec_ctx->dst);
7615
7616
    /* Application key */
7617
0
    if (dec_ctx->app_nonce_type == BTMESH_NONCE_TYPE_APPLICATION) {
7618
0
        for (i = 0; i < num_btmesh_uat; i++) {
7619
0
            record = &uat_btmesh_records[i];
7620
0
            if (record->valid == BTMESH_KEY_ENTRY_VALID) {
7621
0
                if (dec_ctx->net_key_iv_index_hash == record->net_key_iv_index_hash && dec_ctx->aid == record->aid) {
7622
                    /* Try Label UUID */
7623
0
                    if (dst_address_type == BTMESH_ADDRESS_VIRTUAL) {
7624
0
                        for (j = 0; j < num_btmesh_label_uuid_uat; j++) {
7625
0
                            label_record = &uat_btmesh_label_uuid_records[j];
7626
0
                            if (label_record->valid == BTMESH_LABEL_UUID_ENTRY_VALID && label_record->hash == dec_ctx->dst) {
7627
0
                                dec_ctx->label_uuid_idx = j;
7628
0
                                if (try_access_decrypt(tvb, pinfo, offset, decrypted_data, enc_data_len, record->application_key, dec_ctx)) {
7629
0
                                    return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7630
0
                                }
7631
0
                            }
7632
0
                        }
7633
0
                    } else {
7634
0
                        if (try_access_decrypt(tvb, pinfo, offset, decrypted_data, enc_data_len, record->application_key, dec_ctx)) {
7635
0
                            return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7636
0
                        }
7637
0
                    }
7638
0
                }
7639
0
            }
7640
0
        }
7641
0
    }
7642
    /* Device key */
7643
0
    if (dec_ctx->app_nonce_type == BTMESH_NONCE_TYPE_DEVICE) {
7644
0
        for (i = 0; i < num_btmesh_dev_key_uat; i++) {
7645
0
            dev_record = &uat_btmesh_dev_key_records[i];
7646
0
            if (dev_record->valid == BTMESH_DEVICE_KEY_ENTRY_VALID) {
7647
                /* Try Device Key from SRC */
7648
0
                if ( !memcmp(dev_record->src, dec_ctx->seq_src_buf + 3, 2) ) {
7649
                    /* Try Label UUID */
7650
0
                    if (dst_address_type == BTMESH_ADDRESS_VIRTUAL) {
7651
0
                        for (j = 0; j < num_btmesh_label_uuid_uat; j++) {
7652
0
                            label_record = &uat_btmesh_label_uuid_records[j];
7653
0
                            if (label_record->valid == BTMESH_LABEL_UUID_ENTRY_VALID && label_record->hash == dec_ctx->dst) {
7654
0
                                dec_ctx->label_uuid_idx = j;
7655
0
                                if (try_access_decrypt(tvb, pinfo, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7656
0
                                    return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7657
0
                                }
7658
0
                            }
7659
0
                        }
7660
0
                    } else {
7661
0
                        if (try_access_decrypt(tvb, pinfo, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7662
0
                            return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7663
0
                        }
7664
0
                    }
7665
0
                }
7666
                /* Try Device Key from DST when DST is a unicast address */
7667
0
                if (dst_address_type == BTMESH_ADDRESS_UNICAST) {
7668
0
                    if ( !memcmp(dev_record->src, dec_ctx->dst_buf, 2) ) {
7669
0
                        if (try_access_decrypt(tvb, pinfo, offset, decrypted_data, enc_data_len, dev_record->device_key, dec_ctx)) {
7670
0
                            return tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
7671
0
                        }
7672
0
                    }
7673
0
                }
7674
0
            }
7675
0
        }
7676
0
    }
7677
0
    return NULL;
7678
0
}
7679
7680
static void
7681
dissect_btmesh_transport_access_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned offset, network_decryption_ctx_t *dec_ctx)
7682
0
{
7683
0
    tvbuff_t *de_acc_tvb;
7684
0
    proto_tree *sub_tree;
7685
7686
0
    int length = tvb_reported_length_remaining(tvb, offset);
7687
7688
0
    sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_upper_transp_acc_pdu, NULL, "Upper Transport Access PDU");
7689
0
    de_acc_tvb = btmesh_access_find_key_and_decrypt(tvb, pinfo, offset, dec_ctx);
7690
7691
0
    proto_tree_add_item(sub_tree, hf_btmesh_enc_access_pld, tvb, offset, length - dec_ctx->transmic_size, ENC_NA);
7692
0
    offset += (length - dec_ctx->transmic_size);
7693
7694
0
    proto_tree_add_item(sub_tree, hf_btmesh_transtmic, tvb, offset, dec_ctx->transmic_size, ENC_NA);
7695
7696
0
    if (de_acc_tvb) {
7697
0
        add_new_data_source(pinfo, de_acc_tvb, "Decrypted access data");
7698
0
        dissect_btmesh_access_message(de_acc_tvb, pinfo, tree, 0);
7699
0
    }
7700
0
}
7701
7702
static void
7703
dissect_btmesh_transport_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, bool cntrl, network_decryption_ctx_t *dec_ctx)
7704
0
{
7705
0
    proto_tree *sub_tree;
7706
0
    proto_item *ti;
7707
0
    unsigned offset = 0;
7708
0
    uint32_t seg, opcode, rfu;
7709
0
    uint32_t seqzero, sego, segn;
7710
7711
    /* We receive the full decrypted buffer including DST, skip to opcode */
7712
0
    offset += 2;
7713
0
    sub_tree = proto_tree_add_subtree(tree, tvb, offset, -1, ett_btmesh_transp_pdu, &ti, "Lower Transport PDU");
7714
0
    if (cntrl) {
7715
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_cntr_seg, tvb, offset, 1, ENC_BIG_ENDIAN, &seg);
7716
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_cntr_opcode, tvb, offset, 1, ENC_BIG_ENDIAN, &opcode);
7717
0
        offset++;
7718
7719
0
        if (seg) {
7720
            /* Segmented */
7721
0
            fragment_head *fd_head = NULL;
7722
7723
            /* RFU */
7724
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seg_rfu, tvb, offset, 3, ENC_BIG_ENDIAN, &rfu);
7725
            /* SeqZero 13 */
7726
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seqzero_data, tvb, offset, 3, ENC_BIG_ENDIAN, &seqzero);
7727
            /* SegO 5 Segment Offset number */
7728
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sego, tvb, offset, 3, ENC_BIG_ENDIAN, &sego);
7729
            /* SegN 5 Last Segment number */
7730
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_segn, tvb, offset, 3, ENC_BIG_ENDIAN, &segn);
7731
0
            offset += 3;
7732
7733
            /* Segment */
7734
0
            proto_tree_add_item(sub_tree, hf_btmesh_segment, tvb, offset, -1, ENC_NA);
7735
7736
            /* Use 13 Lsbs from seqzero */
7737
0
            dec_ctx->seqzero = dec_ctx->seq;
7738
            /* Check for overflow */
7739
0
            if ((dec_ctx->seq & 0x1fff) < seqzero) {
7740
0
                dec_ctx->seqzero -= 0x2000;
7741
0
            }
7742
0
            dec_ctx->seqzero = dec_ctx->seqzero & ~0x1fff;
7743
0
            dec_ctx->seqzero += seqzero;
7744
7745
0
            if (segn == 0) {
7746
0
                dissect_btmesh_transport_control_message(tvb, pinfo, tree, offset, opcode);
7747
0
            } else {
7748
0
                upper_transport_fragment_key frg_key;
7749
0
                frg_key.src = dec_ctx->src;
7750
0
                frg_key.net_key_iv_index_hash = dec_ctx->net_key_iv_index_hash;
7751
0
                memcpy(&frg_key.ivindex, dec_ctx->ivindex_buf, sizeof(frg_key.ivindex));
7752
0
                frg_key.seq0 = dec_ctx->seqzero;
7753
7754
0
                if (!pinfo->fd->visited) {
7755
0
                    uint32_t total_length = 0;
7756
0
                    if (segn == sego) {
7757
0
                        total_length = segn * 8 + tvb_captured_length_remaining(tvb, offset);
7758
0
                    }
7759
7760
                    /* Last fragment can be delivered out of order, and can be the first one. */
7761
0
                    fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7762
7763
0
                    if ((fd_head) && (total_length)) {
7764
0
                        fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7765
0
                    }
7766
0
                    fd_head = fragment_add(&upper_transport_reassembly_table,
7767
0
                                tvb, offset, pinfo,
7768
0
                                BTMESH_NOT_USED, &frg_key,
7769
0
                                8 * sego,
7770
0
                                tvb_captured_length_remaining(tvb, offset),
7771
0
                                ( segn == 0 ? false : true) );
7772
7773
0
                    if ((!fd_head) && (total_length)) {
7774
0
                        fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7775
0
                    }
7776
0
                } else {
7777
0
                    fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7778
0
                    if (fd_head && (fd_head->flags&FD_DEFRAGMENTED)) {
7779
0
                        tvbuff_t *next_tvb;
7780
0
                        next_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled Control PDU", fd_head, &btmesh_segmented_control_frag_items, NULL, sub_tree);
7781
0
                        if (next_tvb) {
7782
0
                            dissect_btmesh_transport_control_message(next_tvb, pinfo, tree, 0, opcode);
7783
0
                            col_append_str(pinfo->cinfo, COL_INFO, " (Message Reassembled)");
7784
0
                        } else {
7785
0
                            col_clear(pinfo->cinfo, COL_INFO);
7786
0
                            col_append_fstr(pinfo->cinfo, COL_INFO,"Control Message (fragment %u)", sego);
7787
0
                        }
7788
0
                    }
7789
0
                }
7790
0
            }
7791
0
        } else {
7792
0
            if (opcode == 0) {
7793
0
                col_clear(pinfo->cinfo, COL_INFO);
7794
0
                col_append_str(pinfo->cinfo, COL_INFO,
7795
0
                    val_to_str_const(opcode, btmesh_ctrl_opcode_vals, "Control Message Unknown"));
7796
                /* OBO 1 */
7797
0
                proto_tree_add_item(sub_tree, hf_btmesh_obo, tvb, offset, 2, ENC_BIG_ENDIAN);
7798
                /* SeqZero 13 */
7799
0
                proto_tree_add_item(sub_tree, hf_btmesh_seqzero, tvb, offset, 2, ENC_BIG_ENDIAN);
7800
                /* RFU 2 */
7801
0
                proto_tree_add_item(sub_tree, hf_btmesh_rfu, tvb, offset, 2, ENC_BIG_ENDIAN);
7802
0
                offset += 2;
7803
                /* BlockAck 32 */
7804
0
                proto_tree_add_item(sub_tree, hf_btmesh_blockack, tvb, offset, 4, ENC_BIG_ENDIAN);
7805
0
                return;
7806
0
            }
7807
0
            dissect_btmesh_transport_control_message(tvb, pinfo, tree, offset, opcode);
7808
0
        }
7809
0
    } else {
7810
        /* Access message */
7811
0
        uint32_t afk, aid, szmic;
7812
        /* Access message */
7813
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_seg, tvb, offset, 1, ENC_BIG_ENDIAN, &seg);
7814
        /* AKF 1 Application Key Flag */
7815
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_akf, tvb, offset, 1, ENC_BIG_ENDIAN, &afk);
7816
        /* AID 6 Application key identifier */
7817
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_acc_aid, tvb, offset, 1, ENC_BIG_ENDIAN, &aid);
7818
0
        offset++;
7819
7820
0
        dec_ctx->seg = seg;
7821
0
        dec_ctx->aid = aid;
7822
0
        dec_ctx->app_nonce_type = (afk ? BTMESH_NONCE_TYPE_APPLICATION : BTMESH_NONCE_TYPE_DEVICE);
7823
7824
0
        if (seg) {
7825
            /* Segmented */
7826
0
            fragment_head *fd_head = NULL;
7827
7828
            /* SZMIC 1 Size of TransMIC */
7829
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_szmic, tvb, offset, 3, ENC_BIG_ENDIAN, &szmic);
7830
            /* SeqZero 13 Least significant bits of SeqAuth */
7831
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seqzero_data, tvb, offset, 3, ENC_BIG_ENDIAN, &seqzero);
7832
            /* SegO 5 Segment Offset number */
7833
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_sego, tvb, offset, 3, ENC_BIG_ENDIAN, &sego);
7834
            /* SegN 5 Last Segment number */
7835
0
            proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_segn, tvb, offset, 3, ENC_BIG_ENDIAN, &segn);
7836
0
            offset += 3;
7837
7838
            /* Segment m 8 to 96 Segment m of the Upper Transport Access PDU */
7839
0
            proto_tree_add_item(sub_tree, hf_btmesh_segment, tvb, offset, -1, ENC_NA);
7840
7841
            /* Use 13 Lsbs from seqzero */
7842
0
            dec_ctx->seqzero = dec_ctx->seq;
7843
            /* Check for overflow */
7844
0
            if ((dec_ctx->seq & 0x1fff) < seqzero) {
7845
0
                dec_ctx->seqzero -= 0x2000;
7846
0
            }
7847
0
            dec_ctx->seqzero = dec_ctx->seqzero & ~0x1fff;
7848
0
            dec_ctx->seqzero += seqzero;
7849
7850
0
            if (segn == 0) {
7851
0
                proto_item_set_len(ti, 1);
7852
0
                dec_ctx->transmic_size = 4; /*TransMic is 32 bits*/
7853
0
                dissect_btmesh_transport_access_message(tvb, pinfo, tree, offset, dec_ctx);
7854
0
            } else {
7855
0
                upper_transport_fragment_key frg_key;
7856
0
                frg_key.src = dec_ctx->src;
7857
0
                frg_key.net_key_iv_index_hash = dec_ctx->net_key_iv_index_hash;
7858
0
                memcpy(&frg_key.ivindex, dec_ctx->ivindex_buf, sizeof(frg_key.ivindex));
7859
0
                frg_key.seq0 = dec_ctx->seqzero;
7860
7861
0
                if (!pinfo->fd->visited) {
7862
0
                    uint32_t total_length = 0;
7863
0
                    if (segn == sego) {
7864
0
                        total_length = segn * 12 + tvb_captured_length_remaining(tvb, offset);
7865
0
                    }
7866
7867
                    /* Last fragment can be delivered out of order, and can be the first one. */
7868
0
                    fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7869
7870
0
                    if ((fd_head) && (total_length)) {
7871
0
                        fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7872
0
                    }
7873
0
                    fd_head = fragment_add(&upper_transport_reassembly_table,
7874
0
                                tvb, offset, pinfo,
7875
0
                                BTMESH_NOT_USED, &frg_key,
7876
0
                                12 * sego,
7877
0
                                tvb_captured_length_remaining(tvb, offset),
7878
0
                                ( segn == 0 ? false : true) );
7879
7880
0
                    if ((!fd_head) && (total_length)) {
7881
0
                        fragment_set_tot_len(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key, total_length);
7882
0
                    }
7883
0
                } else {
7884
0
                    fd_head = fragment_get(&upper_transport_reassembly_table, pinfo, BTMESH_NOT_USED, &frg_key);
7885
0
                    if (fd_head && (fd_head->flags&FD_DEFRAGMENTED)) {
7886
0
                        tvbuff_t *next_tvb;
7887
0
                        next_tvb = process_reassembled_data(tvb, offset, pinfo, "Reassembled Access PDU", fd_head, &btmesh_segmented_access_frag_items, NULL, sub_tree);
7888
0
                        if (next_tvb) {
7889
0
                            dec_ctx->transmic_size = (szmic ? 8 : 4 );
7890
0
                            dissect_btmesh_transport_access_message(next_tvb, pinfo, tree, 0, dec_ctx);
7891
0
                            col_append_str(pinfo->cinfo, COL_INFO, " (Message Reassembled)");
7892
0
                        } else {
7893
0
                            col_clear(pinfo->cinfo, COL_INFO);
7894
0
                            col_append_fstr(pinfo->cinfo, COL_INFO, "Access Message (fragment %u)", sego);
7895
0
                        }
7896
0
                    }
7897
0
                }
7898
0
            }
7899
0
        } else {
7900
0
            proto_item_set_len(ti, 1);
7901
0
            dec_ctx->transmic_size = 4; /*TransMic is 32 bits*/
7902
0
            dissect_btmesh_transport_access_message(tvb, pinfo, tree, offset, dec_ctx);
7903
0
        }
7904
0
    }
7905
0
}
7906
7907
tvbuff_t *
7908
1
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) {
7909
1
    unsigned i;
7910
1
    uint8_t nid;
7911
1
    unsigned offset = 0;
7912
1
    tvbuff_t *de_obf_tvb;
7913
1
    uint8_t networknonce[13];
7914
1
    uat_btmesh_record_t *record;
7915
1
    gcry_cipher_hd_t cipher_hd;
7916
1
    uint32_t net_mic_size;
7917
1
    gcry_error_t gcrypt_err;
7918
1
    uint64_t ccm_lengths[3];
7919
1
    int enc_offset;
7920
7921
1
    nid = tvb_get_uint8(tvb, offset) & 0x7f;
7922
7923
    /* Get the next record to try */
7924
1
    for (i = 0; i < num_btmesh_uat; i++) {
7925
0
        record = &uat_btmesh_records[i];
7926
0
        if (record->valid == BTMESH_KEY_ENTRY_VALID && nid == record->nid) {
7927
0
            offset = 1;
7928
0
            de_obf_tvb = btmesh_deobfuscate(tvb, pinfo, offset, record);
7929
7930
0
            if (de_obf_tvb == NULL) {
7931
0
                continue;
7932
0
            }
7933
0
            net_mic_size = (((tvb_get_uint8(de_obf_tvb, 0) & 0x80) >> 7 ) + 1 ) * 4; /* CTL */
7934
0
            offset +=6;
7935
7936
0
            (*enc_data_len) = tvb_reported_length(tvb) - offset - net_mic_size;
7937
0
            enc_offset = offset;
7938
7939
            /* Start setting network nonce.*/
7940
0
            networknonce[0] = dec_ctx->net_nonce_type; /* Nonce Type */
7941
7942
0
            tvb_memcpy(de_obf_tvb, (uint8_t *)&networknonce + 1, 0, 6);
7943
0
            if (dec_ctx->net_nonce_type == BTMESH_NONCE_TYPE_PROXY) {
7944
0
                networknonce[1] = 0x00;    /*Pad*/
7945
0
            }
7946
0
            networknonce[7] = 0x00;    /*Pad*/
7947
0
            networknonce[8] = 0x00;    /*Pad*/
7948
7949
0
            memcpy((uint8_t *)&networknonce + 9, record->ivindex, 4);
7950
            /* Decrypt packet EXPERIMENTAL CODE */
7951
0
            if (gcry_cipher_open(&cipher_hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CCM, 0)) {
7952
0
                return NULL;
7953
0
            }
7954
7955
0
            gcrypt_err = gcry_cipher_setkey(cipher_hd, record->encryptionkey, 16);
7956
0
            if (gcrypt_err != 0) {
7957
0
                gcry_cipher_close(cipher_hd);
7958
0
                continue;
7959
0
            }
7960
7961
            /* Load nonce */
7962
0
            gcrypt_err = gcry_cipher_setiv(cipher_hd, &networknonce, 13);
7963
0
            if (gcrypt_err != 0) {
7964
0
                gcry_cipher_close(cipher_hd);
7965
0
                continue;
7966
0
            }
7967
            /* */
7968
0
            ccm_lengths[0] = (*enc_data_len);
7969
0
            ccm_lengths[1] = 0; /* aad */
7970
0
            ccm_lengths[2] = net_mic_size; /* icv */
7971
7972
0
            gcrypt_err = gcry_cipher_ctl(cipher_hd, GCRYCTL_SET_CCM_LENGTHS, ccm_lengths, sizeof(ccm_lengths));
7973
0
            if (gcrypt_err != 0) {
7974
0
                gcry_cipher_close(cipher_hd);
7975
0
                continue;
7976
0
            }
7977
7978
0
            (*decrypted_data) = (uint8_t *)wmem_alloc(pinfo->pool, *enc_data_len);
7979
            /* Decrypt */
7980
0
            gcrypt_err = gcry_cipher_decrypt(cipher_hd, (*decrypted_data), *enc_data_len, tvb_get_ptr(tvb, enc_offset, *enc_data_len), *enc_data_len);
7981
0
            if (gcrypt_err != 0) {
7982
0
                gcry_cipher_close(cipher_hd);
7983
0
                continue;
7984
0
            }
7985
7986
0
            uint8_t *tag;
7987
0
            tag = (uint8_t *)wmem_alloc(pinfo->pool, net_mic_size);
7988
0
            gcrypt_err = gcry_cipher_gettag(cipher_hd, tag, net_mic_size);
7989
7990
0
            if (gcrypt_err == 0 && !memcmp(tag, tvb_get_ptr(tvb, enc_offset + (*enc_data_len), net_mic_size), net_mic_size)) {
7991
                /* Tag authenticated, now close the cypher handle */
7992
0
                gcry_cipher_close(cipher_hd);
7993
0
                dec_ctx->net_key_iv_index_hash = record->net_key_iv_index_hash;
7994
0
                memcpy(dec_ctx->ivindex_buf, record->ivindex, sizeof(dec_ctx->ivindex_buf));
7995
7996
0
                return de_obf_tvb;
7997
0
            }  else {
7998
                /* Now close the cypher handle */
7999
0
                gcry_cipher_close(cipher_hd);
8000
8001
                /* Tag mismatch or cipher error */
8002
0
                continue;
8003
0
            }
8004
0
        }
8005
0
    }
8006
1
    return NULL;
8007
1
}
8008
8009
static int
8010
dissect_btmesh_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
8011
1
{
8012
1
    proto_item *item;
8013
1
    proto_tree *netw_tree, *sub_tree;
8014
1
    unsigned offset = 0;
8015
1
    uint32_t net_mic_size, seq, src, dst;
8016
1
    int enc_data_len = 0;
8017
1
    tvbuff_t *de_obf_tvb;
8018
1
    tvbuff_t *de_cry_tvb;
8019
1
    int decry_off;
8020
1
    uint8_t *decrypted_data = NULL;
8021
1
    network_decryption_ctx_t *dec_ctx;
8022
8023
1
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "BT Mesh");
8024
8025
1
    item = proto_tree_add_item(tree, proto_btmesh, tvb, offset, -1, ENC_NA);
8026
1
    netw_tree = proto_item_add_subtree(item, ett_btmesh);
8027
8028
1
    sub_tree = proto_tree_add_subtree(netw_tree, tvb, offset, -1, ett_btmesh_net_pdu, NULL, "Network PDU");
8029
    /* Check length >= , if not error packet */
8030
    /* First byte in plaintext */
8031
    /* IVI 1 bit Least significant bit of IV Index */
8032
1
    proto_tree_add_item(sub_tree, hf_btmesh_ivi, tvb, offset, 1, ENC_BIG_ENDIAN);
8033
1
    proto_tree_add_item(sub_tree, hf_btmesh_nid, tvb, offset, 1, ENC_BIG_ENDIAN);
8034
1
    offset++;
8035
8036
1
    dec_ctx = wmem_new(pinfo->pool, network_decryption_ctx_t);
8037
1
    dec_ctx->net_nonce_type = BTMESH_NONCE_TYPE_NETWORK;
8038
8039
1
    de_obf_tvb = btmesh_network_find_key_and_decrypt(tvb, pinfo, &decrypted_data, &enc_data_len, dec_ctx);
8040
8041
1
    if (de_obf_tvb) {
8042
0
        add_new_data_source(pinfo, de_obf_tvb, "Deobfuscated data");
8043
8044
0
        bool cntrl;
8045
8046
        /* CTL 1 bit Network Control*/
8047
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_ctl, de_obf_tvb, 0, 1, ENC_BIG_ENDIAN, &net_mic_size);
8048
        /* 32 or 64 bits ( 0 or 1 )*/
8049
0
        cntrl = net_mic_size;
8050
0
        net_mic_size = (net_mic_size + 1) * 4;
8051
        /* The TTL field is a 7-bit field */
8052
0
        proto_tree_add_item(sub_tree, hf_btmesh_ttl, de_obf_tvb, 0, 1, ENC_BIG_ENDIAN);
8053
8054
        /* SEQ field is a 24-bit integer */
8055
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_seq, de_obf_tvb, 1, 3, ENC_BIG_ENDIAN, &seq);
8056
8057
        /* SRC field is a 16-bit value */
8058
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_src, de_obf_tvb, 4, 2, ENC_BIG_ENDIAN, &src);
8059
0
        offset += 6;
8060
8061
0
        de_cry_tvb = tvb_new_child_real_data(tvb, decrypted_data, enc_data_len, enc_data_len);
8062
0
        add_new_data_source(pinfo, de_cry_tvb, "Decrypted network data");
8063
8064
0
        decry_off = 0;
8065
0
        proto_tree_add_item_ret_uint(sub_tree, hf_btmesh_dst, de_cry_tvb, decry_off, 2, ENC_BIG_ENDIAN, &dst);
8066
0
        decry_off += 2;
8067
        /* TransportPDU */
8068
0
        proto_tree_add_item(sub_tree, hf_btmesh_transp_pdu, de_cry_tvb, decry_off, enc_data_len-2, ENC_NA);
8069
0
        offset += enc_data_len;
8070
8071
0
        proto_tree_add_item(sub_tree, hf_btmesh_netmic, tvb, offset, net_mic_size, ENC_BIG_ENDIAN);
8072
0
        offset += net_mic_size;
8073
8074
0
        if (de_cry_tvb) {
8075
0
            dec_ctx->src = src;
8076
0
            dec_ctx->seq = seq;
8077
0
            dec_ctx->dst = dst;
8078
0
            tvb_memcpy(de_obf_tvb, dec_ctx->seq_src_buf, 1, 5);
8079
0
            tvb_memcpy(de_cry_tvb, dec_ctx->dst_buf, 0, 2);
8080
8081
0
            dissect_btmesh_transport_pdu(de_cry_tvb, pinfo, netw_tree, cntrl, dec_ctx);
8082
0
        }
8083
1
    } else {
8084
1
        proto_tree_add_item(sub_tree, hf_btmesh_obfuscated, tvb, offset, 6, ENC_NA);
8085
1
        offset += 6;
8086
8087
1
        proto_tree_add_item(sub_tree, hf_btmesh_encrypted, tvb, offset, -1, ENC_NA);
8088
1
        offset = tvb_reported_length(tvb);
8089
1
    }
8090
8091
1
    return offset;
8092
1
}
8093
8094
static int
8095
compute_ascii_key(unsigned char **ascii_key, const char *key, const char *key_name, unsigned expected_octets, char **err)
8096
0
{
8097
0
    unsigned key_len = 0, raw_key_len;
8098
0
    int hex_digit;
8099
0
    unsigned char key_byte;
8100
0
    unsigned i, j;
8101
8102
0
    if (key != NULL)
8103
0
    {
8104
0
        raw_key_len = (unsigned)strlen(key);
8105
0
        if (((raw_key_len == expected_octets * 2 + 2) || (raw_key_len == expected_octets * 2 + 1)) &&
8106
0
            (key[0] == '0')
8107
0
            && ((key[1] == 'x') || (key[1] == 'X')))
8108
0
        {
8109
            /*
8110
             * Key begins with "0x" or "0X"; skip that and treat the rest
8111
             * as a sequence of hex digits.
8112
             */
8113
0
            i = 2;    /* first character after "0[Xx]" */
8114
0
            j = 0;
8115
0
            if (raw_key_len % 2 == 1)
8116
0
            {
8117
                /*
8118
                 * Key has an odd number of characters; we act as if the
8119
                 * first character had a 0 in front of it, making the
8120
                 * number of characters even.
8121
                 */
8122
0
                key_len = (raw_key_len - 2) / 2 + 1;
8123
0
                *ascii_key = (unsigned char *)g_malloc((key_len + 1) * sizeof(char));
8124
0
                hex_digit = g_ascii_xdigit_value(key[i]);
8125
0
                i++;
8126
0
                if (hex_digit == -1)
8127
0
                {
8128
0
                    g_free(*ascii_key);
8129
0
                    *ascii_key = NULL;
8130
0
                    *err = ws_strdup_printf("Key %s begins with an invalid hex char (%c)", key, key[i]);
8131
0
                    return -1;    /* not a valid hex digit */
8132
0
                }
8133
0
                (*ascii_key)[j] = (unsigned char)hex_digit;
8134
0
                j++;
8135
0
            }
8136
0
            else
8137
0
            {
8138
                /*
8139
                 * Key has an even number of characters, so we treat each
8140
                 * pair of hex digits as a single byte value.
8141
                 */
8142
0
                key_len = (raw_key_len - 2) / 2;
8143
0
                *ascii_key = (unsigned char *)g_malloc((key_len + 1) * sizeof(char));
8144
0
            }
8145
0
            while (i < (raw_key_len - 1))
8146
0
            {
8147
0
                hex_digit = g_ascii_xdigit_value(key[i]);
8148
0
                i++;
8149
0
                if (hex_digit == -1)
8150
0
                {
8151
0
                    g_free(*ascii_key);
8152
0
                    *ascii_key = NULL;
8153
0
                    *err = ws_strdup_printf("%s %s has an invalid hex char (%c)", key_name, key, key[i-1]);
8154
0
                    return -1;    /* not a valid hex digit */
8155
0
                }
8156
0
                key_byte = ((unsigned char)hex_digit) << 4;
8157
0
                hex_digit = g_ascii_xdigit_value(key[i]);
8158
0
                i++;
8159
0
                if (hex_digit == -1)
8160
0
                {
8161
0
                    g_free(*ascii_key);
8162
0
                    *ascii_key = NULL;
8163
0
                    *err = ws_strdup_printf("%s %s has an invalid hex char (%c)", key_name, key, key[i-1]);
8164
0
                    return -1;    /* not a valid hex digit */
8165
0
                }
8166
0
                key_byte |= (unsigned char)hex_digit;
8167
0
                (*ascii_key)[j] = key_byte;
8168
0
                j++;
8169
0
            }
8170
0
            (*ascii_key)[j] = '\0';
8171
0
        } else {
8172
0
            *ascii_key = NULL;
8173
0
            *err = ws_strdup_printf("%s %s has to start with '0x' or '0X', and represent exactly %d octets", key_name, key, expected_octets);
8174
0
            return -1;
8175
0
        }
8176
0
    }
8177
0
    return key_len;
8178
0
}
8179
8180
static bool
8181
uat_btmesh_record_update_cb(void *r, char **err)
8182
0
{
8183
0
    uat_btmesh_record_t *rec = (uat_btmesh_record_t *)r;
8184
8185
0
    rec->valid = 0;
8186
8187
    /* Compute keys & lengths once and for all */
8188
0
    if (rec->network_key_string) {
8189
0
        g_free(rec->network_key);
8190
0
        rec->network_key_length = compute_ascii_key(&rec->network_key, rec->network_key_string, "Network Key", 16, err);
8191
0
        g_free(rec->encryptionkey);
8192
0
        rec->encryptionkey = g_new(uint8_t, 16);
8193
0
        memset(rec->encryptionkey, 0, 16 * sizeof(uint8_t));
8194
0
        g_free(rec->privacykey);
8195
0
        rec->privacykey = g_new(uint8_t, 16);
8196
0
        if (*err == NULL && create_central_security_keys(rec)) {
8197
0
            rec->valid++;
8198
0
        }
8199
0
    } else {
8200
0
        rec->network_key_length = 0;
8201
0
        rec->network_key = NULL;
8202
0
    }
8203
0
    if (*err == NULL && rec->application_key_string) {
8204
0
        g_free(rec->application_key);
8205
0
        rec->application_key_length = compute_ascii_key(&rec->application_key, rec->application_key_string, "Application Key", 16, err);
8206
        /* compute AID */
8207
0
        if (*err == NULL && k4(rec)) {
8208
0
            rec->valid++;
8209
0
        }
8210
0
    } else {
8211
0
        rec->application_key_length = 0;
8212
0
        rec->application_key = NULL;
8213
0
    }
8214
0
    if (*err == NULL && rec->ivindex_string) {
8215
0
        g_free(rec->ivindex);
8216
0
        rec->ivindex_string_length = compute_ascii_key(&rec->ivindex, rec->ivindex_string, "IVindex", 4, err);
8217
0
        if (*err == NULL) {
8218
0
            rec->valid++;
8219
0
        }
8220
0
    }
8221
0
    if (rec->valid == BTMESH_KEY_ENTRY_VALID - 1) {
8222
        /* Compute net_key_index_hash */
8223
0
        const uint8_t hash_buf_len = 16 + 4;
8224
0
        unsigned idx=0;
8225
0
        uint8_t* hash_buf = (uint8_t *)g_malloc(hash_buf_len);
8226
0
        memcpy(hash_buf, rec->encryptionkey, 16);
8227
0
        idx += 16;
8228
0
        memcpy(&hash_buf[idx], rec->ivindex, 4);
8229
0
        rec->net_key_iv_index_hash = wmem_strong_hash(hash_buf, hash_buf_len);
8230
0
        g_free(hash_buf);
8231
0
        rec->valid++;
8232
0
    }
8233
0
    return rec->valid == BTMESH_KEY_ENTRY_VALID;
8234
0
}
8235
8236
static void *
8237
uat_btmesh_record_copy_cb(void *n, const void *o, size_t siz _U_)
8238
0
{
8239
0
    uat_btmesh_record_t *new_rec = (uat_btmesh_record_t *)n;
8240
0
    const uat_btmesh_record_t* old_rec = (const uat_btmesh_record_t *)o;
8241
8242
0
    memset(new_rec, 0x00, sizeof(uat_btmesh_record_t));
8243
8244
    /* Copy UAT fields */
8245
0
    new_rec->network_key_string = g_strdup(old_rec->network_key_string);
8246
0
    new_rec->application_key_string = g_strdup(old_rec->application_key_string);
8247
0
    new_rec->ivindex_string = g_strdup(old_rec->ivindex_string);
8248
8249
    /* Parse keys as in an update */
8250
0
    char *err = NULL;
8251
0
    uat_btmesh_record_update_cb(new_rec, &err);
8252
0
    if (err) {
8253
0
        g_free(err);
8254
0
    }
8255
0
    return new_rec;
8256
0
}
8257
8258
static void
8259
uat_btmesh_record_free_cb(void *r)
8260
0
{
8261
0
    uat_btmesh_record_t *rec = (uat_btmesh_record_t *)r;
8262
8263
0
    g_free(rec->network_key_string);
8264
0
    g_free(rec->network_key);
8265
0
    g_free(rec->application_key_string);
8266
0
    g_free(rec->application_key);
8267
0
    g_free(rec->ivindex_string);
8268
0
    g_free(rec->ivindex);
8269
0
    g_free(rec->privacykey);
8270
0
    g_free(rec->encryptionkey);
8271
0
}
8272
8273
0
UAT_CSTRING_CB_DEF(uat_btmesh_records, network_key_string, uat_btmesh_record_t)
8274
0
UAT_CSTRING_CB_DEF(uat_btmesh_records, application_key_string, uat_btmesh_record_t)
8275
0
UAT_CSTRING_CB_DEF(uat_btmesh_records, ivindex_string, uat_btmesh_record_t)
8276
8277
static bool
8278
uat_btmesh_dev_key_record_update_cb(void *r, char **err)
8279
0
{
8280
0
    uat_btmesh_dev_key_record_t *rec = (uat_btmesh_dev_key_record_t *)r;
8281
8282
0
    rec->valid = 0;
8283
8284
    /* Compute key & lengths once and for all */
8285
0
    if (rec->device_key_string) {
8286
0
        g_free(rec->device_key);
8287
0
        rec->device_key_length = compute_ascii_key(&rec->device_key, rec->device_key_string, "Device Key", 16, err);
8288
0
        if (*err == NULL) {
8289
0
            rec->valid++;
8290
0
        }
8291
0
    } else {
8292
0
        rec->device_key_length = 0;
8293
0
        rec->device_key = NULL;
8294
0
    }
8295
0
    if (*err == NULL && rec->src_string) {
8296
0
        g_free(rec->src);
8297
0
        rec->src_length = compute_ascii_key(&rec->src, rec->src_string, "SRC Address", 2, err);
8298
0
        if (*err == NULL) {
8299
0
            rec->valid++;
8300
0
        }
8301
0
    } else {
8302
0
        rec->src_length = 0;
8303
0
        rec->src = NULL;
8304
0
    }
8305
0
    return rec->valid == BTMESH_DEVICE_KEY_ENTRY_VALID;
8306
0
}
8307
8308
static void *
8309
uat_btmesh_dev_key_record_copy_cb(void *n, const void *o, size_t siz _U_)
8310
0
{
8311
0
    uat_btmesh_dev_key_record_t *new_rec = (uat_btmesh_dev_key_record_t *)n;
8312
0
    const uat_btmesh_dev_key_record_t* old_rec = (const uat_btmesh_dev_key_record_t *)o;
8313
8314
0
    memset(new_rec, 0x00, sizeof(uat_btmesh_dev_key_record_t));
8315
8316
    /* Copy UAT fields */
8317
0
    new_rec->device_key_string = g_strdup(old_rec->device_key_string);
8318
0
    new_rec->src_string = g_strdup(old_rec->src_string);
8319
8320
    /* Parse key and src as in an update */
8321
0
    char *err = NULL;
8322
0
    uat_btmesh_dev_key_record_update_cb(new_rec, &err);
8323
0
    if (err) {
8324
0
        g_free(err);
8325
0
    }
8326
0
    return new_rec;
8327
0
}
8328
8329
static void
8330
uat_btmesh_dev_key_record_free_cb(void *r)
8331
0
{
8332
0
    uat_btmesh_dev_key_record_t *rec = (uat_btmesh_dev_key_record_t *)r;
8333
8334
0
    g_free(rec->device_key_string);
8335
0
    g_free(rec->device_key);
8336
0
    g_free(rec->src_string);
8337
0
    g_free(rec->src);
8338
0
}
8339
8340
0
UAT_CSTRING_CB_DEF(uat_btmesh_dev_key_records, device_key_string, uat_btmesh_dev_key_record_t)
8341
0
UAT_CSTRING_CB_DEF(uat_btmesh_dev_key_records, src_string, uat_btmesh_dev_key_record_t)
8342
8343
static bool
8344
uat_btmesh_label_uuid_record_update_cb(void *r, char **err)
8345
0
{
8346
0
    uat_btmesh_label_uuid_record_t *rec = (uat_btmesh_label_uuid_record_t *)r;
8347
8348
0
    rec->valid = 0;
8349
8350
    /* Compute label UUID & lengths */
8351
0
    if (rec->label_uuid_string) {
8352
0
        g_free(rec->label_uuid);
8353
0
        rec->label_uuid_length = compute_ascii_key(&rec->label_uuid, rec->label_uuid_string, "Label UUID", 16, err);
8354
0
        if (*err == NULL && label_uuid_hash(rec)) {
8355
0
            rec->valid++;
8356
0
        }
8357
0
    } else {
8358
0
        rec->label_uuid_length = 0;
8359
0
        rec->label_uuid = NULL;
8360
0
    }
8361
0
    return rec->valid == BTMESH_LABEL_UUID_ENTRY_VALID;
8362
0
}
8363
8364
static void *
8365
uat_btmesh_label_uuid_record_copy_cb(void *n, const void *o, size_t siz _U_)
8366
0
{
8367
0
    uat_btmesh_label_uuid_record_t *new_rec = (uat_btmesh_label_uuid_record_t *)n;
8368
0
    const uat_btmesh_label_uuid_record_t* old_rec = (const uat_btmesh_label_uuid_record_t *)o;
8369
8370
0
    memset(new_rec, 0x00, sizeof(uat_btmesh_label_uuid_record_t));
8371
8372
    /* Copy UAT field */
8373
0
    new_rec->label_uuid_string = g_strdup(old_rec->label_uuid_string);
8374
8375
    /* Parse Label UUID as in an update */
8376
0
    char *err = NULL;
8377
0
    uat_btmesh_label_uuid_record_update_cb(new_rec, &err);
8378
0
    if (err) {
8379
0
        g_free(err);
8380
0
    }
8381
8382
0
    return new_rec;
8383
0
}
8384
8385
static void
8386
uat_btmesh_label_uuid_record_free_cb(void *r)
8387
0
{
8388
0
    uat_btmesh_label_uuid_record_t *rec = (uat_btmesh_label_uuid_record_t *)r;
8389
8390
0
    g_free(rec->label_uuid_string);
8391
0
    g_free(rec->label_uuid);
8392
0
}
8393
8394
0
UAT_CSTRING_CB_DEF(uat_btmesh_label_uuid_records, label_uuid_string, uat_btmesh_label_uuid_record_t)
8395
8396
void
8397
proto_register_btmesh(void)
8398
16
{
8399
16
    static hf_register_info hf[] = {
8400
16
        { &hf_btmesh_ivi,
8401
16
            { "IVI", "btmesh.ivi",
8402
16
                FT_UINT8, BASE_DEC, NULL, 0x80,
8403
16
                NULL, HFILL }
8404
16
        },
8405
16
        { &hf_btmesh_nid,
8406
16
            { "NID", "btmesh.nid",
8407
16
                FT_UINT8, BASE_DEC, NULL, 0x7f,
8408
16
                NULL, HFILL }
8409
16
        },
8410
16
        { &hf_btmesh_obfuscated,
8411
16
            { "Obfuscated", "btmesh.obfuscated",
8412
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8413
16
                NULL, HFILL }
8414
16
        },
8415
16
        { &hf_btmesh_encrypted,
8416
16
            { "Encrypted data and NetMIC", "btmesh.encrypted",
8417
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8418
16
                NULL, HFILL }
8419
16
        },
8420
16
        { &hf_btmesh_netmic,
8421
16
            { "NetMIC", "btmesh.netmic",
8422
16
                FT_UINT64, BASE_HEX, NULL, 0x0,
8423
16
                NULL, HFILL }
8424
16
        },
8425
16
        { &hf_btmesh_ctl,
8426
16
            { "CTL", "btmesh.ctl",
8427
16
                FT_UINT8, BASE_DEC, VALS(btmesh_ctl_vals), 0x80,
8428
16
                NULL, HFILL }
8429
16
        },
8430
16
        { &hf_btmesh_ttl,
8431
16
            { "TTL", "btmesh.ttl",
8432
16
                FT_UINT8, BASE_DEC, NULL, 0x7f,
8433
16
                NULL, HFILL }
8434
16
        },
8435
16
        { &hf_btmesh_seq,
8436
16
            { "SEQ", "btmesh.seq",
8437
16
                FT_UINT24, BASE_DEC, NULL, 0x0,
8438
16
                NULL, HFILL }
8439
16
        },
8440
16
        { &hf_btmesh_src,
8441
16
            { "SRC", "btmesh.src",
8442
16
                FT_UINT16, BASE_DEC, NULL, 0x0,
8443
16
                NULL, HFILL }
8444
16
        },
8445
16
        { &hf_btmesh_dst,
8446
16
            { "DST", "btmesh.dst",
8447
16
                FT_UINT16, BASE_DEC, NULL, 0x0,
8448
16
                NULL, HFILL }
8449
16
        },
8450
16
        { &hf_btmesh_transp_pdu,
8451
16
            { "TransportPDU", "btmesh.transp_pdu",
8452
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8453
16
                NULL, HFILL }
8454
16
        },
8455
16
        { &hf_btmesh_cntr_seg,
8456
16
            { "SEG", "btmesh.cntr.seg",
8457
16
                FT_UINT8, BASE_DEC, VALS(btmesh_ctrl_seg_vals), 0x80,
8458
16
                NULL, HFILL }
8459
16
        },
8460
16
        { &hf_btmesh_acc_seg,
8461
16
            { "SEG", "btmesh.acc.seg",
8462
16
                FT_UINT8, BASE_DEC, VALS(btmesh_acc_seg_vals), 0x80,
8463
16
                NULL, HFILL }
8464
16
        },
8465
16
        { &hf_btmesh_cntr_opcode,
8466
16
            { "Opcode", "btmesh.cntr.opcode",
8467
16
                FT_UINT8, BASE_DEC, VALS(btmesh_ctrl_opcode_vals), 0x7f,
8468
16
                NULL, HFILL }
8469
16
        },
8470
16
        { &hf_btmesh_acc_akf,
8471
16
            { "AKF", "btmesh.acc.akf",
8472
16
                FT_UINT8, BASE_DEC, VALS(btmesh_acc_akf_vals), 0x40,
8473
16
                NULL, HFILL }
8474
16
        },
8475
16
        { &hf_btmesh_acc_aid,
8476
16
            { "AID", "btmesh.acc.aid",
8477
16
                FT_UINT8, BASE_DEC, NULL, 0x3f,
8478
16
                NULL, HFILL }
8479
16
        },
8480
16
        { &hf_btmesh_obo,
8481
16
            { "OBO", "btmesh.obo",
8482
16
                FT_BOOLEAN, 16, TFS(&btmesh_obo), 0x8000,
8483
16
                NULL, HFILL }
8484
16
        },
8485
16
        { &hf_btmesh_seqzero,
8486
16
            { "SeqZero", "btmesh.seqzero",
8487
16
                FT_UINT16, BASE_DEC, NULL, 0x7ffc,
8488
16
                NULL, HFILL }
8489
16
        },
8490
16
        { &hf_btmesh_rfu,
8491
16
            { "Reserved for Future Use", "btmesh.rfu",
8492
16
                FT_UINT16, BASE_DEC, NULL, 0x0003,
8493
16
                NULL, HFILL }
8494
16
        },
8495
16
        { &hf_btmesh_blockack,
8496
16
            { "BlockAck", "btmesh.blockack",
8497
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8498
16
                NULL, HFILL }
8499
16
        },
8500
16
        { &hf_btmesh_cntr_criteria_rfu,
8501
16
            { "RFU", "btmesh.cntr.criteria.rfu",
8502
16
                FT_UINT8, BASE_DEC, NULL, 0x80,
8503
16
                NULL, HFILL }
8504
16
        },
8505
16
        { &hf_btmesh_cntr_padding,
8506
16
            { "Padding", "btmesh.cntr.padding",
8507
16
                FT_UINT8, BASE_DEC, NULL, 0xfe,
8508
16
                NULL, HFILL }
8509
16
        },
8510
16
        { &hf_btmesh_cntr_fsn,
8511
16
            { "Friend Sequence Number(FSN)", "btmesh.cntr.fsn",
8512
16
                FT_UINT8, BASE_DEC, NULL, 0x01,
8513
16
                NULL, HFILL }
8514
16
        },
8515
16
        { &hf_btmesh_cntr_key_refresh_flag,
8516
16
            { "Key Refresh Flag", "btmesh.cntr.keyrefreshflag",
8517
16
                FT_UINT8, BASE_DEC, VALS(btmesh_cntr_key_refresh_flag_vals), 0x01,
8518
16
                NULL, HFILL }
8519
16
        },
8520
16
        { &hf_btmesh_cntr_iv_update_flag,
8521
16
            { "IV Update Flag", "btmesh.cntr.ivupdateflag",
8522
16
                FT_UINT8, BASE_DEC, VALS(btmesh_cntr_iv_update_flag_vals), 0x02,
8523
16
                NULL, HFILL }
8524
16
        },
8525
16
        { &hf_btmesh_cntr_flags_rfu,
8526
16
            { "IV Update Flag", "btmesh.cntr.flagsrfu",
8527
16
                FT_UINT8, BASE_DEC, NULL, 0xFC,
8528
16
                NULL, HFILL }
8529
16
        },
8530
16
        { &hf_btmesh_cntr_iv_index,
8531
16
            { "IV Index", "btmesh.cntr.ivindex",
8532
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8533
16
                NULL, HFILL }
8534
16
        },
8535
16
        { &hf_btmesh_cntr_md,
8536
16
            { "MD (More Data)", "btmesh.cntr.md",
8537
16
                FT_UINT8, BASE_DEC, VALS(btmesh_cntr_md_vals), 0x0,
8538
16
                NULL, HFILL }
8539
16
        },
8540
16
        { &hf_btmesh_cntr_criteria_rssifactor,
8541
16
            { "RSSIFactor", "btmesh.cntr.criteria.rssifactor",
8542
16
                FT_UINT8, BASE_DEC, VALS(btmesh_criteria_rssifactor_vals), 0x60,
8543
16
                NULL, HFILL }
8544
16
        },
8545
16
        { &hf_btmesh_cntr_criteria_receivewindowfactor,
8546
16
            { "ReceiveWindowFactor", "btmesh.cntr.criteria.receivewindowfactor",
8547
16
                FT_UINT8, BASE_DEC, VALS(btmesh_criteria_receivewindowfactor_vals), 0x18,
8548
16
                NULL, HFILL }
8549
16
        },
8550
16
        { &hf_btmesh_cntr_criteria_minqueuesizelog,
8551
16
            { "MinQueueSizeLog", "btmesh.cntr.criteria.minqueuesizelog",
8552
16
                FT_UINT8, BASE_DEC, VALS(btmesh_criteria_minqueuesizelog_vals), 0x07,
8553
16
                NULL, HFILL }
8554
16
        },
8555
16
        { &hf_btmesh_cntr_receivedelay,
8556
16
            { "ReceiveDelay", "btmesh.cntr.receivedelay",
8557
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8558
16
                NULL, HFILL }
8559
16
        },
8560
16
        { &hf_btmesh_cntr_polltimeout,
8561
16
            { "PollTimeout", "btmesh.cntr.polltimeout",
8562
16
                FT_UINT24, BASE_DEC, NULL, 0x0,
8563
16
                NULL, HFILL }
8564
16
        },
8565
16
        { &hf_btmesh_cntr_previousaddress,
8566
16
            { "PreviousAddress", "btmesh.cntr.previousaddress",
8567
16
                FT_UINT16, BASE_DEC, NULL, 0x0,
8568
16
                NULL, HFILL }
8569
16
        },
8570
16
        { &hf_btmesh_cntr_numelements,
8571
16
            { "NumElements", "btmesh.cntr.numelements",
8572
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8573
16
                NULL, HFILL }
8574
16
        },
8575
16
        { &hf_btmesh_cntr_lpncounter,
8576
16
            { "LPNCounter", "btmesh.cntr.lpncounter",
8577
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8578
16
                NULL, HFILL }
8579
16
        },
8580
16
        { &hf_btmesh_cntr_receivewindow,
8581
16
            { "ReceiveWindow", "btmesh.cntr.receivewindow",
8582
16
                FT_UINT8, BASE_DEC | BASE_UNIT_STRING, UNS(&units_milliseconds), 0x0,
8583
16
                NULL, HFILL }
8584
16
        },
8585
16
        { &hf_btmesh_cntr_queuesize,
8586
16
            { "QueueSize", "btmesh.cntr.queuesize",
8587
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8588
16
                NULL, HFILL }
8589
16
        },
8590
16
        { &hf_btmesh_cntr_subscriptionlistsize,
8591
16
            { "SubscriptionListSize", "btmesh.cntr.subscriptionlistsize",
8592
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8593
16
                NULL, HFILL }
8594
16
        },
8595
16
        { &hf_btmesh_cntr_rssi,
8596
16
            { "RSSI", "btmesh.cntr.rssi",
8597
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8598
16
                NULL, HFILL }
8599
16
        },
8600
16
        { &hf_btmesh_cntr_friendcounter,
8601
16
            { "FriendCounter", "btmesh.cntr.friendcounter",
8602
16
                FT_UINT16, BASE_DEC, NULL, 0x0,
8603
16
                NULL, HFILL }
8604
16
        },
8605
16
        { &hf_btmesh_cntr_lpnaddress,
8606
16
            { "LPNAddress", "btmesh.cntr.lpnaddress",
8607
16
                FT_UINT16, BASE_DEC, NULL, 0x0,
8608
16
                NULL, HFILL }
8609
16
        },
8610
16
        { &hf_btmesh_cntr_transactionnumber,
8611
16
            { "TransactionNumber", "btmesh.cntr.transactionnumber",
8612
16
                FT_UINT8, BASE_DEC, NULL, 0x0,
8613
16
                NULL, HFILL }
8614
16
        },
8615
16
        { &hf_btmesh_cntr_heartbeat_rfu,
8616
16
            { "Reserved for Future Use", "btmesh.cntr.heartbeatrfu",
8617
16
                FT_UINT8, BASE_DEC, NULL, 0x80,
8618
16
                NULL, HFILL }
8619
16
        },
8620
16
        { &hf_btmesh_cntr_init_ttl,
8621
16
            { "InitTTL", "btmesh.cntr.initttl",
8622
16
                FT_UINT8, BASE_DEC, NULL, 0x7F,
8623
16
                NULL, HFILL }
8624
16
        },
8625
16
        { &hf_btmesh_cntr_feature_relay,
8626
16
            { "Relay feature in use", "btmesh.cntr.feature.relay",
8627
16
                FT_BOOLEAN, 16, NULL, 0x0001,
8628
16
                NULL, HFILL }
8629
16
        },
8630
16
        { &hf_btmesh_cntr_feature_proxy,
8631
16
            { "Proxy feature in use", "btmesh.cntr.feature.proxy",
8632
16
                FT_BOOLEAN, 16, NULL, 0x0002,
8633
16
                NULL, HFILL }
8634
16
        },
8635
16
        { &hf_btmesh_cntr_feature_friend,
8636
16
            { "Friend feature in use", "btmesh.cntr.feature.friend",
8637
16
                FT_BOOLEAN, 16, NULL, 0x0004,
8638
16
                NULL, HFILL }
8639
16
        },
8640
16
        { &hf_btmesh_cntr_feature_low_power,
8641
16
            { "Low Power feature in use", "btmesh.cntr.feature.lowpower",
8642
16
                FT_BOOLEAN, 16, NULL, 0x0008,
8643
16
                NULL, HFILL }
8644
16
        },
8645
16
        { &hf_btmesh_cntr_feature_rfu,
8646
16
            { "Reserved for Future Use", "btmesh.cntr.feature.rfu",
8647
16
                FT_UINT16, BASE_DEC, NULL, 0xfff0,
8648
16
                NULL, HFILL }
8649
16
        },
8650
16
        { &hf_btmesh_cntr_unknown_payload,
8651
16
            { "Unknown Control Message payload", "btmesh.cntr.unknownpayload",
8652
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8653
16
                NULL, HFILL }
8654
16
            },
8655
16
        { &hf_btmesh_enc_access_pld,
8656
16
            { "Encrypted Access Payload", "btmesh.enc_access_pld",
8657
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8658
16
                NULL, HFILL }
8659
16
            },
8660
16
        { &hf_btmesh_transtmic,
8661
16
            { "TransMIC", "btmesh.transtmic",
8662
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8663
16
                NULL, HFILL }
8664
16
            },
8665
16
        { &hf_btmesh_szmic,
8666
16
            { "SZMIC", "btmesh.szmic",
8667
16
                FT_UINT24, BASE_DEC, VALS(btmesh_szmic_vals), 0x800000,
8668
16
                NULL, HFILL }
8669
16
            },
8670
16
        { &hf_btmesh_seqzero_data,
8671
16
            { "SeqZero", "btmesh.seqzero_data",
8672
16
                FT_UINT24, BASE_DEC, NULL, 0x7ffc00,
8673
16
                NULL, HFILL }
8674
16
            },
8675
16
        { &hf_btmesh_sego,
8676
16
            { "Segment Offset number(SegO)", "btmesh.sego",
8677
16
                FT_UINT24, BASE_DEC, NULL, 0x0003e0,
8678
16
                NULL, HFILL }
8679
16
            },
8680
16
        { &hf_btmesh_segn,
8681
16
            { "Last Segment number(SegN)", "btmesh.segn",
8682
16
                FT_UINT24, BASE_DEC, NULL, 0x00001f,
8683
16
                NULL, HFILL }
8684
16
            },
8685
16
        { &hf_btmesh_seg_rfu,
8686
16
            { "RFU", "btmesh.seg.rfu",
8687
16
                FT_UINT24, BASE_DEC, NULL, 0x800000,
8688
16
                NULL, HFILL }
8689
16
            },
8690
16
        { &hf_btmesh_segment,
8691
16
            { "Segment", "btmesh.segment",
8692
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8693
16
                NULL, HFILL }
8694
16
            },
8695
        /* Access Message Reassembly */
8696
16
        { &hf_btmesh_segmented_access_fragments,
8697
16
            { "Reassembled Segmented Access Message Fragments", "btmesh.segmented.access.fragments",
8698
16
                FT_NONE, BASE_NONE, NULL, 0x0,
8699
16
                NULL, HFILL }
8700
16
        },
8701
16
        { &hf_btmesh_segmented_access_fragment,
8702
16
            { "Segmented Access Message Fragment", "btmesh.segmented.access.fragment",
8703
16
                FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8704
16
                NULL, HFILL }
8705
16
        },
8706
16
        { &hf_btmesh_segmented_access_fragment_overlap,
8707
16
            { "Fragment overlap", "btmesh.segmented.access.fragment.overlap",
8708
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8709
16
                "Fragment overlaps with other fragments", HFILL }
8710
16
        },
8711
16
        { &hf_btmesh_segmented_access_fragment_overlap_conflict,
8712
16
            { "Conflicting data in fragment overlap", "btmesh.segmented.access.fragment.overlap.conflict",
8713
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8714
16
                "Overlapping fragments contained conflicting data", HFILL }
8715
16
        },
8716
16
        { &hf_btmesh_segmented_access_fragment_multiple_tails,
8717
16
            { "Multiple tail fragments found", "btmesh.segmented.access.fragment.multipletails",
8718
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8719
16
                "Several tails were found when defragmenting the packet", HFILL }
8720
16
        },
8721
16
        { &hf_btmesh_segmented_access_fragment_too_long_fragment,
8722
16
            { "Fragment too long", "btmesh.segmented.access.fragment.toolongfragment",
8723
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8724
16
                "Fragment contained data past end of packet", HFILL }
8725
16
        },
8726
16
        { &hf_btmesh_segmented_access_fragment_error,
8727
16
            { "Defragmentation error", "btmesh.segmented.access.fragment.error",
8728
16
                FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8729
16
                "Defragmentation error due to illegal fragments", HFILL }
8730
16
        },
8731
16
        { &hf_btmesh_segmented_access_fragment_count,
8732
16
            { "Fragment count", "btmesh.segmented.access.fragment.count",
8733
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8734
16
                NULL, HFILL }
8735
16
        },
8736
16
        { &hf_btmesh_segmented_access_reassembled_length,
8737
16
            { "Reassembled Segmented Access Message length", "btmesh.segmented.access.reassembled.length",
8738
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8739
16
                "The total length of the reassembled payload", HFILL }
8740
16
        },
8741
        /* Control Message Reassembly */
8742
16
        { &hf_btmesh_segmented_control_fragments,
8743
16
            { "Reassembled Segmented Control Message Fragments", "btmesh.segmented.control.fragments",
8744
16
                FT_NONE, BASE_NONE, NULL, 0x0,
8745
16
                "Segmented Access Message Fragments", HFILL }
8746
16
        },
8747
16
        { &hf_btmesh_segmented_control_fragment,
8748
16
            { "Segmented Control Message Fragment", "btmesh.segmented.control.fragment",
8749
16
                FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8750
16
                NULL, HFILL }
8751
16
        },
8752
16
        { &hf_btmesh_segmented_control_fragment_overlap,
8753
16
            { "Fragment overlap", "btmesh.segmented.control.fragment.overlap",
8754
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8755
16
                "Fragment overlaps with other fragments", HFILL }
8756
16
        },
8757
16
        { &hf_btmesh_segmented_control_fragment_overlap_conflict,
8758
16
            { "Conflicting data in fragment overlap", "btmesh.segmented.control.fragment.overlap.conflict",
8759
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8760
16
                "Overlapping fragments contained conflicting data", HFILL }
8761
16
        },
8762
16
        { &hf_btmesh_segmented_control_fragment_multiple_tails,
8763
16
            { "Multiple tail fragments found", "btmesh.segmented.control.fragment.multipletails",
8764
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8765
16
                "Several tails were found when defragmenting the packet", HFILL }
8766
16
        },
8767
16
        { &hf_btmesh_segmented_control_fragment_too_long_fragment,
8768
16
            { "Fragment too long", "btmesh.segmented.control.fragment.toolongfragment",
8769
16
                FT_BOOLEAN, BASE_NONE, NULL, 0x0,
8770
16
                "Fragment contained data past end of packet", HFILL }
8771
16
        },
8772
16
        { &hf_btmesh_segmented_control_fragment_error,
8773
16
            { "Defragmentation error", "btmesh.segmented.control.fragment.error",
8774
16
                FT_FRAMENUM, BASE_NONE, NULL, 0x0,
8775
16
                "Defragmentation error due to illegal fragments", HFILL }
8776
16
        },
8777
16
        { &hf_btmesh_segmented_control_fragment_count,
8778
16
            { "Fragment count", "btmesh.segmented.control.fragment.count",
8779
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8780
16
                NULL, HFILL }
8781
16
        },
8782
16
        { &hf_btmesh_segmented_control_reassembled_length,
8783
16
            { "Reassembled Segmented Control Message length", "btmesh.segmented.control.reassembled.length",
8784
16
                FT_UINT32, BASE_DEC, NULL, 0x0,
8785
16
                "The total length of the reassembled payload", HFILL }
8786
16
        },
8787
16
        { &hf_btmesh_decrypted_access,
8788
16
            { "Decrypted Access", "btmesh.access.decrypted",
8789
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8790
16
                NULL, HFILL }
8791
16
        },
8792
16
        { &hf_btmesh_model_layer_vendor_opcode,
8793
16
            { "Opcode", "btmesh.model.vendor.opcode",
8794
16
                FT_UINT8, BASE_DEC, NULL, 0x3f,
8795
16
                NULL, HFILL }
8796
16
        },
8797
16
        { &hf_btmesh_model_layer_vendor,
8798
16
            { "Company ID", "btmesh.model.vendor",
8799
16
                FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
8800
16
                NULL, HFILL }
8801
16
        },
8802
16
        { &hf_btmesh_model_layer_opcode,
8803
16
            { "Opcode", "btmesh.model.opcode",
8804
16
                FT_UINT16, BASE_HEX, VALS(btmesh_models_opcode_vals), 0x0,
8805
16
                NULL, HFILL }
8806
16
        },
8807
16
        { &hf_btmesh_model_layer_parameters,
8808
16
            { "Parameters", "btmesh.model.parameters",
8809
16
                FT_BYTES, BASE_NONE, NULL, 0x0,
8810
16
                NULL, HFILL }
8811
16
        },
8812
        /* Config Model opcodes parameters */
8813
16
        { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex,
8814
16
            { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex",
8815
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
8816
16
            NULL, HFILL }
8817
16
        },
8818
16
        { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_net,
8819
16
            { "NetKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex.net",
8820
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
8821
16
            NULL, HFILL }
8822
16
        },
8823
16
        { &hf_btmesh_config_appkey_add_netkeyindexandappkeyindex_app,
8824
16
            { "AppKeyIndex", "btmesh.model.config_appkey_add.netkeyindexandappkeyindex.app",
8825
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
8826
16
            NULL, HFILL }
8827
16
        },
8828
16
        { &hf_btmesh_config_appkey_add_appkey,
8829
16
            { "AppKey", "btmesh.model.config_appkey_add.appkey",
8830
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
8831
16
            NULL, HFILL }
8832
16
        },
8833
16
        { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex,
8834
16
            { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex",
8835
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
8836
16
            NULL, HFILL }
8837
16
        },
8838
16
        { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_net,
8839
16
            { "NetKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex.net",
8840
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
8841
16
            NULL, HFILL }
8842
16
        },
8843
16
        { &hf_btmesh_config_appkey_update_netkeyindexandappkeyindex_app,
8844
16
            { "AppKeyIndex", "btmesh.model.config_appkey_update.netkeyindexandappkeyindex.app",
8845
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
8846
16
            NULL, HFILL }
8847
16
        },
8848
16
        { &hf_btmesh_config_appkey_update_appkey,
8849
16
            { "AppKey", "btmesh.model.config_appkey_update.appkey",
8850
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
8851
16
            NULL, HFILL }
8852
16
        },
8853
16
        { &hf_btmesh_config_composition_data_status_page,
8854
16
            { "Page", "btmesh.model.config_composition_data_status.page",
8855
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
8856
16
            NULL, HFILL }
8857
16
        },
8858
16
        { &hf_btmesh_config_composition_data_status_cid,
8859
16
            { "CID", "btmesh.model.config_composition_data_status.cid",
8860
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
8861
16
            NULL, HFILL }
8862
16
        },
8863
16
        { &hf_btmesh_config_composition_data_status_pid,
8864
16
            { "PID", "btmesh.model.config_composition_data_status.pid",
8865
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8866
16
            NULL, HFILL }
8867
16
        },
8868
16
        { &hf_btmesh_config_composition_data_status_vid,
8869
16
            { "VID", "btmesh.model.config_composition_data_status.vid",
8870
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8871
16
            NULL, HFILL }
8872
16
        },
8873
16
        { &hf_btmesh_config_composition_data_status_crpl,
8874
16
            { "CRPL", "btmesh.model.config_composition_data_status.crpl",
8875
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
8876
16
            NULL, HFILL }
8877
16
        },
8878
16
        { &hf_btmesh_config_composition_data_status_features_relay,
8879
16
            { "Relay feature", "btmesh.model.config_composition_data_status.features.relay",
8880
16
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0001,
8881
16
            NULL, HFILL }
8882
16
        },
8883
16
        { &hf_btmesh_config_composition_data_status_features_proxy,
8884
16
            { "Proxy feature", "btmesh.model.config_composition_data_status.features.proxy",
8885
16
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0002,
8886
16
            NULL, HFILL }
8887
16
        },
8888
16
        { &hf_btmesh_config_composition_data_status_features_friend,
8889
16
            { "Friend feature", "btmesh.model.config_composition_data_status.features.friend",
8890
16
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0004,
8891
16
            NULL, HFILL }
8892
16
        },
8893
16
        { &hf_btmesh_config_composition_data_status_features_low_power,
8894
16
            { "Low Power feature", "btmesh.model.config_composition_data_status.features.low_power",
8895
16
            FT_BOOLEAN, 16, TFS(&tfs_supported_not_supported), 0x0008,
8896
16
            NULL, HFILL }
8897
16
        },
8898
16
        { &hf_btmesh_config_composition_data_status_features_rfu,
8899
16
            { "RFU", "btmesh.model.config_composition_data_status.features.rfu",
8900
16
            FT_UINT16, BASE_HEX, NULL, 0xFFF0,
8901
16
            NULL, HFILL }
8902
16
        },
8903
16
        { &hf_btmesh_config_composition_data_status_features,
8904
16
            { "Features", "btmesh.model.config_composition_data_status.features",
8905
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
8906
16
            NULL, HFILL }
8907
16
        },
8908
16
        { &hf_btmesh_config_composition_data_status_loc,
8909
16
            { "Loc", "btmesh.model.config_composition_data_status.loc",
8910
16
            FT_UINT16, BASE_HEX, VALS(characteristic_presentation_namespace_description_btsig_vals), 0x0,
8911
16
            NULL, HFILL }
8912
16
        },
8913
16
        { &hf_btmesh_config_composition_data_status_nums,
8914
16
            { "NumS", "btmesh.model.config_composition_data_status.nums",
8915
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
8916
16
            NULL, HFILL }
8917
16
        },
8918
16
        { &hf_btmesh_config_composition_data_status_numv,
8919
16
            { "NumV", "btmesh.model.config_composition_data_status.numv",
8920
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
8921
16
            NULL, HFILL }
8922
16
        },
8923
16
        { &hf_btmesh_config_composition_data_status_sig_model,
8924
16
            { "SIG Model", "btmesh.model.config_composition_data_status.sig_model",
8925
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
8926
16
            NULL, HFILL }
8927
16
        },
8928
16
        { &hf_btmesh_config_composition_data_status_vendor_model,
8929
16
            { "Vendor Model", "btmesh.model.config_composition_data_status.vendor_model",
8930
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
8931
16
            NULL, HFILL }
8932
16
        },
8933
16
        { &hf_btmesh_config_model_publication_set_elementaddress,
8934
16
            { "ElementAddress", "btmesh.model.config_model_publication_set.elementaddress",
8935
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
8936
16
            NULL, HFILL }
8937
16
        },
8938
16
        { &hf_btmesh_config_model_publication_set_publishaddress,
8939
16
            { "PublishAddress", "btmesh.model.config_model_publication_set.publishaddress",
8940
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
8941
16
            NULL, HFILL }
8942
16
        },
8943
16
        { &hf_btmesh_config_model_publication_set_appkey,
8944
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_set.appkey",
8945
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
8946
16
            NULL, HFILL }
8947
16
        },
8948
16
        { &hf_btmesh_config_model_publication_set_appkeyindex,
8949
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_set.appkeyindex",
8950
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
8951
16
            NULL, HFILL }
8952
16
        },
8953
16
        { &hf_btmesh_config_model_publication_set_credentialflag,
8954
16
            { "CredentialFlag", "btmesh.model.config_model_publication_set.credentialflag",
8955
16
            FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
8956
16
            NULL, HFILL }
8957
16
        },
8958
16
        { &hf_btmesh_config_model_publication_set_rfu,
8959
16
            { "RFU", "btmesh.model.config_model_publication_set.rfu",
8960
16
            FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0xE000,
8961
16
            NULL, HFILL }
8962
16
        },
8963
16
        { &hf_btmesh_config_model_publication_set_publishttl,
8964
16
            { "PublishTTL", "btmesh.model.config_model_publication_set.publishttl",
8965
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
8966
16
            NULL, HFILL }
8967
16
        },
8968
16
        { &hf_btmesh_config_model_publication_set_publishperiod,
8969
16
            { "PublishPeriod", "btmesh.model.config_model_publication_set.publishperiod",
8970
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
8971
16
            NULL, HFILL }
8972
16
        },
8973
16
        { &hf_btmesh_config_model_publication_set_publishperiod_resolution,
8974
16
            { "Step Resolution", "btmesh.model.config_model_publication_set.publishperiod.resolution",
8975
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
8976
16
            NULL, HFILL }
8977
16
        },
8978
16
        { &hf_btmesh_config_model_publication_set_publishperiod_steps,
8979
16
            { "Number of Steps", "btmesh.model.config_model_publication_set.publishperiod.steps",
8980
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
8981
16
            NULL, HFILL }
8982
16
        },
8983
16
        { &hf_btmesh_config_model_publication_set_publishretransmit,
8984
16
            { "PublishRetransmit", "btmesh.model.config_model_publication_set.publishretransmit",
8985
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
8986
16
            NULL, HFILL }
8987
16
        },
8988
16
        { &hf_btmesh_config_model_publication_set_publishretransmit_count,
8989
16
            { "PublishRetransmitCount", "btmesh.model.config_model_publication_set.publishretransmit.count",
8990
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
8991
16
            NULL, HFILL }
8992
16
        },
8993
16
        { &hf_btmesh_config_model_publication_set_publishretransmit_intervalsteps,
8994
16
            { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_set.publishretransmit.intervalsteps",
8995
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
8996
16
            NULL, HFILL }
8997
16
        },
8998
16
        { &hf_btmesh_config_model_publication_set_modelidentifier,
8999
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_set.modelidentifier",
9000
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9001
16
            NULL, HFILL }
9002
16
        },
9003
16
        { &hf_btmesh_config_model_publication_set_vendormodelidentifier,
9004
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_set.vendormodelidentifier",
9005
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9006
16
            NULL, HFILL }
9007
16
        },
9008
16
        { &hf_btmesh_health_current_status_test_id,
9009
16
            { "Test ID", "btmesh.model.health_current_status.test_id",
9010
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9011
16
            NULL, HFILL }
9012
16
        },
9013
16
        { &hf_btmesh_health_current_status_company_id,
9014
16
            { "Company ID", "btmesh.model.health_current_status.company_id",
9015
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9016
16
            NULL, HFILL }
9017
16
        },
9018
16
        { &hf_btmesh_health_current_status_fault,
9019
16
            { "Fault", "btmesh.model.health_current_status.fault",
9020
16
            FT_UINT8, BASE_DEC, VALS(btmesh_fault_array_vals), 0x0,
9021
16
            NULL, HFILL }
9022
16
        },
9023
16
        { &hf_btmesh_health_fault_status_test_id,
9024
16
            { "Test ID", "btmesh.model.health_fault_status.test_id",
9025
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9026
16
            NULL, HFILL }
9027
16
        },
9028
16
        { &hf_btmesh_health_fault_status_company_id,
9029
16
            { "Company ID", "btmesh.model.health_fault_status.company_id",
9030
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9031
16
            NULL, HFILL }
9032
16
        },
9033
16
        { &hf_btmesh_health_fault_status_fault,
9034
16
            { "Fault", "btmesh.model.health_fault_status.fault",
9035
16
            FT_UINT8, BASE_DEC, VALS(btmesh_fault_array_vals), 0x0,
9036
16
            NULL, HFILL }
9037
16
        },
9038
16
        { &hf_btmesh_config_heartbeat_publication_status_status,
9039
16
            { "Status", "btmesh.model.config_heartbeat_publication_status.status",
9040
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9041
16
            NULL, HFILL }
9042
16
        },
9043
16
        { &hf_btmesh_config_heartbeat_publication_status_destination,
9044
16
            { "Destination", "btmesh.model.config_heartbeat_publication_status.destination",
9045
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9046
16
            NULL, HFILL }
9047
16
        },
9048
16
        { &hf_btmesh_config_heartbeat_publication_status_countlog,
9049
16
            { "CountLog", "btmesh.model.config_heartbeat_publication_status.countlog",
9050
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9051
16
            NULL, HFILL }
9052
16
        },
9053
16
        { &hf_btmesh_config_heartbeat_publication_status_periodlog,
9054
16
            { "PeriodLog", "btmesh.model.config_heartbeat_publication_status.periodlog",
9055
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9056
16
            NULL, HFILL }
9057
16
        },
9058
16
        { &hf_btmesh_config_heartbeat_publication_status_ttl,
9059
16
            { "TTL", "btmesh.model.config_heartbeat_publication_status.ttl",
9060
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9061
16
            NULL, HFILL }
9062
16
        },
9063
16
        { &hf_btmesh_config_heartbeat_publication_status_features_relay,
9064
16
            { "Relay feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.relay",
9065
16
            FT_BOOLEAN, 16, NULL, 0x0001,
9066
16
            NULL, HFILL }
9067
16
        },
9068
16
        { &hf_btmesh_config_heartbeat_publication_status_features_proxy,
9069
16
            { "Proxy feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.proxy",
9070
16
            FT_BOOLEAN, 16, NULL, 0x0002,
9071
16
            NULL, HFILL }
9072
16
        },
9073
16
        { &hf_btmesh_config_heartbeat_publication_status_features_friend,
9074
16
            { "Friend feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.friend",
9075
16
            FT_BOOLEAN, 16, NULL, 0x0004,
9076
16
            NULL, HFILL }
9077
16
        },
9078
16
        { &hf_btmesh_config_heartbeat_publication_status_features_low_power,
9079
16
            { "Low Power feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_status.features.low_power",
9080
16
            FT_BOOLEAN, 16, NULL, 0x0008,
9081
16
            NULL, HFILL }
9082
16
        },
9083
16
        { &hf_btmesh_config_heartbeat_publication_status_features_rfu,
9084
16
            { "RFU", "btmesh.model.config_heartbeat_publication_status.features.rfu",
9085
16
            FT_UINT16, BASE_HEX, NULL, 0xFFF0,
9086
16
            NULL, HFILL }
9087
16
        },
9088
16
        { &hf_btmesh_config_heartbeat_publication_status_features,
9089
16
            { "Features", "btmesh.model.config_heartbeat_publication_status.features",
9090
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9091
16
            NULL, HFILL }
9092
16
        },
9093
16
        { &hf_btmesh_config_heartbeat_publication_status_netkeyindex,
9094
16
            { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_status.netkeyindex",
9095
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9096
16
                NULL, HFILL }
9097
16
        },
9098
16
        { &hf_btmesh_config_heartbeat_publication_status_netkeyindex_idx,
9099
16
            { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_status.netkeyindex.idx",
9100
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9101
16
                NULL, HFILL }
9102
16
        },
9103
16
        { &hf_btmesh_config_heartbeat_publication_status_netkeyindex_rfu,
9104
16
            { "RFU", "btmesh.model.config_heartbeat_publication_status.netkeyindex.rfu",
9105
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9106
16
                NULL, HFILL }
9107
16
        },
9108
16
        { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex,
9109
16
            { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex",
9110
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
9111
16
            NULL, HFILL }
9112
16
        },
9113
16
        { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_net,
9114
16
            { "NetKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex.net",
9115
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
9116
16
            NULL, HFILL }
9117
16
        },
9118
16
        { &hf_btmesh_config_appkey_delete_netkeyindexandappkeyindex_app,
9119
16
            { "AppKeyIndex", "btmesh.model.config_appkey_delete.netkeyindexandappkeyindex.app",
9120
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
9121
16
            NULL, HFILL }
9122
16
        },
9123
16
        { &hf_btmesh_config_appkey_get_netkeyindex,
9124
16
            { "NetKeyIndex", "btmesh.model.config_appkey_get.netkeyindex",
9125
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9126
16
            NULL, HFILL }
9127
16
        },
9128
16
        { &hf_btmesh_config_appkey_get_netkeyindex_idx,
9129
16
            { "NetKeyIndex", "btmesh.model.config_appkey_get.netkeyindex.idx",
9130
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9131
16
            NULL, HFILL }
9132
16
        },
9133
16
        { &hf_btmesh_config_appkey_get_netkeyindex_rfu,
9134
16
            { "RFU", "btmesh.model.config_appkey_get.netkeyindex.rfu",
9135
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9136
16
            NULL, HFILL }
9137
16
        },
9138
16
        { &hf_btmesh_config_appkey_list_status,
9139
16
            { "Status", "btmesh.model.config_appkey_list.status",
9140
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9141
16
            NULL, HFILL }
9142
16
        },
9143
16
        { &hf_btmesh_config_appkey_list_netkeyindex,
9144
16
            { "NetKeyIndex", "btmesh.model.config_appkey_list.netkeyindex",
9145
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9146
16
            NULL, HFILL }
9147
16
        },
9148
16
        { &hf_btmesh_config_appkey_list_netkeyindex_idx,
9149
16
            { "NetKeyIndex", "btmesh.model.config_appkey_list.netkeyindex.idx",
9150
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9151
16
            NULL, HFILL }
9152
16
        },
9153
16
        { &hf_btmesh_config_appkey_list_netkeyindex_rfu,
9154
16
            { "RFU", "btmesh.model.config_appkey_list.netkeyindex.rfu",
9155
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9156
16
            NULL, HFILL }
9157
16
        },
9158
16
        { &hf_btmesh_config_appkey_list_appkeyindex,
9159
16
            { "AppKeyIndex", "btmesh.model.config_appkey_list.appkeyindex",
9160
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9161
16
            NULL, HFILL }
9162
16
        },
9163
16
        { &hf_btmesh_config_appkey_list_appkeyindex_rfu,
9164
16
            { "RFU", "btmesh.model.config_appkey_list.appkeyindex.rfu",
9165
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
9166
16
            NULL, HFILL }
9167
16
        },
9168
16
        { &hf_btmesh_config_appkey_status_status,
9169
16
            { "Status", "btmesh.model.config_appkey_status.status",
9170
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9171
16
            NULL, HFILL }
9172
16
        },
9173
16
        { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex,
9174
16
            { "NetKeyIndexAndAppKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex",
9175
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_dual_key_index), 0x0,
9176
16
            NULL, HFILL }
9177
16
        },
9178
16
        { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_net,
9179
16
            { "NetKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex.net",
9180
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0x000FFF,
9181
16
            NULL, HFILL }
9182
16
        },
9183
16
        { &hf_btmesh_config_appkey_status_netkeyindexandappkeyindex_app,
9184
16
            { "AppKeyIndex", "btmesh.model.config_appkey_status.netkeyindexandappkeyindex.app",
9185
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_key_index), 0xFFF000,
9186
16
            NULL, HFILL }
9187
16
        },
9188
16
        { &hf_btmesh_health_attention_set_attention,
9189
16
            { "Attention", "btmesh.model.health_attention_set.attention",
9190
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9191
16
            NULL, HFILL }
9192
16
        },
9193
16
        { &hf_btmesh_health_attention_set_unacknowledged_attention,
9194
16
            { "Attention", "btmesh.model.health_attention_set_unacknowledged.attention",
9195
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9196
16
            NULL, HFILL }
9197
16
        },
9198
16
        { &hf_btmesh_health_attention_status_attention,
9199
16
            { "Attention", "btmesh.model.health_attention_status.attention",
9200
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9201
16
            NULL, HFILL }
9202
16
        },
9203
16
        { &hf_btmesh_config_composition_data_get_page,
9204
16
            { "Page", "btmesh.model.config_composition_data_get.page",
9205
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9206
16
            NULL, HFILL }
9207
16
        },
9208
16
        { &hf_btmesh_config_beacon_set_beacon,
9209
16
            { "Beacon", "btmesh.model.config_beacon_set.beacon",
9210
16
            FT_UINT8, BASE_DEC, VALS(btmesh_beacon_broadcast_vals), 0x0,
9211
16
            NULL, HFILL }
9212
16
        },
9213
16
        { &hf_btmesh_config_beacon_status_beacon,
9214
16
            { "Beacon", "btmesh.model.config_beacon_status.beacon",
9215
16
            FT_UINT8, BASE_DEC, VALS(btmesh_beacon_broadcast_vals), 0x0,
9216
16
            NULL, HFILL }
9217
16
        },
9218
16
        { &hf_btmesh_config_default_ttl_set_ttl,
9219
16
            { "TTL", "btmesh.model.config_default_ttl_set.ttl",
9220
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9221
16
            NULL, HFILL }
9222
16
        },
9223
16
        { &hf_btmesh_config_default_ttl_status_ttl,
9224
16
            { "TTL", "btmesh.model.config_default_ttl_status.ttl",
9225
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9226
16
            NULL, HFILL }
9227
16
        },
9228
16
        { &hf_btmesh_config_friend_set_friend,
9229
16
            { "Friend", "btmesh.model.config_friend_set.friend",
9230
16
            FT_UINT8, BASE_DEC, VALS(btmesh_friend_vals), 0x0,
9231
16
            NULL, HFILL }
9232
16
        },
9233
16
        { &hf_btmesh_config_friend_status_friend,
9234
16
            { "Friend", "btmesh.model.config_friend_status.friend",
9235
16
            FT_UINT8, BASE_DEC, VALS(btmesh_friend_vals), 0x0,
9236
16
            NULL, HFILL }
9237
16
        },
9238
16
        { &hf_btmesh_config_gatt_proxy_set_gattproxy,
9239
16
            { "GATTProxy", "btmesh.model.config_gatt_proxy_set.gattproxy",
9240
16
            FT_UINT8, BASE_HEX, VALS(btmesh_gatt_proxy_vals), 0x0,
9241
16
            NULL, HFILL }
9242
16
        },
9243
16
        { &hf_btmesh_config_gatt_proxy_status_gattproxy,
9244
16
            { "GATTProxy", "btmesh.model.config_gatt_proxy_status.gattproxy",
9245
16
            FT_UINT8, BASE_HEX, VALS(btmesh_gatt_proxy_vals), 0x0,
9246
16
            NULL, HFILL }
9247
16
        },
9248
16
        { &hf_btmesh_config_key_refresh_phase_get_netkeyindex,
9249
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_get.netkeyindex",
9250
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9251
16
                NULL, HFILL }
9252
16
        },
9253
16
        { &hf_btmesh_config_key_refresh_phase_get_netkeyindex_idx,
9254
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_get.netkeyindex.idx",
9255
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9256
16
                NULL, HFILL }
9257
16
        },
9258
16
        { &hf_btmesh_config_key_refresh_phase_get_netkeyindex_rfu,
9259
16
            { "RFU", "btmesh.model.config_key_refresh_phase_get.netkeyindex.rfu",
9260
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9261
16
                NULL, HFILL }
9262
16
        },
9263
16
        { &hf_btmesh_config_key_refresh_phase_set_netkeyindex,
9264
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_set.netkeyindex",
9265
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9266
16
                NULL, HFILL }
9267
16
        },
9268
16
        { &hf_btmesh_config_key_refresh_phase_set_netkeyindex_idx,
9269
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_set.netkeyindex.idx",
9270
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9271
16
                NULL, HFILL }
9272
16
        },
9273
16
        { &hf_btmesh_config_key_refresh_phase_set_netkeyindex_rfu,
9274
16
            { "RFU", "btmesh.model.config_key_refresh_phase_set.netkeyindex.rfu",
9275
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9276
16
                NULL, HFILL }
9277
16
        },
9278
16
        { &hf_btmesh_config_key_refresh_phase_set_transition,
9279
16
            { "Transition", "btmesh.model.config_key_refresh_phase_set.transition",
9280
16
            FT_UINT8, BASE_DEC | BASE_RANGE_STRING, RVALS(btmesh_transition_vals), 0x0,
9281
16
            NULL, HFILL }
9282
16
        },
9283
16
        { &hf_btmesh_config_key_refresh_phase_status_status,
9284
16
            { "Status", "btmesh.model.config_key_refresh_phase_status.status",
9285
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9286
16
            NULL, HFILL }
9287
16
        },
9288
16
        { &hf_btmesh_config_key_refresh_phase_status_netkeyindex,
9289
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_status.netkeyindex",
9290
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9291
16
                NULL, HFILL }
9292
16
        },
9293
16
        { &hf_btmesh_config_key_refresh_phase_status_netkeyindex_idx,
9294
16
            { "NetKeyIndex", "btmesh.model.config_key_refresh_phase_status.netkeyindex.idx",
9295
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9296
16
                NULL, HFILL }
9297
16
        },
9298
16
        { &hf_btmesh_config_key_refresh_phase_status_netkeyindex_rfu,
9299
16
            { "RFU", "btmesh.model.config_key_refresh_phase_status.netkeyindex.rfu",
9300
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9301
16
                NULL, HFILL }
9302
16
        },
9303
16
        { &hf_btmesh_config_key_refresh_phase_status_phase,
9304
16
            { "Phase", "btmesh.model.config_key_refresh_phase_status.phase",
9305
16
            FT_UINT8, BASE_DEC, VALS(btmesh_phase_vals), 0x0,
9306
16
            NULL, HFILL }
9307
16
        },
9308
16
        { &hf_btmesh_config_model_publication_get_elementaddress,
9309
16
            { "ElementAddress", "btmesh.model.config_model_publication_get.elementaddress",
9310
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9311
16
            NULL, HFILL }
9312
16
        },
9313
16
        { &hf_btmesh_config_model_publication_get_modelidentifier,
9314
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_get.modelidentifier",
9315
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9316
16
            NULL, HFILL }
9317
16
        },
9318
16
        { &hf_btmesh_config_model_publication_get_vendormodelidentifier,
9319
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_get.vendormodelidentifier",
9320
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9321
16
            NULL, HFILL }
9322
16
        },
9323
16
        { &hf_btmesh_config_model_publication_status_status,
9324
16
            { "Status", "btmesh.model.config_model_publication_status.status",
9325
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9326
16
            NULL, HFILL }
9327
16
        },
9328
16
        { &hf_btmesh_config_model_publication_status_elementaddress,
9329
16
            { "ElementAddress", "btmesh.model.config_model_publication_status.elementaddress",
9330
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9331
16
            NULL, HFILL }
9332
16
        },
9333
16
        { &hf_btmesh_config_model_publication_status_publishaddress,
9334
16
            { "PublishAddress", "btmesh.model.config_model_publication_status.publishaddress",
9335
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9336
16
            NULL, HFILL }
9337
16
        },
9338
16
        { &hf_btmesh_config_model_publication_status_appkey,
9339
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_status.appkey",
9340
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
9341
16
            NULL, HFILL }
9342
16
        },
9343
16
        { &hf_btmesh_config_model_publication_status_appkeyindex,
9344
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_status.appkeyindex",
9345
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9346
16
            NULL, HFILL }
9347
16
        },
9348
16
        { &hf_btmesh_config_model_publication_status_credentialflag,
9349
16
            { "CredentialFlag", "btmesh.model.config_model_publication_status.credentialflag",
9350
16
            FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
9351
16
            NULL, HFILL }
9352
16
        },
9353
16
        { &hf_btmesh_config_model_publication_status_rfu,
9354
16
            { "RFU", "btmesh.model.config_model_publication_status.rfu",
9355
16
            FT_UINT16, BASE_HEX, NULL, 0xE000,
9356
16
            NULL, HFILL }
9357
16
        },
9358
16
        { &hf_btmesh_config_model_publication_status_publishttl,
9359
16
            { "PublishTTL", "btmesh.model.config_model_publication_status.publishttl",
9360
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9361
16
            NULL, HFILL }
9362
16
        },
9363
16
        { &hf_btmesh_config_model_publication_status_publishperiod,
9364
16
            { "PublishPeriod", "btmesh.model.config_model_publication_status.publishperiod",
9365
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
9366
16
            NULL, HFILL }
9367
16
        },
9368
16
        { &hf_btmesh_config_model_publication_status_publishperiod_resolution,
9369
16
            { "Step Resolution", "btmesh.model.config_model_publication_status.publishperiod.resolution",
9370
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
9371
16
            NULL, HFILL }
9372
16
        },
9373
16
        { &hf_btmesh_config_model_publication_status_publishperiod_steps,
9374
16
            { "Number of Steps", "btmesh.model.config_model_publication_status.publishperiod.steps",
9375
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
9376
16
            NULL, HFILL }
9377
16
        },
9378
16
        { &hf_btmesh_config_model_publication_status_publishretransmit,
9379
16
            { "PublishRetransmit", "btmesh.model.config_model_publication_status.publishretransmit",
9380
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9381
16
            NULL, HFILL }
9382
16
        },
9383
16
        { &hf_btmesh_config_model_publication_status_publishretransmit_count,
9384
16
            { "PublishRetransmitCount", "btmesh.model.config_model_publication_status.publishretransmit.count",
9385
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9386
16
            NULL, HFILL }
9387
16
        },
9388
16
        { &hf_btmesh_config_model_publication_status_publishretransmit_intervalsteps,
9389
16
            { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_status.publishretransmit.intervalsteps",
9390
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9391
16
            NULL, HFILL }
9392
16
        },
9393
16
        { &hf_btmesh_config_model_publication_status_modelidentifier,
9394
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_status.modelidentifier",
9395
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9396
16
            NULL, HFILL }
9397
16
        },
9398
16
        { &hf_btmesh_config_model_publication_status_vendormodelidentifier,
9399
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_status.vendormodelidentifier",
9400
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9401
16
            NULL, HFILL }
9402
16
        },
9403
16
        { &hf_btmesh_config_model_publication_virtual_address_set_elementaddress,
9404
16
            { "ElementAddress", "btmesh.model.config_model_publication_virtual_address_set.elementaddress",
9405
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9406
16
            NULL, HFILL }
9407
16
        },
9408
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishaddress,
9409
16
            { "PublishAddress", "btmesh.model.config_model_publication_virtual_address_set.publishaddress",
9410
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
9411
16
            NULL, HFILL }
9412
16
        },
9413
16
        { &hf_btmesh_config_model_publication_virtual_address_set_appkey,
9414
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_virtual_address_set.appkey",
9415
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_publish_appkeyindex_model), 0x0,
9416
16
            NULL, HFILL }
9417
16
        },
9418
16
        { &hf_btmesh_config_model_publication_virtual_address_set_appkeyindex,
9419
16
            { "AppKeyIndex", "btmesh.model.config_model_publication_virtual_address_set.appkeyindex",
9420
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9421
16
            NULL, HFILL }
9422
16
        },
9423
16
        { &hf_btmesh_config_model_publication_virtual_address_set_credentialflag,
9424
16
            { "CredentialFlag", "btmesh.model.config_model_publication_virtual_address_set.credentialflag",
9425
16
            FT_UINT16, BASE_DEC, VALS(btmesh_friendship_credentials_flag_vals), 0x1000,
9426
16
            NULL, HFILL }
9427
16
        },
9428
16
        { &hf_btmesh_config_model_publication_virtual_address_set_rfu,
9429
16
            { "RFU", "btmesh.model.config_model_publication_virtual_address_set.rfu",
9430
16
            FT_UINT16, BASE_HEX, NULL, 0xE000,
9431
16
            NULL, HFILL }
9432
16
        },
9433
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishttl,
9434
16
            { "PublishTTL", "btmesh.model.config_model_publication_virtual_address_set.publishttl",
9435
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9436
16
            NULL, HFILL }
9437
16
        },
9438
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod,
9439
16
            { "PublishPeriod", "btmesh.model.config_model_publication_virtual_address_set.publishperiod",
9440
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
9441
16
            NULL, HFILL }
9442
16
        },
9443
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod_resolution,
9444
16
            { "Step Resolution", "btmesh.model.config_model_publication_virtual_address_set.publishperiod.resolution",
9445
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
9446
16
            NULL, HFILL }
9447
16
        },
9448
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishperiod_steps,
9449
16
            { "Number of Steps", "btmesh.model.config_model_publication_virtual_address_set.publishperiod.steps",
9450
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
9451
16
            NULL, HFILL }
9452
16
        },
9453
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit,
9454
16
            { "PublishRetransmit", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit",
9455
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9456
16
            NULL, HFILL }
9457
16
        },
9458
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_count,
9459
16
            { "PublishRetransmitCount", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit.count",
9460
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9461
16
            NULL, HFILL }
9462
16
        },
9463
16
        { &hf_btmesh_config_model_publication_virtual_address_set_publishretransmit_intervalsteps,
9464
16
            { "PublishRetransmitIntervalSteps", "btmesh.model.config_model_publication_virtual_address_set.publishretransmit.intervalsteps",
9465
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9466
16
            NULL, HFILL }
9467
16
        },
9468
16
        { &hf_btmesh_config_model_publication_virtual_address_set_vendormodelidentifier,
9469
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_virtual_address_set.vendormodelidentifier",
9470
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9471
16
            NULL, HFILL }
9472
16
        },
9473
16
        { &hf_btmesh_config_model_publication_virtual_address_set_modelidentifier,
9474
16
            { "ModelIdentifier", "btmesh.model.config_model_publication_virtual_address_set.modelidentifier",
9475
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9476
16
            NULL, HFILL }
9477
16
        },
9478
16
        { &hf_btmesh_config_model_subscription_add_elementaddress,
9479
16
            { "ElementAddress", "btmesh.model.config_model_subscription_add.elementaddress",
9480
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9481
16
            NULL, HFILL }
9482
16
        },
9483
16
        { &hf_btmesh_config_model_subscription_add_address,
9484
16
            { "Address", "btmesh.model.config_model_subscription_add.address",
9485
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9486
16
            NULL, HFILL }
9487
16
        },
9488
16
        { &hf_btmesh_config_model_subscription_add_modelidentifier,
9489
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_add.modelidentifier",
9490
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9491
16
            NULL, HFILL }
9492
16
        },
9493
16
        { &hf_btmesh_config_model_subscription_add_vendormodelidentifier,
9494
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_add.vendormodelidentifier",
9495
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9496
16
            NULL, HFILL }
9497
16
        },
9498
16
        { &hf_btmesh_config_model_subscription_delete_elementaddress,
9499
16
            { "ElementAddress", "btmesh.model.config_model_subscription_delete.elementaddress",
9500
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9501
16
            NULL, HFILL }
9502
16
        },
9503
16
        { &hf_btmesh_config_model_subscription_delete_address,
9504
16
            { "Address", "btmesh.model.config_model_subscription_delete.address",
9505
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9506
16
            NULL, HFILL }
9507
16
        },
9508
16
        { &hf_btmesh_config_model_subscription_delete_modelidentifier,
9509
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_delete.modelidentifier",
9510
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9511
16
            NULL, HFILL }
9512
16
        },
9513
16
        { &hf_btmesh_config_model_subscription_delete_vendormodelidentifier,
9514
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_delete.vendormodelidentifier",
9515
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9516
16
            NULL, HFILL }
9517
16
        },
9518
16
        { &hf_btmesh_config_model_subscription_delete_all_elementaddress,
9519
16
            { "ElementAddress", "btmesh.model.config_model_subscription_delete_all.elementaddress",
9520
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9521
16
            NULL, HFILL }
9522
16
        },
9523
16
        { &hf_btmesh_config_model_subscription_delete_all_modelidentifier,
9524
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_delete_all.modelidentifier",
9525
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9526
16
            NULL, HFILL }
9527
16
        },
9528
16
        { &hf_btmesh_config_model_subscription_delete_all_vendormodelidentifier,
9529
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_delete_all.vendormodelidentifier",
9530
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9531
16
            NULL, HFILL }
9532
16
        },
9533
16
        { &hf_btmesh_config_model_subscription_overwrite_elementaddress,
9534
16
            { "ElementAddress", "btmesh.model.config_model_subscription_overwrite.elementaddress",
9535
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9536
16
            NULL, HFILL }
9537
16
        },
9538
16
        { &hf_btmesh_config_model_subscription_overwrite_address,
9539
16
            { "Address", "btmesh.model.config_model_subscription_overwrite.address",
9540
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9541
16
            NULL, HFILL }
9542
16
        },
9543
16
        { &hf_btmesh_config_model_subscription_overwrite_modelidentifier,
9544
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_overwrite.modelidentifier",
9545
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9546
16
            NULL, HFILL }
9547
16
        },
9548
16
        { &hf_btmesh_config_model_subscription_overwrite_vendormodelidentifier,
9549
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_overwrite.vendormodelidentifier",
9550
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9551
16
            NULL, HFILL }
9552
16
        },
9553
16
        { &hf_btmesh_config_model_subscription_status_status,
9554
16
            { "Status", "btmesh.model.config_model_subscription_status.status",
9555
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9556
16
            NULL, HFILL }
9557
16
        },
9558
16
        { &hf_btmesh_config_model_subscription_status_elementaddress,
9559
16
            { "ElementAddress", "btmesh.model.config_model_subscription_status.elementaddress",
9560
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9561
16
            NULL, HFILL }
9562
16
        },
9563
16
        { &hf_btmesh_config_model_subscription_status_address,
9564
16
            { "Address", "btmesh.model.config_model_subscription_status.address",
9565
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9566
16
            NULL, HFILL }
9567
16
        },
9568
16
        { &hf_btmesh_config_model_subscription_status_modelidentifier,
9569
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_status.modelidentifier",
9570
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9571
16
            NULL, HFILL }
9572
16
        },
9573
16
        { &hf_btmesh_config_model_subscription_status_vendormodelidentifier,
9574
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_status.vendormodelidentifier",
9575
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9576
16
            NULL, HFILL }
9577
16
        },
9578
16
        { &hf_btmesh_config_model_subscription_virtual_address_add_elementaddress,
9579
16
            { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_add.elementaddress",
9580
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9581
16
            NULL, HFILL }
9582
16
        },
9583
16
        { &hf_btmesh_config_model_subscription_virtual_address_add_label,
9584
16
            { "Label", "btmesh.model.config_model_subscription_virtual_address_add.label",
9585
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
9586
16
            NULL, HFILL }
9587
16
        },
9588
16
        { &hf_btmesh_config_model_subscription_virtual_address_add_modelidentifier,
9589
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_add.modelidentifier",
9590
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9591
16
            NULL, HFILL }
9592
16
        },
9593
16
        { &hf_btmesh_config_model_subscription_virtual_address_add_vendormodelidentifier,
9594
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_add.vendormodelidentifier",
9595
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9596
16
            NULL, HFILL }
9597
16
        },
9598
16
        { &hf_btmesh_config_model_subscription_virtual_address_delete_elementaddress,
9599
16
            { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_delete.elementaddress",
9600
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9601
16
            NULL, HFILL }
9602
16
        },
9603
16
        { &hf_btmesh_config_model_subscription_virtual_address_delete_label,
9604
16
            { "Label", "btmesh.model.config_model_subscription_virtual_address_delete.label",
9605
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
9606
16
            NULL, HFILL }
9607
16
        },
9608
16
        { &hf_btmesh_config_model_subscription_virtual_address_delete_modelidentifier,
9609
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_delete.modelidentifier",
9610
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9611
16
            NULL, HFILL }
9612
16
        },
9613
16
        { &hf_btmesh_config_model_subscription_virtual_address_delete_vendormodelidentifier,
9614
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_delete.vendormodelidentifier",
9615
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9616
16
            NULL, HFILL }
9617
16
        },
9618
16
        { &hf_btmesh_config_model_subscription_virtual_address_overwrite_elementaddress,
9619
16
            { "ElementAddress", "btmesh.model.config_model_subscription_virtual_address_overwrite.elementaddress",
9620
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9621
16
            NULL, HFILL }
9622
16
        },
9623
16
        { &hf_btmesh_config_model_subscription_virtual_address_overwrite_label,
9624
16
            { "Label", "btmesh.model.config_model_subscription_virtual_address_overwrite.label",
9625
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
9626
16
            NULL, HFILL }
9627
16
        },
9628
16
        { &hf_btmesh_config_model_subscription_virtual_address_overwrite_modelidentifier,
9629
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_overwrite.modelidentifier",
9630
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9631
16
            NULL, HFILL }
9632
16
        },
9633
16
        { &hf_btmesh_config_model_subscription_virtual_address_overwrite_vendormodelidentifier,
9634
16
            { "ModelIdentifier", "btmesh.model.config_model_subscription_virtual_address_overwrite.vendormodelidentifier",
9635
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9636
16
            NULL, HFILL }
9637
16
        },
9638
16
        { &hf_btmesh_config_network_transmit_set_networktransmit,
9639
16
            { "NetworkTransmitCount", "btmesh.model.config_network_transmit_set.networktransmit",
9640
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_transmit), 0x00,
9641
16
            NULL, HFILL }
9642
16
        },
9643
16
        { &hf_btmesh_config_network_transmit_set_networktransmit_count,
9644
16
            { "NetworkTransmitCount", "btmesh.model.config_network_transmit_set.networktransmit.count",
9645
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9646
16
            NULL, HFILL }
9647
16
        },
9648
16
        { &hf_btmesh_config_network_transmit_set_networktransmit_intervalsteps,
9649
16
            { "NetworkTransmitIntervalSteps", "btmesh.model.config_network_transmit_set.networktransmitinterval.steps",
9650
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9651
16
            NULL, HFILL }
9652
16
        },
9653
16
        { &hf_btmesh_config_network_transmit_status_networktransmit,
9654
16
            { "NetworkTransmitCount", "btmesh.model.config_network_transmit_status.networktransmit",
9655
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_transmit), 0x00,
9656
16
            NULL, HFILL }
9657
16
        },
9658
16
        { &hf_btmesh_config_network_transmit_status_networktransmit_count,
9659
16
            { "NetworkTransmitCount", "btmesh.model.config_network_transmit_status.networktransmit.count",
9660
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9661
16
            NULL, HFILL }
9662
16
        },
9663
16
        { &hf_btmesh_config_network_transmit_status_networktransmit_intervalsteps,
9664
16
            { "NetworkTransmitIntervalSteps", "btmesh.model.config_network_transmit_status.networktransmit.intervalsteps",
9665
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9666
16
            NULL, HFILL }
9667
16
        },
9668
16
        { &hf_btmesh_config_relay_set_relay,
9669
16
            { "Relay", "btmesh.model.config_relay_set.relay",
9670
16
            FT_UINT8, BASE_DEC, VALS(btmesh_relay_vals), 0x0,
9671
16
            NULL, HFILL }
9672
16
        },
9673
16
        { &hf_btmesh_config_relay_set_relayretransmit,
9674
16
            { "RelayRetransmitCount", "btmesh.model.config_relay_set.relayretransmit",
9675
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9676
16
            NULL, HFILL }
9677
16
        },
9678
16
        { &hf_btmesh_config_relay_set_relayretransmit_count,
9679
16
            { "RelayRetransmitCount", "btmesh.model.config_relay_set.relayretransmit.count",
9680
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9681
16
            NULL, HFILL }
9682
16
        },
9683
16
        { &hf_btmesh_config_relay_set_relayretransmit_intervalsteps,
9684
16
            { "RelayRetransmitIntervalSteps", "btmesh.model.config_relay_set.relayretransmit.intervalsteps",
9685
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9686
16
            NULL, HFILL }
9687
16
        },
9688
16
        { &hf_btmesh_config_relay_status_relay,
9689
16
            { "Relay", "btmesh.model.config_relay_status.relay",
9690
16
            FT_UINT8, BASE_DEC, VALS(btmesh_relay_vals), 0x0,
9691
16
            NULL, HFILL }
9692
16
        },
9693
16
        { &hf_btmesh_config_relay_status_relayretransmit,
9694
16
            { "RelayRetransmit", "btmesh.model.config_relay_status.relayretransmit",
9695
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_retransmit), 0x00,
9696
16
            NULL, HFILL }
9697
16
        },
9698
16
        { &hf_btmesh_config_relay_status_relayretransmit_count,
9699
16
            { "RelayRetransmitCount", "btmesh.model.config_relay_status.relayretransmit.count",
9700
16
            FT_UINT8, BASE_DEC, NULL, 0x07,
9701
16
            NULL, HFILL }
9702
16
        },
9703
16
        { &hf_btmesh_config_relay_status_relayretransmit_intervalsteps,
9704
16
            { "RelayRetransmitIntervalSteps", "btmesh.model.config_relay_status.relayretransmit.intervalsteps",
9705
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_interval_steps), 0xF8,
9706
16
            NULL, HFILL }
9707
16
        },
9708
16
        { &hf_btmesh_config_sig_model_subscription_get_elementaddress,
9709
16
            { "ElementAddress", "btmesh.model.config_sig_model_subscription_get.elementaddress",
9710
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9711
16
            NULL, HFILL }
9712
16
        },
9713
16
        { &hf_btmesh_config_sig_model_subscription_get_modelidentifier,
9714
16
            { "ModelIdentifier", "btmesh.model.config_sig_model_subscription_get.modelidentifier",
9715
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9716
16
            NULL, HFILL }
9717
16
        },
9718
16
        { &hf_btmesh_config_sig_model_subscription_list_status,
9719
16
            { "Status", "btmesh.model.config_sig_model_subscription_list.status",
9720
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9721
16
            NULL, HFILL }
9722
16
        },
9723
16
        { &hf_btmesh_config_sig_model_subscription_list_elementaddress,
9724
16
            { "ElementAddress", "btmesh.model.config_sig_model_subscription_list.elementaddress",
9725
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9726
16
            NULL, HFILL }
9727
16
        },
9728
16
        { &hf_btmesh_config_sig_model_subscription_list_modelidentifier,
9729
16
            { "ModelIdentifier", "btmesh.model.config_sig_model_subscription_list.modelidentifier",
9730
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9731
16
            NULL, HFILL }
9732
16
        },
9733
16
        { &hf_btmesh_config_sig_model_subscription_list_address,
9734
16
            { "Address", "btmesh.model.config_sig_model_subscription_list.address",
9735
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9736
16
            NULL, HFILL }
9737
16
        },
9738
16
        { &hf_btmesh_config_vendor_model_subscription_get_elementaddress,
9739
16
            { "ElementAddress", "btmesh.model.config_vendor_model_subscription_get.elementaddress",
9740
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9741
16
            NULL, HFILL }
9742
16
        },
9743
16
        { &hf_btmesh_config_vendor_model_subscription_get_modelidentifier,
9744
16
            { "ModelIdentifier", "btmesh.model.config_vendor_model_subscription_get.modelidentifier",
9745
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9746
16
            NULL, HFILL }
9747
16
        },
9748
16
        { &hf_btmesh_config_vendor_model_subscription_list_status,
9749
16
            { "Status", "btmesh.model.config_vendor_model_subscription_list.status",
9750
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9751
16
            NULL, HFILL }
9752
16
        },
9753
16
        { &hf_btmesh_config_vendor_model_subscription_list_elementaddress,
9754
16
            { "ElementAddress", "btmesh.model.config_vendor_model_subscription_list.elementaddress",
9755
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9756
16
            NULL, HFILL }
9757
16
        },
9758
16
        { &hf_btmesh_config_vendor_model_subscription_list_modelidentifier,
9759
16
            { "ModelIdentifier", "btmesh.model.config_vendor_model_subscription_list.modelidentifier",
9760
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9761
16
            NULL, HFILL }
9762
16
        },
9763
16
        { &hf_btmesh_config_vendor_model_subscription_list_address,
9764
16
            { "Address", "btmesh.model.config_vendor_model_subscription_list.address",
9765
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9766
16
            NULL, HFILL }
9767
16
        },
9768
16
        { &hf_btmesh_config_low_power_node_polltimeout_get_lpnaddress,
9769
16
            { "LPNAddress", "btmesh.model.config_low_power_node_polltimeout_get.lpnaddress",
9770
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9771
16
            NULL, HFILL }
9772
16
        },
9773
16
        { &hf_btmesh_config_low_power_node_polltimeout_status_lpnaddress,
9774
16
            { "LPNAddress", "btmesh.model.config_low_power_node_polltimeout_status.lpnaddress",
9775
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9776
16
            NULL, HFILL }
9777
16
        },
9778
16
        { &hf_btmesh_config_low_power_node_polltimeout_status_polltimeout,
9779
16
            { "PollTimeout", "btmesh.model.config_low_power_node_polltimeout_status.polltimeout",
9780
16
            FT_UINT24, BASE_DEC, NULL, 0x0,
9781
16
            NULL, HFILL }
9782
16
        },
9783
16
        { &hf_btmesh_health_fault_clear_company_id,
9784
16
            { "Company ID", "btmesh.model.health_fault_clear.company_id",
9785
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9786
16
            NULL, HFILL }
9787
16
        },
9788
16
        { &hf_btmesh_health_fault_clear_unacknowledged_company_id,
9789
16
            { "Company ID", "btmesh.model.health_fault_clear_unacknowledged.company_id",
9790
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9791
16
            NULL, HFILL }
9792
16
        },
9793
16
        { &hf_btmesh_health_fault_get_company_id,
9794
16
            { "Company ID", "btmesh.model.health_fault_get.company_id",
9795
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9796
16
            NULL, HFILL }
9797
16
        },
9798
16
        { &hf_btmesh_health_fault_test_test_id,
9799
16
            { "Test ID", "btmesh.model.health_fault_test.test_id",
9800
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9801
16
            NULL, HFILL }
9802
16
        },
9803
16
        { &hf_btmesh_health_fault_test_company_id,
9804
16
            { "Company ID", "btmesh.model.health_fault_test.company_id",
9805
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9806
16
            NULL, HFILL }
9807
16
        },
9808
16
        { &hf_btmesh_health_fault_test_unacknowledged_test_id,
9809
16
            { "Test ID", "btmesh.model.health_fault_test_unacknowledged.test_id",
9810
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9811
16
            NULL, HFILL }
9812
16
        },
9813
16
        { &hf_btmesh_health_fault_test_unacknowledged_company_id,
9814
16
            { "Company ID", "btmesh.model.health_fault_test_unacknowledged.company_id",
9815
16
            FT_UINT16, BASE_HEX | BASE_EXT_STRING, &bluetooth_company_id_vals_ext, 0x0,
9816
16
            NULL, HFILL }
9817
16
        },
9818
16
        { &hf_btmesh_health_period_set_fast_period_divisor,
9819
16
            { "Fast Period Divisor", "btmesh.model.health_period_set.fast_period_divisor",
9820
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9821
16
            NULL, HFILL }
9822
16
        },
9823
16
        { &hf_btmesh_health_period_set_unacknowledged_fast_period_divisor,
9824
16
            { "Fast Period Divisor", "btmesh.model.health_period_set_unacknowledged.fast_period_divisor",
9825
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9826
16
            NULL, HFILL }
9827
16
        },
9828
16
        { &hf_btmesh_health_period_status_fast_period_divisor,
9829
16
            { "Fast Period Divisor", "btmesh.model.health_period_status.fast_period_divisor",
9830
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9831
16
            NULL, HFILL }
9832
16
        },
9833
16
        { &hf_btmesh_config_heartbeat_publication_set_destination,
9834
16
            { "Destination", "btmesh.model.config_heartbeat_publication_set.destination",
9835
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9836
16
            NULL, HFILL }
9837
16
        },
9838
16
        { &hf_btmesh_config_heartbeat_publication_set_countlog,
9839
16
            { "CountLog", "btmesh.model.config_heartbeat_publication_set.countlog",
9840
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9841
16
            NULL, HFILL }
9842
16
        },
9843
16
        { &hf_btmesh_config_heartbeat_publication_set_periodlog,
9844
16
            { "PeriodLog", "btmesh.model.config_heartbeat_publication_set.periodlog",
9845
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9846
16
            NULL, HFILL }
9847
16
        },
9848
16
        { &hf_btmesh_config_heartbeat_publication_set_ttl,
9849
16
            { "TTL", "btmesh.model.config_heartbeat_publication_set.ttl",
9850
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9851
16
            NULL, HFILL }
9852
16
        },
9853
16
        { &hf_btmesh_config_heartbeat_publication_set_features_relay,
9854
16
            { "Relay feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.relay",
9855
16
            FT_BOOLEAN, 16, NULL, 0x0001,
9856
16
            NULL, HFILL }
9857
16
        },
9858
16
        { &hf_btmesh_config_heartbeat_publication_set_features_proxy,
9859
16
            { "Proxy feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.proxy",
9860
16
            FT_BOOLEAN, 16, NULL, 0x0002,
9861
16
            NULL, HFILL }
9862
16
        },
9863
16
        { &hf_btmesh_config_heartbeat_publication_set_features_friend,
9864
16
            { "Friend feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.friend",
9865
16
            FT_BOOLEAN, 16, NULL, 0x0004,
9866
16
            NULL, HFILL }
9867
16
        },
9868
16
        { &hf_btmesh_config_heartbeat_publication_set_features_low_power,
9869
16
            { "Low Power feature change triggers a Heartbeat message", "btmesh.model.config_heartbeat_publication_set.features.low_power",
9870
16
            FT_BOOLEAN, 16, NULL, 0x0008,
9871
16
            NULL, HFILL }
9872
16
        },
9873
16
        { &hf_btmesh_config_heartbeat_publication_set_features_rfu,
9874
16
            { "RFU", "btmesh.model.config_heartbeat_publication_set.features.rfu",
9875
16
            FT_UINT16, BASE_HEX, NULL, 0xFFF0,
9876
16
            NULL, HFILL }
9877
16
        },
9878
16
        { &hf_btmesh_config_heartbeat_publication_set_features,
9879
16
            { "Features", "btmesh.model.config_heartbeat_publication_set.features",
9880
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9881
16
            NULL, HFILL }
9882
16
        },
9883
16
        { &hf_btmesh_config_heartbeat_publication_set_netkeyindex,
9884
16
            { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_set.netkeyindex",
9885
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9886
16
                NULL, HFILL }
9887
16
        },
9888
16
        { &hf_btmesh_config_heartbeat_publication_set_netkeyindex_idx,
9889
16
            { "NetKeyIndex", "btmesh.model.config_heartbeat_publication_set.netkeyindex.idx",
9890
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9891
16
                NULL, HFILL }
9892
16
        },
9893
16
        { &hf_btmesh_config_heartbeat_publication_set_netkeyindex_rfu,
9894
16
            { "RFU", "btmesh.model.config_heartbeat_publication_set.netkeyindex.rfu",
9895
16
                FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9896
16
                NULL, HFILL }
9897
16
        },
9898
16
        { &hf_btmesh_config_heartbeat_subscription_set_source,
9899
16
            { "Source", "btmesh.model.config_heartbeat_subscription_set.source",
9900
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9901
16
            NULL, HFILL }
9902
16
        },
9903
16
        { &hf_btmesh_config_heartbeat_subscription_set_destination,
9904
16
            { "Destination", "btmesh.model.config_heartbeat_subscription_set.destination",
9905
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9906
16
            NULL, HFILL }
9907
16
        },
9908
16
        { &hf_btmesh_config_heartbeat_subscription_set_periodlog,
9909
16
            { "PeriodLog", "btmesh.model.config_heartbeat_subscription_set.periodlog",
9910
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9911
16
            NULL, HFILL }
9912
16
        },
9913
16
        { &hf_btmesh_config_heartbeat_subscription_status_status,
9914
16
            { "Status", "btmesh.model.config_heartbeat_subscription_status.status",
9915
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9916
16
            NULL, HFILL }
9917
16
        },
9918
16
        { &hf_btmesh_config_heartbeat_subscription_status_source,
9919
16
            { "Source", "btmesh.model.config_heartbeat_subscription_status.source",
9920
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9921
16
            NULL, HFILL }
9922
16
        },
9923
16
        { &hf_btmesh_config_heartbeat_subscription_status_destination,
9924
16
            { "Destination", "btmesh.model.config_heartbeat_subscription_status.destination",
9925
16
            FT_UINT16, BASE_DEC_HEX, NULL, 0x0,
9926
16
            NULL, HFILL }
9927
16
        },
9928
16
        { &hf_btmesh_config_heartbeat_subscription_status_periodlog,
9929
16
            { "PeriodLog", "btmesh.model.config_heartbeat_subscription_status.periodlog",
9930
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9931
16
            NULL, HFILL }
9932
16
        },
9933
16
        { &hf_btmesh_config_heartbeat_subscription_status_countlog,
9934
16
            { "CountLog", "btmesh.model.config_heartbeat_subscription_status.countlog",
9935
16
            FT_UINT8, BASE_HEX, NULL, 0x0,
9936
16
            NULL, HFILL }
9937
16
        },
9938
16
        { &hf_btmesh_config_heartbeat_subscription_status_minhops,
9939
16
            { "MinHops", "btmesh.model.config_heartbeat_subscription_status.minhops",
9940
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9941
16
            NULL, HFILL }
9942
16
        },
9943
16
        { &hf_btmesh_config_heartbeat_subscription_status_maxhops,
9944
16
            { "MaxHops", "btmesh.model.config_heartbeat_subscription_status.maxhops",
9945
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
9946
16
            NULL, HFILL }
9947
16
        },
9948
16
        { &hf_btmesh_config_model_app_bind_elementaddress,
9949
16
            { "ElementAddress", "btmesh.model.config_model_app_bind.elementaddress",
9950
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9951
16
            NULL, HFILL }
9952
16
        },
9953
16
        { &hf_btmesh_config_model_app_bind_appkeyindex,
9954
16
            { "AppKeyIndex", "btmesh.model.config_model_app_bind.appkeyindex",
9955
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9956
16
            NULL, HFILL }
9957
16
        },
9958
16
        { &hf_btmesh_config_model_app_bind_appkeyindex_idx,
9959
16
            { "AppKeyIndex", "btmesh.model.config_model_app_bind.appkeyindex.idx",
9960
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9961
16
            NULL, HFILL }
9962
16
        },
9963
16
        { &hf_btmesh_config_model_app_bind_appkeyindex_rfu,
9964
16
            { "RFU", "btmesh.model.config_model_app_bind.appkeyindex.rfu",
9965
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
9966
16
            NULL, HFILL }
9967
16
        },
9968
16
        { &hf_btmesh_config_model_app_bind_modelidentifier,
9969
16
            { "ModelIdentifier", "btmesh.model.config_model_app_bind.modelidentifier",
9970
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
9971
16
            NULL, HFILL }
9972
16
        },
9973
16
        { &hf_btmesh_config_model_app_bind_vendormodelidentifier,
9974
16
            { "ModelIdentifier", "btmesh.model.config_model_app_bind.vendormodelidentifier",
9975
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
9976
16
            NULL, HFILL }
9977
16
        },
9978
16
        { &hf_btmesh_config_model_app_status_status,
9979
16
            { "Status", "btmesh.model.config_model_app_status.status",
9980
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
9981
16
            NULL, HFILL }
9982
16
        },
9983
16
        { &hf_btmesh_config_model_app_status_elementaddress,
9984
16
            { "ElementAddress", "btmesh.model.config_model_app_status.elementaddress",
9985
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
9986
16
            NULL, HFILL }
9987
16
        },
9988
16
        { &hf_btmesh_config_model_app_status_appkeyindex,
9989
16
            { "AppKeyIndex", "btmesh.model.config_model_app_status.appkeyindex",
9990
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
9991
16
            NULL, HFILL }
9992
16
        },
9993
16
        { &hf_btmesh_config_model_app_status_appkeyindex_idx,
9994
16
            { "AppKeyIndex", "btmesh.model.config_model_app_status.appkeyindex.idx",
9995
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
9996
16
            NULL, HFILL }
9997
16
        },
9998
16
        { &hf_btmesh_config_model_app_status_appkeyindex_rfu,
9999
16
            { "RFU", "btmesh.model.config_model_app_status.appkeyindex.rfu",
10000
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10001
16
            NULL, HFILL }
10002
16
        },
10003
16
        { &hf_btmesh_config_model_app_status_modelidentifier,
10004
16
            { "ModelIdentifier", "btmesh.model.config_model_app_status.modelidentifier",
10005
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10006
16
            NULL, HFILL }
10007
16
        },
10008
16
        { &hf_btmesh_config_model_app_status_vendormodelidentifier,
10009
16
            { "ModelIdentifier", "btmesh.model.config_model_app_status.vendormodelidentifier",
10010
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10011
16
            NULL, HFILL }
10012
16
        },
10013
16
        { &hf_btmesh_config_model_app_unbind_elementaddress,
10014
16
            { "ElementAddress", "btmesh.model.config_model_app_unbind.elementaddress",
10015
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
10016
16
            NULL, HFILL }
10017
16
        },
10018
16
        { &hf_btmesh_config_model_app_unbind_appkeyindex,
10019
16
            { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex",
10020
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10021
16
            NULL, HFILL }
10022
16
        },
10023
16
        { &hf_btmesh_config_model_app_unbind_appkeyindex_idx,
10024
16
            { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex.idx",
10025
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10026
16
            NULL, HFILL }
10027
16
        },
10028
16
        { &hf_btmesh_config_model_app_unbind_appkeyindex_rfu,
10029
16
            { "AppKeyIndex", "btmesh.model.config_model_app_unbind.appkeyindex.rfu",
10030
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10031
16
            NULL, HFILL }
10032
16
        },
10033
16
        { &hf_btmesh_config_model_app_unbind_modelidentifier,
10034
16
            { "ModelIdentifier", "btmesh.model.config_model_app_unbind.modelidentifier",
10035
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10036
16
            NULL, HFILL }
10037
16
        },
10038
16
        { &hf_btmesh_config_model_app_unbind_vendormodelidentifier,
10039
16
            { "ModelIdentifier", "btmesh.model.config_model_app_unbind.vendormodelidentifier",
10040
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10041
16
            NULL, HFILL }
10042
16
        },
10043
16
        { &hf_btmesh_config_netkey_add_netkeyindex,
10044
16
            { "NetKeyIndex", "btmesh.model.config_netkey_add.netkeyindex",
10045
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10046
16
            NULL, HFILL }
10047
16
        },
10048
16
        { &hf_btmesh_config_netkey_add_netkeyindex_idx,
10049
16
            { "NetKeyIndex", "btmesh.model.config_netkey_add.netkeyindex.idx",
10050
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10051
16
            NULL, HFILL }
10052
16
        },
10053
16
        { &hf_btmesh_config_netkey_add_netkeyindex_rfu,
10054
16
            { "RFU", "btmesh.model.config_netkey_add.netkeyindex.rfu",
10055
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10056
16
            NULL, HFILL }
10057
16
        },
10058
16
        { &hf_btmesh_config_netkey_add_netkey,
10059
16
            { "NetKey", "btmesh.model.config_netkey_add.netkey",
10060
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
10061
16
            NULL, HFILL }
10062
16
        },
10063
16
        { &hf_btmesh_config_netkey_delete_netkeyindex,
10064
16
            { "NetKeyIndex", "btmesh.model.config_netkey_delete.netkeyindex",
10065
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10066
16
            NULL, HFILL }
10067
16
        },
10068
16
        { &hf_btmesh_config_netkey_delete_netkeyindex_idx,
10069
16
            { "NetKeyIndex", "btmesh.model.config_netkey_delete.netkeyindex.idx",
10070
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10071
16
            NULL, HFILL }
10072
16
        },
10073
16
        { &hf_btmesh_config_netkey_delete_netkeyindex_rfu,
10074
16
            { "RFU", "btmesh.model.config_netkey_delete.netkeyindex.rfu",
10075
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10076
16
            NULL, HFILL }
10077
16
        },
10078
16
        { &hf_btmesh_config_netkey_list_netkeyindex,
10079
16
            { "NetKeyIndex", "btmesh.model.config_netkey_list.netkeyindex",
10080
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10081
16
            NULL, HFILL }
10082
16
        },
10083
16
        { &hf_btmesh_config_netkey_list_netkeyindex_rfu,
10084
16
            { "NetKeyIndex RFU", "btmesh.model.config_netkey_list.netkeyindex.rfu",
10085
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10086
16
            NULL, HFILL }
10087
16
        },
10088
16
        { &hf_btmesh_config_netkey_status_status,
10089
16
            { "Status", "btmesh.model.config_netkey_status.status",
10090
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10091
16
            NULL, HFILL }
10092
16
        },
10093
16
        { &hf_btmesh_config_netkey_status_netkeyindex,
10094
16
            { "NetKeyIndex", "btmesh.model.config_netkey_status.netkeyindex",
10095
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10096
16
            NULL, HFILL }
10097
16
        },
10098
16
        { &hf_btmesh_config_netkey_status_netkeyindex_idx,
10099
16
            { "NetKeyIndex", "btmesh.model.config_netkey_status.netkeyindex.idx",
10100
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10101
16
            NULL, HFILL }
10102
16
        },
10103
16
        { &hf_btmesh_config_netkey_status_netkeyindex_rfu,
10104
16
            { "RFU", "btmesh.model.config_netkey_status.netkeyindex.rfu",
10105
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10106
16
            NULL, HFILL }
10107
16
        },
10108
16
        { &hf_btmesh_config_netkey_update_netkeyindex,
10109
16
            { "NetKeyIndex", "btmesh.model.config_netkey_update.netkeyindex",
10110
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10111
16
            NULL, HFILL }
10112
16
        },
10113
16
        { &hf_btmesh_config_netkey_update_netkeyindex_idx,
10114
16
            { "NetKeyIndex", "btmesh.model.config_netkey_update.netkeyindex.idx",
10115
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10116
16
            NULL, HFILL }
10117
16
        },
10118
16
        { &hf_btmesh_config_netkey_update_netkeyindex_rfu,
10119
16
            { "RFU", "btmesh.model.config_netkey_update.netkeyindex.rfu",
10120
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10121
16
            NULL, HFILL }
10122
16
        },
10123
16
        { &hf_btmesh_config_netkey_update_netkey,
10124
16
            { "NetKey", "btmesh.model.config_netkey_update.netkey",
10125
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
10126
16
            NULL, HFILL }
10127
16
        },
10128
16
        { &hf_btmesh_config_node_identity_get_netkeyindex,
10129
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_get.netkeyindex",
10130
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10131
16
            NULL, HFILL }
10132
16
        },
10133
16
        { &hf_btmesh_config_node_identity_get_netkeyindex_idx,
10134
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_get.netkeyindex.idx",
10135
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10136
16
            NULL, HFILL }
10137
16
        },
10138
16
        { &hf_btmesh_config_node_identity_get_netkeyindex_rfu,
10139
16
            { "RFU", "btmesh.model.config_node_identity_get.netkeyindex.rfu",
10140
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10141
16
            NULL, HFILL }
10142
16
        },
10143
16
        { &hf_btmesh_config_node_identity_set_netkeyindex,
10144
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_set.netkeyindex",
10145
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10146
16
            NULL, HFILL }
10147
16
        },
10148
16
        { &hf_btmesh_config_node_identity_set_netkeyindex_idx,
10149
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_set.netkeyindex.idx",
10150
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10151
16
            NULL, HFILL }
10152
16
        },
10153
16
        { &hf_btmesh_config_node_identity_set_netkeyindex_rfu,
10154
16
            { "RFU", "btmesh.model.config_node_identity_set.netkeyindex.rfu",
10155
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10156
16
            NULL, HFILL }
10157
16
        },
10158
16
        { &hf_btmesh_config_node_identity_set_identity,
10159
16
            { "Identity", "btmesh.model.config_node_identity_set.identity",
10160
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10161
16
            NULL, HFILL }
10162
16
        },
10163
16
        { &hf_btmesh_config_node_identity_status_status,
10164
16
            { "Status", "btmesh.model.config_node_identity_status.status",
10165
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10166
16
            NULL, HFILL }
10167
16
        },
10168
16
        { &hf_btmesh_config_node_identity_status_netkeyindex,
10169
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_status.netkeyindex",
10170
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10171
16
            NULL, HFILL }
10172
16
        },
10173
16
        { &hf_btmesh_config_node_identity_status_netkeyindex_idx,
10174
16
            { "NetKeyIndex", "btmesh.model.config_node_identity_status.netkeyindex.idx",
10175
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0FFF,
10176
16
            NULL, HFILL }
10177
16
        },
10178
16
        { &hf_btmesh_config_node_identity_status_netkeyindex_rfu,
10179
16
            { "RFU", "btmesh.model.config_node_identity_status.netkeyindex.rfu",
10180
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0xF000,
10181
16
            NULL, HFILL }
10182
16
        },
10183
16
        { &hf_btmesh_config_node_identity_status_identity,
10184
16
            { "Identity", "btmesh.model.config_node_identity_status.identity",
10185
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10186
16
            NULL, HFILL }
10187
16
        },
10188
16
        { &hf_btmesh_config_sig_model_app_get_elementaddress,
10189
16
            { "ElementAddress", "btmesh.model.config_sig_model_app_get.elementaddress",
10190
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
10191
16
            NULL, HFILL }
10192
16
        },
10193
16
        { &hf_btmesh_config_sig_model_app_get_modelidentifier,
10194
16
            { "ModelIdentifier", "btmesh.model.config_sig_model_app_get.modelidentifier",
10195
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10196
16
            NULL, HFILL }
10197
16
        },
10198
16
        { &hf_btmesh_config_sig_model_app_list_status,
10199
16
            { "Status", "btmesh.model.config_sig_model_app_list.status",
10200
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10201
16
            NULL, HFILL }
10202
16
        },
10203
16
        { &hf_btmesh_config_sig_model_app_list_elementaddress,
10204
16
            { "ElementAddress", "btmesh.model.config_sig_model_app_list.elementaddress",
10205
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
10206
16
            NULL, HFILL }
10207
16
        },
10208
16
        { &hf_btmesh_config_sig_model_app_list_modelidentifier,
10209
16
            { "ModelIdentifier", "btmesh.model.config_sig_model_app_list.modelidentifier",
10210
16
            FT_UINT16, BASE_HEX, VALS(btmesh_model_vals), 0x0,
10211
16
            NULL, HFILL }
10212
16
        },
10213
16
        { &hf_btmesh_config_sig_model_app_list_appkeyindex,
10214
16
            { "AppKeyIndex", "btmesh.model.config_sig_model_app_list.appkeyindex",
10215
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10216
16
            NULL, HFILL }
10217
16
        },
10218
16
        { &hf_btmesh_config_sig_model_app_list_appkeyindex_rfu,
10219
16
            { "RFU", "btmesh.model.config_sig_model_app_list.appkeyindex.rfu",
10220
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10221
16
            NULL, HFILL }
10222
16
        },
10223
16
        { &hf_btmesh_config_vendor_model_app_get_elementaddress,
10224
16
            { "ElementAddress", "btmesh.model.config_vendor_model_app_get.elementaddress",
10225
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
10226
16
            NULL, HFILL }
10227
16
        },
10228
16
        { &hf_btmesh_config_vendor_model_app_get_modelidentifier,
10229
16
            { "ModelIdentifier", "btmesh.model.config_vendor_model_app_get.modelidentifier",
10230
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10231
16
            NULL, HFILL }
10232
16
        },
10233
16
        { &hf_btmesh_config_vendor_model_app_list_status,
10234
16
            { "Status", "btmesh.model.config_vendor_model_app_list.status",
10235
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_code_vals), 0x0,
10236
16
            NULL, HFILL }
10237
16
        },
10238
16
        { &hf_btmesh_config_vendor_model_app_list_elementaddress,
10239
16
            { "ElementAddress", "btmesh.model.config_vendor_model_app_list.elementaddress",
10240
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
10241
16
            NULL, HFILL }
10242
16
        },
10243
16
        { &hf_btmesh_config_vendor_model_app_list_modelidentifier,
10244
16
            { "ModelIdentifier", "btmesh.model.config_vendor_model_app_list.modelidentifier",
10245
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_vendor_model), 0x0,
10246
16
            NULL, HFILL }
10247
16
        },
10248
16
        { &hf_btmesh_config_vendor_model_app_list_appkeyindex,
10249
16
            { "AppKeyIndex", "btmesh.model.config_vendor_model_app_list.appkeyindex",
10250
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index), 0x0,
10251
16
            NULL, HFILL }
10252
16
        },
10253
16
        { &hf_btmesh_config_vendor_model_app_list_appkeyindex_rfu,
10254
16
            { "RFU", "btmesh.model.config_vendor_model_app_list.appkeyindex.rfu",
10255
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_key_index_rfu), 0x0,
10256
16
            NULL, HFILL }
10257
16
        },
10258
16
        { &hf_btmesh_generic_location_global_status_global_latitude,
10259
16
            { "Global Latitude", "btmesh.model.generic_location_global_status.global_latitude",
10260
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10261
16
            NULL, HFILL }
10262
16
        },
10263
16
        { &hf_btmesh_generic_location_global_status_global_longitude,
10264
16
            { "Global Longitude", "btmesh.model.generic_location_global_status.global_longitude",
10265
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10266
16
            NULL, HFILL }
10267
16
        },
10268
16
        { &hf_btmesh_generic_location_global_status_global_altitude,
10269
16
            { "Global Altitude", "btmesh.model.generic_location_global_status.global_altitude",
10270
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10271
16
            NULL, HFILL }
10272
16
        },
10273
16
        { &hf_btmesh_generic_location_global_set_global_latitude,
10274
16
            { "Global Latitude", "btmesh.model.generic_location_global_set.global_latitude",
10275
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10276
16
            NULL, HFILL }
10277
16
        },
10278
16
        { &hf_btmesh_generic_location_global_set_global_longitude,
10279
16
            { "Global Longitude", "btmesh.model.generic_location_global_set.global_longitude",
10280
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10281
16
            NULL, HFILL }
10282
16
        },
10283
16
        { &hf_btmesh_generic_location_global_set_global_altitude,
10284
16
            { "Global Altitude", "btmesh.model.generic_location_global_set.global_altitude",
10285
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10286
16
            NULL, HFILL }
10287
16
        },
10288
16
        { &hf_btmesh_generic_location_global_set_unacknowledged_global_latitude,
10289
16
            { "Global Latitude", "btmesh.model.generic_location_global_set_unacknowledged.global_latitude",
10290
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_latitude), 0x0,
10291
16
            NULL, HFILL }
10292
16
        },
10293
16
        { &hf_btmesh_generic_location_global_set_unacknowledged_global_longitude,
10294
16
            { "Global Longitude", "btmesh.model.generic_location_global_set_unacknowledged.global_longitude",
10295
16
            FT_INT32, BASE_CUSTOM, CF_FUNC(format_global_longitude), 0x0,
10296
16
            NULL, HFILL }
10297
16
        },
10298
16
        { &hf_btmesh_generic_location_global_set_unacknowledged_global_altitude,
10299
16
            { "Global Altitude", "btmesh.model.generic_location_global_set_unacknowledged.global_altitude",
10300
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_global_altitude), 0x0,
10301
16
            NULL, HFILL }
10302
16
        },
10303
16
        { &hf_btmesh_generic_onoff_set_onoff,
10304
16
            { "OnOff", "btmesh.model.generic_onoff_set.onoff",
10305
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10306
16
            NULL, HFILL }
10307
16
        },
10308
16
        { &hf_btmesh_generic_onoff_set_tid,
10309
16
            { "TID", "btmesh.model.generic_onoff_set.tid",
10310
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10311
16
            NULL, HFILL }
10312
16
        },
10313
16
        { &hf_btmesh_generic_onoff_set_transition_time,
10314
16
            { "Transition Time", "btmesh.model.generic_onoff_set.transition_time",
10315
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10316
16
            NULL, HFILL }
10317
16
        },
10318
16
        { &hf_btmesh_generic_onoff_set_transition_time_resolution,
10319
16
            { "Step Resolution", "btmesh.model.generic_onoff_set.transition_time.resolution",
10320
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10321
16
            NULL, HFILL }
10322
16
        },
10323
16
        { &hf_btmesh_generic_onoff_set_transition_time_steps,
10324
16
            { "Number of Steps", "btmesh.model.generic_onoff_set.transition_time.steps",
10325
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10326
16
            NULL, HFILL }
10327
16
        },
10328
16
        { &hf_btmesh_generic_onoff_set_delay,
10329
16
            { "Delay", "btmesh.model.generic_onoff_set.delay",
10330
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10331
16
            NULL, HFILL }
10332
16
        },
10333
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_onoff,
10334
16
            { "OnOff", "btmesh.model.generic_onoff_set_unacknowledged.onoff",
10335
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10336
16
            NULL, HFILL }
10337
16
        },
10338
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_tid,
10339
16
            { "TID", "btmesh.model.generic_onoff_set_unacknowledged.tid",
10340
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10341
16
            NULL, HFILL }
10342
16
        },
10343
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time,
10344
16
            { "Transition Time", "btmesh.model.generic_onoff_set_unacknowledged.transition_time",
10345
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10346
16
            NULL, HFILL }
10347
16
        },
10348
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time_resolution,
10349
16
            { "Step Resolution", "btmesh.model.generic_onoff_set_unacknowledged.transition_time.resolution",
10350
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10351
16
            NULL, HFILL }
10352
16
        },
10353
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_transition_time_steps,
10354
16
            { "Number of Steps", "btmesh.model.generic_onoff_set_unacknowledged.transition_time.steps",
10355
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10356
16
            NULL, HFILL }
10357
16
        },
10358
16
        { &hf_btmesh_generic_onoff_set_unacknowledged_delay,
10359
16
            { "Delay", "btmesh.model.generic_onoff_set_unacknowledged.delay",
10360
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10361
16
            NULL, HFILL }
10362
16
        },
10363
16
        { &hf_btmesh_generic_onoff_status_present_onoff,
10364
16
            { "Present OnOff", "btmesh.model.generic_onoff_status.present_onoff",
10365
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10366
16
            NULL, HFILL }
10367
16
        },
10368
16
        { &hf_btmesh_generic_onoff_status_target_onoff,
10369
16
            { "Target OnOff", "btmesh.model.generic_onoff_status.target_onoff",
10370
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
10371
16
            NULL, HFILL }
10372
16
        },
10373
16
        { &hf_btmesh_generic_onoff_status_remaining_time,
10374
16
            { "Remaining Time", "btmesh.model.generic_onoff_status.remaining_time",
10375
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10376
16
            NULL, HFILL }
10377
16
        },
10378
16
        { &hf_btmesh_generic_onoff_status_remaining_time_resolution,
10379
16
            { "Step Resolution", "btmesh.model.generic_onoff_status.remaining_time.resolution",
10380
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10381
16
            NULL, HFILL }
10382
16
        },
10383
16
        { &hf_btmesh_generic_onoff_status_remaining_time_steps,
10384
16
            { "Number of Steps", "btmesh.model.generic_onoff_status.remaining_time.steps",
10385
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10386
16
            NULL, HFILL }
10387
16
        },
10388
16
        { &hf_btmesh_generic_level_set_level,
10389
16
            { "Level", "btmesh.model.generic_level_set.level",
10390
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10391
16
            NULL, HFILL }
10392
16
        },
10393
16
        { &hf_btmesh_generic_level_set_tid,
10394
16
            { "TID", "btmesh.model.generic_level_set.tid",
10395
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10396
16
            NULL, HFILL }
10397
16
        },
10398
16
        { &hf_btmesh_generic_level_set_transition_time,
10399
16
            { "Transition Time", "btmesh.model.generic_level_set.transition_time",
10400
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10401
16
            NULL, HFILL }
10402
16
        },
10403
16
        { &hf_btmesh_generic_level_set_transition_time_resolution,
10404
16
            { "Step Resolution", "btmesh.model.generic_level_set.transition_time.resolution",
10405
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10406
16
            NULL, HFILL }
10407
16
        },
10408
16
        { &hf_btmesh_generic_level_set_transition_time_steps,
10409
16
            { "Number of Steps", "btmesh.model.generic_level_set.transition_time.steps",
10410
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10411
16
            NULL, HFILL }
10412
16
        },
10413
16
        { &hf_btmesh_generic_level_set_delay,
10414
16
            { "Delay", "btmesh.model.generic_level_set.delay",
10415
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10416
16
            NULL, HFILL }
10417
16
        },
10418
16
        { &hf_btmesh_generic_level_set_unacknowledged_level,
10419
16
            { "Level", "btmesh.model.generic_level_set_unacknowledged.level",
10420
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10421
16
            NULL, HFILL }
10422
16
        },
10423
16
        { &hf_btmesh_generic_level_set_unacknowledged_tid,
10424
16
            { "TID", "btmesh.model.generic_level_set_unacknowledged.tid",
10425
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10426
16
            NULL, HFILL }
10427
16
        },
10428
16
        { &hf_btmesh_generic_level_set_unacknowledged_transition_time,
10429
16
            { "Transition Time", "btmesh.model.generic_level_set_unacknowledged.transition_time",
10430
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10431
16
            NULL, HFILL }
10432
16
        },
10433
16
        { &hf_btmesh_generic_level_set_unacknowledged_transition_time_resolution,
10434
16
            { "Step Resolution", "btmesh.model.generic_level_set_unacknowledged.transition_time.resolution",
10435
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10436
16
            NULL, HFILL }
10437
16
        },
10438
16
        { &hf_btmesh_generic_level_set_unacknowledged_transition_time_steps,
10439
16
            { "Number of Steps", "btmesh.model.generic_level_set_unacknowledged.transition_time.steps",
10440
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10441
16
            NULL, HFILL }
10442
16
        },
10443
16
        { &hf_btmesh_generic_level_set_unacknowledged_delay,
10444
16
            { "Delay", "btmesh.model.generic_level_set_unacknowledged.delay",
10445
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10446
16
            NULL, HFILL }
10447
16
        },
10448
16
        { &hf_btmesh_generic_level_status_present_level,
10449
16
            { "Present Level", "btmesh.model.generic_level_status.present_level",
10450
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10451
16
            NULL, HFILL }
10452
16
        },
10453
16
        { &hf_btmesh_generic_level_status_target_level,
10454
16
            { "Target Level", "btmesh.model.generic_level_status.target_level",
10455
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10456
16
            NULL, HFILL }
10457
16
        },
10458
16
        { &hf_btmesh_generic_level_status_remaining_time,
10459
16
            { "Remaining Time", "btmesh.model.generic_level_status.remaining_time",
10460
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10461
16
            NULL, HFILL }
10462
16
        },
10463
16
        { &hf_btmesh_generic_level_status_remaining_time_resolution,
10464
16
            { "Step Resolution", "btmesh.model.generic_level_status.remaining_time.resolution",
10465
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10466
16
            NULL, HFILL }
10467
16
        },
10468
16
        { &hf_btmesh_generic_level_status_remaining_time_steps,
10469
16
            { "Number of Steps", "btmesh.model.generic_level_status.remaining_time.steps",
10470
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10471
16
            NULL, HFILL }
10472
16
        },
10473
16
        { &hf_btmesh_generic_delta_set_delta_level,
10474
16
            { "Delta Level", "btmesh.model.generic_delta_set.delta_level",
10475
16
            FT_INT32, BASE_DEC, NULL, 0x0,
10476
16
            NULL, HFILL }
10477
16
        },
10478
16
        { &hf_btmesh_generic_delta_set_tid,
10479
16
            { "TID", "btmesh.model.generic_delta_set.tid",
10480
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10481
16
            NULL, HFILL }
10482
16
        },
10483
16
        { &hf_btmesh_generic_delta_set_transition_time,
10484
16
            { "Transition Time", "btmesh.model.generic_delta_set.transition_time",
10485
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10486
16
            NULL, HFILL }
10487
16
        },
10488
16
        { &hf_btmesh_generic_delta_set_transition_time_resolution,
10489
16
            { "Step Resolution", "btmesh.model.generic_delta_set.transition_time.resolution",
10490
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10491
16
            NULL, HFILL }
10492
16
        },
10493
16
        { &hf_btmesh_generic_delta_set_transition_time_steps,
10494
16
            { "Number of Steps", "btmesh.model.generic_delta_set.transition_time.steps",
10495
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10496
16
            NULL, HFILL }
10497
16
        },
10498
16
        { &hf_btmesh_generic_delta_set_delay,
10499
16
            { "Delay", "btmesh.model.generic_delta_set.delay",
10500
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10501
16
            NULL, HFILL }
10502
16
        },
10503
16
        { &hf_btmesh_generic_delta_set_unacknowledged_delta_level,
10504
16
            { "Delta Level", "btmesh.model.generic_delta_set_unacknowledged.delta_level",
10505
16
            FT_INT32, BASE_DEC, NULL, 0x0,
10506
16
            NULL, HFILL }
10507
16
        },
10508
16
        { &hf_btmesh_generic_delta_set_unacknowledged_tid,
10509
16
            { "TID", "btmesh.model.generic_delta_set_unacknowledged.tid",
10510
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10511
16
            NULL, HFILL }
10512
16
        },
10513
16
        { &hf_btmesh_generic_delta_set_unacknowledged_transition_time,
10514
16
            { "Transition Time", "btmesh.model.generic_delta_set_unacknowledged.transition_time",
10515
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10516
16
            NULL, HFILL }
10517
16
        },
10518
16
        { &hf_btmesh_generic_delta_set_unacknowledged_transition_time_resolution,
10519
16
            { "Step Resolution", "btmesh.model.generic_delta_set_unacknowledged.transition_time.resolution",
10520
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10521
16
            NULL, HFILL }
10522
16
        },
10523
16
        { &hf_btmesh_generic_delta_set_unacknowledged_transition_time_steps,
10524
16
            { "Number of Steps", "btmesh.model.generic_delta_set_unacknowledged.transition_time.steps",
10525
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10526
16
            NULL, HFILL }
10527
16
        },
10528
16
        { &hf_btmesh_generic_delta_set_unacknowledged_delay,
10529
16
            { "Delay", "btmesh.model.generic_delta_set_unacknowledged.delay",
10530
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10531
16
            NULL, HFILL }
10532
16
        },
10533
16
        { &hf_btmesh_generic_move_set_delta_level,
10534
16
            { "Delta Level", "btmesh.model.generic_move_set.delta_level",
10535
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10536
16
            NULL, HFILL }
10537
16
        },
10538
16
        { &hf_btmesh_generic_move_set_tid,
10539
16
            { "TID", "btmesh.model.generic_move_set.tid",
10540
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10541
16
            NULL, HFILL }
10542
16
        },
10543
16
        { &hf_btmesh_generic_move_set_transition_time,
10544
16
            { "Transition Time", "btmesh.model.generic_move_set.transition_time",
10545
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10546
16
            NULL, HFILL }
10547
16
        },
10548
16
        { &hf_btmesh_generic_move_set_transition_time_resolution,
10549
16
            { "Step Resolution", "btmesh.model.generic_move_set.transition_time.resolution",
10550
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10551
16
            NULL, HFILL }
10552
16
        },
10553
16
        { &hf_btmesh_generic_move_set_transition_time_steps,
10554
16
            { "Number of Steps", "btmesh.model.generic_move_set.transition_time.steps",
10555
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10556
16
            NULL, HFILL }
10557
16
        },
10558
16
        { &hf_btmesh_generic_move_set_delay,
10559
16
            { "Delay", "btmesh.model.generic_move_set.delay",
10560
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10561
16
            NULL, HFILL }
10562
16
        },
10563
16
        { &hf_btmesh_generic_move_set_unacknowledged_delta_level,
10564
16
            { "Delta Level", "btmesh.model.generic_move_set_unacknowledged.delta_level",
10565
16
            FT_INT16, BASE_DEC, NULL, 0x0,
10566
16
            NULL, HFILL }
10567
16
        },
10568
16
        { &hf_btmesh_generic_move_set_unacknowledged_tid,
10569
16
            { "TID", "btmesh.model.generic_move_set_unacknowledged.tid",
10570
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10571
16
            NULL, HFILL }
10572
16
        },
10573
16
        { &hf_btmesh_generic_move_set_unacknowledged_transition_time,
10574
16
            { "Transition Time", "btmesh.model.generic_move_set_unacknowledged.transition_time",
10575
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10576
16
            NULL, HFILL }
10577
16
        },
10578
16
        { &hf_btmesh_generic_move_set_unacknowledged_transition_time_resolution,
10579
16
            { "Step Resolution", "btmesh.model.generic_move_set_unacknowledged.transition_time.resolution",
10580
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10581
16
            NULL, HFILL }
10582
16
        },
10583
16
        { &hf_btmesh_generic_move_set_unacknowledged_transition_time_steps,
10584
16
            { "Number of Steps", "btmesh.model.generic_move_set_unacknowledged.transition_time.steps",
10585
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10586
16
            NULL, HFILL }
10587
16
        },
10588
16
        { &hf_btmesh_generic_move_set_unacknowledged_delay,
10589
16
            { "Delay", "btmesh.model.generic_move_set_unacknowledged.delay",
10590
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10591
16
            NULL, HFILL }
10592
16
        },
10593
16
        { &hf_btmesh_generic_default_transition_time_set_transition_time,
10594
16
            { "Transition Time", "btmesh.model.generic_default_transition_time_set.transition_time",
10595
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10596
16
            NULL, HFILL }
10597
16
        },
10598
16
        { &hf_btmesh_generic_default_transition_time_set_transition_time_resolution,
10599
16
            { "Step Resolution", "btmesh.model.generic_default_transition_time_set.transition_time.resolution",
10600
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10601
16
            NULL, HFILL }
10602
16
        },
10603
16
        { &hf_btmesh_generic_default_transition_time_set_transition_time_steps,
10604
16
            { "Number of Steps", "btmesh.model.generic_default_transition_time_set.transition_time.steps",
10605
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10606
16
            NULL, HFILL }
10607
16
        },
10608
16
        { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time,
10609
16
            { "Transition Time", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time",
10610
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10611
16
            NULL, HFILL }
10612
16
        },
10613
16
        { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_resolution,
10614
16
            { "Step Resolution", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time.resolution",
10615
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10616
16
            NULL, HFILL }
10617
16
        },
10618
16
        { &hf_btmesh_generic_default_transition_time_set_unacknowledged_transition_time_steps,
10619
16
            { "Number of Steps", "btmesh.model.generic_default_transition_time_set_unacknowledged.transition_time.steps",
10620
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10621
16
            NULL, HFILL }
10622
16
        },
10623
16
        { &hf_btmesh_generic_default_transition_time_status_transition_time,
10624
16
            { "Transition Time", "btmesh.model.generic_default_transition_time_status.transition_time",
10625
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10626
16
            NULL, HFILL }
10627
16
        },
10628
16
        { &hf_btmesh_generic_default_transition_time_status_transition_time_resolution,
10629
16
            { "Step Resolution", "btmesh.model.generic_default_transition_time_status.transition_time.resolution",
10630
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10631
16
            NULL, HFILL }
10632
16
        },
10633
16
        { &hf_btmesh_generic_default_transition_time_status_transition_time_steps,
10634
16
            { "Number of Steps", "btmesh.model.generic_default_transition_time_status.transition_time.steps",
10635
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10636
16
            NULL, HFILL }
10637
16
        },
10638
16
        { &hf_btmesh_generic_onpowerup_status_onpowerup,
10639
16
            { "OnPowerUp", "btmesh.model.generic_onpowerup_status.onpowerup",
10640
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10641
16
            NULL, HFILL }
10642
16
        },
10643
16
        { &hf_btmesh_generic_onpowerup_set_onpowerup,
10644
16
            { "OnPowerUp", "btmesh.model.generic_onpowerup_set.onpowerup",
10645
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10646
16
            NULL, HFILL }
10647
16
        },
10648
16
        { &hf_btmesh_generic_onpowerup_set_unacknowledged_onpowerup,
10649
16
            { "OnPowerUp", "btmesh.model.generic_onpowerup_set_unacknowledged.onpowerup",
10650
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_onpowerup_vals), 0x0,
10651
16
            NULL, HFILL }
10652
16
        },
10653
16
        { &hf_btmesh_generic_power_level_set_power,
10654
16
            { "Power", "btmesh.model.generic_power_level_set.power",
10655
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10656
16
            NULL, HFILL }
10657
16
        },
10658
16
        { &hf_btmesh_generic_power_level_set_tid,
10659
16
            { "TID", "btmesh.model.generic_power_level_set.tid",
10660
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10661
16
            NULL, HFILL }
10662
16
        },
10663
16
        { &hf_btmesh_generic_power_level_set_transition_time,
10664
16
            { "Transition Time", "btmesh.model.generic_power_level_set.transition_time",
10665
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10666
16
            NULL, HFILL }
10667
16
        },
10668
16
        { &hf_btmesh_generic_power_level_set_transition_time_resolution,
10669
16
            { "Step Resolution", "btmesh.model.generic_power_level_set.transition_time.resolution",
10670
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10671
16
            NULL, HFILL }
10672
16
        },
10673
16
        { &hf_btmesh_generic_power_level_set_transition_time_steps,
10674
16
            { "Number of Steps", "btmesh.model.generic_power_level_set.transition_time.steps",
10675
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10676
16
            NULL, HFILL }
10677
16
        },
10678
16
        { &hf_btmesh_generic_power_level_set_delay,
10679
16
            { "Delay", "btmesh.model.generic_power_level_set.delay",
10680
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10681
16
            NULL, HFILL }
10682
16
        },
10683
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_power,
10684
16
            { "Power", "btmesh.model.generic_power_level_set_unacknowledged.power",
10685
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10686
16
            NULL, HFILL }
10687
16
        },
10688
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_tid,
10689
16
            { "TID", "btmesh.model.generic_power_level_set_unacknowledged.tid",
10690
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10691
16
            NULL, HFILL }
10692
16
        },
10693
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time,
10694
16
            { "Transition Time", "btmesh.model.generic_power_level_set_unacknowledged.transition_time",
10695
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10696
16
            NULL, HFILL }
10697
16
        },
10698
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time_resolution,
10699
16
            { "Step Resolution", "btmesh.model.generic_power_level_set_unacknowledged.transition_time.resolution",
10700
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10701
16
            NULL, HFILL }
10702
16
        },
10703
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_transition_time_steps,
10704
16
            { "Number of Steps", "btmesh.model.generic_power_level_set_unacknowledged.transition_time.steps",
10705
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10706
16
            NULL, HFILL }
10707
16
        },
10708
16
        { &hf_btmesh_generic_power_level_set_unacknowledged_delay,
10709
16
            { "Delay", "btmesh.model.generic_power_level_set_unacknowledged.delay",
10710
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
10711
16
            NULL, HFILL }
10712
16
        },
10713
16
        { &hf_btmesh_generic_power_level_status_present_power,
10714
16
            { "Present Power", "btmesh.model.generic_power_level_status.present_power",
10715
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10716
16
            NULL, HFILL }
10717
16
        },
10718
16
        { &hf_btmesh_generic_power_level_status_target_power,
10719
16
            { "Target Power", "btmesh.model.generic_power_level_status.target_power",
10720
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10721
16
            NULL, HFILL }
10722
16
        },
10723
16
        { &hf_btmesh_generic_power_level_status_remaining_time,
10724
16
            { "Remaining Time", "btmesh.model.generic_power_level_status.remaining_time",
10725
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10726
16
            NULL, HFILL }
10727
16
        },
10728
16
        { &hf_btmesh_generic_power_level_status_remaining_time_resolution,
10729
16
            { "Step Resolution", "btmesh.model.generic_power_level_status.remaining_time.resolution",
10730
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10731
16
            NULL, HFILL }
10732
16
        },
10733
16
        { &hf_btmesh_generic_power_level_status_remaining_time_steps,
10734
16
            { "Number of Steps", "btmesh.model.generic_power_level_status.remaining_time.steps",
10735
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10736
16
            NULL, HFILL }
10737
16
        },
10738
16
        { &hf_btmesh_generic_power_last_status_power,
10739
16
            { "Power", "btmesh.model.generic_power_last_status.power",
10740
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10741
16
            NULL, HFILL }
10742
16
        },
10743
16
        { &hf_btmesh_generic_power_default_status_power,
10744
16
            { "Power", "btmesh.model.generic_power_default_status.power",
10745
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10746
16
            NULL, HFILL }
10747
16
        },
10748
16
        { &hf_btmesh_generic_power_range_status_status_code,
10749
16
            { "Status Code", "btmesh.model.generic_power_range_status.status_code",
10750
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
10751
16
            NULL, HFILL }
10752
16
        },
10753
16
        { &hf_btmesh_generic_power_range_status_range_min,
10754
16
            { "Range Min", "btmesh.model.generic_power_range_status.range_min",
10755
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10756
16
            NULL, HFILL }
10757
16
        },
10758
16
        { &hf_btmesh_generic_power_range_status_range_max,
10759
16
            { "Range Max", "btmesh.model.generic_power_range_status.range_max",
10760
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10761
16
            NULL, HFILL }
10762
16
        },
10763
16
        { &hf_btmesh_generic_power_default_set_power,
10764
16
            { "Power", "btmesh.model.generic_power_default_set.power",
10765
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10766
16
            NULL, HFILL }
10767
16
        },
10768
16
        { &hf_btmesh_generic_power_default_set_unacknowledged_power,
10769
16
            { "Power", "btmesh.model.generic_power_default_set_unacknowledged.power",
10770
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10771
16
            NULL, HFILL }
10772
16
        },
10773
16
        { &hf_btmesh_generic_power_range_set_range_min,
10774
16
            { "Range Min", "btmesh.model.generic_power_range_set.range_min",
10775
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10776
16
            NULL, HFILL }
10777
16
        },
10778
16
        { &hf_btmesh_generic_power_range_set_range_max,
10779
16
            { "Range Max", "btmesh.model.generic_power_range_set.range_max",
10780
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10781
16
            NULL, HFILL }
10782
16
        },
10783
16
        { &hf_btmesh_generic_power_range_set_unacknowledged_range_min,
10784
16
            { "Range Min", "btmesh.model.generic_power_range_set_unacknowledged.range_min",
10785
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10786
16
            NULL, HFILL }
10787
16
        },
10788
16
        { &hf_btmesh_generic_power_range_set_unacknowledged_range_max,
10789
16
            { "Range Max", "btmesh.model.generic_power_range_set_unacknowledged.range_max",
10790
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_power), 0x0,
10791
16
            NULL, HFILL }
10792
16
        },
10793
16
        { &hf_btmesh_generic_battery_status_battery_level,
10794
16
            { "Battery Level", "btmesh.model.generic_battery_status.battery_level",
10795
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_battery_level), 0x0,
10796
16
            NULL, HFILL }
10797
16
        },
10798
16
        { &hf_btmesh_generic_battery_status_time_to_discharge,
10799
16
            { "Time to Discharge", "btmesh.model.generic_battery_status.time_to_discharge",
10800
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_battery_time), 0x0,
10801
16
            NULL, HFILL }
10802
16
        },
10803
16
        { &hf_btmesh_generic_battery_status_time_to_charge,
10804
16
            { "Time to Charge", "btmesh.model.generic_battery_status.time_to_charge",
10805
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_battery_time), 0x0,
10806
16
            NULL, HFILL }
10807
16
        },
10808
16
        { &hf_btmesh_generic_battery_status_flags_presence,
10809
16
            { "Flags", "btmesh.model.generic_battery_status.flags.presence",
10810
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_presence_vals), 0x03,
10811
16
            NULL, HFILL }
10812
16
        },
10813
16
        { &hf_btmesh_generic_battery_status_flags_indicator,
10814
16
            { "Flags", "btmesh.model.generic_battery_status.flags.indicator",
10815
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_indicator_vals), 0x0C,
10816
16
            NULL, HFILL }
10817
16
        },
10818
16
        { &hf_btmesh_generic_battery_status_flags_charging,
10819
16
            { "Flags", "btmesh.model.generic_battery_status.flags.charging",
10820
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_charging_vals), 0x30,
10821
16
            NULL, HFILL }
10822
16
        },
10823
16
        { &hf_btmesh_generic_battery_status_flags_serviceability,
10824
16
            { "Flags", "btmesh.model.generic_battery_status.flags.serviceability",
10825
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_battery_flags_serviceability_vals), 0xC0,
10826
16
            NULL, HFILL }
10827
16
        },
10828
16
        { &hf_btmesh_generic_location_local_status_local_north,
10829
16
            { "Local North", "btmesh.model.generic_location_local_status.local_north",
10830
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10831
16
            NULL, HFILL }
10832
16
        },
10833
16
        { &hf_btmesh_generic_location_local_status_local_east,
10834
16
            { "Local East", "btmesh.model.generic_location_local_status.local_east",
10835
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10836
16
            NULL, HFILL }
10837
16
        },
10838
16
        { &hf_btmesh_generic_location_local_status_local_altitude,
10839
16
            { "Local Altitude", "btmesh.model.generic_location_local_status.local_altitude",
10840
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10841
16
            NULL, HFILL }
10842
16
        },
10843
16
        { &hf_btmesh_generic_location_local_status_floor_number,
10844
16
            { "Floor Number", "btmesh.model.generic_location_local_status.floor_number",
10845
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10846
16
            NULL, HFILL }
10847
16
        },
10848
16
        { &hf_btmesh_generic_location_local_status_uncertainty_stationary,
10849
16
            { "Stationary", "btmesh.model.generic_location_local_status.uncertainty.stationary",
10850
16
            FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10851
16
            NULL, HFILL }
10852
16
        },
10853
16
        { &hf_btmesh_generic_location_local_status_uncertainty_rfu,
10854
16
            { "RFU", "btmesh.model.generic_location_local_status.uncertainty.rfu",
10855
16
            FT_UINT16, BASE_DEC, NULL, 0x00FE,
10856
16
            NULL, HFILL }
10857
16
        },
10858
16
        { &hf_btmesh_generic_location_local_status_uncertainty_update_time,
10859
16
            { "Update Time", "btmesh.model.generic_location_local_status.uncertainty.update_time",
10860
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10861
16
            NULL, HFILL }
10862
16
        },
10863
16
        { &hf_btmesh_generic_location_local_status_uncertainty_precision,
10864
16
            { "Precision", "btmesh.model.generic_location_local_status.uncertainty.precision",
10865
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10866
16
            NULL, HFILL }
10867
16
        },
10868
16
        { &hf_btmesh_generic_location_local_set_local_north,
10869
16
            { "Local North", "btmesh.model.generic_location_local_set.local_north",
10870
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10871
16
            NULL, HFILL }
10872
16
        },
10873
16
        { &hf_btmesh_generic_location_local_set_local_east,
10874
16
            { "Local East", "btmesh.model.generic_location_local_set.local_east",
10875
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10876
16
            NULL, HFILL }
10877
16
        },
10878
16
        { &hf_btmesh_generic_location_local_set_local_altitude,
10879
16
            { "Local Altitude", "btmesh.model.generic_location_local_set.local_altitude",
10880
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10881
16
            NULL, HFILL }
10882
16
        },
10883
16
        { &hf_btmesh_generic_location_local_set_floor_number,
10884
16
            { "Floor Number", "btmesh.model.generic_location_local_set.floor_number",
10885
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10886
16
            NULL, HFILL }
10887
16
        },
10888
16
        { &hf_btmesh_generic_location_local_set_uncertainty_stationary,
10889
16
            { "Stationary", "btmesh.model.generic_location_local_set.uncertainty.stationary",
10890
16
            FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10891
16
            NULL, HFILL }
10892
16
        },
10893
16
        { &hf_btmesh_generic_location_local_set_uncertainty_rfu,
10894
16
            { "RFU", "btmesh.model.generic_location_local_set.uncertainty.rfu",
10895
16
            FT_UINT16, BASE_DEC, NULL, 0x00FE,
10896
16
            NULL, HFILL }
10897
16
        },
10898
16
        { &hf_btmesh_generic_location_local_set_uncertainty_update_time,
10899
16
            { "Update Time", "btmesh.model.generic_location_local_set.uncertainty.update_time",
10900
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10901
16
            NULL, HFILL }
10902
16
        },
10903
16
        { &hf_btmesh_generic_location_local_set_uncertainty_precision,
10904
16
            { "Precision", "btmesh.model.generic_location_local_set.uncertainty.precision",
10905
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10906
16
            NULL, HFILL }
10907
16
        },
10908
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_local_north,
10909
16
            { "Local North", "btmesh.model.generic_location_local_set_unacknowledged.local_north",
10910
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_north), 0x0,
10911
16
            NULL, HFILL }
10912
16
        },
10913
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_local_east,
10914
16
            { "Local East", "btmesh.model.generic_location_local_set_unacknowledged.local_east",
10915
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_east), 0x0,
10916
16
            NULL, HFILL }
10917
16
        },
10918
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_local_altitude,
10919
16
            { "Local Altitude", "btmesh.model.generic_location_local_set_unacknowledged.local_altitude",
10920
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_local_altitude), 0x0,
10921
16
            NULL, HFILL }
10922
16
        },
10923
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_floor_number,
10924
16
            { "Floor Number", "btmesh.model.generic_location_local_set_unacknowledged.floor_number",
10925
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_floor_number), 0x0,
10926
16
            NULL, HFILL }
10927
16
        },
10928
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_stationary,
10929
16
            { "Stationary", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.stationary",
10930
16
            FT_UINT16, BASE_DEC, VALS(btmesh_generic_location_local_stationary_vals), 0x0001,
10931
16
            NULL, HFILL }
10932
16
        },
10933
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_rfu,
10934
16
            { "RFU", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.rfu",
10935
16
            FT_UINT16, BASE_DEC, NULL, 0x00FE,
10936
16
            NULL, HFILL }
10937
16
        },
10938
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_update_time,
10939
16
            { "Update Time", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.update_time",
10940
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_update_time), 0x0F00,
10941
16
            NULL, HFILL }
10942
16
        },
10943
16
        { &hf_btmesh_generic_location_local_set_unacknowledged_uncertainty_precision,
10944
16
            { "Precision", "btmesh.model.generic_location_local_set_unacknowledged.uncertainty.precision",
10945
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_precision), 0xF000,
10946
16
            NULL, HFILL }
10947
16
        },
10948
16
        { &hf_btmesh_scene_status_status_code,
10949
16
            { "Status Code", "btmesh.model.scene_status.status_code",
10950
16
            FT_UINT8, BASE_DEC, VALS(btmesh_scene_status_code_vals), 0x0,
10951
16
            NULL, HFILL }
10952
16
        },
10953
16
        { &hf_btmesh_scene_status_current_scene,
10954
16
            { "Current Scene", "btmesh.model.scene_status.current_scene",
10955
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
10956
16
            NULL, HFILL }
10957
16
        },
10958
16
        { &hf_btmesh_scene_status_target_scene,
10959
16
            { "Target Scene", "btmesh.model.scene_status.target_scene",
10960
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
10961
16
            NULL, HFILL }
10962
16
        },
10963
16
        { &hf_btmesh_scene_status_remaining_time,
10964
16
            { "Remaining Time", "btmesh.model.scene_status.remaining_time",
10965
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10966
16
            NULL, HFILL }
10967
16
        },
10968
16
        { &hf_btmesh_scene_status_remaining_time_resolution,
10969
16
            { "Step Resolution", "btmesh.model.scene_status.remaining_time.resolution",
10970
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10971
16
            NULL, HFILL }
10972
16
        },
10973
16
        { &hf_btmesh_scene_status_remaining_time_steps,
10974
16
            { "Number of Steps", "btmesh.model.scene_status.remaining_time.steps",
10975
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
10976
16
            NULL, HFILL }
10977
16
        },
10978
16
        { &hf_btmesh_scene_recall_scene_number,
10979
16
            { "Scene Number", "btmesh.model.scene_recall.scene_number",
10980
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
10981
16
            NULL, HFILL }
10982
16
        },
10983
16
        { &hf_btmesh_scene_recall_tid,
10984
16
            { "TID", "btmesh.model.scene_recall.tid",
10985
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
10986
16
            NULL, HFILL }
10987
16
        },
10988
16
        { &hf_btmesh_scene_recall_transition_time,
10989
16
            { "Transition Time", "btmesh.model.scene_recall.transition_time",
10990
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
10991
16
            NULL, HFILL }
10992
16
        },
10993
16
        { &hf_btmesh_scene_recall_transition_time_resolution,
10994
16
            { "Step Resolution", "btmesh.model.scene_recall.transition_time.resolution",
10995
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
10996
16
            NULL, HFILL }
10997
16
        },
10998
16
        { &hf_btmesh_scene_recall_transition_time_steps,
10999
16
            { "Number of Steps", "btmesh.model.scene_recall.transition_time.steps",
11000
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11001
16
            NULL, HFILL }
11002
16
        },
11003
16
        { &hf_btmesh_scene_recall_delay,
11004
16
            { "Delay", "btmesh.model.scene_recall.delay",
11005
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11006
16
            NULL, HFILL }
11007
16
        },
11008
16
        { &hf_btmesh_scene_recall_unacknowledged_scene_number,
11009
16
            { "Scene Number", "btmesh.model.scene_recall_unacknowledged.scene_number",
11010
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11011
16
            NULL, HFILL }
11012
16
        },
11013
16
        { &hf_btmesh_scene_recall_unacknowledged_tid,
11014
16
            { "TID", "btmesh.model.scene_recall_unacknowledged.tid",
11015
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11016
16
            NULL, HFILL }
11017
16
        },
11018
16
        { &hf_btmesh_scene_recall_unacknowledged_transition_time,
11019
16
            { "Transition Time", "btmesh.model.scene_recall_unacknowledged.transition_time",
11020
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11021
16
            NULL, HFILL }
11022
16
        },
11023
16
        { &hf_btmesh_scene_recall_unacknowledged_transition_time_resolution,
11024
16
            { "Step Resolution", "btmesh.model.scene_recall_unacknowledged.transition_time.resolution",
11025
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11026
16
            NULL, HFILL }
11027
16
        },
11028
16
        { &hf_btmesh_scene_recall_unacknowledged_transition_time_steps,
11029
16
            { "Number of Steps", "btmesh.model.scene_recall_unacknowledged.transition_time.steps",
11030
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11031
16
            NULL, HFILL }
11032
16
        },
11033
16
        { &hf_btmesh_scene_recall_unacknowledged_delay,
11034
16
            { "Delay", "btmesh.model.scene_recall_unacknowledged.delay",
11035
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11036
16
            NULL, HFILL }
11037
16
        },
11038
16
        { &hf_btmesh_scene_register_status_status_code,
11039
16
            { "Status Code", "btmesh.model.scene_register_status.status_code",
11040
16
            FT_UINT8, BASE_DEC, VALS(btmesh_scene_status_code_vals), 0x0,
11041
16
            NULL, HFILL }
11042
16
        },
11043
16
        { &hf_btmesh_scene_register_status_current_scene,
11044
16
            { "Current Scene", "btmesh.model.scene_register_status.current_scene",
11045
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11046
16
            NULL, HFILL }
11047
16
        },
11048
16
        { &hf_btmesh_scene_register_status_scene,
11049
16
            { "Scene", "btmesh.model.scene_register_status.scene",
11050
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11051
16
            NULL, HFILL }
11052
16
        },
11053
16
        { &hf_btmesh_scene_store_scene_number,
11054
16
            { "Scene Number", "btmesh.model.scene_store.scene_number",
11055
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11056
16
            NULL, HFILL }
11057
16
        },
11058
16
        { &hf_btmesh_scene_store_unacknowledged_scene_number,
11059
16
            { "Scene Number", "btmesh.model.scene_store_unacknowledged.scene_number",
11060
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11061
16
            NULL, HFILL }
11062
16
        },
11063
16
        { &hf_btmesh_scene_delete_scene_number,
11064
16
            { "Scene Number", "btmesh.model.scene_delete.scene_number",
11065
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11066
16
            NULL, HFILL }
11067
16
        },
11068
16
        { &hf_btmesh_scene_delete_unacknowledged_scene_number,
11069
16
            { "Scene Number", "btmesh.model.scene_delete_unacknowledged.scene_number",
11070
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11071
16
            NULL, HFILL }
11072
16
        },
11073
16
        { &hf_btmesh_time_set_tai_seconds,
11074
16
            { "TAI Seconds", "btmesh.model.time_set.tai_seconds",
11075
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11076
16
            NULL, HFILL }
11077
16
        },
11078
16
        { &hf_btmesh_time_set_subsecond,
11079
16
            { "Subsecond", "btmesh.model.time_set.subsecond",
11080
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_subsecond_ms), 0x0,
11081
16
            NULL, HFILL }
11082
16
        },
11083
16
        { &hf_btmesh_time_set_uncertainty,
11084
16
            { "Uncertainty", "btmesh.model.time_set.uncertainty",
11085
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_uncertainty_ms), 0x0,
11086
16
            NULL, HFILL }
11087
16
        },
11088
16
        { &hf_btmesh_time_set_time_authority,
11089
16
            { "Time Authority", "btmesh.model.time_set.time_authority",
11090
16
            FT_UINT16, BASE_DEC, VALS(btmesh_time_authority_vals), 0x0001,
11091
16
            NULL, HFILL }
11092
16
        },
11093
16
        { &hf_btmesh_time_set_tai_utc_delta,
11094
16
            { "TAI-UTC Delta", "btmesh.model.time_set.tai_utc_delta",
11095
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0xFFFE,
11096
16
            NULL, HFILL }
11097
16
        },
11098
16
        { &hf_btmesh_time_set_time_zone_offset,
11099
16
            { "Time Zone Offset", "btmesh.model.time_set.time_zone_offset",
11100
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11101
16
            NULL, HFILL }
11102
16
        },
11103
16
        { &hf_btmesh_time_status_tai_seconds,
11104
16
            { "TAI Seconds", "btmesh.model.time_status.tai_seconds",
11105
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11106
16
            NULL, HFILL }
11107
16
        },
11108
16
        { &hf_btmesh_time_status_subsecond,
11109
16
            { "Subsecond", "btmesh.model.time_status.subsecond",
11110
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_subsecond_ms), 0x0,
11111
16
            NULL, HFILL }
11112
16
        },
11113
16
        { &hf_btmesh_time_status_uncertainty,
11114
16
            { "Uncertainty", "btmesh.model.time_status.uncertainty",
11115
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_uncertainty_ms), 0x0,
11116
16
            NULL, HFILL }
11117
16
        },
11118
16
        { &hf_btmesh_time_status_time_authority,
11119
16
            { "Time Authority", "btmesh.model.time_status.time_authority",
11120
16
            FT_UINT16, BASE_DEC, VALS(btmesh_time_authority_vals), 0x0001,
11121
16
            NULL, HFILL }
11122
16
        },
11123
16
        { &hf_btmesh_time_status_tai_utc_delta,
11124
16
            { "TAI-UTC Delta", "btmesh.model.time_status.tai_utc_delta",
11125
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0xFFFE,
11126
16
            NULL, HFILL }
11127
16
        },
11128
16
        { &hf_btmesh_time_status_time_zone_offset,
11129
16
            { "Time Zone Offset", "btmesh.model.time_status.time_zone_offset",
11130
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11131
16
            NULL, HFILL }
11132
16
        },
11133
16
        { &hf_btmesh_scheduler_schedule_register_month_january,
11134
16
            { "January", "btmesh.model.schedule_register.month.january",
11135
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00000800,
11136
16
            NULL, HFILL }
11137
16
        },
11138
16
        { &hf_btmesh_scheduler_schedule_register_month_february,
11139
16
            { "February", "btmesh.model.schedule_register.month.february",
11140
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00001000,
11141
16
            NULL, HFILL }
11142
16
        },
11143
16
        { &hf_btmesh_scheduler_schedule_register_month_march,
11144
16
            { "March", "btmesh.model.schedule_register.month.march",
11145
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00002000,
11146
16
            NULL, HFILL }
11147
16
        },
11148
16
        { &hf_btmesh_scheduler_schedule_register_month_april,
11149
16
            { "April", "btmesh.model.schedule_register.month.april",
11150
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00004000,
11151
16
            NULL, HFILL }
11152
16
        },
11153
16
        { &hf_btmesh_scheduler_schedule_register_month_may,
11154
16
            { "May", "btmesh.model.schedule_register.month.may",
11155
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00008000,
11156
16
            NULL, HFILL }
11157
16
        },
11158
16
        { &hf_btmesh_scheduler_schedule_register_month_june,
11159
16
            { "June", "btmesh.model.schedule_register.month.june",
11160
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00010000,
11161
16
            NULL, HFILL }
11162
16
        },
11163
16
        { &hf_btmesh_scheduler_schedule_register_month_july,
11164
16
            { "July", "btmesh.model.schedule_register.month.july",
11165
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00020000,
11166
16
            NULL, HFILL }
11167
16
        },
11168
16
        { &hf_btmesh_scheduler_schedule_register_month_august,
11169
16
            { "August", "btmesh.model.schedule_register.month.august",
11170
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00040000,
11171
16
            NULL, HFILL }
11172
16
        },
11173
16
        { &hf_btmesh_scheduler_schedule_register_month_september,
11174
16
            { "September", "btmesh.model.schedule_register.month.september",
11175
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00080000,
11176
16
            NULL, HFILL }
11177
16
        },
11178
16
        { &hf_btmesh_scheduler_schedule_register_month_october,
11179
16
            { "October", "btmesh.model.schedule_register.month.october",
11180
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00100000,
11181
16
            NULL, HFILL }
11182
16
        },
11183
16
        { &hf_btmesh_scheduler_schedule_register_month_november,
11184
16
            { "November", "btmesh.model.schedule_register.month.november",
11185
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00200000,
11186
16
            NULL, HFILL }
11187
16
        },
11188
16
        { &hf_btmesh_scheduler_schedule_register_month_december,
11189
16
            { "December", "btmesh.model.schedule_register.month.december",
11190
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00400000,
11191
16
            NULL, HFILL }
11192
16
        },
11193
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_monday,
11194
16
            { "Monday", "btmesh.model.schedule_register.day_of_week.monday",
11195
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00200000,
11196
16
            NULL, HFILL }
11197
16
        },
11198
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_tuesday,
11199
16
            { "Tuesday", "btmesh.model.schedule_register.day_of_week.tuesday",
11200
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00400000,
11201
16
            NULL, HFILL }
11202
16
        },
11203
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_wednesday,
11204
16
            { "Wednesday", "btmesh.model.schedule_register.day_of_week.wednesday",
11205
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x00800000,
11206
16
            NULL, HFILL }
11207
16
        },
11208
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_thursday,
11209
16
            { "Thursday", "btmesh.model.schedule_register.day_of_week.thursday",
11210
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x01000000,
11211
16
            NULL, HFILL }
11212
16
        },
11213
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_friday,
11214
16
            { "Friday", "btmesh.model.schedule_register.day_of_week.friday",
11215
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x02000000,
11216
16
            NULL, HFILL }
11217
16
        },
11218
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_saturday,
11219
16
            { "Saturday", "btmesh.model.schedule_register.day_of_week.saturday",
11220
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x04000000,
11221
16
            NULL, HFILL }
11222
16
        },
11223
16
        { &hf_btmesh_scheduler_schedule_register_day_of_week_sunday,
11224
16
            { "Sunday", "btmesh.model.schedule_register.day_of_week.sunday",
11225
16
            FT_UINT32, BASE_NONE, VALS(btmesh_yes_or_dash_vals), 0x08000000,
11226
16
            NULL, HFILL }
11227
16
        },
11228
16
        { &hf_btmesh_scheduler_action_status_index,
11229
16
            { "Index", "btmesh.model.scheduler_action_status.index",
11230
16
            FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11231
16
            NULL, HFILL }
11232
16
        },
11233
16
        { &hf_btmesh_scheduler_action_status_schedule_register_year,
11234
16
            { "Year", "btmesh.model.scheduler_action_status.schedule_register.year",
11235
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11236
16
            NULL, HFILL }
11237
16
        },
11238
16
        { &hf_btmesh_scheduler_action_status_schedule_register_month,
11239
16
            { "Month", "btmesh.model.scheduler_action_status.schedule_register.month",
11240
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11241
16
            NULL, HFILL }
11242
16
        },
11243
16
        { &hf_btmesh_scheduler_action_status_schedule_register_day,
11244
16
            { "Day", "btmesh.model.scheduler_action_status.schedule_register.day",
11245
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11246
16
            NULL, HFILL }
11247
16
        },
11248
16
        { &hf_btmesh_scheduler_action_status_schedule_register_hour,
11249
16
            { "Hour", "btmesh.model.scheduler_action_status.schedule_register.hour",
11250
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11251
16
            NULL, HFILL }
11252
16
        },
11253
16
        { &hf_btmesh_scheduler_action_status_schedule_register_minute,
11254
16
            { "Minute", "btmesh.model.scheduler_action_status.schedule_register.minute",
11255
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11256
16
            NULL, HFILL }
11257
16
        },
11258
16
        { &hf_btmesh_scheduler_action_status_schedule_register_second,
11259
16
            { "Second", "btmesh.model.scheduler_action_status.schedule_register.second",
11260
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11261
16
            NULL, HFILL }
11262
16
        },
11263
16
        { &hf_btmesh_scheduler_action_status_schedule_register_day_of_week,
11264
16
            { "DayOfWeek", "btmesh.model.scheduler_action_status.schedule_register.day_of_week",
11265
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11266
16
            NULL, HFILL }
11267
16
        },
11268
16
        { &hf_btmesh_scheduler_action_status_schedule_register_action,
11269
16
            { "Action", "btmesh.model.scheduler_action_status.schedule_register.action",
11270
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11271
16
            NULL, HFILL }
11272
16
        },
11273
16
        { &hf_btmesh_scheduler_action_status_schedule_register_transition_time,
11274
16
            { "Transition Time", "btmesh.model.scheduler_action_status.schedule_register.transition_time",
11275
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11276
16
            NULL, HFILL }
11277
16
        },
11278
16
        { &hf_btmesh_scheduler_action_status_schedule_register_transition_time_resolution,
11279
16
            { "Step Resolution", "btmesh.model.scheduler_action_status.schedule_register.transition_time.resolution",
11280
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11281
16
            NULL, HFILL }
11282
16
        },
11283
16
        { &hf_btmesh_scheduler_action_status_schedule_register_transition_time_steps,
11284
16
            { "Number of Steps", "btmesh.model.scheduler_action_status.schedule_register.transition_time.steps",
11285
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11286
16
            NULL, HFILL }
11287
16
        },
11288
16
        { &hf_btmesh_scheduler_action_status_schedule_register_scene_number,
11289
16
            { "Scene Number", "btmesh.model.scheduler_action_status.schedule_register.scene_number",
11290
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
11291
16
            NULL, HFILL }
11292
16
        },
11293
16
        { &hf_btmesh_scheduler_action_set_index,
11294
16
            { "Index", "btmesh.model.scheduler_action_set.index",
11295
16
            FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11296
16
            NULL, HFILL }
11297
16
        },
11298
16
        { &hf_btmesh_scheduler_action_set_schedule_register_year,
11299
16
            { "Year", "btmesh.model.scheduler_action_set.schedule_register.year",
11300
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11301
16
            NULL, HFILL }
11302
16
        },
11303
16
        { &hf_btmesh_scheduler_action_set_schedule_register_month,
11304
16
            { "Month", "btmesh.model.scheduler_action_set.schedule_register.month",
11305
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11306
16
            NULL, HFILL }
11307
16
        },
11308
16
        { &hf_btmesh_scheduler_action_set_schedule_register_day,
11309
16
            { "Day", "btmesh.model.scheduler_action_set.schedule_register.day",
11310
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11311
16
            NULL, HFILL }
11312
16
        },
11313
16
        { &hf_btmesh_scheduler_action_set_schedule_register_hour,
11314
16
            { "Hour", "btmesh.model.scheduler_action_set.schedule_register.hour",
11315
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11316
16
            NULL, HFILL }
11317
16
        },
11318
16
        { &hf_btmesh_scheduler_action_set_schedule_register_minute,
11319
16
            { "Minute", "btmesh.model.scheduler_action_set.schedule_register.minute",
11320
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11321
16
            NULL, HFILL }
11322
16
        },
11323
16
        { &hf_btmesh_scheduler_action_set_schedule_register_second,
11324
16
            { "Second", "btmesh.model.scheduler_action_set.schedule_register.second",
11325
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11326
16
            NULL, HFILL }
11327
16
        },
11328
16
        { &hf_btmesh_scheduler_action_set_schedule_register_day_of_week,
11329
16
            { "DayOfWeek", "btmesh.model.scheduler_action_set.schedule_register.day_of_week",
11330
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11331
16
            NULL, HFILL }
11332
16
        },
11333
16
        { &hf_btmesh_scheduler_action_set_schedule_register_action,
11334
16
            { "Action", "btmesh.model.scheduler_action_set.schedule_register.action",
11335
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11336
16
            NULL, HFILL }
11337
16
        },
11338
16
        { &hf_btmesh_scheduler_action_set_schedule_register_transition_time,
11339
16
            { "Transition Time", "btmesh.model.scheduler_action_set.schedule_register.transition_time",
11340
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11341
16
            NULL, HFILL }
11342
16
        },
11343
16
        { &hf_btmesh_scheduler_action_set_schedule_register_transition_time_resolution,
11344
16
            { "Step Resolution", "btmesh.model.scheduler_action_set.schedule_register.transition_time.resolution",
11345
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11346
16
            NULL, HFILL }
11347
16
        },
11348
16
        { &hf_btmesh_scheduler_action_set_schedule_register_transition_time_steps,
11349
16
            { "Number of Steps", "btmesh.model.scheduler_action_set.schedule_register.transition_time.steps",
11350
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11351
16
            NULL, HFILL }
11352
16
        },
11353
16
        { &hf_btmesh_scheduler_action_set_schedule_register_scene_number,
11354
16
            { "Scene Number", "btmesh.model.scheduler_action_set.schedule_register.scene_number",
11355
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
11356
16
            NULL, HFILL }
11357
16
        },
11358
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_index,
11359
16
            { "Index", "btmesh.model.scheduler_action_set_unacknowledged.index",
11360
16
            FT_UINT32, BASE_DEC, NULL, 0x0000000F,
11361
16
            NULL, HFILL }
11362
16
        },
11363
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_year,
11364
16
            { "Year", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.year",
11365
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_year), 0x000007F0,
11366
16
            NULL, HFILL }
11367
16
        },
11368
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_month,
11369
16
            { "Month", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.month",
11370
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_month), 0x007FF800,
11371
16
            NULL, HFILL }
11372
16
        },
11373
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day,
11374
16
            { "Day", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.day",
11375
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day), 0x0F800000,
11376
16
            NULL, HFILL }
11377
16
        },
11378
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_hour,
11379
16
            { "Hour", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.hour",
11380
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_hour), 0x000001F0,
11381
16
            NULL, HFILL }
11382
16
        },
11383
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_minute,
11384
16
            { "Minute", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.minute",
11385
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_minute), 0x00007E00,
11386
16
            NULL, HFILL }
11387
16
        },
11388
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_second,
11389
16
            { "Second", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.second",
11390
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_second), 0x001F8000,
11391
16
            NULL, HFILL }
11392
16
        },
11393
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_day_of_week,
11394
16
            { "DayOfWeek", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.day_of_week",
11395
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_day_of_week), 0x0FE00000,
11396
16
            NULL, HFILL }
11397
16
        },
11398
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_action,
11399
16
            { "Action", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.action",
11400
16
            FT_UINT32, BASE_CUSTOM, CF_FUNC(format_scheduler_action), 0xF0000000,
11401
16
            NULL, HFILL }
11402
16
        },
11403
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time,
11404
16
            { "Transition Time", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time",
11405
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11406
16
            NULL, HFILL }
11407
16
        },
11408
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_resolution,
11409
16
            { "Step Resolution", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time.resolution",
11410
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11411
16
            NULL, HFILL }
11412
16
        },
11413
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_transition_time_steps,
11414
16
            { "Number of Steps", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.transition_time.steps",
11415
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11416
16
            NULL, HFILL }
11417
16
        },
11418
16
        { &hf_btmesh_scheduler_action_set_unacknowledged_schedule_register_scene_number,
11419
16
            { "Scene Number", "btmesh.model.scheduler_action_set_unacknowledged.schedule_register.scene_number",
11420
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
11421
16
            NULL, HFILL }
11422
16
        },
11423
16
        { &hf_btmesh_time_role_set_time_role,
11424
16
            { "Time Role", "btmesh.model.time_role_set.time_role",
11425
16
            FT_UINT8, BASE_DEC, VALS(btmesh_time_role_vals), 0x0,
11426
16
            NULL, HFILL }
11427
16
        },
11428
16
        { &hf_btmesh_time_role_status_time_role,
11429
16
            { "Time Role", "btmesh.model.time_role_status.time_role",
11430
16
            FT_UINT8, BASE_DEC, VALS(btmesh_time_role_vals), 0x0,
11431
16
            NULL, HFILL }
11432
16
        },
11433
16
        { &hf_btmesh_time_zone_set_time_zone_offset_new,
11434
16
            { "Time Zone Offset New", "btmesh.model.time_zone_set.time_zone_offset_new",
11435
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11436
16
            NULL, HFILL }
11437
16
        },
11438
16
        { &hf_btmesh_time_zone_set_tai_of_zone_change,
11439
16
            { "TAI of Zone Change", "btmesh.model.time_zone_set.tai_of_zone_change",
11440
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11441
16
            NULL, HFILL }
11442
16
        },
11443
16
        { &hf_btmesh_time_zone_status_time_zone_offset_current,
11444
16
            { "Time Zone Offset Current", "btmesh.model.time_zone_status.time_zone_offset_current",
11445
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11446
16
            NULL, HFILL }
11447
16
        },
11448
16
        { &hf_btmesh_time_zone_status_time_zone_offset_new,
11449
16
            { "Time Zone Offset New", "btmesh.model.time_zone_status.time_zone_offset_new",
11450
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_time_zone_offset_h), 0x0,
11451
16
            NULL, HFILL }
11452
16
        },
11453
16
        { &hf_btmesh_time_zone_status_tai_of_zone_change,
11454
16
            { "TAI of Zone Change", "btmesh.model.time_zone_status.tai_of_zone_change",
11455
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11456
16
            NULL, HFILL }
11457
16
        },
11458
16
        { &hf_btmesh_tai_utc_delta_set_tai_utc_delta_new,
11459
16
            { "TAI-UTC Delta New", "btmesh.model.tai_utc_delta_set.tai_utc_delta_new",
11460
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11461
16
            NULL, HFILL }
11462
16
        },
11463
16
        { &hf_btmesh_tai_utc_delta_set_padding,
11464
16
            { "Padding", "btmesh.model.tai_utc_delta_set.padding",
11465
16
            FT_UINT16, BASE_DEC, NULL, 0x8000,
11466
16
            NULL, HFILL }
11467
16
        },
11468
16
        { &hf_btmesh_tai_utc_delta_set_tai_of_delta_change,
11469
16
            { "TAI of Delta Change", "btmesh.model.tai_utc_delta_set.tai_of_delta_change",
11470
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11471
16
            NULL, HFILL }
11472
16
        },
11473
16
        { &hf_btmesh_tai_utc_delta_status_tai_utc_delta_current,
11474
16
            { "TAI-UTC Delta Current", "btmesh.model.tai_utc_delta_status.tai_utc_delta_current",
11475
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11476
16
            NULL, HFILL }
11477
16
        },
11478
16
        { &hf_btmesh_tai_utc_delta_status_padding_1,
11479
16
            { "Padding 1", "btmesh.model.tai_utc_delta_status.padding_1",
11480
16
            FT_UINT16, BASE_DEC, NULL, 0x8000,
11481
16
            NULL, HFILL }
11482
16
        },
11483
16
        { &hf_btmesh_tai_utc_delta_status_tai_utc_delta_new,
11484
16
            { "TAI-UTC Delta New", "btmesh.model.tai_utc_delta_status.tai_utc_delta_new",
11485
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_tai_utc_delta_s), 0x7FFF,
11486
16
            NULL, HFILL }
11487
16
        },
11488
16
        { &hf_btmesh_tai_utc_delta_status_padding_2,
11489
16
            { "Padding 2", "btmesh.model.tai_utc_delta_status.padding_2",
11490
16
            FT_UINT16, BASE_DEC, NULL, 0x8000,
11491
16
            NULL, HFILL }
11492
16
        },
11493
16
        { &hf_btmesh_tai_utc_delta_status_tai_of_delta_change,
11494
16
            { "TAI of Delta Change", "btmesh.model.tai_utc_delta_status.tai_of_delta_change",
11495
16
            FT_UINT40, BASE_CUSTOM, CF_FUNC(format_tai_to_utc_date), 0x0,
11496
16
            NULL, HFILL }
11497
16
        },
11498
16
        { &hf_btmesh_scheduler_action_get_index,
11499
16
            { "Index", "btmesh.model.scheduler_action_get.index",
11500
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11501
16
            NULL, HFILL }
11502
16
        },
11503
16
        { &hf_btmesh_scheduler_status_schedules,
11504
16
            { "Schedules", "btmesh.model.scheduler_status.schedules",
11505
16
            FT_UINT16, BASE_HEX, NULL, 0x0,
11506
16
            NULL, HFILL }
11507
16
        },
11508
16
        { &hf_btmesh_scheduler_status_schedules_schedule_0,
11509
16
            { "Schedule 0", "btmesh.model.scheduler_status.schedules.schedule_0",
11510
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0001,
11511
16
            NULL, HFILL }
11512
16
        },
11513
16
        { &hf_btmesh_scheduler_status_schedules_schedule_1,
11514
16
            { "Schedule 1", "btmesh.model.scheduler_status.schedules.schedule_1",
11515
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0002,
11516
16
            NULL, HFILL }
11517
16
        },
11518
16
        { &hf_btmesh_scheduler_status_schedules_schedule_2,
11519
16
            { "Schedule 2", "btmesh.model.scheduler_status.schedules.schedule_2",
11520
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0004,
11521
16
            NULL, HFILL }
11522
16
        },
11523
16
        { &hf_btmesh_scheduler_status_schedules_schedule_3,
11524
16
            { "Schedule 3", "btmesh.model.scheduler_status.schedules.schedule_3",
11525
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0008,
11526
16
            NULL, HFILL }
11527
16
        },
11528
16
        { &hf_btmesh_scheduler_status_schedules_schedule_4,
11529
16
            { "Schedule 4", "btmesh.model.scheduler_status.schedules.schedule_4",
11530
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0010,
11531
16
            NULL, HFILL }
11532
16
        },
11533
16
        { &hf_btmesh_scheduler_status_schedules_schedule_5,
11534
16
            { "Schedule 5", "btmesh.model.scheduler_status.schedules.schedule_5",
11535
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0020,
11536
16
            NULL, HFILL }
11537
16
        },
11538
16
        { &hf_btmesh_scheduler_status_schedules_schedule_6,
11539
16
            { "Schedule 6", "btmesh.model.scheduler_status.schedules.schedule_6",
11540
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0040,
11541
16
            NULL, HFILL }
11542
16
        },
11543
16
        { &hf_btmesh_scheduler_status_schedules_schedule_7,
11544
16
            { "Schedule 7", "btmesh.model.scheduler_status.schedules.schedule_7",
11545
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0080,
11546
16
            NULL, HFILL }
11547
16
        },
11548
16
        { &hf_btmesh_scheduler_status_schedules_schedule_8,
11549
16
            { "Schedule 8", "btmesh.model.scheduler_status.schedules.schedule_8",
11550
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0100,
11551
16
            NULL, HFILL }
11552
16
        },
11553
16
        { &hf_btmesh_scheduler_status_schedules_schedule_9,
11554
16
            { "Schedule 9", "btmesh.model.scheduler_status.schedules.schedule_9",
11555
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0200,
11556
16
            NULL, HFILL }
11557
16
        },
11558
16
        { &hf_btmesh_scheduler_status_schedules_schedule_10,
11559
16
            { "Schedule 10", "btmesh.model.scheduler_status.schedules.schedule_10",
11560
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0400,
11561
16
            NULL, HFILL }
11562
16
        },
11563
16
        { &hf_btmesh_scheduler_status_schedules_schedule_11,
11564
16
            { "Schedule 11", "btmesh.model.scheduler_status.schedules.schedule_11",
11565
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x0800,
11566
16
            NULL, HFILL }
11567
16
        },
11568
16
        { &hf_btmesh_scheduler_status_schedules_schedule_12,
11569
16
            { "Schedule 12", "btmesh.model.scheduler_status.schedules.schedule_12",
11570
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x1000,
11571
16
            NULL, HFILL }
11572
16
        },
11573
16
        { &hf_btmesh_scheduler_status_schedules_schedule_13,
11574
16
            { "Schedule 13", "btmesh.model.scheduler_status.schedules.schedule_13",
11575
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x2000,
11576
16
            NULL, HFILL }
11577
16
        },
11578
16
        { &hf_btmesh_scheduler_status_schedules_schedule_14,
11579
16
            { "Schedule 14", "btmesh.model.scheduler_status.schedules.schedule_14",
11580
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x4000,
11581
16
            NULL, HFILL }
11582
16
        },
11583
16
        { &hf_btmesh_scheduler_status_schedules_schedule_15,
11584
16
            { "Schedule 15", "btmesh.model.scheduler_status.schedules.schedule_15",
11585
16
            FT_UINT16, BASE_NONE, VALS(btmesh_defined_or_dash_vals), 0x8000,
11586
16
            NULL, HFILL }
11587
16
        },
11588
16
        { &hf_btmesh_light_lc_property_set_light_lc_property_id,
11589
16
            { "Light LC Property ID", "btmesh.model.light_lc_property_set.light_lc_property_id",
11590
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11591
16
            NULL, HFILL }
11592
16
        },
11593
16
        { &hf_btmesh_light_lc_property_set_light_lc_property_value,
11594
16
            { "Light LC Property Value", "btmesh.model.light_lc_property_set.light_lc_property_value",
11595
16
           FT_BYTES, BASE_NONE, NULL, 0x0,
11596
16
            NULL, HFILL }
11597
16
        },
11598
16
        { &hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_id,
11599
16
            { "Light LC Property ID", "btmesh.model.light_lc_property_set_unacknowledged.light_lc_property_id",
11600
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11601
16
            NULL, HFILL }
11602
16
        },
11603
16
        { &hf_btmesh_light_lc_property_set_unacknowledged_light_lc_property_value,
11604
16
            { "Light LC Property Value", "btmesh.model.light_lc_property_set_unacknowledged.light_lc_property_value",
11605
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
11606
16
            NULL, HFILL }
11607
16
        },
11608
16
        { &hf_btmesh_light_lc_property_status_light_lc_property_id,
11609
16
            { "Light LC Property ID", "btmesh.model.light_lc_property_status.light_lc_property_id",
11610
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
11611
16
            NULL, HFILL }
11612
16
        },
11613
16
        { &hf_btmesh_light_lc_property_status_light_lc_property_value,
11614
16
            { "Light LC Property Value", "btmesh.model.light_lc_property_status.light_lc_property_value",
11615
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
11616
16
            NULL, HFILL }
11617
16
        },
11618
16
        { &hf_btmesh_light_lightness_set_lightness,
11619
16
            { "Lightness", "btmesh.model.light_lightness_set.lightness",
11620
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11621
16
            NULL, HFILL }
11622
16
        },
11623
16
        { &hf_btmesh_light_lightness_set_tid,
11624
16
            { "TID", "btmesh.model.light_lightness_set.tid",
11625
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11626
16
            NULL, HFILL }
11627
16
        },
11628
16
        { &hf_btmesh_light_lightness_set_transition_time,
11629
16
            { "Transition Time", "btmesh.model.light_lightness_set.transition_time",
11630
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11631
16
            NULL, HFILL }
11632
16
        },
11633
16
        { &hf_btmesh_light_lightness_set_transition_time_resolution,
11634
16
            { "Step Resolution", "btmesh.model.light_lightness_set.transition_time.resolution",
11635
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11636
16
            NULL, HFILL }
11637
16
        },
11638
16
        { &hf_btmesh_light_lightness_set_transition_time_steps,
11639
16
            { "Number of Steps", "btmesh.model.light_lightness_set.transition_time.steps",
11640
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11641
16
            NULL, HFILL }
11642
16
        },
11643
16
        { &hf_btmesh_light_lightness_set_delay,
11644
16
            { "Delay", "btmesh.model.light_lightness_set.delay",
11645
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11646
16
            NULL, HFILL }
11647
16
        },
11648
16
        { &hf_btmesh_light_lightness_set_unacknowledged_lightness,
11649
16
            { "Lightness", "btmesh.model.light_lightness_set_unacknowledged.lightness",
11650
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11651
16
            NULL, HFILL }
11652
16
        },
11653
16
        { &hf_btmesh_light_lightness_set_unacknowledged_tid,
11654
16
            { "TID", "btmesh.model.light_lightness_set_unacknowledged.tid",
11655
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11656
16
            NULL, HFILL }
11657
16
        },
11658
16
        { &hf_btmesh_light_lightness_set_unacknowledged_transition_time,
11659
16
            { "Transition Time", "btmesh.model.light_lightness_set_unacknowledged.transition_time",
11660
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11661
16
            NULL, HFILL }
11662
16
        },
11663
16
        { &hf_btmesh_light_lightness_set_unacknowledged_transition_time_resolution,
11664
16
            { "Step Resolution", "btmesh.model.light_lightness_set_unacknowledged.transition_time.resolution",
11665
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11666
16
            NULL, HFILL }
11667
16
        },
11668
16
        { &hf_btmesh_light_lightness_set_unacknowledged_transition_time_steps,
11669
16
            { "Number of Steps", "btmesh.model.light_lightness_set_unacknowledged.transition_time.steps",
11670
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11671
16
            NULL, HFILL }
11672
16
        },
11673
16
        { &hf_btmesh_light_lightness_set_unacknowledged_delay,
11674
16
            { "Delay", "btmesh.model.light_lightness_set_unacknowledged.delay",
11675
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11676
16
            NULL, HFILL }
11677
16
        },
11678
16
        { &hf_btmesh_light_lightness_status_present_lightness,
11679
16
            { "Present Lightness", "btmesh.model.light_lightness_status.present_lightness",
11680
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11681
16
            NULL, HFILL }
11682
16
        },
11683
16
        { &hf_btmesh_light_lightness_status_target_lightness,
11684
16
            { "Target Lightness", "btmesh.model.light_lightness_status.target_lightness",
11685
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11686
16
            NULL, HFILL }
11687
16
        },
11688
16
        { &hf_btmesh_light_lightness_status_remaining_time,
11689
16
            { "Remaining Time", "btmesh.model.light_lightness_status.remaining_time",
11690
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11691
16
            NULL, HFILL }
11692
16
        },
11693
16
        { &hf_btmesh_light_lightness_status_remaining_time_resolution,
11694
16
            { "Step Resolution", "btmesh.model.light_lightness_status.remaining_time.resolution",
11695
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11696
16
            NULL, HFILL }
11697
16
        },
11698
16
        { &hf_btmesh_light_lightness_status_remaining_time_steps,
11699
16
            { "Number of Steps", "btmesh.model.light_lightness_status.remaining_time.steps",
11700
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11701
16
            NULL, HFILL }
11702
16
        },
11703
16
        { &hf_btmesh_light_lightness_linear_set_lightness,
11704
16
            { "Lightness", "btmesh.model.light_lightness_linear_set.lightness",
11705
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11706
16
            NULL, HFILL }
11707
16
        },
11708
16
        { &hf_btmesh_light_lightness_linear_set_tid,
11709
16
            { "TID", "btmesh.model.light_lightness_linear_set.tid",
11710
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11711
16
            NULL, HFILL }
11712
16
        },
11713
16
        { &hf_btmesh_light_lightness_linear_set_transition_time,
11714
16
            { "Transition Time", "btmesh.model.light_lightness_linear_set.transition_time",
11715
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11716
16
            NULL, HFILL }
11717
16
        },
11718
16
        { &hf_btmesh_light_lightness_linear_set_transition_time_resolution,
11719
16
            { "Step Resolution", "btmesh.model.light_lightness_linear_set.transition_time.resolution",
11720
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11721
16
            NULL, HFILL }
11722
16
        },
11723
16
        { &hf_btmesh_light_lightness_linear_set_transition_time_steps,
11724
16
            { "Number of Steps", "btmesh.model.light_lightness_linear_set.transition_time.steps",
11725
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11726
16
            NULL, HFILL }
11727
16
        },
11728
16
        { &hf_btmesh_light_lightness_linear_set_delay,
11729
16
            { "Delay", "btmesh.model.light_lightness_linear_set.delay",
11730
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11731
16
            NULL, HFILL }
11732
16
        },
11733
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_lightness,
11734
16
            { "Lightness", "btmesh.model.light_lightness_linear_set_unacknowledged.lightness",
11735
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11736
16
            NULL, HFILL }
11737
16
        },
11738
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_tid,
11739
16
            { "TID", "btmesh.model.light_lightness_linear_set_unacknowledged.tid",
11740
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11741
16
            NULL, HFILL }
11742
16
        },
11743
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time,
11744
16
            { "Transition Time", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time",
11745
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11746
16
            NULL, HFILL }
11747
16
        },
11748
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_resolution,
11749
16
            { "Step Resolution", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time.resolution",
11750
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11751
16
            NULL, HFILL }
11752
16
        },
11753
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_transition_time_steps,
11754
16
            { "Number of Steps", "btmesh.model.light_lightness_linear_set_unacknowledged.transition_time.steps",
11755
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11756
16
            NULL, HFILL }
11757
16
        },
11758
16
        { &hf_btmesh_light_lightness_linear_set_unacknowledged_delay,
11759
16
            { "Delay", "btmesh.model.light_lightness_linear_set_unacknowledged.delay",
11760
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11761
16
            NULL, HFILL }
11762
16
        },
11763
16
        { &hf_btmesh_light_lightness_linear_status_present_lightness,
11764
16
            { "Present Lightness", "btmesh.model.light_lightness_linear_status.present_lightness",
11765
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11766
16
            NULL, HFILL }
11767
16
        },
11768
16
        { &hf_btmesh_light_lightness_linear_status_target_lightness,
11769
16
            { "Target Lightness", "btmesh.model.light_lightness_linear_status.target_lightness",
11770
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11771
16
            NULL, HFILL }
11772
16
        },
11773
16
        { &hf_btmesh_light_lightness_linear_status_remaining_time,
11774
16
            { "Remaining Time", "btmesh.model.light_lightness_linear_status.remaining_time",
11775
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11776
16
            NULL, HFILL }
11777
16
        },
11778
16
        { &hf_btmesh_light_lightness_linear_status_remaining_time_resolution,
11779
16
            { "Step Resolution", "btmesh.model.light_lightness_linear_status.remaining_time.resolution",
11780
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11781
16
            NULL, HFILL }
11782
16
        },
11783
16
        { &hf_btmesh_light_lightness_linear_status_remaining_time_steps,
11784
16
            { "Number of Steps", "btmesh.model.light_lightness_linear_status.remaining_time.steps",
11785
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11786
16
            NULL, HFILL }
11787
16
        },
11788
16
        { &hf_btmesh_light_lightness_last_status_lightness,
11789
16
            { "Lightness", "btmesh.model.light_lightness_last_status.lightness",
11790
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11791
16
            NULL, HFILL }
11792
16
        },
11793
16
        { &hf_btmesh_light_lightness_default_status_lightness,
11794
16
            { "Lightness", "btmesh.model.light_lightness_default_status.lightness",
11795
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11796
16
            NULL, HFILL }
11797
16
        },
11798
16
        { &hf_btmesh_light_lightness_range_status_status_code,
11799
16
            { "Status Code", "btmesh.model.light_lightness_range_status.status_code",
11800
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
11801
16
            NULL, HFILL }
11802
16
        },
11803
16
        { &hf_btmesh_light_lightness_range_status_range_min,
11804
16
            { "Range Min", "btmesh.model.light_lightness_range_status.range_min",
11805
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11806
16
            NULL, HFILL }
11807
16
        },
11808
16
        { &hf_btmesh_light_lightness_range_status_range_max,
11809
16
            { "Range Max", "btmesh.model.light_lightness_range_status.range_max",
11810
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11811
16
            NULL, HFILL }
11812
16
        },
11813
16
        { &hf_btmesh_light_lightness_default_set_lightness,
11814
16
            { "Lightness", "btmesh.model.light_lightness_default_set.lightness",
11815
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11816
16
            NULL, HFILL }
11817
16
        },
11818
16
        { &hf_btmesh_light_lightness_default_set_unacknowledged_lightness,
11819
16
            { "Lightness", "btmesh.model.light_lightness_default_set_unacknowledged.lightness",
11820
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_default), 0x0,
11821
16
            NULL, HFILL }
11822
16
        },
11823
16
        { &hf_btmesh_light_lightness_range_set_range_min,
11824
16
            { "Range Min", "btmesh.model.light_lightness_range_set.range_min",
11825
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11826
16
            NULL, HFILL }
11827
16
        },
11828
16
        { &hf_btmesh_light_lightness_range_set_range_max,
11829
16
            { "Range Max", "btmesh.model.light_lightness_range_set.range_max",
11830
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11831
16
            NULL, HFILL }
11832
16
        },
11833
16
        { &hf_btmesh_light_lightness_range_set_unacknowledged_range_min,
11834
16
            { "Range Min", "btmesh.model.light_lightness_range_set_unacknowledged.range_min",
11835
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11836
16
            NULL, HFILL }
11837
16
        },
11838
16
        { &hf_btmesh_light_lightness_range_set_unacknowledged_range_max,
11839
16
            { "Range Max", "btmesh.model.light_lightness_range_set_unacknowledged.range_max",
11840
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_light_lightness_prohibited), 0x0,
11841
16
            NULL, HFILL }
11842
16
        },
11843
16
        { &hf_btmesh_light_ctl_set_ctl_lightness,
11844
16
            { "CTL Lightness", "btmesh.model.light_ctl_set.ctl_lightness",
11845
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11846
16
            NULL, HFILL }
11847
16
        },
11848
16
        { &hf_btmesh_light_ctl_set_ctl_temperature,
11849
16
            { "CTL Temperature", "btmesh.model.light_ctl_set.ctl_temperature",
11850
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11851
16
            NULL, HFILL }
11852
16
        },
11853
16
        { &hf_btmesh_light_ctl_set_ctl_delta_uv,
11854
16
            { "CTL Delta UV", "btmesh.model.light_ctl_set.ctl_delta_uv",
11855
16
            FT_INT16, BASE_DEC, NULL, 0x0,
11856
16
            NULL, HFILL }
11857
16
        },
11858
16
        { &hf_btmesh_light_ctl_set_tid,
11859
16
            { "TID", "btmesh.model.light_ctl_set.tid",
11860
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11861
16
            NULL, HFILL }
11862
16
        },
11863
16
        { &hf_btmesh_light_ctl_set_transition_time,
11864
16
            { "Transition Time", "btmesh.model.light_ctl_set.transition_time",
11865
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11866
16
            NULL, HFILL }
11867
16
        },
11868
16
        { &hf_btmesh_light_ctl_set_transition_time_resolution,
11869
16
            { "Step Resolution", "btmesh.model.light_ctl_set.transition_time.resolution",
11870
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11871
16
            NULL, HFILL }
11872
16
        },
11873
16
        { &hf_btmesh_light_ctl_set_transition_time_steps,
11874
16
            { "Number of Steps", "btmesh.model.light_ctl_set.transition_time.steps",
11875
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11876
16
            NULL, HFILL }
11877
16
        },
11878
16
        { &hf_btmesh_light_ctl_set_delay,
11879
16
            { "Delay", "btmesh.model.light_ctl_set.delay",
11880
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11881
16
            NULL, HFILL }
11882
16
        },
11883
16
        { &hf_btmesh_light_ctl_set_unacknowledged_ctl_lightness,
11884
16
            { "CTL Lightness", "btmesh.model.light_ctl_set_unacknowledged.ctl_lightness",
11885
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11886
16
            NULL, HFILL }
11887
16
        },
11888
16
        { &hf_btmesh_light_ctl_set_unacknowledged_ctl_temperature,
11889
16
            { "CTL Temperature", "btmesh.model.light_ctl_set_unacknowledged.ctl_temperature",
11890
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11891
16
            NULL, HFILL }
11892
16
        },
11893
16
        { &hf_btmesh_light_ctl_set_unacknowledged_ctl_delta_uv,
11894
16
            { "CTL Delta UV", "btmesh.model.light_ctl_set_unacknowledged.ctl_delta_uv",
11895
16
            FT_INT16, BASE_DEC, NULL, 0x0,
11896
16
            NULL, HFILL }
11897
16
        },
11898
16
        { &hf_btmesh_light_ctl_set_unacknowledged_tid,
11899
16
            { "TID", "btmesh.model.light_ctl_set_unacknowledged.tid",
11900
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11901
16
            NULL, HFILL }
11902
16
        },
11903
16
        { &hf_btmesh_light_ctl_set_unacknowledged_transition_time,
11904
16
            { "Transition Time", "btmesh.model.light_ctl_set_unacknowledged.transition_time",
11905
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11906
16
            NULL, HFILL }
11907
16
        },
11908
16
        { &hf_btmesh_light_ctl_set_unacknowledged_transition_time_resolution,
11909
16
            { "Step Resolution", "btmesh.model.light_ctl_set_unacknowledged.transition_time.resolution",
11910
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11911
16
            NULL, HFILL }
11912
16
        },
11913
16
        { &hf_btmesh_light_ctl_set_unacknowledged_transition_time_steps,
11914
16
            { "Number of Steps", "btmesh.model.light_ctl_set_unacknowledged.transition_time.steps",
11915
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11916
16
            NULL, HFILL }
11917
16
        },
11918
16
        { &hf_btmesh_light_ctl_set_unacknowledged_delay,
11919
16
            { "Delay", "btmesh.model.light_ctl_set_unacknowledged.delay",
11920
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
11921
16
            NULL, HFILL }
11922
16
        },
11923
16
        { &hf_btmesh_light_ctl_status_present_ctl_lightness,
11924
16
            { "Present CTL Lightness", "btmesh.model.light_ctl_status.present_ctl_lightness",
11925
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11926
16
            NULL, HFILL }
11927
16
        },
11928
16
        { &hf_btmesh_light_ctl_status_present_ctl_temperature,
11929
16
            { "Present CTL Temperature", "btmesh.model.light_ctl_status.present_ctl_temperature",
11930
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11931
16
            NULL, HFILL }
11932
16
        },
11933
16
        { &hf_btmesh_light_ctl_status_target_ctl_lightness,
11934
16
            { "Target CTL Lightness", "btmesh.model.light_ctl_status.target_ctl_lightness",
11935
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
11936
16
            NULL, HFILL }
11937
16
        },
11938
16
        { &hf_btmesh_light_ctl_status_target_ctl_temperature,
11939
16
            { "Target CTL Temperature", "btmesh.model.light_ctl_status.target_ctl_temperature",
11940
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11941
16
            NULL, HFILL }
11942
16
        },
11943
16
        { &hf_btmesh_light_ctl_status_remaining_time,
11944
16
            { "Remaining Time", "btmesh.model.light_ctl_status.remaining_time",
11945
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11946
16
            NULL, HFILL }
11947
16
        },
11948
16
        { &hf_btmesh_light_ctl_status_remaining_time_resolution,
11949
16
            { "Step Resolution", "btmesh.model.light_ctl_status.remaining_time.resolution",
11950
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11951
16
            NULL, HFILL }
11952
16
        },
11953
16
        { &hf_btmesh_light_ctl_status_remaining_time_steps,
11954
16
            { "Number of Steps", "btmesh.model.light_ctl_status.remaining_time.steps",
11955
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
11956
16
            NULL, HFILL }
11957
16
        },
11958
16
        { &hf_btmesh_light_ctl_temperature_range_status_status_code,
11959
16
            { "Status Code", "btmesh.model.light_ctl_temperature_range_status.status_code",
11960
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
11961
16
            NULL, HFILL }
11962
16
        },
11963
16
        { &hf_btmesh_light_ctl_temperature_range_status_range_min,
11964
16
            { "Range Min", "btmesh.model.light_ctl_temperature_range_status.range_min",
11965
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
11966
16
            NULL, HFILL }
11967
16
        },
11968
16
        { &hf_btmesh_light_ctl_temperature_range_status_range_max,
11969
16
            { "Range Max", "btmesh.model.light_ctl_temperature_range_status.range_max",
11970
16
            FT_UINT16,BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
11971
16
            NULL, HFILL }
11972
16
        },
11973
16
        { &hf_btmesh_light_ctl_temperature_set_ctl_temperature,
11974
16
            { "CTL Temperature", "btmesh.model.light_ctl_temperature_set.ctl_temperature",
11975
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
11976
16
            NULL, HFILL }
11977
16
        },
11978
16
        { &hf_btmesh_light_ctl_temperature_set_ctl_delta_uv,
11979
16
            { "CTL Delta UV", "btmesh.model.light_ctl_temperature_set.ctl_delta_uv",
11980
16
            FT_INT16, BASE_DEC, NULL, 0x0,
11981
16
            NULL, HFILL }
11982
16
        },
11983
16
        { &hf_btmesh_light_ctl_temperature_set_tid,
11984
16
            { "TID", "btmesh.model.light_ctl_temperature_set.tid",
11985
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
11986
16
            NULL, HFILL }
11987
16
        },
11988
16
        { &hf_btmesh_light_ctl_temperature_set_transition_time,
11989
16
            { "Transition Time", "btmesh.model.light_ctl_temperature_set.transition_time",
11990
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
11991
16
            NULL, HFILL }
11992
16
        },
11993
16
        { &hf_btmesh_light_ctl_temperature_set_transition_time_resolution,
11994
16
            { "Step Resolution", "btmesh.model.light_ctl_temperature_set.transition_time.resolution",
11995
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
11996
16
            NULL, HFILL }
11997
16
        },
11998
16
        { &hf_btmesh_light_ctl_temperature_set_transition_time_steps,
11999
16
            { "Number of Steps", "btmesh.model.light_ctl_temperature_set.transition_time.steps",
12000
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12001
16
            NULL, HFILL }
12002
16
        },
12003
16
        { &hf_btmesh_light_ctl_temperature_set_delay,
12004
16
            { "Delay", "btmesh.model.light_ctl_temperature_set.delay",
12005
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12006
16
            NULL, HFILL }
12007
16
        },
12008
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_temperature,
12009
16
            { "CTL Temperature", "btmesh.model.light_ctl_temperature_set_unacknowledged.ctl_temperature",
12010
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12011
16
            NULL, HFILL }
12012
16
        },
12013
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_ctl_delta_uv,
12014
16
            { "CTL Delta UV", "btmesh.model.light_ctl_temperature_set_unacknowledged.ctl_delta_uv",
12015
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12016
16
            NULL, HFILL }
12017
16
        },
12018
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_tid,
12019
16
            { "TID", "btmesh.model.light_ctl_temperature_set_unacknowledged.tid",
12020
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12021
16
            NULL, HFILL }
12022
16
        },
12023
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time,
12024
16
            { "Transition Time", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time",
12025
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12026
16
            NULL, HFILL }
12027
16
        },
12028
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_resolution,
12029
16
            { "Step Resolution", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time.resolution",
12030
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12031
16
            NULL, HFILL }
12032
16
        },
12033
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_transition_time_steps,
12034
16
            { "Number of Steps", "btmesh.model.light_ctl_temperature_set_unacknowledged.transition_time.steps",
12035
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12036
16
            NULL, HFILL }
12037
16
        },
12038
16
        { &hf_btmesh_light_ctl_temperature_set_unacknowledged_delay,
12039
16
            { "Delay", "btmesh.model.light_ctl_temperature_set_unacknowledged.delay",
12040
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12041
16
            NULL, HFILL }
12042
16
        },
12043
16
        { &hf_btmesh_light_ctl_temperature_status_present_ctl_temperature,
12044
16
            { "Present CTL Temperature", "btmesh.model.light_ctl_temperature_status.present_ctl_temperature",
12045
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12046
16
            NULL, HFILL }
12047
16
        },
12048
16
        { &hf_btmesh_light_ctl_temperature_status_present_ctl_delta_uv,
12049
16
            { "Present CTL Delta UV", "btmesh.model.light_ctl_temperature_status.present_ctl_delta_uv",
12050
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12051
16
            NULL, HFILL }
12052
16
        },
12053
16
        { &hf_btmesh_light_ctl_temperature_status_target_ctl_temperature,
12054
16
            { "Target CTL Temperature", "btmesh.model.light_ctl_temperature_status.target_ctl_temperature",
12055
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12056
16
            NULL, HFILL }
12057
16
        },
12058
16
        { &hf_btmesh_light_ctl_temperature_status_target_ctl_delta_uv,
12059
16
            { "Target CTL Delta UV", "btmesh.model.light_ctl_temperature_status.target_ctl_delta_uv",
12060
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12061
16
            NULL, HFILL }
12062
16
        },
12063
16
        { &hf_btmesh_light_ctl_temperature_status_remaining_time,
12064
16
            { "Remaining Time", "btmesh.model.light_ctl_temperature_status.remaining_time",
12065
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12066
16
            NULL, HFILL }
12067
16
        },
12068
16
        { &hf_btmesh_light_ctl_temperature_status_remaining_time_resolution,
12069
16
            { "Step Resolution", "btmesh.model.light_ctl_temperature_status.remaining_time.resolution",
12070
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12071
16
            NULL, HFILL }
12072
16
        },
12073
16
        { &hf_btmesh_light_ctl_temperature_status_remaining_time_steps,
12074
16
            { "Number of Steps", "btmesh.model.light_ctl_temperature_status.remaining_time.steps",
12075
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12076
16
            NULL, HFILL }
12077
16
        },
12078
16
        { &hf_btmesh_light_ctl_default_status_lightness,
12079
16
            { "Lightness", "btmesh.model.light_ctl_default_status.lightness",
12080
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12081
16
            NULL, HFILL }
12082
16
        },
12083
16
        { &hf_btmesh_light_ctl_default_status_temperature,
12084
16
            { "Temperature", "btmesh.model.light_ctl_default_status.temperature",
12085
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12086
16
            NULL, HFILL }
12087
16
        },
12088
16
        { &hf_btmesh_light_ctl_default_status_delta_uv,
12089
16
            { "Delta UV", "btmesh.model.light_ctl_default_status.delta_uv",
12090
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12091
16
            NULL, HFILL }
12092
16
        },
12093
16
        { &hf_btmesh_light_ctl_default_set_lightness,
12094
16
            { "Lightness", "btmesh.model.light_ctl_default_set.lightness",
12095
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12096
16
            NULL, HFILL }
12097
16
        },
12098
16
        { &hf_btmesh_light_ctl_default_set_temperature,
12099
16
            { "Temperature", "btmesh.model.light_ctl_default_set.temperature",
12100
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12101
16
            NULL, HFILL }
12102
16
        },
12103
16
        { &hf_btmesh_light_ctl_default_set_delta_uv,
12104
16
            { "Delta UV", "btmesh.model.light_ctl_default_set.delta_uv",
12105
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12106
16
            NULL, HFILL }
12107
16
        },
12108
16
        { &hf_btmesh_light_ctl_default_set_unacknowledged_lightness,
12109
16
            { "Lightness", "btmesh.model.light_ctl_default_set_unacknowledged.lightness",
12110
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12111
16
            NULL, HFILL }
12112
16
        },
12113
16
        { &hf_btmesh_light_ctl_default_set_unacknowledged_temperature,
12114
16
            { "Temperature", "btmesh.model.light_ctl_default_set_unacknowledged.temperature",
12115
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin), 0x0,
12116
16
            NULL, HFILL }
12117
16
        },
12118
16
        { &hf_btmesh_light_ctl_default_set_unacknowledged_delta_uv,
12119
16
            { "Delta UV", "btmesh.model.light_ctl_default_set_unacknowledged.delta_uv",
12120
16
            FT_INT16, BASE_DEC, NULL, 0x0,
12121
16
            NULL, HFILL }
12122
16
        },
12123
16
        { &hf_btmesh_light_ctl_temperature_range_set_range_min,
12124
16
            { "Range Min", "btmesh.model.light_ctl_temperature_range_set.range_min",
12125
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12126
16
            NULL, HFILL }
12127
16
        },
12128
16
        { &hf_btmesh_light_ctl_temperature_range_set_range_max,
12129
16
            { "Range Max", "btmesh.model.light_ctl_temperature_range_set.range_max",
12130
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12131
16
            NULL, HFILL }
12132
16
        },
12133
16
        { &hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_min,
12134
16
            { "Range Min", "btmesh.model.light_ctl_temperature_range_set_unacknowledged.range_min",
12135
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12136
16
            NULL, HFILL }
12137
16
        },
12138
16
        { &hf_btmesh_light_ctl_temperature_range_set_unacknowledged_range_max,
12139
16
            { "Range Max", "btmesh.model.light_ctl_temperature_range_set_unacknowledged.range_max",
12140
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_temperature_kelvin_unknown), 0x0,
12141
16
            NULL, HFILL }
12142
16
        },
12143
16
        { &hf_btmesh_light_hsl_hue_set_hue,
12144
16
            { "Hue", "btmesh.model.light_hsl_hue_set.hue",
12145
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12146
16
            NULL, HFILL }
12147
16
        },
12148
16
        { &hf_btmesh_light_hsl_hue_set_tid,
12149
16
            { "TID", "btmesh.model.light_hsl_hue_set.tid",
12150
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12151
16
            NULL, HFILL }
12152
16
        },
12153
16
        { &hf_btmesh_light_hsl_hue_set_transition_time,
12154
16
            { "Transition Time", "btmesh.model.light_hsl_hue_set.transition_time",
12155
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12156
16
            NULL, HFILL }
12157
16
        },
12158
16
        { &hf_btmesh_light_hsl_hue_set_transition_time_resolution,
12159
16
            { "Step Resolution", "btmesh.model.light_hsl_hue_set.transition_time.resolution",
12160
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12161
16
            NULL, HFILL }
12162
16
        },
12163
16
        { &hf_btmesh_light_hsl_hue_set_transition_time_steps,
12164
16
            { "Number of Steps", "btmesh.model.light_hsl_hue_set.transition_time.steps",
12165
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12166
16
            NULL, HFILL }
12167
16
        },
12168
16
        { &hf_btmesh_light_hsl_hue_set_delay,
12169
16
            { "Delay", "btmesh.model.light_hsl_hue_set.delay",
12170
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12171
16
            NULL, HFILL }
12172
16
        },
12173
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_hue,
12174
16
            { "Hue", "btmesh.model.light_hsl_hue_set_unacknowledged.hue",
12175
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12176
16
            NULL, HFILL }
12177
16
        },
12178
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_tid,
12179
16
            { "TID", "btmesh.model.light_hsl_hue_set_unacknowledged.tid",
12180
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12181
16
            NULL, HFILL }
12182
16
        },
12183
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time,
12184
16
            { "Transition Time", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time",
12185
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12186
16
            NULL, HFILL }
12187
16
        },
12188
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_resolution,
12189
16
            { "Step Resolution", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time.resolution",
12190
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12191
16
            NULL, HFILL }
12192
16
        },
12193
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_transition_time_steps,
12194
16
            { "Number of Steps", "btmesh.model.light_hsl_hue_set_unacknowledged.transition_time.steps",
12195
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12196
16
            NULL, HFILL }
12197
16
        },
12198
16
        { &hf_btmesh_light_hsl_hue_set_unacknowledged_delay,
12199
16
            { "Delay", "btmesh.model.light_hsl_hue_set_unacknowledged.delay",
12200
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12201
16
            NULL, HFILL }
12202
16
        },
12203
16
        { &hf_btmesh_light_hsl_hue_status_present_hue,
12204
16
            { "Present Hue", "btmesh.model.light_hsl_hue_status.present_hue",
12205
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12206
16
            NULL, HFILL }
12207
16
        },
12208
16
        { &hf_btmesh_light_hsl_hue_status_target_hue,
12209
16
            { "Target Hue", "btmesh.model.light_hsl_hue_status.target_hue",
12210
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12211
16
            NULL, HFILL }
12212
16
        },
12213
16
        { &hf_btmesh_light_hsl_hue_status_remaining_time,
12214
16
            { "Remaining Time", "btmesh.model.light_hsl_hue_status.remaining_time",
12215
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12216
16
            NULL, HFILL }
12217
16
        },
12218
16
        { &hf_btmesh_light_hsl_hue_status_remaining_time_resolution,
12219
16
            { "Step Resolution", "btmesh.model.light_hsl_hue_status.remaining_time.resolution",
12220
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12221
16
            NULL, HFILL }
12222
16
        },
12223
16
        { &hf_btmesh_light_hsl_hue_status_remaining_time_steps,
12224
16
            { "Number of Steps", "btmesh.model.light_hsl_hue_status.remaining_time.steps",
12225
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12226
16
            NULL, HFILL }
12227
16
        },
12228
16
        { &hf_btmesh_light_hsl_saturation_set_saturation,
12229
16
            { "Saturation", "btmesh.model.light_hsl_saturation_set.saturation",
12230
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12231
16
            NULL, HFILL }
12232
16
        },
12233
16
        { &hf_btmesh_light_hsl_saturation_set_tid,
12234
16
            { "TID", "btmesh.model.light_hsl_saturation_set.tid",
12235
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12236
16
            NULL, HFILL }
12237
16
        },
12238
16
        { &hf_btmesh_light_hsl_saturation_set_transition_time,
12239
16
            { "Transition Time", "btmesh.model.light_hsl_saturation_set.transition_time",
12240
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12241
16
            NULL, HFILL }
12242
16
        },
12243
16
        { &hf_btmesh_light_hsl_saturation_set_transition_time_resolution,
12244
16
            { "Step Resolution", "btmesh.model.light_hsl_saturation_set.transition_time.resolution",
12245
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12246
16
            NULL, HFILL }
12247
16
        },
12248
16
        { &hf_btmesh_light_hsl_saturation_set_transition_time_steps,
12249
16
            { "Number of Steps", "btmesh.model.light_hsl_saturation_set.transition_time.steps",
12250
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12251
16
            NULL, HFILL }
12252
16
        },
12253
16
        { &hf_btmesh_light_hsl_saturation_set_delay,
12254
16
            { "Delay", "btmesh.model.light_hsl_saturation_set.delay",
12255
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12256
16
            NULL, HFILL }
12257
16
        },
12258
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_saturation,
12259
16
            { "Saturation", "btmesh.model.light_hsl_saturation_set_unacknowledged.saturation",
12260
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12261
16
            NULL, HFILL }
12262
16
        },
12263
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_tid,
12264
16
            { "TID", "btmesh.model.light_hsl_saturation_set_unacknowledged.tid",
12265
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12266
16
            NULL, HFILL }
12267
16
        },
12268
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time,
12269
16
            { "Transition Time", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time",
12270
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12271
16
            NULL, HFILL }
12272
16
        },
12273
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_resolution,
12274
16
            { "Step Resolution", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time.resolution",
12275
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12276
16
            NULL, HFILL }
12277
16
        },
12278
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_transition_time_steps,
12279
16
            { "Number of Steps", "btmesh.model.light_hsl_saturation_set_unacknowledged.transition_time.steps",
12280
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12281
16
            NULL, HFILL }
12282
16
        },
12283
16
        { &hf_btmesh_light_hsl_saturation_set_unacknowledged_delay,
12284
16
            { "Delay", "btmesh.model.light_hsl_saturation_set_unacknowledged.delay",
12285
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12286
16
            NULL, HFILL }
12287
16
        },
12288
16
        { &hf_btmesh_light_hsl_saturation_status_present_saturation,
12289
16
            { "Present Saturation", "btmesh.model.light_hsl_saturation_status.present_saturation",
12290
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12291
16
            NULL, HFILL }
12292
16
        },
12293
16
        { &hf_btmesh_light_hsl_saturation_status_target_saturation,
12294
16
            { "Target Saturation", "btmesh.model.light_hsl_saturation_status.target_saturation",
12295
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12296
16
            NULL, HFILL }
12297
16
        },
12298
16
        { &hf_btmesh_light_hsl_saturation_status_remaining_time,
12299
16
            { "Remaining Time", "btmesh.model.light_hsl_saturation_status.remaining_time",
12300
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12301
16
            NULL, HFILL }
12302
16
        },
12303
16
        { &hf_btmesh_light_hsl_saturation_status_remaining_time_resolution,
12304
16
            { "Step Resolution", "btmesh.model.light_hsl_saturation_status.remaining_time.resolution",
12305
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12306
16
            NULL, HFILL }
12307
16
        },
12308
16
        { &hf_btmesh_light_hsl_saturation_status_remaining_time_steps,
12309
16
            { "Number of Steps", "btmesh.model.light_hsl_saturation_status.remaining_time.steps",
12310
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12311
16
            NULL, HFILL }
12312
16
        },
12313
16
        { &hf_btmesh_light_hsl_set_hsl_lightness,
12314
16
            { "HSL Lightness", "btmesh.model.light_hsl_set.hsl_lightness",
12315
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12316
16
            NULL, HFILL }
12317
16
        },
12318
16
        { &hf_btmesh_light_hsl_set_hsl_hue,
12319
16
            { "HSL Hue", "btmesh.model.light_hsl_set.hsl_hue",
12320
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12321
16
            NULL, HFILL }
12322
16
        },
12323
16
        { &hf_btmesh_light_hsl_set_hsl_saturation,
12324
16
            { "HSL Saturation", "btmesh.model.light_hsl_set.hsl_saturation",
12325
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12326
16
            NULL, HFILL }
12327
16
        },
12328
16
        { &hf_btmesh_light_hsl_set_tid,
12329
16
            { "TID", "btmesh.model.light_hsl_set.tid",
12330
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12331
16
            NULL, HFILL }
12332
16
        },
12333
16
        { &hf_btmesh_light_hsl_set_transition_time,
12334
16
            { "Transition Time", "btmesh.model.light_hsl_set.transition_time",
12335
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12336
16
            NULL, HFILL }
12337
16
        },
12338
16
        { &hf_btmesh_light_hsl_set_transition_time_resolution,
12339
16
            { "Step Resolution", "btmesh.model.light_hsl_set.transition_time.resolution",
12340
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12341
16
            NULL, HFILL }
12342
16
        },
12343
16
        { &hf_btmesh_light_hsl_set_transition_time_steps,
12344
16
            { "Number of Steps", "btmesh.model.light_hsl_set.transition_time.steps",
12345
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12346
16
            NULL, HFILL }
12347
16
        },
12348
16
        { &hf_btmesh_light_hsl_set_delay,
12349
16
            { "Delay", "btmesh.model.light_hsl_set.delay",
12350
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12351
16
            NULL, HFILL }
12352
16
        },
12353
16
        { &hf_btmesh_light_hsl_set_unacknowledged_hsl_lightness,
12354
16
            { "HSL Lightness", "btmesh.model.light_hsl_set_unacknowledged.hsl_lightness",
12355
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12356
16
            NULL, HFILL }
12357
16
        },
12358
16
        { &hf_btmesh_light_hsl_set_unacknowledged_hsl_hue,
12359
16
            { "HSL Hue", "btmesh.model.light_hsl_set_unacknowledged.hsl_hue",
12360
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12361
16
            NULL, HFILL }
12362
16
        },
12363
16
        { &hf_btmesh_light_hsl_set_unacknowledged_hsl_saturation,
12364
16
            { "HSL Saturation", "btmesh.model.light_hsl_set_unacknowledged.hsl_saturation",
12365
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12366
16
            NULL, HFILL }
12367
16
        },
12368
16
        { &hf_btmesh_light_hsl_set_unacknowledged_tid,
12369
16
            { "TID", "btmesh.model.light_hsl_set_unacknowledged.tid",
12370
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12371
16
            NULL, HFILL }
12372
16
        },
12373
16
        { &hf_btmesh_light_hsl_set_unacknowledged_transition_time,
12374
16
            { "Transition Time", "btmesh.model.light_hsl_set_unacknowledged.transition_time",
12375
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12376
16
            NULL, HFILL }
12377
16
        },
12378
16
        { &hf_btmesh_light_hsl_set_unacknowledged_transition_time_resolution,
12379
16
            { "Step Resolution", "btmesh.model.light_hsl_set_unacknowledged.transition_time.resolution",
12380
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12381
16
            NULL, HFILL }
12382
16
        },
12383
16
        { &hf_btmesh_light_hsl_set_unacknowledged_transition_time_steps,
12384
16
            { "Number of Steps", "btmesh.model.light_hsl_set_unacknowledged.transition_time.steps",
12385
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12386
16
            NULL, HFILL }
12387
16
        },
12388
16
        { &hf_btmesh_light_hsl_set_unacknowledged_delay,
12389
16
            { "Delay", "btmesh.model.light_hsl_set_unacknowledged.delay",
12390
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12391
16
            NULL, HFILL }
12392
16
        },
12393
16
        { &hf_btmesh_light_hsl_status_hsl_lightness,
12394
16
            { "HSL Lightness", "btmesh.model.light_hsl_status.hsl_lightness",
12395
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12396
16
            NULL, HFILL }
12397
16
        },
12398
16
        { &hf_btmesh_light_hsl_status_hsl_hue,
12399
16
            { "HSL Hue", "btmesh.model.light_hsl_status.hsl_hue",
12400
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12401
16
            NULL, HFILL }
12402
16
        },
12403
16
        { &hf_btmesh_light_hsl_status_hsl_saturation,
12404
16
            { "HSL Saturation", "btmesh.model.light_hsl_status.hsl_saturation",
12405
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12406
16
            NULL, HFILL }
12407
16
        },
12408
16
        { &hf_btmesh_light_hsl_status_remaining_time,
12409
16
            { "Remaining Time", "btmesh.model.light_hsl_status.remaining_time",
12410
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12411
16
            NULL, HFILL }
12412
16
        },
12413
16
        { &hf_btmesh_light_hsl_status_remaining_time_resolution,
12414
16
            { "Step Resolution", "btmesh.model.light_hsl_status.remaining_time.resolution",
12415
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12416
16
            NULL, HFILL }
12417
16
        },
12418
16
        { &hf_btmesh_light_hsl_status_remaining_time_steps,
12419
16
            { "Number of Steps", "btmesh.model.light_hsl_status.remaining_time.steps",
12420
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12421
16
            NULL, HFILL }
12422
16
        },
12423
16
        { &hf_btmesh_light_hsl_target_status_hsl_lightness_target,
12424
16
            { "HSL Lightness Target", "btmesh.model.light_hsl_target_status.hsl_lightness_target",
12425
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12426
16
            NULL, HFILL }
12427
16
        },
12428
16
        { &hf_btmesh_light_hsl_target_status_hsl_hue_target,
12429
16
            { "HSL Hue Target", "btmesh.model.light_hsl_target_status.hsl_hue_target",
12430
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12431
16
            NULL, HFILL }
12432
16
        },
12433
16
        { &hf_btmesh_light_hsl_target_status_hsl_saturation_target,
12434
16
            { "HSL Saturation Target", "btmesh.model.light_hsl_target_status.hsl_saturation_target",
12435
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12436
16
            NULL, HFILL }
12437
16
        },
12438
16
        { &hf_btmesh_light_hsl_target_status_remaining_time,
12439
16
            { "Remaining Time", "btmesh.model.light_hsl_target_status.remaining_time",
12440
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12441
16
            NULL, HFILL }
12442
16
        },
12443
16
        { &hf_btmesh_light_hsl_target_status_remaining_time_resolution,
12444
16
            { "Step Resolution", "btmesh.model.light_hsl_target_status.remaining_time.resolution",
12445
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12446
16
            NULL, HFILL }
12447
16
        },
12448
16
        { &hf_btmesh_light_hsl_target_status_remaining_time_steps,
12449
16
            { "Number of Steps", "btmesh.model.light_hsl_target_status.remaining_time.steps",
12450
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12451
16
            NULL, HFILL }
12452
16
        },
12453
16
        { &hf_btmesh_light_hsl_default_status_lightness,
12454
16
            { "Lightness", "btmesh.model.light_hsl_default_status.lightness",
12455
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12456
16
            NULL, HFILL }
12457
16
        },
12458
16
        { &hf_btmesh_light_hsl_default_status_hue,
12459
16
            { "Hue", "btmesh.model.light_hsl_default_status.hue",
12460
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12461
16
            NULL, HFILL }
12462
16
        },
12463
16
        { &hf_btmesh_light_hsl_default_status_saturation,
12464
16
            { "Saturation", "btmesh.model.light_hsl_default_status.saturation",
12465
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12466
16
            NULL, HFILL }
12467
16
        },
12468
16
        { &hf_btmesh_light_hsl_range_status_status_code,
12469
16
            { "Status Code", "btmesh.model.light_hsl_range_status.status_code",
12470
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
12471
16
            NULL, HFILL }
12472
16
        },
12473
16
        { &hf_btmesh_light_hsl_range_status_hue_range_min,
12474
16
            { "Hue Range Min", "btmesh.model.light_hsl_range_status.hue_range_min",
12475
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12476
16
            NULL, HFILL }
12477
16
        },
12478
16
        { &hf_btmesh_light_hsl_range_status_hue_range_max,
12479
16
            { "Hue Range Max", "btmesh.model.light_hsl_range_status.hue_range_max",
12480
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12481
16
            NULL, HFILL }
12482
16
        },
12483
16
        { &hf_btmesh_light_hsl_range_status_saturation_range_min,
12484
16
            { "Saturation Range Min", "btmesh.model.light_hsl_range_status.saturation_range_min",
12485
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12486
16
            NULL, HFILL }
12487
16
        },
12488
16
        { &hf_btmesh_light_hsl_range_status_saturation_range_max,
12489
16
            { "Saturation Range Max", "btmesh.model.light_hsl_range_status.saturation_range_max",
12490
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12491
16
            NULL, HFILL }
12492
16
        },
12493
16
        { &hf_btmesh_light_hsl_default_set_lightness,
12494
16
            { "Lightness", "btmesh.model.light_hsl_default_set.lightness",
12495
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12496
16
            NULL, HFILL }
12497
16
        },
12498
16
        { &hf_btmesh_light_hsl_default_set_hue,
12499
16
            { "Hue", "btmesh.model.light_hsl_default_set.hue",
12500
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12501
16
            NULL, HFILL }
12502
16
        },
12503
16
        { &hf_btmesh_light_hsl_default_set_saturation,
12504
16
            { "Saturation", "btmesh.model.light_hsl_default_set.saturation",
12505
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12506
16
            NULL, HFILL }
12507
16
        },
12508
16
        { &hf_btmesh_light_hsl_default_set_unacknowledged_lightness,
12509
16
            { "Lightness", "btmesh.model.light_hsl_default_set_unacknowledged.lightness",
12510
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12511
16
            NULL, HFILL }
12512
16
        },
12513
16
        { &hf_btmesh_light_hsl_default_set_unacknowledged_hue,
12514
16
            { "Hue", "btmesh.model.light_hsl_default_set_unacknowledged.hue",
12515
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12516
16
            NULL, HFILL }
12517
16
        },
12518
16
        { &hf_btmesh_light_hsl_default_set_unacknowledged_saturation,
12519
16
            { "Saturation", "btmesh.model.light_hsl_default_set_unacknowledged.saturation",
12520
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12521
16
            NULL, HFILL }
12522
16
        },
12523
16
        { &hf_btmesh_light_hsl_range_set_hue_range_min,
12524
16
            { "Hue Range Min", "btmesh.model.light_hsl_range_set.hue_range_min",
12525
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12526
16
            NULL, HFILL }
12527
16
        },
12528
16
        { &hf_btmesh_light_hsl_range_set_hue_range_max,
12529
16
            { "Hue Range Max", "btmesh.model.light_hsl_range_set.hue_range_max",
12530
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12531
16
            NULL, HFILL }
12532
16
        },
12533
16
        { &hf_btmesh_light_hsl_range_set_saturation_range_min,
12534
16
            { "Saturation Range Min", "btmesh.model.light_hsl_range_set.saturation_range_min",
12535
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12536
16
            NULL, HFILL }
12537
16
        },
12538
16
        { &hf_btmesh_light_hsl_range_set_saturation_range_max,
12539
16
            { "Saturation Range Max", "btmesh.model.light_hsl_range_set.saturation_range_max",
12540
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12541
16
            NULL, HFILL }
12542
16
        },
12543
16
        { &hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_min,
12544
16
            { "Hue Range Min", "btmesh.model.light_hsl_range_set_unacknowledged.hue_range_min",
12545
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12546
16
            NULL, HFILL }
12547
16
        },
12548
16
        { &hf_btmesh_light_hsl_range_set_unacknowledged_hue_range_max,
12549
16
            { "Hue Range Max", "btmesh.model.light_hsl_range_set_unacknowledged.hue_range_max",
12550
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_hsl_hue), 0x0,
12551
16
            NULL, HFILL }
12552
16
        },
12553
16
        { &hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_min,
12554
16
            { "Saturation Range Min", "btmesh.model.light_hsl_range_set_unacknowledged.saturation_range_min",
12555
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12556
16
            NULL, HFILL }
12557
16
        },
12558
16
        { &hf_btmesh_light_hsl_range_set_unacknowledged_saturation_range_max,
12559
16
            { "Saturation Range Max", "btmesh.model.light_hsl_range_set_unacknowledged.saturation_range_max",
12560
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12561
16
            NULL, HFILL }
12562
16
        },
12563
16
        { &hf_btmesh_light_xyl_set_xyl_lightness,
12564
16
            { "xyL Lightness", "btmesh.model.light_xyl_set.xyl_lightness",
12565
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12566
16
            NULL, HFILL }
12567
16
        },
12568
16
        { &hf_btmesh_light_xyl_set_xyl_x,
12569
16
            { "xyL x", "btmesh.model.light_xyl_set.xyl_x",
12570
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12571
16
            NULL, HFILL }
12572
16
        },
12573
16
        { &hf_btmesh_light_xyl_set_xyl_y,
12574
16
            { "xyL y", "btmesh.model.light_xyl_set.xyl_y",
12575
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12576
16
            NULL, HFILL }
12577
16
        },
12578
16
        { &hf_btmesh_light_xyl_set_tid,
12579
16
            { "TID", "btmesh.model.light_xyl_set.tid",
12580
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12581
16
            NULL, HFILL }
12582
16
        },
12583
16
        { &hf_btmesh_light_xyl_set_transition_time,
12584
16
            { "Transition Time", "btmesh.model.light_xyl_set.transition_time",
12585
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12586
16
            NULL, HFILL }
12587
16
        },
12588
16
        { &hf_btmesh_light_xyl_set_transition_time_resolution,
12589
16
            { "Step Resolution", "btmesh.model.light_xyl_set.transition_time.resolution",
12590
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12591
16
            NULL, HFILL }
12592
16
        },
12593
16
        { &hf_btmesh_light_xyl_set_transition_time_steps,
12594
16
            { "Number of Steps", "btmesh.model.light_xyl_set.transition_time.steps",
12595
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12596
16
            NULL, HFILL }
12597
16
        },
12598
16
        { &hf_btmesh_light_xyl_set_delay,
12599
16
            { "Delay", "btmesh.model.light_xyl_set.delay",
12600
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12601
16
            NULL, HFILL }
12602
16
        },
12603
16
        { &hf_btmesh_light_xyl_set_unacknowledged_xyl_lightness,
12604
16
            { "xyL Lightness", "btmesh.model.light_xyl_set_unacknowledged.xyl_lightness",
12605
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12606
16
            NULL, HFILL }
12607
16
        },
12608
16
        { &hf_btmesh_light_xyl_set_unacknowledged_xyl_x,
12609
16
            { "xyL x", "btmesh.model.light_xyl_set_unacknowledged.xyl_x",
12610
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12611
16
            NULL, HFILL }
12612
16
        },
12613
16
        { &hf_btmesh_light_xyl_set_unacknowledged_xyl_y,
12614
16
            { "xyL y", "btmesh.model.light_xyl_set_unacknowledged.xyl_y",
12615
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12616
16
            NULL, HFILL }
12617
16
        },
12618
16
        { &hf_btmesh_light_xyl_set_unacknowledged_tid,
12619
16
            { "TID", "btmesh.model.light_xyl_set_unacknowledged.tid",
12620
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12621
16
            NULL, HFILL }
12622
16
        },
12623
16
        { &hf_btmesh_light_xyl_set_unacknowledged_transition_time,
12624
16
            { "Transition Time", "btmesh.model.light_xyl_set_unacknowledged.transition_time",
12625
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12626
16
            NULL, HFILL }
12627
16
        },
12628
16
        { &hf_btmesh_light_xyl_set_unacknowledged_transition_time_resolution,
12629
16
            { "Step Resolution", "btmesh.model.light_xyl_set_unacknowledged.transition_time.resolution",
12630
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12631
16
            NULL, HFILL }
12632
16
        },
12633
16
        { &hf_btmesh_light_xyl_set_unacknowledged_transition_time_steps,
12634
16
            { "Number of Steps", "btmesh.model.light_xyl_set_unacknowledged.transition_time.steps",
12635
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12636
16
            NULL, HFILL }
12637
16
        },
12638
16
        { &hf_btmesh_light_xyl_set_unacknowledged_delay,
12639
16
            { "Delay", "btmesh.model.light_xyl_set_unacknowledged.delay",
12640
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12641
16
            NULL, HFILL }
12642
16
        },
12643
16
        { &hf_btmesh_light_xyl_status_xyl_lightness,
12644
16
            { "xyL Lightness", "btmesh.model.light_xyl_status.xyl_lightness",
12645
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12646
16
            NULL, HFILL }
12647
16
        },
12648
16
        { &hf_btmesh_light_xyl_status_xyl_x,
12649
16
            { "xyL x", "btmesh.model.light_xyl_status.xyl_x",
12650
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12651
16
            NULL, HFILL }
12652
16
        },
12653
16
        { &hf_btmesh_light_xyl_status_xyl_y,
12654
16
            { "xyL y", "btmesh.model.light_xyl_status.xyl_y",
12655
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12656
16
            NULL, HFILL }
12657
16
        },
12658
16
        { &hf_btmesh_light_xyl_status_remaining_time,
12659
16
            { "Remaining Time", "btmesh.model.light_xyl_status.remaining_time",
12660
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12661
16
            NULL, HFILL }
12662
16
        },
12663
16
        { &hf_btmesh_light_xyl_status_remaining_time_resolution,
12664
16
            { "Step Resolution", "btmesh.model.light_xyl_status.remaining_time.resolution",
12665
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12666
16
            NULL, HFILL }
12667
16
        },
12668
16
        { &hf_btmesh_light_xyl_status_remaining_time_steps,
12669
16
            { "Number of Steps", "btmesh.model.light_xyl_status.remaining_time.steps",
12670
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12671
16
            NULL, HFILL }
12672
16
        },
12673
16
        { &hf_btmesh_light_xyl_target_status_target_xyl_lightness,
12674
16
            { "Target xyL Lightness", "btmesh.model.light_xyl_target_status.target_xyl_lightness",
12675
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12676
16
            NULL, HFILL }
12677
16
        },
12678
16
        { &hf_btmesh_light_xyl_target_status_target_xyl_x,
12679
16
            { "Target xyL x", "btmesh.model.light_xyl_target_status.target_xyl_x",
12680
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12681
16
            NULL, HFILL }
12682
16
        },
12683
16
        { &hf_btmesh_light_xyl_target_status_target_xyl_y,
12684
16
            { "Target xyL y", "btmesh.model.light_xyl_target_status.target_xyl_y",
12685
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12686
16
            NULL, HFILL }
12687
16
        },
12688
16
        { &hf_btmesh_light_xyl_target_status_remaining_time,
12689
16
            { "Remaining Time", "btmesh.model.light_xyl_target_status.remaining_time",
12690
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12691
16
            NULL, HFILL }
12692
16
        },
12693
16
        { &hf_btmesh_light_xyl_target_status_remaining_time_resolution,
12694
16
            { "Step Resolution", "btmesh.model.light_xyl_target_status.remaining_time.resolution",
12695
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12696
16
            NULL, HFILL }
12697
16
        },
12698
16
        { &hf_btmesh_light_xyl_target_status_remaining_time_steps,
12699
16
            { "Number of Steps", "btmesh.model.light_xyl_target_status.remaining_time.steps",
12700
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12701
16
            NULL, HFILL }
12702
16
        },
12703
16
        { &hf_btmesh_light_xyl_default_status_lightness,
12704
16
            { "Lightness", "btmesh.model.light_xyl_default_status.lightness",
12705
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12706
16
            NULL, HFILL }
12707
16
        },
12708
16
        { &hf_btmesh_light_xyl_default_status_xyl_x,
12709
16
            { "xyL x", "btmesh.model.light_xyl_default_status.xyl_x",
12710
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12711
16
            NULL, HFILL }
12712
16
        },
12713
16
        { &hf_btmesh_light_xyl_default_status_xyl_y,
12714
16
            { "xyL y", "btmesh.model.light_xyl_default_status.xyl_y",
12715
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12716
16
            NULL, HFILL }
12717
16
        },
12718
16
        { &hf_btmesh_light_xyl_range_status_status_code,
12719
16
            { "Status Code", "btmesh.model.light_xyl_range_status.status_code",
12720
16
            FT_UINT8, BASE_DEC, VALS(btmesh_generic_status_code_vals), 0x0,
12721
16
            NULL, HFILL }
12722
16
        },
12723
16
        { &hf_btmesh_light_xyl_range_status_xyl_x_range_min,
12724
16
            { "xyL x Range Min", "btmesh.model.light_xyl_range_status.xyl_x_range_min",
12725
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12726
16
            NULL, HFILL }
12727
16
        },
12728
16
        { &hf_btmesh_light_xyl_range_status_xyl_x_range_max,
12729
16
            { "xyL x Range Max", "btmesh.model.light_xyl_range_status.xyl_x_range_max",
12730
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12731
16
            NULL, HFILL }
12732
16
        },
12733
16
        { &hf_btmesh_light_xyl_range_status_xyl_y_range_min,
12734
16
            { "xyL y Range Min", "btmesh.model.light_xyl_range_status.xyl_y_range_min",
12735
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12736
16
            NULL, HFILL }
12737
16
        },
12738
16
        { &hf_btmesh_light_xyl_range_status_xyl_y_range_max,
12739
16
            { "xyL y Range Max", "btmesh.model.light_xyl_range_status.xyl_y_range_max",
12740
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12741
16
            NULL, HFILL }
12742
16
        },
12743
16
        { &hf_btmesh_light_xyl_default_set_lightness,
12744
16
            { "Lightness", "btmesh.model.light_xyl_default_set.lightness",
12745
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12746
16
            NULL, HFILL }
12747
16
        },
12748
16
        { &hf_btmesh_light_xyl_default_set_xyl_x,
12749
16
            { "xyL x", "btmesh.model.light_xyl_default_set.xyl_x",
12750
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12751
16
            NULL, HFILL }
12752
16
        },
12753
16
        { &hf_btmesh_light_xyl_default_set_xyl_y,
12754
16
            { "xyL y", "btmesh.model.light_xyl_default_set.xyl_y",
12755
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12756
16
            NULL, HFILL }
12757
16
        },
12758
16
        { &hf_btmesh_light_xyl_default_set_unacknowledged_lightness,
12759
16
            { "Lightness", "btmesh.model.light_xyl_default_set_unacknowledged.lightness",
12760
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
12761
16
            NULL, HFILL }
12762
16
        },
12763
16
        { &hf_btmesh_light_xyl_default_set_unacknowledged_xyl_x,
12764
16
            { "xyL x", "btmesh.model.light_xyl_default_set_unacknowledged.xyl_x",
12765
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12766
16
            NULL, HFILL }
12767
16
        },
12768
16
        { &hf_btmesh_light_xyl_default_set_unacknowledged_xyl_y,
12769
16
            { "xyL y", "btmesh.model.light_xyl_default_set_unacknowledged.xyl_y",
12770
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12771
16
            NULL, HFILL }
12772
16
        },
12773
16
        { &hf_btmesh_light_xyl_range_set_xyl_x_range_min,
12774
16
            { "xyL x Range Min", "btmesh.model.light_xyl_range_set.xyl_x_range_min",
12775
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12776
16
            NULL, HFILL }
12777
16
        },
12778
16
        { &hf_btmesh_light_xyl_range_set_xyl_x_range_max,
12779
16
            { "xyL x Range Max", "btmesh.model.light_xyl_range_set.xyl_x_range_max",
12780
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12781
16
            NULL, HFILL }
12782
16
        },
12783
16
        { &hf_btmesh_light_xyl_range_set_xyl_y_range_min,
12784
16
            { "xyL y Range Min", "btmesh.model.light_xyl_range_set.xyl_y_range_min",
12785
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12786
16
            NULL, HFILL }
12787
16
        },
12788
16
        { &hf_btmesh_light_xyl_range_set_xyl_y_range_max,
12789
16
            { "xyL y Range Max", "btmesh.model.light_xyl_range_set.xyl_y_range_max",
12790
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12791
16
            NULL, HFILL }
12792
16
        },
12793
16
        { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_min,
12794
16
            { "xyL x Range Min", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_x_range_min",
12795
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12796
16
            NULL, HFILL }
12797
16
        },
12798
16
        { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_x_range_max,
12799
16
            { "xyL x Range Max", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_x_range_max",
12800
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12801
16
            NULL, HFILL }
12802
16
        },
12803
16
        { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_min,
12804
16
            { "xyL y Range Min", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_y_range_min",
12805
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12806
16
            NULL, HFILL }
12807
16
        },
12808
16
        { &hf_btmesh_light_xyl_range_set_unacknowledged_xyl_y_range_max,
12809
16
            { "xyL y Range Max", "btmesh.model.light_xyl_range_set_unacknowledged.xyl_y_range_max",
12810
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_xyl_coordinate), 0x0,
12811
16
            NULL, HFILL }
12812
16
        },
12813
16
        { &hf_btmesh_light_lc_mode_set_mode,
12814
16
            { "Mode", "btmesh.model.light_lc_mode_set.mode",
12815
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12816
16
            NULL, HFILL }
12817
16
        },
12818
16
        { &hf_btmesh_light_lc_mode_set_unacknowledged_mode,
12819
16
            { "Mode", "btmesh.model.light_lc_mode_set_unacknowledged.mode",
12820
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12821
16
            NULL, HFILL }
12822
16
        },
12823
16
        { &hf_btmesh_light_lc_mode_status_mode,
12824
16
            { "Mode", "btmesh.model.light_lc_mode_status.mode",
12825
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12826
16
            NULL, HFILL }
12827
16
        },
12828
16
        { &hf_btmesh_light_lc_om_set_mode,
12829
16
            { "Mode", "btmesh.model.light_lc_om_set.mode",
12830
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12831
16
            NULL, HFILL }
12832
16
        },
12833
16
        { &hf_btmesh_light_lc_om_set_unacknowledged_mode,
12834
16
            { "Mode", "btmesh.model.light_lc_om_set_unacknowledged.mode",
12835
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12836
16
            NULL, HFILL }
12837
16
        },
12838
16
        { &hf_btmesh_light_lc_om_status_mode,
12839
16
            { "Mode", "btmesh.model.light_lc_om_status.mode",
12840
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12841
16
            NULL, HFILL }
12842
16
        },
12843
16
        { &hf_btmesh_light_lc_light_onoff_set_light_onoff,
12844
16
            { "Light OnOff", "btmesh.model.light_lc_light_onoff_set.light_onoff",
12845
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12846
16
            NULL, HFILL }
12847
16
        },
12848
16
        { &hf_btmesh_light_lc_light_onoff_set_tid,
12849
16
            { "TID", "btmesh.model.light_lc_light_onoff_set.tid",
12850
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12851
16
            NULL, HFILL }
12852
16
        },
12853
16
        { &hf_btmesh_light_lc_light_onoff_set_transition_time,
12854
16
            { "Transition Time", "btmesh.model.light_lc_light_onoff_set.transition_time",
12855
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12856
16
            NULL, HFILL }
12857
16
        },
12858
16
        { &hf_btmesh_light_lc_light_onoff_set_transition_time_resolution,
12859
16
            { "Step Resolution", "btmesh.model.light_lc_light_onoff_set.transition_time.resolution",
12860
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12861
16
            NULL, HFILL }
12862
16
        },
12863
16
        { &hf_btmesh_light_lc_light_onoff_set_transition_time_steps,
12864
16
            { "Number of Steps", "btmesh.model.light_lc_light_onoff_set.transition_time.steps",
12865
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12866
16
            NULL, HFILL }
12867
16
        },
12868
16
        { &hf_btmesh_light_lc_light_onoff_set_delay,
12869
16
            { "Delay", "btmesh.model.light_lc_light_onoff_set.delay",
12870
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12871
16
            NULL, HFILL }
12872
16
        },
12873
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_light_onoff,
12874
16
            { "Light OnOff", "btmesh.model.light_lc_light_onoff_set_unacknowledged.light_onoff",
12875
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12876
16
            NULL, HFILL }
12877
16
        },
12878
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_tid,
12879
16
            { "TID", "btmesh.model.light_lc_light_onoff_set_unacknowledged.tid",
12880
16
            FT_UINT8, BASE_DEC, NULL, 0x0,
12881
16
            NULL, HFILL }
12882
16
        },
12883
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time,
12884
16
            { "Transition Time", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time",
12885
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12886
16
            NULL, HFILL }
12887
16
        },
12888
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_resolution,
12889
16
            { "Step Resolution", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time.resolution",
12890
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12891
16
            NULL, HFILL }
12892
16
        },
12893
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_transition_time_steps,
12894
16
            { "Number of Steps", "btmesh.model.light_lc_light_onoff_set_unacknowledged.transition_time.steps",
12895
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12896
16
            NULL, HFILL }
12897
16
        },
12898
16
        { &hf_btmesh_light_lc_light_onoff_set_unacknowledged_delay,
12899
16
            { "Delay", "btmesh.model.light_lc_light_onoff_set_unacknowledged.delay",
12900
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_delay_ms), 0x0,
12901
16
            NULL, HFILL }
12902
16
        },
12903
16
        { &hf_btmesh_light_lc_light_onoff_status_present_light_onoff,
12904
16
            { "Present Light OnOff", "btmesh.model.light_lc_light_onoff_status.present_light_onoff",
12905
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12906
16
            NULL, HFILL }
12907
16
        },
12908
16
        { &hf_btmesh_light_lc_light_onoff_status_target_light_onoff,
12909
16
            { "Target Light OnOff", "btmesh.model.light_lc_light_onoff_status.target_light_onoff",
12910
16
            FT_UINT8, BASE_DEC, VALS(btmesh_on_off_vals), 0x0,
12911
16
            NULL, HFILL }
12912
16
        },
12913
16
        { &hf_btmesh_light_lc_light_onoff_status_remaining_time,
12914
16
            { "Remaining Time", "btmesh.model.light_lc_light_onoff_status.remaining_time",
12915
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_publish_period), 0x0,
12916
16
            NULL, HFILL }
12917
16
        },
12918
16
        { &hf_btmesh_light_lc_light_onoff_status_remaining_time_resolution,
12919
16
            { "Step Resolution", "btmesh.model.light_lc_light_onoff_status.remaining_time.resolution",
12920
16
            FT_UINT8, BASE_DEC, VALS(btmesh_publishperiod_resolution_vals), 0xC0,
12921
16
            NULL, HFILL }
12922
16
        },
12923
16
        { &hf_btmesh_light_lc_light_onoff_status_remaining_time_steps,
12924
16
            { "Number of Steps", "btmesh.model.light_lc_light_onoff_status.remaining_time.steps",
12925
16
            FT_UINT8, BASE_DEC, NULL, 0x3F,
12926
16
            NULL, HFILL }
12927
16
        },
12928
16
        { &hf_btmesh_light_lc_property_get_light_lc_property_id,
12929
16
            { "Light LC Property ID", "btmesh.model.light_lc_property_get.light_lc_property_id",
12930
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12931
16
            NULL, HFILL }
12932
16
        },
12933
16
        { &hf_btmesh_generic_manufacturer_properties_status_manufacturer_property_id,
12934
16
            { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_properties_status.manufacturer_property_id",
12935
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12936
16
            NULL, HFILL }
12937
16
        },
12938
16
        { &hf_btmesh_generic_manufacturer_property_set_manufacturer_property_id,
12939
16
            { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_set.manufacturer_property_id",
12940
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12941
16
            NULL, HFILL }
12942
16
        },
12943
16
        { &hf_btmesh_generic_manufacturer_property_set_manufacturer_user_access,
12944
16
            { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_set.manufacturer_user_access",
12945
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12946
16
            NULL, HFILL }
12947
16
        },
12948
16
        { &hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_property_id,
12949
16
            { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_set_unacknowledged.manufacturer_property_id",
12950
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12951
16
            NULL, HFILL }
12952
16
        },
12953
16
        { &hf_btmesh_generic_manufacturer_property_set_unacknowledged_manufacturer_user_access,
12954
16
            { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_set_unacknowledged.manufacturer_user_access",
12955
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12956
16
            NULL, HFILL }
12957
16
        },
12958
16
        { &hf_btmesh_generic_manufacturer_property_status_manufacturer_property_id,
12959
16
            { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_status.manufacturer_property_id",
12960
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12961
16
            NULL, HFILL }
12962
16
        },
12963
16
        { &hf_btmesh_generic_manufacturer_property_status_manufacturer_user_access,
12964
16
            { "Manufacturer User Access", "btmesh.model.generic_manufacturer_property_status.manufacturer_user_access",
12965
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_manufacturer_user_access), 0x0,
12966
16
            NULL, HFILL }
12967
16
        },
12968
16
        { &hf_btmesh_generic_manufacturer_property_status_manufacturer_property_value,
12969
16
            { "Manufacturer Property Value", "btmesh.model.generic_manufacturer_property_status.manufacturer_property_value",
12970
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
12971
16
            NULL, HFILL }
12972
16
        },
12973
16
        { &hf_btmesh_generic_admin_properties_status_admin_property_id,
12974
16
            { "Admin Property ID", "btmesh.model.generic_admin_properties_status.admin_property_id",
12975
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12976
16
            NULL, HFILL }
12977
16
        },
12978
16
        { &hf_btmesh_generic_admin_property_set_admin_property_id,
12979
16
            { "Admin Property ID", "btmesh.model.generic_admin_property_set.admin_property_id",
12980
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12981
16
            NULL, HFILL }
12982
16
        },
12983
16
        { &hf_btmesh_generic_admin_property_set_admin_user_access,
12984
16
            { "Admin User Access", "btmesh.model.generic_admin_property_set.admin_user_access",
12985
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
12986
16
            NULL, HFILL }
12987
16
        },
12988
16
        { &hf_btmesh_generic_admin_property_set_admin_property_value,
12989
16
            { "Admin Property Value", "btmesh.model.generic_admin_property_set.admin_property_value",
12990
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
12991
16
            NULL, HFILL }
12992
16
        },
12993
16
        { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_id,
12994
16
            { "Admin Property ID", "btmesh.model.generic_admin_property_set_unacknowledged.admin_property_id",
12995
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
12996
16
            NULL, HFILL }
12997
16
        },
12998
16
        { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_user_access,
12999
16
            { "Admin User Access", "btmesh.model.generic_admin_property_set_unacknowledged.admin_user_access",
13000
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
13001
16
            NULL, HFILL }
13002
16
        },
13003
16
        { &hf_btmesh_generic_admin_property_set_unacknowledged_admin_property_value,
13004
16
            { "Admin Property Value", "btmesh.model.generic_admin_property_set_unacknowledged.admin_property_value",
13005
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13006
16
            NULL, HFILL }
13007
16
        },
13008
16
        { &hf_btmesh_generic_admin_property_status_admin_property_id,
13009
16
            { "Admin Property ID", "btmesh.model.generic_admin_property_status.admin_property_id",
13010
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13011
16
            NULL, HFILL }
13012
16
        },
13013
16
        { &hf_btmesh_generic_admin_property_status_admin_user_access,
13014
16
            { "Admin User Access", "btmesh.model.generic_admin_property_status.admin_user_access",
13015
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_admin_user_access), 0x0,
13016
16
            NULL, HFILL }
13017
16
        },
13018
16
        { &hf_btmesh_generic_admin_property_status_admin_property_value,
13019
16
            { "Admin Property Value", "btmesh.model.generic_admin_property_status.admin_property_value",
13020
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13021
16
            NULL, HFILL }
13022
16
        },
13023
16
        { &hf_btmesh_generic_user_properties_status_user_property_id,
13024
16
            { "User Property ID", "btmesh.model.generic_user_properties_status.user_property_id",
13025
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13026
16
            NULL, HFILL }
13027
16
        },
13028
16
        { &hf_btmesh_generic_user_property_set_user_property_id,
13029
16
            { "User Property ID", "btmesh.model.generic_user_property_set.user_property_id",
13030
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13031
16
            NULL, HFILL }
13032
16
        },
13033
16
        { &hf_btmesh_generic_user_property_set_user_property_value,
13034
16
            { "User Property Value", "btmesh.model.generic_user_property_set.user_property_value",
13035
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13036
16
            NULL, HFILL }
13037
16
        },
13038
16
        { &hf_btmesh_generic_user_property_set_unacknowledged_user_property_id,
13039
16
            { "User Property ID", "btmesh.model.generic_user_property_set_unacknowledged.user_property_id",
13040
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13041
16
            NULL, HFILL }
13042
16
        },
13043
16
        { &hf_btmesh_generic_user_property_set_unacknowledged_user_property_value,
13044
16
            { "User Property Value", "btmesh.model.generic_user_property_set_unacknowledged.user_property_value",
13045
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13046
16
            NULL, HFILL }
13047
16
        },
13048
16
        { &hf_btmesh_generic_user_property_status_user_property_id,
13049
16
            { "User Property ID", "btmesh.model.generic_user_property_status.user_property_id",
13050
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13051
16
            NULL, HFILL }
13052
16
        },
13053
16
        { &hf_btmesh_generic_user_property_status_user_access,
13054
16
            { "User Access", "btmesh.model.generic_user_property_status.user_access",
13055
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_user_access), 0x0,
13056
16
            NULL, HFILL }
13057
16
        },
13058
16
        { &hf_btmesh_generic_user_property_status_user_property_value,
13059
16
            { "User Property Value", "btmesh.model.generic_user_property_status.user_property_value",
13060
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13061
16
            NULL, HFILL }
13062
16
        },
13063
16
        { &hf_btmesh_generic_client_properties_get_client_property_id,
13064
16
            { "Client Property ID", "btmesh.model.generic_client_properties_get.client_property_id",
13065
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13066
16
            NULL, HFILL }
13067
16
        },
13068
16
        { &hf_btmesh_generic_client_properties_status_client_property_id,
13069
16
            { "Client Property ID", "btmesh.model.generic_client_properties_status.client_property_id",
13070
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13071
16
            NULL, HFILL }
13072
16
        },
13073
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_property_id,
13074
16
            { "Sensor Property ID", "btmesh.model.sensor_descriptor_status.descriptor_sensor_property_id",
13075
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13076
16
            NULL, HFILL }
13077
16
        },
13078
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_positive_tolerance,
13079
16
            { "Sensor Positive Tolerance", "btmesh.model.sensor_descriptor_status.descriptor_positive_tolerance",
13080
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_sensor_descriptor_tolerance), 0x000FFF,
13081
16
            NULL, HFILL }
13082
16
        },
13083
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_negative_tolerance,
13084
16
            { "Sensor Negative Tolerance", "btmesh.model.sensor_descriptor_status.descriptor_negative_tolerance",
13085
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_sensor_descriptor_tolerance), 0xFFF000,
13086
16
            NULL, HFILL }
13087
16
        },
13088
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_sampling_function,
13089
16
            { "Sensor Sampling Function", "btmesh.model.sensor_descriptor_status.descriptor_sensor_sampling_function",
13090
16
            FT_UINT8, BASE_DEC, VALS(btmesh_sensor_sampling_function_vals), 0x0,
13091
16
            NULL, HFILL }
13092
16
        },
13093
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_measurement_period,
13094
16
            { "Sensor Measurement Period", "btmesh.model.sensor_descriptor_status.descriptor_sensor_measurement_period",
13095
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_period), 0x0,
13096
16
            NULL, HFILL }
13097
16
        },
13098
16
        { &hf_btmesh_sensor_descriptor_status_descriptor_sensor_update_interval,
13099
16
            { "Sensor Update Interval", "btmesh.model.sensor_descriptor_status.descriptor_sensor_update_interval",
13100
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_period), 0x0,
13101
16
            NULL, HFILL }
13102
16
        },
13103
16
        { &hf_btmesh_sensor_status_mpid_format,
13104
16
            { "MPID Format", "btmesh.model.sensor_status.mpid.format",
13105
16
            FT_UINT8, BASE_DEC, VALS(btmesh_mpid_format_vals), 0x01,
13106
16
            NULL, HFILL }
13107
16
        },
13108
16
        { &hf_btmesh_sensor_status_mpid_format_a_length,
13109
16
            { "MPID Length", "btmesh.model.sensor_status.mpid.format_a.length",
13110
16
            FT_UINT8, BASE_DEC, NULL, 0x1e,
13111
16
            NULL, HFILL }
13112
16
        },
13113
16
        { &hf_btmesh_sensor_status_mpid_format_b_length,
13114
16
            { "MPID Length", "btmesh.model.sensor_status.mpid.format_b.length",
13115
16
            FT_UINT8, BASE_DEC, NULL, 0xfe,
13116
16
            NULL, HFILL }
13117
16
        },
13118
16
        { &hf_btmesh_sensor_status_mpid_format_a_property_id,
13119
16
            { "MPID Property ID", "btmesh.model.sensor_status.mpid.format_a.property_id",
13120
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0xFFE0,
13121
16
            NULL, HFILL }
13122
16
        },
13123
16
        { &hf_btmesh_sensor_status_mpid_format_b_property_id,
13124
16
            { "MPID Property ID", "btmesh.model.sensor_status.mpid.format_b.property_id",
13125
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13126
16
            NULL, HFILL }
13127
16
        },
13128
16
        { &hf_btmesh_sensor_status_raw_value,
13129
16
            { "Raw Value", "btmesh.model.sensor_status.raw_value",
13130
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13131
16
            NULL, HFILL }
13132
16
        },
13133
16
        { &hf_btmesh_sensor_column_status_property_id,
13134
16
            { "Property ID", "btmesh.model.sensor_column_status.property_id",
13135
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13136
16
            NULL, HFILL }
13137
16
        },
13138
16
        { &hf_btmesh_sensor_column_status_raw_value_a,
13139
16
            { "Raw Value A", "btmesh.model.sensor_column_status.raw_value_a",
13140
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13141
16
            NULL, HFILL }
13142
16
        },
13143
16
        { &hf_btmesh_sensor_column_status_raw_value_b,
13144
16
            { "Raw Value B", "btmesh.model.sensor_column_status.raw_value_b",
13145
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13146
16
            NULL, HFILL }
13147
16
        },
13148
16
        { &hf_btmesh_sensor_column_status_raw_value_c,
13149
16
            { "Raw Value C", "btmesh.model.sensor_column_status.raw_value_c",
13150
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13151
16
            NULL, HFILL }
13152
16
        },
13153
16
        { &hf_btmesh_sensor_series_status_property_id,
13154
16
            { "Property ID", "btmesh.model.sensor_series_status.property_id",
13155
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13156
16
            NULL, HFILL }
13157
16
        },
13158
16
        { &hf_btmesh_sensor_series_status_raw_value_a,
13159
16
            { "Raw Value A", "btmesh.model.sensor_series_status.raw_value_a",
13160
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13161
16
            NULL, HFILL }
13162
16
        },
13163
16
        { &hf_btmesh_sensor_series_status_raw_value_b,
13164
16
            { "Raw Value B", "btmesh.model.sensor_series_status.raw_value_b",
13165
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13166
16
            NULL, HFILL }
13167
16
        },
13168
16
        { &hf_btmesh_sensor_series_status_raw_value_c,
13169
16
            { "Raw Value C", "btmesh.model.sensor_series_status.raw_value_c",
13170
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13171
16
            NULL, HFILL }
13172
16
        },
13173
16
        { &hf_btmesh_sensor_cadence_set_property_id,
13174
16
            { "Property ID", "btmesh.model.sensor_cadence_set.property_id",
13175
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13176
16
            NULL, HFILL }
13177
16
        },
13178
16
        { &hf_btmesh_sensor_cadence_set_fast_cadence_period_divisor,
13179
16
            { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_set.fast_cadence_period_divisor",
13180
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13181
16
            NULL, HFILL }
13182
16
        },
13183
16
        { &hf_btmesh_sensor_cadence_set_status_trigger_type,
13184
16
            { "Status Trigger Type", "btmesh.model.sensor_cadence_set.status_trigger_type",
13185
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13186
16
            NULL, HFILL }
13187
16
        },
13188
16
        { &hf_btmesh_sensor_cadence_set_status_trigger_delta_down,
13189
16
            { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_set.status_trigger_delta_down",
13190
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13191
16
            NULL, HFILL }
13192
16
        },
13193
16
        { &hf_btmesh_sensor_cadence_set_status_trigger_delta_up,
13194
16
            { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_set.status_trigger_delta_up",
13195
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13196
16
            NULL, HFILL }
13197
16
        },
13198
16
        { &hf_btmesh_sensor_cadence_set_status_min_interval,
13199
16
            { "Status Min Interval", "btmesh.model.sensor_cadence_set.status_min_interval",
13200
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13201
16
            NULL, HFILL }
13202
16
        },
13203
16
        { &hf_btmesh_sensor_cadence_set_fast_cadence_low,
13204
16
            { "Fast Cadence Low", "btmesh.model.sensor_cadence_set.fast_cadence_low",
13205
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13206
16
            NULL, HFILL }
13207
16
        },
13208
16
        { &hf_btmesh_sensor_cadence_set_fast_cadence_high,
13209
16
            { "Fast Cadence High", "btmesh.model.sensor_cadence_set.fast_cadence_high",
13210
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13211
16
            NULL, HFILL }
13212
16
        },
13213
16
        { &hf_btmesh_sensor_cadence_set_remainder_not_dissected,
13214
16
            { "Remainder Not Dissected", "btmesh.model.sensor_cadence_set.remainder_not_dissected",
13215
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13216
16
            NULL, HFILL }
13217
16
        },
13218
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_property_id,
13219
16
            { "Property ID", "btmesh.model.sensor_cadence_set_unacknowledged.property_id",
13220
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13221
16
            NULL, HFILL }
13222
16
        },
13223
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_period_divisor,
13224
16
            { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_period_divisor",
13225
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13226
16
            NULL, HFILL }
13227
16
        },
13228
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_type,
13229
16
            { "Status Trigger Type", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_type",
13230
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13231
16
            NULL, HFILL }
13232
16
        },
13233
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_down,
13234
16
            { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_delta_down",
13235
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13236
16
            NULL, HFILL }
13237
16
        },
13238
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_status_trigger_delta_up,
13239
16
            { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_set_unacknowledged.status_trigger_delta_up",
13240
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13241
16
            NULL, HFILL }
13242
16
        },
13243
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_status_min_interval,
13244
16
            { "Status Min Interval", "btmesh.model.sensor_cadence_set_unacknowledged.status_min_interval",
13245
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13246
16
            NULL, HFILL }
13247
16
        },
13248
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_low,
13249
16
            { "Fast Cadence Low", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_low",
13250
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13251
16
            NULL, HFILL }
13252
16
        },
13253
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_fast_cadence_high,
13254
16
            { "Fast Cadence High", "btmesh.model.sensor_cadence_set_unacknowledged.fast_cadence_high",
13255
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13256
16
            NULL, HFILL }
13257
16
        },
13258
16
        { &hf_btmesh_sensor_cadence_set_unacknowledged_remainder_not_dissected,
13259
16
            { "Remainder Not Dissected", "btmesh.model.sensor_cadence_set_unacknowledged.remainder_not_dissected",
13260
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13261
16
            NULL, HFILL }
13262
16
        },
13263
16
        { &hf_btmesh_sensor_cadence_status_property_id,
13264
16
            { "Property ID", "btmesh.model.sensor_cadence_status.property_id",
13265
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13266
16
            NULL, HFILL }
13267
16
        },
13268
16
        { &hf_btmesh_sensor_cadence_status_fast_cadence_period_divisor,
13269
16
            { "Fast Cadence Period Divisor", "btmesh.model.sensor_cadence_status.fast_cadence_period_divisor",
13270
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_fast_cadence_period_divisor), 0x7F,
13271
16
            NULL, HFILL }
13272
16
        },
13273
16
        { &hf_btmesh_sensor_cadence_status_status_trigger_type,
13274
16
            { "Status Trigger Type", "btmesh.model.sensor_cadence_status.status_trigger_type",
13275
16
            FT_UINT8, BASE_DEC, VALS(btmesh_status_trigger_type_vals), 0x80,
13276
16
            NULL, HFILL }
13277
16
        },
13278
16
        { &hf_btmesh_sensor_cadence_status_status_trigger_delta_down,
13279
16
            { "Status Trigger Delta Down", "btmesh.model.sensor_cadence_status.status_trigger_delta_down",
13280
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13281
16
            NULL, HFILL }
13282
16
        },
13283
16
        { &hf_btmesh_sensor_cadence_status_status_trigger_delta_up,
13284
16
            { "Status Trigger Delta Up", "btmesh.model.sensor_cadence_status.status_trigger_delta_up",
13285
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13286
16
            NULL, HFILL }
13287
16
        },
13288
16
        { &hf_btmesh_sensor_cadence_status_status_min_interval,
13289
16
            { "Status Min Interval", "btmesh.model.sensor_cadence_status.status_min_interval",
13290
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_status_min_interval), 0x0,
13291
16
            NULL, HFILL }
13292
16
        },
13293
16
        { &hf_btmesh_sensor_cadence_status_fast_cadence_low,
13294
16
            { "Fast Cadence Low", "btmesh.model.sensor_cadence_status.fast_cadence_low",
13295
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13296
16
            NULL, HFILL }
13297
16
        },
13298
16
        { &hf_btmesh_sensor_cadence_status_fast_cadence_high,
13299
16
            { "Fast Cadence High", "btmesh.model.sensor_cadence_status.fast_cadence_high",
13300
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13301
16
            NULL, HFILL }
13302
16
        },
13303
16
        { &hf_btmesh_sensor_cadence_status_remainder_not_dissected,
13304
16
            { "Remainder Not Dissected", "btmesh.model.sensor_cadence_status.remainder_not_dissected",
13305
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13306
16
            NULL, HFILL }
13307
16
        },
13308
16
        { &hf_btmesh_sensor_settings_status_sensor_property_id,
13309
16
            { "Sensor Property ID", "btmesh.model.sensor_settings_status.sensor_property_id",
13310
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13311
16
            NULL, HFILL }
13312
16
        },
13313
16
        { &hf_btmesh_sensor_settings_status_sensor_setting_property_id,
13314
16
            { "Sensor Setting Property ID", "btmesh.model.sensor_settings_status.sensor_setting_property_id",
13315
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13316
16
            NULL, HFILL }
13317
16
        },
13318
16
        { &hf_btmesh_sensor_setting_set_sensor_property_id,
13319
16
            { "Sensor Property ID", "btmesh.model.sensor_setting_set.sensor_property_id",
13320
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13321
16
            NULL, HFILL }
13322
16
        },
13323
16
        { &hf_btmesh_sensor_setting_set_sensor_setting_property_id,
13324
16
            { "Sensor Setting Property ID", "btmesh.model.sensor_setting_set.sensor_setting_property_id",
13325
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13326
16
            NULL, HFILL }
13327
16
        },
13328
16
        { &hf_btmesh_sensor_setting_set_sensor_setting_raw,
13329
16
            { "Sensor Setting Raw", "btmesh.model.sensor_setting_set.sensor_setting_raw",
13330
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13331
16
            NULL, HFILL }
13332
16
        },
13333
16
        { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_property_id,
13334
16
            { "Sensor Property ID", "btmesh.model.sensor_setting_set_unacknowledged.sensor_property_id",
13335
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13336
16
            NULL, HFILL }
13337
16
        },
13338
16
        { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_property_id,
13339
16
            { "Sensor Setting Property ID", "btmesh.model.sensor_setting_set_unacknowledged.sensor_setting_property_id",
13340
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13341
16
            NULL, HFILL }
13342
16
        },
13343
16
        { &hf_btmesh_sensor_setting_set_unacknowledged_sensor_setting_raw,
13344
16
            { "Sensor Setting Raw", "btmesh.model.sensor_setting_set_unacknowledged.sensor_setting_raw",
13345
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13346
16
            NULL, HFILL }
13347
16
        },
13348
16
        { &hf_btmesh_sensor_setting_status_sensor_property_id,
13349
16
            { "Sensor Property ID", "btmesh.model.sensor_setting_status.sensor_property_id",
13350
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13351
16
            NULL, HFILL }
13352
16
        },
13353
16
        { &hf_btmesh_sensor_setting_status_sensor_setting_property_id,
13354
16
            { "Sensor Setting Property ID", "btmesh.model.sensor_setting_status.sensor_setting_property_id",
13355
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13356
16
            NULL, HFILL }
13357
16
        },
13358
16
        { &hf_btmesh_sensor_setting_status_sensor_setting_access,
13359
16
            { "Sensor Setting Access", "btmesh.model.sensor_setting_status.sensor_setting_access",
13360
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_sensor_setting_access), 0x0,
13361
16
            NULL, HFILL }
13362
16
        },
13363
16
        { &hf_btmesh_sensor_setting_status_sensor_setting_raw,
13364
16
            { "Sensor Setting Raw", "btmesh.model.sensor_setting_status.sensor_setting_raw",
13365
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13366
16
            NULL, HFILL }
13367
16
        },
13368
16
        { &hf_btmesh_generic_manufacturer_property_get_manufacturer_property_id,
13369
16
            { "Manufacturer Property ID", "btmesh.model.generic_manufacturer_property_get.manufacturer_property_id",
13370
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13371
16
            NULL, HFILL }
13372
16
        },
13373
16
        { &hf_btmesh_generic_admin_property_get_admin_property_id,
13374
16
            { "Admin Property ID", "btmesh.model.generic_admin_property_get.admin_property_id",
13375
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13376
16
            NULL, HFILL }
13377
16
        },
13378
16
        { &hf_btmesh_generic_user_property_get_user_property_id,
13379
16
            { "User Property ID", "btmesh.model.generic_user_property_get.user_property_id",
13380
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13381
16
            NULL, HFILL }
13382
16
        },
13383
16
        { &hf_btmesh_sensor_descriptor_get_property_id,
13384
16
            { "Property ID", "btmesh.model.sensor_descriptor_get.property_id",
13385
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13386
16
            NULL, HFILL }
13387
16
        },
13388
16
        { &hf_btmesh_sensor_get_property_id,
13389
16
            { "Property ID", "btmesh.model.sensor_get.property_id",
13390
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13391
16
            NULL, HFILL }
13392
16
        },
13393
16
        { &hf_btmesh_sensor_column_get_property_id,
13394
16
            { "Property ID", "btmesh.model.sensor_column_get.property_id",
13395
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13396
16
            NULL, HFILL }
13397
16
        },
13398
16
        { &hf_btmesh_sensor_column_get_raw_value_a,
13399
16
            { "Raw Value A", "btmesh.model.sensor_column_get.raw_value_a",
13400
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13401
16
            NULL, HFILL }
13402
16
        },
13403
16
        { &hf_btmesh_sensor_series_get_property_id,
13404
16
            { "Property ID", "btmesh.model.sensor_series_get.property_id",
13405
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13406
16
            NULL, HFILL }
13407
16
        },
13408
16
        { &hf_btmesh_sensor_series_get_raw_value_a1,
13409
16
            { "Raw Value A1", "btmesh.model.sensor_series_get.raw_value_a1",
13410
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13411
16
            NULL, HFILL }
13412
16
        },
13413
16
        { &hf_btmesh_sensor_series_get_raw_value_a2,
13414
16
            { "Raw Value A2", "btmesh.model.sensor_series_get.raw_value_a2",
13415
16
            FT_BYTES, BASE_NONE, NULL, 0x0,
13416
16
            NULL, HFILL }
13417
16
        },
13418
16
        { &hf_btmesh_sensor_cadence_get_property_id,
13419
16
            { "Property ID", "btmesh.model.sensor_cadence_get.property_id",
13420
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13421
16
            NULL, HFILL }
13422
16
        },
13423
16
        { &hf_btmesh_sensor_settings_get_sensor_property_id,
13424
16
            { "Sensor Property ID", "btmesh.model.sensor_settings_get.sensor_property_id",
13425
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13426
16
            NULL, HFILL }
13427
16
        },
13428
16
        { &hf_btmesh_sensor_setting_get_sensor_property_id,
13429
16
            { "Sensor Property ID", "btmesh.model.sensor_setting_get.sensor_property_id",
13430
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13431
16
            NULL, HFILL }
13432
16
        },
13433
16
        { &hf_btmesh_sensor_setting_get_sensor_setting_property_id,
13434
16
            { "Sensor Setting Property ID", "btmesh.model.sensor_setting_get.sensor_setting_property_id",
13435
16
            FT_UINT16, BASE_DEC, VALS(btmesh_properties_vals), 0x0,
13436
16
            NULL, HFILL }
13437
16
        },
13438
16
        { &hf_bt_characteristic_illuminance,
13439
16
            { "Illuminance", "btmesh.property.illuminance",
13440
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_illuminance), 0x0,
13441
16
            NULL, HFILL }
13442
16
        },
13443
16
        { &hf_bt_characteristic_perceived_lightness,
13444
16
            { "Perceived Lightness", "btmesh.property.perceived_lightness",
13445
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
13446
16
            NULL, HFILL }
13447
16
        },
13448
16
        { &hf_bt_characteristic_percentage_8,
13449
16
            { "Percentage 8", "btmesh.property.percentage_8",
13450
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_percentage_8), 0x0,
13451
16
            NULL, HFILL }
13452
16
        },
13453
16
        { &hf_bt_characteristic_coefficient,
13454
16
            { "Coefficient", "btmesh.property.coefficient",
13455
16
            FT_FLOAT, BASE_NONE, NULL, 0x0,
13456
16
            NULL, HFILL }
13457
16
        },
13458
16
        { &hf_bt_characteristic_time_millisecond_24,
13459
16
            { "Time Millisecond 24", "btmesh.property.time_millisecond_24",
13460
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_time_millisecond_24), 0x0,
13461
16
            NULL, HFILL }
13462
16
        },
13463
16
        { &hf_bt_characteristic_count_16,
13464
16
            { "Count 16", "btmesh.property.count_16",
13465
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_count_16), 0x0,
13466
16
            NULL, HFILL }
13467
16
        },
13468
16
        { &hf_bt_phony_characteristic_percentage_change_16,
13469
16
            { "Percentage Change", "btmesh.property.percentage_change_16",
13470
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_percentage_change_16), 0x0,
13471
16
            NULL, HFILL }
13472
16
        },
13473
16
        { &hf_bt_phony_characteristic_index,
13474
16
            { "Index", "btmesh.property.index",
13475
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
13476
16
            NULL, HFILL }
13477
16
        },
13478
16
        { &hf_bt_characteristic_time_decihour_8,
13479
16
            { "Time Decihour 8", "btmesh.property.time_decihour_8",
13480
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_decihour_8), 0x0,
13481
16
            NULL, HFILL }
13482
16
        },
13483
16
        { &hf_bt_characteristic_temperature_8,
13484
16
            { "Temperature 8", "btmesh.property.temperature_8",
13485
16
            FT_INT8, BASE_CUSTOM, CF_FUNC(format_temperature_8), 0x0,
13486
16
            NULL, HFILL }
13487
16
        },
13488
16
        { &hf_bt_characteristic_temperature,
13489
16
            { "Temperature", "btmesh.property.temperature",
13490
16
            FT_INT16, BASE_CUSTOM, CF_FUNC(format_temperature), 0x0,
13491
16
            NULL, HFILL }
13492
16
        },
13493
16
        { &hf_bt_characteristic_electric_current,
13494
16
            { "Electric Current", "btmesh.property.electric_current",
13495
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_electric_current), 0x0,
13496
16
            NULL, HFILL }
13497
16
        },
13498
16
        { &hf_bt_characteristic_energy,
13499
16
            { "Energy", "btmesh.property.energy",
13500
16
            FT_UINT24, BASE_CUSTOM, CF_FUNC(format_energy), 0x0,
13501
16
            NULL, HFILL }
13502
16
        },
13503
16
        { &hf_bt_characteristic_generic_level,
13504
16
            { "Generic Level", "btmesh.property.generic_level",
13505
16
            FT_UINT16, BASE_DEC, NULL, 0x0,
13506
16
            NULL, HFILL }
13507
16
        },
13508
16
        { &hf_bt_characteristic_boolean,
13509
16
            { "Boolean", "btmesh.property.boolean",
13510
16
            FT_UINT8, BASE_CUSTOM, CF_FUNC(format_boolean), 0x0,
13511
16
            NULL, HFILL }
13512
16
        },
13513
16
        { &hf_bt_characteristic_time_second_16,
13514
16
            { "Time Second 16", "btmesh.property.time_second_16",
13515
16
            FT_UINT16, BASE_CUSTOM, CF_FUNC(format_time_second_16), 0x0,
13516
16
            NULL, HFILL }
13517
16
        },
13518
16
    };
13519
13520
16
    static int *ett[] = {
13521
16
        &ett_btmesh,
13522
16
        &ett_btmesh_net_pdu,
13523
16
        &ett_btmesh_transp_pdu,
13524
16
        &ett_btmesh_transp_ctrl_msg,
13525
16
        &ett_btmesh_upper_transp_acc_pdu,
13526
16
        &ett_btmesh_segmented_access_fragments,
13527
16
        &ett_btmesh_segmented_access_fragment,
13528
16
        &ett_btmesh_segmented_control_fragments,
13529
16
        &ett_btmesh_segmented_control_fragment,
13530
16
        &ett_btmesh_access_pdu,
13531
16
        &ett_btmesh_model_layer,
13532
16
        &ett_btmesh_config_model_netapp_index,
13533
16
        &ett_btmesh_config_model_publishperiod,
13534
16
        &ett_btmesh_config_model_publishretransmit,
13535
16
        &ett_btmesh_config_model_relayretransmit,
13536
16
        &ett_btmesh_config_model_network_transmit,
13537
16
        &ett_btmesh_config_model_element,
13538
16
        &ett_btmesh_config_model_model,
13539
16
        &ett_btmesh_config_model_vendor,
13540
16
        &ett_btmesh_config_composition_data_status_features,
13541
16
        &ett_btmesh_config_model_pub_app_index,
13542
16
        &ett_btmesh_config_model_addresses,
13543
16
        &ett_btmesh_config_model_netkey_list,
13544
16
        &ett_btmesh_config_model_appkey_list,
13545
16
        &ett_btmesh_config_model_net_index,
13546
16
        &ett_btmesh_config_model_app_index,
13547
16
        &ett_btmesh_config_heartbeat_publication_set_features,
13548
16
        &ett_btmesh_config_heartbeat_publication_status_features,
13549
16
        &ett_btmesh_config_model_fault_array,
13550
16
        &ett_btmesh_scene_register_status_scenes,
13551
16
        &ett_btmesh_scheduler_model_month,
13552
16
        &ett_btmesh_scheduler_model_day_of_week,
13553
16
        &ett_btmesh_scheduler_schedules,
13554
16
        &ett_btmesh_user_property_ids,
13555
16
        &ett_btmesh_admin_property_ids,
13556
16
        &ett_btmesh_manufacturer_property_ids,
13557
16
        &ett_btmesh_generic_client_property_ids,
13558
16
        &ett_btmesh_sensor_setting_property_ids,
13559
16
    };
13560
13561
16
    static ei_register_info ei[] = {
13562
16
        { &ei_btmesh_not_decoded_yet,{ "btmesh.not_decoded_yet", PI_PROTOCOL, PI_NOTE, "Not decoded yet", EXPFILL } },
13563
16
        { &ei_btmesh_unknown_payload,{ "btmesh.unknown_payload", PI_PROTOCOL, PI_ERROR, "Unknown Payload", EXPFILL } },
13564
16
    };
13565
13566
16
    expert_module_t* expert_btmesh;
13567
13568
16
    module_t *btmesh_module;
13569
13570
    /* UAT Net Key and App Key definitions */
13571
16
    static uat_field_t btmesh_uat_flds[] = {
13572
16
        UAT_FLD_CSTRING(uat_btmesh_records, network_key_string, "Network Key", "Network Key"),
13573
16
        UAT_FLD_CSTRING(uat_btmesh_records, application_key_string, "Application Key", "Application Key"),
13574
16
        UAT_FLD_CSTRING(uat_btmesh_records, ivindex_string, "IVindex", "IVindex"),
13575
16
        UAT_END_FIELDS
13576
16
    };
13577
13578
    /* UAT Device Key definition */
13579
16
    static uat_field_t btmesh_dev_key_uat_flds[] = {
13580
16
        UAT_FLD_CSTRING(uat_btmesh_dev_key_records, device_key_string, "Device Key", "Device Key"),
13581
16
        UAT_FLD_CSTRING(uat_btmesh_dev_key_records, src_string, "SRC Address", "SRC Address"),
13582
16
        UAT_END_FIELDS
13583
16
    };
13584
13585
    /* UAT Label UUID definition */
13586
16
    static uat_field_t btmesh_label_uuid_uat_flds[] = {
13587
16
        UAT_FLD_CSTRING(uat_btmesh_label_uuid_records, label_uuid_string, "Label UUID", "Label UUID"),
13588
16
        UAT_END_FIELDS
13589
16
    };
13590
13591
16
    proto_btmesh = proto_register_protocol("Bluetooth Mesh", "BT Mesh", "btmesh");
13592
13593
16
    proto_register_field_array(proto_btmesh, hf, array_length(hf));
13594
16
    proto_register_subtree_array(ett, array_length(ett));
13595
13596
16
    expert_btmesh = expert_register_protocol(proto_btmesh);
13597
16
    expert_register_field_array(expert_btmesh, ei, array_length(ei));
13598
13599
16
    btmesh_module = prefs_register_protocol_subtree("Bluetooth", proto_btmesh, NULL);
13600
13601
16
    prefs_register_static_text_preference(btmesh_module, "version",
13602
16
            "Bluetooth Mesh Profile v1.0",
13603
16
            "Version of protocol supported by this dissector.");
13604
13605
16
    btmesh_uat = uat_new("BTMesh Network and Application keys",
13606
16
        sizeof(uat_btmesh_record_t),    /* record size */
13607
16
        "btmesh_nw_keys",               /* filename */
13608
16
        true,                           /* from_profile */
13609
16
        &uat_btmesh_records,            /* data_ptr */
13610
16
        &num_btmesh_uat,                /* numitems_ptr */
13611
16
        UAT_AFFECTS_DISSECTION,         /* affects dissection of packets, but not set of named fields */
13612
16
        NULL,                           /* help */
13613
16
        uat_btmesh_record_copy_cb,      /* copy callback */
13614
16
        uat_btmesh_record_update_cb,    /* update callback */
13615
16
        uat_btmesh_record_free_cb,      /* free callback */
13616
16
        NULL,                           /* post update callback */
13617
16
        NULL,                           /* reset callback */
13618
16
        btmesh_uat_flds);               /* UAT field definitions */
13619
13620
16
    prefs_register_uat_preference(btmesh_module,
13621
16
        "mesh_keys_table",
13622
16
        "Mesh Keys",
13623
16
        "Configured Mesh Keys",
13624
16
        btmesh_uat);
13625
13626
16
    btmesh_dev_key_uat = uat_new("BTMesh Device keys",
13627
16
        sizeof(uat_btmesh_dev_key_record_t),  /* record size */
13628
16
        "btmesh_dev_keys",                    /* filename */
13629
16
        true,                                 /* from_profile */
13630
16
        &uat_btmesh_dev_key_records,          /* data_ptr */
13631
16
        &num_btmesh_dev_key_uat,              /* numitems_ptr */
13632
16
        UAT_AFFECTS_DISSECTION,               /* affects dissection of packets, but not set of named fields */
13633
16
        NULL,                                 /* help */
13634
16
        uat_btmesh_dev_key_record_copy_cb,    /* copy callback */
13635
16
        uat_btmesh_dev_key_record_update_cb,  /* update callback */
13636
16
        uat_btmesh_dev_key_record_free_cb,    /* free callback */
13637
16
        NULL,                                 /* post update callback */
13638
16
        NULL,                                 /* reset callback */
13639
16
        btmesh_dev_key_uat_flds);             /* UAT field definitions */
13640
13641
16
    prefs_register_uat_preference(btmesh_module,
13642
16
        "mesh_dev_key_table",
13643
16
        "Device Keys",
13644
16
        "Configured Mesh Device Keys",
13645
16
        btmesh_dev_key_uat);
13646
13647
16
    btmesh_label_uuid_uat = uat_new("BTMesh Label UUIDs",
13648
16
        sizeof(uat_btmesh_label_uuid_record_t),  /* record size */
13649
16
        "btmesh_label_uuids",                    /* filename */
13650
16
        true,                                    /* from_profile */
13651
16
        &uat_btmesh_label_uuid_records,          /* data_ptr */
13652
16
        &num_btmesh_label_uuid_uat,              /* numitems_ptr */
13653
16
        UAT_AFFECTS_DISSECTION,                  /* affects dissection of packets, but not set of named fields */
13654
16
        NULL,                                    /* help */
13655
16
        uat_btmesh_label_uuid_record_copy_cb,    /* copy callback */
13656
16
        uat_btmesh_label_uuid_record_update_cb,  /* update callback */
13657
16
        uat_btmesh_label_uuid_record_free_cb,    /* free callback */
13658
16
        NULL,                                    /* post update callback */
13659
16
        NULL,                                    /* reset callback */
13660
16
        btmesh_label_uuid_uat_flds);             /* UAT field definitions */
13661
13662
16
    prefs_register_uat_preference(btmesh_module,
13663
16
        "mesh_label_uuid_table",
13664
16
        "Label UUIDs",
13665
16
        "Configured Mesh Label UUIDs",
13666
16
        btmesh_label_uuid_uat);
13667
13668
16
    btmesh_model_vendor_dissector_table  = register_dissector_table("btmesh.model.vendor",  "BT Mesh model vendor", proto_btmesh, FT_UINT16, BASE_DEC);
13669
13670
16
    register_dissector("btmesh.msg", dissect_btmesh_msg, proto_btmesh);
13671
13672
16
    reassembly_table_register(&upper_transport_reassembly_table, &upper_transport_reassembly_table_functions);
13673
16
}
13674
13675
/*
13676
 * Editor modelines
13677
 *
13678
 * Local Variables:
13679
 * c-basic-offset: 4
13680
 * tab-width: 8
13681
 * indent-tabs-mode: nil
13682
 * End:
13683
 *
13684
 * ex: set shiftwidth=4 tabstop=8 expandtab:
13685
 * :indentSize=4:tabSize=8:noTabs=true:
13686
 */