Coverage Report

Created: 2026-05-14 06:28

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-zbee-zcl-se.c
Line
Count
Source
1
/* packet-zbee-zcl-se.c
2
 * Dissector routines for the ZigBee ZCL SE clusters like
3
 * Messaging
4
 * By Fabio Tarabelloni <fabio.tarabelloni@reloc.it>
5
 * Copyright 2013 RELOC s.r.l.
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
14
/*  Include Files */
15
#include "config.h"
16
17
18
#include <epan/packet.h>
19
#include <epan/expert.h>
20
#include <epan/to_str.h>
21
#include <epan/tfs.h>
22
#include <epan/unit_strings.h>
23
24
#include <wsutil/array.h>
25
26
#include "packet-zbee.h"
27
#include "packet-zbee-aps.h"
28
#include "packet-zbee-zcl.h"
29
#include "packet-zbee-security.h"
30
31
/* ########################################################################## */
32
/* #### common to all SE clusters ########################################### */
33
/* ########################################################################## */
34
35
#define ZBEE_ZCL_SE_ATTR_REPORT_PENDING                     0x00
36
#define ZBEE_ZCL_SE_ATTR_REPORT_COMPLETE                    0x01
37
38
static const value_string zbee_zcl_se_reporting_status_names[] = {
39
    { ZBEE_ZCL_SE_ATTR_REPORT_PENDING,                   "Pending" },
40
    { ZBEE_ZCL_SE_ATTR_REPORT_COMPLETE,                  "Complete" },
41
    { 0, NULL }
42
};
43
44
/**
45
 * These tables match Zigbee time values of 0x00000000 and 0xFFFFFFFF,
46
 * which have special meanings when used in a Smart Energy context
47
 */
48
static const time_value_string zero_is_invalid_strings[] = {
49
  { NSTIME_INIT_ZBEE(0x00000000), "Invalid" },
50
  { NSTIME_INIT_ZERO, NULL }
51
};
52
53
/**
54
 * XXX - we use thie for all Start Time fields; the 1.4a Zigbee Smart
55
 * Energy specification describes most, but not all, Start Time fields
56
 * as having 0xFFFFFFFF meaning "cancel a previous pending request".
57
 */
58
static const time_value_string now_or_cancel_strings[] = {
59
  { NSTIME_INIT_ZBEE(0x00000000), "Now" },
60
  { NSTIME_INIT_ZBEE(0xFFFFFFFF), "Cancel pending" },
61
  { NSTIME_INIT_ZERO, NULL }
62
};
63
64
/**
65
 *Dissect a ZigBee Date
66
 *
67
 *@param tvb pointer to buffer containing raw packet.
68
 *@param tree pointer to data tree Wireshark uses to display packet.
69
 *@param offset pointer to buffer offset
70
 *@param subtree_name name for the subtree
71
 *@param idx one of the ett_ array elements registered with proto_register_subtree_array()
72
 *@param hfindex_yy year field
73
 *@param hfindex_mm month field
74
 *@param hfindex_md month day field
75
 *@param hfindex_wd week day field
76
*/
77
static void dissect_zcl_date(tvbuff_t *tvb, proto_tree *tree, unsigned *offset,
78
                             int idx, const char* subtree_name, int hfindex_yy, int hfindex_mm, int hfindex_md,
79
                             int hfindex_wd)
80
0
{
81
0
    uint8_t yy;
82
0
    proto_tree* subtree;
83
84
    /* Add subtree */
85
0
    subtree = proto_tree_add_subtree(tree, tvb, *offset, 4, idx, NULL, subtree_name);
86
87
    /* Year */
88
0
    yy = tvb_get_uint8(tvb, *offset);
89
0
    proto_tree_add_uint(subtree, hfindex_yy, tvb, *offset, 1, yy + 1900);
90
0
    *offset += 1;
91
92
    /* Month */
93
0
    proto_tree_add_item(subtree, hfindex_mm, tvb, *offset, 1, ENC_NA);
94
0
    *offset += 1;
95
96
    /* Month Day */
97
0
    proto_tree_add_item(subtree, hfindex_md, tvb, *offset, 1, ENC_NA);
98
0
    *offset += 1;
99
100
    /* Week Day */
101
0
    proto_tree_add_item(subtree, hfindex_wd, tvb, *offset, 1, ENC_NA);
102
0
    *offset += 1;
103
0
} /*dissect_zcl_date*/
104
105
/*************************/
106
/* Global Variables      */
107
/*************************/
108
109
/* ########################################################################## */
110
/* #### (0x0025) KEEP-ALIVE CLUSTER ######################################### */
111
/* ########################################################################## */
112
113
/* Attributes */
114
#define zbee_zcl_keep_alive_attr_names_VALUE_STRING_LIST(XXX) \
115
    XXX(ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_BASE,                       0x0000, "Keep-Alive Base" ) \
116
    XXX(ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_JITTER,                     0x0001, "Keep-Alive Jitter" ) \
117
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_KEEP_ALIVE,      0xFFFE, "Attribute Reporting Status" )
118
119
VALUE_STRING_ENUM(zbee_zcl_keep_alive_attr_names);
120
VALUE_STRING_ARRAY(zbee_zcl_keep_alive_attr_names);
121
122
/*************************/
123
/* Function Declarations */
124
/*************************/
125
void proto_register_zbee_zcl_keep_alive(void);
126
void proto_reg_handoff_zbee_zcl_keep_alive(void);
127
128
/*************************/
129
/* Global Variables      */
130
/*************************/
131
132
/* Initialize the protocol and registered fields */
133
static int proto_zbee_zcl_keep_alive;
134
135
static int hf_zbee_zcl_keep_alive_attr_id;
136
static int hf_zbee_zcl_keep_alive_attr_reporting_status;
137
static int hf_zbee_zcl_keep_alive_base;
138
static int hf_zbee_zcl_keep_alive_jitter;
139
140
/* Initialize the subtree pointers */
141
static int ett_zbee_zcl_keep_alive;
142
143
/*************************/
144
/* Function Bodies       */
145
/*************************/
146
147
/**
148
 *This function is called by ZCL foundation dissector in order to decode
149
 *
150
 *@param tree pointer to data tree Wireshark uses to display packet.
151
 *@param tvb pointer to buffer containing raw packet.
152
 *@param offset pointer to buffer offset
153
 *@param attr_id attribute identifier
154
 *@param data_type attribute data type
155
 *@param client_attr ZCL client
156
*/
157
static void
158
dissect_zcl_keep_alive_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
159
326
{
160
    /* Dissect attribute data type and data */
161
326
    switch (attr_id) {
162
        /* applies to all SE clusters */
163
2
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_KEEP_ALIVE:
164
2
            proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_attr_reporting_status, tvb, *offset, 1, ENC_NA);
165
2
            *offset += 1;
166
2
            break;
167
168
126
        case ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_BASE:
169
126
            proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_base, tvb, *offset, 1, ENC_NA);
170
126
            *offset += 1;
171
126
            break;
172
173
7
        case ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_JITTER:
174
7
            proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_jitter, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
175
7
            *offset += 2;
176
7
            break;
177
178
191
        default: /* Catch all */
179
191
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
180
191
            break;
181
326
    }
182
326
} /*dissect_zcl_keep_alive_attr_data*/
183
184
185
/**
186
 *ZigBee ZCL Keep-Alive cluster dissector for wireshark.
187
 *
188
 *@param tvb pointer to buffer containing raw packet.
189
 *@param pinfo pointer to packet information fields
190
 *@param tree pointer to data tree Wireshark uses to display packet.
191
*/
192
static int
193
dissect_zbee_zcl_keep_alive(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
194
14
{
195
14
    return tvb_captured_length(tvb);
196
14
} /*dissect_zbee_zcl_keep_alive*/
197
198
/**
199
 *This function registers the ZCL Keep-Alive dissector
200
 *
201
*/
202
void
203
proto_register_zbee_zcl_keep_alive(void)
204
15
{
205
15
    static hf_register_info hf[] = {
206
207
15
        { &hf_zbee_zcl_keep_alive_attr_id,
208
15
            { "Attribute", "zbee_zcl_se.keep_alive.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_keep_alive_attr_names),
209
15
            0x0, NULL, HFILL } },
210
211
15
        { &hf_zbee_zcl_keep_alive_attr_reporting_status,                         /* common to all SE clusters */
212
15
            { "Attribute Reporting Status", "zbee_zcl_se.keep_alive.attr.attr_reporting_status",
213
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
214
215
15
        { &hf_zbee_zcl_keep_alive_base,
216
15
            { "Keep-Alive Base", "zbee_zcl_se.keep_alive.attr.base", FT_UINT8, BASE_DEC, NULL,
217
15
            0x00, NULL, HFILL } },
218
219
15
        { &hf_zbee_zcl_keep_alive_jitter,
220
15
            { "Keep-Alive Jitter", "zbee_zcl_se.keep_alive.attr.jitter", FT_UINT16, BASE_DEC, NULL,
221
15
            0x00, NULL, HFILL } },
222
15
    };
223
224
    /* ZCL Keep-Alive subtrees */
225
15
    int *ett[] = {
226
15
        &ett_zbee_zcl_keep_alive
227
15
    };
228
229
    /* Register the ZigBee ZCL Keep-Alive cluster protocol name and description */
230
15
    proto_zbee_zcl_keep_alive = proto_register_protocol("ZigBee ZCL Keep-Alive", "ZCL Keep-Alive", ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE);
231
15
    proto_register_field_array(proto_zbee_zcl_keep_alive, hf, array_length(hf));
232
15
    proto_register_subtree_array(ett, array_length(ett));
233
234
    /* Register the ZigBee ZCL Keep-Alive dissector. */
235
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE, dissect_zbee_zcl_keep_alive, proto_zbee_zcl_keep_alive);
236
15
} /*proto_register_zbee_zcl_keep_alive*/
237
238
/**
239
 *Hands off the ZCL Keep-Alive dissector.
240
 *
241
*/
242
void
243
proto_reg_handoff_zbee_zcl_keep_alive(void)
244
15
{
245
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE,
246
15
                            proto_zbee_zcl_keep_alive,
247
15
                            ett_zbee_zcl_keep_alive,
248
15
                            ZBEE_ZCL_CID_KEEP_ALIVE,
249
15
                            ZBEE_MFG_CODE_NONE,
250
15
                            hf_zbee_zcl_keep_alive_attr_id,
251
15
                            -1,
252
15
                            -1, -1,
253
15
                            dissect_zcl_keep_alive_attr_data
254
15
                         );
255
15
} /*proto_reg_handoff_zbee_zcl_keep_alive*/
256
257
/* ########################################################################## */
258
/* #### (0x0700) PRICE CLUSTER ############################################## */
259
/* ########################################################################## */
260
261
/* Attributes */
262
#define zbee_zcl_price_attr_server_names_VALUE_STRING_LIST(XXX) \
263
/* Tier Label (Delivered) Set */ \
264
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_PRICE_LABEL,              0x0000, "Tier 1 Price Label" ) \
265
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_PRICE_LABEL,              0x0001, "Tier 2 Price Label" ) \
266
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_PRICE_LABEL,              0x0002, "Tier 3 Price Label" ) \
267
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_PRICE_LABEL,              0x0003, "Tier 4 Price Label" ) \
268
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_PRICE_LABEL,              0x0004, "Tier 5 Price Label" ) \
269
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_PRICE_LABEL,              0x0005, "Tier 6 Price Label" ) \
270
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_PRICE_LABEL,              0x0006, "Tier 7 Price Label" ) \
271
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_PRICE_LABEL,              0x0007, "Tier 8 Price Label" ) \
272
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_PRICE_LABEL,              0x0008, "Tier 9 Price Label" ) \
273
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_PRICE_LABEL,             0x0009, "Tier 10 Price Label" ) \
274
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_PRICE_LABEL,             0x000A, "Tier 11 Price Label" ) \
275
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_PRICE_LABEL,             0x000B, "Tier 12 Price Label" ) \
276
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_PRICE_LABEL,             0x000C, "Tier 13 Price Label" ) \
277
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_PRICE_LABEL,             0x000D, "Tier 14 Price Label" ) \
278
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_PRICE_LABEL,             0x000E, "Tier 15 Price Label" ) \
279
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_16_PRICE_LABEL,             0x000F, "Tier 16 Price Label" ) \
280
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_17_PRICE_LABEL,             0x0010, "Tier 17 Price Label" ) \
281
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_18_PRICE_LABEL,             0x0011, "Tier 18 Price Label" ) \
282
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_19_PRICE_LABEL,             0x0012, "Tier 19 Price Label" ) \
283
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_20_PRICE_LABEL,             0x0013, "Tier 20 Price Label" ) \
284
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_21_PRICE_LABEL,             0x0014, "Tier 21 Price Label" ) \
285
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_22_PRICE_LABEL,             0x0015, "Tier 22 Price Label" ) \
286
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_23_PRICE_LABEL,             0x0016, "Tier 23 Price Label" ) \
287
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_24_PRICE_LABEL,             0x0017, "Tier 24 Price Label" ) \
288
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_25_PRICE_LABEL,             0x0018, "Tier 25 Price Label" ) \
289
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_26_PRICE_LABEL,             0x0019, "Tier 26 Price Label" ) \
290
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_27_PRICE_LABEL,             0x001A, "Tier 27 Price Label" ) \
291
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_28_PRICE_LABEL,             0x001B, "Tier 28 Price Label" ) \
292
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_29_PRICE_LABEL,             0x001C, "Tier 29 Price Label" ) \
293
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_30_PRICE_LABEL,             0x001D, "Tier 30 Price Label" ) \
294
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_31_PRICE_LABEL,             0x001E, "Tier 31 Price Label" ) \
295
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_32_PRICE_LABEL,             0x001F, "Tier 32 Price Label" ) \
296
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_33_PRICE_LABEL,             0x0020, "Tier 33 Price Label" ) \
297
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_34_PRICE_LABEL,             0x0021, "Tier 34 Price Label" ) \
298
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_35_PRICE_LABEL,             0x0022, "Tier 35 Price Label" ) \
299
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_36_PRICE_LABEL,             0x0023, "Tier 36 Price Label" ) \
300
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_37_PRICE_LABEL,             0x0024, "Tier 37 Price Label" ) \
301
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_38_PRICE_LABEL,             0x0025, "Tier 38 Price Label" ) \
302
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_39_PRICE_LABEL,             0x0026, "Tier 39 Price Label" ) \
303
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_40_PRICE_LABEL,             0x0027, "Tier 40 Price Label" ) \
304
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_41_PRICE_LABEL,             0x0028, "Tier 41 Price Label" ) \
305
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_42_PRICE_LABEL,             0x0029, "Tier 42 Price Label" ) \
306
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_43_PRICE_LABEL,             0x002A, "Tier 43 Price Label" ) \
307
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_44_PRICE_LABEL,             0x002B, "Tier 44 Price Label" ) \
308
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_45_PRICE_LABEL,             0x002C, "Tier 45 Price Label" ) \
309
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_46_PRICE_LABEL,             0x002D, "Tier 46 Price Label" ) \
310
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_47_PRICE_LABEL,             0x002E, "Tier 47 Price Label" ) \
311
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_48_PRICE_LABEL,             0x002F, "Tier 48 Price Label" ) \
312
/* Block Threshold (Delivered) Set */ \
313
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_1_THRESHOLD,               0x0100, "Block 1 Threshold" ) \
314
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_2_THRESHOLD,               0x0101, "Block 2 Threshold" ) \
315
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_3_THRESHOLD,               0x0102, "Block 3 Threshold" ) \
316
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_4_THRESHOLD,               0x0103, "Block 4 Threshold" ) \
317
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_5_THRESHOLD,               0x0104, "Block 5 Threshold" ) \
318
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_6_THRESHOLD,               0x0105, "Block 6 Threshold" ) \
319
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_7_THRESHOLD,               0x0106, "Block 7 Threshold" ) \
320
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_8_THRESHOLD,               0x0107, "Block 8 Threshold" ) \
321
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_9_THRESHOLD,               0x0108, "Block 9 Threshold" ) \
322
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_10_THRESHOLD,              0x0109, "Block 10 Threshold" ) \
323
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_11_THRESHOLD,              0x010A, "Block 11 Threshold" ) \
324
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_12_THRESHOLD,              0x010B, "Block 12 Threshold" ) \
325
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_13_THRESHOLD,              0x010C, "Block 13 Threshold" ) \
326
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_14_THRESHOLD,              0x010D, "Block 14 Threshold" ) \
327
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_15_THRESHOLD,              0x010E, "Block 15 Threshold" ) \
328
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_THRESHOLD_COUNT,           0x010F, "Block Threshold Count" ) \
329
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_1_THRESHOLD,        0x0110, "Tier 1 Block 1 Threshold" ) \
330
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_2_THRESHOLD,        0x0111, "Tier 1 Block 2 Threshold" ) \
331
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_3_THRESHOLD,        0x0112, "Tier 1 Block 3 Threshold" ) \
332
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_4_THRESHOLD,        0x0113, "Tier 1 Block 4 Threshold" ) \
333
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_5_THRESHOLD,        0x0114, "Tier 1 Block 5 Threshold" ) \
334
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_6_THRESHOLD,        0x0115, "Tier 1 Block 6 Threshold" ) \
335
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_7_THRESHOLD,        0x0116, "Tier 1 Block 7 Threshold" ) \
336
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_8_THRESHOLD,        0x0117, "Tier 1 Block 8 Threshold" ) \
337
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_9_THRESHOLD,        0x0118, "Tier 1 Block 9 Threshold" ) \
338
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_10_THRESHOLD,       0x0119, "Tier 1 Block 10 Threshold" ) \
339
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_11_THRESHOLD,       0x011A, "Tier 1 Block 11 Threshold" ) \
340
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_12_THRESHOLD,       0x011B, "Tier 1 Block 12 Threshold" ) \
341
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_13_THRESHOLD,       0x011C, "Tier 1 Block 13 Threshold" ) \
342
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_14_THRESHOLD,       0x011D, "Tier 1 Block 14 Threshold" ) \
343
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_15_THRESHOLD,       0x011E, "Tier 1 Block 15 Threshold" ) \
344
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_THRESHOLD_COUNT,    0x011F, "Tier 1 Block Threshold Count" ) \
345
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_1_THRESHOLD,        0x0120, "Tier 2 Block 1 Threshold" ) \
346
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_2_THRESHOLD,        0x0121, "Tier 2 Block 2 Threshold" ) \
347
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_3_THRESHOLD,        0x0122, "Tier 2 Block 3 Threshold" ) \
348
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_4_THRESHOLD,        0x0123, "Tier 2 Block 4 Threshold" ) \
349
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_5_THRESHOLD,        0x0124, "Tier 2 Block 5 Threshold" ) \
350
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_6_THRESHOLD,        0x0125, "Tier 2 Block 6 Threshold" ) \
351
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_7_THRESHOLD,        0x0126, "Tier 2 Block 7 Threshold" ) \
352
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_8_THRESHOLD,        0x0127, "Tier 2 Block 8 Threshold" ) \
353
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_9_THRESHOLD,        0x0128, "Tier 2 Block 9 Threshold" ) \
354
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_10_THRESHOLD,       0x0129, "Tier 2 Block 10 Threshold" ) \
355
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_11_THRESHOLD,       0x012A, "Tier 2 Block 11 Threshold" ) \
356
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_12_THRESHOLD,       0x012B, "Tier 2 Block 12 Threshold" ) \
357
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_13_THRESHOLD,       0x012C, "Tier 2 Block 13 Threshold" ) \
358
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_14_THRESHOLD,       0x012D, "Tier 2 Block 14 Threshold" ) \
359
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_15_THRESHOLD,       0x012E, "Tier 2 Block 15 Threshold" ) \
360
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_THRESHOLD_COUNT,    0x012F, "Tier 2 Block Threshold Count" ) \
361
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_1_THRESHOLD,        0x0130, "Tier 3 Block 1 Threshold" ) \
362
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_2_THRESHOLD,        0x0131, "Tier 3 Block 2 Threshold" ) \
363
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_3_THRESHOLD,        0x0132, "Tier 3 Block 3 Threshold" ) \
364
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_4_THRESHOLD,        0x0133, "Tier 3 Block 4 Threshold" ) \
365
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_5_THRESHOLD,        0x0134, "Tier 3 Block 5 Threshold" ) \
366
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_6_THRESHOLD,        0x0135, "Tier 3 Block 6 Threshold" ) \
367
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_7_THRESHOLD,        0x0136, "Tier 3 Block 7 Threshold" ) \
368
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_8_THRESHOLD,        0x0137, "Tier 3 Block 8 Threshold" ) \
369
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_9_THRESHOLD,        0x0138, "Tier 3 Block 9 Threshold" ) \
370
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_10_THRESHOLD,       0x0139, "Tier 3 Block 10 Threshold" ) \
371
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_11_THRESHOLD,       0x013A, "Tier 3 Block 11 Threshold" ) \
372
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_12_THRESHOLD,       0x013B, "Tier 3 Block 12 Threshold" ) \
373
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_13_THRESHOLD,       0x013C, "Tier 3 Block 13 Threshold" ) \
374
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_14_THRESHOLD,       0x013D, "Tier 3 Block 14 Threshold" ) \
375
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_15_THRESHOLD,       0x013E, "Tier 3 Block 15 Threshold" ) \
376
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_THRESHOLD_COUNT,    0x013F, "Tier 3 Block Threshold Count" ) \
377
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_1_THRESHOLD,        0x0140, "Tier 4 Block 1 Threshold" ) \
378
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_2_THRESHOLD,        0x0141, "Tier 4 Block 2 Threshold" ) \
379
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_3_THRESHOLD,        0x0142, "Tier 4 Block 3 Threshold" ) \
380
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_4_THRESHOLD,        0x0143, "Tier 4 Block 4 Threshold" ) \
381
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_5_THRESHOLD,        0x0144, "Tier 4 Block 5 Threshold" ) \
382
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_6_THRESHOLD,        0x0145, "Tier 4 Block 6 Threshold" ) \
383
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_7_THRESHOLD,        0x0146, "Tier 4 Block 7 Threshold" ) \
384
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_8_THRESHOLD,        0x0147, "Tier 4 Block 8 Threshold" ) \
385
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_9_THRESHOLD,        0x0148, "Tier 4 Block 9 Threshold" ) \
386
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_10_THRESHOLD,       0x0149, "Tier 4 Block 10 Threshold" ) \
387
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_11_THRESHOLD,       0x014A, "Tier 4 Block 11 Threshold" ) \
388
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_12_THRESHOLD,       0x014B, "Tier 4 Block 12 Threshold" ) \
389
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_13_THRESHOLD,       0x014C, "Tier 4 Block 13 Threshold" ) \
390
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_14_THRESHOLD,       0x014D, "Tier 4 Block 14 Threshold" ) \
391
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_15_THRESHOLD,       0x014E, "Tier 4 Block 15 Threshold" ) \
392
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_THRESHOLD_COUNT,    0x014F, "Tier 4 Block Threshold Count" ) \
393
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_1_THRESHOLD,        0x0150, "Tier 5 Block 1 Threshold" ) \
394
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_2_THRESHOLD,        0x0151, "Tier 5 Block 2 Threshold" ) \
395
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_3_THRESHOLD,        0x0152, "Tier 5 Block 3 Threshold" ) \
396
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_4_THRESHOLD,        0x0153, "Tier 5 Block 4 Threshold" ) \
397
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_5_THRESHOLD,        0x0154, "Tier 5 Block 5 Threshold" ) \
398
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_6_THRESHOLD,        0x0155, "Tier 5 Block 6 Threshold" ) \
399
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_7_THRESHOLD,        0x0156, "Tier 5 Block 7 Threshold" ) \
400
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_8_THRESHOLD,        0x0157, "Tier 5 Block 8 Threshold" ) \
401
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_9_THRESHOLD,        0x0158, "Tier 5 Block 9 Threshold" ) \
402
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_10_THRESHOLD,       0x0159, "Tier 5 Block 10 Threshold" ) \
403
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_11_THRESHOLD,       0x015A, "Tier 5 Block 11 Threshold" ) \
404
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_12_THRESHOLD,       0x015B, "Tier 5 Block 12 Threshold" ) \
405
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_13_THRESHOLD,       0x015C, "Tier 5 Block 13 Threshold" ) \
406
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_14_THRESHOLD,       0x015D, "Tier 5 Block 14 Threshold" ) \
407
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_15_THRESHOLD,       0x015E, "Tier 5 Block 15 Threshold" ) \
408
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_THRESHOLD_COUNT,    0x015F, "Tier 5 Block Threshold Count" ) \
409
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_1_THRESHOLD,        0x0160, "Tier 6 Block 1 Threshold" ) \
410
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_2_THRESHOLD,        0x0161, "Tier 6 Block 2 Threshold" ) \
411
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_3_THRESHOLD,        0x0162, "Tier 6 Block 3 Threshold" ) \
412
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_4_THRESHOLD,        0x0163, "Tier 6 Block 4 Threshold" ) \
413
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_5_THRESHOLD,        0x0164, "Tier 6 Block 5 Threshold" ) \
414
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_6_THRESHOLD,        0x0165, "Tier 6 Block 6 Threshold" ) \
415
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_7_THRESHOLD,        0x0166, "Tier 6 Block 7 Threshold" ) \
416
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_8_THRESHOLD,        0x0167, "Tier 6 Block 8 Threshold" ) \
417
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_9_THRESHOLD,        0x0168, "Tier 6 Block 9 Threshold" ) \
418
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_10_THRESHOLD,       0x0169, "Tier 6 Block 10 Threshold" ) \
419
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_11_THRESHOLD,       0x016A, "Tier 6 Block 11 Threshold" ) \
420
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_12_THRESHOLD,       0x016B, "Tier 6 Block 12 Threshold" ) \
421
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_13_THRESHOLD,       0x016C, "Tier 6 Block 13 Threshold" ) \
422
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_14_THRESHOLD,       0x016D, "Tier 6 Block 14 Threshold" ) \
423
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_15_THRESHOLD,       0x016E, "Tier 6 Block 15 Threshold" ) \
424
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_THRESHOLD_COUNT,    0x016F, "Tier 6 Block Threshold Count" ) \
425
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_1_THRESHOLD,        0x0170, "Tier 7 Block 1 Threshold" ) \
426
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_2_THRESHOLD,        0x0171, "Tier 7 Block 2 Threshold" ) \
427
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_3_THRESHOLD,        0x0172, "Tier 7 Block 3 Threshold" ) \
428
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_4_THRESHOLD,        0x0173, "Tier 7 Block 4 Threshold" ) \
429
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_5_THRESHOLD,        0x0174, "Tier 7 Block 5 Threshold" ) \
430
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_6_THRESHOLD,        0x0175, "Tier 7 Block 6 Threshold" ) \
431
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_7_THRESHOLD,        0x0176, "Tier 7 Block 7 Threshold" ) \
432
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_8_THRESHOLD,        0x0177, "Tier 7 Block 8 Threshold" ) \
433
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_9_THRESHOLD,        0x0178, "Tier 7 Block 9 Threshold" ) \
434
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_10_THRESHOLD,       0x0179, "Tier 7 Block 10 Threshold" ) \
435
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_11_THRESHOLD,       0x017A, "Tier 7 Block 11 Threshold" ) \
436
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_12_THRESHOLD,       0x017B, "Tier 7 Block 12 Threshold" ) \
437
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_13_THRESHOLD,       0x017C, "Tier 7 Block 13 Threshold" ) \
438
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_14_THRESHOLD,       0x017D, "Tier 7 Block 14 Threshold" ) \
439
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_15_THRESHOLD,       0x017E, "Tier 7 Block 15 Threshold" ) \
440
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_THRESHOLD_COUNT,    0x017F, "Tier 7 Block Threshold Count" ) \
441
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_1_THRESHOLD,        0x0180, "Tier 8 Block 1 Threshold" ) \
442
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_2_THRESHOLD,        0x0181, "Tier 8 Block 2 Threshold" ) \
443
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_3_THRESHOLD,        0x0182, "Tier 8 Block 3 Threshold" ) \
444
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_4_THRESHOLD,        0x0183, "Tier 8 Block 4 Threshold" ) \
445
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_5_THRESHOLD,        0x0184, "Tier 8 Block 5 Threshold" ) \
446
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_6_THRESHOLD,        0x0185, "Tier 8 Block 6 Threshold" ) \
447
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_7_THRESHOLD,        0x0186, "Tier 8 Block 7 Threshold" ) \
448
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_8_THRESHOLD,        0x0187, "Tier 8 Block 8 Threshold" ) \
449
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_9_THRESHOLD,        0x0188, "Tier 8 Block 9 Threshold" ) \
450
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_10_THRESHOLD,       0x0189, "Tier 8 Block 10 Threshold" ) \
451
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_11_THRESHOLD,       0x018A, "Tier 8 Block 11 Threshold" ) \
452
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_12_THRESHOLD,       0x018B, "Tier 8 Block 12 Threshold" ) \
453
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_13_THRESHOLD,       0x018C, "Tier 8 Block 13 Threshold" ) \
454
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_14_THRESHOLD,       0x018D, "Tier 8 Block 14 Threshold" ) \
455
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_15_THRESHOLD,       0x018E, "Tier 8 Block 15 Threshold" ) \
456
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_THRESHOLD_COUNT,    0x018F, "Tier 8 Block Threshold Count" ) \
457
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_1_THRESHOLD,        0x0190, "Tier 9 Block 1 Threshold" ) \
458
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_2_THRESHOLD,        0x0191, "Tier 9 Block 2 Threshold" ) \
459
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_3_THRESHOLD,        0x0192, "Tier 9 Block 3 Threshold" ) \
460
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_4_THRESHOLD,        0x0193, "Tier 9 Block 4 Threshold" ) \
461
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_5_THRESHOLD,        0x0194, "Tier 9 Block 5 Threshold" ) \
462
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_6_THRESHOLD,        0x0195, "Tier 9 Block 6 Threshold" ) \
463
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_7_THRESHOLD,        0x0196, "Tier 9 Block 7 Threshold" ) \
464
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_8_THRESHOLD,        0x0197, "Tier 9 Block 8 Threshold" ) \
465
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_9_THRESHOLD,        0x0198, "Tier 9 Block 9 Threshold" ) \
466
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_10_THRESHOLD,       0x0199, "Tier 9 Block 10 Threshold" ) \
467
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_11_THRESHOLD,       0x019A, "Tier 9 Block 11 Threshold" ) \
468
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_12_THRESHOLD,       0x019B, "Tier 9 Block 12 Threshold" ) \
469
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_13_THRESHOLD,       0x019C, "Tier 9 Block 13 Threshold" ) \
470
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_14_THRESHOLD,       0x019D, "Tier 9 Block 14 Threshold" ) \
471
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_15_THRESHOLD,       0x019E, "Tier 9 Block 15 Threshold" ) \
472
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_THRESHOLD_COUNT,    0x019F, "Tier 9 Block Threshold Count" ) \
473
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_1_THRESHOLD,       0x01A0, "Tier 10 Block 1 Threshold" ) \
474
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_2_THRESHOLD,       0x01A1, "Tier 10 Block 2 Threshold" ) \
475
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_3_THRESHOLD,       0x01A2, "Tier 10 Block 3 Threshold" ) \
476
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_4_THRESHOLD,       0x01A3, "Tier 10 Block 4 Threshold" ) \
477
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_5_THRESHOLD,       0x01A4, "Tier 10 Block 5 Threshold" ) \
478
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_6_THRESHOLD,       0x01A5, "Tier 10 Block 6 Threshold" ) \
479
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_7_THRESHOLD,       0x01A6, "Tier 10 Block 7 Threshold" ) \
480
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_8_THRESHOLD,       0x01A7, "Tier 10 Block 8 Threshold" ) \
481
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_9_THRESHOLD,       0x01A8, "Tier 10 Block 9 Threshold" ) \
482
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_10_THRESHOLD,      0x01A9, "Tier 10 Block 10 Threshold" ) \
483
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_11_THRESHOLD,      0x01AA, "Tier 10 Block 11 Threshold" ) \
484
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_12_THRESHOLD,      0x01AB, "Tier 10 Block 12 Threshold" ) \
485
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_13_THRESHOLD,      0x01AC, "Tier 10 Block 13 Threshold" ) \
486
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_14_THRESHOLD,      0x01AD, "Tier 10 Block 14 Threshold" ) \
487
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_15_THRESHOLD,      0x01AE, "Tier 10 Block 15 Threshold" ) \
488
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_THRESHOLD_COUNT,   0x01AF, "Tier 10 Block Threshold Count" ) \
489
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_1_THRESHOLD,       0x01B0, "Tier 11 Block 1 Threshold" ) \
490
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_2_THRESHOLD,       0x01B1, "Tier 11 Block 2 Threshold" ) \
491
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_3_THRESHOLD,       0x01B2, "Tier 11 Block 3 Threshold" ) \
492
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_4_THRESHOLD,       0x01B3, "Tier 11 Block 4 Threshold" ) \
493
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_5_THRESHOLD,       0x01B4, "Tier 11 Block 5 Threshold" ) \
494
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_6_THRESHOLD,       0x01B5, "Tier 11 Block 6 Threshold" ) \
495
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_7_THRESHOLD,       0x01B6, "Tier 11 Block 7 Threshold" ) \
496
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_8_THRESHOLD,       0x01B7, "Tier 11 Block 8 Threshold" ) \
497
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_9_THRESHOLD,       0x01B8, "Tier 11 Block 9 Threshold" ) \
498
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_10_THRESHOLD,      0x01B9, "Tier 11 Block 10 Threshold" ) \
499
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_11_THRESHOLD,      0x01BA, "Tier 11 Block 11 Threshold" ) \
500
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_12_THRESHOLD,      0x01BB, "Tier 11 Block 12 Threshold" ) \
501
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_13_THRESHOLD,      0x01BC, "Tier 11 Block 13 Threshold" ) \
502
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_14_THRESHOLD,      0x01BD, "Tier 11 Block 14 Threshold" ) \
503
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_15_THRESHOLD,      0x01BE, "Tier 11 Block 15 Threshold" ) \
504
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_THRESHOLD_COUNT,   0x01BF, "Tier 11 Block Threshold Count" ) \
505
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_1_THRESHOLD,       0x01C0, "Tier 12 Block 1 Threshold" ) \
506
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_2_THRESHOLD,       0x01C1, "Tier 12 Block 2 Threshold" ) \
507
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_3_THRESHOLD,       0x01C2, "Tier 12 Block 3 Threshold" ) \
508
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_4_THRESHOLD,       0x01C3, "Tier 12 Block 4 Threshold" ) \
509
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_5_THRESHOLD,       0x01C4, "Tier 12 Block 5 Threshold" ) \
510
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_6_THRESHOLD,       0x01C5, "Tier 12 Block 6 Threshold" ) \
511
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_7_THRESHOLD,       0x01C6, "Tier 12 Block 7 Threshold" ) \
512
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_8_THRESHOLD,       0x01C7, "Tier 12 Block 8 Threshold" ) \
513
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_9_THRESHOLD,       0x01C8, "Tier 12 Block 9 Threshold" ) \
514
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_10_THRESHOLD,      0x01C9, "Tier 12 Block 10 Threshold" ) \
515
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_11_THRESHOLD,      0x01CA, "Tier 12 Block 11 Threshold" ) \
516
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_12_THRESHOLD,      0x01CB, "Tier 12 Block 12 Threshold" ) \
517
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_13_THRESHOLD,      0x01CC, "Tier 12 Block 13 Threshold" ) \
518
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_14_THRESHOLD,      0x01CD, "Tier 12 Block 14 Threshold" ) \
519
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_15_THRESHOLD,      0x01CE, "Tier 12 Block 15 Threshold" ) \
520
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_THRESHOLD_COUNT,   0x01CF, "Tier 12 Block Threshold Count" ) \
521
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_1_THRESHOLD,       0x01D0, "Tier 13 Block 1 Threshold" ) \
522
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_2_THRESHOLD,       0x01D1, "Tier 13 Block 2 Threshold" ) \
523
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_3_THRESHOLD,       0x01D2, "Tier 13 Block 3 Threshold" ) \
524
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_4_THRESHOLD,       0x01D3, "Tier 13 Block 4 Threshold" ) \
525
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_5_THRESHOLD,       0x01D4, "Tier 13 Block 5 Threshold" ) \
526
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_6_THRESHOLD,       0x01D5, "Tier 13 Block 6 Threshold" ) \
527
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_7_THRESHOLD,       0x01D6, "Tier 13 Block 7 Threshold" ) \
528
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_8_THRESHOLD,       0x01D7, "Tier 13 Block 8 Threshold" ) \
529
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_9_THRESHOLD,       0x01D8, "Tier 13 Block 9 Threshold" ) \
530
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_10_THRESHOLD,      0x01D9, "Tier 13 Block 10 Threshold" ) \
531
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_11_THRESHOLD,      0x01DA, "Tier 13 Block 11 Threshold" ) \
532
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_12_THRESHOLD,      0x01DB, "Tier 13 Block 12 Threshold" ) \
533
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_13_THRESHOLD,      0x01DC, "Tier 13 Block 13 Threshold" ) \
534
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_14_THRESHOLD,      0x01DD, "Tier 13 Block 14 Threshold" ) \
535
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_15_THRESHOLD,      0x01DE, "Tier 13 Block 15 Threshold" ) \
536
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_THRESHOLD_COUNT,   0x01DF, "Tier 13 Block Threshold Count" ) \
537
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_1_THRESHOLD,       0x01E0, "Tier 14 Block 1 Threshold" ) \
538
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_2_THRESHOLD,       0x01E1, "Tier 14 Block 2 Threshold" ) \
539
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_3_THRESHOLD,       0x01E2, "Tier 14 Block 3 Threshold" ) \
540
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_4_THRESHOLD,       0x01E3, "Tier 14 Block 4 Threshold" ) \
541
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_5_THRESHOLD,       0x01E4, "Tier 14 Block 5 Threshold" ) \
542
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_6_THRESHOLD,       0x01E5, "Tier 14 Block 6 Threshold" ) \
543
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_7_THRESHOLD,       0x01E6, "Tier 14 Block 7 Threshold" ) \
544
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_8_THRESHOLD,       0x01E7, "Tier 14 Block 8 Threshold" ) \
545
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_9_THRESHOLD,       0x01E8, "Tier 14 Block 9 Threshold" ) \
546
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_10_THRESHOLD,      0x01E9, "Tier 14 Block 10 Threshold" ) \
547
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_11_THRESHOLD,      0x01EA, "Tier 14 Block 11 Threshold" ) \
548
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_12_THRESHOLD,      0x01EB, "Tier 14 Block 12 Threshold" ) \
549
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_13_THRESHOLD,      0x01EC, "Tier 14 Block 13 Threshold" ) \
550
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_14_THRESHOLD,      0x01ED, "Tier 14 Block 14 Threshold" ) \
551
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_15_THRESHOLD,      0x01EE, "Tier 14 Block 15 Threshold" ) \
552
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_THRESHOLD_COUNT,   0x01EF, "Tier 14 Block Threshold Count" ) \
553
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_1_THRESHOLD,       0x01F0, "Tier 15 Block 1 Threshold" ) \
554
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_2_THRESHOLD,       0x01F1, "Tier 15 Block 2 Threshold" ) \
555
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_3_THRESHOLD,       0x01F2, "Tier 15 Block 3 Threshold" ) \
556
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_4_THRESHOLD,       0x01F3, "Tier 15 Block 4 Threshold" ) \
557
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_5_THRESHOLD,       0x01F4, "Tier 15 Block 5 Threshold" ) \
558
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_6_THRESHOLD,       0x01F5, "Tier 15 Block 6 Threshold" ) \
559
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_7_THRESHOLD,       0x01F6, "Tier 15 Block 7 Threshold" ) \
560
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_8_THRESHOLD,       0x01F7, "Tier 15 Block 8 Threshold" ) \
561
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_9_THRESHOLD,       0x01F8, "Tier 15 Block 9 Threshold" ) \
562
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_10_THRESHOLD,      0x01F9, "Tier 15 Block 10 Threshold" ) \
563
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_11_THRESHOLD,      0x01FA, "Tier 15 Block 11 Threshold" ) \
564
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_12_THRESHOLD,      0x01FB, "Tier 15 Block 12 Threshold" ) \
565
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_13_THRESHOLD,      0x01FC, "Tier 15 Block 13 Threshold" ) \
566
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_14_THRESHOLD,      0x01FD, "Tier 15 Block 14 Threshold" ) \
567
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_15_THRESHOLD,      0x01FE, "Tier 15 Block 15 Threshold" ) \
568
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_THRESHOLD_COUNT,   0x01FF, "Tier 15 Block Threshold Count" ) \
569
/* Block Period (Delivered) Set */ \
570
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_START_OF_BLOCK_PERIOD,           0x0200, "Start of Block Period" ) \
571
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_PERIOD_DURATION,           0x0201, "Block Period Duration" ) \
572
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_THRESHOLD_MULTIPLIER,            0x0202, "Threshold Multiplier" ) \
573
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_THRESHOLD_DIVISOR,               0x0203, "Threshold Divisor" ) \
574
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_PERIOD_DURATION_TYPE,      0x0204, "Block Period Duration Type" ) \
575
/* Commodity */ \
576
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_COMMODITY_TYPE,                  0x0300, "Commodity Type" ) \
577
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_STANDING_CHARGE,                 0x0301, "Standing Charge" ) \
578
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CONVERSION_FACTOR,               0x0302, "Conversion Factor" ) \
579
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT,0x0303, "Conversion Factor TrailingDigit" ) \
580
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE,                 0x0304, "Calorific Value" ) \
581
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE_UNIT,            0x0305, "Calorific Value Unit" ) \
582
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT,  0x0306, "Calorific Value Trailing Digit" ) \
583
/* Block Price Information (Delivered) */ \
584
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_1_PRICE,           0x0400, "No Tier Block 1 Price" ) \
585
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_2_PRICE,           0x0401, "No Tier Block 2 Price" ) \
586
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_3_PRICE,           0x0402, "No Tier Block 3 Price" ) \
587
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_4_PRICE,           0x0403, "No Tier Block 4 Price" ) \
588
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_5_PRICE,           0x0404, "No Tier Block 5 Price" ) \
589
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_6_PRICE,           0x0405, "No Tier Block 6 Price" ) \
590
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_7_PRICE,           0x0406, "No Tier Block 7 Price" ) \
591
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_8_PRICE,           0x0407, "No Tier Block 8 Price" ) \
592
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_9_PRICE,           0x0408, "No Tier Block 9 Price" ) \
593
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_10_PRICE,          0x0409, "No Tier Block 10 Price" ) \
594
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_11_PRICE,          0x040A, "No Tier Block 11 Price" ) \
595
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_12_PRICE,          0x040B, "No Tier Block 12 Price" ) \
596
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_13_PRICE,          0x040C, "No Tier Block 13 Price" ) \
597
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_14_PRICE,          0x040D, "No Tier Block 14 Price" ) \
598
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_15_PRICE,          0x040E, "No Tier Block 15 Price" ) \
599
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_16_PRICE,          0x040F, "No Tier Block 16 Price" ) \
600
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_1_PRICE,            0x0410, "Tier 1 Block 1 Price" ) \
601
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_2_PRICE,            0x0411, "Tier 1 Block 2 Price" ) \
602
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_3_PRICE,            0x0412, "Tier 1 Block 3 Price" ) \
603
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_4_PRICE,            0x0413, "Tier 1 Block 4 Price" ) \
604
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_5_PRICE,            0x0414, "Tier 1 Block 5 Price" ) \
605
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_6_PRICE,            0x0415, "Tier 1 Block 6 Price" ) \
606
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_7_PRICE,            0x0416, "Tier 1 Block 7 Price" ) \
607
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_8_PRICE,            0x0417, "Tier 1 Block 8 Price" ) \
608
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_9_PRICE,            0x0418, "Tier 1 Block 9 Price" ) \
609
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_10_PRICE,           0x0419, "Tier 1 Block 10 Price" ) \
610
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_11_PRICE,           0x041A, "Tier 1 Block 11 Price" ) \
611
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_12_PRICE,           0x041B, "Tier 1 Block 12 Price" ) \
612
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_13_PRICE,           0x041C, "Tier 1 Block 13 Price" ) \
613
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_14_PRICE,           0x041D, "Tier 1 Block 14 Price" ) \
614
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_15_PRICE,           0x041E, "Tier 1 Block 15 Price" ) \
615
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_16_PRICE,           0x041F, "Tier 1 Block 16 Price" ) \
616
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_1_PRICE,            0x0420, "Tier 2 Block 1 Price" ) \
617
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_2_PRICE,            0x0421, "Tier 2 Block 2 Price" ) \
618
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_3_PRICE,            0x0422, "Tier 2 Block 3 Price" ) \
619
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_4_PRICE,            0x0423, "Tier 2 Block 4 Price" ) \
620
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_5_PRICE,            0x0424, "Tier 2 Block 5 Price" ) \
621
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_6_PRICE,            0x0425, "Tier 2 Block 6 Price" ) \
622
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_7_PRICE,            0x0426, "Tier 2 Block 7 Price" ) \
623
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_8_PRICE,            0x0427, "Tier 2 Block 8 Price" ) \
624
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_9_PRICE,            0x0428, "Tier 2 Block 9 Price" ) \
625
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_10_PRICE,           0x0429, "Tier 2 Block 10 Price" ) \
626
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_11_PRICE,           0x042A, "Tier 2 Block 11 Price" ) \
627
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_12_PRICE,           0x042B, "Tier 2 Block 12 Price" ) \
628
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_13_PRICE,           0x042C, "Tier 2 Block 13 Price" ) \
629
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_14_PRICE,           0x042D, "Tier 2 Block 14 Price" ) \
630
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_15_PRICE,           0x042E, "Tier 2 Block 15 Price" ) \
631
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_16_PRICE,           0x042F, "Tier 2 Block 16 Price" ) \
632
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_1_PRICE,            0x0430, "Tier 3 Block 1 Price" ) \
633
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_2_PRICE,            0x0431, "Tier 3 Block 2 Price" ) \
634
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_3_PRICE,            0x0432, "Tier 3 Block 3 Price" ) \
635
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_4_PRICE,            0x0433, "Tier 3 Block 4 Price" ) \
636
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_5_PRICE,            0x0434, "Tier 3 Block 5 Price" ) \
637
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_6_PRICE,            0x0435, "Tier 3 Block 6 Price" ) \
638
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_7_PRICE,            0x0436, "Tier 3 Block 7 Price" ) \
639
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_8_PRICE,            0x0437, "Tier 3 Block 8 Price" ) \
640
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_9_PRICE,            0x0438, "Tier 3 Block 9 Price" ) \
641
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_10_PRICE,           0x0439, "Tier 3 Block 10 Price" ) \
642
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_11_PRICE,           0x043A, "Tier 3 Block 11 Price" ) \
643
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_12_PRICE,           0x043B, "Tier 3 Block 12 Price" ) \
644
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_13_PRICE,           0x043C, "Tier 3 Block 13 Price" ) \
645
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_14_PRICE,           0x043D, "Tier 3 Block 14 Price" ) \
646
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_15_PRICE,           0x043E, "Tier 3 Block 15 Price" ) \
647
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_16_PRICE,           0x043F, "Tier 3 Block 16 Price" ) \
648
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_1_PRICE,            0x0440, "Tier 4 Block 1 Price" ) \
649
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_2_PRICE,            0x0441, "Tier 4 Block 2 Price" ) \
650
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_3_PRICE,            0x0442, "Tier 4 Block 3 Price" ) \
651
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_4_PRICE,            0x0443, "Tier 4 Block 4 Price" ) \
652
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_5_PRICE,            0x0444, "Tier 4 Block 5 Price" ) \
653
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_6_PRICE,            0x0445, "Tier 4 Block 6 Price" ) \
654
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_7_PRICE,            0x0446, "Tier 4 Block 7 Price" ) \
655
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_8_PRICE,            0x0447, "Tier 4 Block 8 Price" ) \
656
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_9_PRICE,            0x0448, "Tier 4 Block 9 Price" ) \
657
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_10_PRICE,           0x0449, "Tier 4 Block 10 Price" ) \
658
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_11_PRICE,           0x044A, "Tier 4 Block 11 Price" ) \
659
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_12_PRICE,           0x044B, "Tier 4 Block 12 Price" ) \
660
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_13_PRICE,           0x044C, "Tier 4 Block 13 Price" ) \
661
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_14_PRICE,           0x044D, "Tier 4 Block 14 Price" ) \
662
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_15_PRICE,           0x044E, "Tier 4 Block 15 Price" ) \
663
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_16_PRICE,           0x044F, "Tier 4 Block 16 Price" ) \
664
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_1_PRICE,            0x0450, "Tier 5 Block 1 Price" ) \
665
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_2_PRICE,            0x0451, "Tier 5 Block 2 Price" ) \
666
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_3_PRICE,            0x0452, "Tier 5 Block 3 Price" ) \
667
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_4_PRICE,            0x0453, "Tier 5 Block 4 Price" ) \
668
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_5_PRICE,            0x0454, "Tier 5 Block 5 Price" ) \
669
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_6_PRICE,            0x0455, "Tier 5 Block 6 Price" ) \
670
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_7_PRICE,            0x0456, "Tier 5 Block 7 Price" ) \
671
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_8_PRICE,            0x0457, "Tier 5 Block 8 Price" ) \
672
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_9_PRICE,            0x0458, "Tier 5 Block 9 Price" ) \
673
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_10_PRICE,           0x0459, "Tier 5 Block 10 Price" ) \
674
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_11_PRICE,           0x045A, "Tier 5 Block 11 Price" ) \
675
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_12_PRICE,           0x045B, "Tier 5 Block 12 Price" ) \
676
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_13_PRICE,           0x045C, "Tier 5 Block 13 Price" ) \
677
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_14_PRICE,           0x045D, "Tier 5 Block 14 Price" ) \
678
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_15_PRICE,           0x045E, "Tier 5 Block 15 Price" ) \
679
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_16_PRICE,           0x045F, "Tier 5 Block 16 Price" ) \
680
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_1_PRICE,            0x0460, "Tier 6 Block 1 Price" ) \
681
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_2_PRICE,            0x0461, "Tier 6 Block 2 Price" ) \
682
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_3_PRICE,            0x0462, "Tier 6 Block 3 Price" ) \
683
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_4_PRICE,            0x0463, "Tier 6 Block 4 Price" ) \
684
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_5_PRICE,            0x0464, "Tier 6 Block 5 Price" ) \
685
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_6_PRICE,            0x0465, "Tier 6 Block 6 Price" ) \
686
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_7_PRICE,            0x0466, "Tier 6 Block 7 Price" ) \
687
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_8_PRICE,            0x0467, "Tier 6 Block 8 Price" ) \
688
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_9_PRICE,            0x0468, "Tier 6 Block 9 Price" ) \
689
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_10_PRICE,           0x0469, "Tier 6 Block 10 Price" ) \
690
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_11_PRICE,           0x046A, "Tier 6 Block 11 Price" ) \
691
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_12_PRICE,           0x046B, "Tier 6 Block 12 Price" ) \
692
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_13_PRICE,           0x046C, "Tier 6 Block 13 Price" ) \
693
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_14_PRICE,           0x046D, "Tier 6 Block 14 Price" ) \
694
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_15_PRICE,           0x046E, "Tier 6 Block 15 Price" ) \
695
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_16_PRICE,           0x046F, "Tier 6 Block 16 Price" ) \
696
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_1_PRICE,            0x0470, "Tier 7 Block 1 Price" ) \
697
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_2_PRICE,            0x0471, "Tier 7 Block 2 Price" ) \
698
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_3_PRICE,            0x0472, "Tier 7 Block 3 Price" ) \
699
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_4_PRICE,            0x0473, "Tier 7 Block 4 Price" ) \
700
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_5_PRICE,            0x0474, "Tier 7 Block 5 Price" ) \
701
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_6_PRICE,            0x0475, "Tier 7 Block 6 Price" ) \
702
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_7_PRICE,            0x0476, "Tier 7 Block 7 Price" ) \
703
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_8_PRICE,            0x0477, "Tier 7 Block 8 Price" ) \
704
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_9_PRICE,            0x0478, "Tier 7 Block 9 Price" ) \
705
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_10_PRICE,           0x0479, "Tier 7 Block 10 Price" ) \
706
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_11_PRICE,           0x047A, "Tier 7 Block 11 Price" ) \
707
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_12_PRICE,           0x047B, "Tier 7 Block 12 Price" ) \
708
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_13_PRICE,           0x047C, "Tier 7 Block 13 Price" ) \
709
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_14_PRICE,           0x047D, "Tier 7 Block 14 Price" ) \
710
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_15_PRICE,           0x047E, "Tier 7 Block 15 Price" ) \
711
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_16_PRICE,           0x047F, "Tier 7 Block 16 Price" ) \
712
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_1_PRICE,            0x0480, "Tier 8 Block 1 Price" ) \
713
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_2_PRICE,            0x0481, "Tier 8 Block 2 Price" ) \
714
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_3_PRICE,            0x0482, "Tier 8 Block 3 Price" ) \
715
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_4_PRICE,            0x0483, "Tier 8 Block 4 Price" ) \
716
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_5_PRICE,            0x0484, "Tier 8 Block 5 Price" ) \
717
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_6_PRICE,            0x0485, "Tier 8 Block 6 Price" ) \
718
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_7_PRICE,            0x0486, "Tier 8 Block 7 Price" ) \
719
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_8_PRICE,            0x0487, "Tier 8 Block 8 Price" ) \
720
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_9_PRICE,            0x0488, "Tier 8 Block 9 Price" ) \
721
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_10_PRICE,           0x0489, "Tier 8 Block 10 Price" ) \
722
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_11_PRICE,           0x048A, "Tier 8 Block 11 Price" ) \
723
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_12_PRICE,           0x048B, "Tier 8 Block 12 Price" ) \
724
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_13_PRICE,           0x048C, "Tier 8 Block 13 Price" ) \
725
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_14_PRICE,           0x048D, "Tier 8 Block 14 Price" ) \
726
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_15_PRICE,           0x048E, "Tier 8 Block 15 Price" ) \
727
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_16_PRICE,           0x048F, "Tier 8 Block 16 Price" ) \
728
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_1_PRICE,            0x0490, "Tier 9 Block 1 Price" ) \
729
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_2_PRICE,            0x0491, "Tier 9 Block 2 Price" ) \
730
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_3_PRICE,            0x0492, "Tier 9 Block 3 Price" ) \
731
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_4_PRICE,            0x0493, "Tier 9 Block 4 Price" ) \
732
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_5_PRICE,            0x0494, "Tier 9 Block 5 Price" ) \
733
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_6_PRICE,            0x0495, "Tier 9 Block 6 Price" ) \
734
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_7_PRICE,            0x0496, "Tier 9 Block 7 Price" ) \
735
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_8_PRICE,            0x0497, "Tier 9 Block 8 Price" ) \
736
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_9_PRICE,            0x0498, "Tier 9 Block 9 Price" ) \
737
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_10_PRICE,           0x0499, "Tier 9 Block 10 Price" ) \
738
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_11_PRICE,           0x049A, "Tier 9 Block 11 Price" ) \
739
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_12_PRICE,           0x049B, "Tier 9 Block 12 Price" ) \
740
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_13_PRICE,           0x049C, "Tier 9 Block 13 Price" ) \
741
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_14_PRICE,           0x049D, "Tier 9 Block 14 Price" ) \
742
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_15_PRICE,           0x049E, "Tier 9 Block 15 Price" ) \
743
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_16_PRICE,           0x049F, "Tier 9 Block 16 Price" ) \
744
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_1_PRICE,           0x04A0, "Tier 10 Block 1 Price" ) \
745
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_2_PRICE,           0x04A1, "Tier 10 Block 2 Price" ) \
746
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_3_PRICE,           0x04A2, "Tier 10 Block 3 Price" ) \
747
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_4_PRICE,           0x04A3, "Tier 10 Block 4 Price" ) \
748
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_5_PRICE,           0x04A4, "Tier 10 Block 5 Price" ) \
749
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_6_PRICE,           0x04A5, "Tier 10 Block 6 Price" ) \
750
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_7_PRICE,           0x04A6, "Tier 10 Block 7 Price" ) \
751
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_8_PRICE,           0x04A7, "Tier 10 Block 8 Price" ) \
752
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_9_PRICE,           0x04A8, "Tier 10 Block 9 Price" ) \
753
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_10_PRICE,          0x04A9, "Tier 10 Block 10 Price" ) \
754
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_11_PRICE,          0x04AA, "Tier 10 Block 11 Price" ) \
755
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_12_PRICE,          0x04AB, "Tier 10 Block 12 Price" ) \
756
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_13_PRICE,          0x04AC, "Tier 10 Block 13 Price" ) \
757
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_14_PRICE,          0x04AD, "Tier 10 Block 14 Price" ) \
758
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_15_PRICE,          0x04AE, "Tier 10 Block 15 Price" ) \
759
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_16_PRICE,          0x04AF, "Tier 10 Block 16 Price" ) \
760
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_1_PRICE,           0x04B0, "Tier 11 Block 1 Price" ) \
761
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_2_PRICE,           0x04B1, "Tier 11 Block 2 Price" ) \
762
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_3_PRICE,           0x04B2, "Tier 11 Block 3 Price" ) \
763
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_4_PRICE,           0x04B3, "Tier 11 Block 4 Price" ) \
764
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_5_PRICE,           0x04B4, "Tier 11 Block 5 Price" ) \
765
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_6_PRICE,           0x04B5, "Tier 11 Block 6 Price" ) \
766
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_7_PRICE,           0x04B6, "Tier 11 Block 7 Price" ) \
767
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_8_PRICE,           0x04B7, "Tier 11 Block 8 Price" ) \
768
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_9_PRICE,           0x04B8, "Tier 11 Block 9 Price" ) \
769
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_10_PRICE,          0x04B9, "Tier 11 Block 10 Price" ) \
770
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_11_PRICE,          0x04BA, "Tier 11 Block 11 Price" ) \
771
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_12_PRICE,          0x04BB, "Tier 11 Block 12 Price" ) \
772
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_13_PRICE,          0x04BC, "Tier 11 Block 13 Price" ) \
773
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_14_PRICE,          0x04BD, "Tier 11 Block 14 Price" ) \
774
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_15_PRICE,          0x04BE, "Tier 11 Block 15 Price" ) \
775
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_16_PRICE,          0x04BF, "Tier 11 Block 16 Price" ) \
776
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_1_PRICE,           0x04C0, "Tier 12 Block 1 Price" ) \
777
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_2_PRICE,           0x04C1, "Tier 12 Block 2 Price" ) \
778
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_3_PRICE,           0x04C2, "Tier 12 Block 3 Price" ) \
779
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_4_PRICE,           0x04C3, "Tier 12 Block 4 Price" ) \
780
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_5_PRICE,           0x04C4, "Tier 12 Block 5 Price" ) \
781
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_6_PRICE,           0x04C5, "Tier 12 Block 6 Price" ) \
782
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_7_PRICE,           0x04C6, "Tier 12 Block 7 Price" ) \
783
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_8_PRICE,           0x04C7, "Tier 12 Block 8 Price" ) \
784
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_9_PRICE,           0x04C8, "Tier 12 Block 9 Price" ) \
785
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_10_PRICE,          0x04C9, "Tier 12 Block 10 Price" ) \
786
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_11_PRICE,          0x04CA, "Tier 12 Block 11 Price" ) \
787
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_12_PRICE,          0x04CB, "Tier 12 Block 12 Price" ) \
788
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_13_PRICE,          0x04CC, "Tier 12 Block 13 Price" ) \
789
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_14_PRICE,          0x04CD, "Tier 12 Block 14 Price" ) \
790
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_15_PRICE,          0x04CE, "Tier 12 Block 15 Price" ) \
791
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_16_PRICE,          0x04CF, "Tier 12 Block 16 Price" ) \
792
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_1_PRICE,           0x04D0, "Tier 13 Block 1 Price" ) \
793
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_2_PRICE,           0x04D1, "Tier 13 Block 2 Price" ) \
794
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_3_PRICE,           0x04D2, "Tier 13 Block 3 Price" ) \
795
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_4_PRICE,           0x04D3, "Tier 13 Block 4 Price" ) \
796
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_5_PRICE,           0x04D4, "Tier 13 Block 5 Price" ) \
797
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_6_PRICE,           0x04D5, "Tier 13 Block 6 Price" ) \
798
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_7_PRICE,           0x04D6, "Tier 13 Block 7 Price" ) \
799
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_8_PRICE,           0x04D7, "Tier 13 Block 8 Price" ) \
800
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_9_PRICE,           0x04D8, "Tier 13 Block 9 Price" ) \
801
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_10_PRICE,          0x04D9, "Tier 13 Block 10 Price" ) \
802
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_11_PRICE,          0x04DA, "Tier 13 Block 11 Price" ) \
803
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_12_PRICE,          0x04DB, "Tier 13 Block 12 Price" ) \
804
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_13_PRICE,          0x04DC, "Tier 13 Block 13 Price" ) \
805
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_14_PRICE,          0x04DD, "Tier 13 Block 14 Price" ) \
806
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_15_PRICE,          0x04DE, "Tier 13 Block 15 Price" ) \
807
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_16_PRICE,          0x04DF, "Tier 13 Block 16 Price" ) \
808
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_1_PRICE,           0x04E0, "Tier 14 Block 1 Price" ) \
809
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_2_PRICE,           0x04E1, "Tier 14 Block 2 Price" ) \
810
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_3_PRICE,           0x04E2, "Tier 14 Block 3 Price" ) \
811
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_4_PRICE,           0x04E3, "Tier 14 Block 4 Price" ) \
812
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_5_PRICE,           0x04E4, "Tier 14 Block 5 Price" ) \
813
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_6_PRICE,           0x04E5, "Tier 14 Block 6 Price" ) \
814
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_7_PRICE,           0x04E6, "Tier 14 Block 7 Price" ) \
815
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_8_PRICE,           0x04E7, "Tier 14 Block 8 Price" ) \
816
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_9_PRICE,           0x04E8, "Tier 14 Block 9 Price" ) \
817
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_10_PRICE,          0x04E9, "Tier 14 Block 10 Price" ) \
818
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_11_PRICE,          0x04EA, "Tier 14 Block 11 Price" ) \
819
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_12_PRICE,          0x04EB, "Tier 14 Block 12 Price" ) \
820
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_13_PRICE,          0x04EC, "Tier 14 Block 13 Price" ) \
821
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_14_PRICE,          0x04ED, "Tier 14 Block 14 Price" ) \
822
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_15_PRICE,          0x04EE, "Tier 14 Block 15 Price" ) \
823
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_16_PRICE,          0x04EF, "Tier 14 Block 16 Price" ) \
824
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_1_PRICE,           0x04F0, "Tier 15 Block 1 Price" ) \
825
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_2_PRICE,           0x04F1, "Tier 15 Block 2 Price" ) \
826
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_3_PRICE,           0x04F2, "Tier 15 Block 3 Price" ) \
827
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_4_PRICE,           0x04F3, "Tier 15 Block 4 Price" ) \
828
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_5_PRICE,           0x04F4, "Tier 15 Block 5 Price" ) \
829
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_6_PRICE,           0x04F5, "Tier 15 Block 6 Price" ) \
830
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_7_PRICE,           0x04F6, "Tier 15 Block 7 Price" ) \
831
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_8_PRICE,           0x04F7, "Tier 15 Block 8 Price" ) \
832
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_9_PRICE,           0x04F8, "Tier 15 Block 9 Price" ) \
833
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_10_PRICE,          0x04F9, "Tier 15 Block 10 Price" ) \
834
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_11_PRICE,          0x04FA, "Tier 15 Block 11 Price" ) \
835
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_12_PRICE,          0x04FB, "Tier 15 Block 12 Price" ) \
836
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_13_PRICE,          0x04FC, "Tier 15 Block 13 Price" ) \
837
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_14_PRICE,          0x04FD, "Tier 15 Block 14 Price" ) \
838
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_15_PRICE,          0x04FE, "Tier 15 Block 15 Price" ) \
839
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_16_PRICE,          0x04FF, "Tier 15 Block 16 Price" ) \
840
/* Extended Price Information (Delivered) Set */ \
841
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_16,                   0x050F, "Price Tier 16" ) \
842
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_17,                   0x0510, "Price Tier 17" ) \
843
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_18,                   0x0511, "Price Tier 18" ) \
844
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_19,                   0x0512, "Price Tier 19" ) \
845
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_20,                   0x0513, "Price Tier 20" ) \
846
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_21,                   0x0514, "Price Tier 21" ) \
847
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_22,                   0x0515, "Price Tier 22" ) \
848
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_23,                   0x0516, "Price Tier 23" ) \
849
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_24,                   0x0517, "Price Tier 24" ) \
850
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_25,                   0x0518, "Price Tier 25" ) \
851
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_26,                   0x0519, "Price Tier 26" ) \
852
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_27,                   0x051A, "Price Tier 27" ) \
853
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_28,                   0x051B, "Price Tier 28" ) \
854
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_29,                   0x051C, "Price Tier 29" ) \
855
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_30,                   0x051D, "Price Tier 30" ) \
856
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_31,                   0x051E, "Price Tier 31" ) \
857
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_32,                   0x051F, "Price Tier 32" ) \
858
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_33,                   0x0520, "Price Tier 33" ) \
859
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_34,                   0x0521, "Price Tier 34" ) \
860
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_35,                   0x0522, "Price Tier 35" ) \
861
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_36,                   0x0523, "Price Tier 36" ) \
862
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_37,                   0x0524, "Price Tier 37" ) \
863
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_38,                   0x0525, "Price Tier 38" ) \
864
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_39,                   0x0526, "Price Tier 39" ) \
865
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_40,                   0x0527, "Price Tier 40" ) \
866
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_41,                   0x0528, "Price Tier 41" ) \
867
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_42,                   0x0529, "Price Tier 42" ) \
868
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_43,                   0x052A, "Price Tier 43" ) \
869
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_44,                   0x052B, "Price Tier 44" ) \
870
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_45,                   0x052C, "Price Tier 45" ) \
871
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_46,                   0x052D, "Price Tier 46" ) \
872
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_47,                   0x052E, "Price Tier 47" ) \
873
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_48,                   0x052F, "Price Tier 48" ) \
874
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CPP_1_PRICE,                     0x05FE, "CPP 1 Price" ) \
875
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CPP_2_PRICE,                     0x05FF, "CPP 2 Price" ) \
876
/* Tariff Information Set (Delivered) */ \
877
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TARIFF_LABEL,                    0x0610, "Tariff Label" ) \
878
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NUMBER_OF_PRICE_TIERS_IN_USE,    0x0611, "Number of Price Tiers in Use" ) \
879
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_NUMBER_OF_BLOCK_THRES_IN_USE,    0x0612, "Number of Block Thresholds in Use" ) \
880
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_BLOCK_MODE,                 0x0613, "Tier Block Mode" ) \
881
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_UNIT_OF_MEASURE,                 0x0615, "Unit of Measure" ) \
882
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENCY,                        0x0616, "Currency" ) \
883
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TRAILING_DIGIT,            0x0617, "Price Trailing Digit" ) \
884
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_TARIFF_RESOLUTION_PERIOD,        0x0619, "Tariff Resolution Period" ) \
885
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2,                             0x0620, "CO2" ) \
886
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2_UNIT,                        0x0621, "CO2 Unit" ) \
887
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2_TRAILING_DIGIT,              0x0622, "CO2 Trailing Digit" ) \
888
/* Billing Information (Delivered) Attribute Set */ \
889
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENT_BILLING_PERIOD_START,    0x0700, "Current Billing Period Start" ) \
890
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENT_BILLING_PERIOD_DURATION, 0x0701, "Current Billing Period Duration" ) \
891
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_START,       0x0702, "Last Billing Period Start" ) \
892
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_DURATION,    0x0703, "Last Billing Period Duration" ) \
893
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_CON_BILL,    0x0704, "Last Billing Period Consolidated Bill" ) \
894
/* Credit Payment Attribute Set */ \
895
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DUE_DATE,         0x0800, "Credit Payment Due Date" ) \
896
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_STATUS,           0x0801, "Credit Payment Status" ) \
897
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_OVER_DUE_AMOUNT,  0x0802, "Credit Payment Over Due Amount" ) \
898
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PAYMENT_DISCOUNT,                0x080A, "Payment Discount" ) \
899
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_PAYMENT_DISCOUNT_PERIOD,         0x080B, "Payment Discount Period" ) \
900
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_1,                0x0810, "Credit Payment #1" ) \
901
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_1,           0x0811, "Credit Payment Date #1" ) \
902
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_1,            0x0812, "Credit Payment Ref #1" ) \
903
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_2,                0x0820, "Credit Payment #2" ) \
904
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_2,           0x0821, "Credit Payment Date #2" ) \
905
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_2,            0x0822, "Credit Payment Ref #2" ) \
906
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_3,                0x0830, "Credit Payment #3" ) \
907
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_3,           0x0831, "Credit Payment Date #3" ) \
908
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_3,            0x0832, "Credit Payment Ref #3" ) \
909
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_4,                0x0840, "Credit Payment #4" ) \
910
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_4,           0x0841, "Credit Payment Date #4" ) \
911
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_4,            0x0842, "Credit Payment Ref #4" ) \
912
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_5,                0x0850, "Credit Payment #5" ) \
913
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_5,           0x0851, "Credit Payment Date #5" ) \
914
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_5,            0x0852, "Credit Payment Ref #5" ) \
915
/* Received Tier Label Attribute Set */ \
916
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_1_PRICE_LABEL,     0x8000, "Received Tier 1 Price label" ) \
917
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_2_PRICE_LABEL,     0x8001, "Received Tier 2 Price label" ) \
918
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_3_PRICE_LABEL,     0x8002, "Received Tier 3 Price label" ) \
919
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_4_PRICE_LABEL,     0x8003, "Received Tier 4 Price label" ) \
920
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_5_PRICE_LABEL,     0x8004, "Received Tier 5 Price label" ) \
921
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_6_PRICE_LABEL,     0x8005, "Received Tier 6 Price label" ) \
922
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_7_PRICE_LABEL,     0x8006, "Received Tier 7 Price label" ) \
923
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_8_PRICE_LABEL,     0x8007, "Received Tier 8 Price label" ) \
924
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_9_PRICE_LABEL,     0x8008, "Received Tier 9 Price label" ) \
925
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_10_PRICE_LABEL,    0x8009, "Received Tier 10 Price label" ) \
926
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_11_PRICE_LABEL,    0x800A, "Received Tier 11 Price label" ) \
927
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_12_PRICE_LABEL,    0x800B, "Received Tier 12 Price label" ) \
928
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_13_PRICE_LABEL,    0x800C, "Received Tier 13 Price label" ) \
929
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_14_PRICE_LABEL,    0x800D, "Received Tier 14 Price label" ) \
930
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_15_PRICE_LABEL,    0x800E, "Received Tier 15 Price label" ) \
931
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_16_PRICE_LABEL,    0x800F, "Received Tier 16 Price label" ) \
932
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_17_PRICE_LABEL,    0x8010, "Received Tier 17 Price label" ) \
933
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_18_PRICE_LABEL,    0x8011, "Received Tier 18 Price label" ) \
934
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_19_PRICE_LABEL,    0x8012, "Received Tier 19 Price label" ) \
935
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_20_PRICE_LABEL,    0x8013, "Received Tier 20 Price label" ) \
936
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_21_PRICE_LABEL,    0x8014, "Received Tier 21 Price label" ) \
937
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_22_PRICE_LABEL,    0x8015, "Received Tier 22 Price label" ) \
938
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_23_PRICE_LABEL,    0x8016, "Received Tier 23 Price label" ) \
939
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_24_PRICE_LABEL,    0x8017, "Received Tier 24 Price label" ) \
940
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_25_PRICE_LABEL,    0x8018, "Received Tier 25 Price label" ) \
941
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_26_PRICE_LABEL,    0x8019, "Received Tier 26 Price label" ) \
942
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_27_PRICE_LABEL,    0x801A, "Received Tier 27 Price label" ) \
943
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_28_PRICE_LABEL,    0x801B, "Received Tier 28 Price label" ) \
944
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_29_PRICE_LABEL,    0x801C, "Received Tier 29 Price label" ) \
945
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_30_PRICE_LABEL,    0x801D, "Received Tier 30 Price label" ) \
946
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_31_PRICE_LABEL,    0x801E, "Received Tier 31 Price label" ) \
947
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_32_PRICE_LABEL,    0x801F, "Received Tier 32 Price label" ) \
948
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_33_PRICE_LABEL,    0x8020, "Received Tier 33 Price label" ) \
949
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_34_PRICE_LABEL,    0x8021, "Received Tier 34 Price label" ) \
950
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_35_PRICE_LABEL,    0x8022, "Received Tier 35 Price label" ) \
951
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_36_PRICE_LABEL,    0x8023, "Received Tier 36 Price label" ) \
952
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_37_PRICE_LABEL,    0x8024, "Received Tier 37 Price label" ) \
953
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_38_PRICE_LABEL,    0x8025, "Received Tier 38 Price label" ) \
954
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_39_PRICE_LABEL,    0x8026, "Received Tier 39 Price label" ) \
955
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_40_PRICE_LABEL,    0x8027, "Received Tier 40 Price label" ) \
956
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_41_PRICE_LABEL,    0x8028, "Received Tier 41 Price label" ) \
957
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_42_PRICE_LABEL,    0x8029, "Received Tier 42 Price label" ) \
958
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_43_PRICE_LABEL,    0x802A, "Received Tier 43 Price label" ) \
959
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_44_PRICE_LABEL,    0x802B, "Received Tier 44 Price label" ) \
960
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_45_PRICE_LABEL,    0x802C, "Received Tier 45 Price label" ) \
961
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_46_PRICE_LABEL,    0x802D, "Received Tier 46 Price label" ) \
962
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_47_PRICE_LABEL,    0x802E, "Received Tier 47 Price label" ) \
963
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_48_PRICE_LABEL,    0x802F, "Received Tier 48 Price label" ) \
964
/* Received Block Threshold Attribute Set */ \
965
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_1_THRESHOLD,      0x8100, "Received Block 1 Threshold" ) \
966
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_2_THRESHOLD,      0x8101, "Received Block 2 Threshold" ) \
967
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_3_THRESHOLD,      0x8102, "Received Block 3 Threshold" ) \
968
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_4_THRESHOLD,      0x8103, "Received Block 4 Threshold" ) \
969
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_5_THRESHOLD,      0x8104, "Received Block 5 Threshold" ) \
970
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_6_THRESHOLD,      0x8105, "Received Block 6 Threshold" ) \
971
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_7_THRESHOLD,      0x8106, "Received Block 7 Threshold" ) \
972
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_8_THRESHOLD,      0x8107, "Received Block 8 Threshold" ) \
973
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_9_THRESHOLD,      0x8108, "Received Block 9 Threshold" ) \
974
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_10_THRESHOLD,     0x8109, "Received Block 10 Threshold" ) \
975
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_11_THRESHOLD,     0x810A, "Received Block 11 Threshold" ) \
976
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_12_THRESHOLD,     0x810B, "Received Block 12 Threshold" ) \
977
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_13_THRESHOLD,     0x810C, "Received Block 13 Threshold" ) \
978
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_14_THRESHOLD,     0x810D, "Received Block 14 Threshold" ) \
979
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_15_THRESHOLD,     0x810E, "Received Block 15 Threshold" ) \
980
/* Received Block Period Attribute Set */ \
981
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_START_OF_BLOCK_PERIOD,  0x8200, "Received Start of Block Period" ) \
982
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_PERIOD_DURATION,  0x8201, "Received Block Period Duration" ) \
983
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_THRESHOLD_MULTIPLIER,   0x8202, "Received Threshold Multiplier" ) \
984
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_THRESHOLD_DIVISOR,      0x8203, "Received Threshold Divisor" ) \
985
/* Received Block Price Information Attribute Set */ \
986
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_1_PRICE,        0x8400, "Rx No Tier Block 1 Price" ) \
987
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_2_PRICE,        0x8401, "Rx No Tier Block 2 Price" ) \
988
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_3_PRICE,        0x8402, "Rx No Tier Block 3 Price" ) \
989
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_4_PRICE,        0x8403, "Rx No Tier Block 4 Price" ) \
990
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_5_PRICE,        0x8404, "Rx No Tier Block 5 Price" ) \
991
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_6_PRICE,        0x8405, "Rx No Tier Block 6 Price" ) \
992
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_7_PRICE,        0x8406, "Rx No Tier Block 7 Price" ) \
993
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_8_PRICE,        0x8407, "Rx No Tier Block 8 Price" ) \
994
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_9_PRICE,        0x8408, "Rx No Tier Block 9 Price" ) \
995
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_10_PRICE,       0x8409, "Rx No Tier Block 10 Price" ) \
996
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_11_PRICE,       0x840A, "Rx No Tier Block 11 Price" ) \
997
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_12_PRICE,       0x840B, "Rx No Tier Block 12 Price" ) \
998
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_13_PRICE,       0x840C, "Rx No Tier Block 13 Price" ) \
999
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_14_PRICE,       0x840D, "Rx No Tier Block 14 Price" ) \
1000
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_15_PRICE,       0x840E, "Rx No Tier Block 15 Price" ) \
1001
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_16_PRICE,       0x840F, "Rx No Tier Block 16 Price" ) \
1002
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_1_PRICE,         0x8410, "Rx Tier 1 Block 1 Price" ) \
1003
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_2_PRICE,         0x8411, "Rx Tier 1 Block 2 Price" ) \
1004
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_3_PRICE,         0x8412, "Rx Tier 1 Block 3 Price" ) \
1005
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_4_PRICE,         0x8413, "Rx Tier 1 Block 4 Price" ) \
1006
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_5_PRICE,         0x8414, "Rx Tier 1 Block 5 Price" ) \
1007
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_6_PRICE,         0x8415, "Rx Tier 1 Block 6 Price" ) \
1008
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_7_PRICE,         0x8416, "Rx Tier 1 Block 7 Price" ) \
1009
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_8_PRICE,         0x8417, "Rx Tier 1 Block 8 Price" ) \
1010
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_9_PRICE,         0x8418, "Rx Tier 1 Block 9 Price" ) \
1011
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_10_PRICE,        0x8419, "Rx Tier 1 Block 10 Price" ) \
1012
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_11_PRICE,        0x841A, "Rx Tier 1 Block 11 Price" ) \
1013
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_12_PRICE,        0x841B, "Rx Tier 1 Block 12 Price" ) \
1014
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_13_PRICE,        0x841C, "Rx Tier 1 Block 13 Price" ) \
1015
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_14_PRICE,        0x841D, "Rx Tier 1 Block 14 Price" ) \
1016
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_15_PRICE,        0x841E, "Rx Tier 1 Block 15 Price" ) \
1017
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_16_PRICE,        0x841F, "Rx Tier 1 Block 16 Price" ) \
1018
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_1_PRICE,         0x8420, "Rx Tier 2 Block 1 Price" ) \
1019
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_2_PRICE,         0x8421, "Rx Tier 2 Block 2 Price" ) \
1020
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_3_PRICE,         0x8422, "Rx Tier 2 Block 3 Price" ) \
1021
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_4_PRICE,         0x8423, "Rx Tier 2 Block 4 Price" ) \
1022
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_5_PRICE,         0x8424, "Rx Tier 2 Block 5 Price" ) \
1023
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_6_PRICE,         0x8425, "Rx Tier 2 Block 6 Price" ) \
1024
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_7_PRICE,         0x8426, "Rx Tier 2 Block 7 Price" ) \
1025
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_8_PRICE,         0x8427, "Rx Tier 2 Block 8 Price" ) \
1026
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_9_PRICE,         0x8428, "Rx Tier 2 Block 9 Price" ) \
1027
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_10_PRICE,        0x8429, "Rx Tier 2 Block 10 Price" ) \
1028
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_11_PRICE,        0x842A, "Rx Tier 2 Block 11 Price" ) \
1029
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_12_PRICE,        0x842B, "Rx Tier 2 Block 12 Price" ) \
1030
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_13_PRICE,        0x842C, "Rx Tier 2 Block 13 Price" ) \
1031
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_14_PRICE,        0x842D, "Rx Tier 2 Block 14 Price" ) \
1032
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_15_PRICE,        0x842E, "Rx Tier 2 Block 15 Price" ) \
1033
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_16_PRICE,        0x842F, "Rx Tier 2 Block 16 Price" ) \
1034
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_1_PRICE,         0x8430, "Rx Tier 3 Block 1 Price" ) \
1035
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_2_PRICE,         0x8431, "Rx Tier 3 Block 2 Price" ) \
1036
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_3_PRICE,         0x8432, "Rx Tier 3 Block 3 Price" ) \
1037
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_4_PRICE,         0x8433, "Rx Tier 3 Block 4 Price" ) \
1038
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_5_PRICE,         0x8434, "Rx Tier 3 Block 5 Price" ) \
1039
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_6_PRICE,         0x8435, "Rx Tier 3 Block 6 Price" ) \
1040
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_7_PRICE,         0x8436, "Rx Tier 3 Block 7 Price" ) \
1041
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_8_PRICE,         0x8437, "Rx Tier 3 Block 8 Price" ) \
1042
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_9_PRICE,         0x8438, "Rx Tier 3 Block 9 Price" ) \
1043
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_10_PRICE,        0x8439, "Rx Tier 3 Block 10 Price" ) \
1044
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_11_PRICE,        0x843A, "Rx Tier 3 Block 11 Price" ) \
1045
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_12_PRICE,        0x843B, "Rx Tier 3 Block 12 Price" ) \
1046
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_13_PRICE,        0x843C, "Rx Tier 3 Block 13 Price" ) \
1047
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_14_PRICE,        0x843D, "Rx Tier 3 Block 14 Price" ) \
1048
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_15_PRICE,        0x843E, "Rx Tier 3 Block 15 Price" ) \
1049
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_16_PRICE,        0x843F, "Rx Tier 3 Block 16 Price" ) \
1050
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_1_PRICE,         0x8440, "Rx Tier 4 Block 1 Price" ) \
1051
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_2_PRICE,         0x8441, "Rx Tier 4 Block 2 Price" ) \
1052
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_3_PRICE,         0x8442, "Rx Tier 4 Block 3 Price" ) \
1053
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_4_PRICE,         0x8443, "Rx Tier 4 Block 4 Price" ) \
1054
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_5_PRICE,         0x8444, "Rx Tier 4 Block 5 Price" ) \
1055
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_6_PRICE,         0x8445, "Rx Tier 4 Block 6 Price" ) \
1056
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_7_PRICE,         0x8446, "Rx Tier 4 Block 7 Price" ) \
1057
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_8_PRICE,         0x8447, "Rx Tier 4 Block 8 Price" ) \
1058
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_9_PRICE,         0x8448, "Rx Tier 4 Block 9 Price" ) \
1059
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_10_PRICE,        0x8449, "Rx Tier 4 Block 10 Price" ) \
1060
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_11_PRICE,        0x844A, "Rx Tier 4 Block 11 Price" ) \
1061
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_12_PRICE,        0x844B, "Rx Tier 4 Block 12 Price" ) \
1062
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_13_PRICE,        0x844C, "Rx Tier 4 Block 13 Price" ) \
1063
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_14_PRICE,        0x844D, "Rx Tier 4 Block 14 Price" ) \
1064
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_15_PRICE,        0x844E, "Rx Tier 4 Block 15 Price" ) \
1065
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_16_PRICE,        0x844F, "Rx Tier 4 Block 16 Price" ) \
1066
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_1_PRICE,         0x8450, "Rx Tier 5 Block 1 Price" ) \
1067
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_2_PRICE,         0x8451, "Rx Tier 5 Block 2 Price" ) \
1068
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_3_PRICE,         0x8452, "Rx Tier 5 Block 3 Price" ) \
1069
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_4_PRICE,         0x8453, "Rx Tier 5 Block 4 Price" ) \
1070
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_5_PRICE,         0x8454, "Rx Tier 5 Block 5 Price" ) \
1071
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_6_PRICE,         0x8455, "Rx Tier 5 Block 6 Price" ) \
1072
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_7_PRICE,         0x8456, "Rx Tier 5 Block 7 Price" ) \
1073
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_8_PRICE,         0x8457, "Rx Tier 5 Block 8 Price" ) \
1074
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_9_PRICE,         0x8458, "Rx Tier 5 Block 9 Price" ) \
1075
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_10_PRICE,        0x8459, "Rx Tier 5 Block 10 Price" ) \
1076
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_11_PRICE,        0x845A, "Rx Tier 5 Block 11 Price" ) \
1077
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_12_PRICE,        0x845B, "Rx Tier 5 Block 12 Price" ) \
1078
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_13_PRICE,        0x845C, "Rx Tier 5 Block 13 Price" ) \
1079
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_14_PRICE,        0x845D, "Rx Tier 5 Block 14 Price" ) \
1080
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_15_PRICE,        0x845E, "Rx Tier 5 Block 15 Price" ) \
1081
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_16_PRICE,        0x845F, "Rx Tier 5 Block 16 Price" ) \
1082
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_1_PRICE,         0x8460, "Rx Tier 6 Block 1 Price" ) \
1083
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_2_PRICE,         0x8461, "Rx Tier 6 Block 2 Price" ) \
1084
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_3_PRICE,         0x8462, "Rx Tier 6 Block 3 Price" ) \
1085
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_4_PRICE,         0x8463, "Rx Tier 6 Block 4 Price" ) \
1086
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_5_PRICE,         0x8464, "Rx Tier 6 Block 5 Price" ) \
1087
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_6_PRICE,         0x8465, "Rx Tier 6 Block 6 Price" ) \
1088
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_7_PRICE,         0x8466, "Rx Tier 6 Block 7 Price" ) \
1089
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_8_PRICE,         0x8467, "Rx Tier 6 Block 8 Price" ) \
1090
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_9_PRICE,         0x8468, "Rx Tier 6 Block 9 Price" ) \
1091
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_10_PRICE,        0x8469, "Rx Tier 6 Block 10 Price" ) \
1092
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_11_PRICE,        0x846A, "Rx Tier 6 Block 11 Price" ) \
1093
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_12_PRICE,        0x846B, "Rx Tier 6 Block 12 Price" ) \
1094
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_13_PRICE,        0x846C, "Rx Tier 6 Block 13 Price" ) \
1095
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_14_PRICE,        0x846D, "Rx Tier 6 Block 14 Price" ) \
1096
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_15_PRICE,        0x846E, "Rx Tier 6 Block 15 Price" ) \
1097
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_16_PRICE,        0x846F, "Rx Tier 6 Block 16 Price" ) \
1098
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_1_PRICE,         0x8470, "Rx Tier 7 Block 1 Price" ) \
1099
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_2_PRICE,         0x8471, "Rx Tier 7 Block 2 Price" ) \
1100
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_3_PRICE,         0x8472, "Rx Tier 7 Block 3 Price" ) \
1101
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_4_PRICE,         0x8473, "Rx Tier 7 Block 4 Price" ) \
1102
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_5_PRICE,         0x8474, "Rx Tier 7 Block 5 Price" ) \
1103
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_6_PRICE,         0x8475, "Rx Tier 7 Block 6 Price" ) \
1104
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_7_PRICE,         0x8476, "Rx Tier 7 Block 7 Price" ) \
1105
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_8_PRICE,         0x8477, "Rx Tier 7 Block 8 Price" ) \
1106
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_9_PRICE,         0x8478, "Rx Tier 7 Block 9 Price" ) \
1107
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_10_PRICE,        0x8479, "Rx Tier 7 Block 10 Price" ) \
1108
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_11_PRICE,        0x847A, "Rx Tier 7 Block 11 Price" ) \
1109
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_12_PRICE,        0x847B, "Rx Tier 7 Block 12 Price" ) \
1110
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_13_PRICE,        0x847C, "Rx Tier 7 Block 13 Price" ) \
1111
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_14_PRICE,        0x847D, "Rx Tier 7 Block 14 Price" ) \
1112
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_15_PRICE,        0x847E, "Rx Tier 7 Block 15 Price" ) \
1113
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_16_PRICE,        0x847F, "Rx Tier 7 Block 16 Price" ) \
1114
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_1_PRICE,         0x8480, "Rx Tier 8 Block 1 Price" ) \
1115
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_2_PRICE,         0x8481, "Rx Tier 8 Block 2 Price" ) \
1116
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_3_PRICE,         0x8482, "Rx Tier 8 Block 3 Price" ) \
1117
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_4_PRICE,         0x8483, "Rx Tier 8 Block 4 Price" ) \
1118
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_5_PRICE,         0x8484, "Rx Tier 8 Block 5 Price" ) \
1119
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_6_PRICE,         0x8485, "Rx Tier 8 Block 6 Price" ) \
1120
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_7_PRICE,         0x8486, "Rx Tier 8 Block 7 Price" ) \
1121
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_8_PRICE,         0x8487, "Rx Tier 8 Block 8 Price" ) \
1122
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_9_PRICE,         0x8488, "Rx Tier 8 Block 9 Price" ) \
1123
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_10_PRICE,        0x8489, "Rx Tier 8 Block 10 Price" ) \
1124
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_11_PRICE,        0x848A, "Rx Tier 8 Block 11 Price" ) \
1125
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_12_PRICE,        0x848B, "Rx Tier 8 Block 12 Price" ) \
1126
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_13_PRICE,        0x848C, "Rx Tier 8 Block 13 Price" ) \
1127
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_14_PRICE,        0x848D, "Rx Tier 8 Block 14 Price" ) \
1128
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_15_PRICE,        0x848E, "Rx Tier 8 Block 15 Price" ) \
1129
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_16_PRICE,        0x848F, "Rx Tier 8 Block 16 Price" ) \
1130
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_1_PRICE,         0x8490, "Rx Tier 9 Block 1 Price" ) \
1131
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_2_PRICE,         0x8491, "Rx Tier 9 Block 2 Price" ) \
1132
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_3_PRICE,         0x8492, "Rx Tier 9 Block 3 Price" ) \
1133
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_4_PRICE,         0x8493, "Rx Tier 9 Block 4 Price" ) \
1134
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_5_PRICE,         0x8494, "Rx Tier 9 Block 5 Price" ) \
1135
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_6_PRICE,         0x8495, "Rx Tier 9 Block 6 Price" ) \
1136
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_7_PRICE,         0x8496, "Rx Tier 9 Block 7 Price" ) \
1137
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_8_PRICE,         0x8497, "Rx Tier 9 Block 8 Price" ) \
1138
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_9_PRICE,         0x8498, "Rx Tier 9 Block 9 Price" ) \
1139
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_10_PRICE,        0x8499, "Rx Tier 9 Block 10 Price" ) \
1140
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_11_PRICE,        0x849A, "Rx Tier 9 Block 11 Price" ) \
1141
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_12_PRICE,        0x849B, "Rx Tier 9 Block 12 Price" ) \
1142
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_13_PRICE,        0x849C, "Rx Tier 9 Block 13 Price" ) \
1143
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_14_PRICE,        0x849D, "Rx Tier 9 Block 14 Price" ) \
1144
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_15_PRICE,        0x849E, "Rx Tier 9 Block 15 Price" ) \
1145
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_16_PRICE,        0x849F, "Rx Tier 9 Block 16 Price" ) \
1146
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_1_PRICE,        0x84A0, "Rx Tier 10 Block 1 Price" ) \
1147
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_2_PRICE,        0x84A1, "Rx Tier 10 Block 2 Price" ) \
1148
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_3_PRICE,        0x84A2, "Rx Tier 10 Block 3 Price" ) \
1149
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_4_PRICE,        0x84A3, "Rx Tier 10 Block 4 Price" ) \
1150
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_5_PRICE,        0x84A4, "Rx Tier 10 Block 5 Price" ) \
1151
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_6_PRICE,        0x84A5, "Rx Tier 10 Block 6 Price" ) \
1152
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_7_PRICE,        0x84A6, "Rx Tier 10 Block 7 Price" ) \
1153
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_8_PRICE,        0x84A7, "Rx Tier 10 Block 8 Price" ) \
1154
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_9_PRICE,        0x84A8, "Rx Tier 10 Block 9 Price" ) \
1155
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_10_PRICE,       0x84A9, "Rx Tier 10 Block 10 Price" ) \
1156
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_11_PRICE,       0x84AA, "Rx Tier 10 Block 11 Price" ) \
1157
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_12_PRICE,       0x84AB, "Rx Tier 10 Block 12 Price" ) \
1158
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_13_PRICE,       0x84AC, "Rx Tier 10 Block 13 Price" ) \
1159
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_14_PRICE,       0x84AD, "Rx Tier 10 Block 14 Price" ) \
1160
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_15_PRICE,       0x84AE, "Rx Tier 10 Block 15 Price" ) \
1161
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_16_PRICE,       0x84AF, "Rx Tier 10 Block 16 Price" ) \
1162
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_1_PRICE,        0x84B0, "Rx Tier 11 Block 1 Price" ) \
1163
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_2_PRICE,        0x84B1, "Rx Tier 11 Block 2 Price" ) \
1164
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_3_PRICE,        0x84B2, "Rx Tier 11 Block 3 Price" ) \
1165
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_4_PRICE,        0x84B3, "Rx Tier 11 Block 4 Price" ) \
1166
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_5_PRICE,        0x84B4, "Rx Tier 11 Block 5 Price" ) \
1167
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_6_PRICE,        0x84B5, "Rx Tier 11 Block 6 Price" ) \
1168
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_7_PRICE,        0x84B6, "Rx Tier 11 Block 7 Price" ) \
1169
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_8_PRICE,        0x84B7, "Rx Tier 11 Block 8 Price" ) \
1170
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_9_PRICE,        0x84B8, "Rx Tier 11 Block 9 Price" ) \
1171
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_10_PRICE,       0x84B9, "Rx Tier 11 Block 10 Price" ) \
1172
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_11_PRICE,       0x84BA, "Rx Tier 11 Block 11 Price" ) \
1173
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_12_PRICE,       0x84BB, "Rx Tier 11 Block 12 Price" ) \
1174
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_13_PRICE,       0x84BC, "Rx Tier 11 Block 13 Price" ) \
1175
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_14_PRICE,       0x84BD, "Rx Tier 11 Block 14 Price" ) \
1176
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_15_PRICE,       0x84BE, "Rx Tier 11 Block 15 Price" ) \
1177
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_16_PRICE,       0x84BF, "Rx Tier 11 Block 16 Price" ) \
1178
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_1_PRICE,        0x84C0, "Rx Tier 12 Block 1 Price" ) \
1179
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_2_PRICE,        0x84C1, "Rx Tier 12 Block 2 Price" ) \
1180
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_3_PRICE,        0x84C2, "Rx Tier 12 Block 3 Price" ) \
1181
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_4_PRICE,        0x84C3, "Rx Tier 12 Block 4 Price" ) \
1182
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_5_PRICE,        0x84C4, "Rx Tier 12 Block 5 Price" ) \
1183
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_6_PRICE,        0x84C5, "Rx Tier 12 Block 6 Price" ) \
1184
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_7_PRICE,        0x84C6, "Rx Tier 12 Block 7 Price" ) \
1185
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_8_PRICE,        0x84C7, "Rx Tier 12 Block 8 Price" ) \
1186
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_9_PRICE,        0x84C8, "Rx Tier 12 Block 9 Price" ) \
1187
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_10_PRICE,       0x84C9, "Rx Tier 12 Block 10 Price" ) \
1188
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_11_PRICE,       0x84CA, "Rx Tier 12 Block 11 Price" ) \
1189
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_12_PRICE,       0x84CB, "Rx Tier 12 Block 12 Price" ) \
1190
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_13_PRICE,       0x84CC, "Rx Tier 12 Block 13 Price" ) \
1191
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_14_PRICE,       0x84CD, "Rx Tier 12 Block 14 Price" ) \
1192
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_15_PRICE,       0x84CE, "Rx Tier 12 Block 15 Price" ) \
1193
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_16_PRICE,       0x84CF, "Rx Tier 12 Block 16 Price" ) \
1194
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_1_PRICE,        0x84D0, "Rx Tier 13 Block 1 Price" ) \
1195
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_2_PRICE,        0x84D1, "Rx Tier 13 Block 2 Price" ) \
1196
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_3_PRICE,        0x84D2, "Rx Tier 13 Block 3 Price" ) \
1197
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_4_PRICE,        0x84D3, "Rx Tier 13 Block 4 Price" ) \
1198
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_5_PRICE,        0x84D4, "Rx Tier 13 Block 5 Price" ) \
1199
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_6_PRICE,        0x84D5, "Rx Tier 13 Block 6 Price" ) \
1200
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_7_PRICE,        0x84D6, "Rx Tier 13 Block 7 Price" ) \
1201
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_8_PRICE,        0x84D7, "Rx Tier 13 Block 8 Price" ) \
1202
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_9_PRICE,        0x84D8, "Rx Tier 13 Block 9 Price" ) \
1203
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_10_PRICE,       0x84D9, "Rx Tier 13 Block 10 Price" ) \
1204
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_11_PRICE,       0x84DA, "Rx Tier 13 Block 11 Price" ) \
1205
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_12_PRICE,       0x84DB, "Rx Tier 13 Block 12 Price" ) \
1206
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_13_PRICE,       0x84DC, "Rx Tier 13 Block 13 Price" ) \
1207
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_14_PRICE,       0x84DD, "Rx Tier 13 Block 14 Price" ) \
1208
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_15_PRICE,       0x84DE, "Rx Tier 13 Block 15 Price" ) \
1209
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_16_PRICE,       0x84DF, "Rx Tier 13 Block 16 Price" ) \
1210
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_1_PRICE,        0x84E0, "Rx Tier 14 Block 1 Price" ) \
1211
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_2_PRICE,        0x84E1, "Rx Tier 14 Block 2 Price" ) \
1212
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_3_PRICE,        0x84E2, "Rx Tier 14 Block 3 Price" ) \
1213
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_4_PRICE,        0x84E3, "Rx Tier 14 Block 4 Price" ) \
1214
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_5_PRICE,        0x84E4, "Rx Tier 14 Block 5 Price" ) \
1215
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_6_PRICE,        0x84E5, "Rx Tier 14 Block 6 Price" ) \
1216
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_7_PRICE,        0x84E6, "Rx Tier 14 Block 7 Price" ) \
1217
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_8_PRICE,        0x84E7, "Rx Tier 14 Block 8 Price" ) \
1218
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_9_PRICE,        0x84E8, "Rx Tier 14 Block 9 Price" ) \
1219
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_10_PRICE,       0x84E9, "Rx Tier 14 Block 10 Price" ) \
1220
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_11_PRICE,       0x84EA, "Rx Tier 14 Block 11 Price" ) \
1221
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_12_PRICE,       0x84EB, "Rx Tier 14 Block 12 Price" ) \
1222
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_13_PRICE,       0x84EC, "Rx Tier 14 Block 13 Price" ) \
1223
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_14_PRICE,       0x84ED, "Rx Tier 14 Block 14 Price" ) \
1224
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_15_PRICE,       0x84EE, "Rx Tier 14 Block 15 Price" ) \
1225
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_16_PRICE,       0x84EF, "Rx Tier 14 Block 16 Price" ) \
1226
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_1_PRICE,        0x84F0, "Rx Tier 15 Block 1 Price" ) \
1227
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_2_PRICE,        0x84F1, "Rx Tier 15 Block 2 Price" ) \
1228
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_3_PRICE,        0x84F2, "Rx Tier 15 Block 3 Price" ) \
1229
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_4_PRICE,        0x84F3, "Rx Tier 15 Block 4 Price" ) \
1230
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_5_PRICE,        0x84F4, "Rx Tier 15 Block 5 Price" ) \
1231
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_6_PRICE,        0x84F5, "Rx Tier 15 Block 6 Price" ) \
1232
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_7_PRICE,        0x84F6, "Rx Tier 15 Block 7 Price" ) \
1233
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_8_PRICE,        0x84F7, "Rx Tier 15 Block 8 Price" ) \
1234
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_9_PRICE,        0x84F8, "Rx Tier 15 Block 9 Price" ) \
1235
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_10_PRICE,       0x84F9, "Rx Tier 15 Block 10 Price" ) \
1236
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_11_PRICE,       0x84FA, "Rx Tier 15 Block 11 Price" ) \
1237
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_12_PRICE,       0x84FB, "Rx Tier 15 Block 12 Price" ) \
1238
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_13_PRICE,       0x84FC, "Rx Tier 15 Block 13 Price" ) \
1239
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_14_PRICE,       0x84FD, "Rx Tier 15 Block 14 Price" ) \
1240
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_15_PRICE,       0x84FE, "Rx Tier 15 Block 15 Price" ) \
1241
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_16_PRICE,       0x84FF, "Rx Tier 15 Block 16 Price" ) \
1242
/* Received Extended Price Information Attribute Set */ \
1243
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_16,          0x850F, "Received Price Tier 16" ) \
1244
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_17,          0x8510, "Received Price Tier 17" ) \
1245
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_18,          0x8511, "Received Price Tier 18" ) \
1246
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_19,          0x8512, "Received Price Tier 19" ) \
1247
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_20,          0x8513, "Received Price Tier 20" ) \
1248
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_21,          0x8514, "Received Price Tier 21" ) \
1249
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_22,          0x8515, "Received Price Tier 22" ) \
1250
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_23,          0x8516, "Received Price Tier 23" ) \
1251
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_24,          0x8517, "Received Price Tier 24" ) \
1252
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_25,          0x8518, "Received Price Tier 25" ) \
1253
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_26,          0x8519, "Received Price Tier 26" ) \
1254
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_27,          0x851A, "Received Price Tier 27" ) \
1255
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_28,          0x851B, "Received Price Tier 28" ) \
1256
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_29,          0x851C, "Received Price Tier 29" ) \
1257
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_30,          0x851D, "Received Price Tier 30" ) \
1258
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_31,          0x851E, "Received Price Tier 31" ) \
1259
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_32,          0x851F, "Received Price Tier 32" ) \
1260
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_33,          0x8520, "Received Price Tier 33" ) \
1261
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_34,          0x8521, "Received Price Tier 34" ) \
1262
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_35,          0x8522, "Received Price Tier 35" ) \
1263
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_36,          0x8523, "Received Price Tier 36" ) \
1264
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_37,          0x8524, "Received Price Tier 37" ) \
1265
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_38,          0x8525, "Received Price Tier 38" ) \
1266
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_39,          0x8526, "Received Price Tier 39" ) \
1267
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_40,          0x8527, "Received Price Tier 40" ) \
1268
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_41,          0x8528, "Received Price Tier 41" ) \
1269
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_42,          0x8529, "Received Price Tier 42" ) \
1270
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_43,          0x852A, "Received Price Tier 43" ) \
1271
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_44,          0x852B, "Received Price Tier 44" ) \
1272
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_45,          0x852C, "Received Price Tier 45" ) \
1273
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_46,          0x852D, "Received Price Tier 46" ) \
1274
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_47,          0x852E, "Received Price Tier 47" ) \
1275
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_48,          0x852F, "Received Price Tier 48" ) \
1276
/* Received Tariff Information Attribute Set */ \
1277
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TARIFF_LABEL,           0x8610, "Received Tariff label" ) \
1278
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NUM_OF_PRICE_TIERS_IN_USE,    0x8611, "Received Number of Tariff Tiers in Use" ) \
1279
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NUM_OF_BLOCK_THRES_IN_USE,    0x8612, "Received Number of Block Thresholds in Use" ) \
1280
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_BLOCK_MODE,        0x8613, "Received Tier Block Mode" ) \
1281
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TARIFF_RES_PERIOD,      0x8615, "Received tariff Resolution Period" ) \
1282
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2,                    0x8625, "Received CO2" ) \
1283
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2_UNIT,               0x8626, "Received CO2 Unit" ) \
1284
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2_TRAILING_DIGIT,     0x8627, "Received CO2 Trailing Digit" ) \
1285
/* Received Billing Information Attribute Set */ \
1286
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_CURRENT_BILLING_PERIOD_START, 0x8700, "Received Current Billing Period Start" ) \
1287
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_CURRENT_BILLING_PERIOD_DUR,   0x8701, "Received Current Billing Period Duration" ) \
1288
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_LAST_BILLING_PERIOD_START,    0x8702, "Received Last Billing Period Start" ) \
1289
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_LAST_BILLING_PERIOD_CON_BILL, 0x8704, "Received Last Billing Period Consolidated Bill" ) \
1290
/* Smart Energy */ \
1291
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE,           0xFFFE, "Attribute Reporting Status" )
1292
1293
VALUE_STRING_ENUM(zbee_zcl_price_attr_server_names);
1294
VALUE_STRING_ARRAY(zbee_zcl_price_attr_server_names);
1295
static value_string_ext zbee_zcl_price_attr_server_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_price_attr_server_names);
1296
1297
#define zbee_zcl_price_attr_client_names_VALUE_STRING_LIST(XXX) \
1298
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_PRICE_INC_RND_MINUTES,      0x0000, "Price Increase Randomize Minutes" ) \
1299
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_PRICE_DEC_RND_MINUTES,      0x0001, "Price Decrease Randomize Minutes" ) \
1300
    XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_COMMODITY_TYPE,             0x0002, "Commodity Type" ) \
1301
/* Smart Energy */ \
1302
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE_CLNT,      0xFFFE, "Attribute Reporting Status" )
1303
1304
VALUE_STRING_ENUM(zbee_zcl_price_attr_client_names);
1305
VALUE_STRING_ARRAY(zbee_zcl_price_attr_client_names);
1306
1307
/* Server Commands Received */
1308
#define zbee_zcl_price_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
1309
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENT_PRICE,                0x00, "Get Current Price" ) \
1310
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_SCHEDULED_PRICES,             0x01, "Get Scheduled Prices" ) \
1311
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_ACKNOWLEDGEMENT,        0x02, "Price Acknowledgement" ) \
1312
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_PERIOD,                 0x03, "Get Block Period(s)" ) \
1313
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CONVERSION_FACTOR,            0x04, "Get Conversion Factor" ) \
1314
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CALORIFIC_VALUE,              0x05, "Get Calorific Value" ) \
1315
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_INFORMATION,           0x06, "Get Tariff Information" ) \
1316
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_MATRIX,                 0x07, "Get Price Matrix" ) \
1317
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_THRESHOLDS,             0x08, "Get Block Thresholds" ) \
1318
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CO2_VALUE,                    0x09, "Get CO2 Value" ) \
1319
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TIER_LABELS,                  0x0A, "Get Tier Labels" ) \
1320
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BILLING_PERIOD,               0x0B, "Get Billing Period" ) \
1321
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CONSOLIDATED_BILL,            0x0C, "Get Consolidated Bill" ) \
1322
    XXX(ZBEE_ZCL_CMD_ID_PRICE_CPP_EVENT_RESPONSE,               0x0D, "CPP Event Response" ) \
1323
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CREDIT_PAYMENT,               0x0E, "Get Credit Payment" ) \
1324
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENCY_CONVERSION,          0x0F, "Get Currency Conversion" ) \
1325
    XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_CANCELLATION,          0x10, "Get Tariff Cancellation" )
1326
1327
VALUE_STRING_ENUM(zbee_zcl_price_srv_rx_cmd_names);
1328
VALUE_STRING_ARRAY(zbee_zcl_price_srv_rx_cmd_names);
1329
1330
/* Server Commands Generated */
1331
#define zbee_zcl_price_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
1332
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE,                    0x00, "Publish Price" ) \
1333
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_PERIOD,             0x01, "Publish Block Period" ) \
1334
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONVERSION_FACTOR,        0x02, "Publish Conversion Factor" ) \
1335
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CALORIFIC_VALUE,          0x03, "Publish Calorific Value" ) \
1336
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TARIFF_INFORMATION,       0x04, "Publish Tariff Information" ) \
1337
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE_MATRIX,             0x05, "Publish Price Matrix" ) \
1338
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_THRESHOLDS,         0x06, "Publish Block Thresholds" ) \
1339
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CO2_VALUE,                0x07, "Publish CO2 Value" ) \
1340
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TIER_LABELS,              0x08, "Publish Tier Labels" ) \
1341
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BILLING_PERIOD,           0x09, "Publish Billing Period" ) \
1342
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONSOLIDATED_BILL,        0x0A, "Publish Consolidated Bill" ) \
1343
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CPP_EVENT,                0x0B, "Publish CPP Event" ) \
1344
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CREDIT_PAYMENT,           0x0C, "Publish Credit Payment" ) \
1345
    XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CURRENCY_CONVERSION,      0x0D, "Publish Currency Conversion" ) \
1346
    XXX(ZBEE_ZCL_CMD_ID_PRICE_CANCEL_TARIFF,                    0x0E, "Cancel Tariff" )
1347
1348
VALUE_STRING_ENUM(zbee_zcl_price_srv_tx_cmd_names);
1349
VALUE_STRING_ARRAY(zbee_zcl_price_srv_tx_cmd_names);
1350
1351
/* Block Period Control Field BitMap - Price Acknowledgement */
1352
#define zbee_zcl_price_block_period_control_price_acknowledgement_names_VALUE_STRING_LIST(XXX)  \
1353
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOLEDGEMENT_NOT_REQUIRED,  0x0, "Price Acknowledgement not required" ) \
1354
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOLEDGEMENT_REQUIRED,      0x1, "Price Acknowledgement required" )
1355
1356
VALUE_STRING_ARRAY(zbee_zcl_price_block_period_control_price_acknowledgement_names);
1357
1358
/* Block Period Control Field BitMap - Repeating Block */
1359
#define zbee_zcl_price_block_period_control_repeating_block_names_VALUE_STRING_LIST(XXX)  \
1360
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_NON_REPEATING,      0x0, "Non Repeating Block" ) \
1361
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_REPEATING,          0x1, "Repeating Block" )
1362
1363
VALUE_STRING_ARRAY(zbee_zcl_price_block_period_control_repeating_block_names);
1364
1365
/* Block Period DurationTimebase Enumeration */
1366
#define zbee_zcl_price_block_period_duration_timebase_names_VALUE_STRING_LIST(XXX)  \
1367
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_MINUTE,                   0x0, "Minutes" ) \
1368
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_DAY,                      0x1, "Days" ) \
1369
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_WEEK,                     0x2, "Weeks" ) \
1370
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_MONTH,                    0x3, "Months" )
1371
1372
VALUE_STRING_ARRAY(zbee_zcl_price_block_period_duration_timebase_names);
1373
1374
/* Block Period Duration Control Enumeration */
1375
#define zbee_zcl_price_block_period_duration_control_names_VALUE_STRING_LIST(XXX)  \
1376
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_START_OF_TIMEBASE,         0x0, "Start of Timebase" ) \
1377
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_END_OF_TIMEBASE,           0x1, "End of Timebase" ) \
1378
    XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_NOT_SPECIFIED,             0x2, "Not Specified" )
1379
1380
VALUE_STRING_ARRAY(zbee_zcl_price_block_period_duration_control_names);
1381
1382
/* Tariff Type Enumeration */
1383
#define zbee_zcl_price_tariff_type_names_VALUE_STRING_LIST(XXX)  \
1384
    XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_DELIVERED_TARIFF,                            0x0, "Delivered Tariff" ) \
1385
    XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_RECEIVED_TARIFF,                             0x1, "Received Tariff" ) \
1386
    XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_DELIVERED_AND_RECEIVED_TARIFF,               0x2, "delivered and Received Tariff" )
1387
1388
VALUE_STRING_ARRAY(zbee_zcl_price_tariff_type_names);
1389
1390
/* Tariff Resolution Period Enumeration */
1391
#define zbee_zcl_price_tariff_resolution_period_names_VALUE_STRING_LIST(XXX)  \
1392
   XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_NOT_DEFINED,                     0x00, "Not Defined" ) \
1393
   XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_BLOCK_PERIOD,                    0x01, "Block Period" ) \
1394
   XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_1_DAY,                           0x02, "1 Day" )
1395
1396
VALUE_STRING_ARRAY(zbee_zcl_price_tariff_resolution_period_names);
1397
1398
/* Tariff Charging Scheme Enumeration */
1399
#define zbee_zcl_price_tariff_charging_scheme_names_VALUE_STRING_LIST(XXX)  \
1400
    XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_TOU_TARIFF,                       0x0, "TOU Tariff" ) \
1401
    XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TARIFF,                     0x1, "Block Tariff" ) \
1402
    XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TOU_WITH_COMMON_THRES,      0x2, "Block/TOU Tariff with common thresholds" ) \
1403
    XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TOU_WITH_INDIV_TRHES,       0x3, "Block/TOU Tariff with individual thresholds per tier" )
1404
1405
VALUE_STRING_ARRAY(zbee_zcl_price_tariff_charging_scheme_names);
1406
1407
/* Tariff Type */
1408
15
#define ZBEE_ZCL_PRICE_TARIFF_TYPE 0x0F
1409
1410
/* Trailing Digit and Price Tier */
1411
15
#define ZBEE_ZCL_PRICE_TIER           0x0F
1412
15
#define ZBEE_ZCL_PRICE_TRAILING_DIGIT 0xF0
1413
1414
/* Number of Price Tiers and Register Tier */
1415
15
#define ZBEE_ZCL_PRICE_REGISTER_TIER           0x0F
1416
15
#define ZBEE_ZCL_PRICE_NUMBER_OF_PRICE_TIERS   0xF0
1417
1418
/* Alternate Cost Trailing Digit */
1419
15
#define ZBEE_ZCL_PRICE_ALTERNATE_COST_TRAILING_DIGIT      0xF0
1420
1421
/* Block Period Duration Type */
1422
15
#define ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE  0x0F
1423
15
#define ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL   0xF0
1424
1425
/* Block Period Control Field BitMap */
1426
15
#define ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT   0x01
1427
15
#define ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK         0x02
1428
1429
/* Conversion Factor Trailing Digit */
1430
15
#define ZBEE_ZCL_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT      0xF0
1431
1432
/* Calorific Value Trailing Digit */
1433
15
#define ZBEE_ZCL_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT      0xF0
1434
1435
/* Tariff Type / Charging Scheme */
1436
15
#define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_TYPE            0x0F
1437
15
#define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_CHARGING_SCHEME 0xF0
1438
1439
/* Tariff Information Price Trailing Digit */
1440
15
#define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_PRICE_TRAILING_DIGIT      0xF0
1441
1442
/* Price Matrix Tier/Block ID */
1443
15
#define ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_BLOCK     0x0F
1444
15
#define ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_TIER      0xF0
1445
1446
/* Block Thresholds Tier/Number of Block Thresholds */
1447
237
#define ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS     0x0F
1448
15
#define ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_TIER                           0xF0
1449
1450
/* CO2 Value Trailing Digit */
1451
15
#define ZBEE_ZCL_PRICE_CO2_VALUE_TRAILING_DIGIT      0xF0
1452
1453
/* Billing Period Duration Type */
1454
15
#define ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_TIMEBASE     0x0F
1455
15
#define ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_CONTROL      0xF0
1456
1457
/* Billing Period Tariff Type */
1458
#define ZBEE_ZCL_PRICE_BILLING_PERIOD_TARIFF_TYPE 0x0F
1459
1460
/* Consolidated Bill Trailing Digit */
1461
15
#define ZBEE_ZCL_PRICE_CONSOLIDATED_BILL_TRAILING_DIGIT      0xF0
1462
1463
/*************************/
1464
/* Function Declarations */
1465
/*************************/
1466
void proto_register_zbee_zcl_price(void);
1467
void proto_reg_handoff_zbee_zcl_price(void);
1468
1469
/* Command Dissector Helpers */
1470
static void dissect_zcl_price_get_current_price              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1471
static void dissect_zcl_price_get_scheduled_prices           (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1472
static void dissect_zcl_price_get_price_acknowledgement      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1473
static void dissect_zcl_price_get_block_period               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1474
static void dissect_zcl_price_get_conversion_factor          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1475
static void dissect_zcl_price_get_calorific_value            (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1476
static void dissect_zcl_price_get_tariff_information         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1477
static void dissect_zcl_price_get_price_matrix               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1478
static void dissect_zcl_price_get_block_thresholds           (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1479
static void dissect_zcl_price_get_co2_value                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1480
static void dissect_zcl_price_get_tier_labels                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1481
static void dissect_zcl_price_get_billing_period             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1482
static void dissect_zcl_price_get_consolidated_bill          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1483
static void dissect_zcl_price_get_cpp_event                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1484
static void dissect_zcl_price_get_credit_payment             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1485
static void dissect_zcl_price_publish_price                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1486
static void dissect_zcl_price_publish_block_period           (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1487
static void dissect_zcl_price_publish_conversion_factor      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1488
static void dissect_zcl_price_publish_calorific_value        (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1489
static void dissect_zcl_price_publish_tariff_information     (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1490
static void dissect_zcl_price_publish_price_matrix           (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1491
static void dissect_zcl_price_publish_block_thresholds       (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1492
static void dissect_zcl_price_publish_co2_value              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1493
static void dissect_zcl_price_publish_tier_labels            (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1494
static void dissect_zcl_price_publish_billing_period         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1495
static void dissect_zcl_price_publish_consolidated_bill      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1496
static void dissect_zcl_price_publish_cpp_event              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1497
static void dissect_zcl_price_publish_credit_payment         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1498
static void dissect_zcl_price_publish_currency_conversion    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1499
static void dissect_zcl_price_publish_cancel_tariff          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1500
1501
/*************************/
1502
/* Global Variables      */
1503
/*************************/
1504
1505
/* Initialize the protocol and registered fields */
1506
static int proto_zbee_zcl_price;
1507
1508
static int hf_zbee_zcl_price_srv_tx_cmd_id;
1509
static int hf_zbee_zcl_price_srv_rx_cmd_id;
1510
static int hf_zbee_zcl_price_attr_server_id;
1511
static int hf_zbee_zcl_price_attr_client_id;
1512
static int hf_zbee_zcl_price_attr_reporting_status;
1513
static int hf_zbee_zcl_price_provider_id;
1514
static int hf_zbee_zcl_price_issuer_event_id;
1515
static int hf_zbee_zcl_price_min_issuer_event_id;
1516
static int hf_zbee_zcl_price_issuer_tariff_id;
1517
static int hf_zbee_zcl_price_command_index;
1518
static int hf_zbee_zcl_price_total_number_of_commands;
1519
static int hf_zbee_zcl_price_number_of_commands;
1520
static int hf_zbee_zcl_price_number_of_events;
1521
static int hf_zbee_zcl_price_number_of_records;
1522
static int hf_zbee_zcl_price_number_of_block_thresholds;
1523
static int hf_zbee_zcl_price_number_of_generation_tiers;
1524
static int hf_zbee_zcl_price_extended_number_of_price_tiers;
1525
static int hf_zbee_zcl_price_command_options;
1526
static int hf_zbee_zcl_price_control;
1527
static int hf_zbee_zcl_price_tier;
1528
static int hf_zbee_zcl_price_tariff_type_mask;
1529
static int hf_zbee_zcl_price_tariff_type;
1530
static int hf_zbee_zcl_price_tariff_resolution_period;
1531
static int hf_zbee_zcl_price_cpp_auth;
1532
static int hf_zbee_zcl_price_cpp_price_tier;
1533
static int hf_zbee_zcl_price_rate_label;
1534
static int hf_zbee_zcl_price_unit_of_measure;
1535
static int hf_zbee_zcl_price_currency;
1536
static int hf_zbee_zcl_price_trailing_digit_and_price_tier;
1537
static int hf_zbee_zcl_price_trailing_digit;
1538
static int hf_zbee_zcl_price_extended_price_tier;
1539
static int hf_zbee_zcl_price_number_of_price_tiers_and_register_tier;
1540
static int hf_zbee_zcl_price_register_tier;
1541
static int hf_zbee_zcl_price_number_of_price_tiers;
1542
static int hf_zbee_zcl_price_extended_register_tier;
1543
static int hf_zbee_zcl_price_duration_in_minutes;
1544
static int hf_zbee_zcl_price;
1545
static int hf_zbee_zcl_price_ratio;
1546
static int hf_zbee_zcl_price_generation_price;
1547
static int hf_zbee_zcl_price_generation_price_ratio;
1548
static int hf_zbee_zcl_price_generation_tier;
1549
static int hf_zbee_zcl_price_alternate_cost_delivered;
1550
static int hf_zbee_zcl_price_alternate_cost_unit;
1551
static int hf_zbee_zcl_price_alternate_cost_trailing_digit_mask;
1552
static int hf_zbee_zcl_price_alternate_cost_trailing_digit;
1553
static int hf_zbee_zcl_price_start_time;
1554
static int hf_zbee_zcl_price_start_time_with_cancel;
1555
static int hf_zbee_zcl_price_earliest_start_time;
1556
static int hf_zbee_zcl_price_latest_end_time;
1557
static int hf_zbee_zcl_price_current_time;
1558
static int hf_zbee_zcl_price_price_ack_time;
1559
static int hf_zbee_zcl_price_block_period_start_time;
1560
static int hf_zbee_zcl_price_block_period_duration;
1561
static int hf_zbee_zcl_price_block_period_duration_type;
1562
static int hf_zbee_zcl_price_block_period_duration_timebase;
1563
static int hf_zbee_zcl_price_block_period_duration_control;
1564
static int hf_zbee_zcl_price_block_period_control;
1565
static int hf_zbee_zcl_price_block_period_control_price_acknowledgement;
1566
static int hf_zbee_zcl_price_block_period_control_repeating_block;
1567
static int hf_zbee_zcl_price_conversion_factor;
1568
static int hf_zbee_zcl_price_conversion_factor_trailing_digit_mask;
1569
static int hf_zbee_zcl_price_conversion_factor_trailing_digit;
1570
static int hf_zbee_zcl_price_calorific_value;
1571
static int hf_zbee_zcl_price_calorific_value_unit;
1572
static int hf_zbee_zcl_price_calorific_value_trailing_digit_mask;
1573
static int hf_zbee_zcl_price_calorific_value_trailing_digit;
1574
static int hf_zbee_zcl_price_tariff_information_type_and_charging_scheme;
1575
static int hf_zbee_zcl_price_tariff_information_type;
1576
static int hf_zbee_zcl_price_tariff_information_charging_scheme;
1577
static int hf_zbee_zcl_price_tariff_information_tariff_label;
1578
static int hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use;
1579
static int hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use;
1580
static int hf_zbee_zcl_price_tariff_information_price_trailing_digit_mask;
1581
static int hf_zbee_zcl_price_tariff_information_price_trailing_digit;
1582
static int hf_zbee_zcl_price_tariff_information_standing_charge;
1583
static int hf_zbee_zcl_price_tariff_information_tier_block_mode;
1584
static int hf_zbee_zcl_price_tariff_information_block_threshold_multiplier;
1585
static int hf_zbee_zcl_price_tariff_information_block_threshold_divisor;
1586
static int hf_zbee_zcl_price_price_matrix_sub_payload_control;
1587
static int hf_zbee_zcl_price_price_matrix_tier_block_id;
1588
static int hf_zbee_zcl_price_price_matrix_tier_block_id_block;
1589
static int hf_zbee_zcl_price_price_matrix_tier_block_id_tier;
1590
static int hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier;
1591
static int hf_zbee_zcl_price_price_matrix_price;
1592
static int hf_zbee_zcl_price_block_thresholds_sub_payload_control;
1593
static int hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds;
1594
static int hf_zbee_zcl_price_block_thresholds_tier;
1595
static int hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds;
1596
static int hf_zbee_zcl_price_block_thresholds_block_threshold;
1597
static int hf_zbee_zcl_price_co2_value;
1598
static int hf_zbee_zcl_price_co2_unit;
1599
static int hf_zbee_zcl_price_co2_value_trailing_digit_mask;
1600
static int hf_zbee_zcl_price_co2_value_trailing_digit;
1601
static int hf_zbee_zcl_price_tier_labels_number_of_labels;
1602
static int hf_zbee_zcl_price_tier_labels_tier_id;
1603
static int hf_zbee_zcl_price_tier_labels_tier_label;
1604
static int hf_zbee_zcl_price_billing_period_start_time;
1605
static int hf_zbee_zcl_price_billing_period_duration;
1606
static int hf_zbee_zcl_price_billing_period_duration_type;
1607
static int hf_zbee_zcl_price_billing_period_duration_timebase;
1608
static int hf_zbee_zcl_price_billing_period_duration_control;
1609
static int hf_zbee_zcl_price_consolidated_bill;
1610
static int hf_zbee_zcl_price_consolidated_bill_trailing_digit_mask;
1611
static int hf_zbee_zcl_price_consolidated_bill_trailing_digit;
1612
static int hf_zbee_zcl_price_credit_payment_due_date;
1613
static int hf_zbee_zcl_price_credit_payment_overdue_amount;
1614
static int hf_zbee_zcl_price_credit_payment_status;
1615
static int hf_zbee_zcl_price_credit_payment;
1616
static int hf_zbee_zcl_price_credit_payment_date;
1617
static int hf_zbee_zcl_price_credit_payment_ref;
1618
static int hf_zbee_zcl_price_old_currency;
1619
static int hf_zbee_zcl_price_new_currency;
1620
static int hf_zbee_zcl_price_currency_change_control_flags;
1621
1622
/* Initialize the subtree pointers */
1623
static int ett_zbee_zcl_price;
1624
static int ett_zbee_zcl_price_tariff_type;
1625
static int ett_zbee_zcl_price_trailing_digit_and_price_tier;
1626
static int ett_zbee_zcl_price_number_of_price_tiers_and_register_tier;
1627
static int ett_zbee_zcl_price_alternate_cost_trailing_digit;
1628
static int ett_zbee_zcl_price_block_period_control;
1629
static int ett_zbee_zcl_price_block_period_duration_type;
1630
static int ett_zbee_zcl_price_conversion_factor_trailing_digit;
1631
static int ett_zbee_zcl_price_calorific_value_trailing_digit;
1632
static int ett_zbee_zcl_price_tariff_information_tariff_type_and_charging_scheme;
1633
static int ett_zbee_zcl_price_tariff_information_price_trailing_digit;
1634
static int ett_zbee_zcl_price_price_matrix_tier_block_id;
1635
static int ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds;
1636
static int ett_zbee_zcl_price_co2_value_trailing_digit;
1637
static int ett_zbee_zcl_price_billing_period_duration_type;
1638
static int ett_zbee_zcl_price_consolidated_bill_trailing_digit;
1639
1640
static int * const zbee_zcl_price_billing_period_duration_type[] = {
1641
    &hf_zbee_zcl_price_billing_period_duration_timebase,
1642
    &hf_zbee_zcl_price_billing_period_duration_control,
1643
    NULL
1644
};
1645
1646
static int * const zbee_zcl_price_block_period_duration_type[] = {
1647
    &hf_zbee_zcl_price_block_period_duration_timebase,
1648
    &hf_zbee_zcl_price_block_period_duration_control,
1649
    NULL
1650
};
1651
1652
static int * const zbee_zcl_price_block_period_control[] = {
1653
    &hf_zbee_zcl_price_block_period_control_price_acknowledgement,
1654
    &hf_zbee_zcl_price_block_period_control_repeating_block,
1655
    NULL
1656
};
1657
1658
static int * const zbee_zcl_price_tariff_type_mask[] = {
1659
    &hf_zbee_zcl_price_tariff_type,
1660
    NULL
1661
};
1662
1663
/*************************/
1664
/* Function Bodies       */
1665
/*************************/
1666
1667
/**
1668
 *This function is called by ZCL foundation dissector in order to decode
1669
 *
1670
 *@param tree pointer to data tree Wireshark uses to display packet.
1671
 *@param tvb pointer to buffer containing raw packet.
1672
 *@param offset pointer to buffer offset
1673
 *@param attr_id attribute identifier
1674
 *@param data_type attribute data type
1675
 *@param client_attr ZCL client
1676
*/
1677
static void
1678
dissect_zcl_price_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
1679
166
{
1680
166
    switch (attr_id) {
1681
        /* applies to all SE clusters */
1682
0
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE:
1683
0
            proto_tree_add_item(tree, hf_zbee_zcl_price_attr_reporting_status, tvb, *offset, 1, ENC_NA);
1684
0
            *offset += 1;
1685
0
            break;
1686
1687
166
        default: /* Catch all */
1688
166
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
1689
166
            break;
1690
166
    }
1691
166
} /*dissect_zcl_price_attr_data*/
1692
1693
/**
1694
 *ZigBee ZCL Price cluster dissector for wireshark.
1695
 *
1696
 *@param tvb pointer to buffer containing raw packet.
1697
 *@param pinfo pointer to packet information fields
1698
 *@param tree pointer to data tree Wireshark uses to display packet.
1699
*/
1700
static int
1701
dissect_zbee_zcl_price(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
1702
26
{
1703
26
    proto_tree        *payload_tree;
1704
26
    zbee_zcl_packet   *zcl;
1705
26
    unsigned          offset = 0;
1706
26
    uint8_t           cmd_id;
1707
26
    int               rem_len;
1708
1709
    /* Reject the packet if data is NULL */
1710
26
    if (data == NULL)
1711
0
        return 0;
1712
26
    zcl = (zbee_zcl_packet *)data;
1713
26
    cmd_id = zcl->cmd_id;
1714
1715
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
1716
26
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
1717
        /* Append the command name to the info column. */
1718
3
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
1719
3
            val_to_str_const(cmd_id, zbee_zcl_price_srv_rx_cmd_names, "Unknown Command"),
1720
3
            zcl->tran_seqno);
1721
1722
        /* Add the command ID. */
1723
3
        proto_tree_add_uint(tree, hf_zbee_zcl_price_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
1724
1725
        /* Check is this command has a payload, than add the payload tree */
1726
3
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
1727
3
        if (rem_len > 0) {
1728
3
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_price, NULL, "Payload");
1729
1730
            /* Call the appropriate command dissector */
1731
3
            switch (cmd_id) {
1732
1733
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENT_PRICE:
1734
0
                    dissect_zcl_price_get_current_price(tvb, payload_tree, &offset);
1735
0
                    break;
1736
1737
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_SCHEDULED_PRICES:
1738
0
                    dissect_zcl_price_get_scheduled_prices(tvb, payload_tree, &offset);
1739
0
                    break;
1740
1741
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_ACKNOWLEDGEMENT:
1742
0
                    dissect_zcl_price_get_price_acknowledgement(tvb, payload_tree, &offset);
1743
0
                    break;
1744
1745
1
                case ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_PERIOD:
1746
1
                    dissect_zcl_price_get_block_period(tvb, payload_tree, &offset);
1747
1
                    break;
1748
1749
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CONVERSION_FACTOR:
1750
0
                    dissect_zcl_price_get_conversion_factor(tvb, payload_tree, &offset);
1751
0
                    break;
1752
1753
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CALORIFIC_VALUE:
1754
0
                    dissect_zcl_price_get_calorific_value(tvb, payload_tree, &offset);
1755
0
                    break;
1756
1757
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_INFORMATION:
1758
0
                    dissect_zcl_price_get_tariff_information(tvb, payload_tree, &offset);
1759
0
                    break;
1760
1761
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_MATRIX:
1762
0
                    dissect_zcl_price_get_price_matrix(tvb, payload_tree, &offset);
1763
0
                    break;
1764
1765
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_THRESHOLDS:
1766
0
                    dissect_zcl_price_get_block_thresholds(tvb, payload_tree, &offset);
1767
0
                    break;
1768
1769
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CO2_VALUE:
1770
0
                    dissect_zcl_price_get_co2_value(tvb, payload_tree, &offset);
1771
0
                    break;
1772
1773
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_TIER_LABELS:
1774
0
                    dissect_zcl_price_get_tier_labels(tvb, payload_tree, &offset);
1775
0
                    break;
1776
1777
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_BILLING_PERIOD:
1778
0
                    dissect_zcl_price_get_billing_period(tvb, payload_tree, &offset);
1779
0
                    break;
1780
1781
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CONSOLIDATED_BILL:
1782
0
                    dissect_zcl_price_get_consolidated_bill(tvb, payload_tree, &offset);
1783
0
                    break;
1784
1785
0
                case ZBEE_ZCL_CMD_ID_PRICE_CPP_EVENT_RESPONSE:
1786
0
                    dissect_zcl_price_get_cpp_event(tvb, payload_tree, &offset);
1787
0
                    break;
1788
1789
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CREDIT_PAYMENT:
1790
0
                    dissect_zcl_price_get_credit_payment(tvb, payload_tree, &offset);
1791
0
                    break;
1792
1793
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENCY_CONVERSION:
1794
                    /* No Payload */
1795
0
                    break;
1796
1797
0
                case ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_CANCELLATION:
1798
                    /* No Payload */
1799
0
                    break;
1800
1801
2
                default:
1802
2
                    break;
1803
3
            }
1804
3
        }
1805
3
    }
1806
23
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
1807
        /* Append the command name to the info column. */
1808
23
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
1809
23
            val_to_str_const(cmd_id, zbee_zcl_price_srv_tx_cmd_names, "Unknown Command"),
1810
23
            zcl->tran_seqno);
1811
1812
        /* Add the command ID. */
1813
23
        proto_tree_add_uint(tree, hf_zbee_zcl_price_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
1814
1815
        /* Check is this command has a payload, than add the payload tree */
1816
23
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
1817
23
        if (rem_len > 0) {
1818
23
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_price, NULL, "Payload");
1819
1820
            /* Call the appropriate command dissector */
1821
23
            switch (cmd_id) {
1822
1823
1
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE:
1824
1
                    dissect_zcl_price_publish_price(tvb, payload_tree, &offset);
1825
1
                    break;
1826
1827
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_PERIOD:
1828
0
                    dissect_zcl_price_publish_block_period(tvb, payload_tree, &offset);
1829
0
                    break;
1830
1831
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONVERSION_FACTOR:
1832
0
                    dissect_zcl_price_publish_conversion_factor(tvb, payload_tree, &offset);
1833
0
                    break;
1834
1835
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CALORIFIC_VALUE:
1836
0
                    dissect_zcl_price_publish_calorific_value(tvb, payload_tree, &offset);
1837
0
                    break;
1838
1839
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TARIFF_INFORMATION:
1840
0
                    dissect_zcl_price_publish_tariff_information(tvb, payload_tree, &offset);
1841
0
                    break;
1842
1843
4
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE_MATRIX:
1844
4
                    dissect_zcl_price_publish_price_matrix(tvb, payload_tree, &offset);
1845
4
                    break;
1846
1847
15
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_THRESHOLDS:
1848
15
                    dissect_zcl_price_publish_block_thresholds(tvb, payload_tree, &offset);
1849
15
                    break;
1850
1851
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CO2_VALUE:
1852
0
                    dissect_zcl_price_publish_co2_value(tvb, payload_tree, &offset);
1853
0
                    break;
1854
1855
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TIER_LABELS:
1856
0
                    dissect_zcl_price_publish_tier_labels(tvb, payload_tree, &offset);
1857
0
                    break;
1858
1859
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BILLING_PERIOD:
1860
0
                    dissect_zcl_price_publish_billing_period(tvb, payload_tree, &offset);
1861
0
                    break;
1862
1863
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONSOLIDATED_BILL:
1864
0
                    dissect_zcl_price_publish_consolidated_bill(tvb, payload_tree, &offset);
1865
0
                    break;
1866
1867
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CPP_EVENT:
1868
0
                    dissect_zcl_price_publish_cpp_event(tvb, payload_tree, &offset);
1869
0
                    break;
1870
1871
1
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CREDIT_PAYMENT:
1872
1
                    dissect_zcl_price_publish_credit_payment(tvb, payload_tree, &offset);
1873
1
                    break;
1874
1875
0
                case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CURRENCY_CONVERSION:
1876
0
                    dissect_zcl_price_publish_currency_conversion(tvb, payload_tree, &offset);
1877
0
                    break;
1878
1879
0
                case ZBEE_ZCL_CMD_ID_PRICE_CANCEL_TARIFF:
1880
0
                    dissect_zcl_price_publish_cancel_tariff(tvb, payload_tree, &offset);
1881
0
                    break;
1882
1883
2
                default:
1884
2
                    break;
1885
23
            }
1886
23
        }
1887
23
    }
1888
1889
7
    return tvb_captured_length(tvb);
1890
26
} /*dissect_zbee_zcl_price*/
1891
1892
/**
1893
 *This function manages the Get Current Price payload
1894
 *
1895
 *@param tvb pointer to buffer containing raw packet.
1896
 *@param tree pointer to data tree Wireshark uses to display packet.
1897
 *@param offset pointer to offset from caller
1898
*/
1899
static void
1900
dissect_zcl_price_get_current_price(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1901
0
{
1902
    /* Command Options */
1903
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_command_options, tvb, *offset, 1, ENC_NA);
1904
0
    *offset += 1;
1905
0
} /*dissect_zcl_price_get_current_price*/
1906
1907
/**
1908
 *This function manages the Get Scheduled Prices payload
1909
 *
1910
 *@param tvb pointer to buffer containing raw packet.
1911
 *@param tree pointer to data tree Wireshark uses to display packet.
1912
 *@param offset pointer to offset from caller
1913
*/
1914
static void
1915
dissect_zcl_price_get_scheduled_prices(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1916
0
{
1917
    /* Start Time */
1918
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
1919
0
    *offset += 4;
1920
1921
    /* Number of Events */
1922
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_events, tvb, *offset, 1, ENC_NA);
1923
0
    *offset += 1;
1924
0
} /*dissect_zcl_price_get_scheduled_prices*/
1925
1926
/**
1927
 *This function manages the Get Price Acknowledgement payload
1928
 *
1929
 *@param tvb pointer to buffer containing raw packet.
1930
 *@param tree pointer to data tree Wireshark uses to display packet.
1931
 *@param offset pointer to offset from caller
1932
*/
1933
static void
1934
dissect_zcl_price_get_price_acknowledgement(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1935
0
{
1936
    /* Provider ID */
1937
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1938
0
    *offset += 4;
1939
1940
    /* Issuer Event ID */
1941
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1942
0
    *offset += 4;
1943
1944
    /* Price Ack Time */
1945
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_price_ack_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
1946
0
    *offset += 4;
1947
1948
    /* Price Control */
1949
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_control, tvb, *offset, 1, ENC_NA);
1950
0
    *offset += 1;
1951
0
} /*dissect_zcl_price_get_price_acknowledgement*/
1952
1953
/**
1954
 *This function manages the Get Block Period payload
1955
 *
1956
 *@param tvb pointer to buffer containing raw packet.
1957
 *@param tree pointer to data tree Wireshark uses to display packet.
1958
 *@param offset pointer to offset from caller
1959
*/
1960
static void
1961
dissect_zcl_price_get_block_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1962
1
{
1963
    /* Start Time */
1964
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
1965
1
    *offset += 4;
1966
1967
    /* Number of Events */
1968
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_events, tvb, *offset, 1, ENC_NA);
1969
1
    *offset += 1;
1970
1971
    /* (Optional) Tariff Type */
1972
1
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
1973
1
        proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
1974
1
        *offset += 1;
1975
1
    }
1976
1
} /*dissect_zcl_price_get_block_period*/
1977
1978
/**
1979
 *This function manages the Get Conversion Factor payload
1980
 *
1981
 *@param tvb pointer to buffer containing raw packet.
1982
 *@param tree pointer to data tree Wireshark uses to display packet.
1983
 *@param offset pointer to offset from caller
1984
*/
1985
static void
1986
dissect_zcl_price_get_conversion_factor(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1987
0
{
1988
    /* Earliest Start Time */
1989
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
1990
0
    *offset += 4;
1991
1992
    /* Min Issuer Event ID */
1993
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1994
0
    *offset += 4;
1995
1996
    /* Number of Commands */
1997
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
1998
0
    *offset += 1;
1999
0
} /*dissect_zcl_price_get_conversion_factor*/
2000
2001
/**
2002
 *This function manages the Get Calorific Value payload
2003
 *
2004
 *@param tvb pointer to buffer containing raw packet.
2005
 *@param tree pointer to data tree Wireshark uses to display packet.
2006
 *@param offset pointer to offset from caller
2007
*/
2008
static void
2009
dissect_zcl_price_get_calorific_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2010
0
{
2011
2012
    /* Earliest Start Time */
2013
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2014
0
    *offset += 4;
2015
2016
    /* Min Issuer Event ID */
2017
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2018
0
    *offset += 4;
2019
2020
    /* Number of Commands */
2021
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2022
0
    *offset += 1;
2023
0
} /*dissect_zcl_price_get_calorific_value*/
2024
2025
/**
2026
 *This function manages the Get Tariff Information payload
2027
 *
2028
 *@param tvb pointer to buffer containing raw packet.
2029
 *@param tree pointer to data tree Wireshark uses to display packet.
2030
 *@param offset pointer to offset from caller
2031
*/
2032
static void
2033
dissect_zcl_price_get_tariff_information(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2034
0
{
2035
    /* Earliest Start Time */
2036
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2037
0
    *offset += 4;
2038
2039
    /* Min Issuer Event ID */
2040
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2041
0
    *offset += 4;
2042
2043
    /* Number of Commands */
2044
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2045
0
    *offset += 1;
2046
2047
    /* Tariff Type */
2048
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2049
0
    *offset += 1;
2050
2051
0
} /*dissect_zcl_price_get_tariff_information*/
2052
2053
/**
2054
 *This function manages the Get Price Matrix payload
2055
 *
2056
 *@param tvb pointer to buffer containing raw packet.
2057
 *@param tree pointer to data tree Wireshark uses to display packet.
2058
 *@param offset pointer to offset from caller
2059
*/
2060
static void
2061
dissect_zcl_price_get_price_matrix(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2062
0
{
2063
    /* Issuer Tariff ID */
2064
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2065
0
    *offset += 4;
2066
0
} /*dissect_zcl_price_get_price_matrix*/
2067
2068
/**
2069
 *This function manages the Get Block Thresholds payload
2070
 *
2071
 *@param tvb pointer to buffer containing raw packet.
2072
 *@param tree pointer to data tree Wireshark uses to display packet.
2073
 *@param offset pointer to offset from caller
2074
*/
2075
static void
2076
dissect_zcl_price_get_block_thresholds(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2077
0
{
2078
    /* Issuer Tariff ID */
2079
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2080
0
    *offset += 4;
2081
0
} /*dissect_zcl_price_get_block_thresholds*/
2082
2083
/**
2084
 *This function manages the Get CO2 Value payload
2085
 *
2086
 *@param tvb pointer to buffer containing raw packet.
2087
 *@param tree pointer to data tree Wireshark uses to display packet.
2088
 *@param offset pointer to offset from caller
2089
*/
2090
static void
2091
dissect_zcl_price_get_co2_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2092
0
{
2093
    /* Earliest Start Time */
2094
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2095
0
    *offset += 4;
2096
2097
    /* Min Issuer Event ID */
2098
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2099
0
    *offset += 4;
2100
2101
    /* Number of Commands */
2102
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2103
0
    *offset += 1;
2104
2105
    /* (Optional) Tariff Type */
2106
0
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2107
0
        proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2108
0
        *offset += 1;
2109
0
    }
2110
0
} /*dissect_zcl_price_get_co2_value*/
2111
2112
/**
2113
 *This function manages the Get Tier Labels payload
2114
 *
2115
 *@param tvb pointer to buffer containing raw packet.
2116
 *@param tree pointer to data tree Wireshark uses to display packet.
2117
 *@param offset pointer to offset from caller
2118
*/
2119
static void
2120
dissect_zcl_price_get_tier_labels(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2121
0
{
2122
    /* Issuer Tariff ID */
2123
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2124
0
    *offset += 4;
2125
0
} /*dissect_zcl_price_get_tier_labels*/
2126
2127
/**
2128
 *This function manages the Get Billing Period payload
2129
 *
2130
 *@param tvb pointer to buffer containing raw packet.
2131
 *@param tree pointer to data tree Wireshark uses to display packet.
2132
 *@param offset pointer to offset from caller
2133
*/
2134
static void
2135
dissect_zcl_price_get_billing_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2136
0
{
2137
    /* Earliest Start Time */
2138
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2139
0
    *offset += 4;
2140
2141
    /* Min Issuer Event ID */
2142
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2143
0
    *offset += 4;
2144
2145
    /* Number of Commands */
2146
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2147
0
    *offset += 1;
2148
2149
    /* (Optional) Tariff Type */
2150
0
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2151
0
        proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2152
0
        *offset += 1;
2153
0
    }
2154
2155
0
} /*dissect_zcl_price_get_billing_period*/
2156
2157
/**
2158
 *This function manages the Get Consolidated Bill payload
2159
 *
2160
 *@param tvb pointer to buffer containing raw packet.
2161
 *@param tree pointer to data tree Wireshark uses to display packet.
2162
 *@param offset pointer to offset from caller
2163
*/
2164
static void
2165
dissect_zcl_price_get_consolidated_bill(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2166
0
{
2167
2168
    /* Earliest Start Time */
2169
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2170
0
    *offset += 4;
2171
2172
    /* Min Issuer Event ID */
2173
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2174
0
    *offset += 4;
2175
2176
    /* Number of Commands */
2177
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2178
0
    *offset += 1;
2179
2180
    /* (Optional) Tariff Type */
2181
0
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2182
0
        proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2183
0
        *offset += 1;
2184
0
    }
2185
2186
0
} /*dissect_zcl_price_get_consolidated_bill*/
2187
2188
/**
2189
 *This function manages the Get CPP Event Response payload
2190
 *
2191
 *@param tvb pointer to buffer containing raw packet.
2192
 *@param tree pointer to data tree Wireshark uses to display packet.
2193
 *@param offset pointer to offset from caller
2194
*/
2195
static void
2196
dissect_zcl_price_get_cpp_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2197
0
{
2198
    /* Issuer Event ID */
2199
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2200
0
    *offset += 4;
2201
2202
    /* CPP Auth */
2203
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_auth, tvb, *offset, 1, ENC_NA);
2204
0
    *offset += 1;
2205
0
} /*dissect_zcl_price_get_event_response*/
2206
2207
/**
2208
 *This function manages the Get Credit Payment payload
2209
 *
2210
 *@param tvb pointer to buffer containing raw packet.
2211
 *@param tree pointer to data tree Wireshark uses to display packet.
2212
 *@param offset pointer to offset from caller
2213
*/
2214
static void
2215
dissect_zcl_price_get_credit_payment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2216
0
{
2217
2218
    /* Latest End Time */
2219
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_latest_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2220
0
    *offset += 4;
2221
2222
    /* Number of Records */
2223
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_records, tvb, *offset, 1, ENC_NA);
2224
0
    *offset += 1;
2225
0
} /*dissect_zcl_price_get_credit_payment*/
2226
2227
/**
2228
 *This function manages the Publish Price payload
2229
 *
2230
 *@param tvb pointer to buffer containing raw packet.
2231
 *@param tree pointer to data tree Wireshark uses to display packet.
2232
 *@param offset pointer to offset from caller
2233
*/
2234
static void
2235
dissect_zcl_price_publish_price(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2236
1
{
2237
1
    int length;
2238
2239
1
    static int * const trailing_digit[] = {
2240
1
        &hf_zbee_zcl_price_tier,
2241
1
        &hf_zbee_zcl_price_trailing_digit,
2242
1
        NULL
2243
1
    };
2244
2245
1
    static int * const number_of_price_tiers_and_register_tier[] = {
2246
1
        &hf_zbee_zcl_price_register_tier,
2247
1
        &hf_zbee_zcl_price_number_of_price_tiers,
2248
1
        NULL
2249
1
    };
2250
2251
1
    static int * const alternate_cost_trailing_digit[] = {
2252
1
        &hf_zbee_zcl_price_alternate_cost_trailing_digit,
2253
1
        NULL
2254
1
    };
2255
2256
    /* Provider ID */
2257
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2258
1
    *offset += 4;
2259
2260
    /* Rate Label */
2261
1
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_rate_label, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &length);
2262
1
    *offset += length;
2263
2264
    /* Issuer Event ID */
2265
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2266
1
    *offset += 4;
2267
2268
    /* Current Time */
2269
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_current_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2270
1
    *offset += 4;
2271
2272
    /* Unit of Measure */
2273
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_unit_of_measure, tvb, *offset, 1, ENC_NA);
2274
1
    *offset += 1;
2275
2276
    /* Currency */
2277
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2278
1
    *offset += 2;
2279
2280
    /* Price Trailing Digit and Price Tier */
2281
1
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_trailing_digit_and_price_tier, ett_zbee_zcl_price_trailing_digit_and_price_tier, trailing_digit, ENC_LITTLE_ENDIAN);
2282
1
    *offset += 1;
2283
2284
    /* Number of Price Tiers and Register Tier */
2285
1
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_number_of_price_tiers_and_register_tier, ett_zbee_zcl_price_number_of_price_tiers_and_register_tier, number_of_price_tiers_and_register_tier, ENC_LITTLE_ENDIAN);
2286
1
    *offset += 1;
2287
2288
    /* Start Time */
2289
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2290
1
    *offset += 4;
2291
2292
    /* Duration in Minutes */
2293
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_duration_in_minutes, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2294
1
    *offset += 2;
2295
2296
    /* Price */
2297
1
    proto_tree_add_item(tree, hf_zbee_zcl_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2298
1
    *offset += 4;
2299
2300
    /* (Optional) Price Ratio */
2301
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2302
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_ratio, tvb, *offset, 1, ENC_NA);
2303
1
    *offset += 1;
2304
2305
    /* (Optional) Generation Price */
2306
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2307
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_generation_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2308
1
    *offset += 4;
2309
2310
    /* (Optional) Generation Price Ratio */
2311
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2312
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_generation_price_ratio, tvb, *offset, 1, ENC_NA);
2313
1
    *offset += 1;
2314
2315
    /* (Optional) Alternate Cost Delivered */
2316
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2317
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_alternate_cost_delivered, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2318
1
    *offset += 4;
2319
2320
    /* (Optional) Alternate Cost Unit */
2321
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2322
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_alternate_cost_unit, tvb, *offset, 1, ENC_NA);
2323
1
    *offset += 1;
2324
2325
    /* (Optional) Alternate Cost Trailing Digit */
2326
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2327
1
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_alternate_cost_trailing_digit_mask, ett_zbee_zcl_price_alternate_cost_trailing_digit, alternate_cost_trailing_digit, ENC_LITTLE_ENDIAN);
2328
1
    *offset += 1;
2329
2330
    /* (Optional) Number of Block Thresholds */
2331
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2332
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_block_thresholds, tvb, *offset, 1, ENC_NA);
2333
1
    *offset += 1;
2334
2335
    /* (Optional) Price Control */
2336
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2337
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_control, tvb, *offset, 1, ENC_NA);
2338
1
    *offset += 1;
2339
2340
    /* (Optional) Number of Generation Tiers */
2341
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2342
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_generation_tiers, tvb, *offset, 1, ENC_NA);
2343
1
    *offset += 1;
2344
2345
    /* (Optional) Generation Tier */
2346
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2347
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_generation_tier, tvb, *offset, 1, ENC_NA);
2348
1
    *offset += 1;
2349
2350
    /* (Optional) Extended Number of Price Tiers */
2351
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2352
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_extended_number_of_price_tiers, tvb, *offset, 1, ENC_NA);
2353
1
    *offset += 1;
2354
2355
    /* (Optional) Extended Price Tier */
2356
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2357
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_extended_price_tier, tvb, *offset, 1, ENC_NA);
2358
1
    *offset += 1;
2359
2360
    /* (Optional) Extended Register Tier */
2361
1
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2362
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_extended_register_tier, tvb, *offset, 1, ENC_NA);
2363
1
    *offset += 1;
2364
1
} /*dissect_zcl_price_publish_price*/
2365
2366
/**
2367
 *This function manages the Publish Block Period payload
2368
 *
2369
 *@param tvb pointer to buffer containing raw packet.
2370
 *@param tree pointer to data tree Wireshark uses to display packet.
2371
 *@param offset pointer to offset from caller
2372
*/
2373
static void
2374
dissect_zcl_price_publish_block_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2375
0
{
2376
    /* Provider ID */
2377
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2378
0
    *offset += 4;
2379
2380
    /* Issuer Event ID */
2381
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2382
0
    *offset += 4;
2383
2384
    /* Block Period Start Time */
2385
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_block_period_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2386
0
    *offset += 4;
2387
2388
    /* Block Period Duration */
2389
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_block_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2390
0
    *offset += 3;
2391
2392
    /* Block Period Control */
2393
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_block_period_control, ett_zbee_zcl_price_block_period_control, zbee_zcl_price_block_period_control, ENC_LITTLE_ENDIAN);
2394
0
    *offset += 1;
2395
2396
    /* Block Period Duration Type */
2397
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_block_period_duration_type, ett_zbee_zcl_price_block_period_duration_type, zbee_zcl_price_block_period_duration_type, ENC_LITTLE_ENDIAN);
2398
0
    *offset += 1;
2399
2400
    /* Tariff Type */
2401
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
2402
0
    *offset += 1;
2403
2404
    /* Tariff Resolution Period */
2405
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_resolution_period, tvb, *offset, 1, ENC_NA);
2406
0
    *offset += 1;
2407
0
} /*dissect_zcl_price_publish_block_period*/
2408
2409
/**
2410
 *This function manages the Publish Conversion Factor payload
2411
 *
2412
 *@param tvb pointer to buffer containing raw packet.
2413
 *@param tree pointer to data tree Wireshark uses to display packet.
2414
 *@param offset pointer to offset from caller
2415
*/
2416
static void
2417
dissect_zcl_price_publish_conversion_factor(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2418
0
{
2419
0
    static int * const conversion_factor_trailing_digit[] = {
2420
0
        &hf_zbee_zcl_price_conversion_factor_trailing_digit,
2421
0
        NULL
2422
0
    };
2423
2424
    /* Issuer Event ID */
2425
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2426
0
    *offset += 4;
2427
2428
    /* Start Time */
2429
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2430
0
    *offset += 4;
2431
2432
    /* Conversion Factor */
2433
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_conversion_factor, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2434
0
    *offset += 4;
2435
2436
    /* Conversion Factor Trailing digit */
2437
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_conversion_factor_trailing_digit_mask, ett_zbee_zcl_price_conversion_factor_trailing_digit, conversion_factor_trailing_digit, ENC_LITTLE_ENDIAN);
2438
0
    *offset += 1;
2439
0
} /*dissect_zcl_price_publish_conversion_factor*/
2440
2441
/**
2442
 *This function manages the Publish Calorific Value payload
2443
 *
2444
 *@param tvb pointer to buffer containing raw packet.
2445
 *@param tree pointer to data tree Wireshark uses to display packet.
2446
 *@param offset pointer to offset from caller
2447
*/
2448
static void
2449
dissect_zcl_price_publish_calorific_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2450
0
{
2451
0
    static int * const calorific_value_trailing_digit[] = {
2452
0
        &hf_zbee_zcl_price_calorific_value_trailing_digit,
2453
0
        NULL
2454
0
    };
2455
2456
    /* Issuer Event ID */
2457
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2458
0
    *offset += 4;
2459
2460
    /* Start Time */
2461
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2462
0
    *offset += 4;
2463
2464
    /* Calorific Value */
2465
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_calorific_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2466
0
    *offset += 4;
2467
2468
    /* Calorific Value Unit */
2469
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_calorific_value_unit, tvb, *offset, 1, ENC_NA);
2470
0
    *offset += 1;
2471
2472
    /* Calorific Value Trailing digit */
2473
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_calorific_value_trailing_digit_mask, ett_zbee_zcl_price_calorific_value_trailing_digit, calorific_value_trailing_digit, ENC_LITTLE_ENDIAN);
2474
0
    *offset += 1;
2475
0
} /*dissect_zcl_price_publish_calorific_value*/
2476
2477
/**
2478
 *This function manages the Publish Tariff Information payload
2479
 *
2480
 *@param tvb pointer to buffer containing raw packet.
2481
 *@param tree pointer to data tree Wireshark uses to display packet.
2482
 *@param offset pointer to offset from caller
2483
*/
2484
static void
2485
dissect_zcl_price_publish_tariff_information(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2486
0
{
2487
0
    int length;
2488
2489
0
    static int * const price_trailing_digit[] = {
2490
0
        &hf_zbee_zcl_price_tariff_information_price_trailing_digit,
2491
0
        NULL
2492
0
    };
2493
2494
0
    static int * const type_and_charging_scheme[] = {
2495
0
        &hf_zbee_zcl_price_tariff_information_type,
2496
0
        &hf_zbee_zcl_price_tariff_information_charging_scheme,
2497
0
        NULL
2498
0
    };
2499
2500
    /* Provider ID */
2501
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2502
0
    *offset += 4;
2503
2504
    /* Issuer Event ID */
2505
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2506
0
    *offset += 4;
2507
2508
    /* Issuer Tariff ID */
2509
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2510
0
    *offset += 4;
2511
2512
    /* Start Time */
2513
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2514
0
    *offset += 4;
2515
2516
    /* Tariff Type / Charging Scheme */
2517
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_information_type_and_charging_scheme, ett_zbee_zcl_price_tariff_information_tariff_type_and_charging_scheme, type_and_charging_scheme, ENC_LITTLE_ENDIAN);
2518
0
    *offset += 1;
2519
2520
    /* Tariff Label */
2521
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_tariff_information_tariff_label, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2522
0
    *offset += length;
2523
2524
    /* Number of Price Tiers in Use */
2525
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use, tvb, *offset, 1, ENC_NA);
2526
0
    *offset += 1;
2527
2528
    /* Number of Block Thresholds in Use */
2529
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use, tvb, *offset, 1, ENC_NA);
2530
0
    *offset += 1;
2531
2532
    /* Unit of Measure */
2533
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_unit_of_measure, tvb, *offset, 1, ENC_NA);
2534
0
    *offset += 1;
2535
2536
    /* Currency */
2537
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2538
0
    *offset += 2;
2539
2540
    /* Price Trailing Digit */
2541
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_information_price_trailing_digit_mask, ett_zbee_zcl_price_tariff_information_price_trailing_digit, price_trailing_digit, ENC_LITTLE_ENDIAN);
2542
0
    *offset += 1;
2543
2544
    /* Standing Charge */
2545
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_standing_charge, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2546
0
    *offset += 4;
2547
2548
    /* Tier Block Mode */
2549
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_tier_block_mode, tvb, *offset, 1, ENC_NA);
2550
0
    *offset += 1;
2551
2552
    /* Block Threshold Multiplier */
2553
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_block_threshold_multiplier, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2554
0
    *offset += 3;
2555
2556
    /* Block Threshold Divisor */
2557
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_block_threshold_divisor, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2558
0
    *offset += 3;
2559
0
} /*dissect_zcl_price_publish_tariff_information*/
2560
2561
/**
2562
 *This function manages the Publish Price Matrix payload
2563
 *
2564
 *@param tvb pointer to buffer containing raw packet.
2565
 *@param tree pointer to data tree Wireshark uses to display packet.
2566
 *@param offset pointer to offset from caller
2567
*/
2568
static void
2569
dissect_zcl_price_publish_price_matrix(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2570
4
{
2571
4
    uint8_t sub_payload_control;
2572
2573
4
    static int * const tier_block_id[] = {
2574
4
        &hf_zbee_zcl_price_price_matrix_tier_block_id_block,
2575
4
        &hf_zbee_zcl_price_price_matrix_tier_block_id_tier,
2576
4
        NULL
2577
4
    };
2578
2579
    /* Provider ID */
2580
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2581
4
    *offset += 4;
2582
2583
    /* Issuer Event ID */
2584
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2585
4
    *offset += 4;
2586
2587
    /* Start Time */
2588
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2589
4
    *offset += 4;
2590
2591
    /* Issuer Tariff ID */
2592
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2593
4
    *offset += 4;
2594
2595
    /* Command Index */
2596
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2597
4
    *offset += 1;
2598
2599
    /* Total Number of Commands */
2600
4
    proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2601
4
    *offset += 1;
2602
2603
    /* Sub-Payload Control */
2604
4
    proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_price_price_matrix_sub_payload_control, tvb, *offset, 1, ENC_NA, &sub_payload_control);
2605
4
    *offset += 1;
2606
2607
95
    while (tvb_reported_length_remaining(tvb, *offset) > 0) {
2608
        /* Tier/Block ID */
2609
91
        if (sub_payload_control == 0)
2610
36
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_price_matrix_tier_block_id, ett_zbee_zcl_price_price_matrix_tier_block_id, tier_block_id, ENC_LITTLE_ENDIAN);
2611
55
        else
2612
55
            proto_tree_add_item(tree, hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier, tvb, *offset, 1, ENC_NA);
2613
91
        *offset += 1;
2614
2615
        /* Price */
2616
91
        proto_tree_add_item(tree, hf_zbee_zcl_price_price_matrix_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2617
91
        *offset += 4;
2618
91
    }
2619
4
} /*dissect_zcl_price_publish_price_matrix*/
2620
2621
/**
2622
 *This function manages the Publish Block Thresholds payload
2623
 *
2624
 *@param tvb pointer to buffer containing raw packet.
2625
 *@param tree pointer to data tree Wireshark uses to display packet.
2626
 *@param offset pointer to offset from caller
2627
*/
2628
static void
2629
dissect_zcl_price_publish_block_thresholds(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2630
15
{
2631
15
    uint8_t sub_payload_control;
2632
2633
15
    static int * const tier_number_of_block_thresholds[] = {
2634
15
        &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
2635
15
        &hf_zbee_zcl_price_block_thresholds_tier,
2636
15
        NULL
2637
15
    };
2638
2639
15
    static int * const number_of_block_thresholds[] = {
2640
15
        &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
2641
15
        NULL
2642
15
    };
2643
2644
    /* Provider ID */
2645
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2646
15
    *offset += 4;
2647
2648
    /* Issuer Event ID */
2649
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2650
15
    *offset += 4;
2651
2652
    /* Start Time */
2653
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2654
15
    *offset += 4;
2655
2656
    /* Issuer Tariff ID */
2657
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2658
15
    *offset += 4;
2659
2660
    /* Command Index */
2661
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2662
15
    *offset += 1;
2663
2664
    /* Total Number of Commands */
2665
15
    proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2666
15
    *offset += 1;
2667
2668
    /* Sub-Payload Control */
2669
15
    proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_price_block_thresholds_sub_payload_control, tvb, *offset, 1, ENC_NA, &sub_payload_control);
2670
15
    *offset += 1;
2671
2672
237
    while (tvb_reported_length_remaining(tvb, *offset) > 0) {
2673
222
        uint8_t thresholds;
2674
2675
        /* Tier/Number of Block Thresholds */
2676
222
        thresholds = tvb_get_uint8(tvb, *offset) & ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS;
2677
222
        if (sub_payload_control == 0)
2678
205
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds, ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds, tier_number_of_block_thresholds, ENC_LITTLE_ENDIAN);
2679
17
        else
2680
17
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds, ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds, number_of_block_thresholds, ENC_LITTLE_ENDIAN);
2681
222
        *offset += 1;
2682
2683
        /* Block Threshold(s) */
2684
576
        for (int i = 0; i < thresholds; i++) {
2685
354
            proto_tree_add_item(tree, hf_zbee_zcl_price_block_thresholds_block_threshold, tvb, *offset, 6, ENC_LITTLE_ENDIAN);
2686
354
            *offset += 6;
2687
354
        }
2688
222
    }
2689
15
} /*dissect_zcl_price_publish_block_thresholds*/
2690
2691
/**
2692
 *This function manages the Publish CO2 Value payload
2693
 *
2694
 *@param tvb pointer to buffer containing raw packet.
2695
 *@param tree pointer to data tree Wireshark uses to display packet.
2696
 *@param offset pointer to offset from caller
2697
*/
2698
static void
2699
dissect_zcl_price_publish_co2_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2700
0
{
2701
0
    static int * const co2_value_trailing_digit[] = {
2702
0
        &hf_zbee_zcl_price_co2_value_trailing_digit,
2703
0
        NULL
2704
0
    };
2705
2706
    /* Provider ID */
2707
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2708
0
    *offset += 4;
2709
2710
    /* Issuer Event ID */
2711
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2712
0
    *offset += 4;
2713
2714
    /* Start Time */
2715
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time_with_cancel, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2716
0
    *offset += 4;
2717
2718
    /* Tariff Type */
2719
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
2720
0
    *offset += 1;
2721
2722
    /* CO2 Value */
2723
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_co2_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2724
0
    *offset += 4;
2725
2726
    /* CO2 Unit */
2727
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_co2_unit, tvb, *offset, 1, ENC_NA);
2728
0
    *offset += 1;
2729
2730
    /* CO2 Value Trailing Digit */
2731
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_co2_value_trailing_digit_mask, ett_zbee_zcl_price_co2_value_trailing_digit, co2_value_trailing_digit, ENC_LITTLE_ENDIAN);
2732
0
    *offset += 1;
2733
0
} /*dissect_zcl_price_publish_co2_value*/
2734
2735
/**
2736
 *This function manages the Publish Tier Labels payload
2737
 *
2738
 *@param tvb pointer to buffer containing raw packet.
2739
 *@param tree pointer to data tree Wireshark uses to display packet.
2740
 *@param offset pointer to offset from caller
2741
*/
2742
static void
2743
dissect_zcl_price_publish_tier_labels(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2744
0
{
2745
0
    uint8_t number_of_labels;
2746
0
    int length;
2747
2748
    /* Provider ID */
2749
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2750
0
    *offset += 4;
2751
2752
    /* Issuer Event ID */
2753
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2754
0
    *offset += 4;
2755
2756
    /* Issuer Tariff ID */
2757
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2758
0
    *offset += 4;
2759
2760
    /* Command Index */
2761
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2762
0
    *offset += 1;
2763
2764
    /* Total Number of Commands */
2765
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2766
0
    *offset += 1;
2767
2768
    /* Number of Labels */
2769
0
    proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_price_tier_labels_number_of_labels, tvb, *offset, 1, ENC_NA, &number_of_labels);
2770
0
    *offset += 1;
2771
2772
0
    for (int i = 0; i < number_of_labels; i++) {
2773
        /* Tier ID */
2774
0
        proto_tree_add_item(tree, hf_zbee_zcl_price_tier_labels_tier_id, tvb, *offset, 1, ENC_NA);
2775
0
        *offset += 1;
2776
2777
        /* Tier Label */
2778
0
        proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_tier_labels_tier_label, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2779
0
        *offset += length;
2780
0
    }
2781
0
} /*dissect_zcl_price_publish_tier_labels*/
2782
2783
/**
2784
 *This function manages the Publish Consolidated Bill payload
2785
 *
2786
 *@param tvb pointer to buffer containing raw packet.
2787
 *@param tree pointer to data tree Wireshark uses to display packet.
2788
 *@param offset pointer to offset from caller
2789
*/
2790
static void
2791
dissect_zcl_price_publish_billing_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2792
0
{
2793
    /* Provider ID */
2794
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2795
0
    *offset += 4;
2796
2797
    /* Issuer Event ID */
2798
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2799
0
    *offset += 4;
2800
2801
    /* Billing Period Start Time */
2802
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2803
0
    *offset += 4;
2804
2805
    /* Billing Period Duration */
2806
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2807
0
    *offset += 3;
2808
2809
    /* Billing Period Duration Type */
2810
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_billing_period_duration_type, ett_zbee_zcl_price_billing_period_duration_type, zbee_zcl_price_billing_period_duration_type, ENC_LITTLE_ENDIAN);
2811
0
    *offset += 1;
2812
2813
    /* Tariff Type */
2814
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
2815
0
    *offset += 1;
2816
0
} /*dissect_zcl_price_publish_billing_period*/
2817
2818
/**
2819
 *This function manages the Publish Consolidated Bill payload
2820
 *
2821
 *@param tvb pointer to buffer containing raw packet.
2822
 *@param tree pointer to data tree Wireshark uses to display packet.
2823
 *@param offset pointer to offset from caller
2824
*/
2825
static void
2826
dissect_zcl_price_publish_consolidated_bill(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2827
0
{
2828
0
    static int * const bill_trailing_digit[] = {
2829
0
        &hf_zbee_zcl_price_consolidated_bill_trailing_digit,
2830
0
        NULL
2831
0
    };
2832
2833
    /* Provider ID */
2834
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2835
0
    *offset += 4;
2836
2837
    /* Issuer Event ID */
2838
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2839
0
    *offset += 4;
2840
2841
    /* Billing Period Start Time */
2842
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time_with_cancel, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2843
0
    *offset += 4;
2844
2845
    /* Billing Period Duration */
2846
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2847
0
    *offset += 3;
2848
2849
    /* Billing Period Duration Type */
2850
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_billing_period_duration_type, ett_zbee_zcl_price_billing_period_duration_type, zbee_zcl_price_billing_period_duration_type, ENC_LITTLE_ENDIAN);
2851
0
    *offset += 1;
2852
2853
    /* Tariff Type */
2854
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
2855
0
    *offset += 1;
2856
2857
    /* Consolidated Bill */
2858
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_consolidated_bill, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2859
0
    *offset += 4;
2860
2861
    /* Currency */
2862
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2863
0
    *offset += 2;
2864
2865
    /* Bill Trailing Digit */
2866
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_consolidated_bill_trailing_digit_mask, ett_zbee_zcl_price_consolidated_bill_trailing_digit, bill_trailing_digit, ENC_LITTLE_ENDIAN);
2867
0
    *offset += 1;
2868
0
} /*dissect_zcl_price_publish_consolidated_bill*/
2869
/**
2870
 *This function manages the Publish CPP Event payload
2871
 *
2872
 *@param tvb pointer to buffer containing raw packet.
2873
 *@param tree pointer to data tree Wireshark uses to display packet.
2874
 *@param offset pointer to offset from caller
2875
*/
2876
static void
2877
dissect_zcl_price_publish_cpp_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2878
0
{
2879
    /* Provider ID */
2880
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2881
0
    *offset += 4;
2882
2883
    /* Issuer Event ID */
2884
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2885
0
    *offset += 4;
2886
2887
    /* Start Time */
2888
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time_with_cancel, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2889
0
    *offset += 4;
2890
2891
    /* Duration in Minutes */
2892
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_duration_in_minutes, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2893
0
    *offset += 2;
2894
2895
    /* Tariff Type */
2896
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
2897
0
    *offset += 1;
2898
2899
    /* CPP Price Tier */
2900
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_price_tier, tvb, *offset, 1, ENC_NA);
2901
0
    *offset += 1;
2902
2903
    /* CPP Auth */
2904
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_auth, tvb, *offset, 1, ENC_NA);
2905
0
    *offset += 1;
2906
0
} /*dissect_zcl_price_publish_cpp_event*/
2907
2908
2909
/**
2910
 *This function manages the Publish Credit Payment payload
2911
 *
2912
 *@param tvb pointer to buffer containing raw packet.
2913
 *@param tree pointer to data tree Wireshark uses to display packet.
2914
 *@param offset pointer to offset from caller
2915
*/
2916
static void
2917
dissect_zcl_price_publish_credit_payment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2918
1
{
2919
1
    int length;
2920
2921
    /* Provider ID */
2922
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2923
1
    *offset += 4;
2924
2925
    /* Issuer Event ID */
2926
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2927
1
    *offset += 4;
2928
2929
    /* Credit Payment Due Date */
2930
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_due_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2931
1
    *offset += 4;
2932
2933
    /* Credit Payment Overdue Amount */
2934
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_overdue_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2935
1
    *offset += 4;
2936
2937
    /* Credit Payment Status */
2938
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_status, tvb, *offset, 1, ENC_NA);
2939
1
    *offset += 1;
2940
2941
    /* Credit Payment */
2942
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2943
1
    *offset += 4;
2944
2945
    /* Credit Payment Date */
2946
1
    proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2947
1
    *offset += 4;
2948
2949
    /* Credit Payment Ref */
2950
1
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_credit_payment_ref, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2951
1
    *offset += length;
2952
1
} /*dissect_zcl_price_publish_credit_payment*/
2953
2954
/**
2955
 *This function manages the Publish Currency Conversion payload
2956
 *
2957
 *@param tvb pointer to buffer containing raw packet.
2958
 *@param tree pointer to data tree Wireshark uses to display packet.
2959
 *@param offset pointer to offset from caller
2960
*/
2961
static void
2962
dissect_zcl_price_publish_currency_conversion(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2963
0
{
2964
2965
0
    static int * const conversion_factor_trailing_digit[] = {
2966
0
        &hf_zbee_zcl_price_conversion_factor_trailing_digit,
2967
0
        NULL
2968
0
    };
2969
2970
    /* Provider ID */
2971
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2972
0
    *offset += 4;
2973
2974
    /* Issuer Event ID */
2975
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2976
0
    *offset += 4;
2977
2978
    /* Start Time */
2979
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_start_time_with_cancel, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2980
0
    *offset += 4;
2981
2982
    /* Old Currency */
2983
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_old_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2984
0
    *offset += 2;
2985
2986
    /* New Currency */
2987
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_new_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2988
0
    *offset += 2;
2989
2990
    /* Conversion Factor */
2991
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_conversion_factor, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2992
0
    *offset += 4;
2993
2994
    /* Conversion Factor Trailing digit */
2995
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_conversion_factor_trailing_digit_mask, ett_zbee_zcl_price_conversion_factor_trailing_digit, conversion_factor_trailing_digit, ENC_LITTLE_ENDIAN);
2996
0
    *offset += 1;
2997
2998
    /* Currency Change Control Flags */
2999
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_currency_change_control_flags, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
3000
0
    *offset += 4;
3001
0
} /*dissect_zcl_price_publish_currency_conversion*/
3002
3003
/**
3004
 *This function manages the Publish Cancel Tariff payload
3005
 *
3006
 *@param tvb pointer to buffer containing raw packet.
3007
 *@param tree pointer to data tree Wireshark uses to display packet.
3008
 *@param offset pointer to offset from caller
3009
*/
3010
static void
3011
dissect_zcl_price_publish_cancel_tariff(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3012
0
{
3013
    /* Provider ID */
3014
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
3015
0
    *offset += 4;
3016
3017
    /* Issuer Event ID */
3018
0
    proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
3019
0
    *offset += 4;
3020
3021
    /* Tariff Type */
3022
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_price_tariff_type_mask, ett_zbee_zcl_price_tariff_type, zbee_zcl_price_tariff_type_mask, ENC_LITTLE_ENDIAN);
3023
0
    *offset += 1;
3024
0
} /*dissect_zcl_price_publish_cancel_tariff*/
3025
3026
/**
3027
 *This function registers the ZCL Price dissector
3028
 *
3029
*/
3030
void
3031
proto_register_zbee_zcl_price(void)
3032
15
{
3033
15
    static hf_register_info hf[] = {
3034
3035
15
        { &hf_zbee_zcl_price_attr_server_id,
3036
15
            { "Attribute", "zbee_zcl_se.price.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_price_attr_server_names_ext,
3037
15
            0x0, NULL, HFILL } },
3038
3039
15
        { &hf_zbee_zcl_price_attr_client_id,
3040
15
            { "Attribute", "zbee_zcl_se.price.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_price_attr_client_names),
3041
15
            0x0, NULL, HFILL } },
3042
3043
15
        { &hf_zbee_zcl_price_attr_reporting_status,                         /* common to all SE clusters */
3044
15
            { "Attribute Reporting Status", "zbee_zcl_se.price.attr.attr_reporting_status",
3045
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
3046
3047
15
        { &hf_zbee_zcl_price_srv_tx_cmd_id,
3048
15
            { "Command", "zbee_zcl_se.price.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_srv_tx_cmd_names),
3049
15
            0x00, NULL, HFILL } },
3050
3051
15
        { &hf_zbee_zcl_price_srv_rx_cmd_id,
3052
15
            { "Command", "zbee_zcl_se.price.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_srv_rx_cmd_names),
3053
15
            0x00, NULL, HFILL } },
3054
3055
15
        { &hf_zbee_zcl_price_provider_id,
3056
15
            { "Provider ID", "zbee_zcl_se.price.provider_id", FT_UINT32, BASE_DEC, NULL,
3057
15
            0x00, NULL, HFILL } },
3058
3059
15
        { &hf_zbee_zcl_price_issuer_event_id,
3060
15
            { "Issuer Event ID", "zbee_zcl_se.price.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
3061
15
            0x00, NULL, HFILL } },
3062
3063
15
        { &hf_zbee_zcl_price_min_issuer_event_id,
3064
15
            { "Min Issuer Event ID", "zbee_zcl_se.price.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
3065
15
            0x00, NULL, HFILL } },
3066
3067
15
        { &hf_zbee_zcl_price_issuer_tariff_id,
3068
15
            { "Issuer Tariff ID", "zbee_zcl_se.price.issuer_tariff_id", FT_UINT32, BASE_DEC, NULL,
3069
15
            0x00, NULL, HFILL } },
3070
3071
15
        { &hf_zbee_zcl_price_command_index,
3072
15
            { "Command Index", "zbee_zcl_se.price.command_index", FT_UINT8, BASE_DEC, NULL,
3073
15
            0x00, NULL, HFILL } },
3074
3075
15
        { &hf_zbee_zcl_price_total_number_of_commands,
3076
15
            { "Total Number of Commands", "zbee_zcl_se.price.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
3077
15
            0x00, NULL, HFILL } },
3078
3079
15
        { &hf_zbee_zcl_price_number_of_commands,
3080
15
            { "Number of Commands", "zbee_zcl_se.price.number_of_commands", FT_UINT8, BASE_DEC, NULL,
3081
15
            0x00, NULL, HFILL } },
3082
3083
15
        { &hf_zbee_zcl_price_number_of_events,
3084
15
            { "Number of Events", "zbee_zcl_se.price.number_of_events", FT_UINT8, BASE_DEC, NULL,
3085
15
            0x00, NULL, HFILL } },
3086
3087
15
        { &hf_zbee_zcl_price_number_of_records,
3088
15
            { "Number of Records", "zbee_zcl_se.price.number_of_records", FT_UINT8, BASE_DEC, NULL,
3089
15
            0x00, NULL, HFILL } },
3090
3091
15
        { &hf_zbee_zcl_price_number_of_block_thresholds,
3092
15
            { "Number of Block Thresholds", "zbee_zcl_se.price.number_of_block_thresholds", FT_UINT8, BASE_DEC, NULL,
3093
15
            0x00, NULL, HFILL } },
3094
3095
15
        { &hf_zbee_zcl_price_number_of_generation_tiers,
3096
15
            { "Number of Generation Tiers", "zbee_zcl_se.price.number_of_generation_tiers", FT_UINT8, BASE_DEC, NULL,
3097
15
            0x00, NULL, HFILL } },
3098
3099
15
        { &hf_zbee_zcl_price_extended_number_of_price_tiers,
3100
15
            { "Extended Number of Price Tiers", "zbee_zcl_se.price.extended_number_of_price_tiers", FT_UINT8, BASE_DEC, NULL,
3101
15
            0x00, NULL, HFILL } },
3102
3103
15
        { &hf_zbee_zcl_price_command_options,
3104
15
            { "Command Options", "zbee_zcl_se.price.command_options", FT_UINT8, BASE_HEX, NULL,
3105
15
            0x00, NULL, HFILL } },
3106
3107
15
        { &hf_zbee_zcl_price_control,
3108
15
            { "Price Control", "zbee_zcl_se.price.control", FT_UINT8, BASE_HEX, NULL,
3109
15
            0x00, NULL, HFILL } },
3110
3111
        /* start Tariff Type fields */
3112
15
        { &hf_zbee_zcl_price_tariff_type_mask,
3113
15
            { "Tariff Type", "zbee_zcl_se.price.tariff_type_mask", FT_UINT8, BASE_HEX, NULL,
3114
15
            0x00, NULL, HFILL } },
3115
3116
15
         { &hf_zbee_zcl_price_tariff_type,
3117
15
            { "Tariff Type", "zbee_zcl_se.price.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
3118
15
            ZBEE_ZCL_PRICE_TARIFF_TYPE, NULL, HFILL } },
3119
         /* end Tariff Type fields */
3120
3121
15
        { &hf_zbee_zcl_price_tariff_resolution_period,
3122
15
            { "Tariff Resolution Period", "zbee_zcl_se.price.tariff.resolution_period", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_resolution_period_names),
3123
15
            0x00, NULL, HFILL } },
3124
3125
15
        { &hf_zbee_zcl_price_cpp_price_tier,
3126
15
            { "CPP Price Tier", "zbee_zcl_se.price.cpp_price_tier", FT_UINT8, BASE_DEC, NULL,
3127
15
            0x00, NULL, HFILL } },
3128
3129
15
        { &hf_zbee_zcl_price_cpp_auth,
3130
15
            { "CPP Auth", "zbee_zcl_se.price.cpp_auth", FT_UINT8, BASE_DEC, NULL,
3131
15
            0x00, NULL, HFILL } },
3132
3133
15
        { &hf_zbee_zcl_price_rate_label,
3134
15
            { "Rate Label", "zbee_zcl_se.price.rate_label", FT_UINT_STRING, BASE_NONE, NULL,
3135
15
            0x00, NULL, HFILL } },
3136
3137
15
        { &hf_zbee_zcl_price_unit_of_measure,
3138
15
            { "Unit of Measure", "zbee_zcl_se.price.unit_of_measure", FT_UINT8, BASE_HEX, NULL,
3139
15
            0x00, NULL, HFILL } },
3140
3141
15
        { &hf_zbee_zcl_price_currency,
3142
15
            { "Currency", "zbee_zcl_se.price.currency", FT_UINT16, BASE_HEX, NULL,
3143
15
            0x00, NULL, HFILL } },
3144
3145
        /* start Trailing Digit and Price Tier fields */
3146
15
        { &hf_zbee_zcl_price_trailing_digit_and_price_tier,
3147
15
            { "Trailing Digit and Price Tier", "zbee_zcl_se.price.trailing_digit_and_price_tier", FT_UINT8, BASE_HEX, NULL,
3148
15
            0x00, NULL, HFILL } },
3149
3150
15
        { &hf_zbee_zcl_price_tier,
3151
15
            { "Price Tier", "zbee_zcl_se.price.tier", FT_UINT8, BASE_HEX, NULL,
3152
15
            ZBEE_ZCL_PRICE_TIER, NULL, HFILL } },
3153
3154
15
        { &hf_zbee_zcl_price_trailing_digit,
3155
15
            { "Trailing Digit", "zbee_zcl_se.price.trailing_digit", FT_UINT8, BASE_HEX, NULL,
3156
15
            ZBEE_ZCL_PRICE_TRAILING_DIGIT, NULL, HFILL } },
3157
         /* end Trailing Digit and Price Tier fields */
3158
3159
        /* start Number of Price Tiers and Register Tier fields */
3160
15
        { &hf_zbee_zcl_price_number_of_price_tiers_and_register_tier,
3161
15
            { "Number of Price Tiers and Register Tier", "zbee_zcl_se.price.number_of_price_tiers_and_register_tier", FT_UINT8, BASE_HEX, NULL,
3162
15
            0x00, NULL, HFILL } },
3163
3164
15
        { &hf_zbee_zcl_price_register_tier,
3165
15
            { "Register Tier", "zbee_zcl_se.price.register_tier", FT_UINT8, BASE_HEX, NULL,
3166
15
            ZBEE_ZCL_PRICE_REGISTER_TIER, NULL, HFILL } },
3167
3168
15
        { &hf_zbee_zcl_price_number_of_price_tiers,
3169
15
            { "Number of Price Tiers", "zbee_zcl_se.price.number_of_price_tiers", FT_UINT8, BASE_HEX, NULL,
3170
15
            ZBEE_ZCL_PRICE_NUMBER_OF_PRICE_TIERS, NULL, HFILL } },
3171
        /* end Number of Price Tiers and Register Tier fields */
3172
3173
15
        { &hf_zbee_zcl_price_extended_price_tier,
3174
15
            { "Extended Price Tier", "zbee_zcl_se.price.extended_price_tier", FT_UINT8, BASE_HEX, NULL,
3175
15
            0x00, NULL, HFILL } },
3176
3177
15
        { &hf_zbee_zcl_price_extended_register_tier,
3178
15
            { "Extended Register Tier", "zbee_zcl_se.price.extended_register_tier", FT_UINT8, BASE_HEX, NULL,
3179
15
            0x00, NULL, HFILL } },
3180
3181
15
        { &hf_zbee_zcl_price_duration_in_minutes,
3182
15
            { "Duration in Minutes", "zbee_zcl_se.price.duration_in_minutes", FT_UINT16, BASE_DEC, NULL,
3183
15
            0x00, NULL, HFILL } },
3184
3185
15
        { &hf_zbee_zcl_price,
3186
15
            { "Price", "zbee_zcl_se.price.price", FT_UINT32, BASE_DEC, NULL,
3187
15
            0x00, NULL, HFILL } },
3188
3189
15
        { &hf_zbee_zcl_price_ratio,
3190
15
            { "Price Ratio", "zbee_zcl_se.price.price.ratio", FT_UINT8, BASE_DEC, NULL,
3191
15
            0x00, NULL, HFILL } },
3192
3193
15
        { &hf_zbee_zcl_price_generation_price,
3194
15
            { "Generation Price", "zbee_zcl_se.price.generation_price", FT_UINT32, BASE_DEC, NULL,
3195
15
            0x00, NULL, HFILL } },
3196
3197
15
        { &hf_zbee_zcl_price_generation_price_ratio,
3198
15
            { "Generation Price Ratio", "zbee_zcl_se.price.generation_price.ratio", FT_UINT8, BASE_DEC, NULL,
3199
15
            0x00, NULL, HFILL } },
3200
3201
15
        { &hf_zbee_zcl_price_generation_tier,
3202
15
            { "Generation Tier", "zbee_zcl_se.price.generation_tier", FT_UINT8, BASE_HEX, NULL,
3203
15
            0x00, NULL, HFILL } },
3204
3205
15
        { &hf_zbee_zcl_price_alternate_cost_delivered,
3206
15
            { "Alternate Cost Delivered", "zbee_zcl_se.price.alternate_cost_delivered", FT_UINT32, BASE_DEC, NULL,
3207
15
            0x00, NULL, HFILL } },
3208
3209
15
        { &hf_zbee_zcl_price_alternate_cost_unit,
3210
15
            { "Alternate Cost Unit", "zbee_zcl_se.price.alternate_cost.unit", FT_UINT8, BASE_HEX, NULL,
3211
15
            0x00, NULL, HFILL } },
3212
3213
        /* start Alternate Cost Trailing Digit */
3214
15
        { &hf_zbee_zcl_price_alternate_cost_trailing_digit_mask,
3215
15
            { "Alternate Cost Trailing Digit", "zbee_zcl_se.price.alternate_cost.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3216
15
            0x00, NULL, HFILL } },
3217
3218
15
        { &hf_zbee_zcl_price_alternate_cost_trailing_digit,
3219
15
            { "Alternate Cost Trailing Digit", "zbee_zcl_se.price.alternate_cost.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3220
15
            ZBEE_ZCL_PRICE_ALTERNATE_COST_TRAILING_DIGIT, NULL, HFILL } },
3221
        /* end Alternate Cost Trailing Digit */
3222
3223
15
        { &hf_zbee_zcl_price_start_time,
3224
15
            { "Start Time", "zbee_zcl_se.price.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3225
15
                TIME_VALS(now_strings), 0x00, NULL, HFILL } },
3226
3227
15
        { &hf_zbee_zcl_price_start_time_with_cancel,
3228
15
            { "Start Time", "zbee_zcl_se.price.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3229
15
                TIME_VALS(now_or_cancel_strings), 0x00, NULL, HFILL } },
3230
3231
15
        { &hf_zbee_zcl_price_earliest_start_time,
3232
15
            { "Earliest Start Time", "zbee_zcl_se.price.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3233
15
               NULL, 0x00, NULL, HFILL } },
3234
3235
15
        { &hf_zbee_zcl_price_latest_end_time,
3236
15
            { "Latest End Time", "zbee_zcl_se.price.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3237
15
                NULL, 0x00, NULL, HFILL } },
3238
3239
15
        { &hf_zbee_zcl_price_current_time,
3240
15
            { "Current Time", "zbee_zcl_se.price.current_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3241
15
                NULL, 0x00, NULL, HFILL } },
3242
3243
15
        { &hf_zbee_zcl_price_price_ack_time,
3244
15
            { "Price Ack Time", "zbee_zcl_se.price.price_ack_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3245
15
                NULL, 0x00, NULL, HFILL } },
3246
3247
15
        { &hf_zbee_zcl_price_block_period_start_time,
3248
15
            { "Block Period Start Time", "zbee_zcl_se.price.block_period.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3249
15
                TIME_VALS(now_or_cancel_strings), 0x00, NULL, HFILL } },
3250
3251
15
        { &hf_zbee_zcl_price_block_period_duration,
3252
15
            { "Block Period Duration", "zbee_zcl_se.price.block_period.duration", FT_UINT24, BASE_DEC, NULL,
3253
15
            0x00, NULL, HFILL } },
3254
3255
        /* start Block Period Control */
3256
15
        { &hf_zbee_zcl_price_block_period_control,
3257
15
            { "Block Period Control", "zbee_zcl_se.price.block_period.control", FT_UINT8, BASE_HEX, NULL,
3258
15
            0x00, NULL, HFILL } },
3259
3260
15
        { &hf_zbee_zcl_price_block_period_control_price_acknowledgement,
3261
15
            { "Price Acknowledgement", "zbee_zcl_se.price.block_period.control.price_acknowledgement", FT_UINT8, BASE_DEC, VALS(zbee_zcl_price_block_period_control_price_acknowledgement_names),
3262
15
            ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT, NULL, HFILL } },
3263
3264
15
        { &hf_zbee_zcl_price_block_period_control_repeating_block,
3265
15
            { "Repeating Block", "zbee_zcl_se.price.block_period.control.repeating_block", FT_UINT8, BASE_DEC, VALS(zbee_zcl_price_block_period_control_repeating_block_names),
3266
15
            ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK, NULL, HFILL } },
3267
        /* end Block Period Control */
3268
3269
        /* start Block Period Duration Type fields */
3270
15
        { &hf_zbee_zcl_price_block_period_duration_type,
3271
15
            { "Block Period Duration Type", "zbee_zcl_se.price.block_period.duration.type", FT_UINT8, BASE_HEX, NULL,
3272
15
            0x00, NULL, HFILL } },
3273
3274
15
        { &hf_zbee_zcl_price_block_period_duration_timebase,
3275
15
            { "Duration Timebase", "zbee_zcl_se.price.block_period.duration.timebase", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_timebase_names),
3276
15
            ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE, NULL, HFILL } },
3277
3278
15
        { &hf_zbee_zcl_price_block_period_duration_control,
3279
15
            { "Duration Control", "zbee_zcl_se.price.block_period.duration.control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_control_names),
3280
15
            ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL, NULL, HFILL } },
3281
        /* end Block Period Duration Type fields */
3282
3283
15
        { &hf_zbee_zcl_price_conversion_factor,
3284
15
            { "Conversion Factor", "zbee_zcl_se.price.conversion_factor", FT_UINT32, BASE_DEC, NULL,
3285
15
            0x00, NULL, HFILL } },
3286
3287
        /* start Conversion Factor Trailing Digit fields */
3288
15
        { &hf_zbee_zcl_price_conversion_factor_trailing_digit_mask,
3289
15
            { "Conversion Factor Trailing Digit", "zbee_zcl_se.price.conversion_factor_trailing_digit", FT_UINT8, BASE_DEC, NULL,
3290
15
            0x00, NULL, HFILL } },
3291
3292
15
         { &hf_zbee_zcl_price_conversion_factor_trailing_digit,
3293
15
            { "Conversion Factor Trailing Digit", "zbee_zcl_se.price.conversion_factor.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3294
15
            ZBEE_ZCL_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT, NULL, HFILL } },
3295
        /* end Conversion Factor Trailing Digit fields */
3296
3297
15
        { &hf_zbee_zcl_price_calorific_value,
3298
15
            { "Calorific Value", "zbee_zcl_se.price.calorific_value", FT_UINT32, BASE_DEC, NULL,
3299
15
            0x00, NULL, HFILL } },
3300
3301
15
        { &hf_zbee_zcl_price_calorific_value_unit,
3302
15
            { "Calorific Value Unit", "zbee_zcl_se.price.calorific_value.unit", FT_UINT8, BASE_HEX, NULL,
3303
15
            0x00, NULL, HFILL } },
3304
3305
        /* start Calorific Value Trailing Digit fields */
3306
15
        { &hf_zbee_zcl_price_calorific_value_trailing_digit_mask,
3307
15
            { "Calorific Value Trailing Digit", "zbee_zcl_se.price.calorific_value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3308
15
            0x00, NULL, HFILL } },
3309
3310
15
         { &hf_zbee_zcl_price_calorific_value_trailing_digit,
3311
15
            { "Calorific Value Trailing Digit", "zbee_zcl_se.price.calorific_value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3312
15
            ZBEE_ZCL_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT, NULL, HFILL } },
3313
        /* end Calorific Value Trailing Digit fields */
3314
3315
        /* start Tariff Information Type/Charging Scheme fields */
3316
15
        { &hf_zbee_zcl_price_tariff_information_type_and_charging_scheme,
3317
15
            { "Tariff Type/Charging Scheme", "zbee_zcl_se.price.tariff_information.type_and_charging_scheme", FT_UINT8, BASE_HEX, NULL,
3318
15
            0x00, NULL, HFILL } },
3319
3320
15
         { &hf_zbee_zcl_price_tariff_information_type,
3321
15
            { "Tariff Type", "zbee_zcl_se.price.tariff_information.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
3322
15
            ZBEE_ZCL_PRICE_TARIFF_INFORMATION_TYPE, NULL, HFILL } },
3323
3324
15
         { &hf_zbee_zcl_price_tariff_information_charging_scheme,
3325
15
            { "Charging Scheme", "zbee_zcl_se.price.tariff_information.charging_scheme", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_charging_scheme_names),
3326
15
            ZBEE_ZCL_PRICE_TARIFF_INFORMATION_CHARGING_SCHEME, NULL, HFILL } },
3327
         /* end Tariff Information Type/Charging Scheme fields */
3328
3329
15
        { &hf_zbee_zcl_price_tariff_information_tariff_label,
3330
15
            { "Tariff Label", "zbee_zcl_se.price.tariff_information.tariff_label", FT_UINT_STRING, BASE_NONE, NULL,
3331
15
            0x00, NULL, HFILL } },
3332
3333
15
        { &hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use,
3334
15
            { "Number of Price Tiers in Use", "zbee_zcl_se.price.tariff_information.number_of_price_tiers_in_use", FT_UINT8, BASE_DEC, NULL,
3335
15
            0x00, NULL, HFILL } },
3336
3337
15
        { &hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use,
3338
15
            { "Number of Block Thresholds in Use", "zbee_zcl_se.price.tariff_information.number_of_block_thresholds_in_use", FT_UINT8, BASE_DEC, NULL,
3339
15
            0x00, NULL, HFILL } },
3340
3341
        /* start Price Trailing Digit fields */
3342
15
        { &hf_zbee_zcl_price_tariff_information_price_trailing_digit_mask,
3343
15
            { "Price Trailing Digit", "zbee_zcl_se.price.tariff_information.price.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3344
15
            0x00, NULL, HFILL } },
3345
3346
15
        { &hf_zbee_zcl_price_tariff_information_price_trailing_digit,
3347
15
            { "Price Trailing Digit", "zbee_zcl_se.price.tariff_information.price.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3348
15
            ZBEE_ZCL_PRICE_TARIFF_INFORMATION_PRICE_TRAILING_DIGIT, NULL, HFILL } },
3349
        /* start Price Trailing Digit fields */
3350
3351
15
        { &hf_zbee_zcl_price_tariff_information_standing_charge,
3352
15
            { "Standing Charge", "zbee_zcl_se.price.tariff_information.standing_charge", FT_UINT32, BASE_DEC, NULL,
3353
15
            0x00, NULL, HFILL } },
3354
3355
15
        { &hf_zbee_zcl_price_tariff_information_tier_block_mode,
3356
15
            { "Tier Block Mode", "zbee_zcl_se.price.tariff_information.tier_block_mode", FT_UINT8, BASE_HEX, NULL,
3357
15
            0x00, NULL, HFILL } },
3358
3359
15
        { &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
3360
15
            { "Number of Block Thresholds", "zbee_zcl_se.price.tariff_information.number_of_block_thresholds", FT_UINT8, BASE_DEC, NULL,
3361
15
            ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS, NULL, HFILL } },
3362
3363
15
        { &hf_zbee_zcl_price_tariff_information_block_threshold_multiplier,
3364
15
            { "Block Threshold Multiplier", "zbee_zcl_se.price.tariff_information.block_threshold_multiplier", FT_UINT24, BASE_DEC, NULL,
3365
15
            0x00, NULL, HFILL } },
3366
3367
15
        { &hf_zbee_zcl_price_tariff_information_block_threshold_divisor,
3368
15
            { "Block Threshold Divisor", "zbee_zcl_se.price.tariff_information.block_threshold_divisor", FT_UINT24, BASE_DEC, NULL,
3369
15
            0x00, NULL, HFILL } },
3370
3371
15
        { &hf_zbee_zcl_price_price_matrix_sub_payload_control,
3372
15
            { "Sub Payload Control", "zbee_zcl_se.price.price_matrix.sub_payload_control", FT_UINT8, BASE_DEC, NULL,
3373
15
            0x01, NULL, HFILL } },
3374
3375
        /* start Tier/Block ID fields */
3376
15
        { &hf_zbee_zcl_price_price_matrix_tier_block_id,
3377
15
            { "Tier/Block ID", "zbee_zcl_se.price.price_matrix.tier_block_id", FT_UINT8, BASE_HEX, NULL,
3378
15
            0x00, NULL, HFILL } },
3379
3380
15
        { &hf_zbee_zcl_price_price_matrix_tier_block_id_block,
3381
15
            { "Block", "zbee_zcl_se.price.price_matrix.block", FT_UINT8, BASE_DEC, NULL,
3382
15
            ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_BLOCK, NULL, HFILL } },
3383
3384
15
        { &hf_zbee_zcl_price_price_matrix_tier_block_id_tier,
3385
15
            { "Tier", "zbee_zcl_se.price.price_matrix.tier", FT_UINT8, BASE_DEC, NULL,
3386
15
            ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_TIER, NULL, HFILL } },
3387
        /* end Tier/Block ID fields */
3388
3389
15
        { &hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier,
3390
15
            { "Tier", "zbee_zcl_se.price.price_matrix.tier", FT_UINT8, BASE_DEC, NULL,
3391
15
            0x00, NULL, HFILL } },
3392
3393
15
        { &hf_zbee_zcl_price_price_matrix_price,
3394
15
            { "Price", "zbee_zcl_se.price.price_matrix.price", FT_UINT32, BASE_DEC, NULL,
3395
15
            0x00, NULL, HFILL } },
3396
3397
15
        { &hf_zbee_zcl_price_block_thresholds_sub_payload_control,
3398
15
            { "Sub Payload Control", "zbee_zcl_se.price.block_thresholds.sub_payload_control", FT_UINT8, BASE_DEC, NULL,
3399
15
            0x01, NULL, HFILL } },
3400
3401
        /* start Tier/Number of Block Thresholds fields */
3402
15
        { &hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds,
3403
15
            { "Tier/Number of Block Thresholds", "zbee_zcl_se.price.block_thresholds.tier_number_of_block_thresholds", FT_UINT8, BASE_HEX, NULL,
3404
15
            0x00, NULL, HFILL } },
3405
3406
15
        { &hf_zbee_zcl_price_block_thresholds_tier,
3407
15
            { "Tier", "zbee_zcl_se.price.block_thresholds.tier", FT_UINT8, BASE_DEC, NULL,
3408
15
            ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_TIER, NULL, HFILL } },
3409
        /* end Tier/Number of Block Thresholds fields */
3410
3411
15
        { &hf_zbee_zcl_price_block_thresholds_block_threshold,
3412
15
            { "Block Threshold", "zbee_zcl_se.price.block_threshold", FT_UINT48, BASE_DEC, NULL,
3413
15
            0x00, NULL, HFILL } },
3414
3415
15
        { &hf_zbee_zcl_price_co2_value,
3416
15
            { "CO2 Value", "zbee_zcl_se.price.co2.value", FT_UINT32, BASE_DEC, NULL,
3417
15
            0x00, NULL, HFILL } },
3418
3419
15
        { &hf_zbee_zcl_price_co2_unit,
3420
15
            { "CO2 Unit", "zbee_zcl_se.price.co2.unit", FT_UINT8, BASE_HEX, NULL,
3421
15
            0x00, NULL, HFILL } },
3422
3423
        /* start CO2 Trailing Digit fields */
3424
15
        { &hf_zbee_zcl_price_co2_value_trailing_digit_mask,
3425
15
            { "CO2 Value Trailing Digit", "zbee_zcl_se.price.co2.value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3426
15
            0x00, NULL, HFILL } },
3427
3428
15
        { &hf_zbee_zcl_price_co2_value_trailing_digit,
3429
15
            { "CO2 Value Trailing Digit", "zbee_zcl_se.price.co2.value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3430
15
            ZBEE_ZCL_PRICE_CO2_VALUE_TRAILING_DIGIT, NULL, HFILL } },
3431
        /* end CO2 Trailing Digit fields */
3432
3433
15
        { &hf_zbee_zcl_price_tier_labels_number_of_labels,
3434
15
            { "Number of Labels", "zbee_zcl_se.price.tier_labels.number_of_labels", FT_UINT8, BASE_DEC, NULL,
3435
15
            0x00, NULL, HFILL } },
3436
3437
15
        { &hf_zbee_zcl_price_tier_labels_tier_id,
3438
15
            { "Tier ID", "zbee_zcl_se.price.tier_labels.tier_id", FT_UINT8, BASE_DEC, NULL,
3439
15
            0x00, NULL, HFILL } },
3440
3441
15
        { &hf_zbee_zcl_price_tier_labels_tier_label,
3442
15
            { "Tariff Label", "zbee_zcl_se.price.tier_labels.tier_label", FT_UINT_STRING, BASE_NONE, NULL,
3443
15
            0x00, NULL, HFILL } },
3444
3445
15
        { &hf_zbee_zcl_price_billing_period_start_time,
3446
15
            { "Billing Period Start Time", "zbee_zcl_se.price.billing_period.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC,
3447
15
                TIME_VALS(now_or_cancel_strings), 0x00, NULL, HFILL } },
3448
3449
15
        { &hf_zbee_zcl_price_billing_period_duration,
3450
15
            { "Billing Period Duration", "zbee_zcl_se.price.billing_period.duration", FT_UINT24, BASE_DEC, NULL,
3451
15
            0x00, NULL, HFILL } },
3452
3453
        /* start Billing Period Duration Type fields */
3454
15
        { &hf_zbee_zcl_price_billing_period_duration_type,
3455
15
            { "Billing Period Duration Type", "zbee_zcl_se.price.billing_period.duration.type", FT_UINT8, BASE_HEX, NULL,
3456
15
            0x00, NULL, HFILL } },
3457
3458
15
        { &hf_zbee_zcl_price_billing_period_duration_timebase,
3459
15
            { "Duration Timebase", "zbee_zcl_se.price.billing_period.duration.timebase", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_timebase_names),
3460
15
            ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_TIMEBASE, NULL, HFILL } },
3461
3462
15
        { &hf_zbee_zcl_price_billing_period_duration_control,
3463
15
            { "Duration Control", "zbee_zcl_se.price.billing_period.duration.control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_control_names),
3464
15
            ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_CONTROL, NULL, HFILL } },
3465
        /* end Billing Period Duration Type fields */
3466
3467
15
        { &hf_zbee_zcl_price_consolidated_bill,
3468
15
            { "Consolidated Bill", "zbee_zcl_se.price.consolidated_bill", FT_UINT32, BASE_DEC, NULL,
3469
15
            0x00, NULL, HFILL } },
3470
3471
        /* start Consolidated Bill Trailing Digit fields */
3472
15
        { &hf_zbee_zcl_price_consolidated_bill_trailing_digit_mask,
3473
15
            { "Bill Trailing Digit", "zbee_zcl_se.price.consolidated_bill.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3474
15
            0x00, NULL, HFILL } },
3475
3476
15
        { &hf_zbee_zcl_price_consolidated_bill_trailing_digit,
3477
15
            { "Bill Trailing Digit", "zbee_zcl_se.price.consolidated_bill.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3478
15
            ZBEE_ZCL_PRICE_CONSOLIDATED_BILL_TRAILING_DIGIT, NULL, HFILL } },
3479
        /* end Consolidated Bill Trailing Digit fields */
3480
3481
15
        { &hf_zbee_zcl_price_credit_payment_due_date,
3482
15
            { "Credit Payment Due Date", "zbee_zcl_se.price.credit_payment.due_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
3483
15
            0x00, NULL, HFILL } },
3484
3485
15
        { &hf_zbee_zcl_price_credit_payment_date,
3486
15
            { "Credit Payment Date", "zbee_zcl_se.price.credit_payment.date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
3487
15
            0x00, NULL, HFILL } },
3488
3489
15
        { &hf_zbee_zcl_price_credit_payment_overdue_amount,
3490
15
            { "Credit Payment Overdue Amount", "zbee_zcl_se.price.credit_payment.overdue_amount", FT_UINT32, BASE_DEC, NULL,
3491
15
            0x00, NULL, HFILL } },
3492
3493
15
        { &hf_zbee_zcl_price_credit_payment_status,
3494
15
            { "Credit Payment Status", "zbee_zcl_se.price.credit_payment.status", FT_UINT8, BASE_DEC, NULL,
3495
15
            0x00, NULL, HFILL } },
3496
3497
15
        { &hf_zbee_zcl_price_credit_payment,
3498
15
            { "Credit Payment", "zbee_zcl_se.price.credit_payment", FT_UINT32, BASE_DEC, NULL,
3499
15
            0x00, NULL, HFILL } },
3500
3501
15
        { &hf_zbee_zcl_price_credit_payment_ref,
3502
15
            { "Credit Payment Ref", "zbee_zcl_se.price.credit_payment.ref", FT_UINT_STRING, BASE_NONE, NULL,
3503
15
            0x00, NULL, HFILL } },
3504
3505
15
        { &hf_zbee_zcl_price_old_currency,
3506
15
            { "Old Currency", "zbee_zcl_se.price.old_currency", FT_UINT16, BASE_HEX, NULL,
3507
15
            0x00, NULL, HFILL } },
3508
3509
15
        { &hf_zbee_zcl_price_new_currency,
3510
15
            { "New Currency", "zbee_zcl_se.price.new_currency", FT_UINT16, BASE_HEX, NULL,
3511
15
            0x00, NULL, HFILL } },
3512
3513
15
        { &hf_zbee_zcl_price_currency_change_control_flags,
3514
15
            { "Currency Change Control Flags", "zbee_zcl_se.price.currency_change_control_flags", FT_UINT32, BASE_HEX, NULL,
3515
15
            0x00, NULL, HFILL } },
3516
15
   };
3517
3518
    /* ZCL Price subtrees */
3519
15
    int *ett[] = {
3520
15
        &ett_zbee_zcl_price,
3521
15
        &ett_zbee_zcl_price_tariff_type,
3522
15
        &ett_zbee_zcl_price_trailing_digit_and_price_tier,
3523
15
        &ett_zbee_zcl_price_number_of_price_tiers_and_register_tier,
3524
15
        &ett_zbee_zcl_price_alternate_cost_trailing_digit,
3525
15
        &ett_zbee_zcl_price_block_period_control,
3526
15
        &ett_zbee_zcl_price_block_period_duration_type,
3527
15
        &ett_zbee_zcl_price_conversion_factor_trailing_digit,
3528
15
        &ett_zbee_zcl_price_calorific_value_trailing_digit,
3529
15
        &ett_zbee_zcl_price_tariff_information_tariff_type_and_charging_scheme,
3530
15
        &ett_zbee_zcl_price_tariff_information_price_trailing_digit,
3531
15
        &ett_zbee_zcl_price_price_matrix_tier_block_id,
3532
15
        &ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds,
3533
15
        &ett_zbee_zcl_price_co2_value_trailing_digit,
3534
15
        &ett_zbee_zcl_price_billing_period_duration_type,
3535
15
        &ett_zbee_zcl_price_consolidated_bill_trailing_digit,
3536
15
    };
3537
3538
    /* Register the ZigBee ZCL Price cluster protocol name and description */
3539
15
    proto_zbee_zcl_price = proto_register_protocol("ZigBee ZCL Price", "ZCL Price", ZBEE_PROTOABBREV_ZCL_PRICE);
3540
15
    proto_register_field_array(proto_zbee_zcl_price, hf, array_length(hf));
3541
15
    proto_register_subtree_array(ett, array_length(ett));
3542
3543
    /* Register the ZigBee ZCL Price dissector. */
3544
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_PRICE, dissect_zbee_zcl_price, proto_zbee_zcl_price);
3545
15
} /*proto_register_zbee_zcl_price*/
3546
3547
/**
3548
 *Hands off the ZCL Price dissector.
3549
 *
3550
*/
3551
void
3552
proto_reg_handoff_zbee_zcl_price(void)
3553
15
{
3554
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_PRICE,
3555
15
                            proto_zbee_zcl_price,
3556
15
                            ett_zbee_zcl_price,
3557
15
                            ZBEE_ZCL_CID_PRICE,
3558
15
                            ZBEE_MFG_CODE_NONE,
3559
15
                            hf_zbee_zcl_price_attr_server_id,
3560
15
                            hf_zbee_zcl_price_attr_client_id,
3561
15
                            hf_zbee_zcl_price_srv_rx_cmd_id,
3562
15
                            hf_zbee_zcl_price_srv_tx_cmd_id,
3563
15
                            dissect_zcl_price_attr_data
3564
15
                         );
3565
15
} /*proto_reg_handoff_zbee_zcl_price*/
3566
3567
/* ########################################################################## */
3568
/* #### (0x0701) DEMAND RESPONSE AND LOAD CONTROL CLUSTER ################### */
3569
/* ########################################################################## */
3570
3571
/* Attributes */
3572
#define zbee_zcl_drlc_attr_client_names_VALUE_STRING_LIST(XXX) \
3573
    XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_UTILITY_ENROLLMENT_GROUP,   0x0000, "Utility Enrollment Group" ) \
3574
    XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_START_RANDOMIZATION_MINUTES,0x0001, "Start Randomization Minutes" ) \
3575
    XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_DURATION_RND_MINUTES,       0x0002, "Duration Randomization Minutes" ) \
3576
    XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_DEVICE_CLASS_VALUE,         0x0003, "Device Class Value" ) \
3577
/* Smart Energy */ \
3578
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DRLC_CLNT,      0xFFFE, "Attribute Reporting Status" )
3579
3580
VALUE_STRING_ENUM(zbee_zcl_drlc_attr_client_names);
3581
VALUE_STRING_ARRAY(zbee_zcl_drlc_attr_client_names);
3582
3583
/* Server Commands Received */
3584
#define zbee_zcl_drlc_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
3585
    XXX(ZBEE_ZCL_CMD_ID_DRLC_REPORT_EVENT_STATUS,        0x00, "Report Event Status" ) \
3586
    XXX(ZBEE_ZCL_CMD_ID_DRLC_GET_SCHEDULED_EVENTS,       0x01, "Get Scheduled Events" )
3587
3588
VALUE_STRING_ENUM(zbee_zcl_drlc_srv_rx_cmd_names);
3589
VALUE_STRING_ARRAY(zbee_zcl_drlc_srv_rx_cmd_names);
3590
3591
/* Server Commands Generated */
3592
#define zbee_zcl_drlc_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
3593
    XXX(ZBEE_ZCL_CMD_ID_DRLC_LOAD_CONTROL_EVENT,               0x00, "Load Control Event" ) \
3594
    XXX(ZBEE_ZCL_CMD_ID_DRLC_CANCEL_LOAD_CONTROL_EVENT,        0x01, "Cancel Load Control Event" ) \
3595
    XXX(ZBEE_ZCL_CMD_ID_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS,   0x02, "Cancel All Load Control Events" )
3596
3597
VALUE_STRING_ENUM(zbee_zcl_drlc_srv_tx_cmd_names);
3598
VALUE_STRING_ARRAY(zbee_zcl_drlc_srv_tx_cmd_names);
3599
3600
0
#define ZBEE_ZCL_DRLC_TEMP_OFFSET_NOT_USED 0xFF
3601
0
#define ZBEE_ZCL_DRLC_TEMP_OFFSET_DIVIDER  10.0f
3602
3603
0
#define ZBEE_ZCL_DRLC_TEMP_SET_POINT_NOT_USED 0x8000
3604
0
#define ZBEE_ZCL_DRLC_TEMP_SET_POINT_DIVIDER 100.0f
3605
3606
0
#define ZBEE_ZCL_DRLC_AVERAGE_LOAD_ADJUSTMENT_PERCENTAGE 0x80
3607
3608
static const range_string zbee_zcl_drlc_load_control_event_criticality_level[] = {
3609
    { 0x0, 0x0,   "Reserved" },
3610
    { 0x1, 0x1,   "Green" },
3611
    { 0x2, 0x2,   "1" },
3612
    { 0x3, 0x3,   "2" },
3613
    { 0x4, 0x4,   "3" },
3614
    { 0x5, 0x5,   "4" },
3615
    { 0x6, 0x6,   "5" },
3616
    { 0x7, 0x7,   "Emergency" },
3617
    { 0x8, 0x8,   "Planned Outage" },
3618
    { 0x9, 0x9,   "Service Disconnect" },
3619
    { 0x0A, 0x0F, "Utility Defined" },
3620
    { 0x10, 0xFF, "Reserved" },
3621
    { 0, 0, NULL }
3622
};
3623
3624
static const range_string zbee_zcl_drlc_report_event_status_event_status[] = {
3625
    { 0x0, 0x0, "Reserved for future use." },
3626
    { 0x01, 0x01, "Load Control Event command received" },
3627
    { 0x02, 0x02, "Event started" },
3628
    { 0x03, 0x03, "Event completed" },
3629
    { 0x04, 0x04, "User has chosen to \"Opt-Out\", user will not participate in this event" },
3630
    { 0x05, 0x05, "User has chosen to \"Opt-In\", user will participate in this event" },
3631
    { 0x06, 0x06, "The event has been cancelled" },
3632
    { 0x07, 0x07, "The event has been superseded" },
3633
    { 0x08, 0x08, "Event partially completed with User \"Opt-Out\"." },
3634
    { 0x09, 0x09, "Event partially completed due to User \"Opt-In\"." },
3635
    { 0x0A, 0x0A, "Event completed, no User participation (Previous \"Opt-Out\")." },
3636
    { 0x0B, 0xF7, "Reserved for future use." },
3637
    { 0xF8, 0xF8, "Rejected - Invalid Cancel Command (Default)" },
3638
    { 0xF9, 0xF9, "Rejected - Invalid Cancel Command (Invalid Effective Time)" },
3639
    { 0xFA, 0xFA , "Reserved" },
3640
    { 0xFB, 0xFB, "Rejected - Event was received after it had expired (Current Time > Start Time + Duration)" },
3641
    { 0xFC, 0xFC, "Reserved for future use." },
3642
    { 0xFD, 0xFD, "Rejected - Invalid Cancel Command (Undefined Event)" },
3643
    { 0xFE, 0xFE, "Load Control Event command Rejected" },
3644
    { 0xFF, 0xFF, "Reserved for future use." },
3645
    { 0, 0, NULL }
3646
};
3647
3648
static const range_string zbee_zcl_drlc_report_event_signature_type[] = {
3649
    { 0x0, 0x0, "No Signature" },
3650
    { 0x01, 0x01, "ECDSA" },
3651
    { 0x02, 0xFF, "Reserved" },
3652
    { 0, 0, NULL }
3653
};
3654
3655
static const true_false_string zbee_zcl_drlc_randomize_start_tfs = {
3656
    "Randomize Start time",
3657
    "Randomized Start not Applied"
3658
};
3659
3660
static const true_false_string zbee_zcl_drlc_randomize_duration_tfs = {
3661
    "Randomize Duration time",
3662
    "Randomized Duration not Applied"
3663
};
3664
/*************************/
3665
/* Function Declarations */
3666
/*************************/
3667
void proto_register_zbee_zcl_drlc(void);
3668
void proto_reg_handoff_zbee_zcl_drlc(void);
3669
3670
static void decode_zcl_drlc_temp_offset                                 (char *s, uint8_t value);
3671
static void decode_zcl_drlc_temp_set_point                              (char *s, int16_t value);
3672
static void decode_zcl_drlc_average_load_adjustment_percentage          (char *s, int8_t value);
3673
3674
static void dissect_zcl_drlc_load_control_event             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3675
static void dissect_zcl_drlc_cancel_load_control_event      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3676
static void dissect_zcl_drlc_cancel_all_load_control_event  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3677
static void dissect_zcl_drlc_report_event_status            (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3678
static void dissect_zcl_drlc_get_scheduled_events           (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3679
3680
/*************************/
3681
/* Global Variables      */
3682
/*************************/
3683
3684
/* Initialize the protocol and registered fields */
3685
static int proto_zbee_zcl_drlc;
3686
3687
static int hf_zbee_zcl_drlc_srv_tx_cmd_id;
3688
static int hf_zbee_zcl_drlc_srv_rx_cmd_id;
3689
static int hf_zbee_zcl_drlc_attr_client_id;
3690
static int hf_zbee_zcl_drlc_attr_reporting_status;
3691
static int hf_zbee_zcl_drlc_issuer_event_id;
3692
static int hf_zbee_zcl_drlc_device_class;
3693
static int hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace;
3694
static int hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters;
3695
static int hf_zbee_zcl_drlc_device_class_water_heater;
3696
static int hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi;
3697
static int hf_zbee_zcl_drlc_device_class_smart_appliances;
3698
static int hf_zbee_zcl_drlc_device_class_irrigation_pump;
3699
static int hf_zbee_zcl_drlc_device_class_managed_c_i_loads;
3700
static int hf_zbee_zcl_drlc_device_class_simple_misc_loads;
3701
static int hf_zbee_zcl_drlc_device_class_exterior_lighting;
3702
static int hf_zbee_zcl_drlc_device_class_interior_lighting;
3703
static int hf_zbee_zcl_drlc_device_class_electric_vehicle;
3704
static int hf_zbee_zcl_drlc_device_class_generation_systems;
3705
static int hf_zbee_zcl_drlc_device_class_reserved;
3706
static int hf_zbee_zcl_drlc_utility_enrollment_group;
3707
static int hf_zbee_zcl_drlc_start_time;
3708
static int hf_zbee_zcl_drlc_duration_in_minutes;
3709
static int hf_zbee_zcl_drlc_criticality_level;
3710
static int hf_zbee_zcl_drlc_cooling_temp_offset;
3711
static int hf_zbee_zcl_drlc_heating_temp_offset;
3712
static int hf_zbee_zcl_drlc_cooling_temp_set_point;
3713
static int hf_zbee_zcl_drlc_heating_temp_set_point;
3714
static int hf_zbee_zcl_drlc_average_load_adjustment_percentage;
3715
static int hf_zbee_zcl_drlc_duty_cycle;
3716
static int hf_zbee_zcl_drlc_event_control;
3717
static int hf_zbee_zcl_drlc_event_control_randomize_start_time;
3718
static int hf_zbee_zcl_drlc_event_control_randomize_duration_time;
3719
static int hf_zbee_zcl_drlc_event_control_reserved;
3720
static int hf_zbee_zcl_drlc_cancel_control;
3721
static int hf_zbee_zcl_drlc_cancel_control_event_in_process;
3722
static int hf_zbee_zcl_drlc_cancel_control_reserved;
3723
static int hf_zbee_zcl_drlc_effective_time;
3724
static int hf_zbee_zcl_drlc_report_event_issuer_event_id;
3725
static int hf_zbee_zcl_drlc_report_event_event_status;
3726
static int hf_zbee_zcl_drlc_report_event_event_status_time;
3727
static int hf_zbee_zcl_drlc_report_event_criticality_level_applied;
3728
static int hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied;
3729
static int hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied;
3730
static int hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage;
3731
static int hf_zbee_zcl_drlc_report_event_duty_cycle;
3732
static int hf_zbee_zcl_drlc_report_event_event_control;
3733
static int hf_zbee_zcl_drlc_report_event_signature_type;
3734
static int hf_zbee_zcl_drlc_report_event_signature;
3735
static int hf_zbee_zcl_drlc_get_scheduled_events_earliest_end_time;
3736
static int hf_zbee_zcl_drlc_get_scheduled_events_number_of_events;
3737
static int hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id;
3738
3739
static int* const zbee_zcl_drlc_control_event_device_classes[] = {
3740
    &hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace,
3741
    &hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters,
3742
    &hf_zbee_zcl_drlc_device_class_water_heater,
3743
    &hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi,
3744
    &hf_zbee_zcl_drlc_device_class_smart_appliances,
3745
    &hf_zbee_zcl_drlc_device_class_irrigation_pump,
3746
    &hf_zbee_zcl_drlc_device_class_managed_c_i_loads,
3747
    &hf_zbee_zcl_drlc_device_class_simple_misc_loads,
3748
    &hf_zbee_zcl_drlc_device_class_exterior_lighting,
3749
    &hf_zbee_zcl_drlc_device_class_interior_lighting,
3750
    &hf_zbee_zcl_drlc_device_class_electric_vehicle,
3751
    &hf_zbee_zcl_drlc_device_class_generation_systems,
3752
    &hf_zbee_zcl_drlc_device_class_reserved,
3753
    NULL
3754
};
3755
3756
static int* const hf_zbee_zcl_drlc_event_control_flags[] = {
3757
    &hf_zbee_zcl_drlc_event_control_randomize_start_time,
3758
    &hf_zbee_zcl_drlc_event_control_randomize_duration_time,
3759
    &hf_zbee_zcl_drlc_event_control_reserved,
3760
    NULL
3761
};
3762
3763
static int* const hf_zbee_zcl_drlc_cancel_control_flags[] = {
3764
    &hf_zbee_zcl_drlc_cancel_control_event_in_process,
3765
    &hf_zbee_zcl_drlc_cancel_control_reserved,
3766
    NULL
3767
};
3768
/* Initialize the subtree pointers */
3769
static int ett_zbee_zcl_drlc;
3770
static int ett_zbee_zcl_drlc_device_class;
3771
static int ett_zbee_zcl_drlc_event_control;
3772
static int ett_zbee_zcl_drlc_cancel_control;
3773
3774
/*************************/
3775
/* Function Bodies       */
3776
/*************************/
3777
/**
3778
 * This function decodes Temperature Offset.
3779
 *
3780
 * @param s string to display
3781
 * @param value value to decode
3782
*/
3783
static void
3784
decode_zcl_drlc_temp_offset(char *s, uint8_t value)
3785
0
{
3786
0
    if (value == ZBEE_ZCL_DRLC_TEMP_OFFSET_NOT_USED)
3787
0
        snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3788
0
    else {
3789
0
        float temp_delta;
3790
0
        temp_delta = value / ZBEE_ZCL_DRLC_TEMP_OFFSET_DIVIDER;
3791
0
        snprintf(s, ITEM_LABEL_LENGTH, "%+.2f%s", temp_delta, units_degree_celsius.singular);
3792
0
    }
3793
0
} /*decode_zcl_drlc_temp_offset*/
3794
3795
/**
3796
 * This function decodes Temperature Set Point.
3797
 *
3798
 * @param s string to display
3799
 * @param value value to decode
3800
*/
3801
static void decode_zcl_drlc_temp_set_point(char *s, int16_t value)
3802
0
{
3803
0
    if (value & ZBEE_ZCL_DRLC_TEMP_SET_POINT_NOT_USED)
3804
0
        snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3805
0
    else {
3806
0
        float temp_delta;
3807
0
        temp_delta = value / ZBEE_ZCL_DRLC_TEMP_SET_POINT_DIVIDER;
3808
0
        snprintf(s, ITEM_LABEL_LENGTH, "%+.2f%s", temp_delta, units_degree_celsius.singular);
3809
0
    }
3810
0
} /*decode_zcl_drlc_temp_set_point*/
3811
3812
/**
3813
 * This function decodes Average Load Adjustment Percentage.
3814
 *
3815
 * @param s string to display
3816
 * @param value value to decode
3817
*/
3818
static void decode_zcl_drlc_average_load_adjustment_percentage(char *s, int8_t value)
3819
0
{
3820
0
    if (value & ZBEE_ZCL_DRLC_AVERAGE_LOAD_ADJUSTMENT_PERCENTAGE)
3821
0
        snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3822
0
    else {
3823
0
        snprintf(s, ITEM_LABEL_LENGTH, "%+d%%", value);
3824
0
    }
3825
0
} /*decode_zcl_drlc_average_load_adjustment_percentage*/
3826
3827
/**
3828
 *This function is called by ZCL foundation dissector in order to decode
3829
 *
3830
 *@param tree pointer to data tree Wireshark uses to display packet.
3831
 *@param tvb pointer to buffer containing raw packet.
3832
 *@param offset pointer to buffer offset
3833
 *@param attr_id attribute identifier
3834
 *@param data_type attribute data type
3835
 *@param client_attr ZCL client
3836
*/
3837
static void
3838
dissect_zcl_drlc_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
3839
132
{
3840
132
    switch (attr_id) {
3841
        /* applies to all SE clusters */
3842
0
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DRLC_CLNT:
3843
0
            proto_tree_add_item(tree, hf_zbee_zcl_drlc_attr_reporting_status, tvb, *offset, 1, ENC_NA);
3844
0
            *offset += 1;
3845
0
            break;
3846
3847
132
        default: /* Catch all */
3848
132
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
3849
132
            break;
3850
132
    }
3851
132
} /*dissect_zcl_drlc_attr_data*/
3852
3853
/**
3854
 *This function is called by ZCL foundation dissector in order to decode
3855
 *DRLC Load Control Event Command Payload.
3856
 *
3857
 *@param tree pointer to data tree Wireshark uses to display packet.
3858
 *@param tvb pointer to buffer containing raw packet.
3859
 *@param offset pointer to buffer offset
3860
*/
3861
static void
3862
dissect_zcl_drlc_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3863
0
{
3864
    /* Issuer Event ID */
3865
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_issuer_event_id, tvb,
3866
0
                        *offset, 4, ENC_LITTLE_ENDIAN);
3867
0
    *offset += 4;
3868
3869
    /* Device Class */
3870
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_device_class, ett_zbee_zcl_drlc_device_class,
3871
0
                           zbee_zcl_drlc_control_event_device_classes, ENC_LITTLE_ENDIAN);
3872
0
    *offset += 2;
3873
3874
    /* Utility Enrollment Group */
3875
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_utility_enrollment_group, tvb,
3876
0
                        *offset, 1, ENC_NA);
3877
0
    *offset += 1;
3878
3879
    /* Start Time */
3880
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_start_time, tvb,
3881
0
                        *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
3882
0
    *offset += 4;
3883
    /* Duration In Minutes */
3884
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_duration_in_minutes, tvb,
3885
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
3886
0
    *offset += 2;
3887
3888
    /* Criticality Level */
3889
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_criticality_level, tvb,
3890
0
                        *offset, 1, ENC_NA);
3891
0
    *offset += 1;
3892
3893
    /* Cooling Temperature Offset */
3894
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_cooling_temp_offset, tvb,
3895
0
                        *offset, 1, ENC_NA);
3896
0
    *offset += 1;
3897
3898
    /* Heating Temperature Offset */
3899
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_heating_temp_offset, tvb,
3900
0
                        *offset, 1, ENC_NA);
3901
0
    *offset += 1;
3902
3903
    /* Cooling Temperature Set Point */
3904
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_cooling_temp_set_point, tvb,
3905
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
3906
0
    *offset += 2;
3907
3908
    /* Heating Temperature Set Point */
3909
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_heating_temp_set_point, tvb,
3910
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
3911
0
    *offset += 2;
3912
3913
    /* Average Load Adjustment Percentage */
3914
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_average_load_adjustment_percentage, tvb,
3915
0
                        *offset, 1, ENC_NA);
3916
0
    *offset += 1;
3917
3918
    /* Duty Cycle */
3919
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_duty_cycle, tvb,
3920
0
                        *offset, 1, ENC_NA);
3921
0
    *offset += 1;
3922
3923
    /* Event Control */
3924
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_event_control, ett_zbee_zcl_drlc_event_control,
3925
0
                           hf_zbee_zcl_drlc_event_control_flags, ENC_LITTLE_ENDIAN);
3926
0
    *offset += 1;
3927
3928
0
} /*dissect_zcl_drlc_load_control_event*/
3929
3930
/**
3931
 *This function is called by ZCL foundation dissector in order to decode
3932
 *DRLC Cancel Load Control Event Command Payload.
3933
 *
3934
 *@param tree pointer to data tree Wireshark uses to display packet.
3935
 *@param tvb pointer to buffer containing raw packet.
3936
 *@param offset pointer to buffer offset
3937
*/
3938
static void
3939
dissect_zcl_drlc_cancel_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3940
0
{
3941
    /* Issuer Event ID */
3942
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_issuer_event_id, tvb,
3943
0
                        *offset, 4, ENC_LITTLE_ENDIAN);
3944
0
    *offset += 4;
3945
3946
    /* Device Class */
3947
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_device_class, ett_zbee_zcl_drlc_device_class,
3948
0
                           zbee_zcl_drlc_control_event_device_classes, ENC_LITTLE_ENDIAN);
3949
0
    *offset += 2;
3950
3951
    /* Utility Enrollment Group */
3952
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_utility_enrollment_group, tvb,
3953
0
                        *offset, 1, ENC_NA);
3954
0
    *offset += 1;
3955
3956
    /* Cancel Control */
3957
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_cancel_control, ett_zbee_zcl_drlc_cancel_control,
3958
0
                           hf_zbee_zcl_drlc_cancel_control_flags, ENC_LITTLE_ENDIAN);
3959
0
    *offset += 1;
3960
3961
    /* Effective Time */
3962
    /** XXX - expert info if it's not "Now? Other values are deprecated
3963
     * in the 1.4a spec.
3964
     */
3965
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_effective_time, tvb,
3966
0
                        *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
3967
0
    *offset += 4;
3968
3969
0
}
3970
3971
/**
3972
 *This function is called by ZCL foundation dissector in order to decode
3973
 *DRLC Cancel All Load Control Events Command Payload.
3974
 *
3975
 *@param tree pointer to data tree Wireshark uses to display packet.
3976
 *@param tvb pointer to buffer containing raw packet.
3977
 *@param offset pointer to buffer offset
3978
*/
3979
static void
3980
dissect_zcl_drlc_cancel_all_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3981
0
{
3982
    /* Cancel Control */
3983
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_cancel_control, ett_zbee_zcl_drlc_cancel_control,
3984
0
                           hf_zbee_zcl_drlc_cancel_control_flags, ENC_LITTLE_ENDIAN);
3985
0
    *offset += 1;
3986
3987
0
} /*dissect_zcl_drlc_cancel_all_load_control_event*/
3988
3989
/**
3990
 *This function is called by ZCL foundation dissector in order to decode
3991
 *DRLC Report Event Status Command Payload.
3992
 *
3993
 *@param tree pointer to data tree Wireshark uses to display packet.
3994
 *@param tvb pointer to buffer containing raw packet.
3995
 *@param offset pointer to buffer offset
3996
*/
3997
static void
3998
dissect_zcl_drlc_report_event_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3999
0
{
4000
    /* Issuer Event ID */
4001
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_issuer_event_id, tvb,
4002
0
                        *offset, 4, ENC_LITTLE_ENDIAN);
4003
0
    *offset += 4;
4004
4005
    /* Event Status */
4006
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_event_status, tvb, *offset, 1, ENC_NA);
4007
0
    *offset += 1;
4008
4009
    /* Event Status Time */
4010
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_event_status_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
4011
0
    *offset += 4;
4012
4013
    /* Criticality Level Applied */
4014
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_criticality_level_applied, tvb,
4015
0
                        *offset, 1, ENC_NA);
4016
0
    *offset += 1;
4017
4018
    /* Cooling Temperature Set Point Applied */
4019
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied, tvb,
4020
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
4021
0
    *offset += 2;
4022
4023
    /* Heating Temperature Set Point Applied */
4024
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied, tvb,
4025
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
4026
0
    *offset += 2;
4027
4028
    /* Average Load Adjustment Percentage Applied */
4029
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage, tvb,
4030
0
                        *offset, 1, ENC_NA);
4031
0
    *offset += 1;
4032
4033
    /* Duty Cycle Applied */
4034
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_duty_cycle, tvb,
4035
0
                        *offset, 1, ENC_NA);
4036
0
    *offset += 1;
4037
4038
    /* Event Control */
4039
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_report_event_event_control, ett_zbee_zcl_drlc_event_control,
4040
0
                           hf_zbee_zcl_drlc_event_control_flags, ENC_LITTLE_ENDIAN);
4041
0
    *offset += 1;
4042
4043
    /* Signature Type */
4044
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_signature_type, tvb,
4045
0
                        *offset, 1, ENC_NA);
4046
0
    *offset += 1;
4047
4048
    /* Signature */
4049
0
    unsigned rem_len;
4050
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
4051
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_signature, tvb,
4052
0
                        *offset, rem_len, ENC_NA);
4053
0
    *offset += rem_len;
4054
0
} /*dissect_zcl_drlc_report_event_status*/
4055
4056
/**
4057
 *This function is called by ZCL foundation dissector in order to decode
4058
 *DRLC Get Scheduled Events Command Payload.
4059
 *
4060
 *@param tree pointer to data tree Wireshark uses to display packet.
4061
 *@param tvb pointer to buffer containing raw packet.
4062
 *@param offset pointer to buffer offset
4063
*/
4064
static void
4065
dissect_zcl_drlc_get_scheduled_events(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
4066
0
{
4067
0
    int      rem_len;
4068
4069
    /* Earliest Event Time */
4070
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_earliest_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
4071
0
    *offset += 4;
4072
4073
    /* Number of Events */
4074
0
    proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_number_of_events, tvb,
4075
0
                        *offset, 1, ENC_NA);
4076
0
    *offset += 1;
4077
4078
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
4079
0
    if (rem_len > 3) {
4080
        /* Issuer Event ID */
4081
0
        proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id, tvb,
4082
0
                            *offset, rem_len, ENC_LITTLE_ENDIAN);
4083
0
        *offset += 4;
4084
0
    }
4085
0
} /*dissect_zcl_drlc_report_event_status*/
4086
4087
/**
4088
 *ZigBee ZCL DRLC cluster dissector for wireshark.
4089
 *
4090
 *@param tvb pointer to buffer containing raw packet.
4091
 *@param pinfo pointer to packet information fields
4092
 *@param tree pointer to data tree Wireshark uses to display packet.
4093
*/
4094
static int
4095
dissect_zbee_zcl_drlc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
4096
1
{
4097
1
    zbee_zcl_packet   *zcl;
4098
1
    unsigned          offset = 0;
4099
1
    uint8_t           cmd_id;
4100
1
    int               rem_len;
4101
1
    proto_tree       *payload_tree;
4102
4103
    /* Reject the packet if data is NULL */
4104
1
    if (data == NULL)
4105
0
        return 0;
4106
1
    zcl = (zbee_zcl_packet *)data;
4107
1
    cmd_id = zcl->cmd_id;
4108
4109
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
4110
1
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
4111
        /* Append the command name to the info column. */
4112
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
4113
0
            val_to_str_const(cmd_id, zbee_zcl_drlc_srv_rx_cmd_names, "Unknown Command"),
4114
0
            zcl->tran_seqno);
4115
4116
        /* Add the command ID. */
4117
0
        proto_tree_add_uint(tree, hf_zbee_zcl_drlc_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
4118
4119
        /* Check is this command has a payload, than add the payload tree */
4120
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
4121
0
        if (rem_len > 0) {
4122
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_drlc, NULL, "Payload");
4123
4124
            /* Call the appropriate command dissector */
4125
0
            switch (cmd_id) {
4126
4127
0
                case ZBEE_ZCL_CMD_ID_DRLC_REPORT_EVENT_STATUS:
4128
0
                    dissect_zcl_drlc_report_event_status(tvb, payload_tree, &offset);
4129
0
                    break;
4130
4131
0
                case ZBEE_ZCL_CMD_ID_DRLC_GET_SCHEDULED_EVENTS:
4132
0
                    dissect_zcl_drlc_get_scheduled_events(tvb, payload_tree, &offset);
4133
0
                    break;
4134
4135
0
                default:
4136
0
                    break;
4137
0
            }
4138
0
        }
4139
0
    }
4140
1
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
4141
        /* Append the command name to the info column. */
4142
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
4143
1
            val_to_str_const(cmd_id, zbee_zcl_drlc_srv_tx_cmd_names, "Unknown Command"),
4144
1
            zcl->tran_seqno);
4145
4146
        /* Add the command ID. */
4147
1
        proto_tree_add_uint(tree, hf_zbee_zcl_drlc_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
4148
4149
        /* Check is this command has a payload, than add the payload tree */
4150
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
4151
1
        if (rem_len > 0) {
4152
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_drlc, NULL, "Payload");
4153
4154
            /* Call the appropriate command dissector */
4155
1
            switch (cmd_id) {
4156
4157
0
                case ZBEE_ZCL_CMD_ID_DRLC_LOAD_CONTROL_EVENT:
4158
0
                    dissect_zcl_drlc_load_control_event(tvb, payload_tree, &offset);
4159
0
                    break;
4160
4161
0
                case ZBEE_ZCL_CMD_ID_DRLC_CANCEL_LOAD_CONTROL_EVENT:
4162
0
                    dissect_zcl_drlc_cancel_load_control_event(tvb, payload_tree, &offset);
4163
0
                    break;
4164
4165
0
                case ZBEE_ZCL_CMD_ID_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS:
4166
0
                    dissect_zcl_drlc_cancel_all_load_control_event(tvb, payload_tree, &offset);
4167
0
                    break;
4168
4169
1
                default:
4170
1
                    break;
4171
1
            }
4172
1
        }
4173
1
    }
4174
4175
1
    return tvb_captured_length(tvb);
4176
1
} /*dissect_zbee_zcl_drlc*/
4177
4178
/**
4179
 *This function registers the ZCL DRLC dissector
4180
 *
4181
*/
4182
void
4183
proto_register_zbee_zcl_drlc(void)
4184
15
{
4185
15
    static hf_register_info hf[] = {
4186
4187
15
        { &hf_zbee_zcl_drlc_attr_client_id,
4188
15
            { "Attribute", "zbee_zcl_se.drlc.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_drlc_attr_client_names),
4189
15
            0x0, NULL, HFILL } },
4190
4191
15
        { &hf_zbee_zcl_drlc_attr_reporting_status,                         /* common to all SE clusters */
4192
15
            { "Attribute Reporting Status", "zbee_zcl_se.drlc.attr.attr_reporting_status",
4193
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
4194
4195
15
        { &hf_zbee_zcl_drlc_srv_tx_cmd_id,
4196
15
            { "Command", "zbee_zcl_se.drlc.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_drlc_srv_tx_cmd_names),
4197
15
            0x00, NULL, HFILL } },
4198
4199
15
        { &hf_zbee_zcl_drlc_srv_rx_cmd_id,
4200
15
            { "Command", "zbee_zcl_se.drlc.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_drlc_srv_rx_cmd_names),
4201
15
            0x00, NULL, HFILL } },
4202
4203
15
        { &hf_zbee_zcl_drlc_issuer_event_id,
4204
15
            { "Issuer Event ID", "zbee_zcl_se.drlc.issuer_id",
4205
15
            FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4206
4207
15
        { &hf_zbee_zcl_drlc_device_class,
4208
15
            { "Device Class", "zbee_zcl_se.drlc.device_class",
4209
15
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4210
4211
15
        { &hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace,
4212
15
            { "HVAC Compressor or Furnace", "zbee_zcl_se.drlc.device_class.hvac_compressor_or_furnace",
4213
15
            FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } },
4214
4215
15
        { &hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters,
4216
15
            { "Strip Heaters/Baseboard Heaters", "zbee_zcl_se.drlc.device_class.strip_heaters_baseboard_heaters",
4217
15
            FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
4218
4219
15
        { &hf_zbee_zcl_drlc_device_class_water_heater,
4220
15
            { "Water Heater", "zbee_zcl_se.drlc.device_class.water_heater",
4221
15
            FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
4222
4223
15
        { &hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi,
4224
15
            { "Pool Pump/Spa/Jacuzzi", "zbee_zcl_se.drlc.device_class.pool_pump_spa_jacuzzi",
4225
15
            FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
4226
4227
15
        { &hf_zbee_zcl_drlc_device_class_smart_appliances,
4228
15
            { "Smart Appliances", "zbee_zcl_se.drlc.device_class.smart_appliances",
4229
15
            FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } },
4230
4231
15
        { &hf_zbee_zcl_drlc_device_class_irrigation_pump,
4232
15
            { "Irrigation Pump", "zbee_zcl_se.drlc.device_class.irrigation_pump",
4233
15
            FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
4234
4235
15
        { &hf_zbee_zcl_drlc_device_class_managed_c_i_loads,
4236
15
            { "Managed Commercial & Industrial (C&I) loads", "zbee_zcl_se.drlc.device_class.managed_c_i_loads",
4237
15
            FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
4238
4239
15
        { &hf_zbee_zcl_drlc_device_class_simple_misc_loads,
4240
15
            { "Simple misc. (Residential On/Off) loads", "zbee_zcl_se.drlc.device_class.simple_misc_loads",
4241
15
            FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
4242
4243
15
        { &hf_zbee_zcl_drlc_device_class_exterior_lighting,
4244
15
            { "Exterior Lighting", "zbee_zcl_se.drlc.device_class.exterior_lighting",
4245
15
            FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
4246
4247
15
        { &hf_zbee_zcl_drlc_device_class_interior_lighting,
4248
15
            { "Interior Lighting", "zbee_zcl_se.drlc.device_class.interior_lighting",
4249
15
            FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
4250
4251
15
        { &hf_zbee_zcl_drlc_device_class_electric_vehicle,
4252
15
            { "Electric Vehicle", "zbee_zcl_se.drlc.device_class.electric_vehicle",
4253
15
            FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
4254
4255
15
        { &hf_zbee_zcl_drlc_device_class_generation_systems,
4256
15
            { "Generation Systems", "zbee_zcl_se.drlc.device_class.generation_systems",
4257
15
            FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
4258
4259
15
        { &hf_zbee_zcl_drlc_device_class_reserved ,
4260
15
            { "Reserved", "zbee_zcl_se.drlc.device_class.reserved",
4261
15
            FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } },
4262
4263
15
        { &hf_zbee_zcl_drlc_utility_enrollment_group,
4264
15
            { "Utility Enrollment Group", "zbee_zcl_se.drlc.utility_enrollment_group",
4265
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4266
4267
15
        { &hf_zbee_zcl_drlc_start_time,
4268
15
            { "Start Time", "zbee_zcl_se.drlc.start_time",
4269
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_strings), 0x0, NULL, HFILL } },
4270
4271
15
        { &hf_zbee_zcl_drlc_duration_in_minutes,
4272
15
            { "Duration In Minutes", "zbee_zcl_se.drlc.duration_in_minutes",
4273
15
            FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
4274
4275
15
        { &hf_zbee_zcl_drlc_criticality_level,
4276
15
            { "Criticality Level", "zbee_zcl_se.drlc.criticality_level",
4277
15
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_load_control_event_criticality_level), 0x0, NULL, HFILL } },
4278
4279
15
        { &hf_zbee_zcl_drlc_cooling_temp_offset,
4280
15
            { "Cooling Temperature Offset", "zbee_zcl_se.drlc.cooling_temperature_offset",
4281
15
            FT_UINT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_offset), 0x0, NULL, HFILL } },
4282
4283
15
        { &hf_zbee_zcl_drlc_heating_temp_offset,
4284
15
            { "Heating Temperature Offset", "zbee_zcl_se.drlc.heating_temperature_offset",
4285
15
            FT_UINT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_offset), 0x0, NULL, HFILL } },
4286
4287
15
        { &hf_zbee_zcl_drlc_cooling_temp_set_point,
4288
15
            { "Cooling Temperature Set Point", "zbee_zcl_se.drlc.cooling_temperature_set_point",
4289
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4290
4291
15
        { &hf_zbee_zcl_drlc_heating_temp_set_point,
4292
15
            { "Heating Temperature Set Point", "zbee_zcl_se.drlc.heating_temperature_set_point",
4293
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4294
4295
15
        { &hf_zbee_zcl_drlc_average_load_adjustment_percentage,
4296
15
            { "Average Load Adjustment Percentage", "zbee_zcl_se.drlc.average_load_adjustment_percentage",
4297
15
            FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
4298
4299
15
        { &hf_zbee_zcl_drlc_duty_cycle,
4300
15
            { "Duty Cycle", "zbee_zcl_se.drlc.duty_cycle",
4301
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4302
4303
15
        { &hf_zbee_zcl_drlc_event_control,
4304
15
            { "Event Control", "zbee_zcl_se.drlc.event_control",
4305
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4306
4307
15
        { &hf_zbee_zcl_drlc_event_control_randomize_start_time,
4308
15
            { "Randomize Start time", "zbee_zcl_se.drlc.randomize_start_time",
4309
15
            FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_start_tfs), 0x01, NULL, HFILL } },
4310
4311
15
        { &hf_zbee_zcl_drlc_event_control_randomize_duration_time,
4312
15
            { "Randomize Duration time", "zbee_zcl_se.drlc.randomize_duration_time",
4313
15
            FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_duration_tfs), 0x02, NULL, HFILL } },
4314
4315
15
        { &hf_zbee_zcl_drlc_event_control_reserved,
4316
15
            { "Reserved", "zbee_zcl_se.drlc.reserved",
4317
15
            FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
4318
4319
15
        { &hf_zbee_zcl_drlc_cancel_control,
4320
15
            { "Cancel Control", "zbee_zcl_se.drlc.cancel_control",
4321
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4322
4323
15
        { &hf_zbee_zcl_drlc_cancel_control_event_in_process,
4324
15
            { "Event in process", "zbee_zcl_se.drlc.cancel_control.event_in_process",
4325
15
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
4326
4327
15
        { &hf_zbee_zcl_drlc_cancel_control_reserved,
4328
15
            { "Reserved", "zbee_zcl_se.drlc.cancel_control.reserved",
4329
15
            FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL } },
4330
4331
15
        { &hf_zbee_zcl_drlc_effective_time,
4332
15
            { "Effective time", "zbee_zcl_se.drlc.effective_time",
4333
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_strings), 0x0, NULL, HFILL } },
4334
4335
15
        { &hf_zbee_zcl_drlc_report_event_issuer_event_id,
4336
15
            { "Issuer Event ID", "zbee_zcl_se.drlc.report_event.issuer_id",
4337
15
            FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4338
4339
15
        { &hf_zbee_zcl_drlc_report_event_event_status,
4340
15
            { "Event Status", "zbee_zcl_se.drlc.report_event.event_status",
4341
15
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_report_event_status_event_status), 0x0, NULL, HFILL } },
4342
4343
15
        { &hf_zbee_zcl_drlc_report_event_event_status_time,
4344
15
            { "Event Status Time", "zbee_zcl_se.drlc.report_event.event_status_time",
4345
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(zero_is_invalid_strings), 0x0, NULL, HFILL } },
4346
4347
15
        { &hf_zbee_zcl_drlc_report_event_criticality_level_applied ,
4348
15
            { "Criticality Level Applied", "zbee_zcl_se.drlc.report_event.criticality_level_applied",
4349
15
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_load_control_event_criticality_level), 0x0, NULL, HFILL } },
4350
4351
15
        { &hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied,
4352
15
            { "Cooling Temperature Set Point Applied", "zbee_zcl_se.drlc.report_event.cooling_temperature_set_point_applied",
4353
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4354
4355
15
        { &hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied,
4356
15
            { "Heating Temperature Set Point Applied", "zbee_zcl_se.drlc.report_event.heating_temperature_set_point_applied",
4357
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4358
4359
15
        { &hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage ,
4360
15
            { "Average Load Adjustment Percentage Applied", "zbee_zcl_se.drlc.report_event.average_load_adjustment_percentage_applied",
4361
15
            FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
4362
4363
15
        { &hf_zbee_zcl_drlc_report_event_duty_cycle,
4364
15
            { "Duty Cycle Applied", "zbee_zcl_se.drlc.report_event.duty_cycle_applied",
4365
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4366
4367
15
        { &hf_zbee_zcl_drlc_report_event_event_control ,
4368
15
            { "Event Control", "zbee_zcl_se.drlc.report_event.event_control",
4369
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4370
4371
15
        { &hf_zbee_zcl_drlc_report_event_signature_type,
4372
15
            { "Signature Type", "zbee_zcl_se.drlc.report_event.signature_type",
4373
15
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_report_event_signature_type), 0x0, NULL, HFILL } },
4374
4375
15
        { &hf_zbee_zcl_drlc_report_event_signature,
4376
15
            { "Signature", "zbee_zcl_se.drlc.report_event.signature",
4377
15
            FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
4378
4379
15
        { & hf_zbee_zcl_drlc_get_scheduled_events_earliest_end_time,
4380
15
            { "Earliest End Time", "zbee_zcl_se.drlc.get_scheduled_events.earliest_end_time",
4381
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_strings), 0x0, NULL, HFILL } },
4382
4383
15
        { &hf_zbee_zcl_drlc_get_scheduled_events_number_of_events,
4384
15
            { "Number of Events", "zbee_zcl_se.drlc.get_scheduled_events.numbers_of_events",
4385
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4386
4387
15
        { &hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id,
4388
15
            { "Minimum Issuer Event ID", "zbee_zcl_se.drlc.get_scheduled_events.issuer_event_id",
4389
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4390
15
    };
4391
4392
    /* ZCL DRLC subtrees */
4393
15
    int *ett[] = {
4394
15
        &ett_zbee_zcl_drlc,
4395
15
        &ett_zbee_zcl_drlc_device_class,
4396
15
        &ett_zbee_zcl_drlc_event_control,
4397
15
        &ett_zbee_zcl_drlc_cancel_control
4398
15
    };
4399
4400
    /* Register the ZigBee ZCL DRLC cluster protocol name and description */
4401
15
    proto_zbee_zcl_drlc = proto_register_protocol("ZigBee ZCL DLRC", "ZCL DLRC", ZBEE_PROTOABBREV_ZCL_DRLC);
4402
15
    proto_register_field_array(proto_zbee_zcl_drlc, hf, array_length(hf));
4403
15
    proto_register_subtree_array(ett, array_length(ett));
4404
4405
    /* Register the ZigBee ZCL DRLC dissector. */
4406
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_DRLC, dissect_zbee_zcl_drlc, proto_zbee_zcl_drlc);
4407
15
} /*proto_register_zbee_zcl_drlc*/
4408
4409
/**
4410
 *Hands off the ZCL DRLC dissector.
4411
 *
4412
*/
4413
void
4414
proto_reg_handoff_zbee_zcl_drlc(void)
4415
15
{
4416
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_DRLC,
4417
15
                            proto_zbee_zcl_drlc,
4418
15
                            ett_zbee_zcl_drlc,
4419
15
                            ZBEE_ZCL_CID_DEMAND_RESPONSE_LOAD_CONTROL,
4420
15
                            ZBEE_MFG_CODE_NONE,
4421
15
                            -1,
4422
15
                            hf_zbee_zcl_drlc_attr_client_id,
4423
15
                            hf_zbee_zcl_drlc_srv_rx_cmd_id,
4424
15
                            hf_zbee_zcl_drlc_srv_tx_cmd_id,
4425
15
                            dissect_zcl_drlc_attr_data
4426
15
                         );
4427
15
} /*proto_reg_handoff_zbee_zcl_drlc*/
4428
4429
/* ########################################################################## */
4430
/* #### (0x0702) METERING CLUSTER ########################################## */
4431
/* ########################################################################## */
4432
4433
/* Attributes */
4434
#define zbee_zcl_met_attr_server_names_VALUE_STRING_LIST(XXX) \
4435
/* Reading Information Set */ \
4436
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_SUM_DEL,                       0x0000, "Current Summation Delivered" ) \
4437
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_SUM_RECV,                      0x0001, "Current Summation Received" ) \
4438
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DE_DEL,                    0x0002, "Current Max Demand Delivered" ) \
4439
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DE_RECV,                   0x0003, "Current Max Demand Received" ) \
4440
    XXX(ZBEE_ZCL_ATTR_ID_MET_DFT_SUM,                           0x0004, "DFTSummation" ) \
4441
    XXX(ZBEE_ZCL_ATTR_ID_MET_DAILY_FREEZE_TIME,                 0x0005, "Daily Freeze Time" ) \
4442
    XXX(ZBEE_ZCL_ATTR_ID_MET_POWER_FACTOR,                      0x0006, "Power Factor" ) \
4443
    XXX(ZBEE_ZCL_ATTR_ID_MET_READ_SNAP_TIME,                    0x0007, "Reading Snapshot Time" ) \
4444
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DEMAND_DEL_TIME,           0x0008, "Current Max Demand Delivered Time" ) \
4445
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DEMAND_RECV_TIME,          0x0009, "Current Max Demand Received Time" ) \
4446
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEFAULT_UPDATE_PERIOD,             0x000A, "Default Update Period" ) \
4447
    XXX(ZBEE_ZCL_ATTR_ID_MET_FAST_POLL_UPDATE_PERIOD,           0x000B, "Fast Poll Update Period" ) \
4448
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_BLOCK_PER_CON_DEL,             0x000C, "Current Block Period Consumption Delivered" ) \
4449
    XXX(ZBEE_ZCL_ATTR_ID_MET_DAILY_CON_TARGET,                  0x000D, "Daily Consumption Target" ) \
4450
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_BLOCK,                     0x000E, "Current Block" ) \
4451
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROFILE_INTERVAL_PERIOD,           0x000F, "Profile Interval Period" ) \
4452
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEPRECATED,                        0x0010, "Deprecated" ) \
4453
    XXX(ZBEE_ZCL_ATTR_ID_MET_PRESET_READING_TIME,               0x0011, "Preset Reading Time" ) \
4454
    XXX(ZBEE_ZCL_ATTR_ID_MET_VOLUME_PER_REPORT,                 0x0012, "Volume Per Report" ) \
4455
    XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_RESTRICTION,                  0x0013, "Flow Restriction" ) \
4456
    XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_STATUS,                     0x0014, "Supply Status" ) \
4457
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_INLET_ENER_CAR_SUM,            0x0015, "Current Inlet Energy Carrier Summation" ) \
4458
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_OUTLET_ENER_CAR_SUM,           0x0016, "Current Outlet Energy Carrier Summation" ) \
4459
    XXX(ZBEE_ZCL_ATTR_ID_MET_INLET_TEMPERATURE,                 0x0017, "Inlet Temperature" ) \
4460
    XXX(ZBEE_ZCL_ATTR_ID_MET_OUTLET_TEMPERATURE,                0x0018, "Outlet Temperature" ) \
4461
    XXX(ZBEE_ZCL_ATTR_ID_MET_CONTROL_TEMPERATURE,               0x0019, "Control Temperature" ) \
4462
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_INLET_ENER_CAR_DEM,            0x001A, "Current Inlet Energy Carrier Demand" ) \
4463
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_OUTLET_ENER_CAR_DEM,           0x001B, "Current Outlet Energy Carrier Demand" ) \
4464
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_BLOCK_CON_DEL,                0x001C, "Previous Block Period Consumption Delivered" ) \
4465
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_BLOCL_CON_RECV,               0x001D, "Current Block Period Consumption Received" ) \
4466
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_BLOCK_RECEIVED,            0x001E, "Current Block Received" ) \
4467
    XXX(ZBEE_ZCL_ATTR_ID_MET_DFT_SUMMATION_RECEIVED,            0x001F, "DFT Summation Received" ) \
4468
    XXX(ZBEE_ZCL_ATTR_ID_MET_ACTIVE_REG_TIER_DEL,               0x0020, "Active Register Tier Delivered" ) \
4469
    XXX(ZBEE_ZCL_ATTR_ID_MET_ACTIVE_REG_TIER_RECV,              0x0021, "Active Register Tier Received" ) \
4470
    XXX(ZBEE_ZCL_ATTR_ID_MET_LAST_BLOCK_SWITCH_TIME,            0x0022, "Last Block Switch Time" ) \
4471
/* Summation TOU Information Set */ \
4472
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_1_SUM_DEL,            0x0100, "Current Tier 1 Summation Delivered" ) \
4473
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_1_SUM_RECV,           0x0101, "Current Tier 1 Summation Received" ) \
4474
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_2_SUM_DEL,            0x0102, "Current Tier 2 Summation Delivered" ) \
4475
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_2_SUM_RECV,           0x0103, "Current Tier 2 Summation Received" ) \
4476
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_3_SUM_DEL,            0x0104, "Current Tier 3 Summation Delivered" ) \
4477
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_3_SUM_RECV,           0x0105, "Current Tier 3 Summation Received" ) \
4478
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_4_SUM_DEL,            0x0106, "Current Tier 4 Summation Delivered" ) \
4479
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_4_SUM_RECV,           0x0107, "Current Tier 4 Summation Received" ) \
4480
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_5_SUM_DEL,            0x0108, "Current Tier 5 Summation Delivered" ) \
4481
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_5_SUM_RECV,           0x0109, "Current Tier 5 Summation Received" ) \
4482
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_6_SUM_DEL,            0x010A, "Current Tier 6 Summation Delivered" ) \
4483
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_6_SUM_RECV,           0x010B, "Current Tier 6 Summation Received" ) \
4484
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_7_SUM_DEL,            0x010C, "Current Tier 7 Summation Delivered" ) \
4485
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_7_SUM_RECV,           0x010D, "Current Tier 7 Summation Received" ) \
4486
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_8_SUM_DEL,            0x010E, "Current Tier 8 Summation Delivered" ) \
4487
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_8_SUM_RECV,           0x010F, "Current Tier 8 Summation Received" ) \
4488
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_9_SUM_DEL,            0x0110, "Current Tier 9 Summation Delivered" ) \
4489
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_9_SUM_RECV,           0x0111, "Current Tier 9 Summation Received" ) \
4490
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_10_SUM_DEL,           0x0112, "Current Tier 10 Summation Delivered" ) \
4491
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_10_SUM_RECV,          0x0113, "Current Tier 10 Summation Received" ) \
4492
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_11_SUM_DEL,           0x0114, "Current Tier 11 Summation Delivered" ) \
4493
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_11_SUM_RECV,          0x0115, "Current Tier 11 Summation Received" ) \
4494
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_12_SUM_DEL,           0x0116, "Current Tier 12 Summation Delivered" ) \
4495
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_12_SUM_RECV,          0x0117, "Current Tier 12 Summation Received" ) \
4496
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_13_SUM_DEL,           0x0118, "Current Tier 13 Summation Delivered" ) \
4497
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_13_SUM_RECV,          0x0119, "Current Tier 13 Summation Received" ) \
4498
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_14_SUM_DEL,           0x011A, "Current Tier 14 Summation Delivered" ) \
4499
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_14_SUM_RECV,          0x011B, "Current Tier 14 Summation Received" ) \
4500
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_15_SUM_DEL,           0x011C, "Current Tier 15 Summation Delivered" ) \
4501
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_15_SUM_RECV,          0x011D, "Current Tier 15 Summation Received" ) \
4502
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_16_SUM_DEL,           0x011E, "Current Tier 16 Summation Delivered" ) \
4503
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_16_SUM_RECV,          0x011F, "Current Tier 16 Summation Received" ) \
4504
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_17_SUM_DEL,           0x0120, "Current Tier 17 Summation Delivered" ) \
4505
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_17_SUM_RECV,          0x0121, "Current Tier 17 Summation Received" ) \
4506
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_18_SUM_DEL,           0x0122, "Current Tier 18 Summation Delivered" ) \
4507
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_18_SUM_RECV,          0x0123, "Current Tier 18 Summation Received" ) \
4508
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_19_SUM_DEL,           0x0124, "Current Tier 19 Summation Delivered" ) \
4509
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_19_SUM_RECV,          0x0125, "Current Tier 19 Summation Received" ) \
4510
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_20_SUM_DEL,           0x0126, "Current Tier 20 Summation Delivered" ) \
4511
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_20_SUM_RECV,          0x0127, "Current Tier 20 Summation Received" ) \
4512
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_21_SUM_DEL,           0x0128, "Current Tier 21 Summation Delivered" ) \
4513
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_21_SUM_RECV,          0x0129, "Current Tier 21 Summation Received" ) \
4514
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_22_SUM_DEL,           0x012A, "Current Tier 22 Summation Delivered" ) \
4515
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_22_SUM_RECV,          0x012B, "Current Tier 22 Summation Received" ) \
4516
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_23_SUM_DEL,           0x012C, "Current Tier 23 Summation Delivered" ) \
4517
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_23_SUM_RECV,          0x012D, "Current Tier 23 Summation Received" ) \
4518
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_24_SUM_DEL,           0x012E, "Current Tier 24 Summation Delivered" ) \
4519
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_24_SUM_RECV,          0x012F, "Current Tier 24 Summation Received" ) \
4520
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_25_SUM_DEL,           0x0130, "Current Tier 25 Summation Delivered" ) \
4521
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_25_SUM_RECV,          0x0131, "Current Tier 25 Summation Received" ) \
4522
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_26_SUM_DEL,           0x0132, "Current Tier 26 Summation Delivered" ) \
4523
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_26_SUM_RECV,          0x0133, "Current Tier 26 Summation Received" ) \
4524
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_27_SUM_DEL,           0x0134, "Current Tier 27 Summation Delivered" ) \
4525
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_27_SUM_RECV,          0x0135, "Current Tier 27 Summation Received" ) \
4526
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_28_SUM_DEL,           0x0136, "Current Tier 28 Summation Delivered" ) \
4527
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_28_SUM_RECV,          0x0137, "Current Tier 28 Summation Received" ) \
4528
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_29_SUM_DEL,           0x0138, "Current Tier 29 Summation Delivered" ) \
4529
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_29_SUM_RECV,          0x0139, "Current Tier 29 Summation Received" ) \
4530
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_30_SUM_DEL,           0x013A, "Current Tier 30 Summation Delivered" ) \
4531
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_30_SUM_RECV,          0x013B, "Current Tier 30 Summation Received" ) \
4532
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_31_SUM_DEL,           0x013C, "Current Tier 31 Summation Delivered" ) \
4533
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_31_SUM_RECV,          0x013D, "Current Tier 31 Summation Received" ) \
4534
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_32_SUM_DEL,           0x013E, "Current Tier 32 Summation Delivered" ) \
4535
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_32_SUM_RECV,          0x013F, "Current Tier 32 Summation Received" ) \
4536
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_33_SUM_DEL,           0x0140, "Current Tier 33 Summation Delivered" ) \
4537
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_33_SUM_RECV,          0x0141, "Current Tier 33 Summation Received" ) \
4538
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_34_SUM_DEL,           0x0142, "Current Tier 34 Summation Delivered" ) \
4539
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_34_SUM_RECV,          0x0143, "Current Tier 34 Summation Received" ) \
4540
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_35_SUM_DEL,           0x0144, "Current Tier 35 Summation Delivered" ) \
4541
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_35_SUM_RECV,          0x0145, "Current Tier 35 Summation Received" ) \
4542
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_36_SUM_DEL,           0x0146, "Current Tier 36 Summation Delivered" ) \
4543
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_36_SUM_RECV,          0x0147, "Current Tier 36 Summation Received" ) \
4544
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_37_SUM_DEL,           0x0148, "Current Tier 37 Summation Delivered" ) \
4545
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_37_SUM_RECV,          0x0149, "Current Tier 37 Summation Received" ) \
4546
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_38_SUM_DEL,           0x014A, "Current Tier 38 Summation Delivered" ) \
4547
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_38_SUM_RECV,          0x014B, "Current Tier 38 Summation Received" ) \
4548
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_39_SUM_DEL,           0x014C, "Current Tier 39 Summation Delivered" ) \
4549
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_39_SUM_RECV,          0x014D, "Current Tier 39 Summation Received" ) \
4550
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_40_SUM_DEL,           0x014E, "Current Tier 40 Summation Delivered" ) \
4551
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_40_SUM_RECV,          0x014F, "Current Tier 40 Summation Received" ) \
4552
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_41_SUM_DEL,           0x0150, "Current Tier 41 Summation Delivered" ) \
4553
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_41_SUM_RECV,          0x0151, "Current Tier 41 Summation Received" ) \
4554
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_42_SUM_DEL,           0x0152, "Current Tier 42 Summation Delivered" ) \
4555
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_42_SUM_RECV,          0x0153, "Current Tier 42 Summation Received" ) \
4556
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_43_SUM_DEL,           0x0154, "Current Tier 43 Summation Delivered" ) \
4557
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_43_SUM_RECV,          0x0155, "Current Tier 43 Summation Received" ) \
4558
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_44_SUM_DEL,           0x0156, "Current Tier 44 Summation Delivered" ) \
4559
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_44_SUM_RECV,          0x0157, "Current Tier 44 Summation Received" ) \
4560
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_45_SUM_DEL,           0x0158, "Current Tier 45 Summation Delivered" ) \
4561
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_45_SUM_RECV,          0x0159, "Current Tier 45 Summation Received" ) \
4562
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_46_SUM_DEL,           0x015A, "Current Tier 46 Summation Delivered" ) \
4563
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_46_SUM_RECV,          0x015B, "Current Tier 46 Summation Received" ) \
4564
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_47_SUM_DEL,           0x015C, "Current Tier 47 Summation Delivered" ) \
4565
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_47_SUM_RECV,          0x015D, "Current Tier 47 Summation Received" ) \
4566
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_48_SUM_DEL,           0x015E, "Current Tier 48 Summation Delivered" ) \
4567
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_48_SUM_RECV,          0x015F, "Current Tier 48 Summation Received" ) \
4568
    XXX(ZBEE_ZCL_ATTR_ID_MET_CPP1_SUMMATION_DELIVERED,          0x01FC, "CPP1 Summation Delivered" ) \
4569
    XXX(ZBEE_ZCL_ATTR_ID_MET_CPP2_SUMMATION_DELIVERED,          0x01FE, "CPP2 Summation Delivered" ) \
4570
/* Meter Status Attribute Set */ \
4571
    XXX(ZBEE_ZCL_ATTR_ID_MET_STATUS,                            0x0200, "Status" ) \
4572
    XXX(ZBEE_ZCL_ATTR_ID_MET_REMAIN_BAT_LIFE,                   0x0201, "Remaining Battery Life" ) \
4573
    XXX(ZBEE_ZCL_ATTR_ID_MET_HOURS_IN_OPERATION,                0x0202, "Hours in Operation" ) \
4574
    XXX(ZBEE_ZCL_ATTR_ID_MET_HOURS_IN_FAULT,                    0x0203, "Hours in Fault" ) \
4575
    XXX(ZBEE_ZCL_ATTR_ID_MET_EXTENDED_STATUS,                   0x0204, "Extended Status" ) \
4576
    XXX(ZBEE_ZCL_ATTR_ID_MET_REMAIN_BAT_LIFE_DAYS,              0x0205, "Remaining Battery Life in Days" ) \
4577
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_METER_ID,                  0x0206, "Current Meter ID" ) \
4578
    XXX(ZBEE_ZCL_ATTR_ID_MET_AMBIENT_CON_IND,                   0x0207, "Ambient Consumption Indicator" ) \
4579
/* Formatting */ \
4580
    XXX(ZBEE_ZCL_ATTR_ID_MET_UNIT_OF_MEASURE,                   0x0300, "Unit of Measure" ) \
4581
    XXX(ZBEE_ZCL_ATTR_ID_MET_MULTIPLIER,                        0x0301, "Multiplier" ) \
4582
    XXX(ZBEE_ZCL_ATTR_ID_MET_DIVISOR,                           0x0302, "Divisor" ) \
4583
    XXX(ZBEE_ZCL_ATTR_ID_MET_SUMMATION_FORMATTING,              0x0303, "Summation Formatting" ) \
4584
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_FORMATTING,                 0x0304, "Demand Formatting" ) \
4585
    XXX(ZBEE_ZCL_ATTR_ID_MET_HISTORICAL_CON_FORMATTING,         0x0305, "Historical Consumption Formatting" ) \
4586
    XXX(ZBEE_ZCL_ATTR_ID_MET_METERING_DEVICE_TYPE,              0x0306, "Metering Device Type" ) \
4587
    XXX(ZBEE_ZCL_ATTR_ID_MET_SITE_ID,                           0x0307, "Site ID" ) \
4588
    XXX(ZBEE_ZCL_ATTR_ID_MET_METER_SERIAL_NUMBER,               0x0308, "Meter Serial Number" ) \
4589
    XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_UNIT_OF_MEASURE,    0x0309, "Energy Carrier Unit of Measure" ) \
4590
    XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_SUMMATION_FORMAT,   0x030A, "Energy Carrier Summation Formatting" ) \
4591
    XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_DEMAND_FORMAT,      0x030B, "Energy Carrier Demand Formatting" ) \
4592
    XXX(ZBEE_ZCL_ATTR_ID_MET_TEMPERATURE_UNIT_OF_MEASURE,       0x030C, "Temperature Unit of Measure" ) \
4593
    XXX(ZBEE_ZCL_ATTR_ID_MET_TEMPERATURE_FORMATTING,            0x030D, "Temperature Formatting" ) \
4594
    XXX(ZBEE_ZCL_ATTR_ID_MET_MODULE_SERIAL_NUMBER,              0x030E, "Module Serial Number" ) \
4595
    XXX(ZBEE_ZCL_ATTR_ID_MET_OPERATING_TARIFF_LABEL_DELIVERED,  0x030F, "Operating Tariff Label Delivered" ) \
4596
    XXX(ZBEE_ZCL_ATTR_ID_MET_OPERATING_TARIFF_LABEL_RECEIVED,   0x0310, "Operating Tariff Label Received" ) \
4597
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUSTOMER_ID_NUMBER,                0x0311, "Customer ID Number" ) \
4598
    XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_UNIT_OF_MEASURE,               0x0312, "Alternative Unit of Measure" ) \
4599
    XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_DEMAND_FORMATTING,             0x0313, "Alternative Demand Formatting" ) \
4600
    XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_CON_FORMATTING,                0x0314, "Alternative Consumption Formatting" ) \
4601
/* Historical Consumption Attribute */ \
4602
    XXX(ZBEE_ZCL_ATTR_ID_MET_INSTANT_DEMAND,                    0x0400, "Instantaneous Demand" ) \
4603
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_CON_DEL,                   0x0401, "Current Day Consumption Delivered" ) \
4604
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_CON_RECV,                  0x0402, "Current Day Consumption Received" ) \
4605
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_CON_DEL,                  0x0403, "Previous Day Consumption Delivered" ) \
4606
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_CON_RECV,                 0x0404, "Previous Day Consumption Received" ) \
4607
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_START_DEL,    0x0405, "Current Partial Profile Interval Start Time Delivered" ) \
4608
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_START_RECV,   0x0406, "Current Partial Profile Interval Start Time Received" ) \
4609
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_VALUE_DEL,    0x0407, "Current Partial Profile Interval Value Delivered" ) \
4610
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_VALUE_RECV,   0x0408, "Current Partial Profile Interval Value Received" ) \
4611
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_PRESSURE,          0x0409, "Current Day Max Pressure" ) \
4612
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MIN_PRESSURE,          0x040A, "Current Day Min Pressure" ) \
4613
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_PRESSURE,         0x040B, "Previous Day Max Pressure" ) \
4614
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MIN_PRESSURE,         0x040C, "Previous Day Min Pressure" ) \
4615
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_DEMAND,            0x040D, "Current Day Max Demand" ) \
4616
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_DEMAND,           0x040E, "Previous Day Max Demand" ) \
4617
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MAX_DEMAND,          0x040F, "Current Month Max Demand" ) \
4618
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MAX_DEMAND,           0x0410, "Current Year Max Demand" ) \
4619
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_ENERGY_CARR_DEM,   0x0411, "Current Day Max Energy Carrier Demand" ) \
4620
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_ENERGY_CARR_DEM,  0x0412, "Previous Day Max Energy Carrier Demand" ) \
4621
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MAX_ENERGY_CARR_DEM, 0x0413, "Current Month Max Energy Carrier Demand" ) \
4622
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MIN_ENERGY_CARR_DEM, 0x0414, "Current Month Min Energy Carrier Demand" ) \
4623
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MAX_ENERGY_CARR_DEM,  0x0415, "Current Year Max Energy Carrier Demand" ) \
4624
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MIN_ENERGY_CARR_DEM,  0x0416, "Current Year Min Energy Carrier Demand" ) \
4625
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_2_DAY_CON_DEL,                0x0420, "Previous Day 2 Consumption Delivered" ) \
4626
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_2_DAY_CON_RECV,               0x0421, "Previous Day 2 Consumption Received" ) \
4627
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_3_DAY_CON_DEL,                0x0422, "Previous Day 3 Consumption Delivered" ) \
4628
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_3_DAY_CON_RECV,               0x0423, "Previous Day 3 Consumption Received" ) \
4629
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_4_DAY_CON_DEL,                0x0424, "Previous Day 4 Consumption Delivered" ) \
4630
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_4_DAY_CON_RECV,               0x0425, "Previous Day 4 Consumption Received" ) \
4631
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_5_DAY_CON_DEL,                0x0426, "Previous Day 5 Consumption Delivered" ) \
4632
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_5_DAY_CON_RECV,               0x0427, "Previous Day 5 Consumption Received" ) \
4633
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_6_DAY_CON_DEL,                0x0428, "Previous Day 6 Consumption Delivered" ) \
4634
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_6_DAY_CON_RECV,               0x0429, "Previous Day 6 Consumption Received" ) \
4635
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_7_DAY_CON_DEL,                0x042A, "Previous Day 7 Consumption Delivered" ) \
4636
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_7_DAY_CON_RECV,               0x042B, "Previous Day 7 Consumption Received" ) \
4637
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_8_DAY_CON_DEL,                0x042C, "Previous Day 8 Consumption Delivered" ) \
4638
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_8_DAY_CON_RECV,               0x042D, "Previous Day 8 Consumption Received" ) \
4639
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_CON_DEL,                  0x0430, "Current Week Consumption Delivered" ) \
4640
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_CON_RECV,                 0x0431, "Current Week Consumption Received" ) \
4641
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_CON_DEL,                 0x0432, "Previous Week Consumption Delivered" ) \
4642
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_CON_RECV,                0x0433, "Previous Week Consumption Received" ) \
4643
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_CON_DEL,               0x0434, "Previous Week 2 Consumption Delivered" ) \
4644
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_CON_RECV,              0x0435, "Previous Week 2 Consumption Received" ) \
4645
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_CON_DEL,               0x0436, "Previous Week 3 Consumption Delivered" ) \
4646
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_CON_RECV,              0x0437, "Previous Week 3 Consumption Received" ) \
4647
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_CON_DEL,               0x0438, "Previous Week 4 Consumption Delivered" ) \
4648
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_CON_RECV,              0x0439, "Previous Week 4 Consumption Received" ) \
4649
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_CON_DEL,               0x043A, "Previous Week 5 Consumption Delivered" ) \
4650
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_CON_RECV,              0x043B, "Previous Week 5 Consumption Received" ) \
4651
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_CON_DEL,                 0x0440, "Current Month Consumption Delivered" ) \
4652
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_CON_RECV,                0x0441, "Current Month Consumption Received" ) \
4653
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_CON_DEL,                0x0442, "Previous Month Consumption Delivered" ) \
4654
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_CON_RECV,               0x0443, "Previous Month Consumption Received" ) \
4655
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_CON_DEL,              0x0444, "Previous Month 2 Consumption Delivered" ) \
4656
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_CON_RECV,             0x0445, "Previous Month 2 Consumption Received" ) \
4657
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_CON_DEL,              0x0446, "Previous Month 3 Consumption Delivered" ) \
4658
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_CON_RECV,             0x0447, "Previous Month 3 Consumption Received" ) \
4659
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_CON_DEL,              0x0448, "Previous Month 4 Consumption Delivered" ) \
4660
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_CON_RECV,             0x0449, "Previous Month 4 Consumption Received" ) \
4661
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_CON_DEL,              0x044A, "Previous Month 5 Consumption Delivered" ) \
4662
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_CON_RECV,             0x044B, "Previous Month 5 Consumption Received" ) \
4663
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_CON_DEL,              0x044C, "Previous Month 6 Consumption Delivered" ) \
4664
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_CON_RECV,             0x044D, "Previous Month 6 Consumption Received" ) \
4665
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_CON_DEL,              0x044E, "Previous Month 7 Consumption Delivered" ) \
4666
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_CON_RECV,             0x044F, "Previous Month 7 Consumption Received" ) \
4667
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_CON_DEL,              0x0450, "Previous Month 8 Consumption Delivered" ) \
4668
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_CON_RECV,             0x0451, "Previous Month 8 Consumption Received" ) \
4669
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_CON_DEL,              0x0452, "Previous Month 9 Consumption Delivered" ) \
4670
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_CON_RECV,             0x0453, "Previous Month 9 Consumption Received" ) \
4671
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_CON_DEL,             0x0454, "Previous Month 10 Consumption Delivered" ) \
4672
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_CON_RECV,            0x0455, "Previous Month 10 Consumption Received" ) \
4673
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_CON_DEL,             0x0456, "Previous Month 11 Consumption Delivered" ) \
4674
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_CON_RECV,            0x0457, "Previous Month 11 Consumption Received" ) \
4675
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_CON_DEL,             0x0458, "Previous Month 12 Consumption Delivered" ) \
4676
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_CON_RECV,            0x0459, "Previous Month 12 Consumption Received" ) \
4677
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_CON_DEL,             0x045A, "Previous Month 13 Consumption Delivered" ) \
4678
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_CON_RECV,            0x045B, "Previous Month 13 Consumption Received" ) \
4679
    XXX(ZBEE_ZCL_ATTR_ID_MET_HISTORICAL_FREEZE_TIME,            0x045C, "Historical Freeze Time" ) \
4680
/* Load Profile Configuration */ \
4681
    XXX(ZBEE_ZCL_ATTR_ID_MET_MAX_NUMBER_OF_PERIODS_DELIVERED,   0x0500, "Max Number of Periods Delivered" ) \
4682
/* Supply Limit Attributes */ \
4683
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DEMAND_DELIVERED,          0x0600, "Current Demand Delivered" ) \
4684
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_LIMIT,                      0x0601, "Demand Limit" ) \
4685
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_INTEGRATION_PERIOD,         0x0602, "Demand Integration Period" ) \
4686
    XXX(ZBEE_ZCL_ATTR_ID_MET_NUMBER_OF_DEMAND_SUBINTERVALS,     0x0603, "Number of Demand Subintervals" ) \
4687
    XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_LIMIT_ARM_DURATION,         0x0604, "Demand Limit Arm Duration" ) \
4688
    XXX(ZBEE_ZCL_ATTR_ID_MET_LOAD_LIMIT_SUPPLY_STATE,           0x0605, "Load Limit Supply State" ) \
4689
    XXX(ZBEE_ZCL_ATTR_ID_MET_LOAD_LIMIT_COUNTER,                0x0606, "Load Limit Counter" ) \
4690
    XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_TAMPER_STATE,               0x0607, "Supply Tamper State" ) \
4691
    XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_DEPLETION_STATE,            0x0608, "Supply Depletion State" ) \
4692
    XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_UNCONTROLLED_FLOW_STATE,    0x0609, "Supply Uncontrolled Flow State" ) \
4693
/* Block Information Attribute Set (Delivered) */ \
4694
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_1_SUM_DEL,       0x0700, "Current No Tier Block 1 Summation Delivered" ) \
4695
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_2_SUM_DEL,       0x0701, "Current No Tier Block 2 Summation Delivered" ) \
4696
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_3_SUM_DEL,       0x0702, "Current No Tier Block 3 Summation Delivered" ) \
4697
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_4_SUM_DEL,       0x0703, "Current No Tier Block 4 Summation Delivered" ) \
4698
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_5_SUM_DEL,       0x0704, "Current No Tier Block 5 Summation Delivered" ) \
4699
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_6_SUM_DEL,       0x0705, "Current No Tier Block 6 Summation Delivered" ) \
4700
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_7_SUM_DEL,       0x0706, "Current No Tier Block 7 Summation Delivered" ) \
4701
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_8_SUM_DEL,       0x0707, "Current No Tier Block 8 Summation Delivered" ) \
4702
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_9_SUM_DEL,       0x0708, "Current No Tier Block 9 Summation Delivered" ) \
4703
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_10_SUM_DEL,      0x0709, "Current No Tier Block 10 Summation Delivered" ) \
4704
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_11_SUM_DEL,      0x070A, "Current No Tier Block 11 Summation Delivered" ) \
4705
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_12_SUM_DEL,      0x070B, "Current No Tier Block 12 Summation Delivered" ) \
4706
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_13_SUM_DEL,      0x070C, "Current No Tier Block 13 Summation Delivered" ) \
4707
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_14_SUM_DEL,      0x070D, "Current No Tier Block 14 Summation Delivered" ) \
4708
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_15_SUM_DEL,      0x070E, "Current No Tier Block 15 Summation Delivered" ) \
4709
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_16_SUM_DEL,      0x070F, "Current No Tier Block 16 Summation Delivered" ) \
4710
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_1_SUM_DEL,        0x0710, "Current Tier 1 Block 1 Summation Delivered" ) \
4711
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_2_SUM_DEL,        0x0711, "Current Tier 1 Block 2 Summation Delivered" ) \
4712
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_3_SUM_DEL,        0x0712, "Current Tier 1 Block 3 Summation Delivered" ) \
4713
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_4_SUM_DEL,        0x0713, "Current Tier 1 Block 4 Summation Delivered" ) \
4714
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_5_SUM_DEL,        0x0714, "Current Tier 1 Block 5 Summation Delivered" ) \
4715
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_6_SUM_DEL,        0x0715, "Current Tier 1 Block 6 Summation Delivered" ) \
4716
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_7_SUM_DEL,        0x0716, "Current Tier 1 Block 7 Summation Delivered" ) \
4717
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_8_SUM_DEL,        0x0717, "Current Tier 1 Block 8 Summation Delivered" ) \
4718
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_9_SUM_DEL,        0x0718, "Current Tier 1 Block 9 Summation Delivered" ) \
4719
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_10_SUM_DEL,       0x0719, "Current Tier 1 Block 10 Summation Delivered" ) \
4720
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_11_SUM_DEL,       0x071A, "Current Tier 1 Block 11 Summation Delivered" ) \
4721
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_12_SUM_DEL,       0x071B, "Current Tier 1 Block 12 Summation Delivered" ) \
4722
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_13_SUM_DEL,       0x071C, "Current Tier 1 Block 13 Summation Delivered" ) \
4723
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_14_SUM_DEL,       0x071D, "Current Tier 1 Block 14 Summation Delivered" ) \
4724
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_15_SUM_DEL,       0x071E, "Current Tier 1 Block 15 Summation Delivered" ) \
4725
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_16_SUM_DEL,       0x071F, "Current Tier 1 Block 16 Summation Delivered" ) \
4726
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_1_SUM_DEL,        0x0720, "Current Tier 2 Block 1 Summation Delivered" ) \
4727
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_2_SUM_DEL,        0x0721, "Current Tier 2 Block 2 Summation Delivered" ) \
4728
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_3_SUM_DEL,        0x0722, "Current Tier 2 Block 3 Summation Delivered" ) \
4729
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_4_SUM_DEL,        0x0723, "Current Tier 2 Block 4 Summation Delivered" ) \
4730
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_5_SUM_DEL,        0x0724, "Current Tier 2 Block 5 Summation Delivered" ) \
4731
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_6_SUM_DEL,        0x0725, "Current Tier 2 Block 6 Summation Delivered" ) \
4732
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_7_SUM_DEL,        0x0726, "Current Tier 2 Block 7 Summation Delivered" ) \
4733
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_8_SUM_DEL,        0x0727, "Current Tier 2 Block 8 Summation Delivered" ) \
4734
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_9_SUM_DEL,        0x0728, "Current Tier 2 Block 9 Summation Delivered" ) \
4735
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_10_SUM_DEL,       0x0729, "Current Tier 2 Block 10 Summation Delivered" ) \
4736
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_11_SUM_DEL,       0x072A, "Current Tier 2 Block 11 Summation Delivered" ) \
4737
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_12_SUM_DEL,       0x072B, "Current Tier 2 Block 12 Summation Delivered" ) \
4738
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_13_SUM_DEL,       0x072C, "Current Tier 2 Block 13 Summation Delivered" ) \
4739
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_14_SUM_DEL,       0x072D, "Current Tier 2 Block 14 Summation Delivered" ) \
4740
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_15_SUM_DEL,       0x072E, "Current Tier 2 Block 15 Summation Delivered" ) \
4741
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_16_SUM_DEL,       0x072F, "Current Tier 2 Block 16 Summation Delivered" ) \
4742
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_1_SUM_DEL,        0x0730, "Current Tier 3 Block 1 Summation Delivered" ) \
4743
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_2_SUM_DEL,        0x0731, "Current Tier 3 Block 2 Summation Delivered" ) \
4744
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_3_SUM_DEL,        0x0732, "Current Tier 3 Block 3 Summation Delivered" ) \
4745
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_4_SUM_DEL,        0x0733, "Current Tier 3 Block 4 Summation Delivered" ) \
4746
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_5_SUM_DEL,        0x0734, "Current Tier 3 Block 5 Summation Delivered" ) \
4747
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_6_SUM_DEL,        0x0735, "Current Tier 3 Block 6 Summation Delivered" ) \
4748
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_7_SUM_DEL,        0x0736, "Current Tier 3 Block 7 Summation Delivered" ) \
4749
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_8_SUM_DEL,        0x0737, "Current Tier 3 Block 8 Summation Delivered" ) \
4750
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_9_SUM_DEL,        0x0738, "Current Tier 3 Block 9 Summation Delivered" ) \
4751
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_10_SUM_DEL,       0x0739, "Current Tier 3 Block 10 Summation Delivered" ) \
4752
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_11_SUM_DEL,       0x073A, "Current Tier 3 Block 11 Summation Delivered" ) \
4753
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_12_SUM_DEL,       0x073B, "Current Tier 3 Block 12 Summation Delivered" ) \
4754
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_13_SUM_DEL,       0x073C, "Current Tier 3 Block 13 Summation Delivered" ) \
4755
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_14_SUM_DEL,       0x073D, "Current Tier 3 Block 14 Summation Delivered" ) \
4756
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_15_SUM_DEL,       0x073E, "Current Tier 3 Block 15 Summation Delivered" ) \
4757
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_16_SUM_DEL,       0x073F, "Current Tier 3 Block 16 Summation Delivered" ) \
4758
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_1_SUM_DEL,        0x0740, "Current Tier 4 Block 1 Summation Delivered" ) \
4759
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_2_SUM_DEL,        0x0741, "Current Tier 4 Block 2 Summation Delivered" ) \
4760
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_3_SUM_DEL,        0x0742, "Current Tier 4 Block 3 Summation Delivered" ) \
4761
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_4_SUM_DEL,        0x0743, "Current Tier 4 Block 4 Summation Delivered" ) \
4762
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_5_SUM_DEL,        0x0744, "Current Tier 4 Block 5 Summation Delivered" ) \
4763
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_6_SUM_DEL,        0x0745, "Current Tier 4 Block 6 Summation Delivered" ) \
4764
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_7_SUM_DEL,        0x0746, "Current Tier 4 Block 7 Summation Delivered" ) \
4765
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_8_SUM_DEL,        0x0747, "Current Tier 4 Block 8 Summation Delivered" ) \
4766
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_9_SUM_DEL,        0x0748, "Current Tier 4 Block 9 Summation Delivered" ) \
4767
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_10_SUM_DEL,       0x0749, "Current Tier 4 Block 10 Summation Delivered" ) \
4768
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_11_SUM_DEL,       0x074A, "Current Tier 4 Block 11 Summation Delivered" ) \
4769
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_12_SUM_DEL,       0x074B, "Current Tier 4 Block 12 Summation Delivered" ) \
4770
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_13_SUM_DEL,       0x074C, "Current Tier 4 Block 13 Summation Delivered" ) \
4771
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_14_SUM_DEL,       0x074D, "Current Tier 4 Block 14 Summation Delivered" ) \
4772
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_15_SUM_DEL,       0x074E, "Current Tier 4 Block 15 Summation Delivered" ) \
4773
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_16_SUM_DEL,       0x074F, "Current Tier 4 Block 16 Summation Delivered" ) \
4774
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_1_SUM_DEL,        0x0750, "Current Tier 5 Block 1 Summation Delivered" ) \
4775
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_2_SUM_DEL,        0x0751, "Current Tier 5 Block 2 Summation Delivered" ) \
4776
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_3_SUM_DEL,        0x0752, "Current Tier 5 Block 3 Summation Delivered" ) \
4777
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_4_SUM_DEL,        0x0753, "Current Tier 5 Block 4 Summation Delivered" ) \
4778
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_5_SUM_DEL,        0x0754, "Current Tier 5 Block 5 Summation Delivered" ) \
4779
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_6_SUM_DEL,        0x0755, "Current Tier 5 Block 6 Summation Delivered" ) \
4780
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_7_SUM_DEL,        0x0756, "Current Tier 5 Block 7 Summation Delivered" ) \
4781
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_8_SUM_DEL,        0x0757, "Current Tier 5 Block 8 Summation Delivered" ) \
4782
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_9_SUM_DEL,        0x0758, "Current Tier 5 Block 9 Summation Delivered" ) \
4783
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_10_SUM_DEL,       0x0759, "Current Tier 5 Block 10 Summation Delivered" ) \
4784
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_11_SUM_DEL,       0x075A, "Current Tier 5 Block 11 Summation Delivered" ) \
4785
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_12_SUM_DEL,       0x075B, "Current Tier 5 Block 12 Summation Delivered" ) \
4786
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_13_SUM_DEL,       0x075C, "Current Tier 5 Block 13 Summation Delivered" ) \
4787
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_14_SUM_DEL,       0x075D, "Current Tier 5 Block 14 Summation Delivered" ) \
4788
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_15_SUM_DEL,       0x075E, "Current Tier 5 Block 15 Summation Delivered" ) \
4789
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_16_SUM_DEL,       0x075F, "Current Tier 5 Block 16 Summation Delivered" ) \
4790
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_1_SUM_DEL,        0x0760, "Current Tier 6 Block 1 Summation Delivered" ) \
4791
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_2_SUM_DEL,        0x0761, "Current Tier 6 Block 2 Summation Delivered" ) \
4792
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_3_SUM_DEL,        0x0762, "Current Tier 6 Block 3 Summation Delivered" ) \
4793
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_4_SUM_DEL,        0x0763, "Current Tier 6 Block 4 Summation Delivered" ) \
4794
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_5_SUM_DEL,        0x0764, "Current Tier 6 Block 5 Summation Delivered" ) \
4795
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_6_SUM_DEL,        0x0765, "Current Tier 6 Block 6 Summation Delivered" ) \
4796
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_7_SUM_DEL,        0x0766, "Current Tier 6 Block 7 Summation Delivered" ) \
4797
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_8_SUM_DEL,        0x0767, "Current Tier 6 Block 8 Summation Delivered" ) \
4798
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_9_SUM_DEL,        0x0768, "Current Tier 6 Block 9 Summation Delivered" ) \
4799
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_10_SUM_DEL,       0x0769, "Current Tier 6 Block 10 Summation Delivered" ) \
4800
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_11_SUM_DEL,       0x076A, "Current Tier 6 Block 11 Summation Delivered" ) \
4801
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_12_SUM_DEL,       0x076B, "Current Tier 6 Block 12 Summation Delivered" ) \
4802
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_13_SUM_DEL,       0x076C, "Current Tier 6 Block 13 Summation Delivered" ) \
4803
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_14_SUM_DEL,       0x076D, "Current Tier 6 Block 14 Summation Delivered" ) \
4804
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_15_SUM_DEL,       0x076E, "Current Tier 6 Block 15 Summation Delivered" ) \
4805
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_16_SUM_DEL,       0x076F, "Current Tier 6 Block 16 Summation Delivered" ) \
4806
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_1_SUM_DEL,        0x0770, "Current Tier 7 Block 1 Summation Delivered" ) \
4807
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_2_SUM_DEL,        0x0771, "Current Tier 7 Block 2 Summation Delivered" ) \
4808
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_3_SUM_DEL,        0x0772, "Current Tier 7 Block 3 Summation Delivered" ) \
4809
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_4_SUM_DEL,        0x0773, "Current Tier 7 Block 4 Summation Delivered" ) \
4810
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_5_SUM_DEL,        0x0774, "Current Tier 7 Block 5 Summation Delivered" ) \
4811
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_6_SUM_DEL,        0x0775, "Current Tier 7 Block 6 Summation Delivered" ) \
4812
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_7_SUM_DEL,        0x0776, "Current Tier 7 Block 7 Summation Delivered" ) \
4813
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_8_SUM_DEL,        0x0777, "Current Tier 7 Block 8 Summation Delivered" ) \
4814
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_9_SUM_DEL,        0x0778, "Current Tier 7 Block 9 Summation Delivered" ) \
4815
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_10_SUM_DEL,       0x0779, "Current Tier 7 Block 10 Summation Delivered" ) \
4816
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_11_SUM_DEL,       0x077A, "Current Tier 7 Block 11 Summation Delivered" ) \
4817
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_12_SUM_DEL,       0x077B, "Current Tier 7 Block 12 Summation Delivered" ) \
4818
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_13_SUM_DEL,       0x077C, "Current Tier 7 Block 13 Summation Delivered" ) \
4819
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_14_SUM_DEL,       0x077D, "Current Tier 7 Block 14 Summation Delivered" ) \
4820
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_15_SUM_DEL,       0x077E, "Current Tier 7 Block 15 Summation Delivered" ) \
4821
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_16_SUM_DEL,       0x077F, "Current Tier 7 Block 16 Summation Delivered" ) \
4822
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_1_SUM_DEL,        0x0780, "Current Tier 8 Block 1 Summation Delivered" ) \
4823
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_2_SUM_DEL,        0x0781, "Current Tier 8 Block 2 Summation Delivered" ) \
4824
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_3_SUM_DEL,        0x0782, "Current Tier 8 Block 3 Summation Delivered" ) \
4825
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_4_SUM_DEL,        0x0783, "Current Tier 8 Block 4 Summation Delivered" ) \
4826
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_5_SUM_DEL,        0x0784, "Current Tier 8 Block 5 Summation Delivered" ) \
4827
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_6_SUM_DEL,        0x0785, "Current Tier 8 Block 6 Summation Delivered" ) \
4828
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_7_SUM_DEL,        0x0786, "Current Tier 8 Block 7 Summation Delivered" ) \
4829
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_8_SUM_DEL,        0x0787, "Current Tier 8 Block 8 Summation Delivered" ) \
4830
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_9_SUM_DEL,        0x0788, "Current Tier 8 Block 9 Summation Delivered" ) \
4831
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_10_SUM_DEL,       0x0789, "Current Tier 8 Block 10 Summation Delivered" ) \
4832
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_11_SUM_DEL,       0x078A, "Current Tier 8 Block 11 Summation Delivered" ) \
4833
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_12_SUM_DEL,       0x078B, "Current Tier 8 Block 12 Summation Delivered" ) \
4834
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_13_SUM_DEL,       0x078C, "Current Tier 8 Block 13 Summation Delivered" ) \
4835
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_14_SUM_DEL,       0x078D, "Current Tier 8 Block 14 Summation Delivered" ) \
4836
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_15_SUM_DEL,       0x078E, "Current Tier 8 Block 15 Summation Delivered" ) \
4837
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_16_SUM_DEL,       0x078F, "Current Tier 8 Block 16 Summation Delivered" ) \
4838
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_1_SUM_DEL,        0x0790, "Current Tier 9 Block 1 Summation Delivered" ) \
4839
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_2_SUM_DEL,        0x0791, "Current Tier 9 Block 2 Summation Delivered" ) \
4840
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_3_SUM_DEL,        0x0792, "Current Tier 9 Block 3 Summation Delivered" ) \
4841
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_4_SUM_DEL,        0x0793, "Current Tier 9 Block 4 Summation Delivered" ) \
4842
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_5_SUM_DEL,        0x0794, "Current Tier 9 Block 5 Summation Delivered" ) \
4843
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_6_SUM_DEL,        0x0795, "Current Tier 9 Block 6 Summation Delivered" ) \
4844
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_7_SUM_DEL,        0x0796, "Current Tier 9 Block 7 Summation Delivered" ) \
4845
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_8_SUM_DEL,        0x0797, "Current Tier 9 Block 8 Summation Delivered" ) \
4846
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_9_SUM_DEL,        0x0798, "Current Tier 9 Block 9 Summation Delivered" ) \
4847
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_10_SUM_DEL,       0x0799, "Current Tier 9 Block 10 Summation Delivered" ) \
4848
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_11_SUM_DEL,       0x079A, "Current Tier 9 Block 11 Summation Delivered" ) \
4849
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_12_SUM_DEL,       0x079B, "Current Tier 9 Block 12 Summation Delivered" ) \
4850
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_13_SUM_DEL,       0x079C, "Current Tier 9 Block 13 Summation Delivered" ) \
4851
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_14_SUM_DEL,       0x079D, "Current Tier 9 Block 14 Summation Delivered" ) \
4852
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_15_SUM_DEL,       0x079E, "Current Tier 9 Block 15 Summation Delivered" ) \
4853
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_16_SUM_DEL,       0x079F, "Current Tier 9 Block 16 Summation Delivered" ) \
4854
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_1_SUM_DEL,       0x07A0, "Current Tier 10 Block 1 Summation Delivered" ) \
4855
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_2_SUM_DEL,       0x07A1, "Current Tier 10 Block 2 Summation Delivered" ) \
4856
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_3_SUM_DEL,       0x07A2, "Current Tier 10 Block 3 Summation Delivered" ) \
4857
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_4_SUM_DEL,       0x07A3, "Current Tier 10 Block 4 Summation Delivered" ) \
4858
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_5_SUM_DEL,       0x07A4, "Current Tier 10 Block 5 Summation Delivered" ) \
4859
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_6_SUM_DEL,       0x07A5, "Current Tier 10 Block 6 Summation Delivered" ) \
4860
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_7_SUM_DEL,       0x07A6, "Current Tier 10 Block 7 Summation Delivered" ) \
4861
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_8_SUM_DEL,       0x07A7, "Current Tier 10 Block 8 Summation Delivered" ) \
4862
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_9_SUM_DEL,       0x07A8, "Current Tier 10 Block 9 Summation Delivered" ) \
4863
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_10_SUM_DEL,      0x07A9, "Current Tier 10 Block 10 Summation Delivered" ) \
4864
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_11_SUM_DEL,      0x07AA, "Current Tier 10 Block 11 Summation Delivered" ) \
4865
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_12_SUM_DEL,      0x07AB, "Current Tier 10 Block 12 Summation Delivered" ) \
4866
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_13_SUM_DEL,      0x07AC, "Current Tier 10 Block 13 Summation Delivered" ) \
4867
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_14_SUM_DEL,      0x07AD, "Current Tier 10 Block 14 Summation Delivered" ) \
4868
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_15_SUM_DEL,      0x07AE, "Current Tier 10 Block 15 Summation Delivered" ) \
4869
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_16_SUM_DEL,      0x07AF, "Current Tier 10 Block 16 Summation Delivered" ) \
4870
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_1_SUM_DEL,       0x07B0, "Current Tier 11 Block 1 Summation Delivered" ) \
4871
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_2_SUM_DEL,       0x07B1, "Current Tier 11 Block 2 Summation Delivered" ) \
4872
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_3_SUM_DEL,       0x07B2, "Current Tier 11 Block 3 Summation Delivered" ) \
4873
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_4_SUM_DEL,       0x07B3, "Current Tier 11 Block 4 Summation Delivered" ) \
4874
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_5_SUM_DEL,       0x07B4, "Current Tier 11 Block 5 Summation Delivered" ) \
4875
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_6_SUM_DEL,       0x07B5, "Current Tier 11 Block 6 Summation Delivered" ) \
4876
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_7_SUM_DEL,       0x07B6, "Current Tier 11 Block 7 Summation Delivered" ) \
4877
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_8_SUM_DEL,       0x07B7, "Current Tier 11 Block 8 Summation Delivered" ) \
4878
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_9_SUM_DEL,       0x07B8, "Current Tier 11 Block 9 Summation Delivered" ) \
4879
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_10_SUM_DEL,      0x07B9, "Current Tier 11 Block 10 Summation Delivered" ) \
4880
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_11_SUM_DEL,      0x07BA, "Current Tier 11 Block 11 Summation Delivered" ) \
4881
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_12_SUM_DEL,      0x07BB, "Current Tier 11 Block 12 Summation Delivered" ) \
4882
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_13_SUM_DEL,      0x07BC, "Current Tier 11 Block 13 Summation Delivered" ) \
4883
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_14_SUM_DEL,      0x07BD, "Current Tier 11 Block 14 Summation Delivered" ) \
4884
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_15_SUM_DEL,      0x07BE, "Current Tier 11 Block 15 Summation Delivered" ) \
4885
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_16_SUM_DEL,      0x07BF, "Current Tier 11 Block 16 Summation Delivered" ) \
4886
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_1_SUM_DEL,       0x07C0, "Current Tier 12 Block 1 Summation Delivered" ) \
4887
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_2_SUM_DEL,       0x07C1, "Current Tier 12 Block 2 Summation Delivered" ) \
4888
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_3_SUM_DEL,       0x07C2, "Current Tier 12 Block 3 Summation Delivered" ) \
4889
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_4_SUM_DEL,       0x07C3, "Current Tier 12 Block 4 Summation Delivered" ) \
4890
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_5_SUM_DEL,       0x07C4, "Current Tier 12 Block 5 Summation Delivered" ) \
4891
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_6_SUM_DEL,       0x07C5, "Current Tier 12 Block 6 Summation Delivered" ) \
4892
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_7_SUM_DEL,       0x07C6, "Current Tier 12 Block 7 Summation Delivered" ) \
4893
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_8_SUM_DEL,       0x07C7, "Current Tier 12 Block 8 Summation Delivered" ) \
4894
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_9_SUM_DEL,       0x07C8, "Current Tier 12 Block 9 Summation Delivered" ) \
4895
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_10_SUM_DEL,      0x07C9, "Current Tier 12 Block 10 Summation Delivered" ) \
4896
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_11_SUM_DEL,      0x07CA, "Current Tier 12 Block 11 Summation Delivered" ) \
4897
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_12_SUM_DEL,      0x07CB, "Current Tier 12 Block 12 Summation Delivered" ) \
4898
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_13_SUM_DEL,      0x07CC, "Current Tier 12 Block 13 Summation Delivered" ) \
4899
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_14_SUM_DEL,      0x07CD, "Current Tier 12 Block 14 Summation Delivered" ) \
4900
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_15_SUM_DEL,      0x07CE, "Current Tier 12 Block 15 Summation Delivered" ) \
4901
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_16_SUM_DEL,      0x07CF, "Current Tier 12 Block 16 Summation Delivered" ) \
4902
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_1_SUM_DEL,       0x07D0, "Current Tier 13 Block 1 Summation Delivered" ) \
4903
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_2_SUM_DEL,       0x07D1, "Current Tier 13 Block 2 Summation Delivered" ) \
4904
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_3_SUM_DEL,       0x07D2, "Current Tier 13 Block 3 Summation Delivered" ) \
4905
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_4_SUM_DEL,       0x07D3, "Current Tier 13 Block 4 Summation Delivered" ) \
4906
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_5_SUM_DEL,       0x07D4, "Current Tier 13 Block 5 Summation Delivered" ) \
4907
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_6_SUM_DEL,       0x07D5, "Current Tier 13 Block 6 Summation Delivered" ) \
4908
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_7_SUM_DEL,       0x07D6, "Current Tier 13 Block 7 Summation Delivered" ) \
4909
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_8_SUM_DEL,       0x07D7, "Current Tier 13 Block 8 Summation Delivered" ) \
4910
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_9_SUM_DEL,       0x07D8, "Current Tier 13 Block 9 Summation Delivered" ) \
4911
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_10_SUM_DEL,      0x07D9, "Current Tier 13 Block 10 Summation Delivered" ) \
4912
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_11_SUM_DEL,      0x07DA, "Current Tier 13 Block 11 Summation Delivered" ) \
4913
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_12_SUM_DEL,      0x07DB, "Current Tier 13 Block 12 Summation Delivered" ) \
4914
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_13_SUM_DEL,      0x07DC, "Current Tier 13 Block 13 Summation Delivered" ) \
4915
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_14_SUM_DEL,      0x07DD, "Current Tier 13 Block 14 Summation Delivered" ) \
4916
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_15_SUM_DEL,      0x07DE, "Current Tier 13 Block 15 Summation Delivered" ) \
4917
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_16_SUM_DEL,      0x07DF, "Current Tier 13 Block 16 Summation Delivered" ) \
4918
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_1_SUM_DEL,       0x07E0, "Current Tier 14 Block 1 Summation Delivered" ) \
4919
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_2_SUM_DEL,       0x07E1, "Current Tier 14 Block 2 Summation Delivered" ) \
4920
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_3_SUM_DEL,       0x07E2, "Current Tier 14 Block 3 Summation Delivered" ) \
4921
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_4_SUM_DEL,       0x07E3, "Current Tier 14 Block 4 Summation Delivered" ) \
4922
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_5_SUM_DEL,       0x07E4, "Current Tier 14 Block 5 Summation Delivered" ) \
4923
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_6_SUM_DEL,       0x07E5, "Current Tier 14 Block 6 Summation Delivered" ) \
4924
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_7_SUM_DEL,       0x07E6, "Current Tier 14 Block 7 Summation Delivered" ) \
4925
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_8_SUM_DEL,       0x07E7, "Current Tier 14 Block 8 Summation Delivered" ) \
4926
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_9_SUM_DEL,       0x07E8, "Current Tier 14 Block 9 Summation Delivered" ) \
4927
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_10_SUM_DEL,      0x07E9, "Current Tier 14 Block 10 Summation Delivered" ) \
4928
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_11_SUM_DEL,      0x07EA, "Current Tier 14 Block 11 Summation Delivered" ) \
4929
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_12_SUM_DEL,      0x07EB, "Current Tier 14 Block 12 Summation Delivered" ) \
4930
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_13_SUM_DEL,      0x07EC, "Current Tier 14 Block 13 Summation Delivered" ) \
4931
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_14_SUM_DEL,      0x07ED, "Current Tier 14 Block 14 Summation Delivered" ) \
4932
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_15_SUM_DEL,      0x07EE, "Current Tier 14 Block 15 Summation Delivered" ) \
4933
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_16_SUM_DEL,      0x07EF, "Current Tier 14 Block 16 Summation Delivered" ) \
4934
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_1_SUM_DEL,       0x07F0, "Current Tier 15 Block 1 Summation Delivered" ) \
4935
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_2_SUM_DEL,       0x07F1, "Current Tier 15 Block 2 Summation Delivered" ) \
4936
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_3_SUM_DEL,       0x07F2, "Current Tier 15 Block 3 Summation Delivered" ) \
4937
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_4_SUM_DEL,       0x07F3, "Current Tier 15 Block 4 Summation Delivered" ) \
4938
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_5_SUM_DEL,       0x07F4, "Current Tier 15 Block 5 Summation Delivered" ) \
4939
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_6_SUM_DEL,       0x07F5, "Current Tier 15 Block 6 Summation Delivered" ) \
4940
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_7_SUM_DEL,       0x07F6, "Current Tier 15 Block 7 Summation Delivered" ) \
4941
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_8_SUM_DEL,       0x07F7, "Current Tier 15 Block 8 Summation Delivered" ) \
4942
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_9_SUM_DEL,       0x07F8, "Current Tier 15 Block 9 Summation Delivered" ) \
4943
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_10_SUM_DEL,      0x07F9, "Current Tier 15 Block 10 Summation Delivered" ) \
4944
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_11_SUM_DEL,      0x07FA, "Current Tier 15 Block 11 Summation Delivered" ) \
4945
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_12_SUM_DEL,      0x07FB, "Current Tier 15 Block 12 Summation Delivered" ) \
4946
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_13_SUM_DEL,      0x07FC, "Current Tier 15 Block 13 Summation Delivered" ) \
4947
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_14_SUM_DEL,      0x07FD, "Current Tier 15 Block 14 Summation Delivered" ) \
4948
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_15_SUM_DEL,      0x07FE, "Current Tier 15 Block 15 Summation Delivered" ) \
4949
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_16_SUM_DEL,      0x07FF, "Current Tier 15 Block 16 Summation Delivered" ) \
4950
/* Alarms Set */ \
4951
    XXX(ZBEE_ZCL_ATTR_ID_MET_GENERIC_ALARM_MASK,                0x0800, "Generic Alarm Mask" ) \
4952
    XXX(ZBEE_ZCL_ATTR_ID_MET_ELECTRICITY_ALARM_MASK,            0x0801, "Electricity Alarm Mask" ) \
4953
    XXX(ZBEE_ZCL_ATTR_ID_MET_GENERIC_FLOW_PRESS_ALARM_MASK,     0x0802, "Generic Flow/Pressure Alarm Mask" ) \
4954
    XXX(ZBEE_ZCL_ATTR_ID_MET_WATER_SPECIFIC_ALARM_MASK,         0x0803, "Water Specific Alarm Mask" ) \
4955
    XXX(ZBEE_ZCL_ATTR_ID_MET_HEAT_COOLING_SPECIFIC_ALARM_MASK,  0x0804, "Heat and Cooling Specific Alarm Mask" ) \
4956
    XXX(ZBEE_ZCL_ATTR_ID_MET_GAS_SPECIFIC_ALARM_MASK,           0x0805, "Gas Specific Alarm Mask" ) \
4957
    XXX(ZBEE_ZCL_ATTR_ID_MET_EXTENDED_GENERIC_ALARM_MASK,       0x0806, "Extended Generic Alarm Mask" ) \
4958
    XXX(ZBEE_ZCL_ATTR_ID_MET_MANUFACTURER_ALARM_MASK,           0x0807, "Manufacturer Alarm Mask" ) \
4959
/* Block Information Attribute Set (Received) */ \
4960
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_1_SUM_RECV,      0x0900, "Current No Tier Block 1 Summation Received" ) \
4961
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_2_SUM_RECV,      0x0901, "Current No Tier Block 2 Summation Received" ) \
4962
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_3_SUM_RECV,      0x0902, "Current No Tier Block 3 Summation Received" ) \
4963
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_4_SUM_RECV,      0x0903, "Current No Tier Block 4 Summation Received" ) \
4964
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_5_SUM_RECV,      0x0904, "Current No Tier Block 5 Summation Received" ) \
4965
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_6_SUM_RECV,      0x0905, "Current No Tier Block 6 Summation Received" ) \
4966
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_7_SUM_RECV,      0x0906, "Current No Tier Block 7 Summation Received" ) \
4967
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_8_SUM_RECV,      0x0907, "Current No Tier Block 8 Summation Received" ) \
4968
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_9_SUM_RECV,      0x0908, "Current No Tier Block 9 Summation Received" ) \
4969
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_10_SUM_RECV,     0x0909, "Current No Tier Block 10 Summation Received" ) \
4970
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_11_SUM_RECV,     0x090A, "Current No Tier Block 11 Summation Received" ) \
4971
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_12_SUM_RECV,     0x090B, "Current No Tier Block 12 Summation Received" ) \
4972
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_13_SUM_RECV,     0x090C, "Current No Tier Block 13 Summation Received" ) \
4973
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_14_SUM_RECV,     0x090D, "Current No Tier Block 14 Summation Received" ) \
4974
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_15_SUM_RECV,     0x090E, "Current No Tier Block 15 Summation Received" ) \
4975
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_16_SUM_RECV,     0x090F, "Current No Tier Block 16 Summation Received" ) \
4976
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_1_SUM_RECV,       0x0910, "Current Tier 1 Block 1 Summation Received" ) \
4977
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_2_SUM_RECV,       0x0911, "Current Tier 1 Block 2 Summation Received" ) \
4978
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_3_SUM_RECV,       0x0912, "Current Tier 1 Block 3 Summation Received" ) \
4979
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_4_SUM_RECV,       0x0913, "Current Tier 1 Block 4 Summation Received" ) \
4980
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_5_SUM_RECV,       0x0914, "Current Tier 1 Block 5 Summation Received" ) \
4981
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_6_SUM_RECV,       0x0915, "Current Tier 1 Block 6 Summation Received" ) \
4982
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_7_SUM_RECV,       0x0916, "Current Tier 1 Block 7 Summation Received" ) \
4983
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_8_SUM_RECV,       0x0917, "Current Tier 1 Block 8 Summation Received" ) \
4984
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_9_SUM_RECV,       0x0918, "Current Tier 1 Block 9 Summation Received" ) \
4985
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_10_SUM_RECV,      0x0919, "Current Tier 1 Block 10 Summation Received" ) \
4986
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_11_SUM_RECV,      0x091A, "Current Tier 1 Block 11 Summation Received" ) \
4987
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_12_SUM_RECV,      0x091B, "Current Tier 1 Block 12 Summation Received" ) \
4988
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_13_SUM_RECV,      0x091C, "Current Tier 1 Block 13 Summation Received" ) \
4989
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_14_SUM_RECV,      0x091D, "Current Tier 1 Block 14 Summation Received" ) \
4990
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_15_SUM_RECV,      0x091E, "Current Tier 1 Block 15 Summation Received" ) \
4991
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_16_SUM_RECV,      0x091F, "Current Tier 1 Block 16 Summation Received" ) \
4992
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_1_SUM_RECV,       0x0920, "Current Tier 2 Block 1 Summation Received" ) \
4993
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_2_SUM_RECV,       0x0921, "Current Tier 2 Block 2 Summation Received" ) \
4994
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_3_SUM_RECV,       0x0922, "Current Tier 2 Block 3 Summation Received" ) \
4995
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_4_SUM_RECV,       0x0923, "Current Tier 2 Block 4 Summation Received" ) \
4996
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_5_SUM_RECV,       0x0924, "Current Tier 2 Block 5 Summation Received" ) \
4997
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_6_SUM_RECV,       0x0925, "Current Tier 2 Block 6 Summation Received" ) \
4998
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_7_SUM_RECV,       0x0926, "Current Tier 2 Block 7 Summation Received" ) \
4999
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_8_SUM_RECV,       0x0927, "Current Tier 2 Block 8 Summation Received" ) \
5000
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_9_SUM_RECV,       0x0928, "Current Tier 2 Block 9 Summation Received" ) \
5001
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_10_SUM_RECV,      0x0929, "Current Tier 2 Block 10 Summation Received" ) \
5002
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_11_SUM_RECV,      0x092A, "Current Tier 2 Block 11 Summation Received" ) \
5003
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_12_SUM_RECV,      0x092B, "Current Tier 2 Block 12 Summation Received" ) \
5004
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_13_SUM_RECV,      0x092C, "Current Tier 2 Block 13 Summation Received" ) \
5005
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_14_SUM_RECV,      0x092D, "Current Tier 2 Block 14 Summation Received" ) \
5006
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_15_SUM_RECV,      0x092E, "Current Tier 2 Block 15 Summation Received" ) \
5007
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_16_SUM_RECV,      0x092F, "Current Tier 2 Block 16 Summation Received" ) \
5008
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_1_SUM_RECV,       0x0930, "Current Tier 3 Block 1 Summation Received" ) \
5009
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_2_SUM_RECV,       0x0931, "Current Tier 3 Block 2 Summation Received" ) \
5010
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_3_SUM_RECV,       0x0932, "Current Tier 3 Block 3 Summation Received" ) \
5011
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_4_SUM_RECV,       0x0933, "Current Tier 3 Block 4 Summation Received" ) \
5012
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_5_SUM_RECV,       0x0934, "Current Tier 3 Block 5 Summation Received" ) \
5013
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_6_SUM_RECV,       0x0935, "Current Tier 3 Block 6 Summation Received" ) \
5014
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_7_SUM_RECV,       0x0936, "Current Tier 3 Block 7 Summation Received" ) \
5015
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_8_SUM_RECV,       0x0937, "Current Tier 3 Block 8 Summation Received" ) \
5016
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_9_SUM_RECV,       0x0938, "Current Tier 3 Block 9 Summation Received" ) \
5017
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_10_SUM_RECV,      0x0939, "Current Tier 3 Block 10 Summation Received" ) \
5018
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_11_SUM_RECV,      0x093A, "Current Tier 3 Block 11 Summation Received" ) \
5019
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_12_SUM_RECV,      0x093B, "Current Tier 3 Block 12 Summation Received" ) \
5020
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_13_SUM_RECV,      0x093C, "Current Tier 3 Block 13 Summation Received" ) \
5021
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_14_SUM_RECV,      0x093D, "Current Tier 3 Block 14 Summation Received" ) \
5022
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_15_SUM_RECV,      0x093E, "Current Tier 3 Block 15 Summation Received" ) \
5023
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_16_SUM_RECV,      0x093F, "Current Tier 3 Block 16 Summation Received" ) \
5024
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_1_SUM_RECV,       0x0940, "Current Tier 4 Block 1 Summation Received" ) \
5025
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_2_SUM_RECV,       0x0941, "Current Tier 4 Block 2 Summation Received" ) \
5026
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_3_SUM_RECV,       0x0942, "Current Tier 4 Block 3 Summation Received" ) \
5027
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_4_SUM_RECV,       0x0943, "Current Tier 4 Block 4 Summation Received" ) \
5028
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_5_SUM_RECV,       0x0944, "Current Tier 4 Block 5 Summation Received" ) \
5029
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_6_SUM_RECV,       0x0945, "Current Tier 4 Block 6 Summation Received" ) \
5030
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_7_SUM_RECV,       0x0946, "Current Tier 4 Block 7 Summation Received" ) \
5031
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_8_SUM_RECV,       0x0947, "Current Tier 4 Block 8 Summation Received" ) \
5032
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_9_SUM_RECV,       0x0948, "Current Tier 4 Block 9 Summation Received" ) \
5033
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_10_SUM_RECV,      0x0949, "Current Tier 4 Block 10 Summation Received" ) \
5034
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_11_SUM_RECV,      0x094A, "Current Tier 4 Block 11 Summation Received" ) \
5035
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_12_SUM_RECV,      0x094B, "Current Tier 4 Block 12 Summation Received" ) \
5036
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_13_SUM_RECV,      0x094C, "Current Tier 4 Block 13 Summation Received" ) \
5037
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_14_SUM_RECV,      0x094D, "Current Tier 4 Block 14 Summation Received" ) \
5038
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_15_SUM_RECV,      0x094E, "Current Tier 4 Block 15 Summation Received" ) \
5039
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_16_SUM_RECV,      0x094F, "Current Tier 4 Block 16 Summation Received" ) \
5040
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_1_SUM_RECV,       0x0950, "Current Tier 5 Block 1 Summation Received" ) \
5041
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_2_SUM_RECV,       0x0951, "Current Tier 5 Block 2 Summation Received" ) \
5042
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_3_SUM_RECV,       0x0952, "Current Tier 5 Block 3 Summation Received" ) \
5043
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_4_SUM_RECV,       0x0953, "Current Tier 5 Block 4 Summation Received" ) \
5044
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_5_SUM_RECV,       0x0954, "Current Tier 5 Block 5 Summation Received" ) \
5045
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_6_SUM_RECV,       0x0955, "Current Tier 5 Block 6 Summation Received" ) \
5046
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_7_SUM_RECV,       0x0956, "Current Tier 5 Block 7 Summation Received" ) \
5047
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_8_SUM_RECV,       0x0957, "Current Tier 5 Block 8 Summation Received" ) \
5048
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_9_SUM_RECV,       0x0958, "Current Tier 5 Block 9 Summation Received" ) \
5049
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_10_SUM_RECV,      0x0959, "Current Tier 5 Block 10 Summation Received" ) \
5050
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_11_SUM_RECV,      0x095A, "Current Tier 5 Block 11 Summation Received" ) \
5051
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_12_SUM_RECV,      0x095B, "Current Tier 5 Block 12 Summation Received" ) \
5052
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_13_SUM_RECV,      0x095C, "Current Tier 5 Block 13 Summation Received" ) \
5053
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_14_SUM_RECV,      0x095D, "Current Tier 5 Block 14 Summation Received" ) \
5054
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_15_SUM_RECV,      0x095E, "Current Tier 5 Block 15 Summation Received" ) \
5055
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_16_SUM_RECV,      0x095F, "Current Tier 5 Block 16 Summation Received" ) \
5056
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_1_SUM_RECV,       0x0960, "Current Tier 6 Block 1 Summation Received" ) \
5057
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_2_SUM_RECV,       0x0961, "Current Tier 6 Block 2 Summation Received" ) \
5058
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_3_SUM_RECV,       0x0962, "Current Tier 6 Block 3 Summation Received" ) \
5059
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_4_SUM_RECV,       0x0963, "Current Tier 6 Block 4 Summation Received" ) \
5060
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_5_SUM_RECV,       0x0964, "Current Tier 6 Block 5 Summation Received" ) \
5061
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_6_SUM_RECV,       0x0965, "Current Tier 6 Block 6 Summation Received" ) \
5062
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_7_SUM_RECV,       0x0966, "Current Tier 6 Block 7 Summation Received" ) \
5063
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_8_SUM_RECV,       0x0967, "Current Tier 6 Block 8 Summation Received" ) \
5064
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_9_SUM_RECV,       0x0968, "Current Tier 6 Block 9 Summation Received" ) \
5065
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_10_SUM_RECV,      0x0969, "Current Tier 6 Block 10 Summation Received" ) \
5066
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_11_SUM_RECV,      0x096A, "Current Tier 6 Block 11 Summation Received" ) \
5067
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_12_SUM_RECV,      0x096B, "Current Tier 6 Block 12 Summation Received" ) \
5068
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_13_SUM_RECV,      0x096C, "Current Tier 6 Block 13 Summation Received" ) \
5069
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_14_SUM_RECV,      0x096D, "Current Tier 6 Block 14 Summation Received" ) \
5070
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_15_SUM_RECV,      0x096E, "Current Tier 6 Block 15 Summation Received" ) \
5071
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_16_SUM_RECV,      0x096F, "Current Tier 6 Block 16 Summation Received" ) \
5072
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_1_SUM_RECV,       0x0970, "Current Tier 7 Block 1 Summation Received" ) \
5073
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_2_SUM_RECV,       0x0971, "Current Tier 7 Block 2 Summation Received" ) \
5074
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_3_SUM_RECV,       0x0972, "Current Tier 7 Block 3 Summation Received" ) \
5075
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_4_SUM_RECV,       0x0973, "Current Tier 7 Block 4 Summation Received" ) \
5076
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_5_SUM_RECV,       0x0974, "Current Tier 7 Block 5 Summation Received" ) \
5077
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_6_SUM_RECV,       0x0975, "Current Tier 7 Block 6 Summation Received" ) \
5078
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_7_SUM_RECV,       0x0976, "Current Tier 7 Block 7 Summation Received" ) \
5079
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_8_SUM_RECV,       0x0977, "Current Tier 7 Block 8 Summation Received" ) \
5080
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_9_SUM_RECV,       0x0978, "Current Tier 7 Block 9 Summation Received" ) \
5081
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_10_SUM_RECV,      0x0979, "Current Tier 7 Block 10 Summation Received" ) \
5082
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_11_SUM_RECV,      0x097A, "Current Tier 7 Block 11 Summation Received" ) \
5083
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_12_SUM_RECV,      0x097B, "Current Tier 7 Block 12 Summation Received" ) \
5084
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_13_SUM_RECV,      0x097C, "Current Tier 7 Block 13 Summation Received" ) \
5085
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_14_SUM_RECV,      0x097D, "Current Tier 7 Block 14 Summation Received" ) \
5086
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_15_SUM_RECV,      0x097E, "Current Tier 7 Block 15 Summation Received" ) \
5087
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_16_SUM_RECV,      0x097F, "Current Tier 7 Block 16 Summation Received" ) \
5088
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_1_SUM_RECV,       0x0980, "Current Tier 8 Block 1 Summation Received" ) \
5089
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_2_SUM_RECV,       0x0981, "Current Tier 8 Block 2 Summation Received" ) \
5090
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_3_SUM_RECV,       0x0982, "Current Tier 8 Block 3 Summation Received" ) \
5091
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_4_SUM_RECV,       0x0983, "Current Tier 8 Block 4 Summation Received" ) \
5092
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_5_SUM_RECV,       0x0984, "Current Tier 8 Block 5 Summation Received" ) \
5093
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_6_SUM_RECV,       0x0985, "Current Tier 8 Block 6 Summation Received" ) \
5094
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_7_SUM_RECV,       0x0986, "Current Tier 8 Block 7 Summation Received" ) \
5095
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_8_SUM_RECV,       0x0987, "Current Tier 8 Block 8 Summation Received" ) \
5096
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_9_SUM_RECV,       0x0988, "Current Tier 8 Block 9 Summation Received" ) \
5097
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_10_SUM_RECV,      0x0989, "Current Tier 8 Block 10 Summation Received" ) \
5098
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_11_SUM_RECV,      0x098A, "Current Tier 8 Block 11 Summation Received" ) \
5099
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_12_SUM_RECV,      0x098B, "Current Tier 8 Block 12 Summation Received" ) \
5100
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_13_SUM_RECV,      0x098C, "Current Tier 8 Block 13 Summation Received" ) \
5101
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_14_SUM_RECV,      0x098D, "Current Tier 8 Block 14 Summation Received" ) \
5102
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_15_SUM_RECV,      0x098E, "Current Tier 8 Block 15 Summation Received" ) \
5103
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_16_SUM_RECV,      0x098F, "Current Tier 8 Block 16 Summation Received" ) \
5104
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_1_SUM_RECV,       0x0990, "Current Tier 9 Block 1 Summation Received" ) \
5105
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_2_SUM_RECV,       0x0991, "Current Tier 9 Block 2 Summation Received" ) \
5106
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_3_SUM_RECV,       0x0992, "Current Tier 9 Block 3 Summation Received" ) \
5107
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_4_SUM_RECV,       0x0993, "Current Tier 9 Block 4 Summation Received" ) \
5108
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_5_SUM_RECV,       0x0994, "Current Tier 9 Block 5 Summation Received" ) \
5109
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_6_SUM_RECV,       0x0995, "Current Tier 9 Block 6 Summation Received" ) \
5110
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_7_SUM_RECV,       0x0996, "Current Tier 9 Block 7 Summation Received" ) \
5111
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_8_SUM_RECV,       0x0997, "Current Tier 9 Block 8 Summation Received" ) \
5112
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_9_SUM_RECV,       0x0998, "Current Tier 9 Block 9 Summation Received" ) \
5113
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_10_SUM_RECV,      0x0999, "Current Tier 9 Block 10 Summation Received" ) \
5114
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_11_SUM_RECV,      0x099A, "Current Tier 9 Block 11 Summation Received" ) \
5115
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_12_SUM_RECV,      0x099B, "Current Tier 9 Block 12 Summation Received" ) \
5116
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_13_SUM_RECV,      0x099C, "Current Tier 9 Block 13 Summation Received" ) \
5117
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_14_SUM_RECV,      0x099D, "Current Tier 9 Block 14 Summation Received" ) \
5118
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_15_SUM_RECV,      0x099E, "Current Tier 9 Block 15 Summation Received" ) \
5119
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_16_SUM_RECV,      0x099F, "Current Tier 9 Block 16 Summation Received" ) \
5120
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_1_SUM_RECV,      0x09A0, "Current Tier 10 Block 1 Summation Received" ) \
5121
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_2_SUM_RECV,      0x09A1, "Current Tier 10 Block 2 Summation Received" ) \
5122
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_3_SUM_RECV,      0x09A2, "Current Tier 10 Block 3 Summation Received" ) \
5123
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_4_SUM_RECV,      0x09A3, "Current Tier 10 Block 4 Summation Received" ) \
5124
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_5_SUM_RECV,      0x09A4, "Current Tier 10 Block 5 Summation Received" ) \
5125
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_6_SUM_RECV,      0x09A5, "Current Tier 10 Block 6 Summation Received" ) \
5126
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_7_SUM_RECV,      0x09A6, "Current Tier 10 Block 7 Summation Received" ) \
5127
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_8_SUM_RECV,      0x09A7, "Current Tier 10 Block 8 Summation Received" ) \
5128
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_9_SUM_RECV,      0x09A8, "Current Tier 10 Block 9 Summation Received" ) \
5129
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_10_SUM_RECV,     0x09A9, "Current Tier 10 Block 10 Summation Received" ) \
5130
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_11_SUM_RECV,     0x09AA, "Current Tier 10 Block 11 Summation Received" ) \
5131
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_12_SUM_RECV,     0x09AB, "Current Tier 10 Block 12 Summation Received" ) \
5132
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_13_SUM_RECV,     0x09AC, "Current Tier 10 Block 13 Summation Received" ) \
5133
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_14_SUM_RECV,     0x09AD, "Current Tier 10 Block 14 Summation Received" ) \
5134
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_15_SUM_RECV,     0x09AE, "Current Tier 10 Block 15 Summation Received" ) \
5135
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_16_SUM_RECV,     0x09AF, "Current Tier 10 Block 16 Summation Received" ) \
5136
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_1_SUM_RECV,      0x09B0, "Current Tier 11 Block 1 Summation Received" ) \
5137
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_2_SUM_RECV,      0x09B1, "Current Tier 11 Block 2 Summation Received" ) \
5138
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_3_SUM_RECV,      0x09B2, "Current Tier 11 Block 3 Summation Received" ) \
5139
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_4_SUM_RECV,      0x09B3, "Current Tier 11 Block 4 Summation Received" ) \
5140
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_5_SUM_RECV,      0x09B4, "Current Tier 11 Block 5 Summation Received" ) \
5141
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_6_SUM_RECV,      0x09B5, "Current Tier 11 Block 6 Summation Received" ) \
5142
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_7_SUM_RECV,      0x09B6, "Current Tier 11 Block 7 Summation Received" ) \
5143
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_8_SUM_RECV,      0x09B7, "Current Tier 11 Block 8 Summation Received" ) \
5144
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_9_SUM_RECV,      0x09B8, "Current Tier 11 Block 9 Summation Received" ) \
5145
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_10_SUM_RECV,     0x09B9, "Current Tier 11 Block 10 Summation Received" ) \
5146
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_11_SUM_RECV,     0x09BA, "Current Tier 11 Block 11 Summation Received" ) \
5147
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_12_SUM_RECV,     0x09BB, "Current Tier 11 Block 12 Summation Received" ) \
5148
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_13_SUM_RECV,     0x09BC, "Current Tier 11 Block 13 Summation Received" ) \
5149
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_14_SUM_RECV,     0x09BD, "Current Tier 11 Block 14 Summation Received" ) \
5150
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_15_SUM_RECV,     0x09BE, "Current Tier 11 Block 15 Summation Received" ) \
5151
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_16_SUM_RECV,     0x09BF, "Current Tier 11 Block 16 Summation Received" ) \
5152
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_1_SUM_RECV,      0x09C0, "Current Tier 12 Block 1 Summation Received" ) \
5153
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_2_SUM_RECV,      0x09C1, "Current Tier 12 Block 2 Summation Received" ) \
5154
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_3_SUM_RECV,      0x09C2, "Current Tier 12 Block 3 Summation Received" ) \
5155
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_4_SUM_RECV,      0x09C3, "Current Tier 12 Block 4 Summation Received" ) \
5156
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_5_SUM_RECV,      0x09C4, "Current Tier 12 Block 5 Summation Received" ) \
5157
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_6_SUM_RECV,      0x09C5, "Current Tier 12 Block 6 Summation Received" ) \
5158
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_7_SUM_RECV,      0x09C6, "Current Tier 12 Block 7 Summation Received" ) \
5159
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_8_SUM_RECV,      0x09C7, "Current Tier 12 Block 8 Summation Received" ) \
5160
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_9_SUM_RECV,      0x09C8, "Current Tier 12 Block 9 Summation Received" ) \
5161
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_10_SUM_RECV,     0x09C9, "Current Tier 12 Block 10 Summation Received" ) \
5162
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_11_SUM_RECV,     0x09CA, "Current Tier 12 Block 11 Summation Received" ) \
5163
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_12_SUM_RECV,     0x09CB, "Current Tier 12 Block 12 Summation Received" ) \
5164
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_13_SUM_RECV,     0x09CC, "Current Tier 12 Block 13 Summation Received" ) \
5165
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_14_SUM_RECV,     0x09CD, "Current Tier 12 Block 14 Summation Received" ) \
5166
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_15_SUM_RECV,     0x09CE, "Current Tier 12 Block 15 Summation Received" ) \
5167
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_16_SUM_RECV,     0x09CF, "Current Tier 12 Block 16 Summation Received" ) \
5168
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_1_SUM_RECV,      0x09D0, "Current Tier 13 Block 1 Summation Received" ) \
5169
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_2_SUM_RECV,      0x09D1, "Current Tier 13 Block 2 Summation Received" ) \
5170
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_3_SUM_RECV,      0x09D2, "Current Tier 13 Block 3 Summation Received" ) \
5171
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_4_SUM_RECV,      0x09D3, "Current Tier 13 Block 4 Summation Received" ) \
5172
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_5_SUM_RECV,      0x09D4, "Current Tier 13 Block 5 Summation Received" ) \
5173
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_6_SUM_RECV,      0x09D5, "Current Tier 13 Block 6 Summation Received" ) \
5174
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_7_SUM_RECV,      0x09D6, "Current Tier 13 Block 7 Summation Received" ) \
5175
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_8_SUM_RECV,      0x09D7, "Current Tier 13 Block 8 Summation Received" ) \
5176
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_9_SUM_RECV,      0x09D8, "Current Tier 13 Block 9 Summation Received" ) \
5177
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_10_SUM_RECV,     0x09D9, "Current Tier 13 Block 10 Summation Received" ) \
5178
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_11_SUM_RECV,     0x09DA, "Current Tier 13 Block 11 Summation Received" ) \
5179
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_12_SUM_RECV,     0x09DB, "Current Tier 13 Block 12 Summation Received" ) \
5180
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_13_SUM_RECV,     0x09DC, "Current Tier 13 Block 13 Summation Received" ) \
5181
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_14_SUM_RECV,     0x09DD, "Current Tier 13 Block 14 Summation Received" ) \
5182
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_15_SUM_RECV,     0x09DE, "Current Tier 13 Block 15 Summation Received" ) \
5183
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_16_SUM_RECV,     0x09DF, "Current Tier 13 Block 16 Summation Received" ) \
5184
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_1_SUM_RECV,      0x09E0, "Current Tier 14 Block 1 Summation Received" ) \
5185
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_2_SUM_RECV,      0x09E1, "Current Tier 14 Block 2 Summation Received" ) \
5186
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_3_SUM_RECV,      0x09E2, "Current Tier 14 Block 3 Summation Received" ) \
5187
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_4_SUM_RECV,      0x09E3, "Current Tier 14 Block 4 Summation Received" ) \
5188
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_5_SUM_RECV,      0x09E4, "Current Tier 14 Block 5 Summation Received" ) \
5189
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_6_SUM_RECV,      0x09E5, "Current Tier 14 Block 6 Summation Received" ) \
5190
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_7_SUM_RECV,      0x09E6, "Current Tier 14 Block 7 Summation Received" ) \
5191
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_8_SUM_RECV,      0x09E7, "Current Tier 14 Block 8 Summation Received" ) \
5192
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_9_SUM_RECV,      0x09E8, "Current Tier 14 Block 9 Summation Received" ) \
5193
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_10_SUM_RECV,     0x09E9, "Current Tier 14 Block 10 Summation Received" ) \
5194
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_11_SUM_RECV,     0x09EA, "Current Tier 14 Block 11 Summation Received" ) \
5195
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_12_SUM_RECV,     0x09EB, "Current Tier 14 Block 12 Summation Received" ) \
5196
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_13_SUM_RECV,     0x09EC, "Current Tier 14 Block 13 Summation Received" ) \
5197
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_14_SUM_RECV,     0x09ED, "Current Tier 14 Block 14 Summation Received" ) \
5198
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_15_SUM_RECV,     0x09EE, "Current Tier 14 Block 15 Summation Received" ) \
5199
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_16_SUM_RECV,     0x09EF, "Current Tier 14 Block 16 Summation Received" ) \
5200
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_1_SUM_RECV,      0x09F0, "Current Tier 15 Block 1 Summation Received" ) \
5201
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_2_SUM_RECV,      0x09F1, "Current Tier 15 Block 2 Summation Received" ) \
5202
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_3_SUM_RECV,      0x09F2, "Current Tier 15 Block 3 Summation Received" ) \
5203
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_4_SUM_RECV,      0x09F3, "Current Tier 15 Block 4 Summation Received" ) \
5204
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_5_SUM_RECV,      0x09F4, "Current Tier 15 Block 5 Summation Received" ) \
5205
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_6_SUM_RECV,      0x09F5, "Current Tier 15 Block 6 Summation Received" ) \
5206
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_7_SUM_RECV,      0x09F6, "Current Tier 15 Block 7 Summation Received" ) \
5207
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_8_SUM_RECV,      0x09F7, "Current Tier 15 Block 8 Summation Received" ) \
5208
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_9_SUM_RECV,      0x09F8, "Current Tier 15 Block 9 Summation Received" ) \
5209
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_10_SUM_RECV,     0x09F9, "Current Tier 15 Block 10 Summation Received" ) \
5210
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_11_SUM_RECV,     0x09FA, "Current Tier 15 Block 11 Summation Received" ) \
5211
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_12_SUM_RECV,     0x09FB, "Current Tier 15 Block 12 Summation Received" ) \
5212
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_13_SUM_RECV,     0x09FC, "Current Tier 15 Block 13 Summation Received" ) \
5213
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_14_SUM_RECV,     0x09FD, "Current Tier 15 Block 14 Summation Received" ) \
5214
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_15_SUM_RECV,     0x09FE, "Current Tier 15 Block 15 Summation Received" ) \
5215
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_16_SUM_RECV,     0x09FF, "Current Tier 15 Block 16 Summation Received" ) \
5216
/* Meter Billing Attribute Set */ \
5217
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_DELIVERED,            0x0A00, "Bill to Date Delivered" ) \
5218
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_TIMESTAMP_DEL,        0x0A01, "Bill to Date Time Stamp Delivered" ) \
5219
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_DELIVERED,          0x0A02, "Projected Bill Delivered" ) \
5220
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_TIME_STAMP_DEL,     0x0A03, "Projected Bill Time Stamp Delivered" ) \
5221
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_DELIVERED_TRAILING_DIGIT,     0x0A04, "Bill Delivered Trailing Digit" ) \
5222
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_RECEIVED,             0x0A10, "Bill to Date Received" ) \
5223
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_TIMESTAMP_RECEIVED,   0x0A11, "Bill to Date Time Stamp Received" ) \
5224
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_RECEIVED,           0x0A12, "Projected Bill Received" ) \
5225
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_TIME_STAMP_RECV,    0x0A13, "Projected Bill Time Stamp Received" ) \
5226
    XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_RECEIVED_TRAILING_DIGIT,      0x0A14, "Bill Received Trailing Digit" ) \
5227
/* Supply Control Attribute Set */ \
5228
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROPOSED_CHANGE_SUPPLY_IMP_TIME,   0x0B00, "Proposed Change Supply Implementation Time" ) \
5229
    XXX(ZBEE_ZCL_ATTR_ID_MET_PROPOSED_CHANGE_SUPPLY_STATUS,     0x0B01, "Proposed Change Supply Status" ) \
5230
    XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_THRESHOLD,       0x0B10, "Uncontrolled Flow Threshold" ) \
5231
    XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_UNIT_OF_MEAS,    0x0B11, "Uncontrolled Flow Unit of Measure" ) \
5232
    XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_MULTIPLIER,      0x0B12, "Uncontrolled Flow Multiplier" ) \
5233
    XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_DIVISOR,         0x0B13, "Uncontrolled Flow Divisor" ) \
5234
    XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_STABILISATION_PERIOD,         0x0B14, "Flow Stabilisation Period" ) \
5235
    XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_MEASUREMENT_PERIOD,           0x0B15, "Flow Measurement Period" ) \
5236
/* Alternative Historical Consumption Attribute Set */ \
5237
    XXX(ZBEE_ZCL_ATTR_ID_MET_ALTERNATIVE_INSTANT_DEMAND,        0x0C00, "Alternative Instantaneous Demand" ) \
5238
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_ALT_CON_DEL,               0x0C01, "Current Day Alternative Consumption Delivered" ) \
5239
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_ALT_CON_RECV,              0x0C02, "Current Day Alternative Consumption Received" ) \
5240
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_ALT_CON_DEL,              0x0C03, "Previous Day Alternative Consumption Delivered" ) \
5241
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_ALT_CON_RECV,             0x0C04, "Previous Day Alternative Consumption Received" ) \
5242
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_DEL,      0x0C05, "Current Alternative Partial Profile Interval Start Time Delivered" ) \
5243
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_RECV,     0x0C06, "Current Alternative Partial Profile Interval Start Time Received" ) \
5244
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_VAL_DEL,  0x0C07, "Current Alternative Partial Profile Interval Value Delivered" ) \
5245
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_VAL_RECV, 0x0C08, "Current Alternative Partial Profile Interval Value Received" ) \
5246
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MAX_PRESS,         0x0C09, "Current Day Alternative Max Pressure" ) \
5247
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MIN_PRESS,         0x0C0A, "Current Day Alternative Min Pressure" ) \
5248
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MAX_PRESS,        0x0C0B, "Previous Day Alternative Max Pressure" ) \
5249
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MIN_PRESS,        0x0C0C, "Previous Day Alternative Min Pressure" ) \
5250
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MAX_DEMAND,        0x0C0D, "Current Day Alternative Max Demand" ) \
5251
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MAX_DEMAND,       0x0C0E, "Previous Day Alternative Max Demand" ) \
5252
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_ALT_MAX_DEMAND,      0x0C0F, "Current Month Alternative Max Demand" ) \
5253
    XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_ALT_MAX_DEMAND,       0x0C10, "Current Year Alternative Max Demand" ) \
5254
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_2_ALT_CON_DEL,            0x0C20, "Previous Day 2 Alternative Consumption Delivered" ) \
5255
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_2_ALT_CON_RECV,           0x0C21, "Previous Day 2 Alternative Consumption Received" ) \
5256
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_3_ALT_CON_DEL,            0x0C22, "Previous Day 3 Alternative Consumption Delivered" ) \
5257
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_3_ALT_CON_RECV,           0x0C23, "Previous Day 3 Alternative Consumption Received" ) \
5258
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_4_ALT_CON_DEL,            0x0C24, "Previous Day 4 Alternative Consumption Delivered" ) \
5259
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_4_ALT_CON_RECV,           0x0C25, "Previous Day 4 Alternative Consumption Received" ) \
5260
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_5_ALT_CON_DEL,            0x0C26, "Previous Day 5 Alternative Consumption Delivered" ) \
5261
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_5_ALT_CON_RECV,           0x0C27, "Previous Day 5 Alternative Consumption Received" ) \
5262
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_6_ALT_CON_DEL,            0x0C28, "Previous Day 6 Alternative Consumption Delivered" ) \
5263
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_6_ALT_CON_RECV,           0x0C29, "Previous Day 6 Alternative Consumption Received" ) \
5264
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_7_ALT_CON_DEL,            0x0C2A, "Previous Day 7 Alternative Consumption Delivered" ) \
5265
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_7_ALT_CON_RECV,           0x0C2B, "Previous Day 7 Alternative Consumption Received" ) \
5266
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_8_ALT_CON_DEL,            0x0C2C, "Previous Day 8 Alternative Consumption Delivered" ) \
5267
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_8_ALT_CON_RECV,           0x0C2D, "Previous Day 8 Alternative Consumption Received" ) \
5268
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_ALT_CON_DEL,              0x0C30, "Current Week Alternative Consumption Delivered" ) \
5269
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_ALT_CON_RECV,             0x0C31, "Current Week Alternative Consumption Received" ) \
5270
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_ALT_CON_DEL,             0x0C32, "Previous Week Alternative Consumption Delivered" ) \
5271
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_ALT_CON_RECV,            0x0C33, "Previous Week Alternative Consumption Received" ) \
5272
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_ALT_CON_DEL,           0x0C34, "Previous Week 2 Alternative Consumption Delivered" ) \
5273
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_ALT_CON_RECV,          0x0C35, "Previous Week 2 Alternative Consumption Received" ) \
5274
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_ALT_CON_DEL,           0x0C36, "Previous Week 3 Alternative Consumption Delivered" ) \
5275
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_ALT_CON_RECV,          0x0C37, "Previous Week 3 Alternative Consumption Received" ) \
5276
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_ALT_CON_DEL,           0x0C38, "Previous Week 4 Alternative Consumption Delivered" ) \
5277
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_ALT_CON_RECV,          0x0C39, "Previous Week 4 Alternative Consumption Received" ) \
5278
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_ALT_CON_DEL,           0x0C3A, "Previous Week 5 Alternative Consumption Delivered" ) \
5279
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_ALT_CON_RECV,          0x0C3B, "Previous Week 5 Alternative Consumption Received" ) \
5280
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_ALT_CON_DEL,             0x0C40, "Current Month Alternative Consumption Delivered" ) \
5281
    XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_ALT_CON_RECV,            0x0C41, "Current Month Alternative Consumption Received" ) \
5282
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_ALT_CON_DEL,            0x0C42, "Previous Month Alternative Consumption Delivered" ) \
5283
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_ALT_CON_RECV,           0x0C43, "Previous Month Alternative Consumption Received" ) \
5284
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_ALT_CON_DEL,          0x0C44, "Previous Month 2 Alternative Consumption Delivered" ) \
5285
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_ALT_CON_RECV,         0x0C45, "Previous Month 2 Alternative Consumption Received" ) \
5286
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_ALT_CON_DEL,          0x0C46, "Previous Month 3 Alternative Consumption Delivered" ) \
5287
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_ALT_CON_RECV,         0x0C47, "Previous Month 3 Alternative Consumption Received" ) \
5288
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_ALT_CON_DEL,          0x0C48, "Previous Month 4 Alternative Consumption Delivered" ) \
5289
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_ALT_CON_RECV,         0x0C49, "Previous Month 4 Alternative Consumption Received" ) \
5290
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_ALT_CON_DEL,          0x0C4A, "Previous Month 5 Alternative Consumption Delivered" ) \
5291
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_ALT_CON_RECV,         0x0C4B, "Previous Month 5 Alternative Consumption Received" ) \
5292
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_ALT_CON_DEL,          0x0C4C, "Previous Month 6 Alternative Consumption Delivered" ) \
5293
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_ALT_CON_RECV,         0x0C4D, "Previous Month 6 Alternative Consumption Received" ) \
5294
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_ALT_CON_DEL,          0x0C4E, "Previous Month 7 Alternative Consumption Delivered" ) \
5295
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_ALT_CON_RECV,         0x0C4F, "Previous Month 7 Alternative Consumption Received" ) \
5296
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_ALT_CON_DEL,          0x0C50, "Previous Month 8 Alternative Consumption Delivered" ) \
5297
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_ALT_CON_RECV,         0x0C51, "Previous Month 8 Alternative Consumption Received" ) \
5298
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_ALT_CON_DEL,          0x0C52, "Previous Month 9 Alternative Consumption Delivered" ) \
5299
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_ALT_CON_RECV,         0x0C53, "Previous Month 9 Alternative Consumption Received" ) \
5300
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_ALT_CON_DEL,         0x0C54, "Previous Month 10 Alternative Consumption Delivered" ) \
5301
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_ALT_CON_RECV,        0x0C55, "Previous Month 10 Alternative Consumption Received" ) \
5302
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_ALT_CON_DEL,         0x0C56, "Previous Month 11 Alternative Consumption Delivered" ) \
5303
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_ALT_CON_RECV,        0x0C57, "Previous Month 11 Alternative Consumption Received" ) \
5304
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_ALT_CON_DEL,         0x0C58, "Previous Month 12 Alternative Consumption Delivered" ) \
5305
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_ALT_CON_RECV,        0x0C59, "Previous Month 12 Alternative Consumption Received" ) \
5306
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_ALT_CON_DEL,         0x0C5A, "Previous Month 13 Alternative Consumption Delivered" ) \
5307
    XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_ALT_CON_RECV,        0x0C5B, "Previous Month 13 Alternative Consumption Received" ) \
5308
/* Smart Energy */ \
5309
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET,             0xFFFE, "Attribute Reporting Status" )
5310
5311
VALUE_STRING_ENUM(zbee_zcl_met_attr_server_names);
5312
VALUE_STRING_ARRAY(zbee_zcl_met_attr_server_names);
5313
static value_string_ext zbee_zcl_met_attr_server_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_met_attr_server_names);
5314
5315
#define zbee_zcl_met_attr_client_names_VALUE_STRING_LIST(XXX) \
5316
/* Notification AttributeSet*/ \
5317
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS,              0x0000, "Functional Notification Flags" ) \
5318
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2,                 0x0001, "Notification Flags 2" ) \
5319
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3,                 0x0002, "Notification Flags 3" ) \
5320
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4,                 0x0003, "Notification Flags 4" ) \
5321
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5,                 0x0004, "Notification Flags 5" ) \
5322
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_6,                 0x0005, "Notification Flags 6" ) \
5323
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_7,                 0x0006, "Notification Flags 7" ) \
5324
    XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_8,                 0x0007, "Notification Flags 8" ) \
5325
/* Smart Energy */ \
5326
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET_CLNT,        0xFFFE, "Attribute Reporting Status" )
5327
5328
VALUE_STRING_ENUM(zbee_zcl_met_attr_client_names);
5329
VALUE_STRING_ARRAY(zbee_zcl_met_attr_client_names);
5330
5331
/* Server Commands Received */
5332
#define zbee_zcl_met_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
5333
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_PROFILE,                        0x00, "Get Profile" ) \
5334
    XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR_RSP,                 0x01, "Request Mirror Response" ) \
5335
    XXX(ZBEE_ZCL_CMD_ID_MET_MIRROR_REMOVED,                     0x02, "Mirror Removed" ) \
5336
    XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE,             0x03, "Request Fast Poll Mode" ) \
5337
    XXX(ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT,                  0x04, "Schedule Snapshot" ) \
5338
    XXX(ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT,                      0x05, "Take Snapshot" ) \
5339
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_SNAPSHOT,                       0x06, "Get Snapshot" ) \
5340
    XXX(ZBEE_ZCL_CMD_ID_MET_START_SAMPLING,                     0x07, "Start Sampling" ) \
5341
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA,                   0x08, "Get Sampled Data" ) \
5342
    XXX(ZBEE_ZCL_CMD_ID_MET_MIRROR_REPORT_ATTRIBUTE_RESPONSE,   0x09, "Mirror Report Attribute Response" ) \
5343
    XXX(ZBEE_ZCL_CMD_ID_MET_RESET_LOAD_LIMIT_COUNTER,           0x0A, "Reset Load Limit Counter" ) \
5344
    XXX(ZBEE_ZCL_CMD_ID_MET_CHANGE_SUPPLY,                      0x0B, "Change Supply" ) \
5345
    XXX(ZBEE_ZCL_CMD_ID_MET_LOCAL_CHANGE_SUPPLY,                0x0C, "Local Change Supply" ) \
5346
    XXX(ZBEE_ZCL_CMD_ID_MET_SET_SUPPLY_STATUS,                  0x0D, "Set Supply Status" ) \
5347
    XXX(ZBEE_ZCL_CMD_ID_MET_SET_UNCONTROLLED_FLOW_THRESHOLD,    0x0E, "Set Uncontrolled Flow Threshold" )
5348
5349
VALUE_STRING_ENUM(zbee_zcl_met_srv_rx_cmd_names);
5350
VALUE_STRING_ARRAY(zbee_zcl_met_srv_rx_cmd_names);
5351
5352
/* Server Commands Generated */
5353
#define zbee_zcl_met_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
5354
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_PROFILE_RESPONSE,               0x00, "Get Profile Response" ) \
5355
    XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR,                     0x01, "Request Mirror" ) \
5356
    XXX(ZBEE_ZCL_CMD_ID_MET_REMOVE_MIRROR,                      0x02, "Remove Mirror" ) \
5357
    XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE_RESPONSE,    0x03, "Request Fast Poll Mode Response" ) \
5358
    XXX(ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT_RESPONSE,         0x04, "Schedule Snapshot Response" ) \
5359
    XXX(ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT_RESPONSE,             0x05, "Take Snapshot Response" ) \
5360
    XXX(ZBEE_ZCL_CMD_ID_MET_PUBLISH_SNAPSHOT,                   0x06, "Publish Snapshot" ) \
5361
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA_RSP,               0x07, "Get Sampled Data Response" ) \
5362
    XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_MIRROR,                   0x08, "Configure Mirror" ) \
5363
    XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_SCHEME,      0x09, "Configure Notification Scheme" ) \
5364
    XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_FLAGS,       0x0A, "Configure Notification Flags" ) \
5365
    XXX(ZBEE_ZCL_CMD_ID_MET_GET_NOTIFIED_MESSAGE,               0x0B, "Get Notified Message" ) \
5366
    XXX(ZBEE_ZCL_CMD_ID_MET_SUPPLY_STATUS_RESPONSE,             0x0C, "Supply Status Response" ) \
5367
    XXX(ZBEE_ZCL_CMD_ID_MET_START_SAMPLING_RESPONSE,            0x0D, "Start Sampling Response" )
5368
5369
VALUE_STRING_ENUM(zbee_zcl_met_srv_tx_cmd_names);
5370
VALUE_STRING_ARRAY(zbee_zcl_met_srv_tx_cmd_names);
5371
5372
0
#define ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A 0x1
5373
0
#define ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B 0x2
5374
5375
static const range_string zbee_zcl_met_notification_scheme[] = {
5376
    { 0x0, 0x0,   "No Notification Scheme Defined" },
5377
    { ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A, ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A,   "Predefined Notification Scheme A" },
5378
    { ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B, ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B,   "Predefined Notification Scheme B" },
5379
    { 0x3, 0x80,  "Reserved" },
5380
    { 0x81, 0xFE, "For MSP Requirements" },
5381
    { 0xFF, 0xFF, "Reserved" },
5382
    { 0, 0, NULL }
5383
};
5384
5385
/* Snapshot Schedule Confirmation */
5386
#define zbee_zcl_met_snapshot_schedule_confirmation_VALUE_STRING_LIST(XXX) \
5387
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_ACCEPTED, 0x00, "Accepted" )                                 \
5388
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_TYPE_NOT_SUPPORTED, 0x01, "Snapshot Type not supported")     \
5389
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_CAUSE_NOT_SUPPORTED, 0x02, "Snapshot Cause not supported")   \
5390
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_CURRENTLY_NOT_AVAILABLE, 0x03, "Snapshot Cause not supported")   \
5391
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_NOT_SUPPORTED_BY_DEVICE, 0x04, "Snapshot Schedules not supported by device")   \
5392
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_INSUFFICIENT_SPACE, 0x05, "Insufficient space for snapshot schedule")
5393
5394
VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_confirmation);
5395
VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_confirmation);
5396
5397
/* Snapshot Schedule Frequency Type*/
5398
#define zbee_zcl_met_snapshot_schedule_frequency_type_VALUE_STRING_LIST(XXX)  \
5399
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_DAY, 0x0, "Day" )           \
5400
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_WEEK, 0x1, "Week" )         \
5401
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_MONTH, 0x2, "Month" )       \
5402
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_RESERVED, 0x3, "Reserved" )
5403
5404
VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_frequency_type);
5405
VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_frequency_type);
5406
5407
/* Snapshot Schedule Wild-Card Frequency*/
5408
#define zbee_zcl_met_snapshot_schedule_frequency_wild_card_VALUE_STRING_LIST(XXX)   \
5409
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_START_OF, 0x0, "Start of" )              \
5410
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_END_OF,   0x1, "End of" )                \
5411
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_NOT_USED, 0x2, "Wild-card not used" )    \
5412
    XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_RESERVED, 0x3, "Reserved" )
5413
5414
VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_frequency_wild_card);
5415
VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_frequency_wild_card);
5416
5417
/* Snapshot Payload Type */
5418
#define zbee_zcl_met_snapshot_payload_type_VALUE_STRING_LIST(XXX) \
5419
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_DELIVERED_REGISTERS, 0, "TOU Information Set Delivered Registers" )                                 \
5420
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_RECEIVED_REGISTERS, 1, "TOU Information Set Received Registers")     \
5421
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_DELIVERED, 2, "Block Tier Information Set Delivered")   \
5422
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_RECEIVED, 3, "Block Tier Information Set Received")   \
5423
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_DELIVERED_NO_BILLING, 4, "TOU Information Set Delivered (No Billing)")   \
5424
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_RECEIVED_NO_BILLING, 5, "TOU Information Set Received (No Billing)")     \
5425
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_DELIVERED_NO_BILLING, 6, "Block Tier Information Set Delivered (No Billing)")     \
5426
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_RECEIVED_NO_BILLING, 7, "Block Tier Information Set Received (No Billing)")     \
5427
    XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_DATA_UNAVAILABLE, 128, "Data Unavailable")
5428
5429
VALUE_STRING_ENUM(zbee_zcl_met_snapshot_payload_type);
5430
VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_payload_type);
5431
5432
/* Functional Notification Flags */
5433
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_OTA_FIRMWARE                                0x00000001
5434
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_CBKE_UPDATE_REQUESTED                           0x00000002
5435
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_TIME_SYNC                                       0x00000004
5436
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_1                                      0x00000008
5437
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_HAN                          0x00000010
5438
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_WAN                          0x00000020
5439
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET     0x000001C0
5440
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET   0x00000E00
5441
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER              0x00001000
5442
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_METERING_CLUSTER           0x00002000
5443
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER         0x00004000
5444
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_NETWORK_KEY_ACTIVE                              0x00008000
5445
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_DISPLAY_MESSAGE                                 0x00010000
5446
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_CANCEL_ALL_MESSAGES                             0x00020000
5447
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_CHANGE_SUPPLY                                   0x00040000
5448
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_LOCAL_CHANGE_SUPPLY                             0x00080000
5449
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_SET_UNCONTROLLED_FLOW_THRESHOLD                 0x00100000
5450
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_TUNNEL_MESSAGE_PENDING                          0x00200000
5451
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SNAPSHOT                                    0x00400000
5452
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SAMPLED_DATA                                0x00800000
5453
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE             0x01000000
5454
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_ENERGY_SCAN_PENDING                             0x02000000
5455
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_CHANNEL_CHANGE_PENDING                          0x04000000
5456
15
#define ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_2                                      0xF8000000
5457
5458
/* Notification Flags 2 */
5459
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE                                      0x00000001
5460
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_PERIOD                               0x00000002
5461
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TARIFF_INFORMATION                         0x00000004
5462
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONVERSION_FACTOR                          0x00000008
5463
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CALORIFIC_VALUE                            0x00000010
5464
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CO2_VALUE                                  0x00000020
5465
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BILLING_PERIOD                             0x00000040
5466
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONSOLIDATED_BILL                          0x00000080
5467
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE_MATRIX                               0x00000100
5468
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_THRESHOLDS                           0x00000200
5469
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CURRENCY_CONVERSION                        0x00000400
5470
15
#define ZBEE_ZCL_NOTI_FLAG_2_RESERVED                                           0x00000800
5471
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CREDIT_PAYMENT_INFO                        0x00001000
5472
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CPP_EVENT                                  0x00002000
5473
15
#define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TIER_LABELS                                0x00004000
5474
15
#define ZBEE_ZCL_NOTI_FLAG_2_CANCEL_TARIFF                                      0x00008000
5475
15
#define ZBEE_ZCL_NOTI_FLAG_2_RESERVED_FUTURE                                    0xFFFF0000
5476
5477
/* Notification Flags 3 */
5478
15
#define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_CALENDAR                                   0x00000001
5479
15
#define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SPECIAL_DAYS                               0x00000002
5480
15
#define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SEASONS                                    0x00000004
5481
15
#define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_WEEK                                       0x00000008
5482
15
#define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_DAY                                        0x00000010
5483
15
#define ZBEE_ZCL_NOTI_FLAG_3_CANCEL_DAY                                         0x00000020
5484
15
#define ZBEE_ZCL_NOTI_FLAG_3_RESERVED                                           0xFFFFFFC0
5485
5486
/* Notification Flags 4 */
5487
15
#define ZBEE_ZCL_NOTI_FLAG_4_SELECT_AVAILABLE_EMERGENCY_CREDIT                  0x00000001
5488
15
#define ZBEE_ZCL_NOTI_FLAG_4_CHANGE_DEBT                                        0x00000002
5489
15
#define ZBEE_ZCL_NOTI_FLAG_4_EMERGENCY_CREDIT_SETUP                             0x00000004
5490
15
#define ZBEE_ZCL_NOTI_FLAG_4_CONSUMER_TOP_UP                                    0x00000008
5491
15
#define ZBEE_ZCL_NOTI_FLAG_4_CREDIT_ADJUSTMENT                                  0x00000010
5492
15
#define ZBEE_ZCL_NOTI_FLAG_4_CHANGE_PAYMENT_MODE                                0x00000020
5493
15
#define ZBEE_ZCL_NOTI_FLAG_4_GET_PREPAY_SNAPSHOT                                0x00000040
5494
15
#define ZBEE_ZCL_NOTI_FLAG_4_GET_TOP_UP_LOG                                     0x00000080
5495
15
#define ZBEE_ZCL_NOTI_FLAG_4_SET_LOW_CREDIT_WARNING_LEVEL                       0x00000100
5496
15
#define ZBEE_ZCL_NOTI_FLAG_4_GET_DEBT_REPAYMENT_LOG                             0x00000200
5497
15
#define ZBEE_ZCL_NOTI_FLAG_4_SET_MAXIMUM_CREDIT_LIMIT                           0x00000400
5498
15
#define ZBEE_ZCL_NOTI_FLAG_4_SET_OVERALL_DEBT_CAP                               0x00000800
5499
15
#define ZBEE_ZCL_NOTI_FLAG_4_RESERVED                                           0xFFFFF000
5500
5501
/* Notification Flags 5 */
5502
15
#define ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_TENANCY                          0x00000001
5503
15
#define ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_SUPPLIER                         0x00000002
5504
15
#define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_1_RESPONSE                    0x00000004
5505
15
#define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_2_RESPONSE                    0x00000008
5506
15
#define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_3_RESPONSE                    0x00000010
5507
15
#define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_4_RESPONSE                    0x00000020
5508
15
#define ZBEE_ZCL_NOTI_FLAG_5_UPDATE_SITE_ID                                     0x00000040
5509
15
#define ZBEE_ZCL_NOTI_FLAG_5_RESET_BATTERY_COUNTER                              0x00000080
5510
15
#define ZBEE_ZCL_NOTI_FLAG_5_UPDATE_CIN                                         0x00000100
5511
15
#define ZBEE_ZCL_NOTI_FLAG_5_RESERVED                                           0XFFFFFE00
5512
5513
/*************************/
5514
/* Function Declarations */
5515
/*************************/
5516
void proto_register_zbee_zcl_met(void);
5517
void proto_reg_handoff_zbee_zcl_met(void);
5518
5519
/* Command Dissector Helpers */
5520
static void dissect_zcl_met_get_profile                     (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5521
static void dissect_zcl_met_request_mirror_rsp              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5522
static void dissect_zcl_met_mirror_removed                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5523
static void dissect_zcl_met_request_fast_poll_mode          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5524
static void dissect_zcl_met_schedule_snapshot               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5525
static void dissect_zcl_met_take_snapshot                   (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5526
static void dissect_zcl_met_get_snapshot                    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5527
static void dissect_zcl_met_start_sampling                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5528
static void dissect_zcl_met_get_sampled_data                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5529
static void dissect_zcl_met_mirror_report_attribute_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5530
static void dissect_zcl_met_reset_load_limit_counter        (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5531
static void dissect_zcl_met_change_supply                   (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5532
static void dissect_zcl_met_local_change_supply             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5533
static void dissect_zcl_met_set_supply_status               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5534
static void dissect_zcl_met_set_uncontrolled_flow_threshold (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5535
static void dissect_zcl_met_get_profile_response            (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5536
static void dissect_zcl_met_request_fast_poll_mode_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5537
static void dissect_zcl_met_schedule_snapshot_response      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5538
static void dissect_zcl_met_take_snapshot_response          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5539
static void dissect_zcl_met_publish_snapshot                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5540
static void dissect_zcl_met_get_sampled_data_rsp            (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5541
static void dissect_zcl_met_configure_mirror                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5542
static void dissect_zcl_met_configure_notification_scheme   (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5543
static void dissect_zcl_met_configure_notification_flags    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5544
static void dissect_zcl_met_get_notified_msg                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5545
static void dissect_zcl_met_supply_status_response          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5546
static void dissect_zcl_met_start_sampling_response         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5547
static void dissect_zcl_met_notification_flags              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset, uint16_t noti_flags_number);
5548
5549
/*************************/
5550
/* Global Variables      */
5551
/*************************/
5552
5553
/* Initialize the protocol and registered fields */
5554
static int proto_zbee_zcl_met;
5555
5556
static int hf_zbee_zcl_met_srv_tx_cmd_id;
5557
static int hf_zbee_zcl_met_srv_rx_cmd_id;
5558
static int hf_zbee_zcl_met_attr_server_id;
5559
static int hf_zbee_zcl_met_attr_client_id;
5560
static int hf_zbee_zcl_met_attr_reporting_status;
5561
static int hf_zbee_zcl_met_func_noti_flags;
5562
static int hf_zbee_zcl_met_func_noti_flag_new_ota_firmware;
5563
static int hf_zbee_zcl_met_func_noti_flag_cbke_update_request;
5564
static int hf_zbee_zcl_met_func_noti_flag_time_sync;
5565
static int hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han;
5566
static int hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan;
5567
static int hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set;
5568
static int hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set;
5569
static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster;
5570
static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster;
5571
static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster;
5572
static int hf_zbee_zcl_met_func_noti_flag_network_key_active;
5573
static int hf_zbee_zcl_met_func_noti_flag_display_message;
5574
static int hf_zbee_zcl_met_func_noti_flag_cancel_all_messages;
5575
static int hf_zbee_zcl_met_func_noti_flag_change_supply;
5576
static int hf_zbee_zcl_met_func_noti_flag_local_change_supply;
5577
static int hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold;
5578
static int hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending;
5579
static int hf_zbee_zcl_met_func_noti_flag_get_snapshot;
5580
static int hf_zbee_zcl_met_func_noti_flag_get_sampled_data;
5581
static int hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available;
5582
static int hf_zbee_zcl_met_func_noti_flag_energy_scan_pending;
5583
static int hf_zbee_zcl_met_func_noti_flag_channel_change_pending;
5584
static int hf_zbee_zcl_met_func_noti_flag_reserved;
5585
static int hf_zbee_zcl_met_noti_flags_2;
5586
static int hf_zbee_zcl_met_noti_flag_2_publish_price;
5587
static int hf_zbee_zcl_met_noti_flag_2_publish_block_period;
5588
static int hf_zbee_zcl_met_noti_flag_2_publish_tariff_info;
5589
static int hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor;
5590
static int hf_zbee_zcl_met_noti_flag_2_publish_calorific_value;
5591
static int hf_zbee_zcl_met_noti_flag_2_publish_co2_value;
5592
static int hf_zbee_zcl_met_noti_flag_2_publish_billing_period;
5593
static int hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill;
5594
static int hf_zbee_zcl_met_noti_flag_2_publish_price_matrix;
5595
static int hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds;
5596
static int hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion;
5597
static int hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info;
5598
static int hf_zbee_zcl_met_noti_flag_2_publish_cpp_event;
5599
static int hf_zbee_zcl_met_noti_flag_2_publish_tier_labels;
5600
static int hf_zbee_zcl_met_noti_flag_2_cancel_tariff;
5601
static int hf_zbee_zcl_met_noti_flag_2_reserved;
5602
static int hf_zbee_zcl_met_noti_flags_3;
5603
static int hf_zbee_zcl_met_noti_flag_3_publish_calendar;
5604
static int hf_zbee_zcl_met_noti_flag_3_publish_special_days;
5605
static int hf_zbee_zcl_met_noti_flag_3_publish_seasons;
5606
static int hf_zbee_zcl_met_noti_flag_3_publish_week;
5607
static int hf_zbee_zcl_met_noti_flag_3_publish_day;
5608
static int hf_zbee_zcl_met_noti_flag_3_cancel_calendar;
5609
static int hf_zbee_zcl_met_noti_flag_3_reserved;
5610
static int hf_zbee_zcl_met_noti_flags_4;
5611
static int hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit;
5612
static int hf_zbee_zcl_met_noti_flag_4_change_debt;
5613
static int hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup;
5614
static int hf_zbee_zcl_met_noti_flag_4_consumer_top_up;
5615
static int hf_zbee_zcl_met_noti_flag_4_credit_adjustment;
5616
static int hf_zbee_zcl_met_noti_flag_4_change_payment_mode;
5617
static int hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot;
5618
static int hf_zbee_zcl_met_noti_flag_4_get_top_up_log;
5619
static int hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level;
5620
static int hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log;
5621
static int hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit;
5622
static int hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap;
5623
static int hf_zbee_zcl_met_noti_flag_4_reserved;
5624
static int hf_zbee_zcl_met_noti_flags_5;
5625
static int hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy;
5626
static int hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier;
5627
static int hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response;
5628
static int hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response;
5629
static int hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response;
5630
static int hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response;
5631
static int hf_zbee_zcl_met_noti_flag_5_update_site_id;
5632
static int hf_zbee_zcl_met_noti_flag_5_reset_battery_counter;
5633
static int hf_zbee_zcl_met_noti_flag_5_update_cin;
5634
static int hf_zbee_zcl_met_noti_flag_5_reserved;
5635
static int hf_zbee_zcl_met_get_profile_interval_channel;
5636
static int hf_zbee_zcl_met_get_profile_end_time;
5637
static int hf_zbee_zcl_met_get_profile_number_of_periods;
5638
static int hf_zbee_zcl_met_request_mirror_rsp_endpoint_id;
5639
static int hf_zbee_zcl_met_mirror_removed_removed_endpoint_id;
5640
static int hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period;
5641
static int hf_zbee_zcl_met_request_fast_poll_mode_duration;
5642
static int hf_zbee_zcl_met_schedule_snapshot_issuer_event_id;
5643
static int hf_zbee_zcl_met_schedule_snapshot_command_index;
5644
static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id;
5645
static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_start_time;
5646
static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule;
5647
static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type;
5648
static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause;
5649
static int hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands;
5650
static int hf_zbee_zcl_met_take_snapshot_snapshot_cause;
5651
static int hf_zbee_zcl_met_get_snapshot_start_time;
5652
static int hf_zbee_zcl_met_get_snapshot_end_time;
5653
static int hf_zbee_zcl_met_get_snapshot_snapshot_offset;
5654
static int hf_zbee_zcl_met_get_snapshot_snapshot_cause;
5655
static int hf_zbee_zcl_met_start_sampling_issuer_event_id;
5656
static int hf_zbee_zcl_met_start_sampling_start_sampling_time;
5657
static int hf_zbee_zcl_met_start_sampling_sample_type;
5658
static int hf_zbee_zcl_met_start_sampling_sample_request_interval;
5659
static int hf_zbee_zcl_met_start_sampling_max_number_of_samples;
5660
static int hf_zbee_zcl_met_get_sampled_data_sample_id;
5661
static int hf_zbee_zcl_met_get_sampled_data_sample_start_time;
5662
static int hf_zbee_zcl_met_get_sampled_data_sample_type;
5663
static int hf_zbee_zcl_met_get_sampled_data_number_of_samples;
5664
static int hf_zbee_zcl_met_start_sampling_response_sample_id;
5665
static int hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme;
5666
static int hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n;
5667
static int hf_zbee_zcl_met_reset_load_limit_counter_provider_id;
5668
static int hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id;
5669
static int hf_zbee_zcl_met_change_supply_provider_id;
5670
static int hf_zbee_zcl_met_change_supply_issuer_event_id;
5671
static int hf_zbee_zcl_met_change_supply_request_date_time;
5672
static int hf_zbee_zcl_met_change_supply_implementation_date_time;
5673
static int hf_zbee_zcl_met_change_supply_proposed_supply_status;
5674
static int hf_zbee_zcl_met_change_supply_supply_control_bits;
5675
static int hf_zbee_zcl_met_local_change_supply_proposed_supply_status;
5676
static int hf_zbee_zcl_met_set_supply_status_issuer_event_id;
5677
static int hf_zbee_zcl_met_set_supply_status_supply_tamper_state;
5678
static int hf_zbee_zcl_met_set_supply_status_supply_depletion_state;
5679
static int hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state;
5680
static int hf_zbee_zcl_met_set_supply_status_load_limit_supply_state;
5681
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id;
5682
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id;
5683
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold;
5684
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure;
5685
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier;
5686
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor;
5687
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period;
5688
static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period;
5689
static int hf_zbee_zcl_met_get_profile_response_end_time;
5690
static int hf_zbee_zcl_met_get_profile_response_status;
5691
static int hf_zbee_zcl_met_get_profile_response_profile_interval_period;
5692
static int hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered;
5693
static int hf_zbee_zcl_met_get_profile_response_intervals;
5694
static int hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period;
5695
static int hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time;
5696
static int hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id;
5697
static int hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id;
5698
static int hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation;
5699
static int hf_zbee_zcl_met_take_snapshot_response_snapshot_id;
5700
static int hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation;
5701
static int hf_zbee_zcl_met_publish_snapshot_snapshot_id;
5702
static int hf_zbee_zcl_met_publish_snapshot_snapshot_time;
5703
static int hf_zbee_zcl_met_publish_snapshot_snapshots_found;
5704
static int hf_zbee_zcl_met_publish_snapshot_cmd_index;
5705
static int hf_zbee_zcl_met_publish_snapshot_total_commands;
5706
static int hf_zbee_zcl_met_publish_snapshot_snapshot_cause;
5707
static int hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type;
5708
static int hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload;
5709
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_id;
5710
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_start_time;
5711
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_type;
5712
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval;
5713
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples;
5714
static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples;
5715
static int hf_zbee_zcl_met_configure_mirror_issuer_event_id;
5716
static int hf_zbee_zcl_met_configure_mirror_reporting_interval;
5717
static int hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting;
5718
static int hf_zbee_zcl_met_configure_mirror_notification_scheme;
5719
static int hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id;
5720
static int hf_zbee_zcl_met_configure_notification_scheme_notification_scheme;
5721
static int hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order;
5722
static int hf_zbee_zcl_met_configure_notification_flags_issuer_event_id;
5723
static int hf_zbee_zcl_met_configure_notification_flags_notification_scheme;
5724
static int hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id;
5725
static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_cluster_id;
5726
static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_manufacturer_code;
5727
static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_no_of_commands;
5728
static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_command_identifier;
5729
static int hf_zbee_zcl_met_get_notified_msg_notification_scheme;
5730
static int hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id;
5731
static int hf_zbee_zcl_met_get_notified_msg_notification_flags;
5732
static int hf_zbee_zcl_met_supply_status_response_provider_id;
5733
static int hf_zbee_zcl_met_supply_status_response_issuer_event_id;
5734
static int hf_zbee_zcl_met_supply_status_response_implementation_date_time;
5735
static int hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation;
5736
static int hf_zbee_zcl_met_snapshot_cause_general;
5737
static int hf_zbee_zcl_met_snapshot_cause_end_of_billing_period;
5738
static int hf_zbee_zcl_met_snapshot_cause_end_of_block_period;
5739
static int hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information;
5740
static int hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix;
5741
static int hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds;
5742
static int hf_zbee_zcl_met_snapshot_cause_change_of_cv;
5743
static int hf_zbee_zcl_met_snapshot_cause_change_of_cf;
5744
static int hf_zbee_zcl_met_snapshot_cause_change_of_calendar;
5745
static int hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing;
5746
static int hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client;
5747
static int hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period;
5748
static int hf_zbee_zcl_met_snapshot_cause_change_of_tenancy;
5749
static int hf_zbee_zcl_met_snapshot_cause_change_of_supplier;
5750
static int hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode;
5751
static int hf_zbee_zcl_met_snapshot_cause_debt_payment;
5752
static int hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot;
5753
static int hf_zbee_zcl_met_snapshot_cause_ota_firmware_download;
5754
static int hf_zbee_zcl_met_snapshot_cause_reserved;
5755
static int hf_zbee_zcl_met_snapshot_schedule_frequency;
5756
static int hf_zbee_zcl_met_snapshot_schedule_frequency_type;
5757
static int hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card;
5758
5759
static int* const zbee_zcl_met_snapshot_schedule_bits[] = {
5760
    &hf_zbee_zcl_met_snapshot_schedule_frequency,
5761
    &hf_zbee_zcl_met_snapshot_schedule_frequency_type,
5762
    &hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card,
5763
    NULL
5764
};
5765
5766
static int* const zbee_zcl_met_func_noti_flags[] = {
5767
        &hf_zbee_zcl_met_func_noti_flag_new_ota_firmware,
5768
        &hf_zbee_zcl_met_func_noti_flag_cbke_update_request,
5769
        &hf_zbee_zcl_met_func_noti_flag_time_sync,
5770
        &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han,
5771
        &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan,
5772
        &hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set,
5773
        &hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set,
5774
        &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster,
5775
        &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster,
5776
        &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster,
5777
        &hf_zbee_zcl_met_func_noti_flag_network_key_active,
5778
        &hf_zbee_zcl_met_func_noti_flag_display_message,
5779
        &hf_zbee_zcl_met_func_noti_flag_cancel_all_messages,
5780
        &hf_zbee_zcl_met_func_noti_flag_change_supply,
5781
        &hf_zbee_zcl_met_func_noti_flag_local_change_supply,
5782
        &hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold,
5783
        &hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending,
5784
        &hf_zbee_zcl_met_func_noti_flag_get_snapshot,
5785
        &hf_zbee_zcl_met_func_noti_flag_get_sampled_data,
5786
        &hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available,
5787
        &hf_zbee_zcl_met_func_noti_flag_energy_scan_pending,
5788
        &hf_zbee_zcl_met_func_noti_flag_channel_change_pending,
5789
        &hf_zbee_zcl_met_func_noti_flag_reserved,
5790
        NULL
5791
};
5792
5793
static int* const zbee_zcl_met_noti_flags_2[] = {
5794
        &hf_zbee_zcl_met_noti_flag_2_publish_price,
5795
        &hf_zbee_zcl_met_noti_flag_2_publish_block_period,
5796
        &hf_zbee_zcl_met_noti_flag_2_publish_tariff_info,
5797
        &hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor,
5798
        &hf_zbee_zcl_met_noti_flag_2_publish_calorific_value,
5799
        &hf_zbee_zcl_met_noti_flag_2_publish_co2_value,
5800
        &hf_zbee_zcl_met_noti_flag_2_publish_billing_period,
5801
        &hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill,
5802
        &hf_zbee_zcl_met_noti_flag_2_publish_price_matrix,
5803
        &hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds,
5804
        &hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion,
5805
        &hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info,
5806
        &hf_zbee_zcl_met_noti_flag_2_publish_cpp_event,
5807
        &hf_zbee_zcl_met_noti_flag_2_publish_tier_labels,
5808
        &hf_zbee_zcl_met_noti_flag_2_cancel_tariff,
5809
        &hf_zbee_zcl_met_noti_flag_2_reserved,
5810
        NULL
5811
};
5812
5813
static int* const zbee_zcl_met_noti_flags_3[] = {
5814
        &hf_zbee_zcl_met_noti_flag_3_publish_calendar,
5815
        &hf_zbee_zcl_met_noti_flag_3_publish_special_days,
5816
        &hf_zbee_zcl_met_noti_flag_3_publish_seasons,
5817
        &hf_zbee_zcl_met_noti_flag_3_publish_week,
5818
        &hf_zbee_zcl_met_noti_flag_3_publish_day,
5819
        &hf_zbee_zcl_met_noti_flag_3_cancel_calendar,
5820
        &hf_zbee_zcl_met_noti_flag_3_reserved,
5821
        NULL
5822
};
5823
5824
static int* const zbee_zcl_met_noti_flags_4[] = {
5825
        &hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit,
5826
        &hf_zbee_zcl_met_noti_flag_4_change_debt,
5827
        &hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup,
5828
        &hf_zbee_zcl_met_noti_flag_4_consumer_top_up,
5829
        &hf_zbee_zcl_met_noti_flag_4_credit_adjustment,
5830
        &hf_zbee_zcl_met_noti_flag_4_change_payment_mode,
5831
        &hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot,
5832
        &hf_zbee_zcl_met_noti_flag_4_get_top_up_log,
5833
        &hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level,
5834
        &hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log,
5835
        &hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit,
5836
        &hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap,
5837
        &hf_zbee_zcl_met_noti_flag_4_reserved,
5838
        NULL
5839
};
5840
5841
static int* const zbee_zcl_met_noti_flags_5[] = {
5842
        &hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy,
5843
        &hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier,
5844
        &hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response,
5845
        &hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response,
5846
        &hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response,
5847
        &hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response,
5848
        &hf_zbee_zcl_met_noti_flag_5_update_site_id,
5849
        &hf_zbee_zcl_met_noti_flag_5_reset_battery_counter,
5850
        &hf_zbee_zcl_met_noti_flag_5_update_cin,
5851
        &hf_zbee_zcl_met_noti_flag_5_reserved,
5852
        NULL
5853
};
5854
5855
static int* const zbee_zcl_met_snapshot_cause_flags[] = {
5856
        &hf_zbee_zcl_met_snapshot_cause_general,
5857
        &hf_zbee_zcl_met_snapshot_cause_end_of_billing_period,
5858
        &hf_zbee_zcl_met_snapshot_cause_end_of_block_period,
5859
        &hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information,
5860
        &hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix,
5861
        &hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds,
5862
        &hf_zbee_zcl_met_snapshot_cause_change_of_cv,
5863
        &hf_zbee_zcl_met_snapshot_cause_change_of_cf,
5864
        &hf_zbee_zcl_met_snapshot_cause_change_of_calendar,
5865
        &hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing,
5866
        &hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client,
5867
        &hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period,
5868
        &hf_zbee_zcl_met_snapshot_cause_change_of_tenancy,
5869
        &hf_zbee_zcl_met_snapshot_cause_change_of_supplier,
5870
        &hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode,
5871
        &hf_zbee_zcl_met_snapshot_cause_debt_payment,
5872
        &hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot,
5873
        &hf_zbee_zcl_met_snapshot_cause_ota_firmware_download,
5874
        &hf_zbee_zcl_met_snapshot_cause_reserved,
5875
        NULL
5876
};
5877
5878
/* Initialize the subtree pointers */
5879
static int ett_zbee_zcl_met;
5880
static int ett_zbee_zcl_met_func_noti_flags;
5881
static int ett_zbee_zcl_met_noti_flags_2;
5882
static int ett_zbee_zcl_met_noti_flags_3;
5883
static int ett_zbee_zcl_met_noti_flags_4;
5884
static int ett_zbee_zcl_met_noti_flags_5;
5885
static int ett_zbee_zcl_met_snapshot_cause_flags;
5886
static int ett_zbee_zcl_met_snapshot_schedule;
5887
static int ett_zbee_zcl_met_schedule_snapshot_response_payload;
5888
static int ett_zbee_zcl_met_schedule_snapshot_payload;
5889
static int ett_zbee_zcl_met_mirror_noti_flag;
5890
static int ett_zbee_zcl_met_bit_field_allocation;
5891
5892
/*************************/
5893
/* Function Bodies       */
5894
/*************************/
5895
5896
/**
5897
 *This function is called by ZCL foundation dissector in order to decode
5898
 *
5899
 *@param tree pointer to data tree Wireshark uses to display packet.
5900
 *@param tvb pointer to buffer containing raw packet.
5901
 *@param offset pointer to buffer offset
5902
 *@param attr_id attribute identifier
5903
 *@param data_type attribute data type
5904
 *@param client_attr ZCL client
5905
*/
5906
static void
5907
dissect_zcl_met_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
5908
782
{
5909
782
    if (client_attr) {
5910
741
        switch (attr_id) {
5911
            /* applies to all SE clusters */
5912
1
            case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET_CLNT:
5913
1
                proto_tree_add_item(tree, hf_zbee_zcl_met_attr_reporting_status, tvb, *offset, 1, ENC_NA);
5914
1
                *offset += 1;
5915
1
                break;
5916
5917
97
            case ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS:
5918
97
                proto_item_append_text(tree, ", Functional Notification Flags");
5919
97
                proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_func_noti_flags, ett_zbee_zcl_met_func_noti_flags, zbee_zcl_met_func_noti_flags, ENC_LITTLE_ENDIAN);
5920
97
                *offset += 4;
5921
97
                break;
5922
5923
18
            case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2:
5924
18
                proto_item_append_text(tree, ", Notification Flags 2");
5925
18
                proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_2, ett_zbee_zcl_met_noti_flags_2, zbee_zcl_met_noti_flags_2, ENC_LITTLE_ENDIAN);
5926
18
                *offset += 4;
5927
18
                break;
5928
5929
16
            case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3:
5930
16
                proto_item_append_text(tree, ", Notification Flags 3");
5931
16
                proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_3, ett_zbee_zcl_met_noti_flags_3, zbee_zcl_met_noti_flags_3, ENC_LITTLE_ENDIAN);
5932
16
                *offset += 4;
5933
16
                break;
5934
5935
7
            case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4:
5936
7
                proto_item_append_text(tree, ", Notification Flags 4");
5937
7
                proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_4, ett_zbee_zcl_met_noti_flags_4, zbee_zcl_met_noti_flags_4, ENC_LITTLE_ENDIAN);
5938
7
                *offset += 4;
5939
7
                break;
5940
5941
7
            case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5:
5942
7
                proto_item_append_text(tree, ", Notification Flags 5");
5943
7
                proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_5, ett_zbee_zcl_met_noti_flags_5, zbee_zcl_met_noti_flags_5, ENC_LITTLE_ENDIAN);
5944
7
                *offset += 4;
5945
7
                break;
5946
5947
595
            default: /* Catch all */
5948
595
                dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
5949
595
                break;
5950
741
        }
5951
741
    }
5952
41
    else {
5953
41
        switch (attr_id) {
5954
            /* applies to all SE clusters */
5955
0
            case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET:
5956
0
                proto_tree_add_item(tree, hf_zbee_zcl_met_attr_reporting_status, tvb, *offset, 1, ENC_NA);
5957
0
                *offset += 1;
5958
0
                break;
5959
5960
41
            default: /* Catch all */
5961
41
                dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
5962
41
                break;
5963
41
        }
5964
41
    }
5965
782
} /*dissect_zcl_met_attr_data*/
5966
5967
/**
5968
 *This function manages the Start Sampling Response payload.
5969
 *
5970
 *@param tvb pointer to buffer containing raw packet.
5971
 *@param tree pointer to data tree Wireshark uses to display packet.
5972
 *@param offset pointer to offset from caller
5973
*/
5974
static void dissect_zcl_met_start_sampling_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
5975
0
{
5976
    /* Sample ID */
5977
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_response_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
5978
0
    *offset += 2;
5979
0
} /*dissect_zcl_met_start_sampling_response*/
5980
5981
/**
5982
 *ZigBee ZCL Metering cluster dissector for wireshark.
5983
 *
5984
 *@param tvb pointer to buffer containing raw packet.
5985
 *@param pinfo pointer to packet information fields
5986
 *@param tree pointer to data tree Wireshark uses to display packet.
5987
*/
5988
static int
5989
dissect_zbee_zcl_met(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
5990
4
{
5991
4
    proto_tree        *payload_tree;
5992
4
    zbee_zcl_packet   *zcl;
5993
4
    unsigned          offset = 0;
5994
4
    uint8_t           cmd_id;
5995
4
    int               rem_len;
5996
5997
    /* Reject the packet if data is NULL */
5998
4
    if (data == NULL)
5999
0
        return 0;
6000
4
    zcl = (zbee_zcl_packet *)data;
6001
4
    cmd_id = zcl->cmd_id;
6002
6003
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
6004
4
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
6005
        /* Append the command name to the info column. */
6006
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
6007
1
            val_to_str_const(cmd_id, zbee_zcl_met_srv_rx_cmd_names, "Unknown Command"),
6008
1
            zcl->tran_seqno);
6009
6010
        /* Add the command ID. */
6011
1
        proto_tree_add_uint(tree, hf_zbee_zcl_met_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
6012
6013
        /* Check is this command has a payload, than add the payload tree */
6014
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
6015
1
        if (rem_len > 0) {
6016
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_met, NULL, "Payload");
6017
6018
            /* Call the appropriate command dissector */
6019
1
            switch (cmd_id) {
6020
6021
1
                case ZBEE_ZCL_CMD_ID_MET_GET_PROFILE:
6022
1
                    dissect_zcl_met_get_profile(tvb, payload_tree, &offset);
6023
1
                    break;
6024
6025
0
                case ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR_RSP:
6026
0
                    dissect_zcl_met_request_mirror_rsp(tvb, payload_tree, &offset);
6027
0
                    break;
6028
6029
0
                case ZBEE_ZCL_CMD_ID_MET_MIRROR_REMOVED:
6030
0
                    dissect_zcl_met_mirror_removed(tvb, payload_tree, &offset);
6031
0
                    break;
6032
6033
0
                case ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE:
6034
0
                    dissect_zcl_met_request_fast_poll_mode(tvb, payload_tree, &offset);
6035
0
                    break;
6036
6037
0
                case ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT:
6038
0
                    dissect_zcl_met_schedule_snapshot(tvb, payload_tree, &offset);
6039
0
                    break;
6040
6041
0
                case ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT:
6042
0
                    dissect_zcl_met_take_snapshot(tvb, payload_tree, &offset);
6043
0
                    break;
6044
6045
0
                case ZBEE_ZCL_CMD_ID_MET_GET_SNAPSHOT:
6046
0
                    dissect_zcl_met_get_snapshot(tvb, payload_tree, &offset);
6047
0
                    break;
6048
6049
0
                case ZBEE_ZCL_CMD_ID_MET_START_SAMPLING:
6050
0
                    dissect_zcl_met_start_sampling(tvb, payload_tree, &offset);
6051
0
                    break;
6052
6053
0
                case ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA:
6054
0
                    dissect_zcl_met_get_sampled_data(tvb, payload_tree, &offset);
6055
0
                    break;
6056
6057
0
                case ZBEE_ZCL_CMD_ID_MET_MIRROR_REPORT_ATTRIBUTE_RESPONSE:
6058
0
                    dissect_zcl_met_mirror_report_attribute_response(tvb, payload_tree, &offset);
6059
0
                    break;
6060
6061
0
                case ZBEE_ZCL_CMD_ID_MET_RESET_LOAD_LIMIT_COUNTER:
6062
0
                    dissect_zcl_met_reset_load_limit_counter(tvb, payload_tree, &offset);
6063
0
                    break;
6064
6065
0
                case ZBEE_ZCL_CMD_ID_MET_CHANGE_SUPPLY:
6066
0
                    dissect_zcl_met_change_supply(tvb, payload_tree, &offset);
6067
0
                    break;
6068
6069
0
                case ZBEE_ZCL_CMD_ID_MET_LOCAL_CHANGE_SUPPLY:
6070
0
                    dissect_zcl_met_local_change_supply(tvb, payload_tree, &offset);
6071
0
                    break;
6072
6073
0
                case ZBEE_ZCL_CMD_ID_MET_SET_SUPPLY_STATUS:
6074
0
                    dissect_zcl_met_set_supply_status(tvb, payload_tree, &offset);
6075
0
                    break;
6076
6077
0
                case ZBEE_ZCL_CMD_ID_MET_SET_UNCONTROLLED_FLOW_THRESHOLD:
6078
0
                    dissect_zcl_met_set_uncontrolled_flow_threshold(tvb, payload_tree, &offset);
6079
0
                    break;
6080
6081
0
                default:
6082
0
                    break;
6083
1
            }
6084
1
        }
6085
1
    }
6086
3
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
6087
        /* Append the command name to the info column. */
6088
3
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
6089
3
            val_to_str_const(cmd_id, zbee_zcl_met_srv_tx_cmd_names, "Unknown Command"),
6090
3
            zcl->tran_seqno);
6091
6092
        /* Add the command ID. */
6093
3
        proto_tree_add_uint(tree, hf_zbee_zcl_met_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
6094
6095
        /* Check is this command has a payload, than add the payload tree */
6096
3
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
6097
3
        if (rem_len > 0) {
6098
3
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_met, NULL, "Payload");
6099
6100
            /* Call the appropriate command dissector */
6101
3
            switch (cmd_id) {
6102
6103
0
                case ZBEE_ZCL_CMD_ID_MET_GET_PROFILE_RESPONSE:
6104
0
                    dissect_zcl_met_get_profile_response(tvb, payload_tree, &offset);
6105
0
                    break;
6106
6107
0
                case ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR:
6108
                    /* No payload */
6109
0
                    break;
6110
6111
0
                case ZBEE_ZCL_CMD_ID_MET_REMOVE_MIRROR:
6112
                    /* No payload */
6113
0
                    break;
6114
6115
0
                case ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE_RESPONSE:
6116
0
                    dissect_zcl_met_request_fast_poll_mode_response(tvb, payload_tree, &offset);
6117
0
                    break;
6118
6119
0
                case ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT_RESPONSE:
6120
0
                    dissect_zcl_met_schedule_snapshot_response(tvb, payload_tree, &offset);
6121
0
                    break;
6122
6123
0
                case ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT_RESPONSE:
6124
0
                    dissect_zcl_met_take_snapshot_response(tvb, payload_tree, &offset);
6125
0
                    break;
6126
6127
0
                case ZBEE_ZCL_CMD_ID_MET_PUBLISH_SNAPSHOT:
6128
0
                    dissect_zcl_met_publish_snapshot(tvb, payload_tree, &offset);
6129
0
                    break;
6130
6131
2
                case ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA_RSP:
6132
2
                    dissect_zcl_met_get_sampled_data_rsp(tvb, payload_tree, &offset);
6133
2
                    break;
6134
6135
1
                case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_MIRROR:
6136
1
                    dissect_zcl_met_configure_mirror(tvb, payload_tree, &offset);
6137
1
                    break;
6138
6139
0
                case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_SCHEME:
6140
0
                    dissect_zcl_met_configure_notification_scheme(tvb, payload_tree, &offset);
6141
0
                    break;
6142
6143
0
                case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_FLAGS:
6144
0
                    dissect_zcl_met_configure_notification_flags(tvb, payload_tree, &offset);
6145
0
                    break;
6146
6147
0
                case ZBEE_ZCL_CMD_ID_MET_GET_NOTIFIED_MESSAGE:
6148
0
                    dissect_zcl_met_get_notified_msg(tvb, payload_tree, &offset);
6149
0
                    break;
6150
6151
0
                case ZBEE_ZCL_CMD_ID_MET_SUPPLY_STATUS_RESPONSE:
6152
0
                    dissect_zcl_met_supply_status_response(tvb, payload_tree, &offset);
6153
0
                    break;
6154
6155
0
                case ZBEE_ZCL_CMD_ID_MET_START_SAMPLING_RESPONSE:
6156
0
                    dissect_zcl_met_start_sampling_response(tvb, payload_tree, &offset);
6157
0
                    break;
6158
6159
0
                default:
6160
0
                    break;
6161
3
            }
6162
3
        }
6163
3
    }
6164
6165
3
    return tvb_captured_length(tvb);
6166
4
} /*dissect_zbee_zcl_met*/
6167
6168
/**
6169
 *This function manages the Get Profile payload
6170
 *
6171
 *@param tvb pointer to buffer containing raw packet.
6172
 *@param tree pointer to data tree Wireshark uses to display packet.
6173
 *@param offset pointer to offset from caller
6174
*/
6175
static void
6176
dissect_zcl_met_get_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6177
1
{
6178
    /* Interval Channel */
6179
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_interval_channel, tvb, *offset, 1, ENC_NA);
6180
1
    *offset += 1;
6181
6182
    /* End Time */
6183
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6184
1
    *offset += 4;
6185
6186
    /* Number of Periods */
6187
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_number_of_periods, tvb, *offset, 1, ENC_NA);
6188
1
    *offset += 1;
6189
1
} /*dissect_zcl_met_get_profile*/
6190
6191
/**
6192
 *This function manages the Request Mirror Response payload
6193
 *
6194
 *@param tvb pointer to buffer containing raw packet.
6195
 *@param tree pointer to data tree Wireshark uses to display packet.
6196
 *@param offset pointer to offset from caller
6197
*/
6198
static void
6199
dissect_zcl_met_request_mirror_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6200
0
{
6201
    /* EndPoint ID */
6202
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_request_mirror_rsp_endpoint_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6203
0
    *offset += 2;
6204
0
} /*dissect_zcl_met_request_mirror_rsp*/
6205
6206
/**
6207
 *This function manages the Mirror Removed payload
6208
 *
6209
 *@param tvb pointer to buffer containing raw packet.
6210
 *@param tree pointer to data tree Wireshark uses to display packet.
6211
 *@param offset pointer to offset from caller
6212
*/
6213
static void
6214
dissect_zcl_met_mirror_removed(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6215
0
{
6216
    /* Removed EndPoint ID */
6217
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_mirror_removed_removed_endpoint_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6218
0
    *offset += 2;
6219
0
} /*dissect_zcl_met_mirror_removed*/
6220
6221
/**
6222
 *This function manages the Request Fast Poll Mode payload
6223
 *
6224
 *@param tvb pointer to buffer containing raw packet.
6225
 *@param tree pointer to data tree Wireshark uses to display packet.
6226
 *@param offset pointer to offset from caller
6227
*/
6228
static void
6229
dissect_zcl_met_request_fast_poll_mode(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6230
0
{
6231
    /* Fast Poll Update Period */
6232
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period, tvb, *offset, 1, ENC_NA);
6233
0
    *offset += 1;
6234
6235
    /* Duration */
6236
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_duration, tvb, *offset, 1, ENC_NA);
6237
0
    *offset += 1;
6238
0
} /*dissect_zcl_met_request_fast_poll_mode*/
6239
6240
/**
6241
 *This function manages the Schedule Snapshot payload
6242
 *
6243
 *@param tvb pointer to buffer containing raw packet.
6244
 *@param tree pointer to data tree Wireshark uses to display packet.
6245
 *@param offset pointer to offset from caller
6246
*/
6247
static void
6248
dissect_zcl_met_schedule_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6249
0
{
6250
    /* Issue Event ID */
6251
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6252
0
    *offset += 4;
6253
6254
    /* Command Index */
6255
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_command_index, tvb, *offset, 1, ENC_NA);
6256
0
    *offset += 1;
6257
6258
    /* Total Number of Commands */
6259
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands, tvb, *offset, 1, ENC_NA);
6260
0
    *offset += 1;
6261
6262
    /* Snapshot Schedule Payload */
6263
0
    proto_tree *payload_tree;
6264
6265
0
    payload_tree = proto_tree_add_subtree(tree, tvb, *offset, 13,
6266
0
                ett_zbee_zcl_met_schedule_snapshot_payload, NULL, "Snapshot Schedule Payload");
6267
6268
    /* Snapshot Schedule ID */
6269
0
    proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id,
6270
0
                        tvb, *offset, 1, ENC_NA);
6271
0
    *offset += 1;
6272
6273
    /* Snapshot Start Time */
6274
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6275
0
    *offset += 4;
6276
6277
    /* Snapshot Schedule */
6278
0
    proto_tree_add_bitmask(payload_tree, tvb, *offset, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule,
6279
0
                        ett_zbee_zcl_met_snapshot_schedule,
6280
0
                        zbee_zcl_met_snapshot_schedule_bits, ENC_LITTLE_ENDIAN);
6281
0
    *offset += 3;
6282
6283
    /* Snapshot Payload Type */
6284
0
    proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type,
6285
0
                        tvb, *offset, 1, ENC_NA);
6286
0
    *offset += 1;
6287
6288
    /* Snapshot Cause */
6289
0
    proto_tree_add_bitmask(payload_tree, tvb, *offset, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause,
6290
0
                           ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6291
0
    *offset += 4;
6292
6293
0
} /*dissect_zcl_met_schedule_snapshot*/
6294
6295
/**
6296
 *This function manages the Take Snapshot payload
6297
 *
6298
 *@param tvb pointer to buffer containing raw packet.
6299
 *@param tree pointer to data tree Wireshark uses to display packet.
6300
 *@param offset pointer to offset from caller
6301
*/
6302
static void
6303
dissect_zcl_met_take_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6304
0
{
6305
    /* Snapshot Cause */
6306
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_take_snapshot_snapshot_cause,
6307
0
                           ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6308
0
    *offset += 4;
6309
0
} /*dissect_zcl_met_take_snapshot*/
6310
6311
/**
6312
 *This function manages the Get Snapshot payload
6313
 *
6314
 *@param tvb pointer to buffer containing raw packet.
6315
 *@param tree pointer to data tree Wireshark uses to display packet.
6316
 *@param offset pointer to offset from caller
6317
*/
6318
static void
6319
dissect_zcl_met_get_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6320
0
{
6321
    /* Start Time */
6322
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6323
0
    *offset += 4;
6324
6325
0
    if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
6326
        /* End Time - Introduced from ZCL version 1.2 */
6327
0
        proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6328
0
        *offset += 4;
6329
0
    }
6330
6331
    /* Snapshot Offset */
6332
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_snapshot_offset, tvb, *offset, 1, ENC_NA);
6333
0
    *offset += 1;
6334
6335
    /* Snapshot Cause */
6336
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_get_snapshot_snapshot_cause,
6337
0
                           ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6338
0
    *offset += 4;
6339
0
} /*dissect_zcl_met_get_snapshot*/
6340
6341
/**
6342
 *This function manages the Start Sampling payload
6343
 *
6344
 *@param tvb pointer to buffer containing raw packet.
6345
 *@param tree pointer to data tree Wireshark uses to display packet.
6346
 *@param offset pointer to offset from caller
6347
*/
6348
static void
6349
dissect_zcl_met_start_sampling(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6350
0
{
6351
    /* Issuer Event ID */
6352
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6353
0
    *offset += 4;
6354
6355
    /* Start Sampling Time */
6356
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_start_sampling_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6357
0
    *offset += 4;
6358
6359
    /* Sample Type */
6360
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_sample_type, tvb, *offset, 1, ENC_NA);
6361
0
    *offset += 1;
6362
6363
    /* Sample Request Interval */
6364
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_sample_request_interval, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6365
0
    *offset += 2;
6366
6367
    /* Max Number of Samples */
6368
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_max_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6369
0
    *offset += 2;
6370
0
} /*dissect_zcl_met_start_sampling*/
6371
6372
/**
6373
 *This function manages the Get Sampled Data payload
6374
 *
6375
 *@param tvb pointer to buffer containing raw packet.
6376
 *@param tree pointer to data tree Wireshark uses to display packet.
6377
 *@param offset pointer to offset from caller
6378
*/
6379
static void
6380
dissect_zcl_met_get_sampled_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6381
0
{
6382
    /* Sample ID */
6383
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6384
0
    *offset += 2;
6385
6386
    /* Sample Start Time */
6387
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_sample_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6388
0
    *offset += 4;
6389
6390
    /* Sample Type */
6391
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_sample_type, tvb, *offset, 1, ENC_NA);
6392
0
    *offset += 1;
6393
6394
    /* Number of Samples */
6395
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6396
0
    *offset += 2;
6397
0
} /*dissect_zcl_met_get_sampled_data*/
6398
6399
/**
6400
 *This function manages the Mirror Report Attribute Response payload
6401
 *
6402
 *@param tvb pointer to buffer containing raw packet.
6403
 *@param tree pointer to data tree Wireshark uses to display packet.
6404
 *@param offset pointer to offset from caller
6405
*/
6406
static void
6407
dissect_zcl_met_mirror_report_attribute_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6408
0
{
6409
0
    uint8_t notif_scheme_type;
6410
0
    int    noti_flags_count;
6411
6412
0
    notif_scheme_type = tvb_get_uint8(tvb, *offset);
6413
    /* Notification Scheme */
6414
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme, tvb, *offset, 1, ENC_NA);
6415
0
    *offset += 1;
6416
6417
0
    switch(notif_scheme_type) {
6418
0
        case ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A:
6419
0
            noti_flags_count = 1;
6420
0
            break;
6421
0
        case ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B:
6422
0
            noti_flags_count = 5;
6423
0
            break;
6424
0
        default:
6425
0
            noti_flags_count = -1;
6426
0
            break;
6427
0
    }
6428
0
    if (noti_flags_count > 0) {
6429
0
        for (int noti_flags_number = 0; noti_flags_number < noti_flags_count; noti_flags_number++) {
6430
0
            dissect_zcl_met_notification_flags(tvb, tree, offset, noti_flags_number);
6431
0
        }
6432
0
    } else {
6433
        /* Notification Flag */
6434
0
        while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6435
0
            proto_tree *notification_flag_tree;
6436
0
            notification_flag_tree = proto_tree_add_subtree(tree, tvb, *offset, 4, ett_zbee_zcl_met_mirror_noti_flag, NULL, "Notification Flags");
6437
0
            proto_tree_add_item(notification_flag_tree, hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n,
6438
0
                                tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6439
0
            *offset += 4;
6440
0
        }
6441
0
    }
6442
0
} /*dissect_zcl_met_mirror_report_attribute_response*/
6443
6444
/**
6445
 *This function manages the Reset Load Limit Counter  payload
6446
 *
6447
 *@param tvb pointer to buffer containing raw packet.
6448
 *@param tree pointer to data tree Wireshark uses to display packet.
6449
 *@param offset pointer to offset from caller
6450
*/
6451
static void
6452
dissect_zcl_met_reset_load_limit_counter(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6453
0
{
6454
    /* Provider ID */
6455
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_reset_load_limit_counter_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6456
0
    *offset += 4;
6457
6458
    /* Issuer Event ID */
6459
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6460
0
    *offset += 4;
6461
0
} /*dissect_zcl_met_reset_load_limit_counter*/
6462
6463
/**
6464
 *This function manages the Change Supply payload
6465
 *
6466
 *@param tvb pointer to buffer containing raw packet.
6467
 *@param tree pointer to data tree Wireshark uses to display packet.
6468
 *@param offset pointer to offset from caller
6469
*/
6470
static void
6471
dissect_zcl_met_change_supply(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6472
0
{
6473
    /* Provider ID */
6474
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6475
0
    *offset += 4;
6476
6477
    /* Issuer Event ID */
6478
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6479
0
    *offset += 4;
6480
6481
    /* Request Date/Time */
6482
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_request_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6483
0
    *offset += 4;
6484
6485
    /* Implementation Date/Time */
6486
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6487
0
    *offset += 4;
6488
6489
    /* Proposed Supple Status */
6490
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_proposed_supply_status, tvb, *offset, 1, ENC_NA);
6491
0
    *offset += 1;
6492
6493
    /* Supple Control Bits */
6494
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_supply_control_bits, tvb, *offset, 1, ENC_NA);
6495
0
    *offset += 1;
6496
0
} /*dissect_zcl_met_change_supply*/
6497
6498
/**
6499
 *This function manages the Local Change Supply payload
6500
 *
6501
 *@param tvb pointer to buffer containing raw packet.
6502
 *@param tree pointer to data tree Wireshark uses to display packet.
6503
 *@param offset pointer to offset from caller
6504
*/
6505
static void
6506
dissect_zcl_met_local_change_supply(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6507
0
{
6508
    /* Proposed Supply Status */
6509
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_local_change_supply_proposed_supply_status, tvb, *offset, 1, ENC_NA);
6510
0
    *offset += 1;
6511
0
} /*dissect_zcl_met_local_change_supply*/
6512
6513
/**
6514
 *This function manages the Set Supply Status payload
6515
 *
6516
 *@param tvb pointer to buffer containing raw packet.
6517
 *@param tree pointer to data tree Wireshark uses to display packet.
6518
 *@param offset pointer to offset from caller
6519
*/
6520
static void
6521
dissect_zcl_met_set_supply_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6522
0
{
6523
    /* Issuer Event ID */
6524
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6525
0
    *offset += 4;
6526
6527
    /* Supply Tamper State */
6528
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_tamper_state, tvb, *offset, 1, ENC_NA);
6529
0
    *offset += 1;
6530
6531
    /* Supply Depletion State */
6532
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_depletion_state, tvb, *offset, 1, ENC_NA);
6533
0
    *offset += 1;
6534
6535
    /* Supply Uncontrolled Flow State */
6536
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state, tvb, *offset, 1, ENC_NA);
6537
0
    *offset += 1;
6538
6539
    /* Load Limit Supply State */
6540
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_load_limit_supply_state, tvb, *offset, 1, ENC_NA);
6541
0
    *offset += 1;
6542
0
} /*dissect_zcl_met_set_supply_status*/
6543
6544
/**
6545
 *This function manages the Set Uncontrolled Flow Threshold payload
6546
 *
6547
 *@param tvb pointer to buffer containing raw packet.
6548
 *@param tree pointer to data tree Wireshark uses to display packet.
6549
 *@param offset pointer to offset from caller
6550
*/
6551
static void
6552
dissect_zcl_met_set_uncontrolled_flow_threshold(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6553
0
{
6554
    /* Provider ID */
6555
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6556
0
    *offset += 4;
6557
6558
    /* Issuer Event ID */
6559
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6560
0
    *offset += 4;
6561
6562
    /* Uncontrolled Flow Threshold */
6563
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6564
0
    *offset += 2;
6565
6566
    /* Unit of Measure */
6567
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure, tvb, *offset, 1, ENC_NA);
6568
0
    *offset += 1;
6569
6570
    /* Multiplier */
6571
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6572
0
    *offset += 2;
6573
6574
    /* Divisor */
6575
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6576
0
    *offset += 2;
6577
6578
    /* Stabilisation Period */
6579
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period, tvb, *offset, 1, ENC_NA);
6580
0
    *offset += 1;
6581
6582
    /* Measurement Period */
6583
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6584
0
    *offset += 2;
6585
0
} /*dissect_zcl_met_set_uncontrolled_flow_threshold*/
6586
6587
/**
6588
 *This function manages the Get Profile Response payload
6589
 *
6590
 *@param tvb pointer to buffer containing raw packet.
6591
 *@param tree pointer to data tree Wireshark uses to display packet.
6592
 *@param offset pointer to offset from caller
6593
*/
6594
static void
6595
dissect_zcl_met_get_profile_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6596
0
{
6597
6598
    /* End Time */
6599
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_end_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6600
0
    *offset += 4;
6601
6602
    /* Status */
6603
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_status, tvb, *offset, 1, ENC_NA);
6604
0
    *offset += 1;
6605
6606
    /* Profile Interval Period */
6607
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_profile_interval_period, tvb, *offset, 1, ENC_NA);
6608
0
    *offset += 1;
6609
6610
    /* Number of Periods Delivered */
6611
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered, tvb, *offset, 1, ENC_NA);
6612
0
    *offset += 1;
6613
6614
    /* Intervals */
6615
0
    while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6616
0
        proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_intervals, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
6617
0
        *offset += 3;
6618
0
    }
6619
0
} /*dissect_zcl_met_get_profile_response*/
6620
6621
/**
6622
 *This function manages the Request Fast Poll Mode Response payload
6623
 *
6624
 *@param tvb pointer to buffer containing raw packet.
6625
 *@param tree pointer to data tree Wireshark uses to display packet.
6626
 *@param offset pointer to offset from caller
6627
*/
6628
static void
6629
dissect_zcl_met_request_fast_poll_mode_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6630
0
{
6631
    /* Applied Update Period */
6632
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period, tvb, *offset, 1, ENC_NA);
6633
0
    *offset += 1;
6634
6635
    /* Fast Poll End Time */
6636
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6637
0
    *offset += 4;
6638
0
} /*dissect_zcl_met_request_fast_poll_mode_response*/
6639
6640
/**
6641
 *This function manages the Schedule Snapshot Response payload
6642
 *
6643
 *@param tvb pointer to buffer containing raw packet.
6644
 *@param tree pointer to data tree Wireshark uses to display packet.
6645
 *@param offset pointer to offset from caller
6646
*/
6647
static void
6648
dissect_zcl_met_schedule_snapshot_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6649
0
{
6650
    /* Issuer Event ID */
6651
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6652
0
    *offset += 4;
6653
6654
0
    while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6655
0
        proto_tree *payload_tree;
6656
6657
0
        payload_tree = proto_tree_add_subtree(tree, tvb, *offset, 2,
6658
0
                ett_zbee_zcl_met_schedule_snapshot_response_payload, NULL, "Snapshot Response Payload");
6659
6660
        /* Snapshot Schedule ID */
6661
0
        proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id, tvb, *offset, 1, ENC_NA);
6662
0
        *offset += 1;
6663
6664
        /* Snapshot Schedule Confirmation */
6665
0
        proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation, tvb, *offset, 1, ENC_NA);
6666
0
        *offset += 1;
6667
0
    }
6668
0
} /*dissect_zcl_met_schedule_snapshot_response*/
6669
6670
/**
6671
 *This function manages the Take Snapshot Response payload
6672
 *
6673
 *@param tvb pointer to buffer containing raw packet.
6674
 *@param tree pointer to data tree Wireshark uses to display packet.
6675
 *@param offset pointer to offset from caller
6676
*/
6677
static void
6678
dissect_zcl_met_take_snapshot_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6679
0
{
6680
    /* Snapshot ID */
6681
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_take_snapshot_response_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6682
0
    *offset += 4;
6683
6684
    /* Snapshot Confirmation */
6685
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation, tvb, *offset, 1, ENC_NA);
6686
0
    *offset += 1;
6687
0
} /*dissect_zcl_met_take_snapshot_response*/
6688
6689
/**
6690
 *This function manages the Publish Snapshot payload
6691
 *
6692
 *@param tvb pointer to buffer containing raw packet.
6693
 *@param tree pointer to data tree Wireshark uses to display packet.
6694
 *@param offset pointer to offset from caller
6695
*/
6696
static void
6697
dissect_zcl_met_publish_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6698
0
{
6699
0
    int rem_len;
6700
6701
    /* Snapshot ID */
6702
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6703
0
    *offset += 4;
6704
6705
    /* Snapshot Time */
6706
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6707
0
    *offset += 4;
6708
6709
    /* Total Snapshots Found */
6710
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshots_found, tvb, *offset, 1, ENC_NA);
6711
0
    *offset += 1;
6712
6713
    /* Command Index */
6714
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_cmd_index, tvb, *offset, 1, ENC_NA);
6715
0
    *offset += 1;
6716
6717
    /* Total Number of Commands */
6718
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_total_commands, tvb, *offset, 1, ENC_NA);
6719
0
    *offset += 1;
6720
6721
    /* Snapshot Cause */
6722
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_publish_snapshot_snapshot_cause,
6723
0
                           ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6724
0
    *offset += 4;
6725
6726
    /* Snapshot Payload Type */
6727
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type, tvb, *offset, 1, ENC_NA);
6728
0
    *offset += 1;
6729
6730
    /* Snapshot Sub-Payload */
6731
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
6732
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload, tvb, *offset, rem_len, ENC_NA);
6733
0
    *offset += rem_len;
6734
0
} /*dissect_zcl_met_publish_snapshot*/
6735
6736
/**
6737
 *This function manages the Get Sampled Data Response payload
6738
 *
6739
 *@param tvb pointer to buffer containing raw packet.
6740
 *@param tree pointer to data tree Wireshark uses to display packet.
6741
 *@param offset pointer to offset from caller
6742
*/
6743
static void
6744
dissect_zcl_met_get_sampled_data_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6745
2
{
6746
2
    int rem_len;
6747
6748
    /* Snapshot ID */
6749
2
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6750
2
    *offset += 2;
6751
6752
    /* Sample Start Time */
6753
2
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6754
2
    *offset += 4;
6755
6756
    /* Sample Type */
6757
2
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_type, tvb, *offset, 1, ENC_NA);
6758
2
    *offset += 1;
6759
6760
    /* Sample Request Interval */
6761
2
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6762
2
    *offset += 2;
6763
6764
    /* Number of Samples */
6765
2
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6766
2
    *offset += 2;
6767
6768
    /* Samples */
6769
2
    rem_len = tvb_reported_length_remaining(tvb, *offset);
6770
40
    while (rem_len >= 3) {
6771
38
        uint32_t val = tvb_get_uint24(tvb, *offset, ENC_LITTLE_ENDIAN);
6772
38
        proto_tree_add_uint(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples, tvb, *offset, 3, val);
6773
38
        *offset += 3;
6774
38
        rem_len -= 3;
6775
38
    }
6776
2
} /*dissect_zcl_met_get_sampled_data_rsp*/
6777
6778
/**
6779
 *This function manages the Configure Mirror payload
6780
 *
6781
 *@param tvb pointer to buffer containing raw packet.
6782
 *@param tree pointer to data tree Wireshark uses to display packet.
6783
 *@param offset pointer to offset from caller
6784
*/
6785
static void
6786
dissect_zcl_met_configure_mirror(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6787
1
{
6788
    /* Issuer Event ID */
6789
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6790
1
    *offset += 4;
6791
6792
    /* Reporting Interval */
6793
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_reporting_interval, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
6794
1
    *offset += 3;
6795
6796
    /* Mirror Notification Reporting */
6797
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting, tvb, *offset, 1, ENC_NA);
6798
1
    *offset += 1;
6799
6800
    /* Notification Scheme */
6801
1
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_notification_scheme, tvb, *offset, 1, ENC_NA);
6802
1
    *offset += 1;
6803
1
} /*dissect_zcl_met_configure_mirror*/
6804
6805
/**
6806
 *This function manages the Configure Notification Scheme payload
6807
 *
6808
 *@param tvb pointer to buffer containing raw packet.
6809
 *@param tree pointer to data tree Wireshark uses to display packet.
6810
 *@param offset pointer to offset from caller
6811
*/
6812
static void
6813
dissect_zcl_met_configure_notification_scheme(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6814
0
{
6815
    /* Issuer Event ID */
6816
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6817
0
    *offset += 4;
6818
6819
    /* Notification Scheme */
6820
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_notification_scheme, tvb, *offset, 1, ENC_NA);
6821
0
    *offset += 1;
6822
6823
    /* Notification Flag Order */
6824
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6825
0
    *offset += 4;
6826
0
} /*dissect_zcl_met_configure_notification_scheme*/
6827
6828
/**
6829
 *This function manages the Configure Notification Flags payload
6830
 *
6831
 *@param tvb pointer to buffer containing raw packet.
6832
 *@param tree pointer to data tree Wireshark uses to display packet.
6833
 *@param offset pointer to offset from caller
6834
*/
6835
static void
6836
dissect_zcl_met_configure_notification_flags(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6837
0
{
6838
0
    proto_tree *bit_field_allocation_tree;
6839
0
    int rem_len;
6840
6841
    /* Issuer Event ID */
6842
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6843
0
    *offset += 4;
6844
6845
    /* Notification Scheme */
6846
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_notification_scheme, tvb, *offset, 1, ENC_NA);
6847
0
    *offset += 1;
6848
6849
    /* Notification Attribute ID */
6850
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6851
0
    *offset += 2;
6852
6853
0
    bit_field_allocation_tree = proto_tree_add_subtree(tree, tvb, *offset, -1, ett_zbee_zcl_met_bit_field_allocation, NULL, "Bit Field Allocation");
6854
6855
    /* Cluster ID */
6856
0
    proto_tree_add_item(bit_field_allocation_tree, hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_cluster_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6857
0
    *offset += 2;
6858
6859
    /* Manufacturer Code */
6860
0
    proto_tree_add_item(bit_field_allocation_tree, hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_manufacturer_code, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6861
0
    *offset += 2;
6862
6863
    /* No. of Commands */
6864
0
    proto_tree_add_item(bit_field_allocation_tree, hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_no_of_commands, tvb, *offset, 1, ENC_NA);
6865
0
    *offset += 1;
6866
6867
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
6868
0
    while (rem_len >= 1) {
6869
        /* Command Identifier */
6870
0
        proto_tree_add_item(bit_field_allocation_tree, hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_command_identifier, tvb, *offset, 1, ENC_NA);
6871
0
        *offset += 1;
6872
0
        rem_len -= 1;
6873
0
    }
6874
0
} /*dissect_zcl_met_configure_notification_flags*/
6875
6876
static void
6877
dissect_zcl_met_notification_flags(tvbuff_t *tvb, proto_tree *tree, unsigned *offset, uint16_t noti_flags_number)
6878
0
{
6879
    /* Notification Flags #N */
6880
0
    switch (noti_flags_number) {
6881
0
        case ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS:
6882
0
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_func_noti_flags, ett_zbee_zcl_met_func_noti_flags, zbee_zcl_met_func_noti_flags, ENC_LITTLE_ENDIAN);
6883
0
            break;
6884
0
        case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2:
6885
0
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_2, ett_zbee_zcl_met_noti_flags_2, zbee_zcl_met_noti_flags_2, ENC_LITTLE_ENDIAN);
6886
0
            break;
6887
0
        case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3:
6888
0
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_3, ett_zbee_zcl_met_noti_flags_3, zbee_zcl_met_noti_flags_3, ENC_LITTLE_ENDIAN);
6889
0
            break;
6890
0
        case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4:
6891
0
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_4, ett_zbee_zcl_met_noti_flags_4, zbee_zcl_met_noti_flags_4, ENC_LITTLE_ENDIAN);
6892
0
            break;
6893
0
        case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5:
6894
0
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_noti_flags_5, ett_zbee_zcl_met_noti_flags_5, zbee_zcl_met_noti_flags_5, ENC_LITTLE_ENDIAN);
6895
0
            break;
6896
0
        default:
6897
0
            proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_flags, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6898
0
            break;
6899
0
    }
6900
0
    *offset += 4;
6901
6902
0
}
6903
6904
/**
6905
 *This function manages the Get Notified Message payload
6906
 *
6907
 *@param tvb pointer to buffer containing raw packet.
6908
 *@param tree pointer to data tree Wireshark uses to display packet.
6909
 *@param offset pointer to offset from caller
6910
*/
6911
static void
6912
dissect_zcl_met_get_notified_msg(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6913
0
{
6914
0
    uint16_t noti_flags_number;
6915
6916
    /* Notification Scheme */
6917
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_scheme, tvb, *offset, 1, ENC_NA);
6918
0
    *offset += 1;
6919
6920
    /* Notification Flag attribute ID */
6921
0
    noti_flags_number = tvb_get_uint16(tvb, *offset, ENC_LITTLE_ENDIAN);
6922
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6923
0
    *offset += 2;
6924
6925
0
    dissect_zcl_met_notification_flags(tvb, tree, offset, noti_flags_number);
6926
0
} /*dissect_zcl_met_get_notified_msg*/
6927
6928
/**
6929
 *This function manages the Supply Status Response payload
6930
 *
6931
 *@param tvb pointer to buffer containing raw packet.
6932
 *@param tree pointer to data tree Wireshark uses to display packet.
6933
 *@param offset pointer to offset from caller
6934
*/
6935
static void
6936
dissect_zcl_met_supply_status_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6937
0
{
6938
    /* Provider ID */
6939
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6940
0
    *offset += 4;
6941
6942
    /* Issuer Event ID */
6943
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6944
0
    *offset += 4;
6945
6946
    /* Implementation Date/Time */
6947
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6948
0
    *offset += 4;
6949
6950
    /* Supply Status After Implementation */
6951
0
    proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation, tvb, *offset, 1, ENC_NA);
6952
0
    *offset += 1;
6953
0
} /*dissect_zcl_met_supply_status_response*/
6954
6955
/**
6956
 *This function registers the ZCL Metering dissector
6957
 *
6958
*/
6959
void
6960
proto_register_zbee_zcl_met(void)
6961
15
{
6962
15
    static hf_register_info hf[] = {
6963
6964
15
        { &hf_zbee_zcl_met_attr_server_id,
6965
15
            { "Attribute", "zbee_zcl_se.met.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_met_attr_server_names_ext,
6966
15
            0x0, NULL, HFILL } },
6967
6968
15
        { &hf_zbee_zcl_met_attr_client_id,
6969
15
            { "Attribute", "zbee_zcl_se.met.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_met_attr_client_names),
6970
15
            0x0, NULL, HFILL } },
6971
6972
15
        { &hf_zbee_zcl_met_attr_reporting_status,                         /* common to all SE clusters */
6973
15
            { "Attribute Reporting Status", "zbee_zcl_se.met.attr.attr_reporting_status",
6974
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
6975
6976
        /* Functional Notification Flags */
6977
15
        { &hf_zbee_zcl_met_func_noti_flags,
6978
15
            { "Functional Notification Flags", "zbee_zcl_se.met.attr.func_noti_flag", FT_UINT32, BASE_HEX, NULL,
6979
15
            0x00, NULL, HFILL } },
6980
6981
15
        { &hf_zbee_zcl_met_func_noti_flag_new_ota_firmware,
6982
15
            { "New OTA Firmware", "zbee_zcl_se.met.attr.func_noti_flag.new_ota_firmware", FT_BOOLEAN, 32, NULL,
6983
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_OTA_FIRMWARE, NULL, HFILL } },
6984
6985
15
        { &hf_zbee_zcl_met_func_noti_flag_cbke_update_request,
6986
15
            { "CBKE Update Request", "zbee_zcl_se.met.attr.func_noti_flag.cbke_update_request", FT_BOOLEAN, 32, NULL,
6987
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_CBKE_UPDATE_REQUESTED, NULL, HFILL } },
6988
6989
15
        { &hf_zbee_zcl_met_func_noti_flag_time_sync,
6990
15
            { "Time Sync", "zbee_zcl_se.met.attr.func_noti_flag.time_sync", FT_BOOLEAN, 32, NULL,
6991
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_TIME_SYNC, NULL, HFILL } },
6992
6993
15
        { &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han,
6994
15
            { "Stay Awake Request HAN", "zbee_zcl_se.met.attr.func_noti_flag.stay_awake_request_han", FT_BOOLEAN, 32, NULL,
6995
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_HAN, NULL, HFILL } },
6996
6997
15
        { &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan,
6998
15
            { "Stay Awake Request WAN", "zbee_zcl_se.met.attr.func_noti_flag.stay_awake_request_wan", FT_BOOLEAN, 32, NULL,
6999
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_WAN, NULL, HFILL } },
7000
7001
15
        { &hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set,
7002
15
            { "Push Historical Metering Data Attribute Set", "zbee_zcl_se.met.attr.func_noti_flag.push_historical_metering_data_attribute_set", FT_UINT32, BASE_HEX, NULL,
7003
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET, NULL, HFILL } },
7004
7005
15
        { &hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set,
7006
15
            { "Push Historical Prepayment Data Attribute Set", "zbee_zcl_se.met.attr.func_noti_flag.push_historical_prepayment_data_attribute_set", FT_UINT32, BASE_HEX, NULL,
7007
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET, NULL, HFILL } },
7008
7009
15
        { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster,
7010
15
            { "Push All Static Data - Basic Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_basic_cluster", FT_BOOLEAN, 32, NULL,
7011
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER, NULL, HFILL } },
7012
7013
15
        { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster,
7014
15
            { "Push All Static Data - Metering Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_metering_cluster", FT_BOOLEAN, 32, NULL,
7015
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_METERING_CLUSTER, NULL, HFILL } },
7016
7017
15
        { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster,
7018
15
            { "Push All Static Data - Prepayment Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_prepayment_cluster", FT_BOOLEAN, 32, NULL,
7019
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER, NULL, HFILL } },
7020
7021
15
        { &hf_zbee_zcl_met_func_noti_flag_network_key_active,
7022
15
            { "Network Key Active", "zbee_zcl_se.met.attr.func_noti_flag.network_key_active", FT_BOOLEAN, 32, NULL,
7023
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_NETWORK_KEY_ACTIVE, NULL, HFILL } },
7024
7025
15
        { &hf_zbee_zcl_met_func_noti_flag_display_message,
7026
15
            { "Display Message", "zbee_zcl_se.met.attr.func_noti_flag.display_message", FT_BOOLEAN, 32, NULL,
7027
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_DISPLAY_MESSAGE, NULL, HFILL } },
7028
7029
15
        { &hf_zbee_zcl_met_func_noti_flag_cancel_all_messages,
7030
15
            { "Cancel All Messages", "zbee_zcl_se.met.attr.func_noti_flag.cancel_all_messages", FT_BOOLEAN, 32, NULL,
7031
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_CANCEL_ALL_MESSAGES, NULL, HFILL } },
7032
7033
15
        { &hf_zbee_zcl_met_func_noti_flag_change_supply,
7034
15
            { "Change Supply", "zbee_zcl_se.met.attr.func_noti_flag.change_supply", FT_BOOLEAN, 32, NULL,
7035
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_CHANGE_SUPPLY, NULL, HFILL } },
7036
7037
15
        { &hf_zbee_zcl_met_func_noti_flag_local_change_supply,
7038
15
            { "Local Change Supply", "zbee_zcl_se.met.attr.func_noti_flag.local_change_supply", FT_BOOLEAN, 32, NULL,
7039
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_LOCAL_CHANGE_SUPPLY, NULL, HFILL } },
7040
7041
15
        { &hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold,
7042
15
            { "Set Uncontrolled Flow Threshold", "zbee_zcl_se.met.attr.func_noti_flag.set_uncontrolled_flow_threshold", FT_BOOLEAN, 32, NULL,
7043
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_SET_UNCONTROLLED_FLOW_THRESHOLD, NULL, HFILL } },
7044
7045
15
        { &hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending,
7046
15
            { "Tunnel Message Pending", "zbee_zcl_se.met.attr.func_noti_flag.tunnel_message_pending", FT_BOOLEAN, 32, NULL,
7047
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_TUNNEL_MESSAGE_PENDING, NULL, HFILL } },
7048
7049
15
        { &hf_zbee_zcl_met_func_noti_flag_get_snapshot,
7050
15
            { "Get Snapshot", "zbee_zcl_se.met.attr.func_noti_flag.get_snapshot", FT_BOOLEAN, 32, NULL,
7051
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SNAPSHOT, NULL, HFILL } },
7052
7053
15
        { &hf_zbee_zcl_met_func_noti_flag_get_sampled_data,
7054
15
            { "Get Sampled Data", "zbee_zcl_se.met.attr.func_noti_flag.get_sampled_data", FT_BOOLEAN, 32, NULL,
7055
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SAMPLED_DATA, NULL, HFILL } },
7056
7057
15
        { &hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available,
7058
15
            { "New Sub-GHz Channel Masks Available", "zbee_zcl_se.met.attr.func_noti_flag.new_sub_ghz_channel_masks_available", FT_BOOLEAN, 32, NULL,
7059
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE, NULL, HFILL } },
7060
7061
15
        { &hf_zbee_zcl_met_func_noti_flag_energy_scan_pending,
7062
15
            { "Energy Scan Pending", "zbee_zcl_se.met.attr.func_noti_flag.energy_scan_pending", FT_BOOLEAN, 32, NULL,
7063
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_ENERGY_SCAN_PENDING, NULL, HFILL } },
7064
7065
15
        { &hf_zbee_zcl_met_func_noti_flag_channel_change_pending,
7066
15
            { "Channel Change Pending", "zbee_zcl_se.met.attr.func_noti_flag.channel_change_pending", FT_BOOLEAN, 32, NULL,
7067
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_CHANNEL_CHANGE_PENDING, NULL, HFILL } },
7068
7069
15
        { &hf_zbee_zcl_met_func_noti_flag_reserved,
7070
15
            { "Reserved", "zbee_zcl_se.met.attr.func_noti_flag.reserved", FT_UINT32, BASE_HEX, NULL,
7071
15
            ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_1 | ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_2, NULL, HFILL } },
7072
7073
        /* Notification Flags 2 */
7074
15
        { &hf_zbee_zcl_met_noti_flags_2,
7075
15
            { "Notification Flags 2", "zbee_zcl_se.met.attr.noti_flag_2", FT_UINT32, BASE_HEX, NULL,
7076
15
            0x00, NULL, HFILL } },
7077
7078
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_price,
7079
15
            { "Publish Price", "zbee_zcl_se.met.attr.noti_flag_2.publish_price", FT_BOOLEAN, 32, NULL,
7080
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE, NULL, HFILL } },
7081
7082
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_block_period,
7083
15
            { "Publish Block Period", "zbee_zcl_se.met.attr.noti_flag_2.publish_block_period", FT_BOOLEAN, 32, NULL,
7084
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_PERIOD, NULL, HFILL } },
7085
7086
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_tariff_info,
7087
15
            { "Publish Tariff Information", "zbee_zcl_se.met.attr.noti_flag_2.publish_tariff_info", FT_BOOLEAN, 32, NULL,
7088
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TARIFF_INFORMATION, NULL, HFILL } },
7089
7090
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor,
7091
15
            { "Publish Conversion Factor", "zbee_zcl_se.met.attr.noti_flag_2.publish_conversion_factor", FT_BOOLEAN, 32, NULL,
7092
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONVERSION_FACTOR, NULL, HFILL } },
7093
7094
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_calorific_value,
7095
15
            { "Publish Calorific Value", "zbee_zcl_se.met.attr.noti_flag_2.publish_calorific_value", FT_BOOLEAN, 32, NULL,
7096
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CALORIFIC_VALUE, NULL, HFILL } },
7097
7098
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_co2_value,
7099
15
            { "Publish CO2 Value", "zbee_zcl_se.met.attr.noti_flag_2.publish_co2_value", FT_BOOLEAN, 32, NULL,
7100
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CO2_VALUE, NULL, HFILL } },
7101
7102
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_billing_period,
7103
15
            { "Publish Billing Period", "zbee_zcl_se.met.attr.noti_flag_2.publish_billing_period", FT_BOOLEAN, 32, NULL,
7104
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BILLING_PERIOD, NULL, HFILL } },
7105
7106
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill,
7107
15
            { "Publish Consolidated Bill", "zbee_zcl_se.met.attr.noti_flag_2.publish_consolidated_bill", FT_BOOLEAN, 32, NULL,
7108
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONSOLIDATED_BILL, NULL, HFILL } },
7109
7110
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_price_matrix,
7111
15
            { "Publish Price Matrix", "zbee_zcl_se.met.attr.noti_flag_2.publish_price_matrix", FT_BOOLEAN, 32, NULL,
7112
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE_MATRIX, NULL, HFILL } },
7113
7114
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds,
7115
15
            { "Publish Block Thresholds", "zbee_zcl_se.met.attr.noti_flag_2.publish_block_thresholds", FT_BOOLEAN, 32, NULL,
7116
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_THRESHOLDS, NULL, HFILL } },
7117
7118
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion,
7119
15
            { "Publish Currency Conversion", "zbee_zcl_se.met.attr.noti_flag_2.publish_currency_conversion", FT_BOOLEAN, 32, NULL,
7120
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CURRENCY_CONVERSION, NULL, HFILL } },
7121
7122
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info,
7123
15
            { "Publish Credit Payment Info", "zbee_zcl_se.met.attr.noti_flag_2.publish_credit_payment_info", FT_BOOLEAN, 32, NULL,
7124
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CREDIT_PAYMENT_INFO, NULL, HFILL } },
7125
7126
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_cpp_event,
7127
15
            { "Publish CPP Event", "zbee_zcl_se.met.attr.noti_flag_2.publish_cpp_event", FT_BOOLEAN, 32, NULL,
7128
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CPP_EVENT, NULL, HFILL } },
7129
7130
15
        { &hf_zbee_zcl_met_noti_flag_2_publish_tier_labels,
7131
15
            { "Publish Tier Labels", "zbee_zcl_se.met.attr.noti_flag_2.publish_tier_labels", FT_BOOLEAN, 32, NULL,
7132
15
            ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TIER_LABELS, NULL, HFILL } },
7133
7134
15
        { &hf_zbee_zcl_met_noti_flag_2_cancel_tariff,
7135
15
            { "Cancel Tariff", "zbee_zcl_se.met.attr.noti_flag_2.cancel_tariff", FT_BOOLEAN, 32, NULL,
7136
15
            ZBEE_ZCL_NOTI_FLAG_2_CANCEL_TARIFF, NULL, HFILL } },
7137
7138
15
        { &hf_zbee_zcl_met_noti_flag_2_reserved,
7139
15
            { "Reserved", "zbee_zcl_se.met.attr.noti_flag_2.reserved", FT_UINT32, BASE_HEX, NULL,
7140
15
            ZBEE_ZCL_NOTI_FLAG_2_RESERVED | ZBEE_ZCL_NOTI_FLAG_2_RESERVED_FUTURE, NULL, HFILL } },
7141
7142
        /* Notification Flags 3 */
7143
15
        { &hf_zbee_zcl_met_noti_flags_3,
7144
15
            { "Notification Flags 3", "zbee_zcl_se.met.attr.noti_flag_3", FT_UINT32, BASE_HEX, NULL,
7145
15
            0x00, NULL, HFILL } },
7146
7147
15
        { &hf_zbee_zcl_met_noti_flag_3_publish_calendar,
7148
15
            { "Publish Calendar", "zbee_zcl_se.met.attr.noti_flag_3.publish_calendar", FT_BOOLEAN, 32, NULL,
7149
15
            ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_CALENDAR, NULL, HFILL } },
7150
7151
15
        { &hf_zbee_zcl_met_noti_flag_3_publish_special_days,
7152
15
            { "Publish Special Days", "zbee_zcl_se.met.attr.noti_flag_3.publish_special_days", FT_BOOLEAN, 32, NULL,
7153
15
            ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SPECIAL_DAYS, NULL, HFILL } },
7154
7155
15
        { &hf_zbee_zcl_met_noti_flag_3_publish_seasons,
7156
15
            { "Publish Seasons", "zbee_zcl_se.met.attr.noti_flag_3.publish_seasons", FT_BOOLEAN, 32, NULL,
7157
15
            ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SEASONS, NULL, HFILL } },
7158
7159
15
        { &hf_zbee_zcl_met_noti_flag_3_publish_week,
7160
15
            { "Publish Week", "zbee_zcl_se.met.attr.noti_flag_3.publish_week", FT_BOOLEAN, 32, NULL,
7161
15
            ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_WEEK, NULL, HFILL } },
7162
7163
15
        { &hf_zbee_zcl_met_noti_flag_3_publish_day,
7164
15
            { "Publish Day", "zbee_zcl_se.met.attr.noti_flag_3.publish_day", FT_BOOLEAN, 32, NULL,
7165
15
            ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_DAY, NULL, HFILL } },
7166
7167
15
        { &hf_zbee_zcl_met_noti_flag_3_cancel_calendar,
7168
15
            { "Cancel Calendar", "zbee_zcl_se.met.attr.noti_flag_3.cancel_calendar", FT_BOOLEAN, 32, NULL,
7169
15
            ZBEE_ZCL_NOTI_FLAG_3_CANCEL_DAY, NULL, HFILL } },
7170
7171
15
        { &hf_zbee_zcl_met_noti_flag_3_reserved,
7172
15
            { "Reserved", "zbee_zcl_se.met.attr.noti_flag_3.reserved", FT_UINT32, BASE_HEX, NULL,
7173
15
            ZBEE_ZCL_NOTI_FLAG_3_RESERVED , NULL, HFILL } },
7174
7175
        /* Notification Flags 4 */
7176
15
        { &hf_zbee_zcl_met_noti_flags_4,
7177
15
            { "Notification Flags 4", "zbee_zcl_se.met.attr.noti_flag_4", FT_UINT32, BASE_HEX, NULL,
7178
15
            0x00, NULL, HFILL } },
7179
7180
15
        { &hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit,
7181
15
            { "Select Available Emergency Credit", "zbee_zcl_se.met.attr.noti_flag_4.select_available_emergency_credit", FT_BOOLEAN, 32, NULL,
7182
15
            ZBEE_ZCL_NOTI_FLAG_4_SELECT_AVAILABLE_EMERGENCY_CREDIT, NULL, HFILL } },
7183
7184
15
        { &hf_zbee_zcl_met_noti_flag_4_change_debt,
7185
15
            { "Change Debt", "zbee_zcl_se.met.attr.noti_flag_4.change_debt", FT_BOOLEAN, 32, NULL,
7186
15
            ZBEE_ZCL_NOTI_FLAG_4_CHANGE_DEBT, NULL, HFILL } },
7187
7188
15
        { &hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup,
7189
15
            { "Emergency Credit Setup", "zbee_zcl_se.met.attr.noti_flag_4.emergency_credit_setup", FT_BOOLEAN, 32, NULL,
7190
15
            ZBEE_ZCL_NOTI_FLAG_4_EMERGENCY_CREDIT_SETUP, NULL, HFILL } },
7191
7192
15
        { &hf_zbee_zcl_met_noti_flag_4_consumer_top_up,
7193
15
            { "Consumer Top Up", "zbee_zcl_se.met.attr.noti_flag_4.consumer_top_up", FT_BOOLEAN, 32, NULL,
7194
15
            ZBEE_ZCL_NOTI_FLAG_4_CONSUMER_TOP_UP, NULL, HFILL } },
7195
7196
15
        { &hf_zbee_zcl_met_noti_flag_4_credit_adjustment,
7197
15
            { "Credit Adjustment", "zbee_zcl_se.met.attr.noti_flag_4.credit_adjustment", FT_BOOLEAN, 32, NULL,
7198
15
            ZBEE_ZCL_NOTI_FLAG_4_CREDIT_ADJUSTMENT, NULL, HFILL } },
7199
7200
15
        { &hf_zbee_zcl_met_noti_flag_4_change_payment_mode,
7201
15
            { "Change Payment Mode", "zbee_zcl_se.met.attr.noti_flag_4.change_payment_mode", FT_BOOLEAN, 32, NULL,
7202
15
            ZBEE_ZCL_NOTI_FLAG_4_CHANGE_PAYMENT_MODE, NULL, HFILL } },
7203
7204
15
        { &hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot,
7205
15
            { "Get Prepay Snapshot", "zbee_zcl_se.met.attr.noti_flag_4.get_prepay_snapshot", FT_BOOLEAN, 32, NULL,
7206
15
            ZBEE_ZCL_NOTI_FLAG_4_GET_PREPAY_SNAPSHOT, NULL, HFILL } },
7207
7208
15
        { &hf_zbee_zcl_met_noti_flag_4_get_top_up_log,
7209
15
            { "Get Top Up Log", "zbee_zcl_se.met.attr.noti_flag_4.get_top_up_log", FT_BOOLEAN, 32, NULL,
7210
15
            ZBEE_ZCL_NOTI_FLAG_4_GET_TOP_UP_LOG, NULL, HFILL } },
7211
7212
15
        { &hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level,
7213
15
            { "Set Low Credit Warning Level", "zbee_zcl_se.met.attr.noti_flag_4.set_low_credit_warning_level", FT_BOOLEAN, 32, NULL,
7214
15
            ZBEE_ZCL_NOTI_FLAG_4_SET_LOW_CREDIT_WARNING_LEVEL, NULL, HFILL } },
7215
7216
15
        { &hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log,
7217
15
            { "Get Debt Repayment Log", "zbee_zcl_se.met.attr.noti_flag_4.get_debt_repayment_log", FT_BOOLEAN, 32, NULL,
7218
15
            ZBEE_ZCL_NOTI_FLAG_4_GET_DEBT_REPAYMENT_LOG, NULL, HFILL } },
7219
7220
15
        { &hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit,
7221
15
            { "Set Maximum Credit Limit", "zbee_zcl_se.met.attr.noti_flag_4.set_maximum_credit_limit", FT_BOOLEAN, 32, NULL,
7222
15
            ZBEE_ZCL_NOTI_FLAG_4_SET_MAXIMUM_CREDIT_LIMIT, NULL, HFILL } },
7223
7224
15
        { &hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap,
7225
15
            { "Set Overall Debt Cap", "zbee_zcl_se.met.attr.noti_flag_4.set_overall_debt_cap", FT_BOOLEAN, 32, NULL,
7226
15
            ZBEE_ZCL_NOTI_FLAG_4_SET_OVERALL_DEBT_CAP, NULL, HFILL } },
7227
7228
15
        { &hf_zbee_zcl_met_noti_flag_4_reserved,
7229
15
            { "Reserved", "zbee_zcl_se.met.attr.noti_flag_4.reserved", FT_UINT32, BASE_HEX, NULL,
7230
15
            ZBEE_ZCL_NOTI_FLAG_4_RESERVED, NULL, HFILL } },
7231
7232
        /* Notification Flags 5 */
7233
15
        { &hf_zbee_zcl_met_noti_flags_5,
7234
15
            { "Notification Flags 5", "zbee_zcl_se.met.attr.noti_flag_5", FT_UINT32, BASE_HEX, NULL,
7235
15
            0x00, NULL, HFILL } },
7236
7237
15
        { &hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy,
7238
15
            { "Publish Change of Tenancy", "zbee_zcl_se.met.attr.noti_flag_5.publish_change_of_tenancy", FT_BOOLEAN, 32, NULL,
7239
15
            ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_TENANCY, NULL, HFILL } },
7240
7241
15
        { &hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier,
7242
15
            { "Publish Change of Supplier", "zbee_zcl_se.met.attr.noti_flag_5.publish_change_of_supplier", FT_BOOLEAN, 32, NULL,
7243
15
            ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_SUPPLIER, NULL, HFILL } },
7244
7245
15
        { &hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response,
7246
15
            { "Request New Password 1 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_1_response", FT_BOOLEAN, 32, NULL,
7247
15
            ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_1_RESPONSE, NULL, HFILL } },
7248
7249
15
        { &hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response,
7250
15
            { "Request New Password 2 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_2_response", FT_BOOLEAN, 32, NULL,
7251
15
            ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_2_RESPONSE, NULL, HFILL } },
7252
7253
15
        { &hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response,
7254
15
            { "Request New Password 3 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_3_response", FT_BOOLEAN, 32, NULL,
7255
15
            ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_3_RESPONSE, NULL, HFILL } },
7256
7257
15
        { &hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response,
7258
15
            { "Request New Password 4 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_4_response", FT_BOOLEAN, 32, NULL,
7259
15
            ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_4_RESPONSE, NULL, HFILL } },
7260
7261
15
        { &hf_zbee_zcl_met_noti_flag_5_update_site_id,
7262
15
            { "Update Site ID", "zbee_zcl_se.met.attr.noti_flag_5.update_site_id", FT_BOOLEAN, 32, NULL,
7263
15
            ZBEE_ZCL_NOTI_FLAG_5_UPDATE_SITE_ID, NULL, HFILL } },
7264
7265
15
        { &hf_zbee_zcl_met_noti_flag_5_reset_battery_counter,
7266
15
            { "Reset Battery Counter", "zbee_zcl_se.met.attr.noti_flag_5.reset_battery_counter", FT_BOOLEAN, 32, NULL,
7267
15
            ZBEE_ZCL_NOTI_FLAG_5_RESET_BATTERY_COUNTER, NULL, HFILL } },
7268
7269
15
        { &hf_zbee_zcl_met_noti_flag_5_update_cin,
7270
15
            { "Update CIN", "zbee_zcl_se.met.attr.noti_flag_5.update_cin", FT_BOOLEAN, 32, NULL,
7271
15
            ZBEE_ZCL_NOTI_FLAG_5_UPDATE_CIN, NULL, HFILL } },
7272
7273
15
        { &hf_zbee_zcl_met_noti_flag_5_reserved,
7274
15
            { "Reserved", "zbee_zcl_se.met.attr.noti_flag_5.reserved", FT_UINT32, BASE_HEX, NULL,
7275
15
            ZBEE_ZCL_NOTI_FLAG_5_RESERVED, NULL, HFILL } },
7276
7277
15
        { &hf_zbee_zcl_met_srv_tx_cmd_id,
7278
15
            { "Command", "zbee_zcl_se.met.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_srv_tx_cmd_names),
7279
15
            0x00, NULL, HFILL } },
7280
7281
15
        { &hf_zbee_zcl_met_srv_rx_cmd_id,
7282
15
            { "Command", "zbee_zcl_se.met.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_srv_rx_cmd_names),
7283
15
            0x00, NULL, HFILL } },
7284
7285
15
        { &hf_zbee_zcl_met_get_profile_interval_channel,
7286
15
            { "Interval Channel", "zbee_zcl_se.met.get_profile.interval_channel", FT_UINT8, BASE_DEC, NULL,
7287
15
            0x00, NULL, HFILL } },
7288
7289
15
        { &hf_zbee_zcl_met_get_profile_end_time,
7290
15
            { "End Time", "zbee_zcl_se.met.get_profile.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7291
15
            0x00, NULL, HFILL } },
7292
7293
15
        { &hf_zbee_zcl_met_get_profile_number_of_periods,
7294
15
            { "Number of Periods", "zbee_zcl_se.met.get_profile.number_of_periods", FT_UINT8, BASE_DEC, NULL,
7295
15
            0x00, NULL, HFILL } },
7296
7297
15
        { &hf_zbee_zcl_met_request_mirror_rsp_endpoint_id,
7298
15
            { "EndPoint ID", "zbee_zcl_se.met.request_mirror_rsp.endpoint_id", FT_UINT16, BASE_DEC, NULL,
7299
15
            0x00, NULL, HFILL } },
7300
7301
15
        { &hf_zbee_zcl_met_mirror_removed_removed_endpoint_id,
7302
15
            { "Removed EndPoint ID", "zbee_zcl_se.met.mirror_removed.removed_endpoint_id", FT_UINT16, BASE_DEC, NULL,
7303
15
            0x00, NULL, HFILL } },
7304
7305
15
        { &hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period,
7306
15
            { "Fast Poll Update Period", "zbee_zcl_se.met.request_fast_poll_mode.fast_poll_update_period", FT_UINT8, BASE_DEC, NULL,
7307
15
            0x00, NULL, HFILL } },
7308
7309
15
        { &hf_zbee_zcl_met_request_fast_poll_mode_duration,
7310
15
            { "Duration", "zbee_zcl_se.met.request_fast_poll_mode.duration", FT_UINT8, BASE_DEC, NULL,
7311
15
            0x00, NULL, HFILL } },
7312
7313
15
        { &hf_zbee_zcl_met_schedule_snapshot_issuer_event_id,
7314
15
            { "Issuer Event ID", "zbee_zcl_se.met.schedule_snapshot.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7315
15
            0x00, NULL, HFILL } },
7316
7317
15
        { &hf_zbee_zcl_met_schedule_snapshot_command_index,
7318
15
            { "Command Index", "zbee_zcl_se.met.schedule_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
7319
15
            0x00, NULL, HFILL } },
7320
7321
15
        { &hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands,
7322
15
            { "Total Number of Commands", "zbee_zcl_se.met.schedule_snapshot.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
7323
15
            0x00, NULL, HFILL } },
7324
7325
15
        { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id,
7326
15
            { "Snapshot Schedule ID", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_schedule_id", FT_UINT8, BASE_DEC, NULL,
7327
15
            0x00, NULL, HFILL } },
7328
7329
15
        { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_start_time,
7330
15
            { "Snapshot Start Time", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7331
15
            0x00, NULL, HFILL } },
7332
7333
15
        { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule,
7334
15
            { "Snapshot Schedule", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_schedule", FT_UINT24, BASE_HEX, NULL,
7335
15
            0x00, NULL, HFILL } },
7336
7337
15
        { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type,
7338
15
            { "Snapshot Payload Type", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_payload_type",
7339
15
                FT_UINT8, BASE_DEC, VALS(zbee_zcl_met_snapshot_payload_type),
7340
15
            0x00, NULL, HFILL } },
7341
7342
15
        { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause,
7343
15
            { "Snapshot Cause", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7344
15
            0x00, NULL, HFILL } },
7345
7346
15
        { &hf_zbee_zcl_met_snapshot_schedule_frequency,
7347
15
            { "Snapshot Schedule Frequency", "zbee_zcl_se.met.snapshot_schedule.frequency",
7348
15
                FT_UINT24, BASE_DEC, NULL,
7349
15
            0x0FFFFF, NULL, HFILL } },
7350
7351
15
        { &hf_zbee_zcl_met_snapshot_schedule_frequency_type,
7352
15
            { "Snapshot Schedule Frequency Type", "zbee_zcl_se.met.snapshot_schedule.frequency_type",
7353
15
                FT_UINT24, BASE_HEX, VALS(zbee_zcl_met_snapshot_schedule_frequency_type),
7354
15
            0x300000, NULL, HFILL } },
7355
7356
15
        { &hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card,
7357
15
            { "Snapshot Schedule Frequency Wild Card", "zbee_zcl_se.met.snapshot_schedule.frequency_wild_card",
7358
15
                FT_UINT24, BASE_HEX,VALS(zbee_zcl_met_snapshot_schedule_frequency_wild_card),
7359
15
            0xC00000, NULL, HFILL } },
7360
7361
15
        { &hf_zbee_zcl_met_take_snapshot_snapshot_cause,
7362
15
            { "Snapshot Cause", "zbee_zcl_se.met.take_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7363
15
            0x00, NULL, HFILL } },
7364
7365
15
        { &hf_zbee_zcl_met_get_snapshot_start_time,
7366
15
            { "Start Time", "zbee_zcl_se.met.get_snapshot.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7367
15
            0x00, NULL, HFILL } },
7368
7369
15
        { &hf_zbee_zcl_met_get_snapshot_end_time,
7370
15
            { "End Time", "zbee_zcl_se.met.get_snapshot.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7371
15
            0x00, NULL, HFILL } },
7372
7373
15
        { &hf_zbee_zcl_met_get_snapshot_snapshot_offset,
7374
15
            { "Snapshot Offset", "zbee_zcl_se.met.get_snapshot.snapshot_offset", FT_UINT8, BASE_DEC, NULL,
7375
15
            0x00, NULL, HFILL } },
7376
7377
15
        { &hf_zbee_zcl_met_get_snapshot_snapshot_cause,
7378
15
            { "Snapshot Cause", "zbee_zcl_se.met.get_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7379
15
            0x00, NULL, HFILL } },
7380
7381
15
        { &hf_zbee_zcl_met_start_sampling_issuer_event_id,
7382
15
            { "Issuer Event ID", "zbee_zcl_se.met.start_sampling.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7383
15
            0x00, NULL, HFILL } },
7384
7385
15
        { &hf_zbee_zcl_met_start_sampling_start_sampling_time,
7386
15
            { "Start Sampling Time", "zbee_zcl_se.met.start_sampling.start_sampling_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7387
15
            0x00, NULL, HFILL } },
7388
7389
15
        { &hf_zbee_zcl_met_start_sampling_sample_type,
7390
15
            { "Sample Type", "zbee_zcl_se.met.start_sampling.sample_type", FT_UINT8, BASE_DEC, NULL,
7391
15
            0x00, NULL, HFILL } },
7392
7393
15
        { &hf_zbee_zcl_met_start_sampling_sample_request_interval,
7394
15
            { "Sample Request Interval", "zbee_zcl_se.met.start_sampling.sample_request_interval", FT_UINT16, BASE_DEC, NULL,
7395
15
            0x00, NULL, HFILL } },
7396
7397
15
        { &hf_zbee_zcl_met_start_sampling_max_number_of_samples,
7398
15
            { "Max Number of Samples", "zbee_zcl_se.met.start_sampling.max_number_of_samples", FT_UINT16, BASE_DEC, NULL,
7399
15
            0x00, NULL, HFILL } },
7400
7401
15
        { &hf_zbee_zcl_met_get_sampled_data_sample_id,
7402
15
            { "Sample ID", "zbee_zcl_se.met.get_sampled_data.sample_id", FT_UINT16, BASE_DEC, NULL,
7403
15
            0x00, NULL, HFILL } },
7404
7405
15
        { &hf_zbee_zcl_met_get_sampled_data_sample_start_time,
7406
15
            { "Sample Start Time", "zbee_zcl_se.met.get_sampled_data.sample_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7407
15
            0x00, NULL, HFILL } },
7408
7409
15
        { &hf_zbee_zcl_met_get_sampled_data_sample_type,
7410
15
            { "Sample Type", "zbee_zcl_se.met.get_sampled_data.sample_type", FT_UINT8, BASE_DEC, NULL,
7411
15
            0x00, NULL, HFILL } },
7412
7413
15
        { &hf_zbee_zcl_met_get_sampled_data_number_of_samples,
7414
15
            { "Number of Samples", "zbee_zcl_se.met.get_sampled_data.number_of_samples", FT_UINT16, BASE_DEC, NULL,
7415
15
            0x00, NULL, HFILL } },
7416
7417
15
        { &hf_zbee_zcl_met_start_sampling_response_sample_id,
7418
15
            { "Sample ID", "zbee_zcl_se.met.start_sampling_response.sample_id", FT_UINT16, BASE_DEC, NULL,
7419
15
            0x00, NULL, HFILL } },
7420
7421
15
        { &hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme,
7422
15
            { "Notification Scheme", "zbee_zcl_se.met.mirror_report_attribute_response.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7423
15
            0x00, NULL, HFILL } },
7424
7425
15
        { &hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n,
7426
15
            { "Notification Flag", "zbee_zcl_se.met.mirror_report_attribute_response.notification_flags_n", FT_UINT32, BASE_HEX, NULL,
7427
15
            0x00, NULL, HFILL } },
7428
7429
15
        { &hf_zbee_zcl_met_reset_load_limit_counter_provider_id,
7430
15
            { "Provider ID", "zbee_zcl_se.met.reset_load_limit_counter.provider_id", FT_UINT32, BASE_DEC, NULL,
7431
15
            0x00, NULL, HFILL } },
7432
7433
15
        { &hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id,
7434
15
            { "Issuer Event ID", "zbee_zcl_se.met.reset_load_limit_counter.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7435
15
            0x00, NULL, HFILL } },
7436
7437
15
        { &hf_zbee_zcl_met_change_supply_provider_id,
7438
15
            { "Provider ID", "zbee_zcl_se.met.change_supply.provider_id", FT_UINT32, BASE_DEC, NULL,
7439
15
            0x00, NULL, HFILL } },
7440
7441
15
        { &hf_zbee_zcl_met_change_supply_issuer_event_id,
7442
15
            { "Issuer Event ID", "zbee_zcl_se.met.change_supply.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7443
15
            0x00, NULL, HFILL } },
7444
7445
15
        { &hf_zbee_zcl_met_change_supply_request_date_time,
7446
15
            { "Request Date/Time", "zbee_zcl_se.met.change_supply.request_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7447
15
            0x00, NULL, HFILL } },
7448
7449
15
        { &hf_zbee_zcl_met_change_supply_implementation_date_time,
7450
15
            { "Implementation Date/Time", "zbee_zcl_se.met.change_supply.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
7451
15
            0x00, NULL, HFILL } },
7452
7453
15
        { &hf_zbee_zcl_met_change_supply_proposed_supply_status,
7454
15
            { "Proposed Supply Status", "zbee_zcl_se.met.change_supply.proposed_supply_status", FT_UINT8, BASE_DEC, NULL,
7455
15
            0x00, NULL, HFILL } },
7456
7457
15
        { &hf_zbee_zcl_met_change_supply_supply_control_bits,
7458
15
            { "Supply Control bits", "zbee_zcl_se.met.change_supply.supply_control_bits", FT_UINT8, BASE_HEX, NULL,
7459
15
            0x00, NULL, HFILL } },
7460
7461
15
        { &hf_zbee_zcl_met_local_change_supply_proposed_supply_status,
7462
15
            { "Proposed Supply Status", "zbee_zcl_se.met.local_change_supply.proposed_supply_status", FT_UINT8, BASE_DEC, NULL,
7463
15
            0x00, NULL, HFILL } },
7464
7465
15
        { &hf_zbee_zcl_met_set_supply_status_issuer_event_id,
7466
15
            { "Issuer Event ID", "zbee_zcl_se.met.set_supply_status.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7467
15
            0x00, NULL, HFILL } },
7468
7469
15
        { &hf_zbee_zcl_met_set_supply_status_supply_tamper_state,
7470
15
            { "Supply Tamper State", "zbee_zcl_se.met.set_supply_status.supply_tamper_state", FT_UINT8, BASE_DEC, NULL,
7471
15
            0x00, NULL, HFILL } },
7472
7473
15
        { &hf_zbee_zcl_met_set_supply_status_supply_depletion_state,
7474
15
            { "Supply Depletion State", "zbee_zcl_se.met.set_supply_status.supply_depletion_state", FT_UINT8, BASE_DEC, NULL,
7475
15
            0x00, NULL, HFILL } },
7476
7477
15
        { &hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state,
7478
15
            { "Supply Uncontrolled Flow State", "zbee_zcl_se.met.set_supply_status.supply_uncontrolled_flow_state", FT_UINT8, BASE_DEC, NULL,
7479
15
            0x00, NULL, HFILL } },
7480
7481
15
        { &hf_zbee_zcl_met_set_supply_status_load_limit_supply_state,
7482
15
            { "Load Limit Supply State", "zbee_zcl_se.met.set_supply_status.load_limit_supply_state", FT_UINT8, BASE_DEC, NULL,
7483
15
            0x00, NULL, HFILL } },
7484
7485
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id,
7486
15
            { "Provider ID", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.provider_id", FT_UINT32, BASE_DEC, NULL,
7487
15
            0x00, NULL, HFILL } },
7488
7489
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id,
7490
15
            { "Issuer Event ID", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7491
15
            0x00, NULL, HFILL } },
7492
7493
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold,
7494
15
            { "Uncontrolled Flow Threshold", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.uncontrolled_flow_threshold", FT_UINT16, BASE_DEC, NULL,
7495
15
            0x00, NULL, HFILL } },
7496
7497
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure,
7498
15
            { "Unit of Measure", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.unit_of_measure", FT_UINT8, BASE_DEC, NULL,
7499
15
            0x00, NULL, HFILL } },
7500
7501
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier,
7502
15
            { "Multiplier", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.multiplier", FT_UINT16, BASE_DEC, NULL,
7503
15
            0x00, NULL, HFILL } },
7504
7505
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor,
7506
15
            { "Divisor", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.divisor", FT_UINT16, BASE_DEC, NULL,
7507
15
            0x00, NULL, HFILL } },
7508
7509
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period,
7510
15
            { "Stabilisation Period", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.stabilisation_period", FT_UINT8, BASE_DEC, NULL,
7511
15
            0x00, NULL, HFILL } },
7512
7513
15
        { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period,
7514
15
            { "Measurement Period", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.measurement_period", FT_UINT16, BASE_DEC, NULL,
7515
15
            0x00, NULL, HFILL } },
7516
7517
15
        { &hf_zbee_zcl_met_get_profile_response_end_time,
7518
15
            { "End Time", "zbee_zcl_se.met.get_profile_response.end_time",
7519
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_strings), 0x00, NULL, HFILL } },
7520
7521
15
        { &hf_zbee_zcl_met_get_profile_response_status,
7522
15
            { "Status", "zbee_zcl_se.met.get_profile_response.status", FT_UINT8, BASE_HEX, NULL,
7523
15
            0x00, NULL, HFILL } },
7524
7525
15
        { &hf_zbee_zcl_met_get_profile_response_profile_interval_period,
7526
15
            { "Profile Interval Period", "zbee_zcl_se.met.get_profile_response.profile_interval_period", FT_UINT8, BASE_DEC, NULL,
7527
15
            0x00, NULL, HFILL } },
7528
7529
15
        { &hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered,
7530
15
            { "Number of Periods Delivered", "zbee_zcl_se.met.get_profile_response.number_of_periods_delivered", FT_UINT8, BASE_DEC, NULL,
7531
15
            0x00, NULL, HFILL } },
7532
7533
15
        { &hf_zbee_zcl_met_get_profile_response_intervals,
7534
15
            { "Intervals", "zbee_zcl_se.met.get_profile_response.intervals", FT_UINT24, BASE_DEC, NULL,
7535
15
            0x00, NULL, HFILL } },
7536
7537
15
        { &hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period,
7538
15
            { "Applied Update Period (seconds)", "zbee_zcl_se.met.request_fast_poll_mode_response.applied_update_period", FT_UINT8, BASE_DEC, NULL,
7539
15
            0x00, NULL, HFILL } },
7540
7541
15
        { &hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time,
7542
15
            { "Fast Poll Mode End Time", "zbee_zcl_se.met.request_fast_poll_mode_response.fast_poll_mode_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7543
15
            0x00, NULL, HFILL } },
7544
7545
15
        { &hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id,
7546
15
            { "Issuer Event ID", "zbee_zcl_se.met.schedule_snapshot_response.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7547
15
            0x00, NULL, HFILL } },
7548
7549
15
        { &hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id,
7550
15
            { "Snapshot Schedule ID", "zbee_zcl_se.met.schedule_snapshot_response.response_snapshot_schedule_id", FT_UINT8, BASE_DEC, NULL,
7551
15
            0x00, NULL, HFILL } },
7552
7553
15
        { &hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation,
7554
15
            { "Snapshot Schedule Confirmation", "zbee_zcl_se.met.schedule_snapshot_response.snapshot_schedule_confirmation", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_snapshot_schedule_confirmation),
7555
15
            0x00, NULL, HFILL } },
7556
7557
15
        { &hf_zbee_zcl_met_take_snapshot_response_snapshot_id,
7558
15
            { "Snapshot ID", "zbee_zcl_se.met.take_snapshot_response.snapshot_id", FT_UINT32, BASE_DEC, NULL,
7559
15
            0x00, NULL, HFILL } },
7560
7561
15
        { &hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation,
7562
15
            { "Snapshot Confirmation", "zbee_zcl_se.met.take_snapshot_response.snapshot_confirmation", FT_UINT8, BASE_HEX, NULL,
7563
15
            0x00, NULL, HFILL } },
7564
7565
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshot_id,
7566
15
            { "Snapshot ID", "zbee_zcl_se.met.publish_snapshot.snapshot_id", FT_UINT32, BASE_DEC, NULL,
7567
15
            0x00, NULL, HFILL } },
7568
7569
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshot_time,
7570
15
            { "Snapshot Time", "zbee_zcl_se.met.publish_snapshot.snapshot_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7571
15
            0x00, NULL, HFILL } },
7572
7573
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshots_found,
7574
15
            { "Total Snapshots Found", "zbee_zcl_se.met.publish_snapshot.snapshots_found", FT_UINT8, BASE_DEC, NULL,
7575
15
            0x00, NULL, HFILL } },
7576
7577
15
        { &hf_zbee_zcl_met_publish_snapshot_cmd_index,
7578
15
            { "Command Index", "zbee_zcl_se.met.publish_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
7579
15
            0x00, NULL, HFILL } },
7580
7581
15
        { &hf_zbee_zcl_met_publish_snapshot_total_commands,
7582
15
            { "Total Number of Commands", "zbee_zcl_se.met.publish_snapshot.total_commands", FT_UINT8, BASE_DEC, NULL,
7583
15
            0x00, NULL, HFILL } },
7584
7585
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshot_cause,
7586
15
            { "Snapshot Cause", "zbee_zcl_se.met.publish_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7587
15
            0x00, NULL, HFILL } },
7588
7589
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type,
7590
15
            { "Snapshot Payload Type", "zbee_zcl_se.met.publish_snapshot.payload_type", FT_UINT8, BASE_DEC, VALS(zbee_zcl_met_snapshot_payload_type),
7591
15
            0x00, NULL, HFILL } },
7592
7593
15
        { &hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload,
7594
15
            { "Snapshot Sub-Payload", "zbee_zcl_se.met.publish_snapshot.sub_payload", FT_BYTES, BASE_NONE, NULL,
7595
15
            0x00, NULL, HFILL } },
7596
7597
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_id,
7598
15
            { "Sample ID", "zbee_zcl_se.met.get_sampled_data_rsp.sample_id", FT_UINT16, BASE_DEC, NULL,
7599
15
            0x00, NULL, HFILL } },
7600
7601
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_start_time,
7602
15
            { "Sample Start Time", "zbee_zcl_se.met.get_sampled_data_rsp.sample_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7603
15
            0x00, NULL, HFILL } },
7604
7605
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_type,
7606
15
            { "Sample Type", "zbee_zcl_se.met.get_sampled_data_rsp.sample_type", FT_UINT8, BASE_DEC, NULL,
7607
15
            0x00, NULL, HFILL } },
7608
7609
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval,
7610
15
            { "Sample Request Interval", "zbee_zcl_se.met.get_sampled_data_rsp.sample_request_interval", FT_UINT16, BASE_DEC, NULL,
7611
15
            0x00, NULL, HFILL } },
7612
7613
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples,
7614
15
            { "Number of Samples", "zbee_zcl_se.met.get_sampled_data_rsp.number_of_samples", FT_UINT16, BASE_DEC, NULL,
7615
15
            0x00, NULL, HFILL } },
7616
7617
15
        { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples,
7618
15
            { "Samples", "zbee_zcl_se.met.get_sampled_data_rsp.samples", FT_UINT24, BASE_DEC, NULL,
7619
15
            0x00, NULL, HFILL } },
7620
7621
15
        { &hf_zbee_zcl_met_configure_mirror_issuer_event_id,
7622
15
            { "Issuer Event ID", "zbee_zcl_se.met.configure_mirror.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7623
15
            0x00, NULL, HFILL } },
7624
7625
15
        { &hf_zbee_zcl_met_configure_mirror_reporting_interval,
7626
15
            { "Reporting Interval", "zbee_zcl_se.met.configure_mirror.reporting_interval", FT_UINT24, BASE_DEC, NULL,
7627
15
            0x00, NULL, HFILL } },
7628
7629
15
        { &hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting,
7630
15
            { "Mirror Notification Reporting", "zbee_zcl_se.met.configure_mirror.mirror_notification_reporting", FT_BOOLEAN, BASE_NONE, NULL,
7631
15
            0x00, NULL, HFILL } },
7632
7633
15
        { &hf_zbee_zcl_met_configure_mirror_notification_scheme,
7634
15
            { "Notification Scheme", "zbee_zcl_se.met.configure_mirror.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7635
15
            0x00, NULL, HFILL } },
7636
7637
15
        { &hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id,
7638
15
            { "Issuer Event ID", "zbee_zcl_se.met.configure_notification_scheme.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7639
15
            0x00, NULL, HFILL } },
7640
7641
15
        { &hf_zbee_zcl_met_configure_notification_scheme_notification_scheme,
7642
15
            { "Notification Scheme", "zbee_zcl_se.met.configure_notification_scheme.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7643
15
            0x00, NULL, HFILL } },
7644
7645
15
        { &hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order,
7646
15
            { "Notification Flag Order", "zbee_zcl_se.met.configure_notification_scheme.notification_flag_order", FT_UINT32, BASE_HEX, NULL,
7647
15
            0x00, NULL, HFILL } },
7648
7649
15
        { &hf_zbee_zcl_met_configure_notification_flags_issuer_event_id,
7650
15
            { "Issuer Event ID", "zbee_zcl_se.met.configure_notification_flags.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7651
15
            0x00, NULL, HFILL } },
7652
7653
15
        { &hf_zbee_zcl_met_configure_notification_flags_notification_scheme,
7654
15
            { "Notification Scheme", "zbee_zcl_se.met.configure_notification_flags.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7655
15
            0x00, NULL, HFILL } },
7656
7657
15
        { &hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id,
7658
15
            { "Notification Flag Attribute ID", "zbee_zcl_se.met.configure_notification_flags.notification_flag_attribute_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_met_attr_client_names),
7659
15
            0x00, NULL, HFILL } },
7660
7661
15
        { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_cluster_id,
7662
15
            { "Cluster ID", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.cluster_id", FT_UINT16, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_aps_cid_names),
7663
15
            0x00, NULL, HFILL } },
7664
7665
15
        { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_manufacturer_code,
7666
15
            { "Manufacturer Code", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.manufacturer_code", FT_UINT16, BASE_HEX, NULL,
7667
15
            0x00, NULL, HFILL } },
7668
7669
15
        { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_no_of_commands,
7670
15
            { "No. of Commands", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.no_of_commands", FT_UINT8, BASE_DEC, NULL,
7671
15
            0x00, NULL, HFILL } },
7672
7673
15
        { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_command_identifier,
7674
15
            { "Command Identifier", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.command_identifier", FT_UINT8, BASE_HEX, NULL,
7675
15
            0x00, NULL, HFILL } },
7676
7677
15
        { &hf_zbee_zcl_met_get_notified_msg_notification_scheme,
7678
15
            { "Notification Scheme", "zbee_zcl_se.met.get_notified_msg.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7679
15
            0x00, NULL, HFILL } },
7680
7681
15
        { &hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id,
7682
15
            { "Notification Flag attribute ID", "zbee_zcl_se.met.get_notified_msg.notification_flag_attribute_id", FT_UINT16, BASE_DEC, NULL,
7683
15
            0x00, NULL, HFILL } },
7684
7685
15
        { &hf_zbee_zcl_met_get_notified_msg_notification_flags,
7686
15
            { "Notification Flags", "zbee_zcl_se.met.get_notified_msg.notification_flags", FT_UINT32, BASE_HEX, NULL,
7687
15
            0x00, NULL, HFILL } },
7688
7689
15
        { &hf_zbee_zcl_met_supply_status_response_provider_id,
7690
15
            { "Provider ID", "zbee_zcl_se.met.supply_status_response.provider_id", FT_UINT32, BASE_DEC, NULL,
7691
15
            0x00, NULL, HFILL } },
7692
7693
15
        { &hf_zbee_zcl_met_supply_status_response_issuer_event_id,
7694
15
            { "Issuer Event ID", "zbee_zcl_se.met.supply_status_response.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7695
15
            0x00, NULL, HFILL } },
7696
7697
15
        { &hf_zbee_zcl_met_supply_status_response_implementation_date_time,
7698
15
            { "Implementation Date/Time", "zbee_zcl_se.met.supply_status_response.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7699
15
            0x00, NULL, HFILL } },
7700
7701
15
        { &hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation,
7702
15
            { "Supply Status After Implementation", "zbee_zcl_se.met.supply_status_response.supply_status_after_implementation", FT_UINT8, BASE_DEC, NULL,
7703
15
            0x00, NULL, HFILL } },
7704
7705
15
        { &hf_zbee_zcl_met_snapshot_cause_general,
7706
15
            { "General", "zbee_zcl_se.met.snapshot_cause.general", FT_BOOLEAN, 32, NULL,
7707
15
            0x00000001, NULL, HFILL } },
7708
15
        { &hf_zbee_zcl_met_snapshot_cause_end_of_billing_period,
7709
15
            { "End of Billing Period", "zbee_zcl_se.met.snapshot_cause.end_of_billing_period", FT_BOOLEAN, 32, NULL,
7710
15
            0x00000002, NULL, HFILL } },
7711
15
        { &hf_zbee_zcl_met_snapshot_cause_end_of_block_period,
7712
15
            { "End of Block Period", "zbee_zcl_se.met.snapshot_cause.end_of_block_period", FT_BOOLEAN, 32, NULL,
7713
15
            0x00000004, NULL, HFILL } },
7714
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information,
7715
15
            { "Change of Tariff Information", "zbee_zcl_se.met.snapshot_cause.change_of_tariff_information", FT_BOOLEAN, 32, NULL,
7716
15
            0x00000008, NULL, HFILL } },
7717
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix,
7718
15
            { "Change of Price Matrix", "zbee_zcl_se.met.snapshot_cause.change_of_price_matrix", FT_BOOLEAN, 32, NULL,
7719
15
            0x00000010, NULL, HFILL } },
7720
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds,
7721
15
            { "Change of Block Thresholds", "zbee_zcl_se.met.snapshot_cause.change_of_block_thresholds", FT_BOOLEAN, 32, NULL,
7722
15
            0x00000020, NULL, HFILL } },
7723
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_cv,
7724
15
            { "Change of CV", "zbee_zcl_se.met.snapshot_cause.change_of_cv", FT_BOOLEAN, 32, NULL,
7725
15
            0x00000040, NULL, HFILL } },
7726
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_cf,
7727
15
            { "Change of CF", "zbee_zcl_se.met.snapshot_cause.change_of_cf", FT_BOOLEAN, 32, NULL,
7728
15
            0x00000080, NULL, HFILL } },
7729
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_calendar,
7730
15
            { "Change of Calendar", "zbee_zcl_se.met.snapshot_cause.change_of_calendar", FT_BOOLEAN, 32, NULL,
7731
15
            0x00000100, NULL, HFILL } },
7732
15
        { &hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing,
7733
15
            { "Critical Peak Pricing", "zbee_zcl_se.met.snapshot_cause.critical_peak_pricing", FT_BOOLEAN, 32, NULL,
7734
15
            0x00000200, NULL, HFILL } },
7735
15
        { &hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client,
7736
15
            { "Manually Triggered from Client", "zbee_zcl_se.met.snapshot_cause.manually_triggered_from_client", FT_BOOLEAN, 32, NULL,
7737
15
            0x00000400, NULL, HFILL } },
7738
15
        { &hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period,
7739
15
            { "End of Resolve Period", "zbee_zcl_se.met.snapshot_cause.end_of_resolve_period", FT_BOOLEAN, 32, NULL,
7740
15
            0x00000800, NULL, HFILL } },
7741
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_tenancy,
7742
15
            { "Change of Tenancy", "zbee_zcl_se.met.snapshot_cause.change_of_tenancy", FT_BOOLEAN, 32, NULL,
7743
15
            0x00001000, NULL, HFILL } },
7744
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_supplier,
7745
15
            { "Change of Supplier", "zbee_zcl_se.met.snapshot_cause.change_of_supplier", FT_BOOLEAN, 32, NULL,
7746
15
            0x00002000, NULL, HFILL } },
7747
15
        { &hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode,
7748
15
            { "Change of (Meter) Mode", "zbee_zcl_se.met.snapshot_cause.change_of_meter_mode", FT_BOOLEAN, 32, NULL,
7749
15
            0x00004000, NULL, HFILL } },
7750
15
        { &hf_zbee_zcl_met_snapshot_cause_debt_payment,
7751
15
            { "Debt Payment", "zbee_zcl_se.met.snapshot_cause.debt_payment", FT_BOOLEAN, 32, NULL,
7752
15
            0x00008000, NULL, HFILL } },
7753
15
        { &hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot,
7754
15
            { "Scheduled Snapshot", "zbee_zcl_se.met.snapshot_cause.scheduled_snapshot", FT_BOOLEAN, 32, NULL,
7755
15
            0x00010000, NULL, HFILL } },
7756
15
        { &hf_zbee_zcl_met_snapshot_cause_ota_firmware_download,
7757
15
            { "OTA Firmware Download", "zbee_zcl_se.met.snapshot_cause.ota_firmware_download", FT_BOOLEAN, 32, NULL,
7758
15
            0x00020000, NULL, HFILL } },
7759
15
        { &hf_zbee_zcl_met_snapshot_cause_reserved,
7760
15
            { "Reserved", "zbee_zcl_se.met.snapshot_cause.reserved", FT_UINT32, BASE_HEX, NULL,
7761
15
            0xFFFC0000, NULL, HFILL } }
7762
15
    };
7763
7764
    /* ZCL Metering subtrees */
7765
15
    int *ett[] = {
7766
15
        &ett_zbee_zcl_met,
7767
15
        &ett_zbee_zcl_met_func_noti_flags,
7768
15
        &ett_zbee_zcl_met_noti_flags_2,
7769
15
        &ett_zbee_zcl_met_noti_flags_3,
7770
15
        &ett_zbee_zcl_met_noti_flags_4,
7771
15
        &ett_zbee_zcl_met_noti_flags_5,
7772
15
        &ett_zbee_zcl_met_snapshot_cause_flags,
7773
15
        &ett_zbee_zcl_met_snapshot_schedule,
7774
15
        &ett_zbee_zcl_met_schedule_snapshot_response_payload,
7775
15
        &ett_zbee_zcl_met_schedule_snapshot_payload,
7776
15
        &ett_zbee_zcl_met_mirror_noti_flag,
7777
15
        &ett_zbee_zcl_met_bit_field_allocation
7778
15
    };
7779
7780
    /* Register the ZigBee ZCL Metering cluster protocol name and description */
7781
15
    proto_zbee_zcl_met = proto_register_protocol("ZigBee ZCL Metering", "ZCL Metering", ZBEE_PROTOABBREV_ZCL_MET);
7782
15
    proto_register_field_array(proto_zbee_zcl_met, hf, array_length(hf));
7783
15
    proto_register_subtree_array(ett, array_length(ett));
7784
7785
    /* Register the ZigBee ZCL Metering dissector. */
7786
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_MET, dissect_zbee_zcl_met, proto_zbee_zcl_met);
7787
15
} /*proto_register_zbee_zcl_met*/
7788
7789
/**
7790
 *Hands off the ZCL Metering dissector.
7791
 *
7792
*/
7793
void
7794
proto_reg_handoff_zbee_zcl_met(void)
7795
15
{
7796
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_MET,
7797
15
                            proto_zbee_zcl_met,
7798
15
                            ett_zbee_zcl_met,
7799
15
                            ZBEE_ZCL_CID_SIMPLE_METERING,
7800
15
                            ZBEE_MFG_CODE_NONE,
7801
15
                            hf_zbee_zcl_met_attr_server_id,
7802
15
                            hf_zbee_zcl_met_attr_client_id,
7803
15
                            hf_zbee_zcl_met_srv_rx_cmd_id,
7804
15
                            hf_zbee_zcl_met_srv_tx_cmd_id,
7805
15
                            dissect_zcl_met_attr_data
7806
15
                         );
7807
15
} /*proto_reg_handoff_zbee_zcl_met*/
7808
7809
/* ########################################################################## */
7810
/* #### (0x0703) MESSAGING CLUSTER ########################################## */
7811
/* ########################################################################## */
7812
7813
/* Attributes - None */
7814
7815
/* Server Commands Received */
7816
#define zbee_zcl_msg_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
7817
    XXX(ZBEE_ZCL_CMD_ID_MSG_GET_LAST_MSG,               0x00, "Get Last Message" ) \
7818
    XXX(ZBEE_ZCL_CMD_ID_MSG_MSG_CONFIRM,                0x01, "Message Confirmation" ) \
7819
    XXX(ZBEE_ZCL_CMD_ID_MSG_GET_MESSAGE_CANCEL,         0x02, "Get Message Cancellation" )
7820
7821
VALUE_STRING_ENUM(zbee_zcl_msg_srv_rx_cmd_names);
7822
VALUE_STRING_ARRAY(zbee_zcl_msg_srv_rx_cmd_names);
7823
7824
/* Server Commands Generated */
7825
#define zbee_zcl_msg_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
7826
    XXX(ZBEE_ZCL_CMD_ID_MSG_DISPLAY_MSG,                0x00, "Display Message" ) \
7827
    XXX(ZBEE_ZCL_CMD_ID_MSG_CANCEL_MSG,                 0x01, "Cancel Message" ) \
7828
    XXX(ZBEE_ZCL_CMD_ID_MSG_DISPLAY_PROTECTED_MSG,      0x02, "Display Protected Message" ) \
7829
    XXX(ZBEE_ZCL_CMD_ID_MSG_CANCEL_ALL_MSG,             0x03, "Cancel All Messages" )
7830
7831
VALUE_STRING_ENUM(zbee_zcl_msg_srv_tx_cmd_names);
7832
VALUE_STRING_ARRAY(zbee_zcl_msg_srv_tx_cmd_names);
7833
7834
/* Message Control Field Bit Map */
7835
15
#define ZBEE_ZCL_MSG_CTRL_TX_MASK                       0x03
7836
15
#define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MASK               0x0C
7837
15
#define ZBEE_ZCL_MSG_CTRL_RESERVED_MASK                 0x50
7838
15
#define ZBEE_ZCL_MSG_CTRL_ENHANCED_CONFIRM_MASK         0x20
7839
15
#define ZBEE_ZCL_MSG_CTRL_CONFIRM_MASK                  0x80
7840
7841
#define ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ONLY                0x00 /* Normal Transmission Only */
7842
#define ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ANON_INTERPAN       0x01 /* Normal and Anonymous Inter-PAN Transmission Only */
7843
#define ZBEE_ZCL_MSG_CTRL_TX_ANON_INTERPAN_ONLY         0x02 /* Anonymous Inter-PAN Transmission Only */
7844
7845
#define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_LOW                0x00 /* Low */
7846
#define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MEDIUM             0x01 /* Medium */
7847
#define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_HIGH               0x02 /* High */
7848
#define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_CRITICAL           0x03 /* Critical */
7849
7850
15
#define ZBEE_ZCL_MSG_EXT_CTRL_STATUS_MASK               0x01
7851
7852
15
#define ZBEE_ZCL_MSG_CONFIRM_CTRL_MASK                  0x01
7853
7854
/*************************/
7855
/* Function Declarations */
7856
/*************************/
7857
void proto_register_zbee_zcl_msg(void);
7858
void proto_reg_handoff_zbee_zcl_msg(void);
7859
7860
/* Command Dissector Helpers */
7861
static void dissect_zcl_msg_display             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
7862
static void dissect_zcl_msg_cancel              (tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset);
7863
static void dissect_zcl_msg_confirm             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
7864
static void dissect_zcl_msg_cancel_all          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
7865
static void dissect_zcl_msg_get_cancel          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
7866
7867
/* Private functions prototype */
7868
static void decode_zcl_msg_duration             (char *s, uint16_t value);
7869
7870
/*************************/
7871
/* Global Variables      */
7872
/*************************/
7873
7874
/* Initialize the protocol and registered fields */
7875
static int proto_zbee_zcl_msg;
7876
7877
static int hf_zbee_zcl_msg_srv_tx_cmd_id;
7878
static int hf_zbee_zcl_msg_srv_rx_cmd_id;
7879
static int hf_zbee_zcl_msg_message_id;
7880
static int hf_zbee_zcl_msg_ctrl;
7881
static int hf_zbee_zcl_msg_ctrl_tx;
7882
static int hf_zbee_zcl_msg_ctrl_importance;
7883
static int hf_zbee_zcl_msg_ctrl_enh_confirm;
7884
static int hf_zbee_zcl_msg_ctrl_reserved;
7885
static int hf_zbee_zcl_msg_ctrl_confirm;
7886
static int hf_zbee_zcl_msg_ext_ctrl;
7887
static int hf_zbee_zcl_msg_ext_ctrl_status;
7888
static int hf_zbee_zcl_msg_start_time;
7889
static int hf_zbee_zcl_msg_duration;
7890
static int hf_zbee_zcl_msg_message;
7891
static int hf_zbee_zcl_msg_confirm_time;
7892
static int hf_zbee_zcl_msg_confirm_ctrl;
7893
static int hf_zbee_zcl_msg_confirm_response;
7894
static int hf_zbee_zcl_msg_implementation_time;
7895
static int hf_zbee_zcl_msg_earliest_time;
7896
7897
/* Initialize the subtree pointers */
7898
static int ett_zbee_zcl_msg;
7899
static int ett_zbee_zcl_msg_message_control;
7900
static int ett_zbee_zcl_msg_ext_message_control;
7901
7902
static expert_field ei_zbee_zcl_msg_msg_ctrl_deprecated;
7903
7904
/* Message Control Transmission */
7905
static const value_string zbee_zcl_msg_ctrl_tx_names[] = {
7906
    { ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ONLY,                 "Normal Transmission Only" },
7907
    { ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ANON_INTERPAN,        "Normal and Anonymous Inter-PAN Transmission Only" },
7908
    { ZBEE_ZCL_MSG_CTRL_TX_ANON_INTERPAN_ONLY,          "Anonymous Inter-PAN Transmission Only" },
7909
    { 0, NULL }
7910
};
7911
7912
/* Message Control Importance */
7913
static const value_string zbee_zcl_msg_ctrl_importance_names[] = {
7914
    { ZBEE_ZCL_MSG_CTRL_IMPORTANCE_LOW,                 "Low" },
7915
    { ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MEDIUM,              "Medium" },
7916
    { ZBEE_ZCL_MSG_CTRL_IMPORTANCE_HIGH,                "High" },
7917
    { ZBEE_ZCL_MSG_CTRL_IMPORTANCE_CRITICAL,            "Critical" },
7918
    { 0, NULL }
7919
};
7920
7921
/*************************/
7922
/* Function Bodies       */
7923
/*************************/
7924
7925
/**
7926
 *ZigBee ZCL Messaging cluster dissector for wireshark.
7927
 *
7928
 *@param tvb pointer to buffer containing raw packet.
7929
 *@param pinfo pointer to packet information fields
7930
 *@param tree pointer to data tree Wireshark uses to display packet.
7931
*/
7932
static int
7933
dissect_zbee_zcl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7934
3
{
7935
3
    proto_tree        *payload_tree;
7936
3
    zbee_zcl_packet   *zcl;
7937
3
    unsigned          offset = 0;
7938
3
    uint8_t           cmd_id;
7939
3
    int               rem_len;
7940
7941
    /* Reject the packet if data is NULL */
7942
3
    if (data == NULL)
7943
0
        return 0;
7944
3
    zcl = (zbee_zcl_packet *)data;
7945
3
    cmd_id = zcl->cmd_id;
7946
7947
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
7948
3
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
7949
        /* Append the command name to the info column. */
7950
2
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
7951
2
            val_to_str_const(cmd_id, zbee_zcl_msg_srv_rx_cmd_names, "Unknown Command"),
7952
2
            zcl->tran_seqno);
7953
7954
        /* Add the command ID. */
7955
2
        proto_tree_add_uint(tree, hf_zbee_zcl_msg_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
7956
7957
        /* Check is this command has a payload, than add the payload tree */
7958
2
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
7959
2
        if (rem_len > 0) {
7960
2
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_msg, NULL, "Payload");
7961
7962
            /* Call the appropriate command dissector */
7963
2
            switch (cmd_id) {
7964
7965
0
                case ZBEE_ZCL_CMD_ID_MSG_GET_LAST_MSG:
7966
                    /* No payload */
7967
0
                    break;
7968
7969
0
                case ZBEE_ZCL_CMD_ID_MSG_MSG_CONFIRM:
7970
0
                    dissect_zcl_msg_confirm(tvb, payload_tree, &offset);
7971
0
                    break;
7972
7973
1
                case ZBEE_ZCL_CMD_ID_MSG_GET_MESSAGE_CANCEL:
7974
1
                    dissect_zcl_msg_get_cancel(tvb, payload_tree, &offset);
7975
1
                    break;
7976
7977
1
                default:
7978
1
                    break;
7979
2
            }
7980
2
        }
7981
2
    }
7982
1
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
7983
        /* Append the command name to the info column. */
7984
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
7985
1
            val_to_str_const(cmd_id, zbee_zcl_msg_srv_tx_cmd_names, "Unknown Command"),
7986
1
            zcl->tran_seqno);
7987
7988
        /* Add the command ID. */
7989
1
        proto_tree_add_uint(tree, hf_zbee_zcl_msg_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
7990
7991
        /* Check is this command has a payload, than add the payload tree */
7992
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
7993
1
        if (rem_len > 0) {
7994
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_msg, NULL, "Payload");
7995
7996
            /* Call the appropriate command dissector */
7997
1
            switch (cmd_id) {
7998
7999
0
                case ZBEE_ZCL_CMD_ID_MSG_DISPLAY_MSG:
8000
0
                    dissect_zcl_msg_display(tvb, payload_tree, &offset);
8001
0
                    break;
8002
8003
0
                case ZBEE_ZCL_CMD_ID_MSG_CANCEL_MSG:
8004
0
                    dissect_zcl_msg_cancel(tvb, pinfo, payload_tree, &offset);
8005
0
                    break;
8006
8007
0
                case ZBEE_ZCL_CMD_ID_MSG_DISPLAY_PROTECTED_MSG:
8008
0
                    dissect_zcl_msg_display(tvb, payload_tree, &offset);
8009
0
                    break;
8010
8011
0
                case ZBEE_ZCL_CMD_ID_MSG_CANCEL_ALL_MSG:
8012
0
                    dissect_zcl_msg_cancel_all(tvb, payload_tree, &offset);
8013
0
                    break;
8014
8015
1
                default:
8016
1
                    break;
8017
1
            }
8018
1
        }
8019
1
    }
8020
8021
3
    return tvb_captured_length(tvb);
8022
3
} /*dissect_zbee_zcl_msg*/
8023
8024
/**
8025
 *This function manages the Display Message payload
8026
 *
8027
 *@param tvb pointer to buffer containing raw packet.
8028
 *@param tree pointer to data tree Wireshark uses to display packet.
8029
 *@param offset pointer to offset from caller
8030
*/
8031
static void
8032
dissect_zcl_msg_display(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8033
0
{
8034
0
    int msg_len;
8035
8036
0
    static int * const message_ctrl_flags[] = {
8037
0
        &hf_zbee_zcl_msg_ctrl_tx,
8038
0
        &hf_zbee_zcl_msg_ctrl_importance,
8039
0
        &hf_zbee_zcl_msg_ctrl_enh_confirm,
8040
0
        &hf_zbee_zcl_msg_ctrl_reserved,
8041
0
        &hf_zbee_zcl_msg_ctrl_confirm,
8042
0
        NULL
8043
0
    };
8044
8045
0
    static int * const message_ext_ctrl_flags[] = {
8046
0
        &hf_zbee_zcl_msg_ext_ctrl_status,
8047
0
        NULL
8048
0
    };
8049
8050
    /* Message ID */
8051
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8052
0
    *offset += 4;
8053
8054
    /* Message Control */
8055
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_msg_ctrl, ett_zbee_zcl_msg_message_control, message_ctrl_flags, ENC_NA);
8056
0
    *offset += 1;
8057
8058
    /* Start Time */
8059
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8060
0
    *offset += 4;
8061
8062
    /* Duration In Minutes*/
8063
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_duration, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8064
0
    *offset += 2;
8065
8066
    /* Message */
8067
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_msg_message, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &msg_len);
8068
0
    *offset += msg_len;
8069
8070
    /* (Optional) Extended Message Control */
8071
0
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
8072
0
        proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_msg_ext_ctrl, ett_zbee_zcl_msg_ext_message_control, message_ext_ctrl_flags, ENC_NA);
8073
0
        *offset += 1;
8074
0
    }
8075
8076
0
} /*dissect_zcl_msg_display*/
8077
8078
/**
8079
 *This function manages the Cancel Message payload
8080
 *
8081
 *@param tvb pointer to buffer containing raw packet.
8082
 *@param tree pointer to data tree Wireshark uses to display packet.
8083
 *@param offset pointer to offset from caller
8084
*/
8085
static void
8086
dissect_zcl_msg_cancel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
8087
0
{
8088
0
    uint8_t msg_ctrl;
8089
8090
    /* Message ID */
8091
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8092
0
    *offset += 4;
8093
8094
    /* Message Control */
8095
0
    proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_msg_ctrl, tvb, *offset, 1, ENC_NA, &msg_ctrl);
8096
0
    *offset += 1;
8097
8098
0
    if (msg_ctrl != 0x00) {
8099
0
       expert_add_info(pinfo, tree, &ei_zbee_zcl_msg_msg_ctrl_deprecated);
8100
0
    }
8101
8102
0
} /* dissect_zcl_msg_cancel */
8103
8104
/**
8105
 *This function manages the Cancel All Messages payload
8106
 *
8107
 *@param tvb pointer to buffer containing raw packet.
8108
 *@param tree pointer to data tree Wireshark uses to display packet.
8109
 *@param offset pointer to offset from caller
8110
*/
8111
static void
8112
dissect_zcl_msg_cancel_all(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8113
0
{
8114
    /* Implementation Date/Time */
8115
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_implementation_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8116
0
    *offset += 4;
8117
8118
0
} /* dissect_zcl_msg_cancel_all */
8119
8120
/**
8121
 *This function manages the Get Message Cancellation payload
8122
 *
8123
 *@param tvb pointer to buffer containing raw packet.
8124
 *@param tree pointer to data tree Wireshark uses to display packet.
8125
 *@param offset pointer to offset from caller
8126
*/
8127
static void
8128
dissect_zcl_msg_get_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8129
1
{
8130
    /* Earliest Implementation Time */
8131
1
    proto_tree_add_item(tree, hf_zbee_zcl_msg_earliest_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8132
1
    *offset += 4;
8133
8134
1
} /* dissect_zcl_msg_get_cancel */
8135
8136
/**
8137
 *This function manages the Message Confirmation payload
8138
 *
8139
 *@param tvb pointer to buffer containing raw packet.
8140
 *@param tree pointer to data tree Wireshark uses to display packet.
8141
 *@param offset pointer to offset from caller
8142
*/
8143
static void
8144
dissect_zcl_msg_confirm(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8145
0
{
8146
0
    int msg_len;
8147
8148
    /* Message ID */
8149
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8150
0
    *offset += 4;
8151
8152
    /* Confirmation Time */
8153
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_confirm_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8154
0
    *offset += 4;
8155
8156
    /* (Optional) Confirm Control */
8157
0
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
8158
0
    proto_tree_add_item(tree, hf_zbee_zcl_msg_confirm_ctrl, tvb, *offset, 1, ENC_NA);
8159
0
    *offset += 1;
8160
8161
    /* (Optional) Response Text, but is we have a length we expect to find the subsequent string */
8162
0
    if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
8163
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_msg_confirm_response, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &msg_len);
8164
0
    *offset += msg_len;
8165
0
} /* dissect_zcl_msg_confirm */
8166
8167
/**
8168
 *This function decodes duration in minute type variable
8169
 *
8170
*/
8171
static void
8172
decode_zcl_msg_duration(char *s, uint16_t value)
8173
0
{
8174
0
    if (value == 0xffff)
8175
0
        snprintf(s, ITEM_LABEL_LENGTH, "Until changed");
8176
0
    else
8177
0
        snprintf(s, ITEM_LABEL_LENGTH, "%d minutes", value);
8178
0
    return;
8179
0
} /*decode_zcl_msg_duration*/
8180
8181
/**
8182
 *This function registers the ZCL Messaging dissector
8183
 *
8184
*/
8185
void
8186
proto_register_zbee_zcl_msg(void)
8187
15
{
8188
15
    static hf_register_info hf[] = {
8189
8190
15
        { &hf_zbee_zcl_msg_srv_tx_cmd_id,
8191
15
            { "Command", "zbee_zcl_se.msg.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_srv_tx_cmd_names),
8192
15
            0x00, NULL, HFILL } },
8193
8194
15
        { &hf_zbee_zcl_msg_srv_rx_cmd_id,
8195
15
            { "Command", "zbee_zcl_se.msg.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_srv_rx_cmd_names),
8196
15
            0x00, NULL, HFILL } },
8197
8198
15
        { &hf_zbee_zcl_msg_message_id,
8199
15
            { "Message ID", "zbee_zcl_se.msg.message.id", FT_UINT32, BASE_HEX, NULL,
8200
15
            0x00, NULL, HFILL } },
8201
8202
/* Start of 'Message Control' fields */
8203
15
        { &hf_zbee_zcl_msg_ctrl,
8204
15
            { "Message Control", "zbee_zcl_se.msg.message.ctrl", FT_UINT8, BASE_HEX, NULL,
8205
15
            0x0, NULL, HFILL } },
8206
8207
15
        { &hf_zbee_zcl_msg_ctrl_tx,
8208
15
            { "Transmission", "zbee_zcl_se.msg.message.ctrl.tx", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_ctrl_tx_names),
8209
15
            ZBEE_ZCL_MSG_CTRL_TX_MASK, NULL, HFILL } },
8210
8211
15
        { &hf_zbee_zcl_msg_ctrl_importance,
8212
15
            { "Importance", "zbee_zcl_se.msg.message.ctrl.importance", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_ctrl_importance_names),
8213
15
            ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MASK, NULL, HFILL } },
8214
8215
15
        { &hf_zbee_zcl_msg_ctrl_enh_confirm,
8216
15
            { "Confirmation", "zbee_zcl_se.msg.message.ctrl.enhconfirm", FT_BOOLEAN, 8, TFS(&tfs_required_not_required),
8217
15
            ZBEE_ZCL_MSG_CTRL_ENHANCED_CONFIRM_MASK, NULL, HFILL } },
8218
8219
15
        { &hf_zbee_zcl_msg_ctrl_reserved,
8220
15
            { "Reserved", "zbee_zcl_se.msg.message.ctrl.reserved", FT_UINT8, BASE_HEX, NULL,
8221
15
            ZBEE_ZCL_MSG_CTRL_RESERVED_MASK, NULL, HFILL } },
8222
8223
15
        { &hf_zbee_zcl_msg_ctrl_confirm,
8224
15
            { "Confirmation", "zbee_zcl_se.msg.message.ctrl.confirm", FT_BOOLEAN, 8, TFS(&tfs_required_not_required),
8225
15
            ZBEE_ZCL_MSG_CTRL_CONFIRM_MASK, NULL, HFILL } },
8226
/* End of 'Message Control' fields */
8227
8228
/* Start of 'Extended Message Control' fields */
8229
15
        { &hf_zbee_zcl_msg_ext_ctrl,
8230
15
            { "Extended Message Control", "zbee_zcl_se.msg.message.ext.ctrl", FT_UINT8, BASE_HEX, NULL,
8231
15
            0x0, NULL, HFILL } },
8232
8233
15
        { &hf_zbee_zcl_msg_ext_ctrl_status,
8234
15
            { "Message Confirmation Status", "zbee_zcl_se.msg.message.ext.ctrl.status", FT_BOOLEAN, 8, TFS(&tfs_confirmed_unconfirmed),
8235
15
            ZBEE_ZCL_MSG_EXT_CTRL_STATUS_MASK, NULL, HFILL } },
8236
/* End of 'Extended Message Control' fields */
8237
8238
15
        { &hf_zbee_zcl_msg_start_time,
8239
15
            { "Start Time", "zbee_zcl_se.msg.message.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8240
15
            0x00, NULL, HFILL } },
8241
8242
15
        { &hf_zbee_zcl_msg_duration,
8243
15
            { "Duration", "zbee_zcl_se.msg.message.duration", FT_UINT16, BASE_CUSTOM, CF_FUNC(decode_zcl_msg_duration),
8244
15
            0x00, NULL, HFILL } },
8245
8246
15
        { &hf_zbee_zcl_msg_message,
8247
15
            { "Message", "zbee_zcl_se.msg.message", FT_UINT_STRING, BASE_NONE, NULL,
8248
15
            0x00, NULL, HFILL } },
8249
8250
15
        { &hf_zbee_zcl_msg_confirm_time,
8251
15
            { "Confirmation Time", "zbee_zcl_se.msg.message.confirm_time",  FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8252
15
            0x0, NULL, HFILL } },
8253
8254
15
        { &hf_zbee_zcl_msg_confirm_ctrl,
8255
15
            { "Confirmation Control", "zbee_zcl_se.msg.message.confirm_ctrl", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
8256
15
            ZBEE_ZCL_MSG_CONFIRM_CTRL_MASK, NULL, HFILL } },
8257
8258
15
        { &hf_zbee_zcl_msg_confirm_response,
8259
15
            { "Response", "zbee_zcl_se.msg.message.confirm_response", FT_UINT_STRING, BASE_NONE, NULL,
8260
15
            0x00, NULL, HFILL } },
8261
8262
15
        { &hf_zbee_zcl_msg_implementation_time,
8263
15
            { "Implementation Time", "zbee_zcl_se.msg.impl_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8264
15
            0, NULL, HFILL } },
8265
8266
15
        { &hf_zbee_zcl_msg_earliest_time,
8267
15
            { "Earliest Implementation Time", "zbee_zcl_se.msg.earliest_impl_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8268
15
            0, NULL, HFILL } },
8269
8270
15
    };
8271
8272
    /* ZCL Messaging subtrees */
8273
15
    int *ett[] = {
8274
15
        &ett_zbee_zcl_msg,
8275
15
        &ett_zbee_zcl_msg_message_control,
8276
15
        &ett_zbee_zcl_msg_ext_message_control,
8277
15
    };
8278
8279
    /* Expert Info */
8280
15
    expert_module_t* expert_zbee_zcl_msg;
8281
15
    static ei_register_info ei[] = {
8282
15
        { &ei_zbee_zcl_msg_msg_ctrl_deprecated, { "zbee_zcl_se.msg.msg_ctrl.deprecated", PI_PROTOCOL, PI_WARN, "Message Control deprecated in this message, should be 0x00", EXPFILL }},
8283
15
    };
8284
8285
    /* Register the ZigBee ZCL Messaging cluster protocol name and description */
8286
15
    proto_zbee_zcl_msg = proto_register_protocol("ZigBee ZCL Messaging", "ZCL Messaging", ZBEE_PROTOABBREV_ZCL_MSG);
8287
15
    proto_register_field_array(proto_zbee_zcl_msg, hf, array_length(hf));
8288
15
    proto_register_subtree_array(ett, array_length(ett));
8289
8290
15
    expert_zbee_zcl_msg = expert_register_protocol(proto_zbee_zcl_msg);
8291
15
    expert_register_field_array(expert_zbee_zcl_msg, ei, array_length(ei));
8292
8293
    /* Register the ZigBee ZCL Messaging dissector. */
8294
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_MSG, dissect_zbee_zcl_msg, proto_zbee_zcl_msg);
8295
15
} /*proto_register_zbee_zcl_msg*/
8296
8297
/**
8298
 *Hands off the ZCL Messaging dissector.
8299
 *
8300
*/
8301
void
8302
proto_reg_handoff_zbee_zcl_msg(void)
8303
15
{
8304
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_MSG,
8305
15
                            proto_zbee_zcl_msg,
8306
15
                            ett_zbee_zcl_msg,
8307
15
                            ZBEE_ZCL_CID_MESSAGE,
8308
15
                            ZBEE_MFG_CODE_NONE,
8309
15
                            -1, -1,
8310
15
                            hf_zbee_zcl_msg_srv_rx_cmd_id,
8311
15
                            hf_zbee_zcl_msg_srv_tx_cmd_id,
8312
15
                            NULL
8313
15
                         );
8314
15
} /*proto_reg_handoff_zbee_zcl_msg*/
8315
8316
/* ########################################################################## */
8317
/* #### (0x0704) TUNNELING CLUSTER ########################################### */
8318
/* ########################################################################## */
8319
8320
/* Attributes */
8321
#define zbee_zcl_tun_attr_names_VALUE_STRING_LIST(XXX) \
8322
    XXX(ZBEE_ZCL_ATTR_ID_TUN_CLOSE_TIMEOUT,                     0x0000, "Close Tunnel Timeout" ) \
8323
/* Smart Energy */ \
8324
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_TUN,             0xFFFE, "Attribute Reporting Status" )
8325
8326
VALUE_STRING_ENUM(zbee_zcl_tun_attr_names);
8327
VALUE_STRING_ARRAY(zbee_zcl_tun_attr_names);
8328
8329
/* Server Commands Received */
8330
#define zbee_zcl_tun_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
8331
    XXX(ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL,                     0x00, "Request Tunnel" ) \
8332
    XXX(ZBEE_ZCL_CMD_ID_TUN_CLOSE_TUNNEL,                       0x01, "Close Tunnel" ) \
8333
    XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA,                      0x02, "Transfer Data" ) \
8334
    XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR,                0x03, "Transfer Data Error" ) \
8335
    XXX(ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA,                  0x04, "Ack Transfer Data" ) \
8336
    XXX(ZBEE_ZCL_CMD_ID_TUN_READY_DATA,                         0x05, "Ready Data" ) \
8337
    XXX(ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS,            0x06, "Get Supported Tunnel Protocols" )
8338
8339
VALUE_STRING_ENUM(zbee_zcl_tun_srv_rx_cmd_names);
8340
VALUE_STRING_ARRAY(zbee_zcl_tun_srv_rx_cmd_names);
8341
8342
/* Server Commands Generated */
8343
#define zbee_zcl_tun_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
8344
    XXX(ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL_RSP,                 0x00, "Request Tunnel Response" ) \
8345
    XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_TX,                   0x01, "Transfer Data" ) \
8346
    XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR_TX,             0x02, "Transfer Data Error" ) \
8347
    XXX(ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA_TX,               0x03, "Ack Transfer Data" ) \
8348
    XXX(ZBEE_ZCL_CMD_ID_TUN_READY_DATA_TX,                      0x04, "Ready Data" ) \
8349
    XXX(ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS_RSP,        0x05, "Supported Tunnel Protocols Response" ) \
8350
    XXX(ZBEE_ZCL_CMD_ID_TUN_CLOSURE_NOTIFY,                     0x06, "Tunnel Closure Notification" )
8351
8352
VALUE_STRING_ENUM(zbee_zcl_tun_srv_tx_cmd_names);
8353
VALUE_STRING_ARRAY(zbee_zcl_tun_srv_tx_cmd_names);
8354
8355
/*************************/
8356
/* Function Declarations */
8357
/*************************/
8358
void proto_register_zbee_zcl_tun(void);
8359
void proto_reg_handoff_zbee_zcl_tun(void);
8360
8361
/* Private functions prototype */
8362
8363
/*************************/
8364
/* Global Variables      */
8365
/*************************/
8366
8367
/* Initialize the protocol and registered fields */
8368
static int proto_zbee_zcl_tun;
8369
8370
static int hf_zbee_zcl_tun_srv_tx_cmd_id;
8371
static int hf_zbee_zcl_tun_srv_rx_cmd_id;
8372
static int hf_zbee_zcl_tun_attr_id;
8373
static int hf_zbee_zcl_tun_attr_reporting_status;
8374
static int hf_zbee_zcl_tun_attr_close_timeout;
8375
static int hf_zbee_zcl_tun_protocol_id;
8376
static int hf_zbee_zcl_tun_manufacturer_code;
8377
static int hf_zbee_zcl_tun_flow_control_support;
8378
static int hf_zbee_zcl_tun_max_in_size;
8379
static int hf_zbee_zcl_tun_tunnel_id;
8380
static int hf_zbee_zcl_tun_num_octets_left;
8381
static int hf_zbee_zcl_tun_protocol_offset;
8382
static int hf_zbee_zcl_tun_protocol_list_complete;
8383
static int hf_zbee_zcl_tun_protocol_count;
8384
static int hf_zbee_zcl_tun_transfer_status;
8385
static int hf_zbee_zcl_tun_transfer_data_status;
8386
8387
static heur_dissector_list_t zbee_zcl_tun_heur_subdissector_list;
8388
8389
/* Initialize the subtree pointers */
8390
static int ett_zbee_zcl_tun;
8391
8392
#define zbee_zcl_tun_protocol_names_VALUE_STRING_LIST(XXX) \
8393
    XXX(ZBEE_ZCL_TUN_PROTO_DLMS,                                0x00, "DLMS/COSEM (IEC 62056)" ) \
8394
    XXX(ZBEE_ZCL_TUN_PROTO_IEC_61107,                           0x01, "IEC 61107" ) \
8395
    XXX(ZBEE_ZCL_TUN_PROTO_ANSI_C12,                            0x02, "ANSI C12" ) \
8396
    XXX(ZBEE_ZCL_TUN_PROTO_M_BUS,                               0x03, "M-BUS" ) \
8397
    XXX(ZBEE_ZCL_TUN_PROTO_SML,                                 0x04, "SML" ) \
8398
    XXX(ZBEE_ZCL_TUN_PROTO_CLIMATE_TALK,                        0x05, "ClimateTalk" ) \
8399
    XXX(ZBEE_ZCL_TUN_PROTO_GB_HRGP,                             0x06, "GB-HRGP" ) \
8400
    XXX(ZBEE_ZCL_TUN_PROTO_IPV6,                                0x07, "IPv6" ) \
8401
    XXX(ZBEE_ZCL_TUN_PROTO_IPV4,                                0x08, "IPv4" ) \
8402
    XXX(ZBEE_ZCL_TUN_PROTO_NULL,                                0x09, "null" ) \
8403
    XXX(ZBEE_ZCL_TUN_PROTO_TEST,                                 199, "test" ) \
8404
    XXX(ZBEE_ZCL_TUN_PROTO_MANUFACTURER,                         200, "Manufacturer Specific" ) \
8405
    XXX(ZBEE_ZCL_TUN_PROTO_RESERVED,                            0xFF, "Reserved" )
8406
8407
VALUE_STRING_ENUM(zbee_zcl_tun_protocol_names);
8408
VALUE_STRING_ARRAY(zbee_zcl_tun_protocol_names);
8409
8410
#define zbee_zcl_tun_trans_data_status_names_VALUE_STRING_LIST(XXX) \
8411
    XXX(ZBEE_ZCL_TUN_TRANS_STATUS_NO_TUNNEL,                    0x00, "Tunnel ID Does Not Exist" ) \
8412
    XXX(ZBEE_ZCL_TUN_TRANS_STATUS_WRONG_DEV,                    0x01, "Wrong Device" ) \
8413
    XXX(ZBEE_ZCL_TUN_TRANS_STATUS_OVERFLOW,                     0x02, "Data Overflow" )
8414
8415
VALUE_STRING_ENUM(zbee_zcl_tun_trans_data_status_names);
8416
VALUE_STRING_ARRAY(zbee_zcl_tun_trans_data_status_names);
8417
8418
#define zbee_zcl_tun_status_names_VALUE_STRING_LIST(XXX) \
8419
    XXX(ZBEE_ZCL_TUN_STATUS_SUCCESS,                            0x00, "Success" ) \
8420
    XXX(ZBEE_ZCL_TUN_STATUS_BUSY,                               0x01, "Busy" ) \
8421
    XXX(ZBEE_ZCL_TUN_STATUS_NO_MORE_IDS,                        0x02, "No More Tunnel IDs" ) \
8422
    XXX(ZBEE_ZCL_TUN_STATUS_PROTO_NOT_SUPP,                     0x03, "Protocol Not Supported" ) \
8423
    XXX(ZBEE_ZCL_TUN_STATUS_FLOW_CONTROL_NOT_SUPP,              0x04, "Flow Control Not Supported" )
8424
8425
VALUE_STRING_ENUM(zbee_zcl_tun_status_names);
8426
VALUE_STRING_ARRAY(zbee_zcl_tun_status_names);
8427
8428
/*************************/
8429
/* Function Bodies       */
8430
/*************************/
8431
8432
/**
8433
 *This function is called by ZCL foundation dissector in order to decode
8434
 *
8435
 *@param tree pointer to data tree Wireshark uses to display packet.
8436
 *@param tvb pointer to buffer containing raw packet.
8437
 *@param offset pointer to buffer offset
8438
 *@param attr_id attribute identifier
8439
 *@param data_type attribute data type
8440
 *@param client_attr ZCL client
8441
*/
8442
static void
8443
dissect_zcl_tun_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
8444
1.09k
{
8445
1.09k
    switch (attr_id) {
8446
        /* cluster specific attributes */
8447
199
        case ZBEE_ZCL_ATTR_ID_TUN_CLOSE_TIMEOUT:
8448
199
            proto_tree_add_item(tree, hf_zbee_zcl_tun_attr_close_timeout, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8449
199
            *offset += 2;
8450
199
            break;
8451
8452
        /* applies to all SE clusters */
8453
15
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_TUN:
8454
15
            proto_tree_add_item(tree, hf_zbee_zcl_tun_attr_reporting_status, tvb, *offset, 1, ENC_NA);
8455
15
            *offset += 1;
8456
15
            break;
8457
8458
885
        default: /* Catch all */
8459
885
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
8460
885
            break;
8461
1.09k
    }
8462
1.09k
} /*dissect_zcl_ias_zone_attr_data*/
8463
8464
/**
8465
 *This function manages the Request Tunnel payload
8466
 *
8467
 *@param tvb pointer to buffer containing raw packet.
8468
 *@param tree pointer to data tree Wireshark uses to display packet.
8469
 *@param offset pointer to offset from caller
8470
*/
8471
static void
8472
dissect_zcl_tun_request_tunnel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8473
0
{
8474
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_id, tvb, *offset, 1, ENC_NA);
8475
0
    *offset += 1;
8476
8477
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8478
0
    *offset += 2;
8479
8480
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_flow_control_support, tvb, *offset, 1, ENC_NA);
8481
0
    *offset += 1;
8482
8483
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_max_in_size, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8484
0
    *offset += 2;
8485
0
}
8486
8487
/**
8488
 *This function manages the Close Tunnel payload
8489
 *
8490
 *@param tvb pointer to buffer containing raw packet.
8491
 *@param tree pointer to data tree Wireshark uses to display packet.
8492
 *@param offset pointer to offset from caller
8493
*/
8494
static void
8495
dissect_zcl_tun_close_tunnel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8496
1
{
8497
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8498
1
    *offset += 2;
8499
1
}
8500
8501
/**
8502
 *This function manages the Transfer Data payload
8503
 *
8504
 *@param tvb pointer to buffer containing raw packet.
8505
 *@param pinfo pointer to packet information fields
8506
 *@param tree pointer to data tree Wireshark uses to display packet.
8507
 *@param offset pointer to offset from caller
8508
*/
8509
static void
8510
dissect_zcl_tun_transfer_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
8511
1
{
8512
1
    int length;
8513
1
    heur_dtbl_entry_t *hdtbl_entry;
8514
1
    tvbuff_t *data_tvb;
8515
1
    proto_tree *root_tree = proto_tree_get_root(tree);
8516
8517
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8518
1
    *offset += 2;
8519
8520
1
    length = tvb_reported_length_remaining(tvb, *offset);
8521
1
    data_tvb = tvb_new_subset_remaining(tvb, *offset);
8522
1
    *offset += length;
8523
8524
1
    if (dissector_try_heuristic(zbee_zcl_tun_heur_subdissector_list, data_tvb, pinfo, root_tree, &hdtbl_entry, NULL)) {
8525
0
        return;
8526
0
    }
8527
8528
1
    call_data_dissector(data_tvb, pinfo, root_tree);
8529
1
}
8530
8531
/**
8532
 *This function manages the Transfer Data Error payload
8533
 *
8534
 *@param tvb pointer to buffer containing raw packet.
8535
 *@param tree pointer to data tree Wireshark uses to display packet.
8536
 *@param offset pointer to offset from caller
8537
*/
8538
static void
8539
dissect_zcl_tun_transfer_data_error(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8540
0
{
8541
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8542
0
    *offset += 2;
8543
8544
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_transfer_data_status, tvb, *offset, 1, ENC_NA);
8545
0
    *offset += 1;
8546
0
}
8547
8548
/**
8549
 *This function manages the Ack Transfer Data payload
8550
 *
8551
 *@param tvb pointer to buffer containing raw packet.
8552
 *@param tree pointer to data tree Wireshark uses to display packet.
8553
 *@param offset pointer to offset from caller
8554
*/
8555
static void
8556
dissect_zcl_tun_ack_transfer_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8557
0
{
8558
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8559
0
    *offset += 2;
8560
8561
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_num_octets_left, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8562
0
    *offset += 2;
8563
0
}
8564
8565
/**
8566
 *This function manages the Ready Data payload
8567
 *
8568
 *@param tvb pointer to buffer containing raw packet.
8569
 *@param tree pointer to data tree Wireshark uses to display packet.
8570
 *@param offset pointer to offset from caller
8571
*/
8572
static void
8573
dissect_zcl_tun_ready_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8574
0
{
8575
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8576
0
    *offset += 2;
8577
8578
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_num_octets_left, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8579
0
    *offset += 2;
8580
0
}
8581
8582
/**
8583
 *This function manages the Get Supported Tunnel Protocols payload
8584
 *
8585
 *@param tvb pointer to buffer containing raw packet.
8586
 *@param tree pointer to data tree Wireshark uses to display packet.
8587
 *@param offset pointer to offset from caller
8588
*/
8589
static void
8590
dissect_zcl_tun_get_supported(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8591
0
{
8592
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_offset, tvb, *offset, 1, ENC_NA);
8593
0
    *offset += 1;
8594
0
}
8595
8596
/**
8597
 *This function manages the Request Tunnel Response payload
8598
 *
8599
 *@param tvb pointer to buffer containing raw packet.
8600
 *@param tree pointer to data tree Wireshark uses to display packet.
8601
 *@param offset pointer to offset from caller
8602
*/
8603
static void
8604
dissect_zcl_tun_request_tunnel_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8605
1
{
8606
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8607
1
    *offset += 2;
8608
8609
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_transfer_status, tvb, *offset, 1, ENC_NA);
8610
1
    *offset += 1;
8611
8612
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_max_in_size, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8613
1
    *offset += 2;
8614
1
}
8615
8616
/**
8617
 *This function manages the Supported Tunnel Protocols Response payload
8618
 *
8619
 *@param tvb pointer to buffer containing raw packet.
8620
 *@param tree pointer to data tree Wireshark uses to display packet.
8621
 *@param offset pointer to offset from caller
8622
*/
8623
static void
8624
dissect_zcl_tun_get_supported_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8625
0
{
8626
0
    uint16_t    mfg_code;
8627
8628
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_list_complete, tvb, *offset, 1, ENC_NA);
8629
0
    *offset += 1;
8630
8631
0
    proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_count, tvb, *offset, 1, ENC_NA);
8632
0
    *offset += 1;
8633
8634
0
    while (tvb_reported_length_remaining(tvb, *offset) > 0) {
8635
0
        mfg_code = tvb_get_letohs(tvb, *offset);
8636
0
        if (mfg_code == 0xFFFF) {
8637
0
            proto_tree_add_uint_format(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, mfg_code, "Standard Protocol (Mfg Code %#x)", mfg_code);
8638
0
        }
8639
0
        else {
8640
0
            proto_tree_add_item(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8641
0
        }
8642
0
        *offset += 2;
8643
8644
0
        proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_id, tvb, *offset, 1, ENC_NA);
8645
0
        *offset += 1;
8646
0
    }
8647
0
}
8648
8649
/**
8650
 *This function manages the Tunnel Closure Notification payload
8651
 *
8652
 *@param tvb pointer to buffer containing raw packet.
8653
 *@param tree pointer to data tree Wireshark uses to display packet.
8654
 *@param offset pointer to offset from caller
8655
*/
8656
static void
8657
dissect_zcl_tun_closure_notify(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8658
1
{
8659
1
    proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8660
1
    *offset += 2;
8661
1
}
8662
8663
/**
8664
 *ZigBee ZCL Tunneling cluster dissector for wireshark.
8665
 *
8666
 *@param tvb pointer to buffer containing raw packet.
8667
 *@param pinfo pointer to packet information fields
8668
 *@param tree pointer to data tree Wireshark uses to display packet.
8669
*/
8670
static int
8671
dissect_zbee_zcl_tun(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
8672
7
{
8673
7
    proto_tree        *payload_tree;
8674
7
    zbee_zcl_packet   *zcl;
8675
7
    unsigned          offset = 0;
8676
7
    uint8_t           cmd_id;
8677
7
    int               rem_len;
8678
8679
    /* Reject the packet if data is NULL */
8680
7
    if (data == NULL)
8681
0
        return 0;
8682
7
    zcl = (zbee_zcl_packet *)data;
8683
7
    cmd_id = zcl->cmd_id;
8684
8685
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
8686
7
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
8687
        /* Append the command name to the info column. */
8688
4
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
8689
4
            val_to_str_const(cmd_id, zbee_zcl_tun_srv_rx_cmd_names, "Unknown Command"),
8690
4
            zcl->tran_seqno);
8691
8692
        /* Add the command ID. */
8693
4
        proto_tree_add_uint(tree, hf_zbee_zcl_tun_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
8694
8695
        /* Check is this command has a payload, than add the payload tree */
8696
4
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
8697
4
        if (rem_len > 0) {
8698
4
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_tun, NULL, "Payload");
8699
8700
            /* Call the appropriate command dissector */
8701
4
            switch (cmd_id) {
8702
8703
0
                case ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL:
8704
0
                    dissect_zcl_tun_request_tunnel(tvb, payload_tree, &offset);
8705
0
                    break;
8706
8707
1
                case ZBEE_ZCL_CMD_ID_TUN_CLOSE_TUNNEL:
8708
1
                    dissect_zcl_tun_close_tunnel(tvb, payload_tree, &offset);
8709
1
                    break;
8710
8711
1
                case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA:
8712
1
                    dissect_zcl_tun_transfer_data(tvb, pinfo, payload_tree, &offset);
8713
1
                    break;
8714
8715
0
                case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR:
8716
0
                    dissect_zcl_tun_transfer_data_error(tvb, payload_tree, &offset);
8717
0
                    break;
8718
8719
0
                case ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA:
8720
0
                    dissect_zcl_tun_ack_transfer_data(tvb, payload_tree, &offset);
8721
0
                    break;
8722
8723
0
                case ZBEE_ZCL_CMD_ID_TUN_READY_DATA:
8724
0
                    dissect_zcl_tun_ready_data(tvb, payload_tree, &offset);
8725
0
                    break;
8726
8727
0
                case ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS:
8728
0
                    dissect_zcl_tun_get_supported(tvb, payload_tree, &offset);
8729
0
                    break;
8730
8731
2
                default:
8732
2
                    break;
8733
4
            }
8734
4
        }
8735
4
    }
8736
3
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
8737
        /* Append the command name to the info column. */
8738
3
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
8739
3
            val_to_str_const(cmd_id, zbee_zcl_tun_srv_tx_cmd_names, "Unknown Command"),
8740
3
            zcl->tran_seqno);
8741
8742
        /* Add the command ID. */
8743
3
        proto_tree_add_uint(tree, hf_zbee_zcl_tun_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
8744
8745
        /* Check is this command has a payload, than add the payload tree */
8746
3
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
8747
3
        if (rem_len > 0) {
8748
3
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_tun, NULL, "Payload");
8749
8750
            /* Call the appropriate command dissector */
8751
3
            switch (cmd_id) {
8752
8753
1
                case ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL_RSP:
8754
1
                    dissect_zcl_tun_request_tunnel_rsp(tvb, payload_tree, &offset);
8755
1
                    break;
8756
8757
0
                case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_TX:
8758
0
                    dissect_zcl_tun_transfer_data(tvb, pinfo, payload_tree, &offset);
8759
0
                    break;
8760
8761
0
                case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR_TX:
8762
0
                    dissect_zcl_tun_transfer_data_error(tvb, payload_tree, &offset);
8763
0
                    break;
8764
8765
0
                case ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA_TX:
8766
0
                    dissect_zcl_tun_ack_transfer_data(tvb, payload_tree, &offset);
8767
0
                    break;
8768
8769
0
                case ZBEE_ZCL_CMD_ID_TUN_READY_DATA_TX:
8770
0
                    dissect_zcl_tun_ready_data(tvb, payload_tree, &offset);
8771
0
                    break;
8772
8773
0
                case ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS_RSP:
8774
0
                    dissect_zcl_tun_get_supported_rsp(tvb, payload_tree, &offset);
8775
0
                    break;
8776
8777
1
                case ZBEE_ZCL_CMD_ID_TUN_CLOSURE_NOTIFY:
8778
1
                    dissect_zcl_tun_closure_notify(tvb, payload_tree, &offset);
8779
1
                    break;
8780
8781
1
                default:
8782
1
                    break;
8783
3
            }
8784
3
        }
8785
3
    }
8786
8787
7
    return tvb_captured_length(tvb);
8788
7
} /*dissect_zbee_zcl_tun*/
8789
8790
/**
8791
 *This function registers the ZCL Tunneling dissector
8792
 *
8793
*/
8794
void
8795
proto_register_zbee_zcl_tun(void)
8796
15
{
8797
15
    static hf_register_info hf[] = {
8798
8799
15
        { &hf_zbee_zcl_tun_attr_id,
8800
15
            { "Attribute", "zbee_zcl_se.tun.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_tun_attr_names),
8801
15
            0x0, NULL, HFILL } },
8802
8803
15
        { &hf_zbee_zcl_tun_attr_reporting_status,                         /* common to all SE clusters */
8804
15
            { "Attribute Reporting Status", "zbee_zcl_se.tun.attr.attr_reporting_status",
8805
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
8806
8807
15
        { &hf_zbee_zcl_tun_attr_close_timeout,
8808
15
            { "Close Tunnel Timeout", "zbee_zcl_se.tun.attr.close_tunnel", FT_UINT16, BASE_DEC, NULL,
8809
15
            0x0, NULL, HFILL } },
8810
8811
15
        { &hf_zbee_zcl_tun_srv_tx_cmd_id,
8812
15
            { "Command", "zbee_zcl_se.tun.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_srv_tx_cmd_names),
8813
15
            0x00, NULL, HFILL } },
8814
8815
15
        { &hf_zbee_zcl_tun_srv_rx_cmd_id,
8816
15
            { "Command", "zbee_zcl_se.tun.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_srv_rx_cmd_names),
8817
15
            0x00, NULL, HFILL } },
8818
8819
15
        { &hf_zbee_zcl_tun_protocol_id,
8820
15
            { "Protocol ID", "zbee_zcl_se.tun.protocol_id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_protocol_names),
8821
15
            0x00, NULL, HFILL } },
8822
8823
15
        { &hf_zbee_zcl_tun_manufacturer_code,
8824
15
            { "Manufacturer Code", "zbee_zcl_se.tun.manufacturer_code", FT_UINT16, BASE_HEX, VALS(zbee_mfr_code_names),
8825
15
            0x00, NULL, HFILL } },
8826
8827
15
        { &hf_zbee_zcl_tun_flow_control_support,
8828
15
            { "Flow Control Supported", "zbee_zcl_se.tun.flow_control_supported", FT_BOOLEAN, BASE_NONE, NULL,
8829
15
            0x00, NULL, HFILL } },
8830
8831
15
        { &hf_zbee_zcl_tun_max_in_size,
8832
15
            { "Max Incoming Transfer Size", "zbee_zcl_se.tun.max_in_transfer_size", FT_UINT16, BASE_HEX, NULL,
8833
15
            0x00, NULL, HFILL } },
8834
8835
15
        { &hf_zbee_zcl_tun_tunnel_id,
8836
15
            { "Tunnel Id", "zbee_zcl_se.tun.tunnel_id", FT_UINT16, BASE_HEX, NULL,
8837
15
            0x00, NULL, HFILL } },
8838
8839
15
        { &hf_zbee_zcl_tun_num_octets_left,
8840
15
            { "Num Octets Left", "zbee_zcl_se.tun.octets_left", FT_UINT16, BASE_HEX, NULL,
8841
15
            0x00, NULL, HFILL } },
8842
8843
15
        { &hf_zbee_zcl_tun_protocol_offset,
8844
15
            { "Protocol Offset", "zbee_zcl_se.tun.protocol_offset", FT_UINT8, BASE_HEX, NULL,
8845
15
            0x00, NULL, HFILL } },
8846
8847
15
        { &hf_zbee_zcl_tun_transfer_status,
8848
15
            { "Transfer Status", "zbee_zcl_se.tun.transfer_status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_status_names),
8849
15
            0x00, NULL, HFILL } },
8850
8851
15
        { &hf_zbee_zcl_tun_transfer_data_status,
8852
15
            { "Transfer Data Status", "zbee_zcl_se.tun.transfer_data_status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_trans_data_status_names),
8853
15
            0x00, NULL, HFILL } },
8854
8855
15
        { &hf_zbee_zcl_tun_protocol_count,
8856
15
            { "Protocol Count", "zbee_zcl_se.tun.protocol_count", FT_UINT8, BASE_HEX, NULL,
8857
15
            0x00, NULL, HFILL } },
8858
8859
15
        { &hf_zbee_zcl_tun_protocol_list_complete,
8860
15
            { "List Complete", "zbee_zcl_se.tun.protocol_list_complete", FT_BOOLEAN, BASE_NONE, NULL,
8861
15
            0x00, NULL, HFILL } },
8862
8863
15
    };
8864
8865
    /* ZCL Tunneling subtrees */
8866
15
    int *ett[] = {
8867
15
        &ett_zbee_zcl_tun,
8868
15
    };
8869
8870
    /* Register the ZigBee ZCL Tunneling cluster protocol name and description */
8871
15
    proto_zbee_zcl_tun = proto_register_protocol("ZigBee ZCL Tunneling", "ZCL Tunneling", ZBEE_PROTOABBREV_ZCL_TUN);
8872
15
    proto_register_field_array(proto_zbee_zcl_tun, hf, array_length(hf));
8873
15
    proto_register_subtree_array(ett, array_length(ett));
8874
8875
    /* Make heuristic dissectors possible */
8876
15
    zbee_zcl_tun_heur_subdissector_list = register_heur_dissector_list_with_description(ZBEE_PROTOABBREV_ZCL_TUN, "ZigBee Transfer Data", proto_zbee_zcl_tun);
8877
8878
    /* Register the ZigBee ZCL Tunneling dissector. */
8879
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_TUN, dissect_zbee_zcl_tun, proto_zbee_zcl_tun);
8880
8881
15
} /* proto_register_zbee_zcl_tun */
8882
8883
/**
8884
 *Hands off the ZCL Tunneling dissector.
8885
 *
8886
*/
8887
void
8888
proto_reg_handoff_zbee_zcl_tun(void)
8889
15
{
8890
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_TUN,
8891
15
                            proto_zbee_zcl_tun,
8892
15
                            ett_zbee_zcl_tun,
8893
15
                            ZBEE_ZCL_CID_TUNNELING,
8894
15
                            ZBEE_MFG_CODE_NONE,
8895
15
                            hf_zbee_zcl_tun_attr_id,
8896
15
                            -1,
8897
15
                            hf_zbee_zcl_tun_srv_rx_cmd_id,
8898
15
                            hf_zbee_zcl_tun_srv_tx_cmd_id,
8899
15
                            dissect_zcl_tun_attr_data
8900
15
                         );
8901
15
} /* proto_reg_handoff_zbee_zcl_tun */
8902
8903
8904
/* ########################################################################## */
8905
/* #### (0x0705) PREPAYMENT CLUSTER ########################################## */
8906
/* ########################################################################## */
8907
8908
/* Attributes */
8909
#define zbee_zcl_pp_attr_names_VALUE_STRING_LIST(XXX) \
8910
/* Prepayment Information Set */ \
8911
    XXX(ZBEE_ZCL_ATTR_ID_PP_PAYMENT_CONTROL_CONFIGURATION,      0x0000, "Payment Control Configuration" ) \
8912
    XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_REMAINING,                   0x0001, "Credit Remaining" ) \
8913
    XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_REMAINING,         0x0002, "Emergency Credit Remaining" ) \
8914
    XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_STATUS,                      0x0003, "Credit Status" ) \
8915
    XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_REMAINING_TIMESTAMP,         0x0004, "Credit Remaining Timestamp" ) \
8916
    XXX(ZBEE_ZCL_ATTR_ID_PP_ACCUMULATED_DEBT,                   0x0005, "Accumulated Debt" ) \
8917
    XXX(ZBEE_ZCL_ATTR_ID_PP_OVERALL_DEBT_CAP,                   0x0006, "Overall Debt Cap" ) \
8918
    XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_LIMIT,             0x0010, "Emergency Credit Limit / Allowance" ) \
8919
    XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_THRESHOLD,         0x0011, "Emergency Credit Threshold" ) \
8920
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOTAL_CREDIT_ADDED,                 0x0020, "Total Credit Added" ) \
8921
    XXX(ZBEE_ZCL_ATTR_ID_PP_MAX_CREDIT_LIMIT,                   0x0021, "Max Credit Limit" ) \
8922
    XXX(ZBEE_ZCL_ATTR_ID_PP_MAX_CREDIT_PER_TOPUP,               0x0022, "Max Credit Per Top Up" ) \
8923
    XXX(ZBEE_ZCL_ATTR_ID_PP_FRIENDLY_CREDIT_WARNING,            0x0030, "Friendly Credit Warning" ) \
8924
    XXX(ZBEE_ZCL_ATTR_ID_PP_LOW_CREDIT_WARNING,                 0x0031, "Low Credit Warning" ) \
8925
    XXX(ZBEE_ZCL_ATTR_ID_PP_IHD_LOW_CREDIT_WARNING,             0x0032, "IHD Low Credit Warning" ) \
8926
    XXX(ZBEE_ZCL_ATTR_ID_PP_INTERRUPT_SUSPEND_TIME,             0x0033, "Interrupt Suspend Time" ) \
8927
    XXX(ZBEE_ZCL_ATTR_ID_PP_REMAINING_FRIENDLY_CREDIT_TIME,     0x0034, "Remaining Friendly Credit Time" ) \
8928
    XXX(ZBEE_ZCL_ATTR_ID_PP_NEXT_FRIENDLY_CREDIT_PERIOD,        0x0035, "Next Friendly Credit Period" ) \
8929
    XXX(ZBEE_ZCL_ATTR_ID_PP_CUT_OFF_VALUE,                      0x0040, "Cut Off Value" ) \
8930
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOKEN_CARRIER_ID,                   0x0080, "Token Carrier ID" ) \
8931
/* Top-up Set */ \
8932
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_1,                  0x0100, "Top-up Date/time #1" ) \
8933
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_1,                     0x0101, "Top-up Amount #1" ) \
8934
    XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_1,               0x0102, "Originating Device #1" ) \
8935
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_1,                       0x0103, "Top-up Code #1" ) \
8936
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_2,                  0x0110, "Top-up Date/time #2" ) \
8937
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_2,                     0x0111, "Top-up Amount #2" ) \
8938
    XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_2,               0x0112, "Originating Device #2" ) \
8939
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_2,                       0x0113, "Top-up Code #2" ) \
8940
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_3,                  0x0120, "Top-up Date/time #3" ) \
8941
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_3,                     0x0121, "Top-up Amount #3" ) \
8942
    XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_3,               0x0122, "Originating Device #3" ) \
8943
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_3,                       0x0123, "Top-up Code #3" ) \
8944
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_4,                  0x0130, "Top-up Date/time #4" ) \
8945
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_4,                     0x0131, "Top-up Amount #4" ) \
8946
    XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_4,               0x0132, "Originating Device #4" ) \
8947
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_4,                       0x0133, "Top-up Code #4" ) \
8948
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_5,                  0x0140, "Top-up Date/time #5" ) \
8949
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_5,                     0x0141, "Top-up Amount #5" ) \
8950
    XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_5,               0x0142, "Originating Device #5" ) \
8951
    XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_5,                       0x0143, "Top-up Code #5" ) \
8952
/* Debt Set */ \
8953
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_1,                       0x0210, "Debt Label #1" ) \
8954
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_1,                      0x0211, "Debt Amount #1" ) \
8955
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_1,             0x0212, "Debt Recovery Method #1" ) \
8956
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_1,         0x0213, "Debt Recovery Start Time #1" ) \
8957
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_1,    0x0214, "Debt Recovery Collection Time #1" ) \
8958
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_1,               0x0216, "Debt Recovery Frequency #1" ) \
8959
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_1,             0x0217, "Debt Recovery Amount #1" ) \
8960
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_1,  0x0219, "Debt Recovery Top Up Percentage #1" ) \
8961
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_2,                       0x0220, "Debt Label #2" ) \
8962
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_2,                      0x0221, "Debt Amount #2" ) \
8963
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_2,             0x0222, "Debt Recovery Method #2" ) \
8964
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_2,         0x0223, "Debt Recovery Start Time #2" ) \
8965
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_2,    0x0224, "Debt Recovery Collection Time #2" ) \
8966
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_2,               0x0226, "Debt Recovery Frequency #2" ) \
8967
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_2,             0x0227, "Debt Recovery Amount #2" ) \
8968
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_2,  0x0229, "Debt Recovery Top Up Percentage #2" ) \
8969
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_3,                       0x0230, "Debt Label #3" ) \
8970
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_3,                      0x0231, "Debt Amount #3" ) \
8971
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_3,             0x0232, "Debt Recovery Method #3" ) \
8972
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_3,         0x0233, "Debt Recovery Start Time #3" ) \
8973
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_3,    0x0234, "Debt Recovery Collection Time #3" ) \
8974
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_3,               0x0236, "Debt Recovery Frequency #3" ) \
8975
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_3,             0x0237, "Debt Recovery Amount #3" ) \
8976
    XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_3,  0x0239, "Debt Recovery Top Up Percentage #3" ) \
8977
/* Alarm Set */ \
8978
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAYMENT_ALARM_STATUS,            0x0400, "Prepayment Alarm Status" ) \
8979
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_GENERIC_ALARM_MASK,          0x0401, "Prepay Generic Alarm Mask" ) \
8980
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_SWITCH_ALARM_MASK,           0x0402, "Prepay Switch Alarm Mask" ) \
8981
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_EVENT_ALARM_MASK,            0x0403, "Prepay Event Alarm Mask" ) \
8982
/* Historical Cost Consumption Information Set */ \
8983
    XXX(ZBEE_ZCL_ATTR_ID_PP_HISTORICAL_COST_CON_FORMAT,         0x0500, "Historical Cost Consumption Formatting" ) \
8984
    XXX(ZBEE_ZCL_ATTR_ID_PP_CONSUMPTION_UNIT_OF_MEASUREMENT,    0x0501, "Consumption Unit of Measurement" ) \
8985
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENCY_SCALING_FACTOR,            0x0502, "Currency Scaling Factor" ) \
8986
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENCY,                           0x0503, "Currency" ) \
8987
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_DAY_COST_CON_DELIVERED,     0x051C, "Current Day Cost Consumption Delivered" ) \
8988
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_DAY_COST_CON_RECEIVED,      0x051D, "Current Day Cost Consumption Received" ) \
8989
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_COST_CON_DELIVERED,    0x051E, "Previous Day Cost Consumption Delivered" ) \
8990
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_COST_CON_RECEIVED,     0x051F, "Previous Day Cost Consumption Received" ) \
8991
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_2_COST_CON_DELIVERED,  0x0520, "Previous Day 2 Cost Consumption Delivered" ) \
8992
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_2_COST_CON_RECEIVED,   0x0521, "Previous Day 2 Cost Consumption Received" ) \
8993
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_3_COST_CON_DELIVERED,  0x0522, "Previous Day 3 Cost Consumption Delivered" ) \
8994
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_3_COST_CON_RECEIVED,   0x0523, "Previous Day 3 Cost Consumption Received" ) \
8995
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_4_COST_CON_DELIVERED,  0x0524, "Previous Day 4 Cost Consumption Delivered" ) \
8996
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_4_COST_CON_RECEIVED,   0x0525, "Previous Day 4 Cost Consumption Received" ) \
8997
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_5_COST_CON_DELIVERED,  0x0526, "Previous Day 5 Cost Consumption Delivered" ) \
8998
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_5_COST_CON_RECEIVED,   0x0527, "Previous Day 5 Cost Consumption Received" ) \
8999
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_6_COST_CON_DELIVERED,  0x0528, "Previous Day 6 Cost Consumption Delivered" ) \
9000
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_6_COST_CON_RECEIVED,   0x0529, "Previous Day 6 Cost Consumption Received" ) \
9001
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_7_COST_CON_DELIVERED,  0x052A, "Previous Day 7 Cost Consumption Delivered" ) \
9002
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_7_COST_CON_RECEIVED,   0x052B, "Previous Day 7 Cost Consumption Received" ) \
9003
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_8_COST_CON_DELIVERED,  0x052C, "Previous Day 8 Cost Consumption Delivered" ) \
9004
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_8_COST_CON_RECEIVED,   0x052D, "Previous Day 8 Cost Consumption Received" ) \
9005
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_WEEK_COST_CON_DELIVERED,    0x0530, "Current Week Cost Consumption Delivered" ) \
9006
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_WEEK_COST_CON_RECEIVED,     0x0531, "Current Week Cost Consumption Received" ) \
9007
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_COST_CON_DELIVERED,   0x0532, "Previous Week Cost Consumption Delivered" ) \
9008
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_COST_CON_RECEIVED,    0x0533, "Previous Week Cost Consumption Received" ) \
9009
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_2_COST_CON_DELIVERED, 0x0534, "Previous Week 2 Cost Consumption Delivered" ) \
9010
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_2_COST_CON_RECEIVED,  0x0535, "Previous Week 2 Cost Consumption Received" ) \
9011
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_3_COST_CON_DELIVERED, 0x0536, "Previous Week 3 Cost Consumption Delivered" ) \
9012
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_3_COST_CON_RECEIVED,  0x0537, "Previous Week 3 Cost Consumption Received" ) \
9013
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_4_COST_CON_DELIVERED, 0x0538, "Previous Week 4 Cost Consumption Delivered" ) \
9014
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_4_COST_CON_RECEIVED,  0x0539, "Previous Week 4 Cost Consumption Received" ) \
9015
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_5_COST_CON_DELIVERED, 0x053A, "Previous Week 5 Cost Consumption Delivered" ) \
9016
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_5_COST_CON_RECEIVED,  0x053B, "Previous Week 5 Cost Consumption Received" ) \
9017
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_MON_COST_CON_DELIVERED,     0x0540, "Current Month Cost Consumption Delivered" ) \
9018
    XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_MON_COST_CON_RECEIVED,      0x0541, "Current Month Cost Consumption Received" ) \
9019
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_COST_CON_DELIVERED,    0x0542, "Previous Month Cost Consumption Delivered" ) \
9020
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_COST_CON_RECEIVED,     0x0543, "Previous Month Cost Consumption Received" ) \
9021
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_2_COST_CON_DELIVERED,  0x0544, "Previous Month 2 Cost Consumption Delivered" ) \
9022
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_2_COST_CON_RECEIVED,   0x0545, "Previous Month 2 Cost Consumption Received" ) \
9023
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_3_COST_CON_DELIVERED,  0x0546, "Previous Month 3 Cost Consumption Delivered" ) \
9024
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_3_COST_CON_RECEIVED,   0x0547, "Previous Month 3 Cost Consumption Received" ) \
9025
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_4_COST_CON_DELIVERED,  0x0548, "Previous Month 4 Cost Consumption Delivered" ) \
9026
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_4_COST_CON_RECEIVED,   0x0549, "Previous Month 4 Cost Consumption Received" ) \
9027
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_5_COST_CON_DELIVERED,  0x054A, "Previous Month 5 Cost Consumption Delivered" ) \
9028
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_5_COST_CON_RECEIVED,   0x054B, "Previous Month 5 Cost Consumption Received" ) \
9029
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_6_COST_CON_DELIVERED,  0x054C, "Previous Month 6 Cost Consumption Delivered" ) \
9030
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_6_COST_CON_RECEIVED,   0x054D, "Previous Month 6 Cost Consumption Received" ) \
9031
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_7_COST_CON_DELIVERED,  0x054E, "Previous Month 7 Cost Consumption Delivered" ) \
9032
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_7_COST_CON_RECEIVED,   0x054F, "Previous Month 7 Cost Consumption Received" ) \
9033
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_8_COST_CON_DELIVERED,  0x0550, "Previous Month 8 Cost Consumption Delivered" ) \
9034
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_8_COST_CON_RECEIVED,   0x0551, "Previous Month 8 Cost Consumption Received" ) \
9035
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_9_COST_CON_DELIVERED,  0x0552, "Previous Month 9 Cost Consumption Delivered" ) \
9036
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_9_COST_CON_RECEIVED,   0x0553, "Previous Month 9 Cost Consumption Received" ) \
9037
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_10_COST_CON_DELIVERED, 0x0554, "Previous Month 10 Cost Consumption Delivered" ) \
9038
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_10_COST_CON_RECEIVED,  0x0555, "Previous Month 10 Cost Consumption Received" ) \
9039
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_11_COST_CON_DELIVERED, 0x0556, "Previous Month 11 Cost Consumption Delivered" ) \
9040
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_11_COST_CON_RECEIVED,  0x0557, "Previous Month 11 Cost Consumption Received" ) \
9041
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_12_COST_CON_DELIVERED, 0x0558, "Previous Month 12 Cost Consumption Delivered" ) \
9042
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_12_COST_CON_RECEIVED,  0x0559, "Previous Month 12 Cost Consumption Received" ) \
9043
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_13_COST_CON_DELIVERED, 0x055A, "Previous Month 13 Cost Consumption Delivered" ) \
9044
    XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_13_COST_CON_RECEIVED,  0x055B, "Previous Month 13 Cost Consumption Received" ) \
9045
    XXX(ZBEE_ZCL_ATTR_ID_PP_HISTORICAL_FREEZE_TIME,             0x055C, "Historical Freeze Time" ) \
9046
/* Smart Energy */ \
9047
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PP,              0xFFFE, "Attribute Reporting Status" )
9048
9049
VALUE_STRING_ENUM(zbee_zcl_pp_attr_names);
9050
VALUE_STRING_ARRAY(zbee_zcl_pp_attr_names);
9051
static value_string_ext zbee_zcl_pp_attr_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_pp_attr_names);
9052
9053
/* Server Commands Received */
9054
#define zbee_zcl_pp_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
9055
    XXX(ZBEE_ZCL_CMD_ID_PP_SELECT_AVAILABLE_EMERGENCY_CREDIT,   0x00, "Select Available Emergency Credit" ) \
9056
    XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_DEBT,                         0x02, "Change Debt" ) \
9057
    XXX(ZBEE_ZCL_CMD_ID_PP_EMERGENCY_CREDIT_SETUP,              0x03, "Emergency Credit Setup" ) \
9058
    XXX(ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP,                     0x04, "Consumer Top Up" ) \
9059
    XXX(ZBEE_ZCL_CMD_ID_PP_CREDIT_ADJUSTMENT,                   0x05, "Credit Adjustment" ) \
9060
    XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE,                 0x06, "Change Payment Mode" ) \
9061
    XXX(ZBEE_ZCL_CMD_ID_PP_GET_PREPAY_SNAPTSHOT,                0x07, "Get Prepay Snapshot" ) \
9062
    XXX(ZBEE_ZCL_CMD_ID_PP_GET_TOP_UP_LOG,                      0x08, "Get Top Up Log" ) \
9063
    XXX(ZBEE_ZCL_CMD_ID_PP_SET_LOW_CREDIT_WARNING_LEVEL,        0x09, "Set Low Credit Warning Level" ) \
9064
    XXX(ZBEE_ZCL_CMD_ID_PP_GET_DEBT_REPAYMENT_LOG,              0x0A, "Get Debt Repayment Log" ) \
9065
    XXX(ZBEE_ZCL_CMD_ID_PP_SET_MAXIMUM_CREDIT_LIMIT,            0x0B, "Set Maximum Credit Limit" ) \
9066
    XXX(ZBEE_ZCL_CMD_ID_PP_SET_OVERALL_DEBT_CAP,                0x0C, "Set Overall Debt Cap" )
9067
9068
VALUE_STRING_ENUM(zbee_zcl_pp_srv_rx_cmd_names);
9069
VALUE_STRING_ARRAY(zbee_zcl_pp_srv_rx_cmd_names);
9070
9071
/* Server Commands Generated */
9072
#define zbee_zcl_pp_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
9073
    XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_PREPAY_SNAPSHOT,             0x01, "Publish Prepay Snapshot" ) \
9074
    XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE_RESPONSE,        0x02, "Change Payment Mode Response" ) \
9075
    XXX(ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP_RESPONSE,            0x03, "Consumer Top Up Response" ) \
9076
    XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_TOP_UP_LOG,                  0x05, "Publish Top Up Log" ) \
9077
    XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_DEBT_LOG,                    0x06, "Publish Debt Log" )
9078
9079
VALUE_STRING_ENUM(zbee_zcl_pp_srv_tx_cmd_names);
9080
VALUE_STRING_ARRAY(zbee_zcl_pp_srv_tx_cmd_names);
9081
9082
/*************************/
9083
/* Function Declarations */
9084
/*************************/
9085
void proto_register_zbee_zcl_pp(void);
9086
void proto_reg_handoff_zbee_zcl_pp(void);
9087
9088
/* Command Dissector Helpers */
9089
static void dissect_zcl_pp_select_available_emergency_credit    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9090
static void dissect_zcl_pp_change_debt                          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9091
static void dissect_zcl_pp_emergency_credit_setup               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9092
static void dissect_zcl_pp_consumer_top_up                      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9093
static void dissect_zcl_pp_credit_adjustment                    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9094
static void dissect_zcl_pp_change_payment_mode                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9095
static void dissect_zcl_pp_get_prepay_snapshot                  (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9096
static void dissect_zcl_pp_get_top_up_log                       (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9097
static void dissect_zcl_pp_set_low_credit_warning_level         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9098
static void dissect_zcl_pp_get_debt_repayment_log               (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9099
static void dissect_zcl_pp_set_maximum_credit_limit             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9100
static void dissect_zcl_pp_set_overall_debt_cap                 (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9101
static void dissect_zcl_pp_publish_prepay_snapshot              (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9102
static void dissect_zcl_pp_change_payment_mode_response         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9103
static void dissect_zcl_pp_consumer_top_up_response             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9104
static void dissect_zcl_pp_publish_top_up_log                   (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9105
static void dissect_zcl_pp_publish_debt_log                     (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9106
9107
/*************************/
9108
/* Global Variables      */
9109
/*************************/
9110
9111
/* Initialize the protocol and registered fields */
9112
static int proto_zbee_zcl_pp;
9113
9114
static int hf_zbee_zcl_pp_srv_tx_cmd_id;
9115
static int hf_zbee_zcl_pp_srv_rx_cmd_id;
9116
static int hf_zbee_zcl_pp_attr_id;
9117
static int hf_zbee_zcl_pp_attr_reporting_status;
9118
static int hf_zbee_zcl_pp_select_available_emc_cmd_issue_date_time;
9119
static int hf_zbee_zcl_pp_select_available_emc_originating_device;
9120
static int hf_zbee_zcl_pp_change_debt_issuer_event_id;
9121
static int hf_zbee_zcl_pp_change_debt_label;
9122
static int hf_zbee_zcl_pp_change_debt_amount;
9123
static int hf_zbee_zcl_pp_change_debt_recovery_method;
9124
static int hf_zbee_zcl_pp_change_debt_amount_type;
9125
static int hf_zbee_zcl_pp_change_debt_recovery_start_time;
9126
static int hf_zbee_zcl_pp_change_debt_recovery_collection_time;
9127
static int hf_zbee_zcl_pp_change_debt_recovery_frequency;
9128
static int hf_zbee_zcl_pp_change_debt_recovery_amount;
9129
static int hf_zbee_zcl_pp_change_debt_recovery_balance_percentage;
9130
static int hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id;
9131
static int hf_zbee_zcl_pp_emergency_credit_setup_start_time;
9132
static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit;
9133
static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold;
9134
static int hf_zbee_zcl_pp_consumer_top_up_originating_device;
9135
static int hf_zbee_zcl_pp_consumer_top_up_top_up_code;
9136
static int hf_zbee_zcl_pp_credit_adjustment_issuer_event_id;
9137
static int hf_zbee_zcl_pp_credit_adjustment_start_time;
9138
static int hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type;
9139
static int hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value;
9140
static int hf_zbee_zcl_pp_change_payment_mode_provider_id;
9141
static int hf_zbee_zcl_pp_change_payment_mode_issuer_event_id;
9142
static int hf_zbee_zcl_pp_change_payment_mode_implementation_date_time;
9143
static int hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration;
9144
static int hf_zbee_zcl_pp_change_payment_mode_cut_off_value;
9145
static int hf_zbee_zcl_pp_get_prepay_snapshot_earliest_start_time;
9146
static int hf_zbee_zcl_pp_get_prepay_snapshot_latest_end_time;
9147
static int hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset;
9148
static int hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause;
9149
static int hf_zbee_zcl_pp_get_top_up_log_latest_end_time;
9150
static int hf_zbee_zcl_pp_get_top_up_log_number_of_records;
9151
static int hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level;
9152
static int hf_zbee_zcl_pp_get_debt_repayment_log_latest_end_time;
9153
static int hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts;
9154
static int hf_zbee_zcl_pp_get_debt_repayment_log_debt_type;
9155
static int hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id;
9156
static int hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id;
9157
static int hf_zbee_zcl_pp_set_maximum_credit_limit_implementation_date_time;
9158
static int hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level;
9159
static int hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up;
9160
static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id;
9161
static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id;
9162
static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_implementation_date_time;
9163
static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap;
9164
static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id;
9165
static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time;
9166
static int hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found;
9167
static int hf_zbee_zcl_pp_publish_prepay_snapshot_command_index;
9168
static int hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands;
9169
static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause;
9170
static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type;
9171
static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload;
9172
static int hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit;
9173
static int hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id;
9174
static int hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit;
9175
static int hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold;
9176
static int hf_zbee_zcl_pp_consumer_top_up_response_result_type;
9177
static int hf_zbee_zcl_pp_consumer_top_up_response_top_up_value;
9178
static int hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up;
9179
static int hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining;
9180
static int hf_zbee_zcl_pp_publish_top_up_log_command_index;
9181
static int hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands;
9182
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_code;
9183
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_amount;
9184
static int hf_zbee_zcl_pp_publish_top_up_log_top_up_time;
9185
static int hf_zbee_zcl_pp_publish_debt_log_command_index;
9186
static int hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands;
9187
static int hf_zbee_zcl_pp_publish_debt_log_collection_time;
9188
static int hf_zbee_zcl_pp_publish_debt_log_amount_collected;
9189
static int hf_zbee_zcl_pp_publish_debt_log_debt_type;
9190
static int hf_zbee_zcl_pp_publish_debt_log_outstanding_debt;
9191
static int hf_zbee_zcl_pp_payment_control_configuration;
9192
static int hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled;
9193
static int hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled;
9194
static int hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled;
9195
static int hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled;
9196
static int hf_zbee_zcl_pp_payment_control_configuration_account_base;
9197
static int hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted;
9198
static int hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration;
9199
static int hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration;
9200
static int hf_zbee_zcl_pp_payment_control_configuration_debt_configuration;
9201
static int hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration;
9202
static int hf_zbee_zcl_pp_payment_control_configuration_reserved;
9203
static int hf_zbee_zcl_pp_snapshot_payload_cause_general;
9204
static int hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period;
9205
static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information;
9206
static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix;
9207
static int hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client;
9208
static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy;
9209
static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier;
9210
static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode;
9211
static int hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition;
9212
static int hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition;
9213
static int hf_zbee_zcl_pp_snapshot_payload_cause_reserved;
9214
9215
static int* const zbee_zcl_pp_payment_control_configuration_flags[] = {
9216
        &hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled,
9217
        &hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled,
9218
        &hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled,
9219
        &hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled,
9220
        &hf_zbee_zcl_pp_payment_control_configuration_account_base,
9221
        &hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted,
9222
        &hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration,
9223
        &hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration,
9224
        &hf_zbee_zcl_pp_payment_control_configuration_debt_configuration,
9225
        &hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration,
9226
        &hf_zbee_zcl_pp_payment_control_configuration_reserved,
9227
        NULL
9228
};
9229
9230
static int* const zbee_zcl_pp_snapshot_payload_cause_flags[] = {
9231
        &hf_zbee_zcl_pp_snapshot_payload_cause_general,
9232
        &hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period,
9233
        &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information,
9234
        &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix,
9235
        &hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client,
9236
        &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy,
9237
        &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier,
9238
        &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode,
9239
        &hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition,
9240
        &hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition,
9241
        &hf_zbee_zcl_pp_snapshot_payload_cause_reserved,
9242
        NULL
9243
};
9244
9245
/* Initialize the subtree pointers */
9246
15
#define ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT             3
9247
465
#define ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT     30
9248
465
#define ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT       30
9249
#define ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT                  (ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT + \
9250
                                                       ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT + \
9251
                                                       ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT)
9252
9253
static int ett_zbee_zcl_pp;
9254
static int ett_zbee_zcl_pp_payment_control_configuration;
9255
static int ett_zbee_zcl_pp_snapshot_payload_cause;
9256
static int ett_zbee_zcl_pp_publish_top_up_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT];
9257
static int ett_zbee_zcl_pp_publish_debt_log_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT];
9258
9259
/*************************/
9260
/* Function Bodies       */
9261
/*************************/
9262
9263
/**
9264
 *This function is called by ZCL foundation dissector in order to decode
9265
 *
9266
 *@param tree pointer to data tree Wireshark uses to display packet.
9267
 *@param tvb pointer to buffer containing raw packet.
9268
 *@param offset pointer to buffer offset
9269
 *@param attr_id attribute identifier
9270
 *@param data_type attribute data type
9271
 *@param client_attr ZCL client
9272
*/
9273
static void
9274
dissect_zcl_pp_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
9275
77
{
9276
77
    switch (attr_id) {
9277
        /* applies to all SE clusters */
9278
0
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PP:
9279
0
            proto_tree_add_item(tree, hf_zbee_zcl_pp_attr_reporting_status, tvb, *offset, 1, ENC_NA);
9280
0
            *offset += 1;
9281
0
            break;
9282
41
        case ZBEE_ZCL_ATTR_ID_PP_PAYMENT_CONTROL_CONFIGURATION:
9283
41
            proto_item_append_text(tree, ", Payment Control Configuration");
9284
41
            proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_payment_control_configuration,
9285
41
                                   ett_zbee_zcl_pp_payment_control_configuration, zbee_zcl_pp_payment_control_configuration_flags, ENC_LITTLE_ENDIAN);
9286
41
            *offset += 2;
9287
41
            break;
9288
36
        default: /* Catch all */
9289
36
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
9290
36
            break;
9291
77
    }
9292
77
} /*dissect_zcl_pp_attr_data*/
9293
9294
/**
9295
 *ZigBee ZCL Prepayment cluster dissector for wireshark.
9296
 *
9297
 *@param tvb pointer to buffer containing raw packet.
9298
 *@param pinfo pointer to packet information fields
9299
 *@param tree pointer to data tree Wireshark uses to display packet.
9300
*/
9301
static int
9302
dissect_zbee_zcl_pp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
9303
3
{
9304
3
    proto_tree        *payload_tree;
9305
3
    zbee_zcl_packet   *zcl;
9306
3
    unsigned          offset = 0;
9307
3
    uint8_t           cmd_id;
9308
3
    int               rem_len;
9309
9310
    /* Reject the packet if data is NULL */
9311
3
    if (data == NULL)
9312
0
        return 0;
9313
3
    zcl = (zbee_zcl_packet *)data;
9314
3
    cmd_id = zcl->cmd_id;
9315
9316
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
9317
3
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
9318
        /* Append the command name to the info column. */
9319
2
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
9320
2
            val_to_str_const(cmd_id, zbee_zcl_pp_srv_rx_cmd_names, "Unknown Command"),
9321
2
            zcl->tran_seqno);
9322
9323
        /* Add the command ID. */
9324
2
        proto_tree_add_uint(tree, hf_zbee_zcl_pp_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
9325
9326
        /* Check is this command has a payload, than add the payload tree */
9327
2
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
9328
2
        if (rem_len > 0) {
9329
2
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_pp, NULL, "Payload");
9330
9331
            /* Call the appropriate command dissector */
9332
2
            switch (cmd_id) {
9333
9334
1
                case ZBEE_ZCL_CMD_ID_PP_SELECT_AVAILABLE_EMERGENCY_CREDIT:
9335
1
                    dissect_zcl_pp_select_available_emergency_credit(tvb, payload_tree, &offset);
9336
1
                    break;
9337
9338
0
                case ZBEE_ZCL_CMD_ID_PP_CHANGE_DEBT:
9339
0
                    dissect_zcl_pp_change_debt(tvb, payload_tree, &offset);
9340
0
                    break;
9341
9342
1
                case ZBEE_ZCL_CMD_ID_PP_EMERGENCY_CREDIT_SETUP:
9343
1
                    dissect_zcl_pp_emergency_credit_setup(tvb, payload_tree, &offset);
9344
1
                    break;
9345
9346
0
                case ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP:
9347
0
                    dissect_zcl_pp_consumer_top_up(tvb, payload_tree, &offset);
9348
0
                    break;
9349
9350
0
                case ZBEE_ZCL_CMD_ID_PP_CREDIT_ADJUSTMENT:
9351
0
                    dissect_zcl_pp_credit_adjustment(tvb, payload_tree, &offset);
9352
0
                    break;
9353
9354
0
                case ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE:
9355
0
                    dissect_zcl_pp_change_payment_mode(tvb, payload_tree, &offset);
9356
0
                    break;
9357
9358
0
                case ZBEE_ZCL_CMD_ID_PP_GET_PREPAY_SNAPTSHOT:
9359
0
                    dissect_zcl_pp_get_prepay_snapshot(tvb, payload_tree, &offset);
9360
0
                    break;
9361
9362
0
                case ZBEE_ZCL_CMD_ID_PP_GET_TOP_UP_LOG:
9363
0
                    dissect_zcl_pp_get_top_up_log(tvb, payload_tree, &offset);
9364
0
                    break;
9365
9366
0
                case ZBEE_ZCL_CMD_ID_PP_SET_LOW_CREDIT_WARNING_LEVEL:
9367
0
                    dissect_zcl_pp_set_low_credit_warning_level(tvb, payload_tree, &offset);
9368
0
                    break;
9369
9370
0
                case ZBEE_ZCL_CMD_ID_PP_GET_DEBT_REPAYMENT_LOG:
9371
0
                    dissect_zcl_pp_get_debt_repayment_log(tvb, payload_tree, &offset);
9372
0
                    break;
9373
9374
0
                case ZBEE_ZCL_CMD_ID_PP_SET_MAXIMUM_CREDIT_LIMIT:
9375
0
                    dissect_zcl_pp_set_maximum_credit_limit(tvb, payload_tree, &offset);
9376
0
                    break;
9377
9378
0
                case ZBEE_ZCL_CMD_ID_PP_SET_OVERALL_DEBT_CAP:
9379
0
                    dissect_zcl_pp_set_overall_debt_cap(tvb, payload_tree, &offset);
9380
0
                    break;
9381
9382
0
                default:
9383
0
                    break;
9384
2
            }
9385
2
        }
9386
2
    }
9387
1
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
9388
        /* Append the command name to the info column. */
9389
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
9390
1
            val_to_str_const(cmd_id, zbee_zcl_pp_srv_tx_cmd_names, "Unknown Command"),
9391
1
            zcl->tran_seqno);
9392
9393
        /* Add the command ID. */
9394
1
        proto_tree_add_uint(tree, hf_zbee_zcl_pp_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
9395
9396
        /* Check is this command has a payload, than add the payload tree */
9397
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
9398
1
        if (rem_len > 0) {
9399
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_pp, NULL, "Payload");
9400
9401
            /* Call the appropriate command dissector */
9402
1
            switch (cmd_id) {
9403
9404
0
                case ZBEE_ZCL_CMD_ID_PP_PUBLISH_PREPAY_SNAPSHOT:
9405
0
                    dissect_zcl_pp_publish_prepay_snapshot(tvb, payload_tree, &offset);
9406
0
                    break;
9407
9408
0
                case ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE_RESPONSE:
9409
0
                    dissect_zcl_pp_change_payment_mode_response(tvb, payload_tree, &offset);
9410
0
                    break;
9411
9412
0
                case ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP_RESPONSE:
9413
0
                    dissect_zcl_pp_consumer_top_up_response(tvb, payload_tree, &offset);
9414
0
                    break;
9415
9416
0
                case ZBEE_ZCL_CMD_ID_PP_PUBLISH_TOP_UP_LOG:
9417
0
                    dissect_zcl_pp_publish_top_up_log(tvb, payload_tree, &offset);
9418
0
                    break;
9419
9420
0
                case ZBEE_ZCL_CMD_ID_PP_PUBLISH_DEBT_LOG:
9421
0
                    dissect_zcl_pp_publish_debt_log(tvb, payload_tree, &offset);
9422
0
                    break;
9423
9424
1
                default:
9425
1
                    break;
9426
1
            }
9427
1
        }
9428
1
    }
9429
9430
3
    return tvb_captured_length(tvb);
9431
3
} /*dissect_zbee_zcl_pp*/
9432
9433
/**
9434
 *This function manages the Select Available Emergency Credit payload
9435
 *
9436
 *@param tvb pointer to buffer containing raw packet.
9437
 *@param tree pointer to data tree Wireshark uses to display packet.
9438
 *@param offset pointer to offset from caller
9439
*/
9440
static void
9441
dissect_zcl_pp_select_available_emergency_credit(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9442
1
{
9443
    /* Command Issue Date/Time */
9444
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_select_available_emc_cmd_issue_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9445
1
    *offset += 4;
9446
9447
    /* Originating Device */
9448
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_select_available_emc_originating_device, tvb, *offset, 1, ENC_NA);
9449
1
    *offset += 1;
9450
1
} /*dissect_zcl_pp_select_available_emergency_credit*/
9451
9452
/**
9453
 *This function manages the Change Debt payload
9454
 *
9455
 *@param tvb pointer to buffer containing raw packet.
9456
 *@param tree pointer to data tree Wireshark uses to display packet.
9457
 *@param offset pointer to offset from caller
9458
*/
9459
static void
9460
dissect_zcl_pp_change_debt(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9461
0
{
9462
0
    uint8_t label_length;
9463
9464
    /* Issuer Event ID */
9465
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9466
0
    *offset += 4;
9467
9468
    /* Debt Label */
9469
0
    label_length = tvb_get_uint8(tvb, *offset) + 1;
9470
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_label, tvb, *offset, label_length, ENC_NA);
9471
0
    *offset += label_length;
9472
9473
    /* Debt Amount */
9474
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9475
0
    *offset += 4;
9476
9477
    /* Debt Recovery Method */
9478
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_method, tvb, *offset, 1, ENC_NA);
9479
0
    *offset += 1;
9480
9481
    /* Debt Amount Type */
9482
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_amount_type, tvb, *offset, 1, ENC_NA);
9483
0
    *offset += 1;
9484
9485
    /* Debt Recovery Start Time */
9486
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9487
0
    *offset += 4;
9488
9489
    /* Debt Recovery Collection Time */
9490
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_collection_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
9491
0
    *offset += 2;
9492
9493
    /* Debt Recovery Frequency */
9494
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_frequency, tvb, *offset, 1, ENC_NA);
9495
0
    *offset += 1;
9496
9497
    /* Debt Recovery Amount */
9498
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9499
0
    *offset += 4;
9500
9501
    /* Debt Recovery Balance Percentage */
9502
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_balance_percentage, tvb, *offset, 1, ENC_NA);
9503
0
    *offset += 1;
9504
0
} /*dissect_zcl_pp_change_debt*/
9505
9506
/**
9507
 *This function manages the Select Available Emergency Credit payload
9508
 *
9509
 *@param tvb pointer to buffer containing raw packet.
9510
 *@param tree pointer to data tree Wireshark uses to display packet.
9511
 *@param offset pointer to offset from caller
9512
*/
9513
static void
9514
dissect_zcl_pp_emergency_credit_setup(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9515
1
{
9516
    /* Issuer Event ID */
9517
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9518
1
    *offset += 4;
9519
9520
    /* Start Time */
9521
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9522
1
    *offset += 4;
9523
9524
    /* Emergency Credit Limit */
9525
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9526
1
    *offset += 4;
9527
9528
    /* Emergency Credit Threshold */
9529
1
    proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9530
1
    *offset += 4;
9531
1
} /*dissect_zcl_pp_emergency_credit_setup*/
9532
9533
/**
9534
 *This function manages the Consumer Top Up payload
9535
 *
9536
 *@param tvb pointer to buffer containing raw packet.
9537
 *@param tree pointer to data tree Wireshark uses to display packet.
9538
 *@param offset pointer to offset from caller
9539
*/
9540
static void
9541
dissect_zcl_pp_consumer_top_up(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9542
0
{
9543
0
    int length;
9544
9545
    /* Originating Device */
9546
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_originating_device, tvb, *offset, 1, ENC_NA);
9547
0
    *offset += 1;
9548
9549
    /* TopUp Code */
9550
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_pp_consumer_top_up_top_up_code, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
9551
0
    *offset += length;
9552
0
} /*dissect_zcl_pp_consumer_top_up*/
9553
9554
/**
9555
 *This function manages the Credit Adjustment payload
9556
 *
9557
 *@param tvb pointer to buffer containing raw packet.
9558
 *@param tree pointer to data tree Wireshark uses to display packet.
9559
 *@param offset pointer to offset from caller
9560
*/
9561
static void
9562
dissect_zcl_pp_credit_adjustment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9563
0
{
9564
    /* Issuer Event ID */
9565
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9566
0
    *offset += 4;
9567
9568
    /* Start Time */
9569
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9570
0
    *offset += 4;
9571
9572
    /* Credit Adjustment Type */
9573
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type, tvb, *offset, 1, ENC_NA);
9574
0
    *offset += 1;
9575
9576
    /* Credit Adjustment Value */
9577
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9578
0
    *offset += 4;
9579
0
} /*dissect_zcl_pp_credit_adjustment*/
9580
9581
/**
9582
 *This function manages the Change Payment Mode payload
9583
 *
9584
 *@param tvb pointer to buffer containing raw packet.
9585
 *@param tree pointer to data tree Wireshark uses to display packet.
9586
 *@param offset pointer to offset from caller
9587
*/
9588
static void
9589
dissect_zcl_pp_change_payment_mode(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9590
0
{
9591
    /* Provider ID */
9592
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9593
0
    *offset += 4;
9594
9595
    /* Issuer Event ID */
9596
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9597
0
    *offset += 4;
9598
9599
    /* Implementation Date/Time */
9600
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9601
0
    *offset += 4;
9602
9603
    /* Proposed Payment Control Configuration */
9604
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration,
9605
0
                           ett_zbee_zcl_pp_payment_control_configuration, zbee_zcl_pp_payment_control_configuration_flags, ENC_LITTLE_ENDIAN);
9606
0
    *offset += 2;
9607
9608
    /* Cut Off Value */
9609
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_cut_off_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9610
0
    *offset += 4;
9611
0
} /*dissect_zcl_pp_change_payment_mode*/
9612
9613
/**
9614
 *This function manages the Get Prepay Snapshot payload
9615
 *
9616
 *@param tvb pointer to buffer containing raw packet.
9617
 *@param tree pointer to data tree Wireshark uses to display packet.
9618
 *@param offset pointer to offset from caller
9619
*/
9620
static void
9621
dissect_zcl_pp_get_prepay_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9622
0
{
9623
    /* Earliest Start Time */
9624
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_prepay_snapshot_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9625
0
    *offset += 4;
9626
9627
    /* Latest End Time */
9628
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_prepay_snapshot_latest_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9629
0
    *offset += 4;
9630
9631
    /* Snapshot Offset */
9632
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset, tvb, *offset, 1, ENC_NA);
9633
0
    *offset += 1;
9634
9635
    /* Snapshot Cause */
9636
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause,
9637
0
                           ett_zbee_zcl_pp_snapshot_payload_cause, zbee_zcl_pp_snapshot_payload_cause_flags, ENC_LITTLE_ENDIAN);
9638
0
    *offset += 4;
9639
0
} /*dissect_zcl_pp_get_prepay_snapshot*/
9640
9641
/**
9642
 *This function manages the Get Top Up Log payload
9643
 *
9644
 *@param tvb pointer to buffer containing raw packet.
9645
 *@param tree pointer to data tree Wireshark uses to display packet.
9646
 *@param offset pointer to offset from caller
9647
*/
9648
static void
9649
dissect_zcl_pp_get_top_up_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9650
0
{
9651
    /* Latest End Time */
9652
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_top_up_log_latest_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9653
0
    *offset += 4;
9654
9655
    /* Number of Records */
9656
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_top_up_log_number_of_records, tvb, *offset, 1, ENC_NA);
9657
0
    *offset += 1;
9658
0
} /*dissect_zcl_pp_get_top_up_log*/
9659
9660
/**
9661
 *This function manages the Set Low Credit Warning Level payload
9662
 *
9663
 *@param tvb pointer to buffer containing raw packet.
9664
 *@param tree pointer to data tree Wireshark uses to display packet.
9665
 *@param offset pointer to offset from caller
9666
*/
9667
static void
9668
dissect_zcl_pp_set_low_credit_warning_level(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9669
0
{
9670
    /* Low Credit Warning Level */
9671
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9672
0
    *offset += 4;
9673
0
} /*dissect_zcl_pp_set_low_credit_warning_level*/
9674
9675
  /**
9676
  *This function manages the Get Debt Repayment Log payload
9677
  *
9678
  *@param tvb pointer to buffer containing raw packet.
9679
  *@param tree pointer to data tree Wireshark uses to display packet.
9680
  *@param offset pointer to offset from caller
9681
  */
9682
static void
9683
dissect_zcl_pp_get_debt_repayment_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9684
0
{
9685
    /* Latest End Time */
9686
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_debt_repayment_log_latest_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9687
0
    *offset += 4;
9688
9689
    /* Number of Records */
9690
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts, tvb, *offset, 1, ENC_NA);
9691
0
    *offset += 1;
9692
9693
    /* Debt Type */
9694
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_get_debt_repayment_log_debt_type, tvb, *offset, 1, ENC_NA);
9695
0
    *offset += 1;
9696
0
} /*dissect_zcl_pp_get_debt_repayment_log*/
9697
9698
/**
9699
 *This function manages the Set Maximum Credit Limit payload
9700
 *
9701
 *@param tvb pointer to buffer containing raw packet.
9702
 *@param tree pointer to data tree Wireshark uses to display packet.
9703
 *@param offset pointer to offset from caller
9704
*/
9705
static void
9706
dissect_zcl_pp_set_maximum_credit_limit(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9707
0
{
9708
    /* Provider ID */
9709
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9710
0
    *offset += 4;
9711
9712
    /* Issuer Event ID */
9713
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9714
0
    *offset += 4;
9715
9716
    /* Implementation Date/Time */
9717
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9718
0
    *offset += 4;
9719
9720
    /* Maximum Credit Level */
9721
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9722
0
    *offset += 4;
9723
9724
    /* Maximum Credit Per Top Up  */
9725
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9726
0
    *offset += 4;
9727
0
} /*dissect_zcl_pp_set_maximum_credit_limit*/
9728
9729
/**
9730
 *This function manages the Set Overall Debt Cap payload
9731
 *
9732
 *@param tvb pointer to buffer containing raw packet.
9733
 *@param tree pointer to data tree Wireshark uses to display packet.
9734
 *@param offset pointer to offset from caller
9735
*/
9736
static void
9737
dissect_zcl_pp_set_overall_debt_cap(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9738
0
{
9739
    /* Provider ID */
9740
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9741
0
    *offset += 4;
9742
9743
    /* Issuer Event ID */
9744
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9745
0
    *offset += 4;
9746
9747
    /* Implementation Date/Time */
9748
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9749
0
    *offset += 4;
9750
9751
    /* Overall Debt Cap */
9752
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9753
0
    *offset += 4;
9754
0
} /*dissect_zcl_pp_set_overall_debt_cap*/
9755
9756
/**
9757
 *This function manages the Publish Prepay Snapshot payload
9758
 *
9759
 *@param tvb pointer to buffer containing raw packet.
9760
 *@param tree pointer to data tree Wireshark uses to display packet.
9761
 *@param offset pointer to offset from caller
9762
*/
9763
static void
9764
dissect_zcl_pp_publish_prepay_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9765
0
{
9766
0
    int rem_len;
9767
9768
    /* Snapshot ID */
9769
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9770
0
    *offset += 4;
9771
9772
    /* Snapshot Time */
9773
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9774
0
    *offset += 4;
9775
9776
    /* Total Snapshots Found */
9777
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found, tvb, *offset, 1, ENC_NA);
9778
0
    *offset += 1;
9779
9780
    /* Command Index */
9781
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_command_index, tvb, *offset, 1, ENC_NA);
9782
0
    *offset += 1;
9783
9784
    /* Total Number of Commands */
9785
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9786
0
    *offset += 1;
9787
9788
    /* Snapshot Cause */
9789
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause,
9790
0
                           ett_zbee_zcl_pp_snapshot_payload_cause, zbee_zcl_pp_snapshot_payload_cause_flags, ENC_LITTLE_ENDIAN);
9791
0
    *offset += 4;
9792
9793
    /* Snapshot Payload Type */
9794
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type, tvb, *offset, 1, ENC_NA);
9795
0
    *offset += 1;
9796
9797
    /* Snapshot Payload */
9798
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
9799
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload, tvb, *offset, rem_len, ENC_NA);
9800
0
    *offset += rem_len;
9801
0
} /*dissect_zcl_pp_publish_prepay_snapshot*/
9802
9803
/**
9804
 *This function manages the Change Payment Mode Response payload
9805
 *
9806
 *@param tvb pointer to buffer containing raw packet.
9807
 *@param tree pointer to data tree Wireshark uses to display packet.
9808
 *@param offset pointer to offset from caller
9809
*/
9810
static void
9811
dissect_zcl_pp_change_payment_mode_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9812
0
{
9813
    /* Friendly Credit */
9814
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit, tvb, *offset, 1, ENC_NA);
9815
0
    *offset += 1;
9816
9817
    /* Friendly Credit Calendar ID */
9818
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9819
0
    *offset += 4;
9820
9821
    /* Emergency Credit Limit */
9822
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9823
0
    *offset += 4;
9824
9825
    /* Emergency Credit Threshold */
9826
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9827
0
    *offset += 4;
9828
0
} /*dissect_zcl_pp_change_payment_mode_response*/
9829
9830
/**
9831
 *This function manages the Consumer Top Up Response payload
9832
 *
9833
 *@param tvb pointer to buffer containing raw packet.
9834
 *@param tree pointer to data tree Wireshark uses to display packet.
9835
 *@param offset pointer to offset from caller
9836
*/
9837
static void
9838
dissect_zcl_pp_consumer_top_up_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9839
0
{
9840
    /* Result Type */
9841
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_result_type, tvb, *offset, 1, ENC_NA);
9842
0
    *offset += 1;
9843
9844
    /* Top Up Value */
9845
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_top_up_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9846
0
    *offset += 4;
9847
9848
    /* Source of Top up */
9849
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up, tvb, *offset, 1, ENC_NA);
9850
0
    *offset += 1;
9851
9852
    /* Credit Remaining */
9853
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9854
0
    *offset += 4;
9855
0
} /*dissect_zcl_pp_consumer_top_up_response*/
9856
9857
/**
9858
 *This function manages the Publish Top Up Log payload
9859
 *
9860
 *@param tvb pointer to buffer containing raw packet.
9861
 *@param tree pointer to data tree Wireshark uses to display packet.
9862
 *@param offset pointer to offset from caller
9863
*/
9864
static void
9865
dissect_zcl_pp_publish_top_up_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9866
0
{
9867
0
    unsigned i = 0;
9868
0
    int length;
9869
0
    proto_tree *sub_tree;
9870
9871
    /* Command Index */
9872
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_top_up_log_command_index, tvb, *offset, 1, ENC_NA);
9873
0
    *offset += 1;
9874
9875
    /* Total Number of Commands */
9876
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9877
0
    *offset += 1;
9878
9879
    /* Top Up Payload */
9880
0
    while (tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT) {
9881
        /* Add subtree */
9882
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, *offset, 0, ett_zbee_zcl_pp_publish_top_up_entry[i], NULL, "TopUp Log %d", i + 1);
9883
0
        i++;
9884
9885
        /* Top Up Code */
9886
0
        proto_tree_add_item_ret_length(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_code, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
9887
0
        *offset += length;
9888
9889
        /* Top Up Amount */
9890
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9891
0
        *offset += 4;
9892
9893
        /* Top Up Time */
9894
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9895
0
        *offset += 4;
9896
9897
        /* Set length of subtree */
9898
0
        proto_item_set_end(proto_tree_get_parent(sub_tree), tvb, *offset);
9899
0
    }
9900
0
} /*dissect_zcl_pp_publish_top_up_log*/
9901
9902
/**
9903
 *This function manages the Publish Debt Log payload
9904
 *
9905
 *@param tvb pointer to buffer containing raw packet.
9906
 *@param tree pointer to data tree Wireshark uses to display packet.
9907
 *@param offset pointer to offset from caller
9908
*/
9909
static void
9910
dissect_zcl_pp_publish_debt_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9911
0
{
9912
0
    unsigned i = 0;
9913
0
    proto_tree *sub_tree;
9914
9915
    /* Command Index */
9916
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_debt_log_command_index, tvb, *offset, 1, ENC_NA);
9917
0
    *offset += 1;
9918
9919
    /* Total Number of Commands */
9920
0
    proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9921
0
    *offset += 1;
9922
9923
    /* Debt Payload */
9924
0
    while (tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT) {
9925
        /* Add subtree */
9926
0
        sub_tree = proto_tree_add_subtree_format(tree, tvb, *offset, 4 + 4 + 1 + 4, ett_zbee_zcl_pp_publish_debt_log_entry[i], NULL, "Debt Log %d", i + 1);
9927
0
        i++;
9928
9929
        /* Collection Time */
9930
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_collection_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9931
0
        *offset += 4;
9932
9933
        /* Amount Collected */
9934
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_amount_collected, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9935
0
        *offset += 4;
9936
9937
        /* Debt Type */
9938
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_debt_type, tvb, *offset, 1, ENC_NA);
9939
0
        *offset += 1;
9940
9941
        /* Outstanding Debt */
9942
0
        proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_outstanding_debt, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9943
0
        *offset += 4;
9944
0
    }
9945
0
} /*dissect_zcl_pp_publish_debt_log*/
9946
9947
/**
9948
 *This function registers the ZCL Prepayment dissector
9949
 *
9950
*/
9951
void
9952
proto_register_zbee_zcl_pp(void)
9953
15
{
9954
15
    static hf_register_info hf[] = {
9955
9956
15
        { &hf_zbee_zcl_pp_attr_id,
9957
15
            { "Attribute", "zbee_zcl_se.pp.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_pp_attr_names_ext,
9958
15
            0x0, NULL, HFILL } },
9959
9960
15
        { &hf_zbee_zcl_pp_attr_reporting_status,                         /* common to all SE clusters */
9961
15
            { "Attribute Reporting Status", "zbee_zcl_se.pp.attr.attr_reporting_status",
9962
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
9963
9964
15
        { &hf_zbee_zcl_pp_srv_tx_cmd_id,
9965
15
            { "Command", "zbee_zcl_se.pp.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_pp_srv_tx_cmd_names),
9966
15
            0x00, NULL, HFILL } },
9967
9968
15
        { &hf_zbee_zcl_pp_srv_rx_cmd_id,
9969
15
            { "Command", "zbee_zcl_se.pp.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_pp_srv_rx_cmd_names),
9970
15
            0x00, NULL, HFILL } },
9971
9972
15
        { &hf_zbee_zcl_pp_select_available_emc_cmd_issue_date_time,
9973
15
            { "Command Issue Date/Time", "zbee_zcl_se.pp.select_available_emc.cmd_issue_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
9974
15
            0x00, NULL, HFILL } },
9975
9976
15
        { &hf_zbee_zcl_pp_select_available_emc_originating_device,
9977
15
            { "Originating Device", "zbee_zcl_se.pp.select_available_emc.originating_device", FT_UINT8, BASE_DEC, NULL,
9978
15
            0x00, NULL, HFILL } },
9979
9980
15
        { &hf_zbee_zcl_pp_change_debt_issuer_event_id,
9981
15
            { "Issuer Event ID", "zbee_zcl_se.pp.change_debt.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
9982
15
            0x00, NULL, HFILL } },
9983
9984
15
        { &hf_zbee_zcl_pp_change_debt_label,
9985
15
            { "Debt Label", "zbee_zcl_se.pp.change_debt.debt_label", FT_BYTES, BASE_NONE, NULL,
9986
15
            0x00, NULL, HFILL } },
9987
9988
15
        { &hf_zbee_zcl_pp_change_debt_amount,
9989
15
            { "Debt Amount", "zbee_zcl_se.pp.change_debt.debt_amount", FT_INT32, BASE_DEC, NULL,
9990
15
            0x00, NULL, HFILL } },
9991
9992
15
        { &hf_zbee_zcl_pp_change_debt_recovery_method,
9993
15
            { "Debt Recovery Method", "zbee_zcl_se.pp.change_debt.recovery_method", FT_UINT8, BASE_DEC, NULL,
9994
15
            0x00, NULL, HFILL } },
9995
9996
15
        { &hf_zbee_zcl_pp_change_debt_amount_type,
9997
15
            { "Debt Amount Type", "zbee_zcl_se.pp.change_debt.amount_type", FT_UINT8, BASE_DEC, NULL,
9998
15
            0x00, NULL, HFILL } },
9999
10000
15
        { &hf_zbee_zcl_pp_change_debt_recovery_start_time,
10001
15
            { "Debt Recovery Start Time", "zbee_zcl_se.pp.change_debt.recovery_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10002
15
            0x00, NULL, HFILL } },
10003
10004
15
        { &hf_zbee_zcl_pp_change_debt_recovery_collection_time,
10005
15
            { "Debt Recovery Collection Time", "zbee_zcl_se.pp.change_debt.recovery_collection_time", FT_UINT16, BASE_DEC, NULL,
10006
15
            0x00, NULL, HFILL } },
10007
10008
15
        { &hf_zbee_zcl_pp_change_debt_recovery_frequency,
10009
15
            { "Debt Recovery Frequency", "zbee_zcl_se.pp.change_debt.recovery_frequency", FT_UINT8, BASE_DEC, NULL,
10010
15
            0x00, NULL, HFILL } },
10011
10012
15
        { &hf_zbee_zcl_pp_change_debt_recovery_amount,
10013
15
            { "Debt Recovery Amount", "zbee_zcl_se.pp.change_debt.recovery_amount", FT_INT32, BASE_DEC, NULL,
10014
15
            0x00, NULL, HFILL } },
10015
10016
15
        { &hf_zbee_zcl_pp_change_debt_recovery_balance_percentage,
10017
15
            { "Debt Recovery Balance Percentage", "zbee_zcl_se.pp.change_debt.recovery_balance_percentage", FT_UINT8, BASE_DEC, NULL,
10018
15
            0x00, NULL, HFILL } },
10019
10020
15
        { &hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id,
10021
15
            { "Issuer Event ID", "zbee_zcl_se.pp.emc_setup.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10022
15
            0x00, NULL, HFILL } },
10023
10024
15
        { &hf_zbee_zcl_pp_emergency_credit_setup_start_time,
10025
15
            { "Start Time", "zbee_zcl_se.pp.emc_setup.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
10026
15
            0x00, NULL, HFILL } },
10027
10028
15
        { &hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit,
10029
15
            { "Emergency Credit Limit", "zbee_zcl_se.pp.emc_setup.emc_limit", FT_UINT32, BASE_DEC, NULL,
10030
15
            0x00, NULL, HFILL } },
10031
10032
15
        { &hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold,
10033
15
            { "Emergency Credit Threshold", "zbee_zcl_se.pp.emc_setup.emc_threshold", FT_UINT32, BASE_DEC, NULL,
10034
15
            0x00, NULL, HFILL } },
10035
10036
15
        { &hf_zbee_zcl_pp_consumer_top_up_originating_device,
10037
15
            { "Originating Device", "zbee_zcl_se.pp.consumer_top_up.originating_device", FT_UINT8, BASE_DEC, NULL,
10038
15
            0x00, NULL, HFILL } },
10039
10040
15
        { &hf_zbee_zcl_pp_consumer_top_up_top_up_code,
10041
15
            { "TopUp Code", "zbee_zcl_se.pp.consumer_top_up.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
10042
15
            0x00, NULL, HFILL } },
10043
10044
15
        { &hf_zbee_zcl_pp_credit_adjustment_issuer_event_id,
10045
15
            { "Issuer Event ID", "zbee_zcl_se.pp.credit_adjustment.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10046
15
            0x00, NULL, HFILL } },
10047
10048
15
        { &hf_zbee_zcl_pp_credit_adjustment_start_time,
10049
15
            { "Start Time", "zbee_zcl_se.pp.credit_adjustment.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
10050
15
            0x00, NULL, HFILL } },
10051
10052
15
        { &hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type,
10053
15
            { "Credit Adjustment Type", "zbee_zcl_se.pp.credit_adjustment.credit_adjustment_type", FT_UINT8, BASE_DEC, NULL,
10054
15
            0x00, NULL, HFILL } },
10055
10056
15
        { &hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value,
10057
15
            { "Credit Adjustment Value", "zbee_zcl_se.pp.credit_adjustment.credit_adjustment_value", FT_INT32, BASE_DEC, NULL,
10058
15
            0x00, NULL, HFILL } },
10059
10060
15
        { &hf_zbee_zcl_pp_change_payment_mode_provider_id,
10061
15
            { "Provider ID", "zbee_zcl_se.pp.change_payment_mode.provider_id", FT_UINT32, BASE_DEC, NULL,
10062
15
            0x00, NULL, HFILL } },
10063
10064
15
        { &hf_zbee_zcl_pp_change_payment_mode_issuer_event_id,
10065
15
            { "Issuer Event ID", "zbee_zcl_se.pp.change_payment_mode.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10066
15
            0x00, NULL, HFILL } },
10067
10068
15
        { &hf_zbee_zcl_pp_change_payment_mode_implementation_date_time,
10069
15
            { "Implementation Date/Time", "zbee_zcl_se.pp.change_payment_mode.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
10070
15
            0x00, NULL, HFILL } },
10071
10072
15
        { &hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration,
10073
15
            { "Proposed Payment Control Configuration", "zbee_zcl_se.pp.change_payment_mode.payment_control_configuration", FT_UINT16, BASE_HEX, NULL,
10074
15
            0x00, NULL, HFILL } },
10075
10076
15
        { &hf_zbee_zcl_pp_change_payment_mode_cut_off_value,
10077
15
            { "Cut Off Value", "zbee_zcl_se.pp.change_payment_mode.cut_off_value", FT_INT32, BASE_DEC, NULL,
10078
15
            0x00, NULL, HFILL } },
10079
10080
15
        { &hf_zbee_zcl_pp_get_prepay_snapshot_earliest_start_time,
10081
15
            { "Earliest Start Time", "zbee_zcl_se.pp.get_prepay_snapshot.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10082
15
            0x00, NULL, HFILL } },
10083
10084
15
        { &hf_zbee_zcl_pp_get_prepay_snapshot_latest_end_time,
10085
15
            { "Latest End Time", "zbee_zcl_se.pp.get_prepay_snapshot.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10086
15
            0x00, NULL, HFILL } },
10087
10088
15
        { &hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset,
10089
15
            { "Snapshot Offset", "zbee_zcl_se.pp.get_prepay_snapshot.snapshot_offset", FT_UINT8, BASE_DEC, NULL,
10090
15
            0x00, NULL, HFILL } },
10091
10092
15
        { &hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause,
10093
15
            { "Snapshot Cause", "zbee_zcl_se.pp.get_prepay_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
10094
15
            0x00, NULL, HFILL } },
10095
10096
15
        { &hf_zbee_zcl_pp_get_top_up_log_latest_end_time,
10097
15
            { "Latest End Time", "zbee_zcl_se.pp.get_top_up_log.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10098
15
            0x00, NULL, HFILL } },
10099
10100
15
        { &hf_zbee_zcl_pp_get_top_up_log_number_of_records,
10101
15
            { "Number of Records", "zbee_zcl_se.pp.get_top_up_log.number_of_records", FT_UINT8, BASE_DEC, NULL,
10102
15
            0x00, NULL, HFILL } },
10103
10104
15
        { &hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level,
10105
15
            { "Low Credit Warning Level", "zbee_zcl_se.pp.set_low_credit_warning_level.low_credit_warning_level", FT_UINT32, BASE_DEC, NULL,
10106
15
            0x00, NULL, HFILL } },
10107
10108
15
        { &hf_zbee_zcl_pp_get_debt_repayment_log_latest_end_time,
10109
15
            { "Latest End Time", "zbee_zcl_se.pp.get_debt_repayment_log.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10110
15
            0x00, NULL, HFILL } },
10111
10112
15
        { &hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts,
10113
15
            { "Number of Records", "zbee_zcl_se.pp.get_debt_repayment_log.number_of_records", FT_UINT8, BASE_DEC, NULL,
10114
15
            0x00, NULL, HFILL } },
10115
10116
15
        { &hf_zbee_zcl_pp_get_debt_repayment_log_debt_type,
10117
15
            { "Debt Type", "zbee_zcl_se.pp.get_debt_repayment_log.debt_type", FT_UINT8, BASE_DEC, NULL,
10118
15
            0x00, NULL, HFILL } },
10119
10120
15
        { &hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id,
10121
15
            { "Provider ID", "zbee_zcl_se.pp.set_maximum_credit_limit.provider_id", FT_UINT32, BASE_DEC, NULL,
10122
15
            0x00, NULL, HFILL } },
10123
10124
15
        { &hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id,
10125
15
            { "Issuer Event ID", "zbee_zcl_se.pp.set_maximum_credit_limit.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10126
15
            0x00, NULL, HFILL } },
10127
10128
15
        { &hf_zbee_zcl_pp_set_maximum_credit_limit_implementation_date_time,
10129
15
            { "Implementation Date/Time", "zbee_zcl_se.pp.set_maximum_credit_limit.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
10130
15
            0x00, NULL, HFILL } },
10131
10132
15
        { &hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level,
10133
15
            { "Maximum Credit Level", "zbee_zcl_se.pp.set_maximum_credit_limit.max_credit_level", FT_UINT32, BASE_DEC, NULL,
10134
15
            0x00, NULL, HFILL } },
10135
10136
15
        { &hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up,
10137
15
            { "Maximum Credit Per Top Up", "zbee_zcl_se.pp.set_maximum_credit_limit.max_credit_per_top_up", FT_UINT32, BASE_DEC, NULL,
10138
15
            0x00, NULL, HFILL } },
10139
10140
15
        { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id,
10141
15
            { "Provider ID", "zbee_zcl_se.pp.set_overall_debt_cap_limit.provider_id", FT_UINT32, BASE_DEC, NULL,
10142
15
            0x00, NULL, HFILL } },
10143
10144
15
        { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id,
10145
15
            { "Issuer Event ID", "zbee_zcl_se.pp.set_overall_debt_cap_limit.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10146
15
            0x00, NULL, HFILL } },
10147
10148
15
        { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_implementation_date_time,
10149
15
            { "Implementation Date/Time", "zbee_zcl_se.pp.set_overall_debt_cap_limit.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
10150
15
            0x00, NULL, HFILL } },
10151
10152
15
        { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap,
10153
15
            { "Overall Debt Cap", "zbee_zcl_se.pp.set_overall_debt_cap_limit.overall_debt_cap", FT_INT32, BASE_DEC, NULL,
10154
15
            0x00, NULL, HFILL } },
10155
10156
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id,
10157
15
            { "Snapshot ID", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_id", FT_UINT32, BASE_DEC, NULL,
10158
15
            0x00, NULL, HFILL } },
10159
10160
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time,
10161
15
            { "Snapshot Time", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10162
15
            0x00, NULL, HFILL } },
10163
10164
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found,
10165
15
            { "Total Snapshots Found", "zbee_zcl_se.pp.publish_prepay_snapshot.total_snapshots_found", FT_UINT8, BASE_DEC, NULL,
10166
15
            0x00, NULL, HFILL } },
10167
10168
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_command_index,
10169
15
            { "Command Index", "zbee_zcl_se.pp.publish_prepay_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
10170
15
            0x00, NULL, HFILL } },
10171
10172
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands,
10173
15
            { "Total Number of Commands", "zbee_zcl_se.pp.publish_prepay_snapshot.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10174
15
            0x00, NULL, HFILL } },
10175
10176
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause,
10177
15
            { "Snapshot Cause", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
10178
15
            0x00, NULL, HFILL } },
10179
10180
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type,
10181
15
            { "Snapshot Payload Type", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_payload_type", FT_UINT8, BASE_DEC, NULL,
10182
15
            0x00, NULL, HFILL } },
10183
10184
15
        { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload,
10185
15
            { "Snapshot Payload", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_payload", FT_BYTES, BASE_NONE, NULL,
10186
15
            0x00, NULL, HFILL } },
10187
10188
15
        { &hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit,
10189
15
            { "Friendly Credit", "zbee_zcl_se.pp.change_payment_mode_response.friendly_credit", FT_UINT8, BASE_HEX, NULL,
10190
15
            0x00, NULL, HFILL } },
10191
10192
15
        { &hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id,
10193
15
            { "Friendly Credit Calendar ID", "zbee_zcl_se.pp.change_payment_mode_response.friendly_credit_calendar_id", FT_UINT32, BASE_DEC, NULL,
10194
15
            0x00, NULL, HFILL } },
10195
10196
15
        { &hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit,
10197
15
            { "Emergency Credit Limit", "zbee_zcl_se.pp.change_payment_mode_response.emc_limit", FT_UINT32, BASE_DEC, NULL,
10198
15
            0x00, NULL, HFILL } },
10199
10200
15
        { &hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold,
10201
15
            { "Emergency Credit Threshold", "zbee_zcl_se.pp.change_payment_mode_response.emc_threshold", FT_UINT32, BASE_DEC, NULL,
10202
15
            0x00, NULL, HFILL } },
10203
10204
15
        { &hf_zbee_zcl_pp_consumer_top_up_response_result_type,
10205
15
            { "Result Type", "zbee_zcl_se.pp.consumer_top_up_response.result_type", FT_UINT8, BASE_DEC, NULL,
10206
15
            0x00, NULL, HFILL } },
10207
10208
15
        { &hf_zbee_zcl_pp_consumer_top_up_response_top_up_value,
10209
15
            { "Top Up Value", "zbee_zcl_se.pp.consumer_top_up_response.top_up_value", FT_INT32, BASE_DEC, NULL,
10210
15
            0x00, NULL, HFILL } },
10211
10212
15
        { &hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up,
10213
15
            { "Source of Top up", "zbee_zcl_se.pp.consumer_top_up_response.source_of_top_up", FT_UINT8, BASE_DEC, NULL,
10214
15
            0x00, NULL, HFILL } },
10215
10216
15
        { &hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining,
10217
15
            { "Credit Remaining", "zbee_zcl_se.pp.consumer_top_up_response.credit_remaining", FT_INT32, BASE_DEC, NULL,
10218
15
            0x00, NULL, HFILL } },
10219
10220
15
        { &hf_zbee_zcl_pp_publish_top_up_log_command_index,
10221
15
            { "Command Index", "zbee_zcl_se.pp.publish_top_up_log.command_index", FT_UINT8, BASE_DEC, NULL,
10222
15
            0x00, NULL, HFILL } },
10223
10224
15
        { &hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands,
10225
15
            { "Total Number of Commands", "zbee_zcl_se.pp.publish_top_up_log.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10226
15
            0x00, NULL, HFILL } },
10227
10228
15
        { &hf_zbee_zcl_pp_publish_top_up_log_top_up_code,
10229
15
            { "TopUp Code", "zbee_zcl_se.pp.publish_top_up_log.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
10230
15
            0x00, NULL, HFILL } },
10231
10232
15
        { &hf_zbee_zcl_pp_publish_top_up_log_top_up_amount,
10233
15
            { "TopUp Amount", "zbee_zcl_se.pp.publish_top_up_log.top_up_amount", FT_INT32, BASE_DEC, NULL,
10234
15
            0x00, NULL, HFILL } },
10235
10236
15
        { &hf_zbee_zcl_pp_publish_top_up_log_top_up_time,
10237
15
            { "TopUp Time", "zbee_zcl_se.pp.publish_top_up_log.top_up_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10238
15
            0x00, NULL, HFILL } },
10239
10240
15
        { &hf_zbee_zcl_pp_publish_debt_log_command_index,
10241
15
            { "Command Index", "zbee_zcl_se.pp.publish_debt_log.command_index", FT_UINT8, BASE_DEC, NULL,
10242
15
            0x00, NULL, HFILL } },
10243
10244
15
        { &hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands,
10245
15
            { "Total Number of Commands", "zbee_zcl_se.pp.publish_debt_log.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10246
15
            0x00, NULL, HFILL } },
10247
10248
15
        { &hf_zbee_zcl_pp_publish_debt_log_collection_time,
10249
15
            { "Collection Time", "zbee_zcl_se.pp.publish_debt_log.collection_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10250
15
            0x00, NULL, HFILL } },
10251
10252
15
        { &hf_zbee_zcl_pp_publish_debt_log_amount_collected,
10253
15
            { "Amount Collected", "zbee_zcl_se.pp.publish_debt_log.amount_collected", FT_INT32, BASE_DEC, NULL,
10254
15
            0x00, NULL, HFILL } },
10255
10256
15
        { &hf_zbee_zcl_pp_publish_debt_log_debt_type,
10257
15
            { "Debt Type", "zbee_zcl_se.pp.publish_debt_log.debt_type", FT_UINT8, BASE_DEC, NULL,
10258
15
            0x00, NULL, HFILL } },
10259
10260
15
        { &hf_zbee_zcl_pp_publish_debt_log_outstanding_debt,
10261
15
            { "Outstanding Debt", "zbee_zcl_se.pp.publish_debt_log.outstanding_debt", FT_UINT32, BASE_DEC, NULL,
10262
15
            0x00, NULL, HFILL } },
10263
10264
15
        { &hf_zbee_zcl_pp_payment_control_configuration,
10265
15
            { "Payment Control Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration", FT_UINT16, BASE_HEX, NULL,
10266
15
            0x00, NULL, HFILL } },
10267
15
        { &hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled,
10268
15
            { "Disconnection Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.disconnection_enabled", FT_BOOLEAN, 16, NULL,
10269
15
            0x0001, NULL, HFILL } },
10270
15
        { &hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled,
10271
15
            { "Prepayment Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.prepayment_enabled", FT_BOOLEAN, 16, NULL,
10272
15
            0x0002, NULL, HFILL } },
10273
15
        { &hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled,
10274
15
            { "Credit Management Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.credit_management_enabled", FT_BOOLEAN, 16, NULL,
10275
15
            0x0004, NULL, HFILL } },
10276
15
        { &hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled,
10277
15
            { "Credit Display Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.credit_display_enabled", FT_BOOLEAN, 16, NULL,
10278
15
            0x0010, NULL, HFILL } },
10279
15
        { &hf_zbee_zcl_pp_payment_control_configuration_account_base,
10280
15
            { "Account Base", "zbee_zcl_se.pp.attr.payment_control_configuration.account_base", FT_BOOLEAN, 16, NULL,
10281
15
            0x0040, NULL, HFILL } },
10282
15
        { &hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted,
10283
15
            { "Contactor Fitted", "zbee_zcl_se.pp.attr.payment_control_configuration.contactor_fitted", FT_BOOLEAN, 16, NULL,
10284
15
            0x0080, NULL, HFILL } },
10285
15
        { &hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration,
10286
15
            { "Standing Charge Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.standing_charge_configuration", FT_BOOLEAN, 16, NULL,
10287
15
            0x0100, NULL, HFILL } },
10288
15
        { &hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration,
10289
15
            { "Emergency Standing Charge Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.emergency_standing_charge_configuration", FT_BOOLEAN, 16, NULL,
10290
15
            0x0200, NULL, HFILL } },
10291
15
        { &hf_zbee_zcl_pp_payment_control_configuration_debt_configuration,
10292
15
            { "Debt Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.debt_configuration", FT_BOOLEAN, 16, NULL,
10293
15
            0x0400, NULL, HFILL } },
10294
15
        { &hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration,
10295
15
            { "Emergency Debt Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.emergency_debt_configuration", FT_BOOLEAN, 16, NULL,
10296
15
            0x0800, NULL, HFILL } },
10297
15
        { &hf_zbee_zcl_pp_payment_control_configuration_reserved,
10298
15
            { "Reserved", "zbee_zcl_se.pp.attr.payment_control_configuration.reserved", FT_UINT16, BASE_HEX, NULL,
10299
15
            0xF028, NULL, HFILL } },
10300
10301
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_general,
10302
15
            { "General", "zbee_zcl_se.pp.snapshot_payload_cause.general", FT_BOOLEAN, 32, NULL,
10303
15
            0x00000001, NULL, HFILL } },
10304
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period,
10305
15
            { "End of Billing Period", "zbee_zcl_se.pp.snapshot_payload_cause.end_of_billing_period", FT_BOOLEAN, 32, NULL,
10306
15
            0x00000002, NULL, HFILL } },
10307
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information,
10308
15
            { "Change of Tariff Information", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_tariff_information", FT_BOOLEAN, 32, NULL,
10309
15
            0x00000008, NULL, HFILL } },
10310
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix,
10311
15
            { "Change of Price Matrix", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_price_matrix", FT_BOOLEAN, 32, NULL,
10312
15
            0x00000010, NULL, HFILL } },
10313
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client,
10314
15
            { "Manually Triggered from Client", "zbee_zcl_se.pp.snapshot_payload_cause.manually_triggered_from_client", FT_BOOLEAN, 32, NULL,
10315
15
            0x00000400, NULL, HFILL } },
10316
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy,
10317
15
            { "Change of Tenancy", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_tenancy", FT_BOOLEAN, 32, NULL,
10318
15
            0x00001000, NULL, HFILL } },
10319
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier,
10320
15
            { "Change of Supplier", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_supplier", FT_BOOLEAN, 32, NULL,
10321
15
            0x00002000, NULL, HFILL } },
10322
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode,
10323
15
            { "Change of (Meter) Mode", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_meter_mode", FT_BOOLEAN, 32, NULL,
10324
15
            0x00004000, NULL, HFILL } },
10325
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition,
10326
15
            { "TopUp addition", "zbee_zcl_se.pp.snapshot_payload_cause.top_up_addition", FT_BOOLEAN, 32, NULL,
10327
15
            0x00040000, NULL, HFILL } },
10328
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition,
10329
15
            { "Debt/Credit addition", "zbee_zcl_se.pp.snapshot_payload_cause.debt_credit_addition", FT_BOOLEAN, 32, NULL,
10330
15
            0x00080000, NULL, HFILL } },
10331
15
        { &hf_zbee_zcl_pp_snapshot_payload_cause_reserved,
10332
15
            { "Reserved", "zbee_zcl_se.pp.snapshot_payload_cause.reserved", FT_UINT32, BASE_HEX, NULL,
10333
15
            0xFFF38BE4, NULL, HFILL } },
10334
15
    };
10335
10336
    /* ZCL Prepayment subtrees */
10337
15
    int *ett[ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT];
10338
15
    ett[0] = &ett_zbee_zcl_pp;
10339
15
    ett[1] = &ett_zbee_zcl_pp_payment_control_configuration;
10340
15
    ett[2] = &ett_zbee_zcl_pp_snapshot_payload_cause;
10341
10342
15
    unsigned j = ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT;
10343
10344
    /* Initialize Publish Top Up Log subtrees */
10345
465
    for (unsigned i = 0; i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT; i++, j++) {
10346
450
        ett[j] = &ett_zbee_zcl_pp_publish_top_up_entry[i];
10347
450
    }
10348
10349
    /* Initialize Publish Debt Log subtrees */
10350
465
    for (unsigned i = 0; i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT; i++, j++ ) {
10351
450
        ett[j] = &ett_zbee_zcl_pp_publish_debt_log_entry[i];
10352
450
    }
10353
10354
    /* Register the ZigBee ZCL Prepayment cluster protocol name and description */
10355
15
    proto_zbee_zcl_pp = proto_register_protocol("ZigBee ZCL Prepayment", "ZCL Prepayment", ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT);
10356
15
    proto_register_field_array(proto_zbee_zcl_pp, hf, array_length(hf));
10357
15
    proto_register_subtree_array(ett, array_length(ett));
10358
10359
    /* Register the ZigBee ZCL Prepayment dissector. */
10360
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT, dissect_zbee_zcl_pp, proto_zbee_zcl_pp);
10361
15
} /*proto_register_zbee_zcl_pp*/
10362
10363
/**
10364
 *Hands off the ZCL Prepayment dissector.
10365
 *
10366
*/
10367
void
10368
proto_reg_handoff_zbee_zcl_pp(void)
10369
15
{
10370
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT,
10371
15
                            proto_zbee_zcl_pp,
10372
15
                            ett_zbee_zcl_pp,
10373
15
                            ZBEE_ZCL_CID_PRE_PAYMENT,
10374
15
                            ZBEE_MFG_CODE_NONE,
10375
15
                            hf_zbee_zcl_pp_attr_id,
10376
15
                            -1,
10377
15
                            hf_zbee_zcl_pp_srv_rx_cmd_id,
10378
15
                            hf_zbee_zcl_pp_srv_tx_cmd_id,
10379
15
                            dissect_zcl_pp_attr_data
10380
15
                         );
10381
15
} /*proto_reg_handoff_zbee_zcl_pp*/
10382
10383
/* ########################################################################## */
10384
/* #### (0x0706) ENERGY MANAGEMENT CLUSTER ################################## */
10385
/* ########################################################################## */
10386
10387
/* Attributes */
10388
#define zbee_zcl_energy_management_attr_names_VALUE_STRING_LIST(XXX) \
10389
/* Block Threshold (Delivered) Set */ \
10390
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_LOAD_CONTROL_STATE,              0x0000, "Load Control State" ) \
10391
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CURRENT_EVENT_ID,                0x0001, "Current Event ID" ) \
10392
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CURRENT_EVENT_STATUS,            0x0002, "Current Event Status" ) \
10393
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CONFORMANCE_LEVEL,               0x0003, "Conformance Level" ) \
10394
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_OFF_TIME,                0x0004, "Minimum Off Time" ) \
10395
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_ON_TIME,                 0x0005, "Minimum On Time" ) \
10396
    XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_CYCLE_PERIOD,            0x0006, "Minimum Cycle Period" ) \
10397
/* Smart Energy */ \
10398
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_ENERGY_MANAGEMENT,           0xFFFE, "Attribute Reporting Status" )
10399
10400
VALUE_STRING_ENUM(zbee_zcl_energy_management_attr_names);
10401
VALUE_STRING_ARRAY(zbee_zcl_energy_management_attr_names);
10402
10403
/* Server Commands Received */
10404
#define zbee_zcl_energy_management_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
10405
    XXX(ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_MANAGE_EVENT,                0x00, "Manage Event" )
10406
10407
VALUE_STRING_ENUM(zbee_zcl_energy_management_srv_rx_cmd_names);
10408
VALUE_STRING_ARRAY(zbee_zcl_energy_management_srv_rx_cmd_names);
10409
10410
/* Server Commands Generated */
10411
#define zbee_zcl_energy_management_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
10412
    XXX(ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_REPORT_EVENT_STATUS,              0x00, "Report Event Status" )
10413
10414
VALUE_STRING_ENUM(zbee_zcl_energy_management_srv_tx_cmd_names);
10415
VALUE_STRING_ARRAY(zbee_zcl_energy_management_srv_tx_cmd_names);
10416
10417
/*************************/
10418
/* Function Declarations */
10419
/*************************/
10420
void proto_register_zbee_zcl_energy_management(void);
10421
void proto_reg_handoff_zbee_zcl_energy_management(void);
10422
10423
static void dissect_zbee_zcl_energy_management_manage_event             (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10424
static void dissect_zbee_zcl_energy_management_report_event_status      (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10425
10426
/*************************/
10427
/* Global Variables      */
10428
/*************************/
10429
10430
/* Initialize the protocol and registered fields */
10431
static int proto_zbee_zcl_energy_management;
10432
10433
static int hf_zbee_zcl_energy_management_srv_tx_cmd_id;
10434
static int hf_zbee_zcl_energy_management_srv_rx_cmd_id;
10435
static int hf_zbee_zcl_energy_management_attr_id;
10436
static int hf_zbee_zcl_energy_management_attr_reporting_status;
10437
static int hf_zbee_zcl_energy_management_issuer_event_id;
10438
static int hf_zbee_zcl_energy_management_device_class;
10439
static int hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace;
10440
static int hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters;
10441
static int hf_zbee_zcl_energy_management_device_class_water_heater;
10442
static int hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi;
10443
static int hf_zbee_zcl_energy_management_device_class_smart_appliances;
10444
static int hf_zbee_zcl_energy_management_device_class_irrigation_pump;
10445
static int hf_zbee_zcl_energy_management_device_class_managed_c_i_loads;
10446
static int hf_zbee_zcl_energy_management_device_class_simple_misc_loads;
10447
static int hf_zbee_zcl_energy_management_device_class_exterior_lighting;
10448
static int hf_zbee_zcl_energy_management_device_class_interior_lighting;
10449
static int hf_zbee_zcl_energy_management_device_class_electric_vehicle;
10450
static int hf_zbee_zcl_energy_management_device_class_generation_systems;
10451
static int hf_zbee_zcl_energy_management_device_class_reserved;
10452
static int hf_zbee_zcl_energy_management_utility_enrollment_group;
10453
static int hf_zbee_zcl_energy_management_action_required;
10454
static int hf_zbee_zcl_energy_management_action_required_opt_out_of_event;
10455
static int hf_zbee_zcl_energy_management_action_required_opt_into_event;
10456
static int hf_zbee_zcl_energy_management_action_required_disable_duty_cycling;
10457
static int hf_zbee_zcl_energy_management_action_required_enable_duty_cycling;
10458
static int hf_zbee_zcl_energy_management_action_required_reserved;
10459
10460
static int hf_zbee_zcl_energy_management_report_event_issuer_event_id;
10461
static int hf_zbee_zcl_energy_management_report_event_event_status;
10462
static int hf_zbee_zcl_energy_management_report_event_event_status_time;
10463
static int hf_zbee_zcl_energy_management_report_event_criticality_level_applied;
10464
static int hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied;
10465
static int hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied;
10466
static int hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage;
10467
static int hf_zbee_zcl_energy_management_report_event_duty_cycle;
10468
static int hf_zbee_zcl_energy_management_report_event_event_control;
10469
static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time;
10470
static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time;
10471
static int hf_zbee_zcl_energy_management_report_event_event_control_reserved;
10472
10473
10474
static int* const zbee_zcl_energy_management_device_classes[] = {
10475
    &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
10476
    &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
10477
    &hf_zbee_zcl_energy_management_device_class_water_heater,
10478
    &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
10479
    &hf_zbee_zcl_energy_management_device_class_smart_appliances,
10480
    &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
10481
    &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
10482
    &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
10483
    &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
10484
    &hf_zbee_zcl_energy_management_device_class_interior_lighting,
10485
    &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
10486
    &hf_zbee_zcl_energy_management_device_class_generation_systems,
10487
    &hf_zbee_zcl_energy_management_device_class_reserved,
10488
    NULL
10489
};
10490
10491
static int* const zbee_zcl_energy_management_action_required[] = {
10492
    &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
10493
    &hf_zbee_zcl_energy_management_action_required_opt_into_event,
10494
    &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
10495
    &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
10496
    &hf_zbee_zcl_energy_management_action_required_reserved,
10497
    NULL
10498
};
10499
10500
static int* const hf_zbee_zcl_energy_management_event_control_flags[] = {
10501
    &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
10502
    &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
10503
    &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
10504
    NULL
10505
};
10506
10507
/* Initialize the subtree pointers */
10508
static int ett_zbee_zcl_energy_management;
10509
static int ett_zbee_zcl_energy_management_device_class;
10510
static int ett_zbee_zcl_energy_management_actions_required;
10511
static int ett_zbee_zcl_energy_management_report_event_event_control;
10512
10513
static const range_string zbee_zcl_energy_management_load_control_event_criticality_level[] = {
10514
    { 0x0, 0x0,   "Reserved" },
10515
    { 0x1, 0x1,   "Green" },
10516
    { 0x2, 0x2,   "1" },
10517
    { 0x3, 0x3,   "2" },
10518
    { 0x4, 0x4,   "3" },
10519
    { 0x5, 0x5,   "4" },
10520
    { 0x6, 0x6,   "5" },
10521
    { 0x7, 0x7,   "Emergency" },
10522
    { 0x8, 0x8,   "Planned Outage" },
10523
    { 0x9, 0x9,   "Service Disconnect" },
10524
    { 0x0A, 0x0F, "Utility Defined" },
10525
    { 0x10, 0xFF, "Reserved" },
10526
    { 0, 0, NULL }
10527
};
10528
10529
/*************************/
10530
/* Function Bodies       */
10531
/*************************/
10532
10533
/**
10534
 *This function is called by ZCL foundation dissector in order to decode
10535
 *
10536
 *@param tree pointer to data tree Wireshark uses to display packet.
10537
 *@param tvb pointer to buffer containing raw packet.
10538
 *@param offset pointer to buffer offset
10539
 *@param attr_id attribute identifier
10540
 *@param data_type attribute data type
10541
 *@param client_attr ZCL client
10542
*/
10543
static void
10544
dissect_zcl_energy_management_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
10545
150
{
10546
150
    switch (attr_id) {
10547
        /* applies to all SE clusters */
10548
5
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_ENERGY_MANAGEMENT:
10549
5
            proto_tree_add_item(tree, hf_zbee_zcl_energy_management_attr_reporting_status, tvb, *offset, 1, ENC_NA);
10550
5
            *offset += 1;
10551
5
            break;
10552
10553
145
        default: /* Catch all */
10554
145
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
10555
145
            break;
10556
150
    }
10557
150
} /*dissect_zcl_energy_management_attr_data*/
10558
10559
/**
10560
 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10561
 *
10562
 *@param tvb pointer to buffer containing raw packet.
10563
 *@param tree pointer to data tree Wireshark uses to display packet.
10564
 *@param offset pointer to buffer offset
10565
*/
10566
static void
10567
dissect_zbee_zcl_energy_management_manage_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
10568
0
{
10569
    /* Issuer Event ID */
10570
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_issuer_event_id, tvb,
10571
0
                        *offset, 4, ENC_LITTLE_ENDIAN);
10572
0
    *offset += 4;
10573
10574
    /* Device Class */
10575
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_device_class, ett_zbee_zcl_energy_management_device_class,
10576
0
                           zbee_zcl_energy_management_device_classes, ENC_LITTLE_ENDIAN);
10577
0
    *offset += 2;
10578
10579
    /* Utility Enrollment Group */
10580
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_utility_enrollment_group, tvb,
10581
0
                        *offset, 1, ENC_NA);
10582
0
    *offset += 1;
10583
10584
    /* Action(s) Required */
10585
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_action_required, ett_zbee_zcl_energy_management_actions_required,
10586
0
                           zbee_zcl_energy_management_action_required, ENC_NA);
10587
0
    *offset += 1;
10588
0
}
10589
10590
/**
10591
 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10592
 *
10593
 *@param tvb pointer to buffer containing raw packet.
10594
 *@param tree pointer to data tree Wireshark uses to display packet.
10595
 *@param offset pointer to buffer offset
10596
*/
10597
static void
10598
dissect_zbee_zcl_energy_management_report_event_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
10599
0
{
10600
    /* Event Control */
10601
10602
    /* Issuer Event ID */
10603
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_issuer_event_id, tvb,
10604
0
                        *offset, 4, ENC_LITTLE_ENDIAN);
10605
0
    *offset += 4;
10606
10607
    /* Event Status */
10608
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_event_status, tvb, *offset, 1, ENC_NA);
10609
0
    *offset += 1;
10610
10611
    /* Event Status Time */
10612
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_event_status_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
10613
0
    *offset += 4;
10614
10615
    /* Criticality Level Applied */
10616
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_criticality_level_applied, tvb,
10617
0
                        *offset, 1, ENC_NA);
10618
0
    *offset += 1;
10619
10620
    /* Cooling Temperature Set Point Applied */
10621
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied, tvb,
10622
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
10623
0
    *offset += 2;
10624
10625
    /* Heating Temperature Set Point Applied */
10626
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied, tvb,
10627
0
                        *offset, 2, ENC_LITTLE_ENDIAN);
10628
0
    *offset += 2;
10629
10630
    /* Average Load Adjustment Percentage Applied */
10631
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage, tvb,
10632
0
                        *offset, 1, ENC_NA);
10633
0
    *offset += 1;
10634
10635
    /* Duty Cycle Applied */
10636
0
    proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_duty_cycle, tvb,
10637
0
                        *offset, 1, ENC_NA);
10638
0
    *offset += 1;
10639
10640
    /* Event Control */
10641
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_report_event_event_control, ett_zbee_zcl_energy_management_report_event_event_control,
10642
0
                           hf_zbee_zcl_energy_management_event_control_flags, ENC_LITTLE_ENDIAN);
10643
0
    *offset += 1;
10644
10645
0
} /*dissect_zbee_zcl_energy_management_report_event_status*/
10646
10647
/**
10648
 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10649
 *
10650
 *@param tvb pointer to buffer containing raw packet.
10651
 *@param pinfo pointer to packet information fields
10652
 *@param tree pointer to data tree Wireshark uses to display packet.
10653
*/
10654
static int
10655
dissect_zbee_zcl_energy_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
10656
0
{
10657
0
    zbee_zcl_packet   *zcl;
10658
0
    unsigned          offset = 0;
10659
0
    uint8_t           cmd_id;
10660
0
    int               rem_len;
10661
10662
    /* Reject the packet if data is NULL */
10663
0
    if (data == NULL)
10664
0
        return 0;
10665
0
    zcl = (zbee_zcl_packet *)data;
10666
0
    cmd_id = zcl->cmd_id;
10667
10668
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
10669
0
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
10670
        /* Append the command name to the info column. */
10671
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
10672
0
            val_to_str_const(cmd_id, zbee_zcl_energy_management_srv_rx_cmd_names, "Unknown Command"),
10673
0
            zcl->tran_seqno);
10674
10675
        /* Add the command ID. */
10676
0
        proto_tree_add_uint(tree, hf_zbee_zcl_energy_management_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
10677
10678
        /* Check is this command has a payload, than add the payload tree */
10679
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
10680
0
        if (rem_len > 0) {
10681
0
            proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_energy_management, NULL, "Payload");
10682
10683
            /* Call the appropriate command dissector */
10684
0
            switch (cmd_id) {
10685
10686
0
                case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_MANAGE_EVENT:
10687
0
                    dissect_zbee_zcl_energy_management_manage_event(tvb, tree, &offset);
10688
0
                    break;
10689
10690
0
                default:
10691
0
                    break;
10692
0
            }
10693
0
        }
10694
0
    }
10695
0
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
10696
        /* Append the command name to the info column. */
10697
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
10698
0
            val_to_str_const(cmd_id, zbee_zcl_energy_management_srv_tx_cmd_names, "Unknown Command"),
10699
0
            zcl->tran_seqno);
10700
10701
        /* Add the command ID. */
10702
0
        proto_tree_add_uint(tree, hf_zbee_zcl_energy_management_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
10703
10704
        /* Check is this command has a payload, than add the payload tree */
10705
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
10706
0
        if (rem_len > 0) {
10707
0
            proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_energy_management, NULL, "Payload");
10708
10709
            /* Call the appropriate command dissector */
10710
0
            switch (cmd_id) {
10711
10712
0
                case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_REPORT_EVENT_STATUS:
10713
0
                    dissect_zbee_zcl_energy_management_report_event_status(tvb, tree, &offset);
10714
0
                    break;
10715
10716
0
                default:
10717
0
                    break;
10718
0
            }
10719
0
        }
10720
0
    }
10721
10722
0
    return tvb_captured_length(tvb);
10723
0
} /*dissect_zbee_zcl_energy_management*/
10724
10725
/**
10726
 *This function registers the ZCL Energy_Management dissector
10727
 *
10728
*/
10729
void
10730
proto_register_zbee_zcl_energy_management(void)
10731
15
{
10732
15
    static hf_register_info hf[] = {
10733
10734
15
        { &hf_zbee_zcl_energy_management_attr_id,
10735
15
            { "Attribute", "zbee_zcl_se.energy_management.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_energy_management_attr_names),
10736
15
            0x0, NULL, HFILL } },
10737
10738
15
        { &hf_zbee_zcl_energy_management_attr_reporting_status,                         /* common to all SE clusters */
10739
15
            { "Attribute Reporting Status", "zbee_zcl_se.energy_management.attr.attr_reporting_status",
10740
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
10741
10742
15
        { &hf_zbee_zcl_energy_management_srv_tx_cmd_id,
10743
15
            { "Command", "zbee_zcl_se.energy_management.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_energy_management_srv_tx_cmd_names),
10744
15
            0x00, NULL, HFILL } },
10745
10746
15
        { &hf_zbee_zcl_energy_management_srv_rx_cmd_id,
10747
15
            { "Command", "zbee_zcl_se.energy_management.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_energy_management_srv_rx_cmd_names),
10748
15
            0x00, NULL, HFILL } },
10749
10750
15
        { &hf_zbee_zcl_energy_management_issuer_event_id,
10751
15
            { "Issuer Event ID", "zbee_zcl_se.energy_management.issuer_id",
10752
15
            FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10753
10754
15
        { &hf_zbee_zcl_energy_management_device_class,
10755
15
            { "Device Class", "zbee_zcl_se.energy_management.device_class",
10756
15
            FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10757
10758
15
        { &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
10759
15
            { "HVAC Compressor or Furnace", "zbee_zcl_se.energy_management.device_class.hvac_compressor_or_furnace",
10760
15
            FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } },
10761
10762
15
        { &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
10763
15
            { "Strip Heaters/Baseboard Heaters", "zbee_zcl_se.energy_management.device_class.strip_heaters_baseboard_heaters",
10764
15
            FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
10765
10766
15
        { &hf_zbee_zcl_energy_management_device_class_water_heater,
10767
15
            { "Water Heater", "zbee_zcl_se.energy_management.device_class.water_heater",
10768
15
            FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
10769
10770
15
        { &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
10771
15
            { "Pool Pump/Spa/Jacuzzi", "zbee_zcl_se.energy_management.device_class.pool_pump_spa_jacuzzi",
10772
15
            FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
10773
10774
15
        { &hf_zbee_zcl_energy_management_device_class_smart_appliances,
10775
15
            { "Smart Appliances", "zbee_zcl_se.energy_management.device_class.smart_appliances",
10776
15
            FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } },
10777
10778
15
        { &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
10779
15
            { "Irrigation Pump", "zbee_zcl_se.energy_management.device_class.irrigation_pump",
10780
15
            FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
10781
10782
15
        { &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
10783
15
            { "Managed Commercial & Industrial (C&I) loads", "zbee_zcl_se.energy_management.device_class.managed_c_i_loads",
10784
15
            FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
10785
10786
15
        { &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
10787
15
            { "Simple misc. (Residential On/Off) loads", "zbee_zcl_se.energy_management.device_class.simple_misc_loads",
10788
15
            FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
10789
10790
15
        { &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
10791
15
            { "Exterior Lighting", "zbee_zcl_se.energy_management.device_class.exterior_lighting",
10792
15
            FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
10793
10794
15
        { &hf_zbee_zcl_energy_management_device_class_interior_lighting,
10795
15
            { "Interior Lighting", "zbee_zcl_se.energy_management.device_class.interior_lighting",
10796
15
            FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
10797
10798
15
        { &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
10799
15
            { "Electric Vehicle", "zbee_zcl_se.energy_management.device_class.electric_vehicle",
10800
15
            FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
10801
10802
15
        { &hf_zbee_zcl_energy_management_device_class_generation_systems,
10803
15
            { "Generation Systems", "zbee_zcl_se.energy_management.device_class.generation_systems",
10804
15
            FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
10805
10806
15
        { &hf_zbee_zcl_energy_management_device_class_reserved ,
10807
15
            { "Reserved", "zbee_zcl_se.energy_management.device_class.reserved",
10808
15
            FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } },
10809
10810
15
        { &hf_zbee_zcl_energy_management_utility_enrollment_group,
10811
15
            { "Utility Enrollment Group", "zbee_zcl_se.energy_management.utility_enrollment_group",
10812
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10813
10814
15
        { &hf_zbee_zcl_energy_management_action_required,
10815
15
            { "Action(s) Required", "zbee_zcl_se.energy_management.action_required",
10816
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10817
10818
15
        { &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
10819
15
            { "Opt Out of Event", "zbee_zcl_se.energy_management.action_required.opt_out_of_event",
10820
15
            FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
10821
10822
15
        { &hf_zbee_zcl_energy_management_action_required_opt_into_event,
10823
15
            { "Opt Into Event", "zbee_zcl_se.energy_management.action_required.opt_into_event",
10824
15
            FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } },
10825
10826
15
        { &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
10827
15
            { "Disable Duty Cycling", "zbee_zcl_se.energy_management.action_required.disable_duty_cycling",
10828
15
            FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } },
10829
10830
15
        { &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
10831
15
            { "Enable Duty Cycling", "zbee_zcl_se.energy_management.action_required.enable_duty_cycling",
10832
15
            FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } },
10833
10834
15
        { &hf_zbee_zcl_energy_management_action_required_reserved,
10835
15
            { "Reserved", "zbee_zcl_se.energy_management.action_required.reserved",
10836
15
            FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
10837
10838
15
        { &hf_zbee_zcl_energy_management_report_event_issuer_event_id,
10839
15
            { "Issuer Event ID", "zbee_zcl_se.energy_management.report_event.issuer_id",
10840
15
            FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10841
10842
15
        { &hf_zbee_zcl_energy_management_report_event_event_status,
10843
15
            { "Event Status", "zbee_zcl_se.energy_management.report_event.event_status",
10844
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10845
10846
15
        { &hf_zbee_zcl_energy_management_report_event_event_status_time,
10847
15
            { "Event Status Time", "zbee_zcl_se.energy_management.report_event.event_status_time",
10848
15
            FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, NULL, HFILL } },
10849
10850
15
        { &hf_zbee_zcl_energy_management_report_event_criticality_level_applied ,
10851
15
            { "Criticality Level Applied", "zbee_zcl_se.energy_management.report_event.criticality_level_applied",
10852
15
            FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_energy_management_load_control_event_criticality_level), 0x0, NULL, HFILL } },
10853
10854
15
        { &hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied,
10855
15
            { "Cooling Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.cooling_temperature_set_point_applied",
10856
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
10857
10858
15
        { &hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied,
10859
15
            { "Heating Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.heating_temperature_set_point_applied",
10860
15
            FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
10861
10862
15
        { &hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage ,
10863
15
            { "Average Load Adjustment Percentage Applied", "zbee_zcl_se.energy_management.report_event.average_load_adjustment_percentage_applied",
10864
15
            FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
10865
10866
15
        { &hf_zbee_zcl_energy_management_report_event_duty_cycle,
10867
15
            { "Duty Cycle Applied", "zbee_zcl_se.energy_management.report_event.duty_cycle_applied",
10868
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10869
10870
15
        { &hf_zbee_zcl_energy_management_report_event_event_control,
10871
15
            { "Event Control", "zbee_zcl_se.energy_management.report_event.event_control",
10872
15
            FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10873
10874
15
        { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
10875
15
            { "Randomize Start time", "zbee_zcl_se.energy_management.report_event.randomize_start_time",
10876
15
            FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_start_tfs), 0x01, NULL, HFILL } },
10877
10878
15
        { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
10879
15
            { "Randomize Duration time", "zbee_zcl_se.energy_management.report_event.randomize_duration_time",
10880
15
            FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_duration_tfs), 0x02, NULL, HFILL } },
10881
10882
15
        { &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
10883
15
            { "Reserved", "zbee_zcl_se.energy_management.reserved",
10884
15
            FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
10885
15
    };
10886
10887
    /* ZCL Energy_Management subtrees */
10888
15
    int *ett[] = {
10889
15
        &ett_zbee_zcl_energy_management,
10890
15
        &ett_zbee_zcl_energy_management_device_class,
10891
15
        &ett_zbee_zcl_energy_management_actions_required,
10892
15
        &ett_zbee_zcl_energy_management_report_event_event_control,
10893
15
    };
10894
10895
    /* Register the ZigBee ZCL Energy Management cluster protocol name and description */
10896
15
    proto_zbee_zcl_energy_management = proto_register_protocol("ZigBee ZCL Energy Management", "ZCL Energy Management", ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT);
10897
15
    proto_register_field_array(proto_zbee_zcl_energy_management, hf, array_length(hf));
10898
15
    proto_register_subtree_array(ett, array_length(ett));
10899
10900
    /* Register the ZigBee ZCL Energy Management dissector. */
10901
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT, dissect_zbee_zcl_energy_management, proto_zbee_zcl_energy_management);
10902
15
} /*proto_register_zbee_zcl_energy_management*/
10903
10904
/**
10905
 *Hands off the ZCL Energy_Management dissector.
10906
 *
10907
*/
10908
void
10909
proto_reg_handoff_zbee_zcl_energy_management(void)
10910
15
{
10911
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT,
10912
15
                            proto_zbee_zcl_energy_management,
10913
15
                            ett_zbee_zcl_energy_management,
10914
15
                            ZBEE_ZCL_CID_ENERGY_MANAGEMENT,
10915
15
                            ZBEE_MFG_CODE_NONE,
10916
15
                            hf_zbee_zcl_energy_management_attr_id,
10917
15
                            -1,
10918
15
                            hf_zbee_zcl_energy_management_srv_rx_cmd_id,
10919
15
                            hf_zbee_zcl_energy_management_srv_tx_cmd_id,
10920
15
                            dissect_zcl_energy_management_attr_data
10921
15
                         );
10922
15
} /*proto_reg_handoff_zbee_zcl_energy_management*/
10923
10924
10925
/* ########################################################################## */
10926
/* #### (0x0707) CALENDAR CLUSTER ########################################### */
10927
/* ########################################################################## */
10928
10929
/* Attributes */
10930
#define zbee_zcl_calendar_attr_names_VALUE_STRING_LIST(XXX) \
10931
/* Auxiliary Switch Label Attribute Set */ \
10932
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_1_LABEL,                0x0000, "Aux Switch 1 Label" ) \
10933
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_2_LABEL,                0x0001, "Aux Switch 2 Label" ) \
10934
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_3_LABEL,                0x0002, "Aux Switch 3 Label" ) \
10935
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_4_LABEL,                0x0003, "Aux Switch 4 Label" ) \
10936
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_5_LABEL,                0x0004, "Aux Switch 5 Label" ) \
10937
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_6_LABEL,                0x0005, "Aux Switch 6 Label" ) \
10938
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_7_LABEL,                0x0006, "Aux Switch 7 Label" ) \
10939
    XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_8_LABEL,                0x0007, "Aux Switch 8 Label" ) \
10940
/* Smart Energy */ \
10941
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_CAL,             0xFFFE, "Attribute Reporting Status" )
10942
10943
VALUE_STRING_ENUM(zbee_zcl_calendar_attr_names);
10944
VALUE_STRING_ARRAY(zbee_zcl_calendar_attr_names);
10945
10946
/* Server Commands Received */
10947
#define zbee_zcl_calendar_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
10948
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR,                       0x00, "Get Calendar" ) \
10949
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_DAY_PROFILES,                   0x01, "Get Day Profiles" ) \
10950
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_WEEK_PROFILES,                  0x02, "Get Week Profiles" ) \
10951
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_SEASONS,                        0x03, "Get Seasons" ) \
10952
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_SPECIAL_DAYS,                   0x04, "Get Special Days" ) \
10953
    XXX(ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR_CANCELLATION,          0x05, "Get Calendar Cancellation" )
10954
10955
VALUE_STRING_ENUM(zbee_zcl_calendar_srv_rx_cmd_names);
10956
VALUE_STRING_ARRAY(zbee_zcl_calendar_srv_rx_cmd_names);
10957
10958
/* Server Commands Generated */
10959
#define zbee_zcl_calendar_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
10960
    XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_CALENDAR,                   0x00, "Publish Calendar" ) \
10961
    XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_DAY_PROFILE,                0x01, "Publish Day Profile" ) \
10962
    XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_WEEK_PROFILE,               0x02, "Publish Week Profile" ) \
10963
    XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SEASONS,                    0x03, "Publish Seasons" ) \
10964
    XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SPECIAL_DAYS,               0x04, "Publish Special Days" ) \
10965
    XXX(ZBEE_ZCL_CMD_ID_CAL_CANCEL_CALENDAR,                    0x05, "Cancel Calendar" )
10966
10967
VALUE_STRING_ENUM(zbee_zcl_calendar_srv_tx_cmd_names);
10968
VALUE_STRING_ARRAY(zbee_zcl_calendar_srv_tx_cmd_names);
10969
10970
/*************************/
10971
/* Function Declarations */
10972
/*************************/
10973
void proto_register_zbee_zcl_calendar(void);
10974
void proto_reg_handoff_zbee_zcl_calendar(void);
10975
10976
/* Command Dissector Helpers */
10977
static void dissect_zcl_calendar_get_calendar (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10978
static void dissect_zcl_calendar_get_day_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10979
static void dissect_zcl_calendar_get_week_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10980
static void dissect_zcl_calendar_get_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10981
static void dissect_zcl_calendar_get_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10982
static void dissect_zcl_calendar_publish_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10983
static void dissect_zcl_calendar_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10984
static void dissect_zcl_calendar_publish_week_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10985
static void dissect_zcl_calendar_publish_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10986
static void dissect_zcl_calendar_publish_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10987
static void dissect_zcl_calendar_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10988
10989
/*************************/
10990
/* Global Variables      */
10991
/*************************/
10992
10993
/* Initialize the protocol and registered fields */
10994
static int proto_zbee_zcl_calendar;
10995
10996
static int hf_zbee_zcl_calendar_srv_tx_cmd_id;
10997
static int hf_zbee_zcl_calendar_srv_rx_cmd_id;
10998
static int hf_zbee_zcl_calendar_attr_id;
10999
static int hf_zbee_zcl_calendar_attr_reporting_status;
11000
static int hf_zbee_zcl_calendar_type;
11001
static int hf_zbee_zcl_calendar_start_time;
11002
static int hf_zbee_zcl_calendar_start_time_with_cancel;
11003
static int hf_zbee_zcl_calendar_earliest_start_time;
11004
static int hf_zbee_zcl_calendar_time_reference;
11005
static int hf_zbee_zcl_calendar_name;
11006
static int hf_zbee_zcl_calendar_command_index;
11007
static int hf_zbee_zcl_calendar_date_year;
11008
static int hf_zbee_zcl_calendar_date_month;
11009
static int hf_zbee_zcl_calendar_date_month_day;
11010
static int hf_zbee_zcl_calendar_date_week_day;
11011
static int hf_zbee_zcl_calendar_provider_id;
11012
static int hf_zbee_zcl_calendar_issuer_event_id;
11013
static int hf_zbee_zcl_calendar_min_issuer_event_id;
11014
static int hf_zbee_zcl_calendar_issuer_calendar_id;
11015
static int hf_zbee_zcl_calendar_day_id;
11016
static int hf_zbee_zcl_calendar_day_id_ref;
11017
static int hf_zbee_zcl_calendar_day_id_ref_monday;
11018
static int hf_zbee_zcl_calendar_day_id_ref_tuesday;
11019
static int hf_zbee_zcl_calendar_day_id_ref_wednesday;
11020
static int hf_zbee_zcl_calendar_day_id_ref_thursday;
11021
static int hf_zbee_zcl_calendar_day_id_ref_friday;
11022
static int hf_zbee_zcl_calendar_day_id_ref_saturday;
11023
static int hf_zbee_zcl_calendar_day_id_ref_sunday;
11024
static int hf_zbee_zcl_calendar_week_id;
11025
static int hf_zbee_zcl_calendar_week_id_ref;
11026
static int hf_zbee_zcl_calendar_start_day_id;
11027
static int hf_zbee_zcl_calendar_start_week_id;
11028
static int hf_zbee_zcl_calendar_number_of_calendars;
11029
static int hf_zbee_zcl_calendar_number_of_events;
11030
static int hf_zbee_zcl_calendar_number_of_days;
11031
static int hf_zbee_zcl_calendar_number_of_weeks;
11032
static int hf_zbee_zcl_calendar_number_of_seasons;
11033
static int hf_zbee_zcl_calendar_number_of_day_profiles;
11034
static int hf_zbee_zcl_calendar_number_of_week_profiles;
11035
static int hf_zbee_zcl_calendar_total_number_of_schedule_entries;
11036
static int hf_zbee_zcl_calendar_total_number_of_special_days;
11037
static int hf_zbee_zcl_calendar_total_number_of_commands;
11038
static int hf_zbee_zcl_calendar_schedule_entry_start_time;
11039
static int hf_zbee_zcl_calendar_schedule_entry_price_tier;
11040
static int hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable;
11041
static int hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state;
11042
11043
/* Initialize the subtree pointers */
11044
static int ett_zbee_zcl_calendar;
11045
static int ett_zbee_zcl_calendar_special_day_date;
11046
static int ett_zbee_zcl_calendar_season_start_date;
11047
11048
#define zbee_zcl_calendar_type_names_VALUE_STRING_LIST(XXX) \
11049
    XXX(ZBEE_ZCL_CALENDAR_TYPE_DELIVERED,                                0x00, "Delivered Calendar" ) \
11050
    XXX(ZBEE_ZCL_CALENDAR_TYPE_RECEIVED,                                 0x01, "Received Calendar" ) \
11051
    XXX(ZBEE_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED,                   0x02, "Delivered and Received Calendar" ) \
11052
    XXX(ZBEE_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT,                          0x03, "Friendly Credit Calendar" ) \
11053
    XXX(ZBEE_ZCL_CALENDAR_TYPE_AUXILIARY_LOAD_SWITCH,                    0x04, "Auxiliary Load Switch Calendar" )
11054
11055
VALUE_STRING_ENUM(zbee_zcl_calendar_type_names);
11056
VALUE_STRING_ARRAY(zbee_zcl_calendar_type_names);
11057
11058
#define zbee_zcl_calendar_time_reference_names_VALUE_STRING_LIST(XXX) \
11059
    XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_UTC_TIME,                     0x00, "UTC Time" ) \
11060
    XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_STANDARD_TIME,                0x01, "Standard Time" ) \
11061
    XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_LOCAL_TIME,                   0x02, "Local Time" )
11062
11063
VALUE_STRING_ENUM(zbee_zcl_calendar_time_reference_names);
11064
VALUE_STRING_ARRAY(zbee_zcl_calendar_time_reference_names);
11065
11066
/*************************/
11067
/* Function Bodies       */
11068
/*************************/
11069
11070
/**
11071
 *This function is called by ZCL foundation dissector in order to decode
11072
 *
11073
 *@param tree pointer to data tree Wireshark uses to display packet.
11074
 *@param tvb pointer to buffer containing raw packet.
11075
 *@param offset pointer to buffer offset
11076
 *@param attr_id attribute identifier
11077
 *@param data_type attribute data type
11078
 *@param client_attr ZCL client
11079
 */
11080
static void
11081
dissect_zcl_calendar_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
11082
100
{
11083
100
    switch (attr_id) {
11084
        /* applies to all SE clusters */
11085
2
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_CAL:
11086
2
            proto_tree_add_item(tree, hf_zbee_zcl_calendar_attr_reporting_status, tvb, *offset, 1, ENC_NA);
11087
2
            *offset += 1;
11088
2
            break;
11089
11090
98
        default: /* Catch all */
11091
98
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
11092
98
            break;
11093
100
    }
11094
100
} /*dissect_zcl_calendar_attr_data*/
11095
11096
/**
11097
 *ZigBee ZCL Calendar cluster dissector for wireshark.
11098
 *
11099
 *@param tvb pointer to buffer containing raw packet.
11100
 *@param pinfo pointer to packet information fields
11101
 *@param tree pointer to data tree Wireshark uses to display packet.
11102
 */
11103
static int
11104
dissect_zbee_zcl_calendar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11105
5
{
11106
5
    proto_tree        *payload_tree;
11107
5
    zbee_zcl_packet   *zcl;
11108
5
    unsigned          offset = 0;
11109
5
    uint8_t           cmd_id;
11110
5
    int               rem_len;
11111
11112
    /* Reject the packet if data is NULL */
11113
5
    if (data == NULL)
11114
0
        return 0;
11115
5
    zcl = (zbee_zcl_packet *)data;
11116
5
    cmd_id = zcl->cmd_id;
11117
11118
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
11119
5
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
11120
        /* Append the command name to the info column. */
11121
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
11122
1
                        val_to_str_const(cmd_id, zbee_zcl_calendar_srv_rx_cmd_names, "Unknown Command"),
11123
1
                        zcl->tran_seqno);
11124
11125
        /* Add the command ID. */
11126
1
        proto_tree_add_uint(tree, hf_zbee_zcl_calendar_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
11127
11128
        /* Check is this command has a payload, than add the payload tree */
11129
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
11130
1
        if (rem_len > 0) {
11131
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_calendar, NULL, "Payload");
11132
11133
            /* Call the appropriate command dissector */
11134
1
            switch (cmd_id) {
11135
11136
0
                case ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR:
11137
0
                    dissect_zcl_calendar_get_calendar(tvb, payload_tree, &offset);
11138
0
                    break;
11139
11140
1
                case ZBEE_ZCL_CMD_ID_CAL_GET_DAY_PROFILES:
11141
1
                    dissect_zcl_calendar_get_day_profiles(tvb, payload_tree, &offset);
11142
1
                    break;
11143
11144
0
                case ZBEE_ZCL_CMD_ID_CAL_GET_WEEK_PROFILES:
11145
0
                    dissect_zcl_calendar_get_week_profiles(tvb, payload_tree, &offset);
11146
0
                    break;
11147
11148
0
                case ZBEE_ZCL_CMD_ID_CAL_GET_SEASONS:
11149
0
                    dissect_zcl_calendar_get_seasons(tvb, payload_tree, &offset);
11150
0
                    break;
11151
11152
0
                case ZBEE_ZCL_CMD_ID_CAL_GET_SPECIAL_DAYS:
11153
0
                    dissect_zcl_calendar_get_special_days(tvb, payload_tree, &offset);
11154
0
                    break;
11155
11156
0
                case ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR_CANCELLATION:
11157
                    /* No Payload */
11158
0
                    break;
11159
11160
0
                default:
11161
0
                    break;
11162
1
            }
11163
1
        }
11164
1
    }
11165
4
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
11166
        /* Append the command name to the info column. */
11167
4
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
11168
4
                        val_to_str_const(cmd_id, zbee_zcl_calendar_srv_tx_cmd_names, "Unknown Command"),
11169
4
                        zcl->tran_seqno);
11170
11171
        /* Add the command ID. */
11172
4
        proto_tree_add_uint(tree, hf_zbee_zcl_calendar_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
11173
11174
        /* Check is this command has a payload, than add the payload tree */
11175
4
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
11176
4
        if (rem_len > 0) {
11177
4
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_calendar, NULL, "Payload");
11178
11179
            /* Call the appropriate command dissector */
11180
4
            switch (cmd_id) {
11181
11182
0
                case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_CALENDAR:
11183
0
                    dissect_zcl_calendar_publish_calendar(tvb, payload_tree, &offset);
11184
0
                    break;
11185
11186
3
                case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_DAY_PROFILE:
11187
3
                    dissect_zcl_calendar_publish_day_profile(tvb, payload_tree, &offset);
11188
3
                    break;
11189
11190
0
                case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_WEEK_PROFILE:
11191
0
                    dissect_zcl_calendar_publish_week_profile(tvb, payload_tree, &offset);
11192
0
                    break;
11193
11194
0
                case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SEASONS:
11195
0
                    dissect_zcl_calendar_publish_seasons(tvb, payload_tree, &offset);
11196
0
                    break;
11197
11198
0
                case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SPECIAL_DAYS:
11199
0
                    dissect_zcl_calendar_publish_special_days(tvb, payload_tree, &offset);
11200
0
                    break;
11201
11202
0
                case ZBEE_ZCL_CMD_ID_CAL_CANCEL_CALENDAR:
11203
0
                    dissect_zcl_calendar_cancel(tvb, payload_tree, &offset);
11204
0
                    break;
11205
11206
1
                default:
11207
1
                    break;
11208
4
            }
11209
4
        }
11210
4
    }
11211
11212
5
    return tvb_captured_length(tvb);
11213
5
} /*dissect_zbee_zcl_calendar*/
11214
11215
/**
11216
 *This function manages the Get Calendar payload
11217
 *
11218
 *@param tvb pointer to buffer containing raw packet.
11219
 *@param tree pointer to data tree Wireshark uses to display packet.
11220
 *@param offset pointer to offset from caller
11221
 */
11222
static void
11223
dissect_zcl_calendar_get_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11224
0
{
11225
    /* Earliest Start Time */
11226
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11227
0
    *offset += 4;
11228
11229
    /* Min Issuer Event ID */
11230
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11231
0
    *offset += 4;
11232
11233
    /* Number of Calendars */
11234
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_calendars, tvb, *offset, 1, ENC_NA);
11235
0
    *offset += 1;
11236
11237
    /* Calendar Type */
11238
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11239
0
    *offset += 1;
11240
11241
    /* Provider Id */
11242
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11243
0
    *offset += 4;
11244
0
} /*dissect_zcl_calendar_get_calendar*/
11245
11246
/**
11247
 *This function manages the Get Day Profiles payload
11248
 *
11249
 *@param tvb pointer to buffer containing raw packet.
11250
 *@param tree pointer to data tree Wireshark uses to display packet.
11251
 *@param offset pointer to offset from caller
11252
 */
11253
static void
11254
dissect_zcl_calendar_get_day_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11255
1
{
11256
    /* Provider Id */
11257
1
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11258
1
    *offset += 4;
11259
11260
    /* Issuer Calendar ID */
11261
1
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11262
1
    *offset += 4;
11263
11264
    /* Start Day Id */
11265
1
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_day_id, tvb, *offset, 1, ENC_NA);
11266
1
    *offset += 1;
11267
11268
    /* Number of Days */
11269
1
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_days, tvb, *offset, 1, ENC_NA);
11270
1
    *offset += 1;
11271
1
} /*dissect_zcl_calendar_get_day_profiles*/
11272
11273
/**
11274
 *This function manages the Get Week Profiles payload
11275
 *
11276
 *@param tvb pointer to buffer containing raw packet.
11277
 *@param tree pointer to data tree Wireshark uses to display packet.
11278
 *@param offset pointer to offset from caller
11279
 */
11280
static void
11281
dissect_zcl_calendar_get_week_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11282
0
{
11283
    /* Provider Id */
11284
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11285
0
    *offset += 4;
11286
11287
    /* Issuer Calendar ID */
11288
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11289
0
    *offset += 4;
11290
11291
    /* Start Week Id */
11292
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_week_id, tvb, *offset, 1, ENC_NA);
11293
0
    *offset += 1;
11294
11295
    /* Number of Weeks */
11296
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_weeks, tvb, *offset, 1, ENC_NA);
11297
0
    *offset += 1;
11298
0
} /*dissect_zcl_calendar_get_week_profiles*/
11299
11300
/**
11301
 *This function manages the Get Seasons payload
11302
 *
11303
 *@param tvb pointer to buffer containing raw packet.
11304
 *@param tree pointer to data tree Wireshark uses to display packet.
11305
 *@param offset pointer to offset from caller
11306
 */
11307
static void
11308
dissect_zcl_calendar_get_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11309
0
{
11310
    /* Provider Id */
11311
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11312
0
    *offset += 4;
11313
11314
    /* Issuer Calendar ID */
11315
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11316
0
    *offset += 4;
11317
0
} /*dissect_zcl_calendar_get_seasons*/
11318
11319
/**
11320
 *This function manages the Get Special Days payload
11321
 *
11322
 *@param tvb pointer to buffer containing raw packet.
11323
 *@param tree pointer to data tree Wireshark uses to display packet.
11324
 *@param offset pointer to offset from caller
11325
 */
11326
static void
11327
dissect_zcl_calendar_get_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11328
0
{
11329
    /* Start Time */
11330
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11331
0
    *offset += 4;
11332
11333
    /* Number of Events */
11334
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_events, tvb, *offset, 1, ENC_NA);
11335
0
    *offset += 1;
11336
11337
    /* Calendar Type */
11338
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11339
0
    *offset += 1;
11340
11341
    /* Provider Id */
11342
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11343
0
    *offset += 4;
11344
11345
    /* Issuer Calendar ID */
11346
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11347
0
    *offset += 4;
11348
0
} /*dissect_zcl_calendar_get_special_days*/
11349
11350
/**
11351
 *This function manages the Publish Calendar payload
11352
 *
11353
 *@param tvb pointer to buffer containing raw packet.
11354
 *@param tree pointer to data tree Wireshark uses to display packet.
11355
 *@param offset pointer to offset from caller
11356
 */
11357
static void
11358
dissect_zcl_calendar_publish_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11359
0
{
11360
0
    int length;
11361
11362
    /* Provider Id */
11363
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11364
0
    *offset += 4;
11365
11366
    /* Issuer Event ID */
11367
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11368
0
    *offset += 4;
11369
11370
    /* Issuer Calendar ID */
11371
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11372
0
    *offset += 4;
11373
11374
    /* Start Time */
11375
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11376
0
    *offset += 4;
11377
11378
    /* Calendar Type */
11379
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11380
0
    *offset += 1;
11381
11382
    /* Calendar Time Reference */
11383
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_time_reference, tvb, *offset, 1, ENC_NA);
11384
0
    *offset += 1;
11385
11386
    /* Calendar Name */
11387
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_calendar_name, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
11388
0
    *offset += length;
11389
11390
    /* Number of Seasons */
11391
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_seasons, tvb, *offset, 1, ENC_NA);
11392
0
    *offset += 1;
11393
11394
    /* Number of Week Profiles */
11395
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_week_profiles, tvb, *offset, 1, ENC_NA);
11396
0
    *offset += 1;
11397
11398
    /* Number of Day Profiles */
11399
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_day_profiles, tvb, *offset, 1, ENC_NA);
11400
0
    *offset += 1;
11401
0
} /*dissect_zcl_calendar_publish_calendar*/
11402
11403
/**
11404
 *This function manages the Publish Day Profile payload
11405
 *
11406
 *@param tvb pointer to buffer containing raw packet.
11407
 *@param tree pointer to data tree Wireshark uses to display packet.
11408
 *@param offset pointer to offset from caller
11409
 */
11410
static void
11411
dissect_zcl_calendar_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11412
3
{
11413
3
    uint8_t  schedule_entries_count;
11414
3
    uint8_t  calendar_type;
11415
11416
    /* Provider Id */
11417
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11418
3
    *offset += 4;
11419
11420
    /* Issuer Event ID */
11421
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11422
3
    *offset += 4;
11423
11424
    /* Issuer Calendar ID */
11425
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11426
3
    *offset += 4;
11427
11428
    /* Day ID */
11429
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id, tvb, *offset, 1, ENC_NA);
11430
3
    *offset += 1;
11431
11432
    /* Total Number of Schedule Entries */
11433
3
    schedule_entries_count = tvb_get_uint8(tvb, *offset);
11434
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_schedule_entries, tvb, *offset, 1, ENC_NA);
11435
3
    *offset += 1;
11436
11437
    /* Command Index */
11438
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11439
3
    *offset += 1;
11440
11441
    /* Total Number of Commands */
11442
3
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11443
3
    *offset += 1;
11444
11445
    /* Calendar Type */
11446
3
    proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA, &calendar_type);
11447
3
    *offset += 1;
11448
11449
103
    for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 3 && i < schedule_entries_count; i++) {
11450
        /* Start Time */
11451
100
        proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_start_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
11452
100
        *offset += 2;
11453
11454
100
        switch (calendar_type) {
11455
            /* Rate Start Time */
11456
11
            case ZBEE_ZCL_CALENDAR_TYPE_DELIVERED:
11457
11
            case ZBEE_ZCL_CALENDAR_TYPE_RECEIVED:
11458
11
            case ZBEE_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED:
11459
                /* Price Tier */
11460
11
                proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_price_tier, tvb, *offset, 1, ENC_NA);
11461
11
                *offset += 1;
11462
11
                break;
11463
11464
            /* Friendly Credit Start Time */
11465
0
            case ZBEE_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT:
11466
                /* Price Tier */
11467
0
                proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable, tvb, *offset, 1, ENC_NA);
11468
0
                *offset += 1;
11469
0
                break;
11470
11471
            /* Auxiliary Load Start Time */
11472
0
            case ZBEE_ZCL_CALENDAR_TYPE_AUXILIARY_LOAD_SWITCH:
11473
                /* Price Tier */
11474
0
                proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state, tvb, *offset, 1, ENC_NA);
11475
0
                *offset += 1;
11476
0
                break;
11477
100
        }
11478
100
    }
11479
3
} /*dissect_zcl_calendar_publish_day_profile*/
11480
11481
/**
11482
 *This function manages the Publish Week Profile payload
11483
 *
11484
 *@param tvb pointer to buffer containing raw packet.
11485
 *@param tree pointer to data tree Wireshark uses to display packet.
11486
 *@param offset pointer to offset from caller
11487
 */
11488
static void
11489
dissect_zcl_calendar_publish_week_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11490
0
{
11491
    /* Provider Id */
11492
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11493
0
    *offset += 4;
11494
11495
    /* Issuer Event ID */
11496
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11497
0
    *offset += 4;
11498
11499
    /* Issuer Calendar ID */
11500
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11501
0
    *offset += 4;
11502
11503
    /* Week ID */
11504
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_week_id, tvb, *offset, 1, ENC_NA);
11505
0
    *offset += 1;
11506
11507
    /* Day ID Ref Monday */
11508
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_monday, tvb, *offset, 1, ENC_NA);
11509
0
    *offset += 1;
11510
11511
    /* Day ID Ref Tuesday */
11512
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_tuesday, tvb, *offset, 1, ENC_NA);
11513
0
    *offset += 1;
11514
11515
    /* Day ID Ref Wednesday */
11516
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_wednesday, tvb, *offset, 1, ENC_NA);
11517
0
    *offset += 1;
11518
11519
    /* Day ID Ref Thursday */
11520
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_thursday, tvb, *offset, 1, ENC_NA);
11521
0
    *offset += 1;
11522
11523
    /* Day ID Ref Friday */
11524
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_friday, tvb, *offset, 1, ENC_NA);
11525
0
    *offset += 1;
11526
11527
    /* Day ID Ref Saturday */
11528
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_saturday, tvb, *offset, 1, ENC_NA);
11529
0
    *offset += 1;
11530
11531
    /* Day ID Ref Sunday */
11532
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_sunday, tvb, *offset, 1, ENC_NA);
11533
0
    *offset += 1;
11534
0
} /*dissect_zcl_calendar_publish_week_profile*/
11535
11536
/**
11537
 *This function manages the Publish Season Profile payload
11538
 *
11539
 *@param tvb pointer to buffer containing raw packet.
11540
 *@param tree pointer to data tree Wireshark uses to display packet.
11541
 *@param offset pointer to offset from caller
11542
 */
11543
static void
11544
dissect_zcl_calendar_publish_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11545
0
{
11546
    /* Provider Id */
11547
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11548
0
    *offset += 4;
11549
11550
    /* Issuer Event ID */
11551
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11552
0
    *offset += 4;
11553
11554
    /* Issuer Calendar ID */
11555
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11556
0
    *offset += 4;
11557
11558
    /* Command Index */
11559
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11560
0
    *offset += 1;
11561
11562
    /* Total Number of Commands */
11563
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11564
0
    *offset += 1;
11565
11566
0
    while (tvb_reported_length_remaining(tvb, *offset) >= 5) {
11567
        /* Season Start Date */
11568
0
        dissect_zcl_date(tvb, tree, offset, ett_zbee_zcl_calendar_season_start_date, "Season Start Date", hf_zbee_zcl_calendar_date_year, hf_zbee_zcl_calendar_date_month, hf_zbee_zcl_calendar_date_month_day, hf_zbee_zcl_calendar_date_week_day);
11569
11570
        /* Week ID Ref */
11571
0
        proto_tree_add_item(tree, hf_zbee_zcl_calendar_week_id_ref, tvb, *offset, 1, ENC_NA);
11572
0
        *offset += 1;
11573
0
    }
11574
0
} /*dissect_zcl_calendar_publish_seasons*/
11575
11576
/**
11577
 *This function manages the Publish Special Days payload
11578
 *
11579
 *@param tvb pointer to buffer containing raw packet.
11580
 *@param tree pointer to data tree Wireshark uses to display packet.
11581
 *@param offset pointer to offset from caller
11582
 */
11583
static void
11584
dissect_zcl_calendar_publish_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11585
0
{
11586
0
    uint8_t  total_special_days_count;
11587
11588
    /* Provider Id */
11589
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11590
0
    *offset += 4;
11591
11592
    /* Issuer Event ID */
11593
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11594
0
    *offset += 4;
11595
11596
    /* Issuer Calendar ID */
11597
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11598
0
    *offset += 4;
11599
11600
    /* Start Time */
11601
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time_with_cancel, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11602
0
    *offset += 4;
11603
11604
    /* Calendar Type */
11605
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11606
0
    *offset += 1;
11607
11608
    /* Total Number of Special Days */
11609
0
    total_special_days_count = tvb_get_uint8(tvb, *offset);
11610
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_special_days, tvb, *offset, 1, ENC_NA);
11611
0
    *offset += 1;
11612
11613
    /* Command Index */
11614
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11615
0
    *offset += 1;
11616
11617
    /* Total Number of Commands */
11618
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11619
0
    *offset += 1;
11620
11621
0
    for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 5 && i < total_special_days_count; i++) {
11622
        /* Special Day Date */
11623
0
        dissect_zcl_date(tvb, tree, offset, ett_zbee_zcl_calendar_special_day_date, "Special Day Date", hf_zbee_zcl_calendar_date_year, hf_zbee_zcl_calendar_date_month, hf_zbee_zcl_calendar_date_month_day, hf_zbee_zcl_calendar_date_week_day);
11624
11625
        /* Day ID Ref */
11626
0
        proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref, tvb, *offset, 1, ENC_NA);
11627
0
        *offset += 1;
11628
0
    }
11629
0
} /*dissect_zcl_calendar_publish_special_days*/
11630
11631
/**
11632
 *This function manages the Cancel Calendar payload
11633
 *
11634
 *@param tvb pointer to buffer containing raw packet.
11635
 *@param tree pointer to data tree Wireshark uses to display packet.
11636
 *@param offset pointer to offset from caller
11637
 */
11638
static void
11639
dissect_zcl_calendar_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11640
0
{
11641
    /* Provider Id */
11642
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11643
0
    *offset += 4;
11644
11645
    /* Issuer Calendar ID */
11646
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11647
0
    *offset += 4;
11648
11649
    /* Calendar Type */
11650
0
    proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11651
0
    *offset += 1;
11652
0
} /*dissect_zcl_calendar_cancel*/
11653
11654
/**
11655
 *This function registers the ZCL Calendar dissector
11656
 *
11657
*/
11658
void
11659
proto_register_zbee_zcl_calendar(void)
11660
15
{
11661
15
    static hf_register_info hf[] = {
11662
11663
15
        { &hf_zbee_zcl_calendar_attr_id,
11664
15
            { "Attribute", "zbee_zcl_se.calendar.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_calendar_attr_names),
11665
15
            0x0, NULL, HFILL } },
11666
11667
15
        { &hf_zbee_zcl_calendar_attr_reporting_status,                         /* common to all SE clusters */
11668
15
            { "Attribute Reporting Status", "zbee_zcl_se.calendar.attr.attr_reporting_status",
11669
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
11670
11671
15
        { &hf_zbee_zcl_calendar_srv_tx_cmd_id,
11672
15
            { "Command", "zbee_zcl_se.calendar.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_srv_tx_cmd_names),
11673
15
            0x00, NULL, HFILL } },
11674
11675
15
        { &hf_zbee_zcl_calendar_srv_rx_cmd_id,
11676
15
            { "Command", "zbee_zcl_se.calendar.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_srv_rx_cmd_names),
11677
15
            0x00, NULL, HFILL } },
11678
11679
15
        { &hf_zbee_zcl_calendar_type,
11680
15
          { "Calendar Type", "zbee_zcl_se.calendar.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_type_names),
11681
15
            0x00, NULL, HFILL } },
11682
11683
15
        { &hf_zbee_zcl_calendar_start_time,
11684
15
            { "Start Time", "zbee_zcl_se.calendar.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_strings),
11685
15
            0x00, NULL, HFILL } },
11686
11687
15
        { &hf_zbee_zcl_calendar_start_time_with_cancel,
11688
15
            { "Start Time", "zbee_zcl_se.calendar.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
11689
15
            0x00, NULL, HFILL } },
11690
11691
15
        { &hf_zbee_zcl_calendar_earliest_start_time,
11692
15
            { "Earliest Start Time", "zbee_zcl_se.calendar.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
11693
15
            0x00, NULL, HFILL } },
11694
11695
15
        { &hf_zbee_zcl_calendar_time_reference,
11696
15
          { "Calendar Time Reference", "zbee_zcl_se.calendar.time_reference", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_time_reference_names),
11697
15
            0x00, NULL, HFILL } },
11698
11699
15
        { &hf_zbee_zcl_calendar_name,
11700
15
            { "Calendar Name", "zbee_zcl_se.calendar.name", FT_UINT_STRING, BASE_NONE, NULL,
11701
15
            0x00, NULL, HFILL } },
11702
11703
15
        { &hf_zbee_zcl_calendar_command_index,
11704
15
            { "Command Index", "zbee_zcl_se.calendar.command_index", FT_UINT8, BASE_DEC, NULL,
11705
15
            0x00, NULL, HFILL } },
11706
11707
15
        { &hf_zbee_zcl_calendar_date_year,
11708
15
            { "Year", "zbee_zcl_se.calendar.date.year", FT_UINT8, BASE_DEC, NULL,
11709
15
            0x00, NULL, HFILL } },
11710
11711
15
        { &hf_zbee_zcl_calendar_date_month,
11712
15
            { "Month", "zbee_zcl_se.calendar.date.month", FT_UINT8, BASE_DEC, NULL,
11713
15
            0x00, NULL, HFILL } },
11714
11715
15
        { &hf_zbee_zcl_calendar_date_month_day,
11716
15
            { "Month Day", "zbee_zcl_se.calendar.date.month_day", FT_UINT8, BASE_DEC, NULL,
11717
15
            0x00, NULL, HFILL } },
11718
11719
15
        { &hf_zbee_zcl_calendar_date_week_day,
11720
15
            { "Week Day", "zbee_zcl_se.calendar.date.week_day", FT_UINT8, BASE_DEC, NULL,
11721
15
            0x00, NULL, HFILL } },
11722
11723
15
        { &hf_zbee_zcl_calendar_provider_id,
11724
15
            { "Provider ID", "zbee_zcl_se.calendar.provider_id", FT_UINT32, BASE_DEC, NULL,
11725
15
            0x00, NULL, HFILL } },
11726
11727
15
        { &hf_zbee_zcl_calendar_issuer_event_id,
11728
15
            { "Issuer Event ID", "zbee_zcl_se.calendar.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
11729
15
            0x00, NULL, HFILL } },
11730
11731
15
        { &hf_zbee_zcl_calendar_min_issuer_event_id,
11732
15
            { "Min. Issuer Event ID", "zbee_zcl_se.calendar.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
11733
15
            0x00, NULL, HFILL } },
11734
11735
15
        { &hf_zbee_zcl_calendar_issuer_calendar_id,
11736
15
            { "Issuer Calendar ID", "zbee_zcl_se.calendar.issuer_calendar_id", FT_UINT32, BASE_DEC, NULL,
11737
15
            0x00, NULL, HFILL } },
11738
11739
15
        { &hf_zbee_zcl_calendar_day_id,
11740
15
            { "Day ID", "zbee_zcl_se.calendar.day_id", FT_UINT8, BASE_DEC, NULL,
11741
15
            0x00, NULL, HFILL } },
11742
11743
15
        { &hf_zbee_zcl_calendar_day_id_ref,
11744
15
            { "Day ID Ref", "zbee_zcl_se.calendar.day_id_ref", FT_UINT8, BASE_DEC, NULL,
11745
15
            0x00, NULL, HFILL } },
11746
11747
15
        { &hf_zbee_zcl_calendar_day_id_ref_monday,
11748
15
            { "Day ID Ref Monday", "zbee_zcl_se.calendar.day_id_ref_monday", FT_UINT8, BASE_DEC, NULL,
11749
15
            0x00, NULL, HFILL } },
11750
11751
15
        { &hf_zbee_zcl_calendar_day_id_ref_tuesday,
11752
15
            { "Day ID Ref Tuesday", "zbee_zcl_se.calendar.day_id_ref_tuesday", FT_UINT8, BASE_DEC, NULL,
11753
15
            0x00, NULL, HFILL } },
11754
11755
15
        { &hf_zbee_zcl_calendar_day_id_ref_wednesday,
11756
15
            { "Day ID Ref Wednesday", "zbee_zcl_se.calendar.day_id_ref_wednesday", FT_UINT8, BASE_DEC, NULL,
11757
15
            0x00, NULL, HFILL } },
11758
11759
15
        { &hf_zbee_zcl_calendar_day_id_ref_thursday,
11760
15
            { "Day ID Ref Thursday", "zbee_zcl_se.calendar.day_id_ref_thursday", FT_UINT8, BASE_DEC, NULL,
11761
15
            0x00, NULL, HFILL } },
11762
11763
15
        { &hf_zbee_zcl_calendar_day_id_ref_friday,
11764
15
            { "Day ID Ref Friday", "zbee_zcl_se.calendar.day_id_ref_friday", FT_UINT8, BASE_DEC, NULL,
11765
15
            0x00, NULL, HFILL } },
11766
11767
15
        { &hf_zbee_zcl_calendar_day_id_ref_saturday,
11768
15
            { "Day ID Ref Saturday", "zbee_zcl_se.calendar.day_id_ref_saturday", FT_UINT8, BASE_DEC, NULL,
11769
15
            0x00, NULL, HFILL } },
11770
11771
15
        { &hf_zbee_zcl_calendar_day_id_ref_sunday,
11772
15
            { "Day ID Ref Sunday", "zbee_zcl_se.calendar.day_id_ref_sunday", FT_UINT8, BASE_DEC, NULL,
11773
15
            0x00, NULL, HFILL } },
11774
11775
15
        { &hf_zbee_zcl_calendar_week_id,
11776
15
            { "Week ID", "zbee_zcl_se.calendar.week_id", FT_UINT8, BASE_DEC, NULL,
11777
15
            0x00, NULL, HFILL } },
11778
11779
15
        { &hf_zbee_zcl_calendar_week_id_ref,
11780
15
            { "Week ID Ref", "zbee_zcl_se.calendar.week_id_ref", FT_UINT8, BASE_DEC, NULL,
11781
15
            0x00, NULL, HFILL } },
11782
11783
15
        { &hf_zbee_zcl_calendar_start_day_id,
11784
15
            { "Start Day ID", "zbee_zcl_se.calendar.start_day_id", FT_UINT8, BASE_DEC, NULL,
11785
15
            0x00, NULL, HFILL } },
11786
11787
15
        { &hf_zbee_zcl_calendar_start_week_id,
11788
15
            { "Start Week ID", "zbee_zcl_se.calendar.start_week_id", FT_UINT8, BASE_DEC, NULL,
11789
15
            0x00, NULL, HFILL } },
11790
11791
15
        { &hf_zbee_zcl_calendar_number_of_calendars,
11792
15
            { "Number of Calendars", "zbee_zcl_se.calendar.number_of_calendars", FT_UINT8, BASE_DEC, NULL,
11793
15
            0x00, NULL, HFILL } },
11794
11795
15
        { &hf_zbee_zcl_calendar_number_of_events,
11796
15
            { "Number of Events", "zbee_zcl_se.calendar.number_of_events", FT_UINT8, BASE_DEC, NULL,
11797
15
            0x00, NULL, HFILL } },
11798
11799
15
        { &hf_zbee_zcl_calendar_number_of_days,
11800
15
            { "Number of Days", "zbee_zcl_se.calendar.number_of_days", FT_UINT8, BASE_DEC, NULL,
11801
15
            0x00, NULL, HFILL } },
11802
11803
15
        { &hf_zbee_zcl_calendar_number_of_weeks,
11804
15
            { "Number of Weeks", "zbee_zcl_se.calendar.number_of_weeks", FT_UINT8, BASE_DEC, NULL,
11805
15
            0x00, NULL, HFILL } },
11806
11807
15
        { &hf_zbee_zcl_calendar_number_of_seasons,
11808
15
            { "Number of Seasons", "zbee_zcl_se.calendar.number_of_seasons", FT_UINT8, BASE_DEC, NULL,
11809
15
            0x00, NULL, HFILL } },
11810
11811
15
        { &hf_zbee_zcl_calendar_number_of_day_profiles,
11812
15
            { "Number of Day Profiles", "zbee_zcl_se.calendar.number_of_day_profiles", FT_UINT8, BASE_DEC, NULL,
11813
15
            0x00, NULL, HFILL } },
11814
11815
15
        { &hf_zbee_zcl_calendar_number_of_week_profiles,
11816
15
            { "Number of Week Profiles", "zbee_zcl_se.calendar.number_of_week_profiles", FT_UINT8, BASE_DEC, NULL,
11817
15
            0x00, NULL, HFILL } },
11818
11819
15
        { &hf_zbee_zcl_calendar_total_number_of_schedule_entries,
11820
15
            { "Total Number of Schedule Entries", "zbee_zcl_se.calendar.total_number_of_schedule_entries", FT_UINT8, BASE_DEC, NULL,
11821
15
            0x00, NULL, HFILL } },
11822
11823
15
        { &hf_zbee_zcl_calendar_total_number_of_special_days,
11824
15
            { "Total Number of Special Days", "zbee_zcl_se.calendar.total_number_of_special_days", FT_UINT8, BASE_DEC, NULL,
11825
15
            0x00, NULL, HFILL } },
11826
11827
15
        { &hf_zbee_zcl_calendar_total_number_of_commands,
11828
15
            { "Total Number of Commands", "zbee_zcl_se.calendar.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
11829
15
            0x00, NULL, HFILL } },
11830
11831
15
        { &hf_zbee_zcl_calendar_schedule_entry_start_time,
11832
15
            { "Start Time", "zbee_zcl_se.calendar.schedule_entry.start_time", FT_UINT16, BASE_DEC, NULL,
11833
15
            0x00, NULL, HFILL } },
11834
11835
15
        { &hf_zbee_zcl_calendar_schedule_entry_price_tier,
11836
15
            { "Price Tier", "zbee_zcl_se.calendar.schedule_entry.price_tier", FT_UINT8, BASE_DEC, NULL,
11837
15
            0x00, NULL, HFILL } },
11838
11839
15
        { &hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable,
11840
15
          { "Friendly Credit Enable", "zbee_zcl_se.calendar.schedule_entry.friendly_credit_enable", FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled),
11841
15
            0x00, NULL, HFILL } },
11842
11843
15
        { &hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state,
11844
15
            { "Auxiliary Load Switch State", "zbee_zcl_se.calendar.schedule_entry.auxiliary_load_switch_state", FT_UINT8, BASE_HEX, NULL,
11845
15
            0x00, NULL, HFILL } },
11846
11847
15
    };
11848
11849
    /* ZCL Calendar subtrees */
11850
15
    int *ett[] = {
11851
15
        &ett_zbee_zcl_calendar,
11852
15
        &ett_zbee_zcl_calendar_special_day_date,
11853
15
        &ett_zbee_zcl_calendar_season_start_date,
11854
15
    };
11855
11856
    /* Register the ZigBee ZCL Calendar cluster protocol name and description */
11857
15
    proto_zbee_zcl_calendar = proto_register_protocol("ZigBee ZCL Calendar", "ZCL Calendar", ZBEE_PROTOABBREV_ZCL_CALENDAR);
11858
15
    proto_register_field_array(proto_zbee_zcl_calendar, hf, array_length(hf));
11859
15
    proto_register_subtree_array(ett, array_length(ett));
11860
11861
    /* Register the ZigBee ZCL Calendar dissector. */
11862
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_CALENDAR, dissect_zbee_zcl_calendar, proto_zbee_zcl_calendar);
11863
15
} /*proto_register_zbee_zcl_calendar*/
11864
11865
/**
11866
 *Hands off the ZCL Calendar dissector.
11867
 *
11868
*/
11869
void
11870
proto_reg_handoff_zbee_zcl_calendar(void)
11871
15
{
11872
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_CALENDAR,
11873
15
                            proto_zbee_zcl_calendar,
11874
15
                            ett_zbee_zcl_calendar,
11875
15
                            ZBEE_ZCL_CID_CALENDAR,
11876
15
                            ZBEE_MFG_CODE_NONE,
11877
15
                            hf_zbee_zcl_calendar_attr_id,
11878
15
                            -1,
11879
15
                            hf_zbee_zcl_calendar_srv_rx_cmd_id,
11880
15
                            hf_zbee_zcl_calendar_srv_tx_cmd_id,
11881
15
                            dissect_zcl_calendar_attr_data
11882
15
                         );
11883
15
} /*proto_reg_handoff_zbee_zcl_calendar*/
11884
11885
/* ----------------------- Daily Schedule cluster ---------------------- */
11886
/* Attributes */
11887
#define zbee_zcl_daily_schedule_attr_names_VALUE_STRING_LIST(XXX) \
11888
/* Auxiliary Switch Label Attribute Set */ \
11889
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_1_LABEL,                0x0000, "Aux Switch 1 Label" ) \
11890
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_2_LABEL,                0x0001, "Aux Switch 2 Label" ) \
11891
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_3_LABEL,                0x0002, "Aux Switch 3 Label" ) \
11892
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_4_LABEL,                0x0003, "Aux Switch 4 Label" ) \
11893
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_5_LABEL,                0x0004, "Aux Switch 5 Label" ) \
11894
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_6_LABEL,                0x0005, "Aux Switch 6 Label" ) \
11895
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_7_LABEL,                0x0006, "Aux Switch 7 Label" ) \
11896
    XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_8_LABEL,                0x0007, "Aux Switch 8 Label" ) \
11897
    XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_AUX_LOAD_SWITCH_STATE,     0x0100, "Current Auxiliary Load Switch State" ) \
11898
    XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_DELIVERED_TIER,            0x0101, "Current Delivered Tier" ) \
11899
    XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_TIER_LABEL,                0x0102, "Current Tier Label" ) \
11900
    XXX(ZBEE_ZCL_ATTR_ID_DSH_LINKY_PEAK_PERIOD_STATUS,          0x0103, "Linky Peak Period Status" ) \
11901
    XXX(ZBEE_ZCL_ATTR_ID_DSH_PEAK_START_TIME,                   0x0104, "Peak Start Time" ) \
11902
    XXX(ZBEE_ZCL_ATTR_ID_DSH_PEAK_END_TIME,                     0x0105, "Peak End Time" ) \
11903
    XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_TARIFF_LABEL,              0x0106, "Current Tariff Label" ) \
11904
11905
VALUE_STRING_ENUM(zbee_zcl_daily_schedule_attr_names);
11906
VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_attr_names);
11907
11908
/* Server Commands Received */
11909
#define zbee_zcl_daily_schedule_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
11910
    XXX(ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE,                       0x00, "Get Schedule" ) \
11911
    XXX(ZBEE_ZCL_CMD_ID_DSH_GET_DAY_PROFILE,                    0x01, "Get Day Profile" ) \
11912
    XXX(ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE_CANCELLATION,          0x05, "Get Schedule Cancellation" ) \
11913
11914
VALUE_STRING_ENUM(zbee_zcl_daily_schedule_srv_rx_cmd_names);
11915
VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_srv_rx_cmd_names);
11916
11917
/* Server Commands Generated */
11918
#define zbee_zcl_daily_schedule_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
11919
    XXX(ZBEE_ZCL_CMD_ID_DSH_PUBLISH_SCHEDULE,                   0x00, "Publish Schedule" ) \
11920
    XXX(ZBEE_ZCL_CMD_ID_DSH_PUBLISH_DAY_PROFILE,                0x01, "Publish Day Profile" ) \
11921
    XXX(ZBEE_ZCL_CMD_ID_DSH_CANCEL_SCHEDULE,                    0x05, "Cancel Schedule" ) \
11922
11923
VALUE_STRING_ENUM(zbee_zcl_daily_schedule_srv_tx_cmd_names);
11924
VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_srv_tx_cmd_names);
11925
11926
/*************************/
11927
/* Function Declarations */
11928
/*************************/
11929
void proto_register_zbee_zcl_daily_schedule(void);
11930
void proto_reg_handoff_zbee_zcl_daily_schedule(void);
11931
11932
/* Command Dissector Helpers */
11933
static void dissect_zcl_daily_schedule_get_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11934
static void dissect_zcl_daily_schedule_get_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11935
static void dissect_zcl_daily_schedule_publish_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11936
static void dissect_zcl_daily_schedule_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11937
static void dissect_zcl_daily_schedule_cancel_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11938
11939
/*************************/
11940
/* Global Variables      */
11941
/*************************/
11942
11943
/* Initialize the protocol and registered fields */
11944
static int proto_zbee_zcl_daily_schedule;
11945
11946
static int hf_zbee_zcl_daily_schedule_srv_tx_cmd_id;
11947
static int hf_zbee_zcl_daily_schedule_srv_rx_cmd_id;
11948
static int hf_zbee_zcl_daily_schedule_attr_server_id;
11949
/* Get Schedule cmd */
11950
static int hf_zbee_zcl_daily_schedule_type;
11951
static int hf_zbee_zcl_daily_schedule_name;
11952
static int hf_zbee_zcl_daily_schedule_start_time;
11953
static int hf_zbee_zcl_daily_schedule_earliest_start_time;
11954
static int hf_zbee_zcl_daily_schedule_command_index;
11955
static int hf_zbee_zcl_daily_schedule_id;
11956
static int hf_zbee_zcl_daily_schedule_time_reference;
11957
static int hf_zbee_zcl_daily_schedule_provider_id;
11958
static int hf_zbee_zcl_daily_schedule_issuer_event_id;
11959
static int hf_zbee_zcl_daily_schedule_min_issuer_event_id;
11960
static int hf_zbee_zcl_daily_schedule_number_of_schedules;
11961
static int hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries;
11962
static int hf_zbee_zcl_daily_schedule_schedule_entry_start_time;
11963
static int hf_zbee_zcl_daily_schedule_schedule_entry_price_tier;
11964
static int hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state;
11965
11966
/* Initialize the subtree pointers */
11967
static int ett_zbee_zcl_daily_schedule;
11968
11969
#define zbee_zcl_daily_schedule_type_names_VALUE_STRING_LIST(XXX) \
11970
    XXX(ZBEE_ZCL_SCHEDULE_TYPE_LINKY_SCHEDULE,                           0x00, "Linky Schedule" ) \
11971
11972
VALUE_STRING_ENUM(zbee_zcl_daily_schedule_type_names);
11973
VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_type_names);
11974
11975
#define zbee_zcl_daily_schedule_time_reference_names_VALUE_STRING_LIST(XXX) \
11976
    XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_UTC_TIME,                     0x00, "UTC Time" ) \
11977
    XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_STANDARD_TIME,                0x01, "Standard Time" ) \
11978
    XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_LOCAL_TIME,                   0x02, "Local Time" )
11979
11980
VALUE_STRING_ENUM(zbee_zcl_daily_schedule_time_reference_names);
11981
VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_time_reference_names);
11982
11983
/**
11984
 *ZigBee ZCL Daily Schedule cluster dissector for wireshark.
11985
 *
11986
 *@param tvb pointer to buffer containing raw packet.
11987
 *@param pinfo pointer to packet information fields
11988
 *@param tree pointer to data tree Wireshark uses to display packet.
11989
 */
11990
static int
11991
dissect_zbee_zcl_daily_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11992
1
{
11993
1
    proto_tree        *payload_tree;
11994
1
    zbee_zcl_packet   *zcl;
11995
1
    unsigned          offset = 0;
11996
1
    uint8_t           cmd_id;
11997
1
    int               rem_len;
11998
11999
    /* Reject the packet if data is NULL */
12000
1
    if (data == NULL)
12001
0
        return 0;
12002
1
    zcl = (zbee_zcl_packet *)data;
12003
1
    cmd_id = zcl->cmd_id;
12004
12005
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
12006
1
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
12007
        /* Append the command name to the info column. */
12008
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
12009
1
                        val_to_str_const(cmd_id, zbee_zcl_calendar_srv_rx_cmd_names, "Unknown Command"),
12010
1
                        zcl->tran_seqno);
12011
12012
        /* Add the command ID. */
12013
1
        proto_tree_add_uint(tree, hf_zbee_zcl_daily_schedule_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
12014
12015
        /* Check is this command has a payload, than add the payload tree */
12016
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
12017
1
        if (rem_len > 0) {
12018
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_daily_schedule, NULL, "Payload");
12019
12020
            /* Call the appropriate command dissector */
12021
1
            switch (cmd_id) {
12022
12023
0
                case ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE:
12024
0
                    dissect_zcl_daily_schedule_get_schedule(tvb, payload_tree, &offset);
12025
0
                    break;
12026
12027
0
                case ZBEE_ZCL_CMD_ID_DSH_GET_DAY_PROFILE:
12028
0
                    dissect_zcl_daily_schedule_get_day_profile(tvb, payload_tree, &offset);
12029
0
                    break;
12030
12031
0
                case ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE_CANCELLATION:
12032
                    /* No Payload */
12033
0
                    break;
12034
12035
1
                default:
12036
1
                    break;
12037
1
            }
12038
1
        }
12039
1
    }
12040
0
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
12041
        /* Append the command name to the info column. */
12042
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
12043
0
                        val_to_str_const(cmd_id, zbee_zcl_daily_schedule_srv_tx_cmd_names, "Unknown Command"),
12044
0
                        zcl->tran_seqno);
12045
12046
        /* Add the command ID. */
12047
0
        proto_tree_add_uint(tree, hf_zbee_zcl_daily_schedule_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
12048
12049
        /* Check is this command has a payload, than add the payload tree */
12050
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
12051
0
        if (rem_len > 0) {
12052
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_daily_schedule, NULL, "Payload");
12053
12054
            /* Call the appropriate command dissector */
12055
0
            switch (cmd_id) {
12056
12057
0
                case ZBEE_ZCL_CMD_ID_DSH_PUBLISH_SCHEDULE:
12058
0
                    dissect_zcl_daily_schedule_publish_schedule(tvb, payload_tree, &offset);
12059
0
                    break;
12060
12061
0
                case ZBEE_ZCL_CMD_ID_DSH_PUBLISH_DAY_PROFILE:
12062
0
                    dissect_zcl_daily_schedule_publish_day_profile(tvb, payload_tree, &offset);
12063
0
                    break;
12064
12065
0
                case ZBEE_ZCL_CMD_ID_DSH_CANCEL_SCHEDULE:
12066
0
                    dissect_zcl_daily_schedule_cancel_schedule(tvb, payload_tree, &offset);
12067
0
                    break;
12068
12069
0
                default:
12070
0
                    break;
12071
0
            }
12072
0
        }
12073
0
    }
12074
12075
1
    return tvb_captured_length(tvb);
12076
1
} /*dissect_zbee_zcl_daily_schedule*/
12077
12078
/**
12079
 *This function manages the Publish Calendar payload
12080
 *
12081
 *@param tvb pointer to buffer containing raw packet.
12082
 *@param tree pointer to data tree Wireshark uses to display packet.
12083
 *@param offset pointer to offset from caller
12084
 */
12085
static void
12086
dissect_zcl_daily_schedule_publish_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12087
0
{
12088
0
    int length;
12089
12090
    /* Provider Id */
12091
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12092
0
    *offset += 4;
12093
12094
    /* Issuer Event ID */
12095
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12096
0
    *offset += 4;
12097
12098
    /* Schedule ID */
12099
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12100
0
    *offset += 4;
12101
12102
    /* Start Time */
12103
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
12104
0
    *offset += 4;
12105
12106
    /* Schedule Type */
12107
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12108
0
    *offset += 1;
12109
12110
    /* Schedule Time Reference */
12111
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_time_reference, tvb, *offset, 1, ENC_NA);
12112
0
    *offset += 1;
12113
12114
    /* Schedule Name */
12115
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_daily_schedule_name, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &length);
12116
0
    *offset += length;
12117
0
} /*dissect_zcl_daily_schedule_publish_schedule*/
12118
12119
/**
12120
 *This function manages the Publish Day Profile payload
12121
 *
12122
 *@param tvb pointer to buffer containing raw packet.
12123
 *@param tree pointer to data tree Wireshark uses to display packet.
12124
 *@param offset pointer to offset from caller
12125
 */
12126
static void
12127
dissect_zcl_daily_schedule_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12128
0
{
12129
0
    uint8_t  schedule_entries_count;
12130
0
    uint8_t  calendar_type;
12131
12132
    /* Provider Id */
12133
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12134
0
    *offset += 4;
12135
12136
    /* Issuer Event ID */
12137
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12138
0
    *offset += 4;
12139
12140
    /* Issuer Calendar ID */
12141
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12142
0
    *offset += 4;
12143
12144
    /* Total Number of Schedule Entries */
12145
0
    schedule_entries_count = tvb_get_uint8(tvb, *offset);
12146
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries, tvb, *offset, 1, ENC_NA);
12147
0
    *offset += 1;
12148
12149
    /* Command Index */
12150
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_command_index, tvb, *offset, 1, ENC_NA);
12151
0
    *offset += 1;
12152
12153
    /* Number of Schedules */
12154
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_number_of_schedules, tvb, *offset, 1, ENC_NA);
12155
0
    *offset += 1;
12156
12157
    /* Calendar Type */
12158
0
    calendar_type = tvb_get_uint8(tvb, *offset);
12159
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12160
0
    *offset += 1;
12161
12162
0
    for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 4 && i < schedule_entries_count; i++) {
12163
        /* Start Time */
12164
0
        proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_start_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
12165
0
        *offset += 2;
12166
12167
0
        switch (calendar_type) {
12168
            /* Rate Start Time */
12169
0
            case ZBEE_ZCL_SCHEDULE_TYPE_LINKY_SCHEDULE:
12170
                /* Price Tier */
12171
0
                proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_price_tier, tvb, *offset, 1, ENC_NA);
12172
0
                *offset += 1;
12173
                /* Auxiliary Load Switch State */
12174
0
                proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state, tvb, *offset, 1, ENC_NA);
12175
0
                *offset += 1;
12176
0
                break;
12177
0
        }
12178
0
    }
12179
0
} /*dissect_zcl_daily_schedule_publish_day_profile*/
12180
12181
/**
12182
 *This function manages the Cancel Calendar payload
12183
 *
12184
 *@param tvb pointer to buffer containing raw packet.
12185
 *@param tree pointer to data tree Wireshark uses to display packet.
12186
 *@param offset pointer to offset from caller
12187
 */
12188
static void
12189
dissect_zcl_daily_schedule_cancel_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12190
0
{
12191
    /* Provider Id */
12192
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12193
0
    *offset += 4;
12194
12195
    /* Issuer Calendar ID */
12196
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12197
0
    *offset += 4;
12198
12199
    /* Schedule Type */
12200
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12201
0
    *offset += 1;
12202
0
} /*dissect_zcl_calendar_cancel*/
12203
12204
/**
12205
 *This function manages the Get Calendar payload
12206
 *
12207
 *@param tvb pointer to buffer containing raw packet.
12208
 *@param tree pointer to data tree Wireshark uses to display packet.
12209
 *@param offset pointer to offset from caller
12210
 */
12211
static void
12212
dissect_zcl_daily_schedule_get_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12213
0
{
12214
    /* Provider Id */
12215
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12216
0
    *offset += 4;
12217
12218
    /* Earliest Start Time */
12219
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
12220
0
    *offset += 4;
12221
12222
    /* Min Issuer Event ID */
12223
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12224
0
    *offset += 4;
12225
12226
    /* Number of Schedules */
12227
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_number_of_schedules, tvb, *offset, 1, ENC_NA);
12228
0
    *offset += 1;
12229
12230
    /* Schedule Type */
12231
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12232
0
    *offset += 1;
12233
0
} /*dissect_zcl_daily_schedule_get_schedule*/
12234
12235
/**
12236
 *This function manages the Get Day Profiles payload
12237
 *
12238
 *@param tvb pointer to buffer containing raw packet.
12239
 *@param tree pointer to data tree Wireshark uses to display packet.
12240
 *@param offset pointer to offset from caller
12241
 */
12242
static void
12243
dissect_zcl_daily_schedule_get_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12244
0
{
12245
    /* Provider Id */
12246
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12247
0
    *offset += 4;
12248
12249
    /* Schedule ID */
12250
0
    proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12251
0
    *offset += 4;
12252
0
} /*dissect_zcl_daily_schedule_get_day_profile*/
12253
12254
/**
12255
 *This function is called by ZCL foundation dissector in order to decode
12256
 *
12257
 *@param tree pointer to data tree Wireshark uses to display packet.
12258
 *@param tvb pointer to buffer containing raw packet.
12259
 *@param offset pointer to buffer offset
12260
 *@param attr_id attribute identifier
12261
 *@param data_type attribute data type
12262
 */
12263
static void
12264
dissect_zcl_daily_schedule_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
12265
72
{
12266
72
    (void)attr_id;
12267
    /* Catch all */
12268
72
    dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
12269
72
} /*dissect_zcl_daily_schedule_attr_data*/
12270
12271
/**
12272
 *This function registers the ZCL Calendar dissector
12273
 *
12274
*/
12275
void
12276
proto_register_zbee_zcl_daily_schedule(void)
12277
15
{
12278
15
    static hf_register_info hf[] = {
12279
12280
15
        { &hf_zbee_zcl_daily_schedule_attr_server_id,
12281
15
            { "Attribute", "zbee_zcl_se.daily_schedule.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_daily_schedule_attr_names),
12282
15
            0x0, NULL, HFILL } },
12283
12284
15
        { &hf_zbee_zcl_daily_schedule_srv_tx_cmd_id,
12285
15
            { "Command", "zbee_zcl_se.daily_schedule.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_srv_tx_cmd_names),
12286
15
            0x00, NULL, HFILL } },
12287
12288
15
        { &hf_zbee_zcl_daily_schedule_srv_rx_cmd_id,
12289
15
            { "Command", "zbee_zcl_se.daily_schedule.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_srv_rx_cmd_names),
12290
15
            0x00, NULL, HFILL } },
12291
12292
15
        { &hf_zbee_zcl_daily_schedule_type,
12293
15
          { "Schedule Type", "zbee_zcl_se.daily_schedule.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_type_names),
12294
15
            0x00, NULL, HFILL } },
12295
12296
15
        { &hf_zbee_zcl_daily_schedule_start_time,
12297
15
            { "Start Time", "zbee_zcl_se.daily_schedule.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
12298
15
            0x00, NULL, HFILL } },
12299
12300
15
        { &hf_zbee_zcl_daily_schedule_earliest_start_time,
12301
15
            { "Earliest Start Time", "zbee_zcl_se.daily_schedule.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
12302
15
            0x00, NULL, HFILL } },
12303
12304
15
        { &hf_zbee_zcl_daily_schedule_time_reference,
12305
15
          { "Schedule Time Reference", "zbee_zcl_se.daily_schedule.time_reference", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_time_reference_names),
12306
15
            0x00, NULL, HFILL } },
12307
12308
15
        { &hf_zbee_zcl_daily_schedule_name,
12309
15
            { "Schedule Name", "zbee_zcl_se.daily_schedule.name", FT_UINT_STRING, BASE_NONE, NULL,
12310
15
            0x00, NULL, HFILL } },
12311
12312
15
        { &hf_zbee_zcl_daily_schedule_command_index,
12313
15
            { "Command Index", "zbee_zcl_se.daily_schedule.command_index", FT_UINT8, BASE_DEC, NULL,
12314
15
            0x00, NULL, HFILL } },
12315
12316
15
        { &hf_zbee_zcl_daily_schedule_provider_id,
12317
15
            { "Provider ID", "zbee_zcl_se.daily_schedule.provider_id", FT_UINT32, BASE_DEC, NULL,
12318
15
            0x00, NULL, HFILL } },
12319
12320
15
        { &hf_zbee_zcl_daily_schedule_issuer_event_id,
12321
15
            { "Issuer Event ID", "zbee_zcl_se.daily_schedule.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
12322
15
            0x00, NULL, HFILL } },
12323
12324
15
        { &hf_zbee_zcl_daily_schedule_min_issuer_event_id,
12325
15
            { "Min. Issuer Event ID", "zbee_zcl_se.daily_schedule.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
12326
15
            0x00, NULL, HFILL } },
12327
12328
15
        { &hf_zbee_zcl_daily_schedule_id,
12329
15
            { "Schedule ID", "zbee_zcl_se.daily_schedule.id", FT_UINT32, BASE_DEC, NULL,
12330
15
            0x00, NULL, HFILL } },
12331
12332
15
        { &hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries,
12333
15
            { "Total Number of Schedule Entries", "zbee_zcl_se.daily_schedule.total_number_of_schedule_entries", FT_UINT8, BASE_DEC, NULL,
12334
15
            0x00, NULL, HFILL } },
12335
12336
15
        { &hf_zbee_zcl_daily_schedule_number_of_schedules,
12337
15
            { "Number of Schedules", "zbee_zcl_se.daily_schedule.number_of_schedules", FT_UINT8, BASE_DEC, NULL,
12338
15
            0x00, NULL, HFILL } },
12339
12340
15
        { &hf_zbee_zcl_daily_schedule_schedule_entry_start_time,
12341
15
            { "Start Time", "zbee_zcl_se.daily_schedule.schedule_entry.start_time", FT_UINT16, BASE_DEC, NULL,
12342
15
            0x00, NULL, HFILL } },
12343
12344
15
        { &hf_zbee_zcl_daily_schedule_schedule_entry_price_tier,
12345
15
            { "Price Tier", "zbee_zcl_se.daily_schedule.schedule_entry.price_tier", FT_UINT8, BASE_DEC, NULL,
12346
15
            0x00, NULL, HFILL } },
12347
12348
15
        { &hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state,
12349
15
            { "Auxiliary Load Switch State", "zbee_zcl_se.daily_schedule.schedule_entry.auxiliary_load_switch_state", FT_UINT8, BASE_HEX, NULL,
12350
15
            0x00, NULL, HFILL } },
12351
12352
15
    };
12353
12354
    /* ZCL Daily Schedule subtrees */
12355
15
    int *ett[] = {
12356
15
        &ett_zbee_zcl_daily_schedule,
12357
15
    };
12358
12359
    /* Register the ZigBee ZCL Calendar cluster protocol name and description */
12360
15
    proto_zbee_zcl_daily_schedule = proto_register_protocol("ZigBee ZCL Daily Schedule", "ZCL Daily Schedule", ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE);
12361
15
    proto_register_field_array(proto_zbee_zcl_daily_schedule, hf, array_length(hf));
12362
15
    proto_register_subtree_array(ett, array_length(ett));
12363
12364
    /* Register the ZigBee ZCL Daily Schedule dissector. */
12365
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE, dissect_zbee_zcl_daily_schedule, proto_zbee_zcl_daily_schedule);
12366
15
} /*proto_register_zbee_zcl_calendar*/
12367
12368
void
12369
proto_reg_handoff_zbee_zcl_daily_schedule(void)
12370
15
{
12371
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE,
12372
15
                            proto_zbee_zcl_daily_schedule,
12373
15
                            ett_zbee_zcl_daily_schedule,
12374
15
                            ZBEE_ZCL_CID_DAILY_SCHEDULE,
12375
15
                            ZBEE_MFG_CODE_NONE,
12376
15
                            hf_zbee_zcl_daily_schedule_attr_server_id,
12377
15
                            -1,
12378
15
                            hf_zbee_zcl_daily_schedule_srv_rx_cmd_id,
12379
15
                            hf_zbee_zcl_daily_schedule_srv_tx_cmd_id,
12380
15
                            dissect_zcl_daily_schedule_attr_data
12381
15
                         );
12382
15
} /*proto_reg_handoff_zbee_zcl_daily_schedule*/
12383
12384
12385
/* ########################################################################## */
12386
/* #### (0x0708) DEVICE_MANAGEMENT CLUSTER ############################################## */
12387
/* ########################################################################## */
12388
12389
/* Attributes */
12390
#define zbee_zcl_device_management_attr_server_names_VALUE_STRING_LIST(XXX) \
12391
/* Supplier Control Attribute Set */ \
12392
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_ID,                                 0x0100, "Provider ID" ) \
12393
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_NAME,                               0x0101, "Provider Name" ) \
12394
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_CONTACT_DETAILS,                    0x0102, "Provider Contact Details" ) \
12395
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_ID,                        0x0110, "Proposed Provider ID" ) \
12396
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_NAME,                      0x0111, "Proposed Provider Name" ) \
12397
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CHANGE_DATE_TIME,          0x0112, "Proposed Provider Change Date/Time" ) \
12398
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CHANGE_CONTROL,            0x0113, "Proposed Provider Change Control" ) \
12399
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CONTACT_DETAILS,           0x0114, "Proposed Provider Contact Details" ) \
12400
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_ID,                        0x0120, "Received Provider ID" ) \
12401
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_NAME,                      0x0121, "Received Provider Name" ) \
12402
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_CONTACT_DETAILS,           0x0122, "Received Provider Contact Details" ) \
12403
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_ID,               0x0130, "Received Proposed Provider ID" ) \
12404
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_NAME,             0x0131, "Received Proposed Provider Name" ) \
12405
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CHANGE_DATE_TIME, 0x0132, "Received Proposed Provider Change Date/Time" ) \
12406
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CHANGE_CONTROL,   0x0133, "Received Proposed Provider Change Control" ) \
12407
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CONTACT_DETAILS,  0x0134, "Received Proposed Provider Contact Details" ) \
12408
  /* Tenancy Control Attribute Set */ \
12409
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CHANGE_OF_TENANCY_UPDATE_DATE_TIME,          0x0200, "Change of Tenancy Update Date/Time" ) \
12410
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_TENANCY_CHANGE_CONTROL,             0x0201, "Proposed Tenancy Change control" ) \
12411
/* Backhaul Control Attribute Set */ \
12412
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_WAN_STATUS,                                  0x0300, "WAN Status" ) \
12413
/* HAN Control Attribute Set */ \
12414
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_LOW_MEDIUM_THRESHOLD,                        0x0400, "Low Medium Threshold" ) \
12415
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_MEDIUM_HIGH_THRESHOLD,                       0x0401, "Medium High Threshold" ) \
12416
/* Add client attribute sets */ \
12417
/* Smart Energy */ \
12418
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT,                       0xFFFE, "Attribute Reporting Status" )
12419
12420
VALUE_STRING_ENUM(zbee_zcl_device_management_attr_server_names);
12421
VALUE_STRING_ARRAY(zbee_zcl_device_management_attr_server_names);
12422
12423
#define zbee_zcl_device_management_attr_client_names_VALUE_STRING_LIST(XXX) \
12424
/* Supplier Attribute Set */ \
12425
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROVIDER_ID,                            0x0000, "Provider ID" ) \
12426
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RECEIVED_PROVIDER_ID,                   0x0010, "Received Provider ID" ) \
12427
/* Price Event Configuration Attribute Set */ \
12428
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOU_TARIFF_ACTIVATION,                  0x0100, "TOU Tariff Activation" ) \
12429
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BLOCK_TARIFF_ACTIVATED,                 0x0101, "Block Tariff Activated" ) \
12430
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BLOCK_TOU_TARIFF_ACTIVATED,             0x0102, "Block TOU Tariff Activated" ) \
12431
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SINGLE_TARIFF_RATE_ACTIVATED,           0x0103, "Single Tariff Rate Activated" ) \
12432
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ASYNCHRONOUS_BILLING_OCCURRED,          0x0104, "Asynchronous Billing Occurred" ) \
12433
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SYNCHRONOUS_BILLING_OCCURRED,           0x0105, "Synchronous Billing Occurred" ) \
12434
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_NOT_SUPPORTED,                   0x0106, "Tariff Not Supported" ) \
12435
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_CLUSTER_NOT_FOUND,                0x0107, "Price Cluster Not Found" ) \
12436
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENCY_CHANGE_PASSIVE_ACTIVATED,      0x0108, "Currency Change Passive Activated" ) \
12437
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENCY_CHANGE_PASSIVE_UPDATED,        0x0109, "Currency Change Passive Updated" ) \
12438
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_MATRIX_PASSIVE_ACTIVATED,         0x010A, "Price Matrix Passive Activated" ) \
12439
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_MATRIX_PASSIVE_UPDATED,           0x010B, "Price Matrix Passive Updated" ) \
12440
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_CHANGE_PASSIVE_ACTIVATED,        0x010C, "Tariff Change Passive Activated" ) \
12441
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_CHANGED_PASSIVE_UPDATED,         0x010D, "Tariff Changed Passive Updated" ) \
12442
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_RECEIVED,                 0x01B0, "Publish Price Received" ) \
12443
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_ACTIONED,                 0x01B1, "Publish Price Actioned" ) \
12444
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_CANCELLED,                0x01B2, "Publish Price Cancelled" ) \
12445
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_REJECTED,                 0x01B3, "Publish Price Rejected" ) \
12446
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_RECEIVED,    0x01B4, "Publish Tariff Information Received" ) \
12447
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_ACTIONED,    0x01B5, "Publish Tariff Information Actioned" ) \
12448
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_CANCELLED,   0x01B6, "Publish Tariff Information Cancelled" ) \
12449
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_REJECTED,    0x01B7, "Publish Tariff Information Rejected" ) \
12450
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_RECEIVED,          0x01B8, "Publish Price Matrix Received" ) \
12451
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_ACTIONED,          0x01B9, "Publish Price Matrix Actioned" ) \
12452
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_CANCELLED,         0x01BA, "Publish Price Matrix Cancelled" ) \
12453
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_REJECTED,          0x01BB, "Publish Price Matrix Rejected" ) \
12454
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_RECEIVED,      0x01BC, "Publish Block Thresholds Received" ) \
12455
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_ACTIONED,      0x01BD, "Publish Block Thresholds Actioned" ) \
12456
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_CANCELLED,     0x01BE, "Publish Block Thresholds Cancelled" ) \
12457
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_REJECTED,      0x01BF, "Publish Block Thresholds Rejected" ) \
12458
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_RECEIVED,       0x01C0, "Publish Calorific Value Received" ) \
12459
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_ACTIONED,       0x01C1, "Publish Calorific Value Actioned" ) \
12460
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_CANCELLED,      0x01C2, "Publish Calorific Value Cancelled" ) \
12461
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_REJECTED,       0x01C3, "Publish Calorific Value Rejected" ) \
12462
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_RECEIVED,     0x01C4, "Publish Conversion Factor Received" ) \
12463
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_ACTIONED,     0x01C5, "Publish Conversion Factor Actioned" ) \
12464
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_CANCELLED,    0x01C6, "Publish Conversion Factor Cancelled" ) \
12465
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_REJECTED,     0x01C7, "Publish Conversion Factor Rejected" ) \
12466
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_RECEIVED,             0x01C8, "Publish CO2 Value Received" ) \
12467
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_ACTIONED,             0x01C9, "Publish CO2 Value Actioned" ) \
12468
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_CANCELLED,            0x01CA, "Publish CO2 Value Cancelled" ) \
12469
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_REJECTED,             0x01CB, "Publish CO2 Value Rejected" ) \
12470
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_RECEIVED,             0x01CC, "Publish CPP event Received" ) \
12471
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_ACTIONED,             0x01CD, "Publish CPP event Actioned" ) \
12472
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_CANCELLED,            0x01CE, "Publish CPP event Cancelled" ) \
12473
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_REJECTED,             0x01CF, "Publish CPP event Rejected" ) \
12474
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_RECEIVED,           0x01D0, "Publish Tier Labels Received" ) \
12475
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_ACTIONED,           0x01D1, "Publish Tier Labels Actioned" ) \
12476
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_CANCELLED,          0x01D2, "Publish Tier Labels Cancelled" ) \
12477
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_REJECTED,           0x01D3, "Publish Tier Labels Rejected" ) \
12478
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_RECEIVED,        0x01D4, "Publish Billing Period Received" ) \
12479
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_ACTIONED,        0x01D5, "Publish Billing Period Actioned" ) \
12480
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_CANCELLED,       0x01D6, "Publish Billing Period Cancelled" ) \
12481
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_REJECTED,        0x01D7, "Publish Billing Period Rejected" ) \
12482
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_RECEIVED,     0x01D8, "Publish Consolidated Bill Received" ) \
12483
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_ACTIONED,     0x01D9, "Publish Consolidated Bill Actioned" ) \
12484
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_CANCELLED,    0x01DA, "Publish Consolidated Bill Cancelled" ) \
12485
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_REJECTED,     0x01DB, "Publish Consolidated Bill Rejected" ) \
12486
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_RECEIVED,          0x01DC, "Publish Block Period Received" ) \
12487
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_ACTIONED,          0x01DD, "Publish Block Period Actioned" ) \
12488
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_CANCELLED,         0x01DE, "Publish Block Period Cancelled" ) \
12489
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_REJECTED,          0x01DF, "Publish Block Period Rejected" ) \
12490
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_RECEIVED,   0x01E0, "Publish Credit Payment Info Received" ) \
12491
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_ACTIONED,   0x01E1, "Publish Credit Payment Info Actioned" ) \
12492
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_CANCELLED,  0x01E2, "Publish Credit Payment Info Cancelled" ) \
12493
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_REJECTED,   0x01E3, "Publish Credit Payment Info Rejected" ) \
12494
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_RECEIVED,   0x01E4, "Publish Currency Conversion Received" ) \
12495
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_ACTIONED,   0x01E5, "Publish Currency Conversion Actioned" ) \
12496
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_CANCELLED,  0x01E6, "Publish Currency Conversion Cancelled" ) \
12497
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_REJECTED,   0x01E7, "Publish Currency Conversion Rejected" ) \
12498
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_PRICE_CLUSTER_GROUP_ID,    0x01FF, "Reserved for Price Cluster Group ID" ) \
12499
/* Metering Event Configuration Attribute Set */ \
12500
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHECK_METER,                            0x0200, "Check Meter" ) \
12501
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_BATTERY,                            0x0201, "Low Battery" ) \
12502
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAMPER_DETECT,                          0x0202, "Tamper Detect" ) \
12503
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_STATUS,                          0x0203, "Supply Status" ) \
12504
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_QUALITY,                         0x0204, "Supply Quality" ) \
12505
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LEAK_DETECT,                            0x0205, "Leak Detect" ) \
12506
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SERVICE_DISCONNECT,                     0x0206, "Service Disconnect" ) \
12507
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METERING_REVERSE_FLOW_GAS_WATER_HEAT,   0x0207, "Reverse Flow (Gas, Water, Heat/Cooling)" ) \
12508
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_COVER_REMOVED,                    0x0208, "Meter Cover Removed" ) \
12509
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_COVER_CLOSED,                     0x0209, "Meter Cover Closed" ) \
12510
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STRONG_MAGNETIC_FIELD,                  0x020A, "Strong Magnetic Field" ) \
12511
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_STRONG_MAGNETIC_FIELD,               0x020B, "No Strong Magnetic Field" ) \
12512
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_FAILURE,                        0x020C, "Battery Failure" ) \
12513
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROGRAM_MEMORY_ERROR,                   0x020D, "Program Memory Error" ) \
12514
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RAM_ERROR,                              0x020E, "RAM Error" ) \
12515
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NV_MEMORY_ERROR,                        0x020F, "NV Memory Error" ) \
12516
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L1,                         0x0210, "Low Voltage L1" ) \
12517
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L1,                        0x0211, "High Voltage L1" ) \
12518
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L2,                         0x0212, "Low Voltage L2" ) \
12519
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L2,                        0x0213, "High Voltage L2" ) \
12520
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L3,                         0x0214, "Low Voltage L3" ) \
12521
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L3,                        0x0215, "High Voltage L3" ) \
12522
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L1,                        0x0216, "Over Current L1" ) \
12523
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L2,                        0x0217, "Over Current L2" ) \
12524
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L3,                        0x0218, "Over Current L3" ) \
12525
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L1,                   0x0219, "Frequency too Low L1" ) \
12526
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L1,                  0x021A, "Frequency too High L1" ) \
12527
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L2,                   0x021B, "Frequency too Low L2" ) \
12528
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L2,                  0x021C, "Frequency too High L2" ) \
12529
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L3,                   0x021D, "Frequency too Low L3" ) \
12530
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L3,                  0x021E, "Frequency too High L3" ) \
12531
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GROUND_FAULT,                           0x021F, "Ground Fault" ) \
12532
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ELECTRIC_TAMPER_DETECT,                 0x0220, "Electric Tamper Detect" ) \
12533
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INCORRECT_POLARITY,                     0x0221, "Incorrect Polarity" ) \
12534
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENT_NO_VOLTAGE,                     0x0222, "Current No Voltage" ) \
12535
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNDER_VOLTAGE,                          0x0223, "Under Voltage" ) \
12536
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_VOLTAGE,                           0x0224, "Over Voltage" ) \
12537
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NORMAL_VOLTAGE,                         0x0225, "Normal Voltage" ) \
12538
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PF_BELOW_THRESHOLD,                     0x0226, "PF Below Threshold" ) \
12539
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PF_ABOVE_THRESHOLD,                     0x0227, "PF Above Threshold" ) \
12540
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TERMINAL_COVER_REMOVED,                 0x0228, "Terminal Cover Removed" ) \
12541
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TERMINAL_COVER_CLOSED,                  0x0229, "Terminal Cover Closed" ) \
12542
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BURST_DETECT,                           0x0230, "Burst Detect" ) \
12543
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRESSURE_TOO_LOW,                       0x0231, "Pressure too Low" ) \
12544
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRESSURE_TOO_HIGH,                      0x0232, "Pressure too High" ) \
12545
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_COMMUNICATION_ERROR,        0x0233, "Flow Sensor Communication Error" ) \
12546
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_MEASUREMENT_FAULT,          0x0234, "Flow Sensor Measurement Fault" ) \
12547
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_REVERSE_FLOW,               0x0235, "Flow Sensor Reverse Flow" ) \
12548
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_AIR_DETECT,                 0x0236, "Flow Sensor Air Detect" ) \
12549
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PIPE_EMPTY,                             0x0237, "Pipe Empty" ) \
12550
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INLET_TEMPERATURE_SENSOR_FAULT,         0x0250, "Inlet Temperature Sensor Fault" ) \
12551
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OUTLET_TEMPERATURE_SENSOR_FAULT,        0x0251, "Outlet Temperature Sensor Fault" ) \
12552
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REVERSE_FLOW,                           0x0260, "Reverse Flow" ) \
12553
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TILT_TAMPER,                            0x0261, "Tilt Tamper" ) \
12554
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_COVER_REMOVED,                  0x0262, "Battery Cover Removed" ) \
12555
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_COVER_CLOSED,                   0x0263, "Battery Cover Closed" ) \
12556
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EXCESS_FLOW,                            0x0264, "Excess Flow" ) \
12557
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TILT_TAMPER_ENDED,                      0x0265, "Tilt Tamper Ended" ) \
12558
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MEASUREMENT_SYSTEM_ERROR,               0x0270, "Measurement System Error" ) \
12559
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_WATCHDOG_ERROR,                         0x0271, "Watchdog Error" ) \
12560
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_DISCONNECT_FAILURE,              0x0272, "Supply Disconnect Failure" ) \
12561
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_CONNECT_FAILURE,                 0x0273, "Supply Connect Failure" ) \
12562
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MEASUREMENT_SOFTWARE_CHANGED,           0x0274, "Measurement Software Changed" ) \
12563
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DST_ENABLED,                            0x0275, "DST Enabled" ) \
12564
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DST_DISABLED,                           0x0276, "DST Disabled" ) \
12565
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_ADJUST_BACKWARD,                  0x0277, "Clock Adjust Backward" ) \
12566
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_ADJUST_FORWARD,                   0x0278, "Clock Adjust Forward" ) \
12567
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_INVALID,                          0x0279, "Clock Invalid" ) \
12568
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMUNICATION_ERROR_HAN,                0x027A, "Communication Error HAN" ) \
12569
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMUNICATION_OK_HAN,                   0x027B, "Communication OK HAN" ) \
12570
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_FRAUD_ATTEMPT,                    0x027C, "Meter Fraud Attempt" ) \
12571
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_POWER_LOSS,                             0x027D, "Power Loss" ) \
12572
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNUSUAL_HAN_TRAFFIC,                    0x027E, "Unusual HAN Traffic" ) \
12573
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_CLOCK_CHANGE,                0x027F, "Unexpected Clock Change" ) \
12574
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMS_USING_UNAUTHENTICATED_COMPONENT,  0x0280, "Comms Using Unauthenticated Component" ) \
12575
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MET_ERROR_REGISTER_CLEAR,               0x0281, "Metering Error Register Clear" ) \
12576
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MET_ALARM_REGISTER_CLEAR,               0x0282, "Metering Alarm Register Clear" ) \
12577
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_HW_RESET,                    0x0283, "Unexpected HW Reset" ) \
12578
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_PROGRAM_EXECUTION,           0x0284, "Unexpected Program Execution" ) \
12579
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_EXCEEDED,               0x0285, "Limit Threshold Exceeded" ) \
12580
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_OK,                     0x0286, "Limit Threshold OK" ) \
12581
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_CHANGED,                0x0287, "Limit Threshold Changed" ) \
12582
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MAXIMUM_DEMAND_EXCEEDED,                0x0288, "Maximum Demand Exceeded" ) \
12583
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROFILE_CLEARED,                        0x0289, "Profile Cleared" ) \
12584
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOAD_PROFILE_CLEARED,                   0x028A, "Load Profile Cleared" ) \
12585
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_WARNING,                        0x028B, "Battery Warning" ) \
12586
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_WRONG_SIGNATURE,                        0x028C, "Wrong Signature" ) \
12587
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_SIGNATURE,                           0x028D, "No Signature" ) \
12588
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SIGNATURE_NOT_VALID,                    0x028E, "Signature Not Valid" ) \
12589
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNAUTHORISED_ACTION_FROM_HAN,           0x028F, "Unauthorized Action From HAN" ) \
12590
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FAST_POLLING_START,                     0x0290, "Fast Polling Start" ) \
12591
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FAST_POLLING_END,                       0x0291, "Fast Polling End" ) \
12592
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_REPORTING_INTERVAL_CHANGED,       0x0292, "Meter Reporting Interval Changed" ) \
12593
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCONNECT_TO_LOAD_LIMIT,               0x0293, "Disconnect to Load Limit" ) \
12594
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_SUPPLY_STATUS_REGISTER_CHANGED,   0x0294, "Meter Supply Status Register Changed" ) \
12595
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_ALARM_STATUS_REGISTER_CHANGED,    0x0295, "Meter Alarm Status Register Changed" ) \
12596
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EXTENDED_METER_ALARM_STATUS_REG_CHANGED,0x0296, "Extended Meter Alarm Status Register Changed." ) \
12597
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DATA_ACCESS_VIA_LOCAL_PORT,             0x0297, "Data Access Via Local Port" ) \
12598
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_MIRROR_SUCCESS,               0x0298, "Configure Mirror Success" ) \
12599
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_MIRROR_FAILURE,               0x0299, "Configure Mirror Failure" ) \
12600
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAG_SCHEME_SUCC,0x029A, "Configure Notification Flag Scheme Success" ) \
12601
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAG_SCHEME_FAIL,0x029B, "Configure Notification Flag Scheme Failure" ) \
12602
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAGS_SUCCESS,   0x029C, "Configure Notification Flags Success" ) \
12603
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAGS_FAILURE,   0x029D, "Configure Notification Flags Failure" ) \
12604
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STAY_AWAKE_REQUEST_HAN,                 0x029E, "Stay Awake Request HAN" ) \
12605
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STAY_AWAKE_REQUEST_WAN,                 0x029F, "Stay Awake Request WAN" ) \
12606
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_A,                0x02B0, "Manufacturer Specific A" ) \
12607
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_B,                0x02B1, "Manufacturer Specific B" ) \
12608
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_C,                0x02B2, "Manufacturer Specific C" ) \
12609
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_D,                0x02B3, "Manufacturer Specific D" ) \
12610
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_E,                0x02B4, "Manufacturer Specific E" ) \
12611
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_F,                0x02B5, "Manufacturer Specific F" ) \
12612
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_G,                0x02B6, "Manufacturer Specific G" ) \
12613
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_H,                0x02B7, "Manufacturer Specific H" ) \
12614
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_I,                0x02B8, "Manufacturer Specific I" ) \
12615
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_RECEIVED,           0x02C0, "Get Profile Command Received" ) \
12616
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_ACTIONED,           0x02C1, "Get Profile Command Actioned" ) \
12617
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_CANCELLED,          0x02C2, "Get Profile Command Cancelled" ) \
12618
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_REJECTED,           0x02C3, "Get Profile Command Rejected" ) \
12619
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_RECV,   0x02C4, "Request Mirror Response Command Received" ) \
12620
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_ACTION, 0x02C5, "Request Mirror Response Command Actioned" ) \
12621
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_CANCEL, 0x02C6, "Request Mirror Response Command Cancelled" ) \
12622
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_REJECT, 0x02C7, "Request Mirror Response Command Rejected" ) \
12623
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_RECEIVED,        0x02C8, "Mirror Removed Command Received" ) \
12624
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_ACTIONED,        0x02C9, "Mirror Removed Command Actioned" ) \
12625
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_CANCELLED,       0x02CA, "Mirror Removed Command Cancelled" ) \
12626
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_REJECTED,        0x02CB, "Mirror Removed Command Rejected" ) \
12627
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_RECEIVED,          0x02CC, "Get Snapshot Command Received" ) \
12628
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_ACTIONED,          0x02CD, "Get Snapshot Command Actioned" ) \
12629
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_CANCELLED,         0x02CE, "Get Snapshot Command Cancelled" ) \
12630
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_REJECTED,          0x02CF, "Get Snapshot Command Rejected" ) \
12631
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_RECEIVED,         0x02D0, "Take Snapshot Command Received" ) \
12632
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_ACTIONED,         0x02D1, "Take Snapshot Command Actioned" ) \
12633
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_CANCELLED,        0x02D2, "Take Snapshot Command Cancelled" ) \
12634
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_REJECTED,         0x02D3, "Take Snapshot Command Rejected" ) \
12635
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_RECV,   0x02D4, "Mirror Report Attribute Response Command Received" ) \
12636
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_ACTION, 0x02D5, "Mirror Report Attribute Response Command Actioned" ) \
12637
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_CANCEL, 0x02D6, "Mirror Report Attribute Response Command Cancelled" ) \
12638
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_REJECT, 0x02D7, "Mirror Report Attribute Response Command Rejected" ) \
12639
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_RECEIVED,     0x02D8, "Schedule Snapshot Command Received" ) \
12640
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_ACTIONED,     0x02D9, "Schedule Snapshot Command Actioned" ) \
12641
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_CANCELLED,    0x02DA, "Schedule Snapshot Command Cancelled" ) \
12642
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_REJECTED,     0x02DB, "Schedule Snapshot Command Rejected" ) \
12643
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_RECEIVED,        0x02DC, "Start Sampling Command Received" ) \
12644
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_ACTIONED,        0x02DD, "Start Sampling Command Actioned" ) \
12645
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_CANCELLED,       0x02DE, "Start Sampling Command Cancelled" ) \
12646
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_REJECTED,        0x02DF, "Start Sampling Command Rejected" ) \
12647
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_RECEIVED,      0x02E0, "Get Sampled Data Command Received" ) \
12648
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_ACTIONED,      0x02E1, "Get Sampled Data Command Actioned" ) \
12649
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_CANCELLED,     0x02E2, "Get Sampled Data Command Cancelled" ) \
12650
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_REJECTED,      0x02E3, "Get Sampled Data Command Rejected" ) \
12651
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_ON,                              0x02E4, "Supply On" ) \
12652
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_ARMED,                           0x02E5, "Supply Armed" ) \
12653
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_OFF,                             0x02E6, "Supply Off" ) \
12654
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCONNECTED_DUE_TO_TAMPER_DETECTED,    0x02E7, "Disconnected due to Tamper Detected" ) \
12655
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUAL_DISCONNECT,                      0x02E8, "Manual Disconnect" ) \
12656
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUAL_CONNECT,                         0x02E9, "Manual Connect" ) \
12657
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REMOTE_DISCONNECTION,                   0x02EA, "Remote Disconnection" ) \
12658
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REMOTE_CONNECT,                         0x02EB, "Remote Connect" ) \
12659
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_DISCONNECTION,                    0x02EC, "Local Disconnection" ) \
12660
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CONNECT,                          0x02ED, "Local Connect" ) \
12661
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_RECEIVED,                 0x02EE, "Change Supply Received" ) \
12662
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_ACTIONED,                 0x02EF, "Change Supply Actioned" ) \
12663
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_CANCELLED,                0x02F0, "Change Supply Cancelled" ) \
12664
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_REJECTED,                 0x02F1, "Change Supply Rejected" ) \
12665
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_RECEIVED,           0x02F2, "Local Change Supply Received" ) \
12666
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_ACTIONED,           0x02F3, "Local Change Supply Actioned" ) \
12667
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_CANCELLED,          0x02F4, "Local Change Supply Cancelled" ) \
12668
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_REJECTED,           0x02F5, "Local Change Supply Rejected" ) \
12669
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_RECV,   0x02F6, "Publish Uncontrolled Flow Threshold Received" ) \
12670
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_ACTION, 0x02F7, "Publish Uncontrolled Flow Threshold Actioned" ) \
12671
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_CANCEL, 0x02F8, "Publish Uncontrolled Flow Threshold Cancelled" ) \
12672
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_REJECY, 0x02F9, "Publish Uncontrolled Flow Threshold Rejected" ) \
12673
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_METERING_CLUSTER_GROUP_ID, 0x02FF, "Reserved for Metering Cluster Group Id" ) \
12674
/* Messaging Event Configuration Attribute Set */ \
12675
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MESSAGE_CONFIRMATION_SENT,              0x0300, "Message Confirmation Sent" ) \
12676
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_RECEIVED,               0x03C0, "Display Message Received" ) \
12677
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_ACTIONED,               0x03C1, "Display Message Actioned" ) \
12678
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_CANCELLED,              0x03C2, "Display Message Cancelled" ) \
12679
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_REJECTED,               0x03C3, "Display Message Rejected" ) \
12680
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_RECEIVED,                0x03C4, "Cancel Message Received" ) \
12681
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_ACTIONED,                0x03C5, "Cancel Message Actioned" ) \
12682
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_CANCELLED,               0x03C6, "Cancel Message Cancelled" ) \
12683
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_REJECTED,                0x03C7, "Cancel Message Rejected" ) \
12684
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_MESSAGING_CLUSTER_GROUP_ID,0x03FF, "Reserved for Messaging Cluster Group ID" ) \
12685
/* Prepayment Event Configuration Attribute Set */ \
12686
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_CREDIT,                             0x0400, "Low Credit" ) \
12687
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_CREDIT_ZERO_CREDIT,                  0x0401, "No Credit (Zero Credit)" ) \
12688
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_EXHAUSTED,                       0x0402, "Credit Exhausted" ) \
12689
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_ENABLED,               0x0403, "Emergency Credit Enabled" ) \
12690
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_EXHAUSTED,             0x0404, "Emergency Credit Exhausted" ) \
12691
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IHD_LOW_CREDIT_WARNING,                 0x0405, "IHD Low Credit Warning" ) \
12692
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PHYSICAL_ATTACK_ON_THE_PREPAY_METER,    0x0420, "Physical Attack on the Prepay Meter" ) \
12693
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER,  0x0421, "Electronic Attack on the Prepay Meter" ) \
12694
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCOUNT_APPLIED,                       0x0422, "Discount Applied" ) \
12695
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT,                      0x0423, "Credit Adjustment" ) \
12696
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUST_FAIL,                     0x0424, "Credit Adjust Fail" ) \
12697
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DEBT_ADJUSTMENT,                        0x0425, "Debt Adjustment" ) \
12698
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DEBT_ADJUST_FAIL,                       0x0426, "Debt Adjust Fail" ) \
12699
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_CHANGE,                            0x0427, "Mode Change" ) \
12700
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_CODE_ERROR,                       0x0428, "Topup Code Error" ) \
12701
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ALREADY_USED,                     0x0429, "Topup Already Used" ) \
12702
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_CODE_INVALID,                     0x042A, "Topup Code Invalid" ) \
12703
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ACCEPTED_VIA_REMOTE,              0x042B, "Topup Accepted via Remote" ) \
12704
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ACCEPTED_VIA_MANUAL_ENTRY,        0x042C, "Topup Accepted via Manual Entry" ) \
12705
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_IN_USE,                 0x042D, "Friendly Credit in Use" ) \
12706
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_PERIOD_END_WARNING,     0x042E, "Friendly Credit Period End Warning" ) \
12707
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_PERIOD_END,             0x042F, "Friendly Credit Period End" ) \
12708
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PP_ERROR_REGISTER_CLEAR,                0x0430, "Prepayment Error Register Clear" ) \
12709
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PP_ALARM_REGISTER_CLEAR,                0x0431, "Prepayment Alarm Register Clear" ) \
12710
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PREPAY_CLUSTER_NOT_FOUND,               0x0432, "Prepay Cluster Not Found" ) \
12711
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_VALUE_TOO_LARGE,                  0x0433, "Topup Value too Large" ) \
12712
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_CREDIT_2_PREPAY,                   0x0441, "Mode Credit 2 Prepay" ) \
12713
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_PREPAY_2_CREDIT,                   0x0442, "Mode Prepay 2 Credit" ) \
12714
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_DEFAULT,                           0x0443, "Mode Default" ) \
12715
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_RECV,     0x04C0, "Select Available Emergency Credit Received" ) \
12716
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_ACTION,   0x04C1, "Select Available Emergency Credit Actioned" ) \
12717
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_CANCEL,   0x04C2, "Select Available Emergency Credit Cancelled" ) \
12718
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_REJECT,   0x04C3, "Select Available Emergency Credit Rejected" ) \
12719
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_RECEIVED,                   0x04C4, "Change Debt Received" ) \
12720
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_ACTIONED,                   0x04C5, "Change Debt Actioned" ) \
12721
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_CANCELLED,                  0x04C6, "Change Debt Cancelled" ) \
12722
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_REJECTED,                   0x04C7, "Change Debt Rejected" ) \
12723
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_RECEIVED,        0x04C8, "Emergency Credit Setup Received" ) \
12724
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_ACTIONED,        0x04C9, "Emergency Credit Setup Actioned" ) \
12725
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_CANCELLED,       0x04CA, "Emergency Credit Setup Cancelled" ) \
12726
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_REJECTED,        0x04CB, "Emergency Credit Setup Rejected" ) \
12727
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_RECEIVED,                0x04CC, "Consumer Topup Received" ) \
12728
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_ACTIONED,                0x04CD, "Consumer Topup Actioned" ) \
12729
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_CANCELLED,               0x04CE, "Consumer Topup Cancelled" ) \
12730
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_REJECTED,                0x04CF, "Consumer Topup Rejected" ) \
12731
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_RECEIVED,             0x04D0, "Credit Adjustment Received" ) \
12732
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_ACTIONED,             0x04D1, "Credit Adjustment Actioned" ) \
12733
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_CANCELLED,            0x04D2, "Credit Adjustment Cancelled" ) \
12734
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_REJECTED,             0x04D3, "Credit Adjustment Rejected" ) \
12735
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_RECEIVED,           0x04D4, "Change Payment Mode Received" ) \
12736
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_ACTIONED,           0x04D5, "Change Payment Mode Actioned" ) \
12737
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_CANCELLED,          0x04D6, "Change Payment Mode Cancelled" ) \
12738
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_REJECTED,           0x04D7, "Change Payment Mode Rejected" ) \
12739
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_RECEIVED,           0x04D8, "Get Prepay Snapshot Received" ) \
12740
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_ACTIONED,           0x04D9, "Get Prepay Snapshot Actioned" ) \
12741
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_CANCELLED,          0x04DA, "Get Prepay Snapshot Cancelled" ) \
12742
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_REJECTED,           0x04DB, "Get Prepay Snapshot Rejected" ) \
12743
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_RECEIVED,                 0x04DC, "Get Topup Log Received" ) \
12744
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_ACTIONED,                 0x04DD, "Get Topup Log Actioned" ) \
12745
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_CANCELLED,                0x04DE, "Get Topup Log Cancelled" ) \
12746
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_REJECTED,                 0x04DF, "Get Topup Log Rejected" ) \
12747
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_RECEIVED,  0x04E0, "Set Low Credit Warning Level Received" ) \
12748
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_ACTIONED,  0x04E1, "Set Low Credit Warning Level Actioned" ) \
12749
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_CANCELLED, 0x04E2, "Set Low Credit Warning Level Cancelled" ) \
12750
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_REJECTED,  0x04E3, "Set Low Credit Warning Level Rejected" ) \
12751
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_RECEIVED,            0x04E4, "Get Debt Repay Log Received" ) \
12752
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_ACTIONED,            0x04E5, "Get Debt Repay Log Actioned" ) \
12753
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_CANCELLED,           0x04E6, "Get Debt Repay Log Cancelled" ) \
12754
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_REJECTED,            0x04E7, "Get Debt Repay Log Rejected" ) \
12755
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_RECEIVED,      0x04E8, "Set Maximum Credit Limit Received" ) \
12756
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_ACTIONED,      0x04E9, "Set Maximum Credit Limit Actioned" ) \
12757
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_CANCELLED,     0x04EA, "Set Maximum Credit Limit Cancelled" ) \
12758
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_REJECTED,      0x04EB, "Set Maximum Credit Limit Rejected" ) \
12759
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_RECEIVED,          0x04EC, "Set Overall Debt Cap Received" ) \
12760
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_ACTIONED,          0x04ED, "Set Overall Debt Cap Actioned" ) \
12761
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_CANCELLED,         0x04EE, "Set Overall Debt Cap Cancelled" ) \
12762
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_REJECTED,          0x04EF, "Set Overall Debt Cap Rejected" ) \
12763
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_PP_CLUSTER_GROUP_ID,       0x04FF, "Reserved for Prepayment Cluster Group ID" ) \
12764
/* Calendar Event Configuration Attribute Set */ \
12765
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CLUSTER_NOT_FOUND,             0x0500, "Calendar Cluster Not Found" ) \
12766
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CHANGE_PASSIVE_ACTIVATED,      0x0501, "Calendar Change Passive Activated" ) \
12767
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CHANGE_PASSIVE_UPDATED,        0x0502, "Calendar Change Passive Updated" ) \
12768
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_RECEIVED,              0x05C0, "Publish Calendar Received" ) \
12769
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_ACTIONED,              0x05C1, "Publish Calendar Actioned" ) \
12770
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_CANCELLED,             0x05C2, "Publish Calendar Cancelled" ) \
12771
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_REJECTED,              0x05C3, "Publish Calendar Rejected" ) \
12772
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_RECEIVED,           0x05C4, "Publish Day Profile Received" ) \
12773
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_ACTIONED,           0x05C5, "Publish Day Profile Actioned" ) \
12774
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_CANCELLED,          0x05C6, "Publish Day Profile Cancelled" ) \
12775
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_REJECTED,           0x05C7, "Publish Day Profile Rejected" ) \
12776
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_RECEIVED,          0x05C8, "Publish Week Profile Received" ) \
12777
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_ACTIONED,          0x05C9, "Publish Week Profile Actioned" ) \
12778
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_CANCELLED,         0x05CA, "Publish Week Profile Cancelled" ) \
12779
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_REJECTED,          0x05CB, "Publish Week Profile Rejected" ) \
12780
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_RECEIVED,               0x05CC, "Publish Seasons Received" ) \
12781
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_ACTIONED,               0x05CD, "Publish Seasons Actioned" ) \
12782
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_CANCELLED,              0x05CE, "Publish Seasons Cancelled" ) \
12783
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_REJECTED,               0x05CF, "Publish Seasons Rejected" ) \
12784
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_RECEIVED,          0x05D0, "Publish Special Days Received" ) \
12785
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_ACTIONED,          0x05D1, "Publish Special Days Actioned" ) \
12786
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_CANCELLED,         0x05D2, "Publish Special Days Cancelled" ) \
12787
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_REJECTED,          0x05D3, "Publish Special Days Rejected" ) \
12788
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_CALENDAR_CLUSTER_GROUP_ID, 0x05FF, "Reserved For Calendar Cluster Group ID" ) \
12789
/* Device Management Event Configuration Attribute Set */ \
12790
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_1_CHANGE,                      0x0600, "Password 1 Change" ) \
12791
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_2_CHANGE,                      0x0601, "Password 2 Change" ) \
12792
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_3_CHANGE,                      0x0602, "Password 3 Change" ) \
12793
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_4_CHANGE,                      0x0603, "Password 4 Change" ) \
12794
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EVENT_LOG_CLEARED,                      0x0604, "Event Log Cleared" ) \
12795
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_APS_TIMEOUT,                     0x0610, "ZigBee APS Timeout" ) \
12796
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_IEEE_TRANS_FAILURE_OVER_THRES,   0x0611, "ZigBee IEEE Transmission Failure Over Threshold" ) \
12797
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_IEEE_FRAME_CHECK_SEQ_THRES,      0x0612, "ZigBee IEEE Frame Check Sequence Threshold" ) \
12798
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_CERTIFICATE,                      0x0613, "Error Certificate" ) \
12799
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_SIGNATURE,                        0x0614, "Error Signature" ) \
12800
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_PROGRAM_STORAGE,                  0x0615, "Error Program Storage" ) \
12801
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_RECEIVED,                   0x06C0, "Publish CoT Received" ) \
12802
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_ACTIONED,                   0x06C1, "Publish CoT Actioned" ) \
12803
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_CANCELLED,                  0x06C2, "Publish CoT Cancelled" ) \
12804
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_REJECTED,                   0x06C3, "Publish CoT Rejected" ) \
12805
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_RECEIVED,                   0x06C4, "Publish CoS Received" ) \
12806
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_ACTIONED,                   0x06C5, "Publish CoS Actioned" ) \
12807
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_CANCELLED,                  0x06C6, "Publish CoS Cancelled" ) \
12808
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_REJECTED,                   0x06C7, "Publish CoS Rejected" ) \
12809
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_RECEIVED,               0x06C8, "Change Password Received" ) \
12810
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_ACTIONED,               0x06C9, "Change Password Actioned" ) \
12811
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_CANCELLED,              0x06CA, "Change Password Cancelled" ) \
12812
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_REJECTED,               0x06CB, "Change Password Rejected" ) \
12813
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_RECEIVED,       0x06CC, "Set Event Configuration Received" ) \
12814
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_ACTIONED,       0x06CD, "Set Event Configuration Actioned" ) \
12815
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_CANCELLED,      0x06CE, "Set Event Configuration Cancelled" ) \
12816
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_REJECTED,       0x06CF, "Set Event Configuration Rejected" ) \
12817
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_RECEIVED,                0x06D0, "Update Site ID Received" ) \
12818
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_ACTIONED,                0x06D1, "Update Site ID Actioned" ) \
12819
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_CANCELLED,               0x06D2, "Update Site ID Cancelled" ) \
12820
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_REJECTED,                0x06D3, "Update Site ID Rejected" ) \
12821
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_RECEIVED,                    0x06D4, "Update CIN Received" ) \
12822
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_ACTIONED,                    0x06D5, "Update CIN Actioned" ) \
12823
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_CANCELLED,                   0x06D6, "Update CIN Cancelled" ) \
12824
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_REJECTED,                    0x06D7, "Update CIN Rejected" ) \
12825
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_DM_CLUSTER_ID,             0x06FF, "Reserved for Device Management Cluster Group ID" ) \
12826
/* Tunnel Event Configuration Attribute Set */ \
12827
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TUNNELING_CLUSTER_NOT_FOUND,            0x0700, "Tunneling Cluster Not Found" ) \
12828
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNSUPPORTED_PROTOCOL,                   0x0701, "Unsupported Protocol" ) \
12829
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INCORRECT_PROTOCOL,                     0x0702, "Incorrect Protocol" ) \
12830
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_RECEIVED,        0x07C0, "Request Tunnel Command Received" ) \
12831
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_REJECTED,        0x07C1, "Request Tunnel Command Rejected" ) \
12832
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_GENERATED,       0x07C2, "Request Tunnel Command Generated" ) \
12833
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_RECEIVED,          0x07C3, "Close Tunnel Command Received" ) \
12834
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_REJECTED,          0x07C4, "Close Tunnel Command Rejected" ) \
12835
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_GENERATED,         0x07C5, "Close Tunnel Command Generated" ) \
12836
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_RECEIVED,         0x07C6, "Transfer Data Command Received" ) \
12837
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_REJECTED,         0x07C7, "Transfer Data Command Rejected" ) \
12838
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_GENERATED,        0x07C8, "Transfer Data Command Generated" ) \
12839
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_RECEIVED,   0x07C9, "Transfer Data Error Command Received" ) \
12840
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_REJECTED,   0x07CA, "Transfer Data Error Command Rejected" ) \
12841
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_GENERATED,  0x07CB, "Transfer Data Error Command Generated" ) \
12842
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_RECEIVED,     0x07CC, "Ack Transfer Data Command Received" ) \
12843
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_REJECTED,     0x07CD, "Ack Transfer Data Command Rejected" ) \
12844
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_GENERATED,    0x07CE, "Ack Transfer Data Command Generated" ) \
12845
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_RECEIVED,            0x07CF, "Ready Data Command Received" ) \
12846
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_REJECTED,            0x07D0, "Ready Data Command Rejected" ) \
12847
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_GENERATED,           0x07D1, "Ready Data Command Generated" ) \
12848
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_RECV,     0x07D2, "Get Supported Tunnel Protocols Command Received" ) \
12849
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_REJECT,   0x07D3, "Get Supported Tunnel Protocols Command Rejected" ) \
12850
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_GENERATED,0x07D4, "Get Supported Tunnel Protocols Command Generated" ) \
12851
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_TUNNEL_CLUSTER_GROUP_ID,   0x07FF, "Reserved for Tunnel Cluster Group ID" ) \
12852
/* OTA Event Configuration Attribute Set */ \
12853
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_READY_FOR_ACTIVATION,          0x0800, "Firmware Ready for Activation" ) \
12854
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_ACTIVATED,                     0x0801, "Firmware Activated" ) \
12855
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_ACTIVATION_FAILURE,            0x0802, "Firmware Activation Failure" ) \
12856
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_READY_FOR_ACTIVATION,             0x0803, "Patch Ready for Activation" ) \
12857
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_ACTIVATED,                        0x0804, "Patch Activated" ) \
12858
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_FAILURE,                          0x0805, "Patch Failure" ) \
12859
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_NOTIFY_COMMAND_RECEIVED,          0x08C0, "Image Notify Command Received" ) \
12860
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_NOTIFY_COMMAND_REJECTED,          0x08C1, "Image Notify Command Rejected" ) \
12861
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_REQUEST_GENERATED,     0x08C2, "Query Next Image Request Generated" ) \
12862
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_RESPONSE_RECEIVED,     0x08C3, "Query Next Image Response Received" ) \
12863
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_RESPONSE_REJECTED,     0x08C4, "Query Next Image Response Rejected" ) \
12864
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_REQUEST_GENERATED,          0x08C5, "Image Block Request Generated" ) \
12865
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_PAGE_REQUEST_GENERATED,           0x08C6, "Image Page Request Generated" ) \
12866
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_RESPONSE_RECEIVED,          0x08C7, "Image Block Response Received" ) \
12867
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_RESPONSE_REJECTED,          0x08C8, "Image Block Response Rejected" ) \
12868
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_REQUEST_GENERATED,          0x08C9, "Upgrade End Request Generated" ) \
12869
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_RESPONSE_RECEIVED,          0x08CA, "Upgrade End Response Received" ) \
12870
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_RESPONSE_REJECTED,          0x08CB, "Upgrade End Response Rejected" ) \
12871
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_REQUEST_GENERATED,  0x08CC, "Query Specific File Request Generated" ) \
12872
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_RESPONSE_RECEIVED,  0x08CD, "Query Specific File Response Received" ) \
12873
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_RESPONSE_REJECTED,  0x08CE, "Query Specific File Response Rejected" ) \
12874
    XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_OTA_CLUSTER_GROUP_ID,      0x08FF, "Reserved For OTA Cluster Group ID" ) \
12875
/* Smart Energy */ \
12876
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT_CLNT,                  0xFFFE, "Attribute Reporting Status" )
12877
12878
VALUE_STRING_ENUM(zbee_zcl_device_management_attr_client_names);
12879
VALUE_STRING_ARRAY(zbee_zcl_device_management_attr_client_names);
12880
static value_string_ext zbee_zcl_device_management_attr_client_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_device_management_attr_client_names);
12881
12882
/* Server Commands Received */
12883
#define zbee_zcl_device_management_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
12884
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_TENANCY,           0x00, "Get Change Of Tenancy" ) \
12885
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_SUPPLIER,          0x01, "Get Change Of Supplier" ) \
12886
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD,            0x02, "Request New Password" ) \
12887
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_SITE_ID,                     0x03, "Get Site ID" ) \
12888
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REPORT_EVENT_CONFIGURATION,      0x04, "Report Event Configuration" ) \
12889
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CIN,                         0x05, "Get CIN" )
12890
12891
VALUE_STRING_ENUM(zbee_zcl_device_management_srv_rx_cmd_names);
12892
VALUE_STRING_ARRAY(zbee_zcl_device_management_srv_rx_cmd_names);
12893
12894
/* Server Commands Generated */
12895
#define zbee_zcl_device_management_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
12896
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_TENANCY,           0x00, "Publish Change Of Tenancy" ) \
12897
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_SUPPLIER,          0x01, "Publish Change Of Supplier" ) \
12898
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD_RESPONSE,       0x02, "Request New Password Response" ) \
12899
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_SITE_ID,                      0x03, "Update Site ID" ) \
12900
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_SET_EVENT_CONFIGURATION,             0x04, "Set Event Configuration" ) \
12901
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_EVENT_CONFIGURATION,             0x05, "Get Event Configuration" ) \
12902
    XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_CIN,                          0x06, "Update CIN" )
12903
12904
VALUE_STRING_ENUM(zbee_zcl_device_management_srv_tx_cmd_names);
12905
VALUE_STRING_ARRAY(zbee_zcl_device_management_srv_tx_cmd_names);
12906
12907
#define zbee_zcl_device_management_password_types_VALUE_STRING_LIST(XXX)  \
12908
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_RESERVED, 0x00, "Reserved")        \
12909
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_1, 0x01, "Password 1")    \
12910
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_2, 0x02, "Password 2")    \
12911
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_3, 0x03, "Password 3")    \
12912
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_4, 0x04, "Password 4")
12913
12914
VALUE_STRING_ENUM(zbee_zcl_device_management_password_types);
12915
VALUE_STRING_ARRAY(zbee_zcl_device_management_password_types);
12916
12917
#define zbee_zcl_device_management_event_configuration_log_types_VALUE_STRING_LIST(XXX) \
12918
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_DO_NOT_LOG, 0x0, "Do not Log")       \
12919
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_TAMPER, 0x1, "Log as Tamper") \
12920
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_FAULT, 0x2, "Log as Fault")   \
12921
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_GENERAL_EVENT, 0x3, "Log as General Event")   \
12922
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_SECURITY_EVENT, 0x4, "Log as Security Event") \
12923
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_NETWORK_EVENT, 0x5, "Log as Network Event")
12924
12925
VALUE_STRING_ENUM(zbee_zcl_device_management_event_configuration_log_types);
12926
VALUE_STRING_ARRAY(zbee_zcl_device_management_event_configuration_log_types);
12927
12928
#define zbee_zcl_device_management_contactor_states_VALUE_STRING_LIST(XXX)  \
12929
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_OFF,       0x0, "Supply OFF")         \
12930
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_OFF_ARMED, 0x1, "Supply OFF / ARMED") \
12931
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_ON,        0x2, "Supply ON")          \
12932
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_UNCHANGED, 0x3, "Supply UNCHANGED")
12933
12934
VALUE_STRING_ENUM(zbee_zcl_device_management_contactor_states);
12935
VALUE_STRING_ARRAY(zbee_zcl_device_management_contactor_states);
12936
12937
#define zbee_zcl_device_management_configuration_controls_VALUE_STRING_LIST(XXX) \
12938
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LIST, 0x00, "Apply by List")  \
12939
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP, 0x01, "Apply by Event Group")  \
12940
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE, 0x02, "Apply by Log Type")  \
12941
    XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH, 0x03, "Apply by Configuration Match")
12942
12943
VALUE_STRING_ENUM(zbee_zcl_device_management_configuration_controls);
12944
VALUE_STRING_ARRAY(zbee_zcl_device_management_configuration_controls);
12945
12946
/*************************/
12947
/* Function Declarations */
12948
/*************************/
12949
void proto_register_zbee_zcl_device_management(void);
12950
void proto_reg_handoff_zbee_zcl_device_management(void);
12951
12952
/*************************/
12953
/* Global Variables      */
12954
/*************************/
12955
12956
/* Initialize the protocol and registered fields */
12957
static int proto_zbee_zcl_device_management;
12958
12959
static int hf_zbee_zcl_device_management_srv_tx_cmd_id;
12960
static int hf_zbee_zcl_device_management_srv_rx_cmd_id;
12961
static int hf_zbee_zcl_device_management_attr_server_id;
12962
static int hf_zbee_zcl_device_management_attr_client_id;
12963
static int hf_zbee_zcl_device_management_attr_reporting_status;
12964
static int hf_zbee_zcl_device_management_password_type;
12965
static int hf_zbee_zcl_device_management_command_index;
12966
static int hf_zbee_zcl_device_management_total_commands;
12967
static int hf_zbee_zcl_device_management_event_id;
12968
static int hf_zbee_zcl_device_management_event_configuration;
12969
static int hf_zbee_zcl_device_management_event_configuration_logging;
12970
static int hf_zbee_zcl_device_management_event_configuration_push_event_to_wan;
12971
static int hf_zbee_zcl_device_management_event_configuration_push_event_to_han;
12972
static int hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee;
12973
static int hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical;
12974
static int hf_zbee_zcl_device_management_event_configuration_reserved;
12975
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id;
12976
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id;
12977
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type;
12978
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_implementation_date;
12979
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control;
12980
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot;
12981
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot;
12982
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register;
12983
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register;
12984
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period;
12985
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan;
12986
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge;
12987
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information;
12988
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information;
12989
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer;
12990
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier;
12991
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state;
12992
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log;
12993
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data;
12994
static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved;
12995
12996
static int hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id;
12997
static int hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id;
12998
static int hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type;
12999
static int hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id;
13000
static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_implementation_time;
13001
static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control;
13002
static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_name;
13003
static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_contact_details;
13004
13005
static int hf_zbee_zcl_device_management_request_new_password_issuer_event_id;
13006
static int hf_zbee_zcl_device_management_request_new_password_implementation_date;
13007
static int hf_zbee_zcl_device_management_request_new_password_password;
13008
static int hf_zbee_zcl_device_management_request_new_password_duration_in_minutes;
13009
13010
static int hf_zbee_zcl_device_management_update_site_id_issuer_event_id;
13011
static int hf_zbee_zcl_device_management_update_site_id_site_id_time;
13012
static int hf_zbee_zcl_device_management_update_site_id_provider_id;
13013
static int hf_zbee_zcl_device_management_update_site_id_site_id;
13014
13015
static int hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id;
13016
static int hf_zbee_zcl_device_management_set_event_configuration_start_time;
13017
static int hf_zbee_zcl_device_management_set_event_configuration_configuration_control;
13018
static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events;
13019
static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id;
13020
static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id;
13021
static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id;
13022
static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_configuration_value_match;
13023
13024
static int hf_zbee_zcl_device_management_get_event_configuration_event_id;
13025
13026
static int hf_zbee_zcl_device_management_update_cin_issuer_event_id;
13027
static int hf_zbee_zcl_device_management_update_cin_cin_implementation_time;
13028
static int hf_zbee_zcl_device_management_update_cin_provider_id;
13029
static int hf_zbee_zcl_device_management_update_cin_customerid_number;
13030
13031
static int* const hf_zbee_zcl_device_management_event_configuration_flags[] = {
13032
    &hf_zbee_zcl_device_management_event_configuration_logging,
13033
    &hf_zbee_zcl_device_management_event_configuration_push_event_to_wan,
13034
    &hf_zbee_zcl_device_management_event_configuration_push_event_to_han,
13035
    &hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee,
13036
    &hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical,
13037
    &hf_zbee_zcl_device_management_event_configuration_reserved,
13038
    NULL
13039
};
13040
13041
static int* const hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_flags[] = {
13042
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot,
13043
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot,
13044
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register,
13045
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register,
13046
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period,
13047
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan,
13048
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge,
13049
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information,
13050
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information,
13051
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer,
13052
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier,
13053
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state,
13054
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log,
13055
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data,
13056
    &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved,
13057
    NULL
13058
};
13059
13060
/* Initialize the subtree pointers */
13061
static int ett_zbee_zcl_device_management;
13062
static int ett_zbee_zcl_device_management_event_configuration_payload;
13063
static int ett_zbee_zcl_device_management_event_configuration;
13064
static int ett_zbee_zcl_device_management_proposed_tenancy_change_control;
13065
13066
/*************************/
13067
/* Function Bodies       */
13068
/*************************/
13069
13070
/**
13071
 *This function is called by ZCL foundation dissector in order to decode
13072
 *
13073
 *@param tree pointer to data tree Wireshark uses to display packet.
13074
 *@param tvb pointer to buffer containing raw packet.
13075
 *@param offset pointer to buffer offset
13076
 *@param attr_id attribute identifier
13077
 *@param data_type attribute data type
13078
 *@param client_attr ZCL client
13079
*/
13080
static void
13081
dissect_zcl_device_management_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
13082
41
{
13083
41
    switch (attr_id) {
13084
        /* applies to all SE clusters */
13085
0
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT:
13086
0
            proto_tree_add_item(tree, hf_zbee_zcl_device_management_attr_reporting_status, tvb, *offset, 1, ENC_NA);
13087
0
            *offset += 1;
13088
0
            break;
13089
13090
41
        default: /* Catch all */
13091
41
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
13092
41
            break;
13093
41
    }
13094
41
} /*dissect_zcl_device_management_attr_data*/
13095
13096
/**
13097
 *This function is called by ZCL foundation dissector in order to decode
13098
 *
13099
 *@param tree pointer to data tree Wireshark uses to display packet.
13100
 *@param tvb pointer to buffer containing raw packet.
13101
 *@param offset pointer to buffer offset
13102
*/
13103
static void
13104
dissect_zcl_device_management_request_new_password(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13105
0
{
13106
    /* Password Type */
13107
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_password_type, tvb, *offset, 1, ENC_NA);
13108
0
    *offset += 1;
13109
0
}
13110
13111
/**
13112
 *This function is called by ZCL foundation dissector in order to decode
13113
 *
13114
 *@param tree pointer to data tree Wireshark uses to display packet.
13115
 *@param tvb pointer to buffer containing raw packet.
13116
 *@param offset pointer to buffer offset
13117
*/
13118
static void
13119
dissect_zcl_device_management_report_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13120
0
{
13121
0
    proto_tree *event_configuration_payload;
13122
0
    unsigned rem_len;
13123
13124
    /* Command Index */
13125
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_command_index, tvb, *offset, 1, ENC_NA);
13126
0
    *offset += 1;
13127
13128
    /* Total Commands */
13129
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_total_commands, tvb, *offset, 1, ENC_NA);
13130
0
    *offset += 1;
13131
13132
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
13133
    /* Event Configuration Payload */
13134
0
    event_configuration_payload = proto_tree_add_subtree(tree, tvb, *offset, rem_len, ett_zbee_zcl_device_management_event_configuration_payload, NULL, "Event Configuration Payload");
13135
13136
0
    while(tvb_reported_length_remaining(tvb, *offset) > 2) {
13137
        /* Event ID */
13138
0
        proto_tree_add_item(event_configuration_payload, hf_zbee_zcl_device_management_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13139
0
        *offset += 2;
13140
13141
        /* Event Configuration */
13142
0
        proto_tree_add_bitmask(event_configuration_payload, tvb, *offset, hf_zbee_zcl_device_management_event_configuration,
13143
0
                               ett_zbee_zcl_device_management_event_configuration, hf_zbee_zcl_device_management_event_configuration_flags, ENC_NA);
13144
0
        *offset += 1;
13145
0
    }
13146
0
}
13147
13148
/**
13149
 *This function is called by ZCL foundation dissector in order to decode
13150
 *
13151
 *@param tree pointer to data tree Wireshark uses to display packet.
13152
 *@param tvb pointer to buffer containing raw packet.
13153
 *@param offset pointer to buffer offset
13154
*/
13155
static void
13156
dissect_zcl_device_management_publish_change_of_tenancy(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13157
0
{
13158
    /* Provider ID */
13159
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13160
0
    *offset += 4;
13161
13162
    /* Issuer Event ID */
13163
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13164
0
    *offset += 4;
13165
13166
    /* Tariff Type */
13167
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type, tvb, *offset, 1, ENC_NA);
13168
0
    *offset += 1;
13169
13170
    /* Implementation Date/Time */
13171
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_implementation_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13172
0
    *offset += 4;
13173
13174
    /* Proposed Tenancy Change Control */
13175
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control,
13176
0
                               ett_zbee_zcl_device_management_proposed_tenancy_change_control, hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_flags, ENC_NA);
13177
0
    *offset += 4;
13178
13179
0
} /*dissect_zcl_device_management_publish_change_of_tenancy*/
13180
13181
/**
13182
 *This function is called by ZCL foundation dissector in order to decode
13183
 *
13184
 *@param tree pointer to data tree Wireshark uses to display packet.
13185
 *@param tvb pointer to buffer containing raw packet.
13186
 *@param offset pointer to buffer offset
13187
*/
13188
static void
13189
dissect_zcl_device_management_publish_change_of_supplier(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13190
0
{
13191
0
    int name_length;
13192
0
    int detail_length;
13193
13194
    /* Current Provider ID */
13195
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13196
0
    *offset += 4;
13197
13198
    /* Issuer Event ID */
13199
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13200
0
    *offset += 4;
13201
13202
    /* Tariff Type */
13203
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type, tvb, *offset, 1, ENC_NA);
13204
0
    *offset += 1;
13205
13206
    /* Proposed Provider ID */
13207
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13208
0
    *offset += 4;
13209
13210
    /* Provider Change Implementation Time */
13211
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_implementation_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13212
0
    *offset += 4;
13213
13214
    /* Provider Change Control */
13215
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13216
0
    *offset += 4;
13217
13218
    /* Proposed Provider Name */
13219
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_name, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &name_length);
13220
0
    *offset += name_length;
13221
13222
    /* Proposed Provider Contact Details */
13223
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_contact_details, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &detail_length);
13224
0
    *offset += detail_length;
13225
13226
0
} /*dissect_zcl_device_management_publish_change_of_supplier*/
13227
13228
/**
13229
 *This function is called by ZCL foundation dissector in order to decode
13230
 *
13231
 *@param tree pointer to data tree Wireshark uses to display packet.
13232
 *@param tvb pointer to buffer containing raw packet.
13233
 *@param offset pointer to buffer offset
13234
*/
13235
static void
13236
dissect_zcl_device_management_request_new_password_response(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13237
0
{
13238
0
    int      password_length;
13239
13240
    /* Issuer Event ID */
13241
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_request_new_password_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13242
0
    *offset += 4;
13243
13244
    /* Implementation Date/Time */
13245
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_request_new_password_implementation_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13246
0
    *offset += 4;
13247
13248
    /* Duration in minutes */
13249
    /* TODO: if really big endian, should use ENC_BIG_ENDIAN.. */
13250
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_request_new_password_duration_in_minutes, tvb, *offset, 2, ENC_BIG_ENDIAN);
13251
0
    *offset += 2;
13252
13253
    /* Password Type */
13254
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_password_type, tvb, *offset, 1, ENC_NA);
13255
0
    *offset += 1;
13256
13257
    /* Password */
13258
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_device_management_request_new_password_password, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &password_length);
13259
0
    *offset += password_length;
13260
13261
0
} /*dissect_zcl_device_management_request_new_password_response*/
13262
13263
/**
13264
 *This function is called by ZCL foundation dissector in order to decode
13265
 *
13266
 *@param tree pointer to data tree Wireshark uses to display packet.
13267
 *@param tvb pointer to buffer containing raw packet.
13268
 *@param offset pointer to buffer offset
13269
*/
13270
static void
13271
dissect_zcl_device_management_update_site_id(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13272
0
{
13273
0
    int      siteid_length;
13274
13275
    /* Issuer Event ID */
13276
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_site_id_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13277
0
    *offset += 4;
13278
13279
    /* SiteID Time */
13280
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_site_id_site_id_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13281
0
    *offset += 4;
13282
13283
    /* Provider ID */
13284
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_site_id_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13285
0
    *offset += 4;
13286
13287
    /* SiteID */
13288
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_device_management_update_site_id_site_id, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &siteid_length);
13289
0
    *offset += siteid_length;
13290
13291
0
} /*dissect_zcl_device_management_update_site_id*/
13292
13293
/**
13294
 *This function is called by ZCL foundation dissector in order to decode
13295
 *
13296
 *@param tree pointer to data tree Wireshark uses to display packet.
13297
 *@param tvb pointer to buffer containing raw packet.
13298
 *@param offset pointer to buffer offset
13299
*/
13300
static void
13301
dissect_zcl_device_management_set_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13302
0
{
13303
0
    uint8_t  config_control;
13304
0
    uint8_t  number_of_events;
13305
13306
    /* Issuer Event ID */
13307
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13308
0
    *offset += 4;
13309
13310
    /* Start Date/Time */
13311
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13312
0
    *offset += 4;
13313
13314
    /* Event Configuration */
13315
0
    proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_device_management_event_configuration,
13316
0
                           ett_zbee_zcl_device_management_event_configuration, hf_zbee_zcl_device_management_event_configuration_flags, ENC_NA);
13317
0
    *offset += 1;
13318
13319
    /* Configuration Control */
13320
0
    config_control = tvb_get_uint8(tvb, *offset);
13321
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_configuration_control, tvb, *offset, 1, ENC_NA);
13322
0
    *offset += 1;
13323
13324
    /* Event Configuration Payload */
13325
0
    switch (config_control) {
13326
0
        case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LIST:
13327
            /* Number of Events */
13328
0
            proto_tree_add_item_ret_uint8(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events, tvb, *offset, 1, ENC_NA, &number_of_events);
13329
0
            *offset += 1;
13330
13331
            /* Event IDs */
13332
0
            for (unsigned i = 0; tvb_reported_length_remaining(tvb, *offset) > 0 && i < number_of_events; i++) {
13333
0
                proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13334
0
                *offset += 2;
13335
0
            }
13336
0
            break;
13337
0
        case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP:
13338
            /* Event Group ID */
13339
0
            proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13340
0
            *offset += 2;
13341
0
            break;
13342
0
        case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE:
13343
            /* Log ID */
13344
0
            proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
13345
0
            *offset += 1;
13346
0
            break;
13347
0
        case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH:
13348
            /* Configuration Value Match */
13349
0
            proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_configuration_value_match, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
13350
0
            *offset += 1;
13351
0
            break;
13352
0
    }
13353
0
} /*dissect_zcl_device_management_set_event_configuration*/
13354
13355
/**
13356
 *This function is called by ZCL foundation dissector in order to decode
13357
 *
13358
 *@param tree pointer to data tree Wireshark uses to display packet.
13359
 *@param tvb pointer to buffer containing raw packet.
13360
 *@param offset pointer to buffer offset
13361
*/
13362
static void
13363
dissect_zcl_device_management_get_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13364
0
{
13365
    /* Event ID */
13366
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_get_event_configuration_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13367
0
    *offset += 2;
13368
0
} /*dissect_zcl_device_management_get_event_configuration*/
13369
13370
/**
13371
 *This function is called by ZCL foundation dissector in order to decode
13372
 *
13373
 *@param tree pointer to data tree Wireshark uses to display packet.
13374
 *@param tvb pointer to buffer containing raw packet.
13375
 *@param offset pointer to buffer offset
13376
*/
13377
static void
13378
dissect_zcl_device_management_update_cin(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13379
0
{
13380
0
    int      customer_id_length;
13381
13382
    /* Issuer Event ID */
13383
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_cin_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13384
0
    *offset += 4;
13385
13386
    /* CIN Implementation Time */
13387
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_cin_cin_implementation_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
13388
0
    *offset += 4;
13389
13390
    /* Provider ID */
13391
0
    proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_cin_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13392
0
    *offset += 4;
13393
13394
    /* CustomerID Number */
13395
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_device_management_update_cin_customerid_number, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &customer_id_length);
13396
0
    *offset += customer_id_length;
13397
0
} /*dissect_zcl_device_management_update_cin*/
13398
13399
/**
13400
 *ZigBee ZCL Device Management cluster dissector for wireshark.
13401
 *
13402
 *@param tvb pointer to buffer containing raw packet.
13403
 *@param pinfo pointer to packet information fields
13404
 *@param tree pointer to data tree Wireshark uses to display packet.
13405
*/
13406
static int
13407
dissect_zbee_zcl_device_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13408
1
{
13409
1
    zbee_zcl_packet  *zcl;
13410
1
    proto_tree       *payload_tree;
13411
1
    unsigned          offset = 0;
13412
1
    uint8_t           cmd_id;
13413
1
    int               rem_len;
13414
13415
    /* Reject the packet if data is NULL */
13416
1
    if (data == NULL)
13417
0
        return 0;
13418
1
    zcl = (zbee_zcl_packet *)data;
13419
1
    cmd_id = zcl->cmd_id;
13420
13421
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
13422
1
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
13423
        /* Append the command name to the info column. */
13424
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13425
0
            val_to_str_const(cmd_id, zbee_zcl_device_management_srv_rx_cmd_names, "Unknown Command"),
13426
0
            zcl->tran_seqno);
13427
13428
        /* Add the command ID. */
13429
0
        proto_tree_add_uint(tree, hf_zbee_zcl_device_management_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
13430
13431
        /* Check is this command has a payload, than add the payload tree */
13432
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
13433
0
        if (rem_len > 0) {
13434
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_device_management, NULL, "Payload");
13435
            /* Call the appropriate command dissector */
13436
0
            switch (cmd_id) {
13437
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_TENANCY:
13438
                    /* No Payload */
13439
0
                    break;
13440
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_SUPPLIER:
13441
                    /* No Payload */
13442
0
                    break;
13443
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD:
13444
0
                    dissect_zcl_device_management_request_new_password(payload_tree, tvb, &offset);
13445
0
                    break;
13446
13447
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_SITE_ID:
13448
                    /* No Payload */
13449
0
                    break;
13450
13451
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REPORT_EVENT_CONFIGURATION:
13452
0
                    dissect_zcl_device_management_report_event_configuration(payload_tree, tvb, &offset);
13453
0
                    break;
13454
13455
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CIN:
13456
                    /* No Payload */
13457
0
                    break;
13458
13459
0
                default:
13460
0
                    break;
13461
0
            }
13462
0
        }
13463
0
    }
13464
1
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
13465
        /* Append the command name to the info column. */
13466
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13467
1
            val_to_str_const(cmd_id, zbee_zcl_device_management_srv_tx_cmd_names, "Unknown Command"),
13468
1
            zcl->tran_seqno);
13469
13470
        /* Add the command ID. */
13471
1
        proto_tree_add_uint(tree, hf_zbee_zcl_device_management_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
13472
13473
        /* Check is this command has a payload, than add the payload tree */
13474
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
13475
1
        if (rem_len > 0) {
13476
1
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_device_management, NULL, "Payload");
13477
13478
            /* Call the appropriate command dissector */
13479
1
            switch (cmd_id) {
13480
13481
0
               case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_TENANCY:
13482
0
                    dissect_zcl_device_management_publish_change_of_tenancy(payload_tree, tvb, &offset);
13483
0
                    break;
13484
0
               case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_SUPPLIER:
13485
0
                    dissect_zcl_device_management_publish_change_of_supplier(payload_tree, tvb, &offset);
13486
0
                    break;
13487
13488
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD_RESPONSE:
13489
0
                    dissect_zcl_device_management_request_new_password_response(payload_tree, tvb, &offset);
13490
0
                    break;
13491
13492
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_SITE_ID:
13493
0
                    dissect_zcl_device_management_update_site_id(payload_tree, tvb, &offset);
13494
0
                    break;
13495
13496
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_SET_EVENT_CONFIGURATION:
13497
0
                    dissect_zcl_device_management_set_event_configuration(payload_tree, tvb, &offset);
13498
0
                    break;
13499
13500
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_EVENT_CONFIGURATION:
13501
0
                    dissect_zcl_device_management_get_event_configuration(payload_tree, tvb, &offset);
13502
0
                    break;
13503
13504
0
                case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_CIN:
13505
0
                    dissect_zcl_device_management_update_cin(payload_tree, tvb, &offset);
13506
0
                    break;
13507
13508
1
                default:
13509
1
                    break;
13510
1
            }
13511
1
        }
13512
1
    }
13513
13514
1
    return tvb_captured_length(tvb);
13515
1
} /*dissect_zbee_zcl_device_management*/
13516
13517
/**
13518
 *This function registers the ZCL Device Management dissector
13519
 *
13520
*/
13521
void
13522
proto_register_zbee_zcl_device_management(void)
13523
15
{
13524
15
    static hf_register_info hf[] = {
13525
13526
15
        { &hf_zbee_zcl_device_management_attr_server_id,
13527
15
            { "Attribute", "zbee_zcl_se.device_management.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_device_management_attr_server_names),
13528
15
            0x0, NULL, HFILL } },
13529
13530
15
        { &hf_zbee_zcl_device_management_attr_client_id,
13531
15
            { "Attribute", "zbee_zcl_se.device_management.attr_client_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_device_management_attr_client_names_ext,
13532
15
            0x0, NULL, HFILL } },
13533
13534
15
        { &hf_zbee_zcl_device_management_attr_reporting_status,                         /* common to all SE clusters */
13535
15
            { "Attribute Reporting Status", "zbee_zcl_se.device_management.attr.attr_reporting_status",
13536
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
13537
13538
15
        { &hf_zbee_zcl_device_management_srv_tx_cmd_id,
13539
15
            { "Command", "zbee_zcl_se.device_management.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_srv_tx_cmd_names),
13540
15
            0x00, NULL, HFILL } },
13541
13542
15
        { &hf_zbee_zcl_device_management_srv_rx_cmd_id,
13543
15
            { "Command", "zbee_zcl_se.device_management.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_srv_rx_cmd_names),
13544
15
            0x00, NULL, HFILL } },
13545
13546
15
        { &hf_zbee_zcl_device_management_password_type,
13547
15
            { "Password Type", "zbee_zcl_se.device_management.password_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_password_types),
13548
15
            0x00, NULL, HFILL } },
13549
13550
15
        { &hf_zbee_zcl_device_management_command_index,
13551
15
            { "Command Index", "zbee_zcl_se.device_management.command_index", FT_UINT8, BASE_HEX, NULL,
13552
15
            0x00, NULL, HFILL } },
13553
13554
15
        { &hf_zbee_zcl_device_management_total_commands,
13555
15
            { "Total Commands", "zbee_zcl_se.device_management.total_commands", FT_UINT8, BASE_HEX, NULL,
13556
15
            0x00, NULL, HFILL } },
13557
13558
15
        { &hf_zbee_zcl_device_management_event_id,
13559
15
            { "Event ID", "zbee_zcl_se.device_management.event_id", FT_UINT16, BASE_HEX, NULL,
13560
15
            0x00, NULL, HFILL } },
13561
13562
15
        { &hf_zbee_zcl_device_management_event_configuration,
13563
15
            { "Event Configuration", "zbee_zcl_se.device_management.event_configuration", FT_UINT8, BASE_HEX, NULL,
13564
15
            0x00, NULL, HFILL } },
13565
13566
15
        { &hf_zbee_zcl_device_management_event_configuration_logging,
13567
15
            { "Logging", "zbee_zcl_se.device_management.event_configuration.logging", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_event_configuration_log_types),
13568
15
            0x07, NULL, HFILL } },
13569
13570
15
        { &hf_zbee_zcl_device_management_event_configuration_push_event_to_wan,
13571
15
            { "Push Event to WAN", "zbee_zcl_se.device_management.event_configuration.push_event_to_wan", FT_BOOLEAN, 8, NULL,
13572
15
            0x08, NULL, HFILL } },
13573
13574
15
        { &hf_zbee_zcl_device_management_event_configuration_push_event_to_han,
13575
15
            { "Push Event to HAN", "zbee_zcl_se.device_management.event_configuration.push_event_to_han", FT_BOOLEAN, 8, NULL,
13576
15
            0x10, NULL, HFILL } },
13577
13578
15
        { &hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee,
13579
15
            { "Raise Alarm (Zigbee)", "zbee_zcl_se.device_management.event_configuration.raise_alarm_zigbee", FT_BOOLEAN, 8, NULL,
13580
15
            0x20, NULL, HFILL } },
13581
13582
15
        { &hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical,
13583
15
            { "Raise Alarm (Physical)", "zbee_zcl_se.device_management.event_configuration.raise_alarm_physical", FT_BOOLEAN, 8, NULL,
13584
15
            0x40, NULL, HFILL } },
13585
13586
15
        { &hf_zbee_zcl_device_management_event_configuration_reserved,
13587
15
            { "Reserved", "zbee_zcl_se.device_management.event_configuration.reserved", FT_UINT8, BASE_HEX, NULL,
13588
15
            0x80, NULL, HFILL } },
13589
13590
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id,
13591
15
            { "Provider ID", "zbee_zcl_se.device_management.publish_change_of_tenancy.provider_id", FT_UINT32, BASE_HEX, NULL,
13592
15
            0x0, NULL, HFILL } },
13593
13594
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id,
13595
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.publish_change_of_tenancy.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13596
15
            0x0, NULL, HFILL } },
13597
13598
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type,
13599
15
            { "Tariff Type", "zbee_zcl_se.device_management.publish_change_of_tenancy.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
13600
15
            0x0, NULL, HFILL } },
13601
13602
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_implementation_date,
13603
15
            { "Implementation Date/Time", "zbee_zcl_se.device_management.publish_change_of_tenancy.implementation_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
13604
15
            0x0, NULL, HFILL } },
13605
13606
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control,
13607
15
            { "Proposed Tenancy Change Control", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control", FT_UINT32, BASE_HEX, NULL,
13608
15
            0x0, NULL, HFILL } },
13609
13610
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot,
13611
15
            { "Pre Snapshots", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.pre_snapshot", FT_BOOLEAN, 32, NULL,
13612
15
            0x00000001, NULL, HFILL } },
13613
13614
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot,
13615
15
            { "Post Snapshots", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.post_snapshot", FT_BOOLEAN, 32, NULL,
13616
15
            0x00000002, NULL, HFILL } },
13617
13618
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register,
13619
15
            { "Reset Credit Register", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_credit_register", FT_BOOLEAN, 32, NULL,
13620
15
            0x00000004, NULL, HFILL } },
13621
13622
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register,
13623
15
            { "Reset Debit Register", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_debit_register", FT_BOOLEAN, 32, NULL,
13624
15
            0x00000008, NULL, HFILL } },
13625
13626
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period,
13627
15
            { "Reset Billing Period", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_billing_period", FT_BOOLEAN, 32, NULL,
13628
15
            0x00000010, NULL, HFILL } },
13629
13630
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan,
13631
15
            { "Clear Tariff Plan", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_tariff_plan", FT_BOOLEAN, 32, NULL,
13632
15
            0x00000020, NULL, HFILL } },
13633
13634
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge,
13635
15
            { "Clear Standing Charge", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_standing_charge", FT_BOOLEAN, 32, NULL,
13636
15
            0x00000040, NULL, HFILL } },
13637
13638
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information,
13639
15
            { "Block Historical Load Profile Information", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.block_historical_load_profile_information", FT_BOOLEAN, 32, NULL,
13640
15
            0x00000080, NULL, HFILL } },
13641
13642
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information,
13643
15
            { "Clear Historical Load Profile Information", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_historical_load_profile_information", FT_BOOLEAN, 32, NULL,
13644
15
            0x00000100, NULL, HFILL } },
13645
13646
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer,
13647
15
            { "Clear IHD Data - Consumer", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_ihd_data_consumer", FT_BOOLEAN, 32, NULL,
13648
15
            0x00000200, NULL, HFILL } },
13649
13650
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier,
13651
15
            { "Clear IHD Data - Supplier", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_ihd_data_supplier", FT_BOOLEAN, 32, NULL,
13652
15
            0x00000400, NULL, HFILL } },
13653
13654
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state,
13655
15
            { "Meter Contactor State \"On / Off / Armed\"", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.meter_contactor_state", FT_UINT32, BASE_HEX, VALS(zbee_zcl_device_management_contactor_states),
13656
15
            0x00001800, NULL, HFILL } },
13657
13658
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log,
13659
15
            { "Clear Transaction Log", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_transaction_log", FT_BOOLEAN, 32, NULL,
13660
15
            0x00002000, NULL, HFILL } },
13661
13662
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data,
13663
15
            { "Clear Prepayment Data", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_prepayment_data", FT_BOOLEAN, 32, NULL,
13664
15
            0x00004000, NULL, HFILL } },
13665
13666
15
        { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved,
13667
15
            { "Reserved", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reserved", FT_UINT32, BASE_HEX, NULL,
13668
15
            0xFFFF8000, NULL, HFILL } },
13669
13670
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id,
13671
15
            { "Current Provider ID", "zbee_zcl_se.device_management.publish_change_of_supplier.current_provider_id", FT_UINT32, BASE_HEX, NULL,
13672
15
            0x0, NULL, HFILL } },
13673
13674
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id,
13675
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.publish_change_of_supplier.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13676
15
            0x0, NULL, HFILL } },
13677
13678
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type,
13679
15
            { "Tariff Type", "zbee_zcl_se.device_management.publish_change_of_supplier.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
13680
15
            0x0, NULL, HFILL } },
13681
13682
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id,
13683
15
            { "Proposed Provider ID", "zbee_zcl_se.device_management.publish_change_of_supplier.proposed_provider_id", FT_UINT32, BASE_HEX, NULL,
13684
15
            0x0, NULL, HFILL } },
13685
13686
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_implementation_time,
13687
15
            { "Provider Change Implementation Time", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_change_implementation_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
13688
15
            0x0, NULL, HFILL } },
13689
13690
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control,
13691
15
            { "Provider Change Control", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_change_control", FT_UINT32, BASE_HEX, NULL,
13692
15
            0x0, NULL, HFILL } },
13693
13694
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_name,
13695
15
            { "Proposed Provider Name", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_proposed_provider_name", FT_UINT_STRING, BASE_NONE, NULL,
13696
15
            0x0, NULL, HFILL } },
13697
13698
15
        { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_contact_details,
13699
15
            { "Proposed Provider Contact Details", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_proposed_provider_contact_details", FT_UINT_STRING, BASE_NONE, NULL,
13700
15
            0x0, NULL, HFILL } },
13701
13702
15
        { &hf_zbee_zcl_device_management_request_new_password_issuer_event_id,
13703
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.request_new_password.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13704
15
            0x0, NULL, HFILL } },
13705
13706
15
        { &hf_zbee_zcl_device_management_request_new_password_implementation_date,
13707
15
            { "Implementation Date/Time", "zbee_zcl_se.device_management.request_new_password.implementation_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13708
15
            0x0, NULL, HFILL } },
13709
13710
15
        { &hf_zbee_zcl_device_management_request_new_password_duration_in_minutes,
13711
15
            { "Duration in minutes", "zbee_zcl_se.device_management.request_new_password.duration_in_minutes", FT_UINT16, BASE_DEC, NULL,
13712
15
            0x0, NULL, HFILL } },
13713
13714
15
        { &hf_zbee_zcl_device_management_request_new_password_password,
13715
15
            { "Password", "zbee_zcl_se.device_management.request_new_password.password", FT_UINT_STRING, BASE_NONE, NULL,
13716
15
            0x0, NULL, HFILL } },
13717
13718
15
        { &hf_zbee_zcl_device_management_update_site_id_issuer_event_id,
13719
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.update_site_id.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13720
15
            0x0, NULL, HFILL } },
13721
13722
15
        { &hf_zbee_zcl_device_management_update_site_id_site_id_time,
13723
15
            { "SiteID Time", "zbee_zcl_se.device_management.update_site_id.site_id_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
13724
15
            0x0, NULL, HFILL } },
13725
13726
15
        { &hf_zbee_zcl_device_management_update_site_id_provider_id,
13727
15
            { "Provider ID", "zbee_zcl_se.device_management.update_site_id.provider_id", FT_UINT32, BASE_HEX, NULL,
13728
15
            0x0, NULL, HFILL } },
13729
13730
15
        { &hf_zbee_zcl_device_management_update_site_id_site_id,
13731
15
            { "SiteID", "zbee_zcl_se.device_management.update_site_id.site_id", FT_UINT_STRING, BASE_NONE, NULL,
13732
15
            0x0, NULL, HFILL } },
13733
13734
15
        { &hf_zbee_zcl_device_management_get_event_configuration_event_id,
13735
15
            { "Event ID", "zbee_zcl_se.device_management.get_event_configuration.event_id", FT_UINT16, BASE_HEX, NULL,
13736
15
            0x0, NULL, HFILL } },
13737
13738
15
        { &hf_zbee_zcl_device_management_update_cin_issuer_event_id,
13739
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.update_cin.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13740
15
            0x0, NULL, HFILL } },
13741
13742
15
        { &hf_zbee_zcl_device_management_update_cin_cin_implementation_time,
13743
15
            { "CIN Implementation Time", "zbee_zcl_se.device_management.update_cin.cin_implementation_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, TIME_VALS(now_or_cancel_strings),
13744
15
            0x0, NULL, HFILL } },
13745
13746
15
        { &hf_zbee_zcl_device_management_update_cin_provider_id,
13747
15
            { "Provider ID", "zbee_zcl_se.device_management.update_cin.provider_id", FT_UINT32, BASE_HEX, NULL,
13748
15
            0x0, NULL, HFILL } },
13749
13750
15
        { &hf_zbee_zcl_device_management_update_cin_customerid_number,
13751
15
            { "CustomerID Number", "zbee_zcl_se.device_management.update_cin.customerid_number", FT_UINT_STRING, BASE_NONE, NULL,
13752
15
            0x0, NULL, HFILL } },
13753
13754
15
        { &hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id,
13755
15
            { "Issuer Event ID", "zbee_zcl_se.device_management.set_event_configuration.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13756
15
            0x0, NULL, HFILL } },
13757
13758
15
        { &hf_zbee_zcl_device_management_set_event_configuration_start_time,
13759
15
            { "Start Date/Time", "zbee_zcl_se.device_management.set_event_configuration.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13760
15
            0x0, NULL, HFILL } },
13761
13762
15
        { &hf_zbee_zcl_device_management_set_event_configuration_configuration_control,
13763
15
            { "Configuration Control", "zbee_zcl_se.device_management.set_event_configuration.configuration_control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_configuration_controls),
13764
15
            0x0, NULL, HFILL } },
13765
13766
15
        { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events,
13767
15
            { "Number of Events", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.number_of_events", FT_UINT8, BASE_DEC, NULL,
13768
15
            0x0, NULL, HFILL } },
13769
13770
15
        { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id,
13771
15
            { "Event ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.event_id", FT_UINT16, BASE_DEC, NULL,
13772
15
            0x0, NULL, HFILL } },
13773
13774
15
        { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id,
13775
15
            { "Event Group ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.event_group_id", FT_UINT16, BASE_DEC, NULL,
13776
15
            0x0, NULL, HFILL } },
13777
13778
15
        { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id,
13779
15
            { "Log ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.log_id", FT_UINT8, BASE_DEC, NULL,
13780
15
            0x0, NULL, HFILL } },
13781
13782
15
        { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_configuration_value_match,
13783
15
            { "Configuration Value Match", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.configuration_value_match", FT_UINT8, BASE_DEC, NULL,
13784
15
            0x0, NULL, HFILL } },
13785
13786
15
    };
13787
13788
    /* ZCL Device Management subtrees */
13789
15
    int *ett[] = {
13790
15
        &ett_zbee_zcl_device_management,
13791
15
        &ett_zbee_zcl_device_management_event_configuration_payload,
13792
15
        &ett_zbee_zcl_device_management_event_configuration,
13793
15
        &ett_zbee_zcl_device_management_proposed_tenancy_change_control
13794
15
    };
13795
13796
    /* Register the ZigBee ZCL Device Management cluster protocol name and description */
13797
15
    proto_zbee_zcl_device_management = proto_register_protocol("ZigBee ZCL Device Management", "ZCL Device Management", ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT);
13798
15
    proto_register_field_array(proto_zbee_zcl_device_management, hf, array_length(hf));
13799
15
    proto_register_subtree_array(ett, array_length(ett));
13800
13801
    /* Register the ZigBee ZCL Device Management dissector. */
13802
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT, dissect_zbee_zcl_device_management, proto_zbee_zcl_device_management);
13803
15
} /*proto_register_zbee_zcl_device_management*/
13804
13805
/**
13806
 *Hands off the ZCL Device Management dissector.
13807
 *
13808
*/
13809
void
13810
proto_reg_handoff_zbee_zcl_device_management(void)
13811
15
{
13812
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT,
13813
15
                            proto_zbee_zcl_device_management,
13814
15
                            ett_zbee_zcl_device_management,
13815
15
                            ZBEE_ZCL_CID_DEVICE_MANAGEMENT,
13816
15
                            ZBEE_MFG_CODE_NONE,
13817
15
                            hf_zbee_zcl_device_management_attr_server_id,
13818
15
                            hf_zbee_zcl_device_management_attr_client_id,
13819
15
                            hf_zbee_zcl_device_management_srv_rx_cmd_id,
13820
15
                            hf_zbee_zcl_device_management_srv_tx_cmd_id,
13821
15
                            dissect_zcl_device_management_attr_data
13822
15
                         );
13823
15
} /*proto_reg_handoff_zbee_zcl_device_management*/
13824
13825
13826
/* ########################################################################## */
13827
/* #### (0x0709) EVENTS CLUSTER ############################################# */
13828
/* ########################################################################## */
13829
13830
/* Attributes - None */
13831
13832
/* Server Commands Received */
13833
#define zbee_zcl_events_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
13834
    XXX(ZBEE_ZCL_CMD_ID_EVENTS_GET_EVENT_LOG,                   0x00, "Get Event Log" ) \
13835
    XXX(ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_REQUEST,         0x01, "Clear Event Log Request" )
13836
13837
VALUE_STRING_ENUM(zbee_zcl_events_srv_rx_cmd_names);
13838
VALUE_STRING_ARRAY(zbee_zcl_events_srv_rx_cmd_names);
13839
13840
/* Server Commands Generated */
13841
#define zbee_zcl_events_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
13842
    XXX(ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT,                   0x00, "Publish Event" ) \
13843
    XXX(ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT_LOG,               0x01, "Publish Event Log" ) \
13844
    XXX(ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_RESPONSE,        0x02, "Clear Event Log Response" )
13845
13846
VALUE_STRING_ENUM(zbee_zcl_events_srv_tx_cmd_names);
13847
VALUE_STRING_ARRAY(zbee_zcl_events_srv_tx_cmd_names);
13848
13849
/*************************/
13850
/* Function Declarations */
13851
/*************************/
13852
void proto_register_zbee_zcl_events(void);
13853
void proto_reg_handoff_zbee_zcl_events(void);
13854
13855
/* Command Dissector Helpers */
13856
static void dissect_zcl_events_get_event_log                    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13857
static void dissect_zcl_events_clear_event_log_request          (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13858
static void dissect_zcl_events_publish_event                    (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13859
static void dissect_zcl_events_publish_event_log                (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13860
static void dissect_zcl_events_clear_event_log_response         (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13861
13862
/*************************/
13863
/* Global Variables      */
13864
/*************************/
13865
13866
/* Initialize the protocol and registered fields */
13867
static int proto_zbee_zcl_events;
13868
13869
static int hf_zbee_zcl_events_srv_tx_cmd_id;
13870
static int hf_zbee_zcl_events_srv_rx_cmd_id;
13871
static int hf_zbee_zcl_events_get_event_log_event_control_log_id;
13872
static int hf_zbee_zcl_events_get_event_log_event_id;
13873
static int hf_zbee_zcl_events_get_event_log_start_time;
13874
static int hf_zbee_zcl_events_get_event_log_end_time;
13875
static int hf_zbee_zcl_events_get_event_log_number_of_events;
13876
static int hf_zbee_zcl_events_get_event_log_event_offset;
13877
static int hf_zbee_zcl_events_clear_event_log_request_log_id;
13878
static int hf_zbee_zcl_events_publish_event_log_id;
13879
static int hf_zbee_zcl_events_publish_event_event_id;
13880
static int hf_zbee_zcl_events_publish_event_event_time;
13881
static int hf_zbee_zcl_events_publish_event_event_control;
13882
static int hf_zbee_zcl_events_publish_event_event_data;
13883
static int hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events;
13884
static int hf_zbee_zcl_events_publish_event_log_command_index;
13885
static int hf_zbee_zcl_events_publish_event_log_total_commands;
13886
static int hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control;
13887
static int hf_zbee_zcl_events_publish_event_log_log_id;
13888
static int hf_zbee_zcl_events_publish_event_log_event_id;
13889
static int hf_zbee_zcl_events_publish_event_log_event_time;
13890
static int hf_zbee_zcl_events_publish_event_log_event_data;
13891
static int hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs;
13892
13893
/* Initialize the subtree pointers */
13894
15
#define ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT             1
13895
1.51k
#define ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT      100 // The Great Britain Companion Specification (GBCS) allows up to 100 even though ZigBee only allows 15
13896
#define ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT                  (ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT + ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT)
13897
13898
static int ett_zbee_zcl_events;
13899
static int ett_zbee_zcl_events_publish_event_log_entry[ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT];
13900
13901
/*************************/
13902
/* Function Bodies       */
13903
/*************************/
13904
13905
/**
13906
 *ZigBee ZCL Events cluster dissector for wireshark.
13907
 *
13908
 *@param tvb pointer to buffer containing raw packet.
13909
 *@param pinfo pointer to packet information fields
13910
 *@param tree pointer to data tree Wireshark uses to display packet.
13911
*/
13912
static int
13913
dissect_zbee_zcl_events(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13914
0
{
13915
0
    proto_tree        *payload_tree;
13916
0
    zbee_zcl_packet   *zcl;
13917
0
    unsigned          offset = 0;
13918
0
    uint8_t           cmd_id;
13919
0
    int               rem_len;
13920
13921
    /* Reject the packet if data is NULL */
13922
0
    if (data == NULL)
13923
0
        return 0;
13924
0
    zcl = (zbee_zcl_packet *)data;
13925
0
    cmd_id = zcl->cmd_id;
13926
13927
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
13928
0
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
13929
        /* Append the command name to the info column. */
13930
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13931
0
            val_to_str_const(cmd_id, zbee_zcl_events_srv_rx_cmd_names, "Unknown Command"),
13932
0
            zcl->tran_seqno);
13933
13934
        /* Add the command ID. */
13935
0
        proto_tree_add_uint(tree, hf_zbee_zcl_events_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
13936
13937
        /* Check is this command has a payload, than add the payload tree */
13938
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
13939
0
        if (rem_len > 0) {
13940
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_events, NULL, "Payload");
13941
13942
            /* Call the appropriate command dissector */
13943
0
            switch (cmd_id) {
13944
13945
0
                case ZBEE_ZCL_CMD_ID_EVENTS_GET_EVENT_LOG:
13946
0
                    dissect_zcl_events_get_event_log(tvb, payload_tree, &offset);
13947
0
                    break;
13948
13949
0
                case ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_REQUEST:
13950
0
                    dissect_zcl_events_clear_event_log_request(tvb, payload_tree, &offset);
13951
0
                    break;
13952
13953
0
                default:
13954
0
                    break;
13955
0
            }
13956
0
        }
13957
0
    }
13958
0
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
13959
        /* Append the command name to the info column. */
13960
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13961
0
            val_to_str_const(cmd_id, zbee_zcl_events_srv_tx_cmd_names, "Unknown Command"),
13962
0
            zcl->tran_seqno);
13963
13964
        /* Add the command ID. */
13965
0
        proto_tree_add_uint(tree, hf_zbee_zcl_events_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
13966
13967
        /* Check is this command has a payload, than add the payload tree */
13968
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
13969
0
        if (rem_len > 0) {
13970
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_events, NULL, "Payload");
13971
13972
            /* Call the appropriate command dissector */
13973
0
            switch (cmd_id) {
13974
13975
0
                case ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT:
13976
0
                    dissect_zcl_events_publish_event(tvb, payload_tree, &offset);
13977
0
                    break;
13978
13979
0
                case ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT_LOG:
13980
0
                    dissect_zcl_events_publish_event_log(tvb, payload_tree, &offset);
13981
0
                    break;
13982
13983
0
                case ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_RESPONSE:
13984
0
                    dissect_zcl_events_clear_event_log_response(tvb, payload_tree, &offset);
13985
0
                    break;
13986
13987
0
                default:
13988
0
                    break;
13989
0
            }
13990
0
        }
13991
0
    }
13992
13993
0
    return tvb_captured_length(tvb);
13994
0
} /*dissect_zbee_zcl_events*/
13995
13996
/**
13997
 *This function manages the Get Event Log payload
13998
 *
13999
 *@param tvb pointer to buffer containing raw packet.
14000
 *@param tree pointer to data tree Wireshark uses to display packet.
14001
 *@param offset pointer to offset from caller
14002
*/
14003
static void
14004
dissect_zcl_events_get_event_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14005
0
{
14006
    /* Event Control / Log ID */
14007
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_control_log_id, tvb, *offset, 1, ENC_NA);
14008
0
    *offset += 1;
14009
14010
    /* Event ID */
14011
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14012
0
    *offset += 2;
14013
14014
    /* Start Time */
14015
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14016
0
    *offset += 4;
14017
14018
    /* End Time */
14019
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14020
0
    *offset += 4;
14021
14022
    /* Number of Events */
14023
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_number_of_events, tvb, *offset, 1, ENC_NA);
14024
0
    *offset += 1;
14025
14026
    /* Event Offset */
14027
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_offset, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14028
0
    *offset += 2;
14029
0
} /*dissect_zcl_events_get_event_log*/
14030
14031
/**
14032
 *This function manages the Clear Event Log Request payload
14033
 *
14034
 *@param tvb pointer to buffer containing raw packet.
14035
 *@param tree pointer to data tree Wireshark uses to display packet.
14036
 *@param offset pointer to offset from caller
14037
*/
14038
static void
14039
dissect_zcl_events_clear_event_log_request(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14040
0
{
14041
    /* Log ID */
14042
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_clear_event_log_request_log_id, tvb, *offset, 1, ENC_NA);
14043
0
    *offset += 1;
14044
0
} /*dissect_zcl_events_clear_event_log_request*/
14045
14046
/**
14047
 *This function manages the Publish Event payload
14048
 *
14049
 *@param tvb pointer to buffer containing raw packet.
14050
 *@param tree pointer to data tree Wireshark uses to display packet.
14051
 *@param offset pointer to offset from caller
14052
*/
14053
static void
14054
dissect_zcl_events_publish_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14055
0
{
14056
0
    int         length;
14057
14058
0
    if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
14059
        /* Log ID - Introduced from ZCL version 1.2 */
14060
0
        proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_id, tvb, *offset, 1, ENC_NA);
14061
0
        *offset += 1;
14062
0
    }
14063
14064
    /* Event ID */
14065
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14066
0
    *offset += 2;
14067
14068
    /* Event Time */
14069
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14070
0
    *offset += 4;
14071
14072
    /* Event Control */
14073
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_control, tvb, *offset, 1, ENC_NA);
14074
0
    *offset += 1;
14075
14076
    /* Event Data */
14077
0
    proto_tree_add_item_ret_length(tree, hf_zbee_zcl_events_publish_event_event_data, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
14078
0
    *offset += length;
14079
0
} /*dissect_zcl_events_publish_event*/
14080
14081
/**
14082
 *This function manages the Publish Event Log payload
14083
 *
14084
 *@param tvb pointer to buffer containing raw packet.
14085
 *@param tree pointer to data tree Wireshark uses to display packet.
14086
 *@param offset pointer to offset from caller
14087
*/
14088
static void
14089
dissect_zcl_events_publish_event_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14090
0
{
14091
0
    proto_tree* event_log_tree;
14092
0
    int         length;
14093
14094
    /* Total Number of Matching Events */
14095
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14096
0
    *offset += 2;
14097
14098
    /* Command Index */
14099
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_command_index, tvb, *offset, 1, ENC_NA);
14100
0
    *offset += 1;
14101
14102
    /* Total Commands */
14103
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_total_commands, tvb, *offset, 1, ENC_NA);
14104
0
    *offset += 1;
14105
14106
    /* Number of Events / Log Payload Control */
14107
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control, tvb, *offset, 1, ENC_NA);
14108
0
    *offset += 1;
14109
14110
0
    for (int i = 0; tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT; i++) {
14111
        /* Add subtree */
14112
0
        event_log_tree = proto_tree_add_subtree_format(tree, tvb, *offset, 0, ett_zbee_zcl_events_publish_event_log_entry[i], NULL, "Event Log %d", i + 1);
14113
14114
0
        if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
14115
            /* Log ID - Introduced from ZCL version 1.2 */
14116
0
            proto_tree_add_item(event_log_tree, hf_zbee_zcl_events_publish_event_log_log_id, tvb, *offset, 1, ENC_NA);
14117
0
            *offset += 1;
14118
0
        }
14119
14120
        /* Event ID */
14121
0
        proto_item_append_text(event_log_tree, ", Event ID: 0x%04x", tvb_get_uint16(tvb, *offset, ENC_LITTLE_ENDIAN));
14122
0
        proto_tree_add_item(event_log_tree, hf_zbee_zcl_events_publish_event_log_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14123
0
        *offset += 2;
14124
14125
        /* Event Time */
14126
0
        proto_tree_add_item(event_log_tree, hf_zbee_zcl_events_publish_event_log_event_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14127
0
        *offset += 4;
14128
14129
        /* Event Data */
14130
0
        proto_tree_add_item_ret_length(event_log_tree, hf_zbee_zcl_events_publish_event_log_event_data, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
14131
0
        *offset += length;
14132
14133
        /* Set length of subtree */
14134
0
        proto_item_set_end(proto_tree_get_parent(event_log_tree), tvb, *offset);
14135
0
    }
14136
0
} /*dissect_zcl_events_publish_event_log*/
14137
14138
/**
14139
 *This function manages the Clear Event Log Response payload
14140
 *
14141
 *@param tvb pointer to buffer containing raw packet.
14142
 *@param tree pointer to data tree Wireshark uses to display packet.
14143
 *@param offset pointer to offset from caller
14144
*/
14145
static void
14146
dissect_zcl_events_clear_event_log_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14147
0
{
14148
    /* Cleared Event Logs */
14149
0
    proto_tree_add_item(tree, hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs, tvb, *offset, 1, ENC_NA);
14150
0
    *offset += 1;
14151
0
} /*dissect_zcl_events_clear_event_log_response*/
14152
14153
/**
14154
 *This function registers the ZCL Events dissector
14155
 *
14156
*/
14157
void
14158
proto_register_zbee_zcl_events(void)
14159
15
{
14160
15
    static hf_register_info hf[] = {
14161
14162
15
        { &hf_zbee_zcl_events_srv_tx_cmd_id,
14163
15
            { "Command", "zbee_zcl_se.events.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_events_srv_tx_cmd_names),
14164
15
            0x00, NULL, HFILL } },
14165
14166
15
        { &hf_zbee_zcl_events_srv_rx_cmd_id,
14167
15
            { "Command", "zbee_zcl_se.events.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_events_srv_rx_cmd_names),
14168
15
            0x00, NULL, HFILL } },
14169
14170
15
        { &hf_zbee_zcl_events_get_event_log_event_control_log_id,
14171
15
            { "Event Control / Log ID", "zbee_zcl_se.events.get_event_log.event_control_log_id", FT_UINT8, BASE_HEX, NULL,
14172
15
            0x00, NULL, HFILL } },
14173
14174
15
        { &hf_zbee_zcl_events_get_event_log_event_id,
14175
15
            { "Event ID", "zbee_zcl_se.events.get_event_log.event_id", FT_UINT16, BASE_HEX, NULL,
14176
15
            0x00, NULL, HFILL } },
14177
14178
15
        { &hf_zbee_zcl_events_get_event_log_start_time,
14179
15
            { "Start Time", "zbee_zcl_se.events.get_event_log.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14180
15
            0x00, NULL, HFILL } },
14181
14182
15
        { &hf_zbee_zcl_events_get_event_log_end_time,
14183
15
            { "End Time", "zbee_zcl_se.events.get_event_log.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14184
15
            0x00, NULL, HFILL } },
14185
14186
15
        { &hf_zbee_zcl_events_get_event_log_number_of_events,
14187
15
            { "Number of Events", "zbee_zcl_se.events.get_event_log.number_of_events", FT_UINT8, BASE_DEC, NULL,
14188
15
            0x00, NULL, HFILL } },
14189
14190
15
        { &hf_zbee_zcl_events_get_event_log_event_offset,
14191
15
            { "Event Offset", "zbee_zcl_se.events.get_event_log.event_offset", FT_UINT16, BASE_DEC, NULL,
14192
15
            0x00, NULL, HFILL } },
14193
14194
15
        { &hf_zbee_zcl_events_clear_event_log_request_log_id,
14195
15
            { "Log ID", "zbee_zcl_se.events.clear_event_log_request.log_id", FT_UINT8, BASE_HEX, NULL,
14196
15
            0x00, NULL, HFILL } },
14197
14198
15
        { &hf_zbee_zcl_events_publish_event_log_id,
14199
15
            { "Log ID", "zbee_zcl_se.events.publish_event.log_id", FT_UINT8, BASE_HEX, NULL,
14200
15
            0x00, NULL, HFILL } },
14201
14202
15
        { &hf_zbee_zcl_events_publish_event_event_id,
14203
15
            { "Event ID", "zbee_zcl_se.events.publish_event.event_id", FT_UINT16, BASE_HEX, NULL,
14204
15
            0x00, NULL, HFILL } },
14205
14206
15
        { &hf_zbee_zcl_events_publish_event_event_time,
14207
15
            { "Event Time", "zbee_zcl_se.events.publish_event.event_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14208
15
            0x00, NULL, HFILL } },
14209
14210
15
        { &hf_zbee_zcl_events_publish_event_event_control,
14211
15
            { "Event Control", "zbee_zcl_se.events.publish_event.event_control", FT_UINT8, BASE_HEX, NULL,
14212
15
            0x00, NULL, HFILL } },
14213
14214
15
        { &hf_zbee_zcl_events_publish_event_event_data,
14215
15
            { "Event Data", "zbee_zcl_se.events.publish_event.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
14216
15
            0x00, NULL, HFILL } },
14217
14218
15
        { &hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events,
14219
15
            { "Total Number of Matching Events", "zbee_zcl_se.events.publish_event_log.matching_events", FT_UINT16, BASE_DEC, NULL,
14220
15
            0x00, NULL, HFILL } },
14221
14222
15
        { &hf_zbee_zcl_events_publish_event_log_command_index,
14223
15
            { "Command Index", "zbee_zcl_se.events.publish_event_log.command_index", FT_UINT8, BASE_DEC, NULL,
14224
15
            0x00, NULL, HFILL } },
14225
14226
15
        { &hf_zbee_zcl_events_publish_event_log_total_commands,
14227
15
            { "Total Commands", "zbee_zcl_se.events.publish_event_log.total_commands", FT_UINT8, BASE_DEC, NULL,
14228
15
            0x00, NULL, HFILL } },
14229
14230
15
        { &hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control,
14231
15
            { "Number of Events / Log Payload Control", "zbee_zcl_se.events.publish_event_log.number_of_events_log_payload_control", FT_UINT8, BASE_HEX, NULL,
14232
15
            0x00, NULL, HFILL } },
14233
14234
15
        { &hf_zbee_zcl_events_publish_event_log_log_id,
14235
15
            { "Log ID", "zbee_zcl_se.events.publish_event_log.log_id", FT_UINT8, BASE_HEX, NULL,
14236
15
            0x00, NULL, HFILL } },
14237
14238
15
        { &hf_zbee_zcl_events_publish_event_log_event_id,
14239
15
            { "Event ID", "zbee_zcl_se.events.publish_event_log.event_id", FT_UINT16, BASE_HEX, NULL,
14240
15
            0x00, NULL, HFILL } },
14241
14242
15
        { &hf_zbee_zcl_events_publish_event_log_event_time,
14243
15
            { "Event Time", "zbee_zcl_se.events.publish_event_log.event_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14244
15
            0x00, NULL, HFILL } },
14245
14246
15
        { &hf_zbee_zcl_events_publish_event_log_event_data,
14247
15
            { "Event Data", "zbee_zcl_se.events.publish_event_log.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
14248
15
            0x00, NULL, HFILL } },
14249
14250
15
        { &hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs,
14251
15
            { "Cleared Event Logs", "zbee_zcl_se.events.clear_event_log_response.cleared_event_logs", FT_UINT8, BASE_HEX, NULL,
14252
15
            0x00, NULL, HFILL } },
14253
14254
15
    };
14255
14256
    /* ZCL Events subtrees */
14257
15
    int *ett[ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT];
14258
15
    ett[0] = &ett_zbee_zcl_events;
14259
14260
15
    unsigned j = ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT;
14261
14262
    /* Initialize Publish Event Log subtrees */
14263
1.51k
    for (unsigned i = 0; i < ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT; i++, j++) {
14264
1.50k
        ett[j] = &ett_zbee_zcl_events_publish_event_log_entry[i];
14265
1.50k
    }
14266
14267
    /* Register the ZigBee ZCL Events cluster protocol name and description */
14268
15
    proto_zbee_zcl_events = proto_register_protocol("ZigBee ZCL Events", "ZCL Events", ZBEE_PROTOABBREV_ZCL_EVENTS);
14269
15
    proto_register_field_array(proto_zbee_zcl_events, hf, array_length(hf));
14270
15
    proto_register_subtree_array(ett, array_length(ett));
14271
14272
    /* Register the ZigBee ZCL Events dissector. */
14273
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_EVENTS, dissect_zbee_zcl_events, proto_zbee_zcl_events);
14274
15
} /*proto_register_zbee_zcl_events*/
14275
14276
/**
14277
 *Hands off the ZCL Events dissector.
14278
 *
14279
*/
14280
void
14281
proto_reg_handoff_zbee_zcl_events(void)
14282
15
{
14283
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_EVENTS,
14284
15
                            proto_zbee_zcl_events,
14285
15
                            ett_zbee_zcl_events,
14286
15
                            ZBEE_ZCL_CID_EVENTS,
14287
15
                            ZBEE_MFG_CODE_NONE,
14288
15
                            -1, -1,
14289
15
                            hf_zbee_zcl_events_srv_rx_cmd_id,
14290
15
                            hf_zbee_zcl_events_srv_tx_cmd_id,
14291
15
                            NULL
14292
15
                         );
14293
15
} /*proto_reg_handoff_zbee_zcl_events*/
14294
14295
/* ########################################################################## */
14296
/* #### (0x070A) MDU PAIRING CLUSTER ############################################ */
14297
/* ########################################################################## */
14298
14299
/* Attributes - None */
14300
14301
/* Server Commands Received */
14302
#define zbee_zcl_mdu_pairing_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14303
    XXX(ZBEE_ZCL_CMD_ID_MDU_PAIRING_REQUEST,    0x00, "Pairing Request" )
14304
14305
VALUE_STRING_ENUM(zbee_zcl_mdu_pairing_srv_rx_cmd_names);
14306
VALUE_STRING_ARRAY(zbee_zcl_mdu_pairing_srv_rx_cmd_names);
14307
14308
/* Server Commands Generated */
14309
#define zbee_zcl_mdu_pairing_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14310
    XXX(ZBEE_ZCL_CMD_ID_MDU_PAIRING_RESPONSE,   0x00, "Pairing Response" )
14311
14312
VALUE_STRING_ENUM(zbee_zcl_mdu_pairing_srv_tx_cmd_names);
14313
VALUE_STRING_ARRAY(zbee_zcl_mdu_pairing_srv_tx_cmd_names);
14314
14315
/*************************/
14316
/* Function Declarations */
14317
/*************************/
14318
void proto_register_zbee_zcl_mdu_pairing(void);
14319
void proto_reg_handoff_zbee_zcl_mdu_pairing(void);
14320
14321
/* Command Dissector Helpers */
14322
static void dissect_zcl_mdu_pairing_request (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14323
static void dissect_zcl_mdu_pairing_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14324
14325
/*************************/
14326
/* Global Variables      */
14327
/*************************/
14328
14329
/* Initialize the protocol and registered fields */
14330
static int proto_zbee_zcl_mdu_pairing;
14331
14332
static int hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id;
14333
static int hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id;
14334
static int hf_zbee_zcl_mdu_pairing_info_version;
14335
static int hf_zbee_zcl_mdu_pairing_total_devices_number;
14336
static int hf_zbee_zcl_mdu_pairing_cmd_id;
14337
static int hf_zbee_zcl_mdu_pairing_total_commands_number;
14338
static int hf_zbee_zcl_mdu_pairing_device_eui64;
14339
static int hf_zbee_zcl_mdu_pairing_local_info_version;
14340
static int hf_zbee_zcl_mdu_pairing_requesting_device_eui64;
14341
14342
/* Initialize the subtree pointers */
14343
static int ett_zbee_zcl_mdu_pairing;
14344
14345
/*************************/
14346
/* Function Bodies       */
14347
/*************************/
14348
14349
/**
14350
 *ZigBee ZCL MDU Pairing cluster dissector for wireshark.
14351
 *
14352
 *@param tvb pointer to buffer containing raw packet.
14353
 *@param pinfo pointer to packet information fields
14354
 *@param tree pointer to data tree Wireshark uses to display packet.
14355
*/
14356
static int
14357
dissect_zbee_zcl_mdu_pairing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14358
3
{
14359
3
    proto_tree        *payload_tree;
14360
3
    zbee_zcl_packet   *zcl;
14361
3
    unsigned          offset = 0;
14362
3
    uint8_t           cmd_id;
14363
3
    int               rem_len;
14364
14365
    /* Reject the packet if data is NULL */
14366
3
    if (data == NULL)
14367
0
        return 0;
14368
3
    zcl = (zbee_zcl_packet *)data;
14369
3
    cmd_id = zcl->cmd_id;
14370
14371
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
14372
3
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
14373
        /* Append the command name to the info column. */
14374
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14375
0
            val_to_str_const(cmd_id, zbee_zcl_mdu_pairing_srv_rx_cmd_names, "Unknown Command"),
14376
0
            zcl->tran_seqno);
14377
14378
        /* Add the command ID. */
14379
0
        proto_tree_add_uint(tree, hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
14380
14381
        /* Check is this command has a payload, than add the payload tree */
14382
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
14383
0
        if (rem_len > 0) {
14384
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_mdu_pairing, NULL, "Payload");
14385
14386
            /* Call the appropriate command dissector */
14387
0
            switch (cmd_id) {
14388
14389
0
                case ZBEE_ZCL_CMD_ID_MDU_PAIRING_REQUEST:
14390
0
                    dissect_zcl_mdu_pairing_request(tvb, payload_tree, &offset);
14391
0
                    break;
14392
14393
0
                default:
14394
0
                    break;
14395
0
            }
14396
0
        }
14397
0
    }
14398
3
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
14399
        /* Append the command name to the info column. */
14400
3
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14401
3
            val_to_str_const(cmd_id, zbee_zcl_mdu_pairing_srv_tx_cmd_names, "Unknown Command"),
14402
3
            zcl->tran_seqno);
14403
14404
        /* Add the command ID. */
14405
3
        proto_tree_add_uint(tree, hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
14406
14407
        /* Check is this command has a payload, than add the payload tree */
14408
3
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
14409
3
        if (rem_len > 0) {
14410
3
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_mdu_pairing, NULL, "Payload");
14411
14412
            /* Call the appropriate command dissector */
14413
3
            switch (cmd_id) {
14414
14415
3
                case ZBEE_ZCL_CMD_ID_MDU_PAIRING_RESPONSE:
14416
3
                    dissect_zcl_mdu_pairing_response(tvb, payload_tree, &offset);
14417
3
                    break;
14418
14419
0
                default:
14420
0
                    break;
14421
3
            }
14422
3
        }
14423
3
    }
14424
14425
3
    return tvb_captured_length(tvb);
14426
3
} /*dissect_zbee_zcl_mdu_pairing*/
14427
14428
/**
14429
 *This function manages the Pairing Request payload
14430
 *
14431
 *@param tvb pointer to buffer containing raw packet.
14432
 *@param tree pointer to data tree Wireshark uses to display packet.
14433
 *@param offset pointer to offset from caller
14434
*/
14435
static void
14436
dissect_zcl_mdu_pairing_request(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14437
0
{
14438
    /* Local pairing information version */
14439
0
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_local_info_version, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
14440
0
    *offset += 4;
14441
14442
    /* EUI64 of Requesting Device */
14443
0
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_requesting_device_eui64, tvb, *offset, 8, ENC_LITTLE_ENDIAN);
14444
0
    *offset += 8;
14445
0
} /*dissect_zcl_mdu_pairing_request*/
14446
14447
/**
14448
 *This function manages the Pairing Response payload
14449
 *
14450
 *@param tvb pointer to buffer containing raw packet.
14451
 *@param tree pointer to data tree Wireshark uses to display packet.
14452
 *@param offset pointer to offset from caller
14453
*/
14454
static void
14455
dissect_zcl_mdu_pairing_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14456
3
{
14457
3
    uint8_t devices_num;
14458
14459
    /* Pairing information version */
14460
3
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_info_version, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
14461
3
    *offset += 4;
14462
14463
    /* Total Number of Devices */
14464
3
    devices_num = tvb_get_uint8(tvb, *offset);
14465
3
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_total_devices_number, tvb, *offset, 1, ENC_NA);
14466
3
    *offset += 1;
14467
14468
    /* Command index */
14469
3
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_cmd_id, tvb, *offset, 1, ENC_NA);
14470
3
    *offset += 1;
14471
14472
    /* Total Number of Commands */
14473
3
    proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_total_commands_number, tvb, *offset, 1, ENC_NA);
14474
3
    *offset += 1;
14475
14476
    /* EUI64 of Devices */
14477
9
    for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 8 && i < devices_num; i++) {
14478
        /* EUI64 of Device i */
14479
6
        proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_device_eui64, tvb, *offset, 8, ENC_LITTLE_ENDIAN);
14480
6
        *offset += 8;
14481
6
    }
14482
3
} /*dissect_zcl_mdu_pairing_response*/
14483
14484
/**
14485
 *This function registers the ZCL MDU Pairing dissector
14486
 *
14487
*/
14488
void
14489
proto_register_zbee_zcl_mdu_pairing(void)
14490
15
{
14491
15
    static hf_register_info hf[] = {
14492
14493
15
        { &hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id,
14494
15
            { "Command", "zbee_zcl_se.mdu_pairing.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_mdu_pairing_srv_tx_cmd_names),
14495
15
            0x00, NULL, HFILL } },
14496
14497
15
        { &hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id,
14498
15
            { "Command", "zbee_zcl_se.mdu_pairing.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_mdu_pairing_srv_rx_cmd_names),
14499
15
            0x00, NULL, HFILL } },
14500
14501
15
        { &hf_zbee_zcl_mdu_pairing_info_version,
14502
15
            { "Pairing information version", "zbee_zcl_se.mdu_pairing.info_version", FT_UINT32, BASE_DEC, NULL,
14503
15
            0x0, NULL, HFILL } },
14504
14505
15
        { &hf_zbee_zcl_mdu_pairing_total_devices_number,
14506
15
            { "Total Number of Devices", "zbee_zcl_se.mdu_pairing.total_devices_number", FT_UINT8, BASE_DEC, NULL,
14507
15
            0x0, NULL, HFILL } },
14508
14509
15
        { &hf_zbee_zcl_mdu_pairing_cmd_id,
14510
15
            { "Command Index", "zbee_zcl_se.mdu_pairing.command_index", FT_UINT8, BASE_HEX, NULL,
14511
15
            0x0, NULL, HFILL } },
14512
14513
15
        { &hf_zbee_zcl_mdu_pairing_total_commands_number,
14514
15
            { "Total Number of Commands", "zbee_zcl_se.mdu_pairing.total_commands_number", FT_UINT8, BASE_DEC, NULL,
14515
15
            0x0, NULL, HFILL } },
14516
14517
15
        { &hf_zbee_zcl_mdu_pairing_device_eui64,
14518
15
            { "Device EUI64", "zbee_zcl_se.mdu_pairing.device_eui64", FT_EUI64, BASE_NONE, NULL,
14519
15
            0x0, NULL, HFILL } },
14520
14521
15
        { &hf_zbee_zcl_mdu_pairing_local_info_version,
14522
15
            { "Local Pairing Information Version", "zbee_zcl_se.mdu_pairing.local_info_version", FT_UINT32, BASE_DEC, NULL,
14523
15
            0x0, NULL, HFILL } },
14524
14525
15
        { &hf_zbee_zcl_mdu_pairing_requesting_device_eui64,
14526
15
            { "EUI64 of Requesting Device", "zbee_zcl_se.mdu_pairing.requesting_device_eui64",  FT_EUI64, BASE_NONE, NULL,
14527
15
            0x0, NULL, HFILL } },
14528
15
    };
14529
14530
    /* ZCL MDU Pairing subtrees */
14531
15
    int *ett[] = {
14532
15
        &ett_zbee_zcl_mdu_pairing
14533
15
    };
14534
14535
    /* Register the ZigBee ZCL MDU Pairing cluster protocol name and description */
14536
15
    proto_zbee_zcl_mdu_pairing = proto_register_protocol("ZigBee ZCL MDU Pairing", "ZCL MDU Pairing", ZBEE_PROTOABBREV_ZCL_MDU_PAIRING);
14537
15
    proto_register_field_array(proto_zbee_zcl_mdu_pairing, hf, array_length(hf));
14538
15
    proto_register_subtree_array(ett, array_length(ett));
14539
14540
    /* Register the ZigBee ZCL MDU Pairing dissector. */
14541
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_MDU_PAIRING, dissect_zbee_zcl_mdu_pairing, proto_zbee_zcl_mdu_pairing);
14542
15
} /*proto_register_zbee_zcl_mdu_pairing*/
14543
14544
/**
14545
 *Hands off the ZCL MDU Pairing dissector.
14546
 *
14547
*/
14548
void
14549
proto_reg_handoff_zbee_zcl_mdu_pairing(void)
14550
15
{
14551
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_MDU_PAIRING,
14552
15
                            proto_zbee_zcl_mdu_pairing,
14553
15
                            ett_zbee_zcl_mdu_pairing,
14554
15
                            ZBEE_ZCL_CID_MDU_PAIRING,
14555
15
                            ZBEE_MFG_CODE_NONE,
14556
15
                            -1, -1,
14557
15
                            hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id,
14558
15
                            hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id,
14559
15
                            NULL
14560
15
                         );
14561
15
} /*proto_reg_handoff_zbee_zcl_mdu_pairing*/
14562
14563
/* ########################################################################## */
14564
/* #### (0x070B) SUB-GHZ CLUSTER ############################################ */
14565
/* ########################################################################## */
14566
14567
/* Attributes */
14568
#define zbee_zcl_sub_ghz_attr_names_VALUE_STRING_LIST(XXX) \
14569
    XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_CHANNEL_CHANGE,                0x0000, "Channel Change" ) \
14570
    XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_28_CHANNEL_MASK,          0x0001, "Page 28 Channel Mask" ) \
14571
    XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_29_CHANNEL_MASK,          0x0002, "Page 29 Channel Mask" ) \
14572
    XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_30_CHANNEL_MASK,          0x0003, "Page 30 Channel Mask" ) \
14573
    XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_31_CHANNEL_MASK,          0x0004, "Page 31 Channel Mask" ) \
14574
    XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_SUB_GHZ,         0xFFFE, "Attribute Reporting Status" )
14575
14576
VALUE_STRING_ENUM(zbee_zcl_sub_ghz_attr_names);
14577
VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_attr_names);
14578
14579
/* Server Commands Received */
14580
#define zbee_zcl_sub_ghz_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14581
    XXX(ZBEE_ZCL_CMD_ID_SUB_GHZ_GET_SUSPEND_ZCL_MESSAGES_STATUS,  0x00, "Get Suspend ZCL Messages Status" )
14582
14583
VALUE_STRING_ENUM(zbee_zcl_sub_ghz_srv_rx_cmd_names);
14584
VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_srv_rx_cmd_names);
14585
14586
/* Server Commands Generated */
14587
#define zbee_zcl_sub_ghz_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14588
    XXX(ZBEE_ZCL_CMD_ID_SUB_GHZ_SUSPEND_ZCL_MESSAGES,             0x00, "Suspend ZCL Messages" )
14589
14590
VALUE_STRING_ENUM(zbee_zcl_sub_ghz_srv_tx_cmd_names);
14591
VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_srv_tx_cmd_names);
14592
14593
/*************************/
14594
/* Function Declarations */
14595
/*************************/
14596
void proto_register_zbee_zcl_sub_ghz(void);
14597
void proto_reg_handoff_zbee_zcl_sub_ghz(void);
14598
14599
/* Command Dissector Helpers */
14600
static void dissect_zcl_sub_ghz_suspend_zcl_messages(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14601
14602
/*************************/
14603
/* Global Variables      */
14604
/*************************/
14605
14606
/* Initialize the protocol and registered fields */
14607
static int proto_zbee_zcl_sub_ghz;
14608
14609
static int hf_zbee_zcl_sub_ghz_srv_tx_cmd_id;
14610
static int hf_zbee_zcl_sub_ghz_srv_rx_cmd_id;
14611
static int hf_zbee_zcl_sub_ghz_attr_id;
14612
static int hf_zbee_zcl_sub_ghz_attr_reporting_status;
14613
static int hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period;
14614
14615
/* Initialize the subtree pointers */
14616
static int ett_zbee_zcl_sub_ghz;
14617
14618
/*************************/
14619
/* Function Bodies       */
14620
/*************************/
14621
14622
/**
14623
 *This function is called by ZCL foundation dissector in order to decode
14624
 *
14625
 *@param tree pointer to data tree Wireshark uses to display packet.
14626
 *@param tvb pointer to buffer containing raw packet.
14627
 *@param offset pointer to buffer offset
14628
 *@param attr_id attribute identifier
14629
 *@param data_type attribute data type
14630
 *@param client_attr ZCL client
14631
*/
14632
static void
14633
dissect_zcl_sub_ghz_attr_data(proto_tree *tree, packet_info* pinfo, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
14634
0
{
14635
    /* Dissect attribute data type and data */
14636
0
    switch (attr_id) {
14637
        /* applies to all SE clusters */
14638
0
        case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_SUB_GHZ:
14639
0
            proto_tree_add_item(tree, hf_zbee_zcl_sub_ghz_attr_reporting_status, tvb, *offset, 1, ENC_NA);
14640
0
            *offset += 1;
14641
0
            break;
14642
14643
0
        case ZBEE_ZCL_ATTR_ID_SUB_GHZ_CHANNEL_CHANGE:
14644
0
        case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_28_CHANNEL_MASK:
14645
0
        case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_29_CHANNEL_MASK:
14646
0
        case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_30_CHANNEL_MASK:
14647
0
        case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_31_CHANNEL_MASK:
14648
0
        default: /* Catch all */
14649
0
            dissect_zcl_attr_data(tvb, pinfo, tree, offset, data_type, client_attr);
14650
0
            break;
14651
0
    }
14652
0
} /*dissect_zcl_sub_ghz_attr_data*/
14653
14654
14655
/**
14656
 *ZigBee ZCL Sub-Ghz cluster dissector for wireshark.
14657
 *
14658
 *@param tvb pointer to buffer containing raw packet.
14659
 *@param pinfo pointer to packet information fields
14660
 *@param tree pointer to data tree Wireshark uses to display packet.
14661
*/
14662
static int
14663
dissect_zbee_zcl_sub_ghz(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14664
0
{
14665
0
    proto_tree        *payload_tree;
14666
0
    zbee_zcl_packet   *zcl;
14667
0
    unsigned          offset = 0;
14668
0
    uint8_t           cmd_id;
14669
0
    int               rem_len;
14670
14671
    /* Reject the packet if data is NULL */
14672
0
    if (data == NULL)
14673
0
        return 0;
14674
0
    zcl = (zbee_zcl_packet *)data;
14675
0
    cmd_id = zcl->cmd_id;
14676
14677
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
14678
0
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
14679
        /* Append the command name to the info column. */
14680
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14681
0
            val_to_str_const(cmd_id, zbee_zcl_sub_ghz_srv_rx_cmd_names, "Unknown Command"),
14682
0
            zcl->tran_seqno);
14683
14684
        /* Add the command ID. */
14685
0
        proto_tree_add_uint(tree, hf_zbee_zcl_sub_ghz_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
14686
14687
        /* Check is this command has a payload, than add the payload tree */
14688
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
14689
0
        if (rem_len > 0) {
14690
0
            /* payload_tree = */proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_sub_ghz, NULL, "Payload");
14691
14692
            /* Call the appropriate command dissector */
14693
0
            switch (cmd_id) {
14694
14695
0
                case ZBEE_ZCL_CMD_ID_SUB_GHZ_GET_SUSPEND_ZCL_MESSAGES_STATUS:
14696
                    /* No Payload */
14697
0
                    break;
14698
14699
0
                default:
14700
0
                    break;
14701
0
            }
14702
0
        }
14703
0
    }
14704
0
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
14705
        /* Append the command name to the info column. */
14706
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14707
0
            val_to_str_const(cmd_id, zbee_zcl_sub_ghz_srv_tx_cmd_names, "Unknown Command"),
14708
0
            zcl->tran_seqno);
14709
14710
        /* Add the command ID. */
14711
0
        proto_tree_add_uint(tree, hf_zbee_zcl_sub_ghz_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
14712
14713
        /* Check is this command has a payload, than add the payload tree */
14714
0
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
14715
0
        if (rem_len > 0) {
14716
0
            payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_sub_ghz, NULL, "Payload");
14717
14718
            /* Call the appropriate command dissector */
14719
0
            switch (cmd_id) {
14720
14721
0
                case ZBEE_ZCL_CMD_ID_SUB_GHZ_SUSPEND_ZCL_MESSAGES:
14722
0
                    dissect_zcl_sub_ghz_suspend_zcl_messages(tvb, payload_tree, &offset);
14723
0
                    break;
14724
14725
0
                default:
14726
0
                    break;
14727
0
            }
14728
0
        }
14729
0
    }
14730
14731
0
    return tvb_captured_length(tvb);
14732
0
} /*dissect_zbee_zcl_sub_ghz*/
14733
14734
/**
14735
 *This function manages the Suspend ZCL Messages payload
14736
 *
14737
 *@param tvb pointer to buffer containing raw packet.
14738
 *@param tree pointer to data tree Wireshark uses to display packet.
14739
 *@param offset pointer to offset from caller
14740
*/
14741
static void
14742
dissect_zcl_sub_ghz_suspend_zcl_messages(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14743
0
{
14744
    /* (Optional) Suspension Period */
14745
0
    if (tvb_reported_length_remaining(tvb, *offset) > 0) {
14746
0
        proto_tree_add_item(tree, hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period, tvb, *offset, 1, ENC_NA);
14747
0
        *offset += 1;
14748
0
    }
14749
0
} /*dissect_zcl_sub_ghz_suspend_zcl_messages*/
14750
14751
/**
14752
 *This function registers the ZCL Sub-Ghz dissector
14753
 *
14754
*/
14755
void
14756
proto_register_zbee_zcl_sub_ghz(void)
14757
15
{
14758
15
    static hf_register_info hf[] = {
14759
14760
15
        { &hf_zbee_zcl_sub_ghz_attr_id,
14761
15
            { "Attribute", "zbee_zcl_se.sub_ghz.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_sub_ghz_attr_names),
14762
15
            0x0, NULL, HFILL } },
14763
14764
15
        { &hf_zbee_zcl_sub_ghz_attr_reporting_status,                         /* common to all SE clusters */
14765
15
            { "Attribute Reporting Status", "zbee_zcl_se.sub_ghz.attr.attr_reporting_status",
14766
15
            FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
14767
14768
15
        { &hf_zbee_zcl_sub_ghz_srv_tx_cmd_id,
14769
15
            { "Command", "zbee_zcl_se.sub_ghz.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_sub_ghz_srv_tx_cmd_names),
14770
15
            0x00, NULL, HFILL } },
14771
14772
15
        { &hf_zbee_zcl_sub_ghz_srv_rx_cmd_id,
14773
15
            { "Command", "zbee_zcl_se.sub_ghz.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_sub_ghz_srv_rx_cmd_names),
14774
15
            0x00, NULL, HFILL } },
14775
14776
15
        { &hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period,
14777
15
            { "ZCL Messages Suspension Period", "zbee_zcl_se.sub_ghz.zcl_messages_suspension_period", FT_UINT8, BASE_DEC, NULL,
14778
15
            0x0, NULL, HFILL } },
14779
15
    };
14780
14781
    /* ZCL Sub-Ghz subtrees */
14782
15
    int *ett[] = {
14783
15
        &ett_zbee_zcl_sub_ghz
14784
15
    };
14785
14786
    /* Register the ZigBee ZCL Sub-Ghz cluster protocol name and description */
14787
15
    proto_zbee_zcl_sub_ghz = proto_register_protocol("ZigBee ZCL Sub-Ghz", "ZCL Sub-Ghz", ZBEE_PROTOABBREV_ZCL_SUB_GHZ);
14788
15
    proto_register_field_array(proto_zbee_zcl_sub_ghz, hf, array_length(hf));
14789
15
    proto_register_subtree_array(ett, array_length(ett));
14790
14791
    /* Register the ZigBee ZCL Sub-Ghz dissector. */
14792
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_SUB_GHZ, dissect_zbee_zcl_sub_ghz, proto_zbee_zcl_sub_ghz);
14793
15
} /*proto_register_zbee_zcl_sub_ghz*/
14794
14795
/**
14796
 *Hands off the ZCL Sub-Ghz dissector.
14797
 *
14798
*/
14799
void
14800
proto_reg_handoff_zbee_zcl_sub_ghz(void)
14801
15
{
14802
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_SUB_GHZ,
14803
15
                            proto_zbee_zcl_sub_ghz,
14804
15
                            ett_zbee_zcl_sub_ghz,
14805
15
                            ZBEE_ZCL_CID_SUB_GHZ,
14806
15
                            ZBEE_MFG_CODE_NONE,
14807
15
                            hf_zbee_zcl_sub_ghz_attr_id,
14808
15
                            -1,
14809
15
                            hf_zbee_zcl_sub_ghz_srv_rx_cmd_id,
14810
15
                            hf_zbee_zcl_sub_ghz_srv_tx_cmd_id,
14811
15
                            dissect_zcl_sub_ghz_attr_data
14812
15
                         );
14813
15
} /*proto_reg_handoff_zbee_zcl_sub_ghz*/
14814
14815
/* ########################################################################## */
14816
/* #### (0x0800) KEY ESTABLISHMENT ########################################## */
14817
/* ########################################################################## */
14818
14819
/*************************/
14820
/* Defines               */
14821
/*************************/
14822
14823
15
#define ZBEE_ZCL_KE_USAGE_KEY_AGREEMENT                         0x08
14824
15
#define ZBEE_ZCL_KE_USAGE_DIGITAL_SIGNATURE                     0x80
14825
14826
/* Attributes */
14827
#define zbee_zcl_ke_attr_names_VALUE_STRING_LIST(XXX) \
14828
    XXX(ZBEE_ZCL_ATTR_ID_KE_SUITE,                              0x0000, "Supported Key Establishment Suites" )
14829
14830
VALUE_STRING_ARRAY(zbee_zcl_ke_attr_names);
14831
14832
/* Server Commands Received */
14833
#define zbee_zcl_ke_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14834
    XXX(ZBEE_ZCL_CMD_ID_KE_INITIATE_REQ,                        0x00, "Initiate Key Establishment Request" ) \
14835
    XXX(ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_REQ,                       0x01, "Ephemeral Data Request" ) \
14836
    XXX(ZBEE_ZCL_CMD_ID_KE_CONFIRM_REQ,                         0x02, "Confirm Key Data Request" ) \
14837
    XXX(ZBEE_ZCL_CMD_ID_KE_CLNT_TERMINATE,                      0x03, "Terminate Key Establishment" )
14838
14839
VALUE_STRING_ENUM(zbee_zcl_ke_srv_rx_cmd_names);
14840
VALUE_STRING_ARRAY(zbee_zcl_ke_srv_rx_cmd_names);
14841
14842
/* Server Commands Generated */
14843
#define zbee_zcl_ke_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14844
    XXX(ZBEE_ZCL_CMD_ID_KE_INITIATE_RSP,                        0x00, "Initiate Key Establishment Response" ) \
14845
    XXX(ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_RSP,                       0x01, "Ephemeral Data Response" ) \
14846
    XXX(ZBEE_ZCL_CMD_ID_KE_CONFIRM_RSP,                         0x02, "Confirm Key Data Response" ) \
14847
    XXX(ZBEE_ZCL_CMD_ID_KE_SRV_TERMINATE,                       0x03, "Terminate Key Establishment" )
14848
14849
VALUE_STRING_ENUM(zbee_zcl_ke_srv_tx_cmd_names);
14850
VALUE_STRING_ARRAY(zbee_zcl_ke_srv_tx_cmd_names);
14851
14852
/* Suite Names */
14853
#define zbee_zcl_ke_suite_names_VALUE_STRING_LIST(XXX) \
14854
    XXX(ZBEE_ZCL_KE_SUITE_1,                                    0x0001, "Crypto Suite 1 (CBKE K163)" ) \
14855
    XXX(ZBEE_ZCL_KE_SUITE_2,                                    0x0002, "Crypto Suite 2 (CBKE K283)" )
14856
14857
VALUE_STRING_ENUM(zbee_zcl_ke_suite_names);
14858
VALUE_STRING_ARRAY(zbee_zcl_ke_suite_names);
14859
14860
/* Crypto Suite 2 Type Names */
14861
#define zbee_zcl_ke_type_names_VALUE_STRING_LIST(XXX) \
14862
    XXX(ZBEE_ZCL_KE_TYPE_NO_EXT,                                0x00, "No Extensions" )
14863
14864
VALUE_STRING_ARRAY(zbee_zcl_ke_type_names);
14865
14866
/* Crypto Suite 2 Curve Names */
14867
#define zbee_zcl_ke_curve_names_VALUE_STRING_LIST(XXX) \
14868
    XXX(ZBEE_ZCL_KE_CURVE_SECT283K1,                            0x0D, "sect283k1" )
14869
14870
VALUE_STRING_ARRAY(zbee_zcl_ke_curve_names);
14871
14872
/* Crypto Suite 2 Hash Names */
14873
#define zbee_zcl_ke_hash_names_VALUE_STRING_LIST(XXX) \
14874
    XXX(ZBEE_ZCL_KE_HASH_AES_MMO,                               0x08, "AES MMO" )
14875
14876
VALUE_STRING_ARRAY(zbee_zcl_ke_hash_names);
14877
14878
#define zbee_zcl_ke_status_names_VALUE_STRING_LIST(XXX) \
14879
    XXX(ZBEE_ZCL_KE_STATUS_RESERVED,                            0x00, "Reserved" ) \
14880
    XXX(ZBEE_ZCL_KE_STATUS_UNKNOWN_ISSUER,                      0x01, "Unknown Issuer" ) \
14881
    XXX(ZBEE_ZCL_KE_STATUS_BAD_KEY_CONFIRM,                     0x02, "Bad Key Confirm" ) \
14882
    XXX(ZBEE_ZCL_KE_STATUS_BAD_MESSAGE,                         0x03, "Bad Message" ) \
14883
    XXX(ZBEE_ZCL_KE_STATUS_NO_RESOURCES,                        0x04, "No Resources" ) \
14884
    XXX(ZBEE_ZCL_KE_STATUS_UNSUPPORTED_SUITE,                   0x05, "Unsupported Suite" ) \
14885
    XXX(ZBEE_ZCL_KE_STATUS_INVALID_CERTIFICATE,                 0x06, "Invalid Certificate" )
14886
14887
VALUE_STRING_ARRAY(zbee_zcl_ke_status_names);
14888
14889
/*************************/
14890
/* Function Declarations */
14891
/*************************/
14892
14893
void proto_register_zbee_zcl_ke(void);
14894
void proto_reg_handoff_zbee_zcl_ke(void);
14895
14896
/* Private functions prototype */
14897
14898
/*************************/
14899
/* Global Variables      */
14900
/*************************/
14901
14902
/* Initialize the protocol and registered fields */
14903
static int proto_zbee_zcl_ke;
14904
static int hf_zbee_zcl_ke_srv_tx_cmd_id;
14905
static int hf_zbee_zcl_ke_srv_rx_cmd_id;
14906
static int hf_zbee_zcl_ke_attr_id;
14907
static int hf_zbee_zcl_ke_attr_client_id;
14908
static int hf_zbee_zcl_ke_suite;
14909
static int hf_zbee_zcl_ke_ephemeral_time;
14910
static int hf_zbee_zcl_ke_confirm_time;
14911
static int hf_zbee_zcl_ke_status;
14912
static int hf_zbee_zcl_ke_wait_time;
14913
static int hf_zbee_zcl_ke_cert_reconstr;
14914
static int hf_zbee_zcl_ke_cert_subject;
14915
static int hf_zbee_zcl_ke_cert_issuer;
14916
static int hf_zbee_zcl_ke_cert_profile_attr;
14917
static int hf_zbee_zcl_ke_cert_type;
14918
static int hf_zbee_zcl_ke_cert_serialno;
14919
static int hf_zbee_zcl_ke_cert_curve;
14920
static int hf_zbee_zcl_ke_cert_hash;
14921
static int hf_zbee_zcl_ke_cert_valid_from;
14922
static int hf_zbee_zcl_ke_cert_valid_to;
14923
static int hf_zbee_zcl_ke_cert_key_usage_agreement;
14924
static int hf_zbee_zcl_ke_cert_key_usage_signature;
14925
static int hf_zbee_zcl_ke_ephemeral_qeu;
14926
static int hf_zbee_zcl_ke_ephemeral_qev;
14927
static int hf_zbee_zcl_ke_macu;
14928
static int hf_zbee_zcl_ke_macv;
14929
14930
/* Initialize the subtree pointers */
14931
static int ett_zbee_zcl_ke;
14932
static int ett_zbee_zcl_ke_cert;
14933
static int ett_zbee_zcl_ke_key_usage;
14934
14935
/*************************/
14936
/* Function Bodies       */
14937
/*************************/
14938
14939
/**
14940
 *This function dissects the Suite 1 Certificate
14941
 *
14942
 *@param tvb pointer to buffer containing raw packet.
14943
 *@param tree pointer to data tree Wireshark uses to display packet.
14944
 *@param offset pointer to offset from caller
14945
*/
14946
static void
14947
dissect_zcl_ke_suite1_certificate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14948
0
{
14949
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_reconstr, tvb, *offset, 22, ENC_NA);
14950
0
    *offset += 22;
14951
14952
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_subject, tvb, *offset, 8, ENC_NA);
14953
0
    *offset += 8;
14954
14955
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_issuer, tvb, *offset, 8, ENC_NA);
14956
0
    *offset += 8;
14957
14958
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_profile_attr, tvb, *offset, 10, ENC_NA);
14959
0
    *offset += 10;
14960
14961
0
} /*dissect_zcl_ke_suite1_certificate*/
14962
14963
/**
14964
 *This function dissects the Suite 2 Certificate
14965
 *
14966
 *@param tvb pointer to buffer containing raw packet.
14967
 *@param tree pointer to data tree Wireshark uses to display packet.
14968
 *@param offset pointer to offset from caller
14969
*/
14970
static void
14971
dissect_zcl_ke_suite2_certificate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14972
0
{
14973
0
    nstime_t      valid_from_time;
14974
0
    nstime_t      valid_to_time;
14975
0
    uint32_t      valid_to;
14976
0
    uint8_t       key_usage;
14977
0
    proto_tree   *usage_tree;
14978
14979
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_type, tvb, *offset, 1, ENC_NA);
14980
0
    *offset += 1;
14981
14982
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_serialno, tvb, *offset, 8, ENC_BIG_ENDIAN);
14983
0
    *offset += 8;
14984
14985
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_curve, tvb, *offset, 1, ENC_NA);
14986
0
    *offset += 1;
14987
14988
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_hash, tvb, *offset, 1, ENC_NA);
14989
0
    *offset += 1;
14990
14991
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_issuer, tvb, *offset, 8, ENC_NA);
14992
0
    *offset += 8;
14993
14994
0
    valid_from_time.secs = (time_t)tvb_get_ntoh40(tvb, *offset);
14995
0
    valid_from_time.nsecs = 0;
14996
0
    proto_tree_add_time(tree, hf_zbee_zcl_ke_cert_valid_from, tvb, *offset, 5, &valid_from_time);
14997
0
    *offset += 5;
14998
14999
0
    valid_to = tvb_get_ntohl(tvb, *offset);
15000
0
    if (valid_to == 0xFFFFFFFF) {
15001
0
        proto_tree_add_time_format(tree, hf_zbee_zcl_ke_cert_valid_to, tvb, *offset, 4, &valid_to_time, "Valid To: does not expire (0xFFFFFFFF)");
15002
0
    }
15003
0
    else {
15004
0
        valid_to_time.secs = valid_from_time.secs + valid_to;
15005
0
        valid_to_time.nsecs = 0;
15006
0
        proto_tree_add_time(tree, hf_zbee_zcl_ke_cert_valid_to, tvb, *offset, 4, &valid_to_time);
15007
0
    }
15008
0
    *offset += 4;
15009
15010
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_subject, tvb, *offset, 8, ENC_NA);
15011
0
    *offset += 8;
15012
15013
0
    key_usage = tvb_get_uint8(tvb, *offset);
15014
0
    usage_tree = proto_tree_add_subtree_format(tree, tvb, *offset, 1, ett_zbee_zcl_ke_key_usage, NULL, "Key Usage (0x%02x)", key_usage);
15015
15016
0
    proto_tree_add_item(usage_tree, hf_zbee_zcl_ke_cert_key_usage_agreement, tvb, *offset, 1, ENC_NA);
15017
0
    proto_tree_add_item(usage_tree, hf_zbee_zcl_ke_cert_key_usage_signature, tvb, *offset, 1, ENC_NA);
15018
0
    *offset += 1;
15019
15020
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_reconstr, tvb, *offset, 37, ENC_NA);
15021
0
    *offset += 37;
15022
15023
0
} /*dissect_zcl_ke_suite2_certificate*/
15024
15025
/**
15026
 *This function manages the Initiate Key Establishment message
15027
 *
15028
 *@param tvb pointer to buffer containing raw packet.
15029
 *@param tree pointer to data tree Wireshark uses to display packet.
15030
 *@param offset pointer to offset from caller
15031
*/
15032
static void
15033
dissect_zcl_ke_initiate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15034
0
{
15035
0
    int                rem_len;
15036
0
    proto_tree        *subtree;
15037
0
    uint16_t           suite;
15038
15039
0
    proto_tree_add_item_ret_uint16(tree, hf_zbee_zcl_ke_suite, tvb, *offset, 2, ENC_LITTLE_ENDIAN, &suite);
15040
0
    *offset += 2;
15041
15042
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_time, tvb, *offset, 1, ENC_NA);
15043
0
    *offset += 1;
15044
15045
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_confirm_time, tvb, *offset, 1, ENC_NA);
15046
0
    *offset += 1;
15047
15048
0
    rem_len = tvb_reported_length_remaining(tvb, *offset);
15049
0
    subtree = proto_tree_add_subtree(tree, tvb, *offset, rem_len, ett_zbee_zcl_ke_cert, NULL, "Implicit Certificate");
15050
15051
0
    switch (suite) {
15052
0
        case ZBEE_ZCL_KE_SUITE_1:
15053
0
            dissect_zcl_ke_suite1_certificate(tvb, subtree, offset);
15054
0
            break;
15055
15056
0
        case ZBEE_ZCL_KE_SUITE_2:
15057
0
            dissect_zcl_ke_suite2_certificate(tvb, subtree, offset);
15058
0
            break;
15059
15060
0
        default:
15061
0
            break;
15062
0
    }
15063
0
} /* dissect_zcl_ke_initiate */
15064
15065
/**
15066
 *This function dissects the Ephemeral Data QEU
15067
 *
15068
 *@param tvb pointer to buffer containing raw packet.
15069
 *@param tree pointer to data tree Wireshark uses to display packet.
15070
 *@param offset pointer to offset from caller
15071
*/
15072
static int
15073
dissect_zcl_ke_ephemeral_qeu(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15074
0
{
15075
0
    int length;
15076
15077
    /* size depends on suite but without a session we don't know that here */
15078
    /* so just report what we have */
15079
0
    length = tvb_reported_length_remaining(tvb, *offset);
15080
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_qeu, tvb, *offset, length, ENC_NA);
15081
0
    *offset += length;
15082
0
    return tvb_captured_length(tvb);
15083
0
}
15084
15085
/**
15086
 *This function dissects the Ephemeral Data QEV
15087
 *
15088
 *@param tvb pointer to buffer containing raw packet.
15089
 *@param tree pointer to data tree Wireshark uses to display packet.
15090
 *@param offset pointer to offset from caller
15091
*/
15092
static int
15093
dissect_zcl_ke_ephemeral_qev(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15094
0
{
15095
0
    int length;
15096
15097
    /* size depends on suite but without a session we don't know that here */
15098
    /* so just report what we have */
15099
0
    length = tvb_reported_length_remaining(tvb, *offset);
15100
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_qev, tvb, *offset, length, ENC_NA);
15101
0
    *offset += length;
15102
0
    return tvb_captured_length(tvb);
15103
0
}
15104
15105
/**
15106
 *This function dissects the Confirm MACU
15107
 *
15108
 *@param tvb pointer to buffer containing raw packet.
15109
 *@param tree pointer to data tree Wireshark uses to display packet.
15110
 *@param offset pointer to offset from caller
15111
*/
15112
static int
15113
dissect_zcl_ke_confirm_macu(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15114
0
{
15115
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_macu, tvb, *offset, ZBEE_SEC_CONST_BLOCKSIZE, ENC_NA);
15116
0
    *offset += ZBEE_SEC_CONST_BLOCKSIZE;
15117
0
    return tvb_captured_length(tvb);
15118
0
}
15119
15120
/**
15121
 *This function dissects the Confirm MACV
15122
 *
15123
 *@param tvb pointer to buffer containing raw packet.
15124
 *@param tree pointer to data tree Wireshark uses to display packet.
15125
 *@param offset pointer to offset from caller
15126
*/
15127
static int
15128
dissect_zcl_ke_confirm_macv(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15129
0
{
15130
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_macv, tvb, *offset, ZBEE_SEC_CONST_BLOCKSIZE, ENC_NA);
15131
0
    *offset += ZBEE_SEC_CONST_BLOCKSIZE;
15132
0
    return tvb_captured_length(tvb);
15133
0
}
15134
15135
/**
15136
 *This function dissects the Terminate Key Establishment message
15137
 *
15138
 *@param tvb pointer to buffer containing raw packet.
15139
 *@param tree pointer to data tree Wireshark uses to display packet.
15140
 *@param offset pointer to offset from caller
15141
*/
15142
static void
15143
dissect_zcl_ke_terminate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15144
0
{
15145
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_status, tvb, *offset, 1, ENC_NA);
15146
0
    *offset += 1;
15147
15148
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_wait_time, tvb, *offset, 1, ENC_NA);
15149
0
    *offset += 1;
15150
15151
0
    proto_tree_add_item(tree, hf_zbee_zcl_ke_suite, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
15152
0
    *offset += 2;
15153
0
}
15154
15155
/**
15156
 *ZigBee ZCL Key Establishment cluster dissector for wireshark.
15157
 *
15158
 *@param tvb pointer to buffer containing raw packet.
15159
 *@param pinfo pointer to packet information fields
15160
 *@param tree pointer to data tree Wireshark uses to display packet.
15161
*/
15162
static int
15163
dissect_zbee_zcl_ke(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15164
1
{
15165
1
    zbee_zcl_packet   *zcl;
15166
1
    unsigned          offset = 0;
15167
1
    uint8_t           cmd_id;
15168
1
    int               rem_len;
15169
15170
    /* Reject the packet if data is NULL */
15171
1
    if (data == NULL)
15172
0
        return 0;
15173
1
    zcl = (zbee_zcl_packet *)data;
15174
1
    cmd_id = zcl->cmd_id;
15175
15176
    /*  Create a subtree for the ZCL Command frame, and add the command ID to it. */
15177
1
    if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
15178
        /* Append the command name to the info column. */
15179
0
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
15180
0
            val_to_str_const(cmd_id, zbee_zcl_ke_srv_rx_cmd_names, "Unknown Command"),
15181
0
            zcl->tran_seqno);
15182
15183
        /* Add the command ID. */
15184
0
        proto_tree_add_uint(tree, hf_zbee_zcl_ke_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
15185
15186
        /* Check is this command has a payload, than add the payload tree */
15187
0
        rem_len = tvb_reported_length_remaining(tvb, offset);
15188
0
        offset += 1; /* delay from last add_item */
15189
0
        if (rem_len > 0) {
15190
15191
            /* Call the appropriate command dissector */
15192
0
            switch (cmd_id) {
15193
0
                case ZBEE_ZCL_CMD_ID_KE_INITIATE_REQ:
15194
0
                    dissect_zcl_ke_initiate(tvb, tree, &offset);
15195
0
                    break;
15196
15197
0
                case ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_REQ:
15198
0
                    return dissect_zcl_ke_ephemeral_qeu(tvb, tree, &offset);
15199
15200
0
                case ZBEE_ZCL_CMD_ID_KE_CONFIRM_REQ:
15201
0
                    return dissect_zcl_ke_confirm_macu(tvb, tree, &offset);
15202
15203
0
                case ZBEE_ZCL_CMD_ID_KE_CLNT_TERMINATE:
15204
0
                    dissect_zcl_ke_terminate(tvb, tree, &offset);
15205
0
                    break;
15206
15207
0
                default:
15208
0
                    break;
15209
0
            }
15210
0
        }
15211
0
    }
15212
1
    else { /* ZBEE_ZCL_FCF_TO_CLIENT */
15213
        /* Append the command name to the info column. */
15214
1
        col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
15215
1
            val_to_str_const(cmd_id, zbee_zcl_ke_srv_tx_cmd_names, "Unknown Command"),
15216
1
            zcl->tran_seqno);
15217
15218
        /* Add the command ID. */
15219
1
        proto_tree_add_uint(tree, hf_zbee_zcl_ke_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
15220
15221
        /* Check is this command has a payload, than add the payload tree */
15222
1
        rem_len = tvb_reported_length_remaining(tvb, ++offset);
15223
1
        if (rem_len > 0) {
15224
            /* Call the appropriate command dissector */
15225
1
            switch (cmd_id) {
15226
0
                case ZBEE_ZCL_CMD_ID_KE_INITIATE_RSP:
15227
0
                    dissect_zcl_ke_initiate(tvb, tree, &offset);
15228
0
                    break;
15229
15230
0
                case ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_RSP:
15231
0
                    return dissect_zcl_ke_ephemeral_qev(tvb, tree, &offset);
15232
15233
0
                case ZBEE_ZCL_CMD_ID_KE_CONFIRM_RSP:
15234
0
                    return dissect_zcl_ke_confirm_macv(tvb, tree, &offset);
15235
15236
0
                case ZBEE_ZCL_CMD_ID_KE_SRV_TERMINATE:
15237
0
                    dissect_zcl_ke_terminate(tvb, tree, &offset);
15238
0
                    break;
15239
15240
1
                default:
15241
1
                    break;
15242
1
            }
15243
1
        }
15244
1
    }
15245
15246
1
    return tvb_captured_length(tvb);
15247
1
} /*dissect_zbee_zcl_ke*/
15248
15249
15250
/**
15251
 *This function registers the ZCL Key Establishment dissector
15252
 *
15253
*/
15254
void
15255
proto_register_zbee_zcl_ke(void)
15256
15
{
15257
15
    static hf_register_info hf[] = {
15258
15259
15
        { &hf_zbee_zcl_ke_attr_id,
15260
15
            { "Attribute", "zbee_zcl_se.ke.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_attr_names),
15261
15
            0x00, NULL, HFILL } },
15262
15263
        /* Server and client attributes are the same but should of cause be put in the correct field */
15264
15
        { &hf_zbee_zcl_ke_attr_client_id,
15265
15
            { "Attribute", "zbee_zcl_se.ke.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_attr_names),
15266
15
            0x00, NULL, HFILL } },
15267
15268
15
        { &hf_zbee_zcl_ke_srv_tx_cmd_id,
15269
15
            { "Command", "zbee_zcl_se.ke.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_srv_tx_cmd_names),
15270
15
            0x00, NULL, HFILL } },
15271
15272
15
        { &hf_zbee_zcl_ke_srv_rx_cmd_id,
15273
15
            { "Command", "zbee_zcl_se.ke.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_srv_rx_cmd_names),
15274
15
            0x00, NULL, HFILL } },
15275
15276
15
        { &hf_zbee_zcl_ke_suite,
15277
15
            { "Key Establishment Suite", "zbee_zcl_se.ke.attr.suite", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_suite_names),
15278
15
            0x00, NULL, HFILL } },
15279
15280
15
        { &hf_zbee_zcl_ke_ephemeral_time,
15281
15
            { "Ephemeral Data Generate Time", "zbee_zcl_se.ke.init.ephemeral.time", FT_UINT8, BASE_DEC, NULL,
15282
15
            0, NULL, HFILL } },
15283
15284
15
        { &hf_zbee_zcl_ke_confirm_time,
15285
15
            { "Confirm Key Generate Time", "zbee_zcl_se.ke.init.confirm.time", FT_UINT8, BASE_DEC, NULL,
15286
15
            0, NULL, HFILL } },
15287
15288
15
        { &hf_zbee_zcl_ke_status,
15289
15
            { "Status", "zbee_zcl_se.ke.terminate.status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_status_names),
15290
15
            0x00, NULL, HFILL } },
15291
15292
15
        { &hf_zbee_zcl_ke_wait_time,
15293
15
            { "Wait Time", "zbee_zcl_se.ke.terminate.wait.time", FT_UINT8, BASE_DEC, NULL,
15294
15
            0, NULL, HFILL } },
15295
15296
15
        { &hf_zbee_zcl_ke_cert_reconstr,
15297
15
            { "Public Key", "zbee_zcl_se.ke.cert.reconst", FT_BYTES, BASE_NONE, NULL,
15298
15
            0, NULL, HFILL } },
15299
15300
15
        { &hf_zbee_zcl_ke_cert_subject,
15301
15
            { "Subject", "zbee_zcl_se.ke.cert.subject", FT_BYTES, BASE_NONE, NULL,
15302
15
            0, NULL, HFILL } },
15303
15304
15
        { &hf_zbee_zcl_ke_cert_issuer,
15305
15
            { "Issuer", "zbee_zcl_se.ke.cert.issuer", FT_BYTES, BASE_NONE, NULL,
15306
15
            0, NULL, HFILL } },
15307
15308
15
        { &hf_zbee_zcl_ke_cert_profile_attr,
15309
15
            { "Profile Attribute Data", "zbee_zcl_se.ke.cert.profile", FT_BYTES, BASE_NONE, NULL,
15310
15
            0, NULL, HFILL } },
15311
15312
15
        { &hf_zbee_zcl_ke_cert_type,
15313
15
            { "Type", "zbee_zcl_se.ke.cert.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_type_names),
15314
15
            0, NULL, HFILL } },
15315
15316
15
        { &hf_zbee_zcl_ke_cert_serialno,
15317
15
            { "Serial No", "zbee_zcl_se.ke.cert.serialno", FT_UINT64, BASE_HEX, NULL,
15318
15
            0, NULL, HFILL } },
15319
15320
15
        { &hf_zbee_zcl_ke_cert_curve,
15321
15
            { "Curve", "zbee_zcl_se.ke.cert.curve", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_curve_names),
15322
15
            0, NULL, HFILL } },
15323
15324
15
        { &hf_zbee_zcl_ke_cert_hash,
15325
15
            { "Hash", "zbee_zcl_se.ke.cert.hash", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_hash_names),
15326
15
            0, NULL, HFILL } },
15327
15328
15
        { &hf_zbee_zcl_ke_cert_valid_from,
15329
15
            { "Valid From", "zbee_zcl_se.ke.cert.valid.from", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
15330
15
            0, NULL, HFILL } },
15331
15332
15
        { &hf_zbee_zcl_ke_cert_valid_to,
15333
15
            { "Valid To", "zbee_zcl_se.ke.cert.valid.to", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
15334
15
            0, NULL, HFILL } },
15335
15336
15
        { &hf_zbee_zcl_ke_cert_key_usage_agreement,
15337
15
            { "Key Agreement", "zbee_zcl_se.ke.cert.key.usage.agreement", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled),
15338
15
            ZBEE_ZCL_KE_USAGE_KEY_AGREEMENT, NULL, HFILL }},
15339
15340
15
        { &hf_zbee_zcl_ke_cert_key_usage_signature,
15341
15
            { "Digital Signature", "zbee_zcl_se.ke.cert.key.usage.signature", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled),
15342
15
            ZBEE_ZCL_KE_USAGE_DIGITAL_SIGNATURE, NULL, HFILL }},
15343
15344
15
        { &hf_zbee_zcl_ke_ephemeral_qeu,
15345
15
            { "Ephemeral Data (QEU)", "zbee_zcl_se.ke.qeu", FT_BYTES, BASE_NONE, NULL,
15346
15
            0, NULL, HFILL } },
15347
15348
15
        { &hf_zbee_zcl_ke_ephemeral_qev,
15349
15
            { "Ephemeral Data (QEV)", "zbee_zcl_se.ke.qev", FT_BYTES, BASE_NONE, NULL,
15350
15
            0, NULL, HFILL } },
15351
15352
15
        { &hf_zbee_zcl_ke_macu,
15353
15
            { "Message Authentication Code (MACU)", "zbee_zcl_se.ke.macu", FT_BYTES, BASE_NONE, NULL,
15354
15
            0, NULL, HFILL } },
15355
15356
15
        { &hf_zbee_zcl_ke_macv,
15357
15
            { "Message Authentication Code (MACV)", "zbee_zcl_se.ke.macv", FT_BYTES, BASE_NONE, NULL,
15358
15
            0, NULL, HFILL } },
15359
15
    };
15360
15361
    /* subtrees */
15362
15
    int *ett[] = {
15363
15
        &ett_zbee_zcl_ke,
15364
15
        &ett_zbee_zcl_ke_cert,
15365
15
        &ett_zbee_zcl_ke_key_usage,
15366
15
    };
15367
15368
    /* Register the ZigBee ZCL Key Establishment cluster protocol name and description */
15369
15
    proto_zbee_zcl_ke = proto_register_protocol("ZigBee ZCL Key Establishment", "ZCL Key Establishment", ZBEE_PROTOABBREV_ZCL_KE);
15370
15
    proto_register_field_array(proto_zbee_zcl_ke, hf, array_length(hf));
15371
15
    proto_register_subtree_array(ett, array_length(ett));
15372
15373
    /* Register the ZigBee ZCL Key Establishment dissector. */
15374
15
    register_dissector(ZBEE_PROTOABBREV_ZCL_KE, dissect_zbee_zcl_ke, proto_zbee_zcl_ke);
15375
15
} /*proto_register_zbee_zcl_ke*/
15376
15377
/**
15378
 *Hands off the ZCL Key Establishment dissector.
15379
 *
15380
*/
15381
void
15382
proto_reg_handoff_zbee_zcl_ke(void)
15383
15
{
15384
15
    zbee_zcl_init_cluster(  ZBEE_PROTOABBREV_ZCL_KE,
15385
15
                            proto_zbee_zcl_ke,
15386
15
                            ett_zbee_zcl_ke,
15387
15
                            ZBEE_ZCL_CID_KE,
15388
15
                            ZBEE_MFG_CODE_NONE,
15389
15
                            hf_zbee_zcl_ke_attr_id,
15390
15
                            hf_zbee_zcl_ke_attr_client_id,
15391
15
                            hf_zbee_zcl_ke_srv_rx_cmd_id,
15392
15
                            hf_zbee_zcl_ke_srv_tx_cmd_id,
15393
                            NULL
15394
15
                         );
15395
15
} /*proto_reg_handoff_zbee_zcl_ke*/
15396
15397
/*
15398
 * Editor modelines  -  https://www.wireshark.org/tools/modelines.html
15399
 *
15400
 * Local variables:
15401
 * c-basic-offset: 4
15402
 * tab-width: 8
15403
 * indent-tabs-mode: nil
15404
 * End:
15405
 *
15406
 * vi: set shiftwidth=4 tabstop=8 expandtab:
15407
 * :indentSize=4:tabSize=8:noTabs=true:
15408
 */