Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-zbee-zcl-se.c
blob0eaf886cc3940ee55b5f2745ac9cf35fc8950dad
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.
7 * Wireshark - Network traffic analyzer
8 * By Gerald Combs <gerald@wireshark.org>
9 * Copyright 1998 Gerald Combs
11 * SPDX-License-Identifier: GPL-2.0-or-later
14 /* Include Files */
15 #include "config.h"
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>
24 #include <wsutil/array.h>
25 #include <wsutil/epochs.h>
27 #include "packet-zbee.h"
28 #include "packet-zbee-aps.h"
29 #include "packet-zbee-zcl.h"
30 #include "packet-zbee-security.h"
32 /* ########################################################################## */
33 /* #### common to all SE clusters ########################################### */
34 /* ########################################################################## */
36 #define ZBEE_ZCL_SE_ATTR_REPORT_PENDING 0x00
37 #define ZBEE_ZCL_SE_ATTR_REPORT_COMPLETE 0x01
39 static const value_string zbee_zcl_se_reporting_status_names[] = {
40 { ZBEE_ZCL_SE_ATTR_REPORT_PENDING, "Pending" },
41 { ZBEE_ZCL_SE_ATTR_REPORT_COMPLETE, "Complete" },
42 { 0, NULL }
45 static void decode_zcl_se_utc_time(char *s, uint32_t value);
47 /**
48 *Dissect a ZigBee Date
50 *@param tvb pointer to buffer containing raw packet.
51 *@param tree pointer to data tree Wireshark uses to display packet.
52 *@param offset pointer to buffer offset
53 *@param subtree_name name for the subtree
54 *@param idx one of the ett_ array elements registered with proto_register_subtree_array()
55 *@param hfindex_yy year field
56 *@param hfindex_mm month field
57 *@param hfindex_md month day field
58 *@param hfindex_wd week day field
60 static void dissect_zcl_date(tvbuff_t *tvb, proto_tree *tree, unsigned *offset,
61 int idx, const char* subtree_name, int hfindex_yy, int hfindex_mm, int hfindex_md,
62 int hfindex_wd)
64 uint8_t yy;
65 proto_tree* subtree;
67 /* Add subtree */
68 subtree = proto_tree_add_subtree(tree, tvb, *offset, 4, idx, NULL, subtree_name);
70 /* Year */
71 yy = tvb_get_uint8(tvb, *offset);
72 proto_tree_add_uint(subtree, hfindex_yy, tvb, *offset, 1, yy + 1900);
73 *offset += 1;
75 /* Month */
76 proto_tree_add_item(subtree, hfindex_mm, tvb, *offset, 1, ENC_NA);
77 *offset += 1;
79 /* Month Day */
80 proto_tree_add_item(subtree, hfindex_md, tvb, *offset, 1, ENC_NA);
81 *offset += 1;
83 /* Week Day */
84 proto_tree_add_item(subtree, hfindex_wd, tvb, *offset, 1, ENC_NA);
85 *offset += 1;
86 } /*dissect_zcl_date*/
88 /*************************/
89 /* Global Variables */
90 /*************************/
92 /* ########################################################################## */
93 /* #### (0x0025) KEEP-ALIVE CLUSTER ######################################### */
94 /* ########################################################################## */
96 /* Attributes */
97 #define zbee_zcl_keep_alive_attr_names_VALUE_STRING_LIST(XXX) \
98 XXX(ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_BASE, 0x0000, "Keep-Alive Base" ) \
99 XXX(ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_JITTER, 0x0001, "Keep-Alive Jitter" ) \
100 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_KEEP_ALIVE, 0xFFFE, "Attribute Reporting Status" )
102 VALUE_STRING_ENUM(zbee_zcl_keep_alive_attr_names);
103 VALUE_STRING_ARRAY(zbee_zcl_keep_alive_attr_names);
105 /*************************/
106 /* Function Declarations */
107 /*************************/
108 void proto_register_zbee_zcl_keep_alive(void);
109 void proto_reg_handoff_zbee_zcl_keep_alive(void);
111 /* Attribute Dissector Helpers */
112 static void dissect_zcl_keep_alive_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
114 /*************************/
115 /* Global Variables */
116 /*************************/
118 /* Initialize the protocol and registered fields */
119 static int proto_zbee_zcl_keep_alive;
121 static int hf_zbee_zcl_keep_alive_attr_id;
122 static int hf_zbee_zcl_keep_alive_attr_reporting_status;
123 static int hf_zbee_zcl_keep_alive_base;
124 static int hf_zbee_zcl_keep_alive_jitter;
126 /* Initialize the subtree pointers */
127 static int ett_zbee_zcl_keep_alive;
129 /*************************/
130 /* Function Bodies */
131 /*************************/
134 *This function is called by ZCL foundation dissector in order to decode
136 *@param tree pointer to data tree Wireshark uses to display packet.
137 *@param tvb pointer to buffer containing raw packet.
138 *@param offset pointer to buffer offset
139 *@param attr_id attribute identifier
140 *@param data_type attribute data type
141 *@param client_attr ZCL client
143 static void
144 dissect_zcl_keep_alive_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
146 /* Dissect attribute data type and data */
147 switch (attr_id) {
148 /* applies to all SE clusters */
149 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_KEEP_ALIVE:
150 proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_attr_reporting_status, tvb, *offset, 1, ENC_NA);
151 *offset += 1;
152 break;
154 case ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_BASE:
155 proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_base, tvb, *offset, 1, ENC_NA);
156 *offset += 1;
157 break;
159 case ZBEE_ZCL_ATTR_ID_KEEP_ALIVE_JITTER:
160 proto_tree_add_item(tree, hf_zbee_zcl_keep_alive_jitter, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
161 *offset += 2;
162 break;
164 default: /* Catch all */
165 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
166 break;
168 } /*dissect_zcl_keep_alive_attr_data*/
172 *ZigBee ZCL Keep-Alive cluster dissector for wireshark.
174 *@param tvb pointer to buffer containing raw packet.
175 *@param pinfo pointer to packet information fields
176 *@param tree pointer to data tree Wireshark uses to display packet.
178 static int
179 dissect_zbee_zcl_keep_alive(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
181 return tvb_captured_length(tvb);
182 } /*dissect_zbee_zcl_keep_alive*/
185 *This function registers the ZCL Keep-Alive dissector
188 void
189 proto_register_zbee_zcl_keep_alive(void)
191 static hf_register_info hf[] = {
193 { &hf_zbee_zcl_keep_alive_attr_id,
194 { "Attribute", "zbee_zcl_se.keep_alive.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_keep_alive_attr_names),
195 0x0, NULL, HFILL } },
197 { &hf_zbee_zcl_keep_alive_attr_reporting_status, /* common to all SE clusters */
198 { "Attribute Reporting Status", "zbee_zcl_se.keep_alive.attr.attr_reporting_status",
199 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
201 { &hf_zbee_zcl_keep_alive_base,
202 { "Keep-Alive Base", "zbee_zcl_se.keep_alive.attr.base", FT_UINT8, BASE_DEC, NULL,
203 0x00, NULL, HFILL } },
205 { &hf_zbee_zcl_keep_alive_jitter,
206 { "Keep-Alive Jitter", "zbee_zcl_se.keep_alive.attr.jitter", FT_UINT16, BASE_DEC, NULL,
207 0x00, NULL, HFILL } },
210 /* ZCL Keep-Alive subtrees */
211 int *ett[] = {
212 &ett_zbee_zcl_keep_alive
215 /* Register the ZigBee ZCL Keep-Alive cluster protocol name and description */
216 proto_zbee_zcl_keep_alive = proto_register_protocol("ZigBee ZCL Keep-Alive", "ZCL Keep-Alive", ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE);
217 proto_register_field_array(proto_zbee_zcl_keep_alive, hf, array_length(hf));
218 proto_register_subtree_array(ett, array_length(ett));
220 /* Register the ZigBee ZCL Keep-Alive dissector. */
221 register_dissector(ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE, dissect_zbee_zcl_keep_alive, proto_zbee_zcl_keep_alive);
222 } /*proto_register_zbee_zcl_keep_alive*/
225 *Hands off the ZCL Keep-Alive dissector.
228 void
229 proto_reg_handoff_zbee_zcl_keep_alive(void)
231 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_KEEP_ALIVE,
232 proto_zbee_zcl_keep_alive,
233 ett_zbee_zcl_keep_alive,
234 ZBEE_ZCL_CID_KEEP_ALIVE,
235 ZBEE_MFG_CODE_NONE,
236 hf_zbee_zcl_keep_alive_attr_id,
238 -1, -1,
239 (zbee_zcl_fn_attr_data)dissect_zcl_keep_alive_attr_data
241 } /*proto_reg_handoff_zbee_zcl_keep_alive*/
243 /* ########################################################################## */
244 /* #### (0x0700) PRICE CLUSTER ############################################## */
245 /* ########################################################################## */
247 /* Attributes */
248 #define zbee_zcl_price_attr_server_names_VALUE_STRING_LIST(XXX) \
249 /* Tier Label (Delivered) Set */ \
250 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_PRICE_LABEL, 0x0000, "Tier 1 Price Label" ) \
251 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_PRICE_LABEL, 0x0001, "Tier 2 Price Label" ) \
252 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_PRICE_LABEL, 0x0002, "Tier 3 Price Label" ) \
253 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_PRICE_LABEL, 0x0003, "Tier 4 Price Label" ) \
254 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_PRICE_LABEL, 0x0004, "Tier 5 Price Label" ) \
255 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_PRICE_LABEL, 0x0005, "Tier 6 Price Label" ) \
256 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_PRICE_LABEL, 0x0006, "Tier 7 Price Label" ) \
257 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_PRICE_LABEL, 0x0007, "Tier 8 Price Label" ) \
258 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_PRICE_LABEL, 0x0008, "Tier 9 Price Label" ) \
259 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_PRICE_LABEL, 0x0009, "Tier 10 Price Label" ) \
260 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_PRICE_LABEL, 0x000A, "Tier 11 Price Label" ) \
261 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_PRICE_LABEL, 0x000B, "Tier 12 Price Label" ) \
262 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_PRICE_LABEL, 0x000C, "Tier 13 Price Label" ) \
263 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_PRICE_LABEL, 0x000D, "Tier 14 Price Label" ) \
264 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_PRICE_LABEL, 0x000E, "Tier 15 Price Label" ) \
265 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_16_PRICE_LABEL, 0x000F, "Tier 16 Price Label" ) \
266 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_17_PRICE_LABEL, 0x0010, "Tier 17 Price Label" ) \
267 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_18_PRICE_LABEL, 0x0011, "Tier 18 Price Label" ) \
268 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_19_PRICE_LABEL, 0x0012, "Tier 19 Price Label" ) \
269 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_20_PRICE_LABEL, 0x0013, "Tier 20 Price Label" ) \
270 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_21_PRICE_LABEL, 0x0014, "Tier 21 Price Label" ) \
271 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_22_PRICE_LABEL, 0x0015, "Tier 22 Price Label" ) \
272 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_23_PRICE_LABEL, 0x0016, "Tier 23 Price Label" ) \
273 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_24_PRICE_LABEL, 0x0017, "Tier 24 Price Label" ) \
274 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_25_PRICE_LABEL, 0x0018, "Tier 25 Price Label" ) \
275 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_26_PRICE_LABEL, 0x0019, "Tier 26 Price Label" ) \
276 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_27_PRICE_LABEL, 0x001A, "Tier 27 Price Label" ) \
277 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_28_PRICE_LABEL, 0x001B, "Tier 28 Price Label" ) \
278 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_29_PRICE_LABEL, 0x001C, "Tier 29 Price Label" ) \
279 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_30_PRICE_LABEL, 0x001D, "Tier 30 Price Label" ) \
280 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_31_PRICE_LABEL, 0x001E, "Tier 31 Price Label" ) \
281 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_32_PRICE_LABEL, 0x001F, "Tier 32 Price Label" ) \
282 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_33_PRICE_LABEL, 0x0020, "Tier 33 Price Label" ) \
283 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_34_PRICE_LABEL, 0x0021, "Tier 34 Price Label" ) \
284 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_35_PRICE_LABEL, 0x0022, "Tier 35 Price Label" ) \
285 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_36_PRICE_LABEL, 0x0023, "Tier 36 Price Label" ) \
286 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_37_PRICE_LABEL, 0x0024, "Tier 37 Price Label" ) \
287 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_38_PRICE_LABEL, 0x0025, "Tier 38 Price Label" ) \
288 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_39_PRICE_LABEL, 0x0026, "Tier 39 Price Label" ) \
289 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_40_PRICE_LABEL, 0x0027, "Tier 40 Price Label" ) \
290 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_41_PRICE_LABEL, 0x0028, "Tier 41 Price Label" ) \
291 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_42_PRICE_LABEL, 0x0029, "Tier 42 Price Label" ) \
292 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_43_PRICE_LABEL, 0x002A, "Tier 43 Price Label" ) \
293 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_44_PRICE_LABEL, 0x002B, "Tier 44 Price Label" ) \
294 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_45_PRICE_LABEL, 0x002C, "Tier 45 Price Label" ) \
295 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_46_PRICE_LABEL, 0x002D, "Tier 46 Price Label" ) \
296 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_47_PRICE_LABEL, 0x002E, "Tier 47 Price Label" ) \
297 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_48_PRICE_LABEL, 0x002F, "Tier 48 Price Label" ) \
298 /* Block Threshold (Delivered) Set */ \
299 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_1_THRESHOLD, 0x0100, "Block 1 Threshold" ) \
300 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_2_THRESHOLD, 0x0101, "Block 2 Threshold" ) \
301 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_3_THRESHOLD, 0x0102, "Block 3 Threshold" ) \
302 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_4_THRESHOLD, 0x0103, "Block 4 Threshold" ) \
303 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_5_THRESHOLD, 0x0104, "Block 5 Threshold" ) \
304 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_6_THRESHOLD, 0x0105, "Block 6 Threshold" ) \
305 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_7_THRESHOLD, 0x0106, "Block 7 Threshold" ) \
306 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_8_THRESHOLD, 0x0107, "Block 8 Threshold" ) \
307 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_9_THRESHOLD, 0x0108, "Block 9 Threshold" ) \
308 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_10_THRESHOLD, 0x0109, "Block 10 Threshold" ) \
309 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_11_THRESHOLD, 0x010A, "Block 11 Threshold" ) \
310 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_12_THRESHOLD, 0x010B, "Block 12 Threshold" ) \
311 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_13_THRESHOLD, 0x010C, "Block 13 Threshold" ) \
312 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_14_THRESHOLD, 0x010D, "Block 14 Threshold" ) \
313 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_15_THRESHOLD, 0x010E, "Block 15 Threshold" ) \
314 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_THRESHOLD_COUNT, 0x010F, "Block Threshold Count" ) \
315 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_1_THRESHOLD, 0x0110, "Tier 1 Block 1 Threshold" ) \
316 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_2_THRESHOLD, 0x0111, "Tier 1 Block 2 Threshold" ) \
317 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_3_THRESHOLD, 0x0112, "Tier 1 Block 3 Threshold" ) \
318 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_4_THRESHOLD, 0x0113, "Tier 1 Block 4 Threshold" ) \
319 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_5_THRESHOLD, 0x0114, "Tier 1 Block 5 Threshold" ) \
320 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_6_THRESHOLD, 0x0115, "Tier 1 Block 6 Threshold" ) \
321 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_7_THRESHOLD, 0x0116, "Tier 1 Block 7 Threshold" ) \
322 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_8_THRESHOLD, 0x0117, "Tier 1 Block 8 Threshold" ) \
323 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_9_THRESHOLD, 0x0118, "Tier 1 Block 9 Threshold" ) \
324 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_10_THRESHOLD, 0x0119, "Tier 1 Block 10 Threshold" ) \
325 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_11_THRESHOLD, 0x011A, "Tier 1 Block 11 Threshold" ) \
326 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_12_THRESHOLD, 0x011B, "Tier 1 Block 12 Threshold" ) \
327 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_13_THRESHOLD, 0x011C, "Tier 1 Block 13 Threshold" ) \
328 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_14_THRESHOLD, 0x011D, "Tier 1 Block 14 Threshold" ) \
329 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_15_THRESHOLD, 0x011E, "Tier 1 Block 15 Threshold" ) \
330 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_THRESHOLD_COUNT, 0x011F, "Tier 1 Block Threshold Count" ) \
331 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_1_THRESHOLD, 0x0120, "Tier 2 Block 1 Threshold" ) \
332 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_2_THRESHOLD, 0x0121, "Tier 2 Block 2 Threshold" ) \
333 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_3_THRESHOLD, 0x0122, "Tier 2 Block 3 Threshold" ) \
334 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_4_THRESHOLD, 0x0123, "Tier 2 Block 4 Threshold" ) \
335 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_5_THRESHOLD, 0x0124, "Tier 2 Block 5 Threshold" ) \
336 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_6_THRESHOLD, 0x0125, "Tier 2 Block 6 Threshold" ) \
337 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_7_THRESHOLD, 0x0126, "Tier 2 Block 7 Threshold" ) \
338 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_8_THRESHOLD, 0x0127, "Tier 2 Block 8 Threshold" ) \
339 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_9_THRESHOLD, 0x0128, "Tier 2 Block 9 Threshold" ) \
340 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_10_THRESHOLD, 0x0129, "Tier 2 Block 10 Threshold" ) \
341 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_11_THRESHOLD, 0x012A, "Tier 2 Block 11 Threshold" ) \
342 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_12_THRESHOLD, 0x012B, "Tier 2 Block 12 Threshold" ) \
343 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_13_THRESHOLD, 0x012C, "Tier 2 Block 13 Threshold" ) \
344 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_14_THRESHOLD, 0x012D, "Tier 2 Block 14 Threshold" ) \
345 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_15_THRESHOLD, 0x012E, "Tier 2 Block 15 Threshold" ) \
346 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_THRESHOLD_COUNT, 0x012F, "Tier 2 Block Threshold Count" ) \
347 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_1_THRESHOLD, 0x0130, "Tier 3 Block 1 Threshold" ) \
348 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_2_THRESHOLD, 0x0131, "Tier 3 Block 2 Threshold" ) \
349 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_3_THRESHOLD, 0x0132, "Tier 3 Block 3 Threshold" ) \
350 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_4_THRESHOLD, 0x0133, "Tier 3 Block 4 Threshold" ) \
351 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_5_THRESHOLD, 0x0134, "Tier 3 Block 5 Threshold" ) \
352 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_6_THRESHOLD, 0x0135, "Tier 3 Block 6 Threshold" ) \
353 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_7_THRESHOLD, 0x0136, "Tier 3 Block 7 Threshold" ) \
354 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_8_THRESHOLD, 0x0137, "Tier 3 Block 8 Threshold" ) \
355 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_9_THRESHOLD, 0x0138, "Tier 3 Block 9 Threshold" ) \
356 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_10_THRESHOLD, 0x0139, "Tier 3 Block 10 Threshold" ) \
357 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_11_THRESHOLD, 0x013A, "Tier 3 Block 11 Threshold" ) \
358 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_12_THRESHOLD, 0x013B, "Tier 3 Block 12 Threshold" ) \
359 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_13_THRESHOLD, 0x013C, "Tier 3 Block 13 Threshold" ) \
360 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_14_THRESHOLD, 0x013D, "Tier 3 Block 14 Threshold" ) \
361 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_15_THRESHOLD, 0x013E, "Tier 3 Block 15 Threshold" ) \
362 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_THRESHOLD_COUNT, 0x013F, "Tier 3 Block Threshold Count" ) \
363 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_1_THRESHOLD, 0x0140, "Tier 4 Block 1 Threshold" ) \
364 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_2_THRESHOLD, 0x0141, "Tier 4 Block 2 Threshold" ) \
365 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_3_THRESHOLD, 0x0142, "Tier 4 Block 3 Threshold" ) \
366 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_4_THRESHOLD, 0x0143, "Tier 4 Block 4 Threshold" ) \
367 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_5_THRESHOLD, 0x0144, "Tier 4 Block 5 Threshold" ) \
368 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_6_THRESHOLD, 0x0145, "Tier 4 Block 6 Threshold" ) \
369 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_7_THRESHOLD, 0x0146, "Tier 4 Block 7 Threshold" ) \
370 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_8_THRESHOLD, 0x0147, "Tier 4 Block 8 Threshold" ) \
371 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_9_THRESHOLD, 0x0148, "Tier 4 Block 9 Threshold" ) \
372 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_10_THRESHOLD, 0x0149, "Tier 4 Block 10 Threshold" ) \
373 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_11_THRESHOLD, 0x014A, "Tier 4 Block 11 Threshold" ) \
374 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_12_THRESHOLD, 0x014B, "Tier 4 Block 12 Threshold" ) \
375 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_13_THRESHOLD, 0x014C, "Tier 4 Block 13 Threshold" ) \
376 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_14_THRESHOLD, 0x014D, "Tier 4 Block 14 Threshold" ) \
377 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_15_THRESHOLD, 0x014E, "Tier 4 Block 15 Threshold" ) \
378 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_THRESHOLD_COUNT, 0x014F, "Tier 4 Block Threshold Count" ) \
379 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_1_THRESHOLD, 0x0150, "Tier 5 Block 1 Threshold" ) \
380 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_2_THRESHOLD, 0x0151, "Tier 5 Block 2 Threshold" ) \
381 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_3_THRESHOLD, 0x0152, "Tier 5 Block 3 Threshold" ) \
382 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_4_THRESHOLD, 0x0153, "Tier 5 Block 4 Threshold" ) \
383 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_5_THRESHOLD, 0x0154, "Tier 5 Block 5 Threshold" ) \
384 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_6_THRESHOLD, 0x0155, "Tier 5 Block 6 Threshold" ) \
385 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_7_THRESHOLD, 0x0156, "Tier 5 Block 7 Threshold" ) \
386 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_8_THRESHOLD, 0x0157, "Tier 5 Block 8 Threshold" ) \
387 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_9_THRESHOLD, 0x0158, "Tier 5 Block 9 Threshold" ) \
388 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_10_THRESHOLD, 0x0159, "Tier 5 Block 10 Threshold" ) \
389 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_11_THRESHOLD, 0x015A, "Tier 5 Block 11 Threshold" ) \
390 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_12_THRESHOLD, 0x015B, "Tier 5 Block 12 Threshold" ) \
391 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_13_THRESHOLD, 0x015C, "Tier 5 Block 13 Threshold" ) \
392 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_14_THRESHOLD, 0x015D, "Tier 5 Block 14 Threshold" ) \
393 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_15_THRESHOLD, 0x015E, "Tier 5 Block 15 Threshold" ) \
394 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_THRESHOLD_COUNT, 0x015F, "Tier 5 Block Threshold Count" ) \
395 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_1_THRESHOLD, 0x0160, "Tier 6 Block 1 Threshold" ) \
396 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_2_THRESHOLD, 0x0161, "Tier 6 Block 2 Threshold" ) \
397 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_3_THRESHOLD, 0x0162, "Tier 6 Block 3 Threshold" ) \
398 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_4_THRESHOLD, 0x0163, "Tier 6 Block 4 Threshold" ) \
399 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_5_THRESHOLD, 0x0164, "Tier 6 Block 5 Threshold" ) \
400 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_6_THRESHOLD, 0x0165, "Tier 6 Block 6 Threshold" ) \
401 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_7_THRESHOLD, 0x0166, "Tier 6 Block 7 Threshold" ) \
402 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_8_THRESHOLD, 0x0167, "Tier 6 Block 8 Threshold" ) \
403 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_9_THRESHOLD, 0x0168, "Tier 6 Block 9 Threshold" ) \
404 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_10_THRESHOLD, 0x0169, "Tier 6 Block 10 Threshold" ) \
405 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_11_THRESHOLD, 0x016A, "Tier 6 Block 11 Threshold" ) \
406 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_12_THRESHOLD, 0x016B, "Tier 6 Block 12 Threshold" ) \
407 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_13_THRESHOLD, 0x016C, "Tier 6 Block 13 Threshold" ) \
408 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_14_THRESHOLD, 0x016D, "Tier 6 Block 14 Threshold" ) \
409 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_15_THRESHOLD, 0x016E, "Tier 6 Block 15 Threshold" ) \
410 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_THRESHOLD_COUNT, 0x016F, "Tier 6 Block Threshold Count" ) \
411 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_1_THRESHOLD, 0x0170, "Tier 7 Block 1 Threshold" ) \
412 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_2_THRESHOLD, 0x0171, "Tier 7 Block 2 Threshold" ) \
413 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_3_THRESHOLD, 0x0172, "Tier 7 Block 3 Threshold" ) \
414 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_4_THRESHOLD, 0x0173, "Tier 7 Block 4 Threshold" ) \
415 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_5_THRESHOLD, 0x0174, "Tier 7 Block 5 Threshold" ) \
416 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_6_THRESHOLD, 0x0175, "Tier 7 Block 6 Threshold" ) \
417 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_7_THRESHOLD, 0x0176, "Tier 7 Block 7 Threshold" ) \
418 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_8_THRESHOLD, 0x0177, "Tier 7 Block 8 Threshold" ) \
419 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_9_THRESHOLD, 0x0178, "Tier 7 Block 9 Threshold" ) \
420 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_10_THRESHOLD, 0x0179, "Tier 7 Block 10 Threshold" ) \
421 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_11_THRESHOLD, 0x017A, "Tier 7 Block 11 Threshold" ) \
422 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_12_THRESHOLD, 0x017B, "Tier 7 Block 12 Threshold" ) \
423 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_13_THRESHOLD, 0x017C, "Tier 7 Block 13 Threshold" ) \
424 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_14_THRESHOLD, 0x017D, "Tier 7 Block 14 Threshold" ) \
425 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_15_THRESHOLD, 0x017E, "Tier 7 Block 15 Threshold" ) \
426 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_THRESHOLD_COUNT, 0x017F, "Tier 7 Block Threshold Count" ) \
427 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_1_THRESHOLD, 0x0180, "Tier 8 Block 1 Threshold" ) \
428 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_2_THRESHOLD, 0x0181, "Tier 8 Block 2 Threshold" ) \
429 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_3_THRESHOLD, 0x0182, "Tier 8 Block 3 Threshold" ) \
430 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_4_THRESHOLD, 0x0183, "Tier 8 Block 4 Threshold" ) \
431 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_5_THRESHOLD, 0x0184, "Tier 8 Block 5 Threshold" ) \
432 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_6_THRESHOLD, 0x0185, "Tier 8 Block 6 Threshold" ) \
433 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_7_THRESHOLD, 0x0186, "Tier 8 Block 7 Threshold" ) \
434 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_8_THRESHOLD, 0x0187, "Tier 8 Block 8 Threshold" ) \
435 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_9_THRESHOLD, 0x0188, "Tier 8 Block 9 Threshold" ) \
436 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_10_THRESHOLD, 0x0189, "Tier 8 Block 10 Threshold" ) \
437 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_11_THRESHOLD, 0x018A, "Tier 8 Block 11 Threshold" ) \
438 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_12_THRESHOLD, 0x018B, "Tier 8 Block 12 Threshold" ) \
439 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_13_THRESHOLD, 0x018C, "Tier 8 Block 13 Threshold" ) \
440 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_14_THRESHOLD, 0x018D, "Tier 8 Block 14 Threshold" ) \
441 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_15_THRESHOLD, 0x018E, "Tier 8 Block 15 Threshold" ) \
442 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_THRESHOLD_COUNT, 0x018F, "Tier 8 Block Threshold Count" ) \
443 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_1_THRESHOLD, 0x0190, "Tier 9 Block 1 Threshold" ) \
444 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_2_THRESHOLD, 0x0191, "Tier 9 Block 2 Threshold" ) \
445 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_3_THRESHOLD, 0x0192, "Tier 9 Block 3 Threshold" ) \
446 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_4_THRESHOLD, 0x0193, "Tier 9 Block 4 Threshold" ) \
447 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_5_THRESHOLD, 0x0194, "Tier 9 Block 5 Threshold" ) \
448 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_6_THRESHOLD, 0x0195, "Tier 9 Block 6 Threshold" ) \
449 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_7_THRESHOLD, 0x0196, "Tier 9 Block 7 Threshold" ) \
450 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_8_THRESHOLD, 0x0197, "Tier 9 Block 8 Threshold" ) \
451 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_9_THRESHOLD, 0x0198, "Tier 9 Block 9 Threshold" ) \
452 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_10_THRESHOLD, 0x0199, "Tier 9 Block 10 Threshold" ) \
453 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_11_THRESHOLD, 0x019A, "Tier 9 Block 11 Threshold" ) \
454 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_12_THRESHOLD, 0x019B, "Tier 9 Block 12 Threshold" ) \
455 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_13_THRESHOLD, 0x019C, "Tier 9 Block 13 Threshold" ) \
456 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_14_THRESHOLD, 0x019D, "Tier 9 Block 14 Threshold" ) \
457 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_15_THRESHOLD, 0x019E, "Tier 9 Block 15 Threshold" ) \
458 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_THRESHOLD_COUNT, 0x019F, "Tier 9 Block Threshold Count" ) \
459 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_1_THRESHOLD, 0x01A0, "Tier 10 Block 1 Threshold" ) \
460 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_2_THRESHOLD, 0x01A1, "Tier 10 Block 2 Threshold" ) \
461 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_3_THRESHOLD, 0x01A2, "Tier 10 Block 3 Threshold" ) \
462 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_4_THRESHOLD, 0x01A3, "Tier 10 Block 4 Threshold" ) \
463 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_5_THRESHOLD, 0x01A4, "Tier 10 Block 5 Threshold" ) \
464 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_6_THRESHOLD, 0x01A5, "Tier 10 Block 6 Threshold" ) \
465 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_7_THRESHOLD, 0x01A6, "Tier 10 Block 7 Threshold" ) \
466 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_8_THRESHOLD, 0x01A7, "Tier 10 Block 8 Threshold" ) \
467 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_9_THRESHOLD, 0x01A8, "Tier 10 Block 9 Threshold" ) \
468 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_10_THRESHOLD, 0x01A9, "Tier 10 Block 10 Threshold" ) \
469 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_11_THRESHOLD, 0x01AA, "Tier 10 Block 11 Threshold" ) \
470 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_12_THRESHOLD, 0x01AB, "Tier 10 Block 12 Threshold" ) \
471 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_13_THRESHOLD, 0x01AC, "Tier 10 Block 13 Threshold" ) \
472 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_14_THRESHOLD, 0x01AD, "Tier 10 Block 14 Threshold" ) \
473 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_15_THRESHOLD, 0x01AE, "Tier 10 Block 15 Threshold" ) \
474 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_THRESHOLD_COUNT, 0x01AF, "Tier 10 Block Threshold Count" ) \
475 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_1_THRESHOLD, 0x01B0, "Tier 11 Block 1 Threshold" ) \
476 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_2_THRESHOLD, 0x01B1, "Tier 11 Block 2 Threshold" ) \
477 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_3_THRESHOLD, 0x01B2, "Tier 11 Block 3 Threshold" ) \
478 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_4_THRESHOLD, 0x01B3, "Tier 11 Block 4 Threshold" ) \
479 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_5_THRESHOLD, 0x01B4, "Tier 11 Block 5 Threshold" ) \
480 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_6_THRESHOLD, 0x01B5, "Tier 11 Block 6 Threshold" ) \
481 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_7_THRESHOLD, 0x01B6, "Tier 11 Block 7 Threshold" ) \
482 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_8_THRESHOLD, 0x01B7, "Tier 11 Block 8 Threshold" ) \
483 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_9_THRESHOLD, 0x01B8, "Tier 11 Block 9 Threshold" ) \
484 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_10_THRESHOLD, 0x01B9, "Tier 11 Block 10 Threshold" ) \
485 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_11_THRESHOLD, 0x01BA, "Tier 11 Block 11 Threshold" ) \
486 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_12_THRESHOLD, 0x01BB, "Tier 11 Block 12 Threshold" ) \
487 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_13_THRESHOLD, 0x01BC, "Tier 11 Block 13 Threshold" ) \
488 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_14_THRESHOLD, 0x01BD, "Tier 11 Block 14 Threshold" ) \
489 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_15_THRESHOLD, 0x01BE, "Tier 11 Block 15 Threshold" ) \
490 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_THRESHOLD_COUNT, 0x01BF, "Tier 11 Block Threshold Count" ) \
491 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_1_THRESHOLD, 0x01C0, "Tier 12 Block 1 Threshold" ) \
492 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_2_THRESHOLD, 0x01C1, "Tier 12 Block 2 Threshold" ) \
493 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_3_THRESHOLD, 0x01C2, "Tier 12 Block 3 Threshold" ) \
494 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_4_THRESHOLD, 0x01C3, "Tier 12 Block 4 Threshold" ) \
495 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_5_THRESHOLD, 0x01C4, "Tier 12 Block 5 Threshold" ) \
496 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_6_THRESHOLD, 0x01C5, "Tier 12 Block 6 Threshold" ) \
497 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_7_THRESHOLD, 0x01C6, "Tier 12 Block 7 Threshold" ) \
498 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_8_THRESHOLD, 0x01C7, "Tier 12 Block 8 Threshold" ) \
499 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_9_THRESHOLD, 0x01C8, "Tier 12 Block 9 Threshold" ) \
500 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_10_THRESHOLD, 0x01C9, "Tier 12 Block 10 Threshold" ) \
501 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_11_THRESHOLD, 0x01CA, "Tier 12 Block 11 Threshold" ) \
502 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_12_THRESHOLD, 0x01CB, "Tier 12 Block 12 Threshold" ) \
503 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_13_THRESHOLD, 0x01CC, "Tier 12 Block 13 Threshold" ) \
504 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_14_THRESHOLD, 0x01CD, "Tier 12 Block 14 Threshold" ) \
505 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_15_THRESHOLD, 0x01CE, "Tier 12 Block 15 Threshold" ) \
506 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_THRESHOLD_COUNT, 0x01CF, "Tier 12 Block Threshold Count" ) \
507 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_1_THRESHOLD, 0x01D0, "Tier 13 Block 1 Threshold" ) \
508 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_2_THRESHOLD, 0x01D1, "Tier 13 Block 2 Threshold" ) \
509 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_3_THRESHOLD, 0x01D2, "Tier 13 Block 3 Threshold" ) \
510 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_4_THRESHOLD, 0x01D3, "Tier 13 Block 4 Threshold" ) \
511 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_5_THRESHOLD, 0x01D4, "Tier 13 Block 5 Threshold" ) \
512 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_6_THRESHOLD, 0x01D5, "Tier 13 Block 6 Threshold" ) \
513 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_7_THRESHOLD, 0x01D6, "Tier 13 Block 7 Threshold" ) \
514 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_8_THRESHOLD, 0x01D7, "Tier 13 Block 8 Threshold" ) \
515 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_9_THRESHOLD, 0x01D8, "Tier 13 Block 9 Threshold" ) \
516 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_10_THRESHOLD, 0x01D9, "Tier 13 Block 10 Threshold" ) \
517 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_11_THRESHOLD, 0x01DA, "Tier 13 Block 11 Threshold" ) \
518 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_12_THRESHOLD, 0x01DB, "Tier 13 Block 12 Threshold" ) \
519 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_13_THRESHOLD, 0x01DC, "Tier 13 Block 13 Threshold" ) \
520 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_14_THRESHOLD, 0x01DD, "Tier 13 Block 14 Threshold" ) \
521 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_15_THRESHOLD, 0x01DE, "Tier 13 Block 15 Threshold" ) \
522 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_THRESHOLD_COUNT, 0x01DF, "Tier 13 Block Threshold Count" ) \
523 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_1_THRESHOLD, 0x01E0, "Tier 14 Block 1 Threshold" ) \
524 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_2_THRESHOLD, 0x01E1, "Tier 14 Block 2 Threshold" ) \
525 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_3_THRESHOLD, 0x01E2, "Tier 14 Block 3 Threshold" ) \
526 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_4_THRESHOLD, 0x01E3, "Tier 14 Block 4 Threshold" ) \
527 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_5_THRESHOLD, 0x01E4, "Tier 14 Block 5 Threshold" ) \
528 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_6_THRESHOLD, 0x01E5, "Tier 14 Block 6 Threshold" ) \
529 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_7_THRESHOLD, 0x01E6, "Tier 14 Block 7 Threshold" ) \
530 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_8_THRESHOLD, 0x01E7, "Tier 14 Block 8 Threshold" ) \
531 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_9_THRESHOLD, 0x01E8, "Tier 14 Block 9 Threshold" ) \
532 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_10_THRESHOLD, 0x01E9, "Tier 14 Block 10 Threshold" ) \
533 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_11_THRESHOLD, 0x01EA, "Tier 14 Block 11 Threshold" ) \
534 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_12_THRESHOLD, 0x01EB, "Tier 14 Block 12 Threshold" ) \
535 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_13_THRESHOLD, 0x01EC, "Tier 14 Block 13 Threshold" ) \
536 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_14_THRESHOLD, 0x01ED, "Tier 14 Block 14 Threshold" ) \
537 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_15_THRESHOLD, 0x01EE, "Tier 14 Block 15 Threshold" ) \
538 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_THRESHOLD_COUNT, 0x01EF, "Tier 14 Block Threshold Count" ) \
539 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_1_THRESHOLD, 0x01F0, "Tier 15 Block 1 Threshold" ) \
540 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_2_THRESHOLD, 0x01F1, "Tier 15 Block 2 Threshold" ) \
541 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_3_THRESHOLD, 0x01F2, "Tier 15 Block 3 Threshold" ) \
542 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_4_THRESHOLD, 0x01F3, "Tier 15 Block 4 Threshold" ) \
543 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_5_THRESHOLD, 0x01F4, "Tier 15 Block 5 Threshold" ) \
544 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_6_THRESHOLD, 0x01F5, "Tier 15 Block 6 Threshold" ) \
545 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_7_THRESHOLD, 0x01F6, "Tier 15 Block 7 Threshold" ) \
546 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_8_THRESHOLD, 0x01F7, "Tier 15 Block 8 Threshold" ) \
547 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_9_THRESHOLD, 0x01F8, "Tier 15 Block 9 Threshold" ) \
548 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_10_THRESHOLD, 0x01F9, "Tier 15 Block 10 Threshold" ) \
549 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_11_THRESHOLD, 0x01FA, "Tier 15 Block 11 Threshold" ) \
550 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_12_THRESHOLD, 0x01FB, "Tier 15 Block 12 Threshold" ) \
551 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_13_THRESHOLD, 0x01FC, "Tier 15 Block 13 Threshold" ) \
552 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_14_THRESHOLD, 0x01FD, "Tier 15 Block 14 Threshold" ) \
553 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_15_THRESHOLD, 0x01FE, "Tier 15 Block 15 Threshold" ) \
554 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_THRESHOLD_COUNT, 0x01FF, "Tier 15 Block Threshold Count" ) \
555 /* Block Period (Delivered) Set */ \
556 XXX(ZBEE_ZCL_ATTR_ID_PRICE_START_OF_BLOCK_PERIOD, 0x0200, "Start of Block Period" ) \
557 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_PERIOD_DURATION, 0x0201, "Block Period Duration" ) \
558 XXX(ZBEE_ZCL_ATTR_ID_PRICE_THRESHOLD_MULTIPLIER, 0x0202, "Threshold Multiplier" ) \
559 XXX(ZBEE_ZCL_ATTR_ID_PRICE_THRESHOLD_DIVISOR, 0x0203, "Threshold Divisor" ) \
560 XXX(ZBEE_ZCL_ATTR_ID_PRICE_BLOCK_PERIOD_DURATION_TYPE, 0x0204, "Block Period Duration Type" ) \
561 /* Commodity */ \
562 XXX(ZBEE_ZCL_ATTR_ID_PRICE_COMMODITY_TYPE, 0x0300, "Commodity Type" ) \
563 XXX(ZBEE_ZCL_ATTR_ID_PRICE_STANDING_CHARGE, 0x0301, "Standing Charge" ) \
564 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CONVERSION_FACTOR, 0x0302, "Conversion Factor" ) \
565 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT,0x0303, "Conversion Factor TrailingDigit" ) \
566 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE, 0x0304, "Calorific Value" ) \
567 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE_UNIT, 0x0305, "Calorific Value Unit" ) \
568 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT, 0x0306, "Calorific Value Trailing Digit" ) \
569 /* Block Price Information (Delivered) */ \
570 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_1_PRICE, 0x0400, "No Tier Block 1 Price" ) \
571 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_2_PRICE, 0x0401, "No Tier Block 2 Price" ) \
572 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_3_PRICE, 0x0402, "No Tier Block 3 Price" ) \
573 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_4_PRICE, 0x0403, "No Tier Block 4 Price" ) \
574 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_5_PRICE, 0x0404, "No Tier Block 5 Price" ) \
575 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_6_PRICE, 0x0405, "No Tier Block 6 Price" ) \
576 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_7_PRICE, 0x0406, "No Tier Block 7 Price" ) \
577 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_8_PRICE, 0x0407, "No Tier Block 8 Price" ) \
578 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_9_PRICE, 0x0408, "No Tier Block 9 Price" ) \
579 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_10_PRICE, 0x0409, "No Tier Block 10 Price" ) \
580 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_11_PRICE, 0x040A, "No Tier Block 11 Price" ) \
581 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_12_PRICE, 0x040B, "No Tier Block 12 Price" ) \
582 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_13_PRICE, 0x040C, "No Tier Block 13 Price" ) \
583 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_14_PRICE, 0x040D, "No Tier Block 14 Price" ) \
584 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_15_PRICE, 0x040E, "No Tier Block 15 Price" ) \
585 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NO_TIER_BLOCK_16_PRICE, 0x040F, "No Tier Block 16 Price" ) \
586 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_1_PRICE, 0x0410, "Tier 1 Block 1 Price" ) \
587 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_2_PRICE, 0x0411, "Tier 1 Block 2 Price" ) \
588 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_3_PRICE, 0x0412, "Tier 1 Block 3 Price" ) \
589 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_4_PRICE, 0x0413, "Tier 1 Block 4 Price" ) \
590 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_5_PRICE, 0x0414, "Tier 1 Block 5 Price" ) \
591 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_6_PRICE, 0x0415, "Tier 1 Block 6 Price" ) \
592 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_7_PRICE, 0x0416, "Tier 1 Block 7 Price" ) \
593 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_8_PRICE, 0x0417, "Tier 1 Block 8 Price" ) \
594 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_9_PRICE, 0x0418, "Tier 1 Block 9 Price" ) \
595 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_10_PRICE, 0x0419, "Tier 1 Block 10 Price" ) \
596 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_11_PRICE, 0x041A, "Tier 1 Block 11 Price" ) \
597 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_12_PRICE, 0x041B, "Tier 1 Block 12 Price" ) \
598 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_13_PRICE, 0x041C, "Tier 1 Block 13 Price" ) \
599 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_14_PRICE, 0x041D, "Tier 1 Block 14 Price" ) \
600 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_15_PRICE, 0x041E, "Tier 1 Block 15 Price" ) \
601 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_1_BLOCK_16_PRICE, 0x041F, "Tier 1 Block 16 Price" ) \
602 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_1_PRICE, 0x0420, "Tier 2 Block 1 Price" ) \
603 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_2_PRICE, 0x0421, "Tier 2 Block 2 Price" ) \
604 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_3_PRICE, 0x0422, "Tier 2 Block 3 Price" ) \
605 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_4_PRICE, 0x0423, "Tier 2 Block 4 Price" ) \
606 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_5_PRICE, 0x0424, "Tier 2 Block 5 Price" ) \
607 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_6_PRICE, 0x0425, "Tier 2 Block 6 Price" ) \
608 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_7_PRICE, 0x0426, "Tier 2 Block 7 Price" ) \
609 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_8_PRICE, 0x0427, "Tier 2 Block 8 Price" ) \
610 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_9_PRICE, 0x0428, "Tier 2 Block 9 Price" ) \
611 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_10_PRICE, 0x0429, "Tier 2 Block 10 Price" ) \
612 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_11_PRICE, 0x042A, "Tier 2 Block 11 Price" ) \
613 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_12_PRICE, 0x042B, "Tier 2 Block 12 Price" ) \
614 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_13_PRICE, 0x042C, "Tier 2 Block 13 Price" ) \
615 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_14_PRICE, 0x042D, "Tier 2 Block 14 Price" ) \
616 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_15_PRICE, 0x042E, "Tier 2 Block 15 Price" ) \
617 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_2_BLOCK_16_PRICE, 0x042F, "Tier 2 Block 16 Price" ) \
618 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_1_PRICE, 0x0430, "Tier 3 Block 1 Price" ) \
619 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_2_PRICE, 0x0431, "Tier 3 Block 2 Price" ) \
620 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_3_PRICE, 0x0432, "Tier 3 Block 3 Price" ) \
621 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_4_PRICE, 0x0433, "Tier 3 Block 4 Price" ) \
622 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_5_PRICE, 0x0434, "Tier 3 Block 5 Price" ) \
623 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_6_PRICE, 0x0435, "Tier 3 Block 6 Price" ) \
624 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_7_PRICE, 0x0436, "Tier 3 Block 7 Price" ) \
625 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_8_PRICE, 0x0437, "Tier 3 Block 8 Price" ) \
626 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_9_PRICE, 0x0438, "Tier 3 Block 9 Price" ) \
627 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_10_PRICE, 0x0439, "Tier 3 Block 10 Price" ) \
628 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_11_PRICE, 0x043A, "Tier 3 Block 11 Price" ) \
629 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_12_PRICE, 0x043B, "Tier 3 Block 12 Price" ) \
630 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_13_PRICE, 0x043C, "Tier 3 Block 13 Price" ) \
631 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_14_PRICE, 0x043D, "Tier 3 Block 14 Price" ) \
632 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_15_PRICE, 0x043E, "Tier 3 Block 15 Price" ) \
633 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_3_BLOCK_16_PRICE, 0x043F, "Tier 3 Block 16 Price" ) \
634 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_1_PRICE, 0x0440, "Tier 4 Block 1 Price" ) \
635 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_2_PRICE, 0x0441, "Tier 4 Block 2 Price" ) \
636 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_3_PRICE, 0x0442, "Tier 4 Block 3 Price" ) \
637 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_4_PRICE, 0x0443, "Tier 4 Block 4 Price" ) \
638 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_5_PRICE, 0x0444, "Tier 4 Block 5 Price" ) \
639 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_6_PRICE, 0x0445, "Tier 4 Block 6 Price" ) \
640 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_7_PRICE, 0x0446, "Tier 4 Block 7 Price" ) \
641 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_8_PRICE, 0x0447, "Tier 4 Block 8 Price" ) \
642 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_9_PRICE, 0x0448, "Tier 4 Block 9 Price" ) \
643 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_10_PRICE, 0x0449, "Tier 4 Block 10 Price" ) \
644 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_11_PRICE, 0x044A, "Tier 4 Block 11 Price" ) \
645 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_12_PRICE, 0x044B, "Tier 4 Block 12 Price" ) \
646 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_13_PRICE, 0x044C, "Tier 4 Block 13 Price" ) \
647 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_14_PRICE, 0x044D, "Tier 4 Block 14 Price" ) \
648 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_15_PRICE, 0x044E, "Tier 4 Block 15 Price" ) \
649 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_4_BLOCK_16_PRICE, 0x044F, "Tier 4 Block 16 Price" ) \
650 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_1_PRICE, 0x0450, "Tier 5 Block 1 Price" ) \
651 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_2_PRICE, 0x0451, "Tier 5 Block 2 Price" ) \
652 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_3_PRICE, 0x0452, "Tier 5 Block 3 Price" ) \
653 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_4_PRICE, 0x0453, "Tier 5 Block 4 Price" ) \
654 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_5_PRICE, 0x0454, "Tier 5 Block 5 Price" ) \
655 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_6_PRICE, 0x0455, "Tier 5 Block 6 Price" ) \
656 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_7_PRICE, 0x0456, "Tier 5 Block 7 Price" ) \
657 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_8_PRICE, 0x0457, "Tier 5 Block 8 Price" ) \
658 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_9_PRICE, 0x0458, "Tier 5 Block 9 Price" ) \
659 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_10_PRICE, 0x0459, "Tier 5 Block 10 Price" ) \
660 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_11_PRICE, 0x045A, "Tier 5 Block 11 Price" ) \
661 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_12_PRICE, 0x045B, "Tier 5 Block 12 Price" ) \
662 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_13_PRICE, 0x045C, "Tier 5 Block 13 Price" ) \
663 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_14_PRICE, 0x045D, "Tier 5 Block 14 Price" ) \
664 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_15_PRICE, 0x045E, "Tier 5 Block 15 Price" ) \
665 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_5_BLOCK_16_PRICE, 0x045F, "Tier 5 Block 16 Price" ) \
666 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_1_PRICE, 0x0460, "Tier 6 Block 1 Price" ) \
667 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_2_PRICE, 0x0461, "Tier 6 Block 2 Price" ) \
668 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_3_PRICE, 0x0462, "Tier 6 Block 3 Price" ) \
669 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_4_PRICE, 0x0463, "Tier 6 Block 4 Price" ) \
670 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_5_PRICE, 0x0464, "Tier 6 Block 5 Price" ) \
671 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_6_PRICE, 0x0465, "Tier 6 Block 6 Price" ) \
672 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_7_PRICE, 0x0466, "Tier 6 Block 7 Price" ) \
673 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_8_PRICE, 0x0467, "Tier 6 Block 8 Price" ) \
674 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_9_PRICE, 0x0468, "Tier 6 Block 9 Price" ) \
675 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_10_PRICE, 0x0469, "Tier 6 Block 10 Price" ) \
676 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_11_PRICE, 0x046A, "Tier 6 Block 11 Price" ) \
677 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_12_PRICE, 0x046B, "Tier 6 Block 12 Price" ) \
678 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_13_PRICE, 0x046C, "Tier 6 Block 13 Price" ) \
679 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_14_PRICE, 0x046D, "Tier 6 Block 14 Price" ) \
680 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_15_PRICE, 0x046E, "Tier 6 Block 15 Price" ) \
681 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_6_BLOCK_16_PRICE, 0x046F, "Tier 6 Block 16 Price" ) \
682 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_1_PRICE, 0x0470, "Tier 7 Block 1 Price" ) \
683 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_2_PRICE, 0x0471, "Tier 7 Block 2 Price" ) \
684 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_3_PRICE, 0x0472, "Tier 7 Block 3 Price" ) \
685 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_4_PRICE, 0x0473, "Tier 7 Block 4 Price" ) \
686 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_5_PRICE, 0x0474, "Tier 7 Block 5 Price" ) \
687 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_6_PRICE, 0x0475, "Tier 7 Block 6 Price" ) \
688 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_7_PRICE, 0x0476, "Tier 7 Block 7 Price" ) \
689 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_8_PRICE, 0x0477, "Tier 7 Block 8 Price" ) \
690 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_9_PRICE, 0x0478, "Tier 7 Block 9 Price" ) \
691 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_10_PRICE, 0x0479, "Tier 7 Block 10 Price" ) \
692 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_11_PRICE, 0x047A, "Tier 7 Block 11 Price" ) \
693 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_12_PRICE, 0x047B, "Tier 7 Block 12 Price" ) \
694 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_13_PRICE, 0x047C, "Tier 7 Block 13 Price" ) \
695 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_14_PRICE, 0x047D, "Tier 7 Block 14 Price" ) \
696 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_15_PRICE, 0x047E, "Tier 7 Block 15 Price" ) \
697 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_7_BLOCK_16_PRICE, 0x047F, "Tier 7 Block 16 Price" ) \
698 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_1_PRICE, 0x0480, "Tier 8 Block 1 Price" ) \
699 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_2_PRICE, 0x0481, "Tier 8 Block 2 Price" ) \
700 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_3_PRICE, 0x0482, "Tier 8 Block 3 Price" ) \
701 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_4_PRICE, 0x0483, "Tier 8 Block 4 Price" ) \
702 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_5_PRICE, 0x0484, "Tier 8 Block 5 Price" ) \
703 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_6_PRICE, 0x0485, "Tier 8 Block 6 Price" ) \
704 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_7_PRICE, 0x0486, "Tier 8 Block 7 Price" ) \
705 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_8_PRICE, 0x0487, "Tier 8 Block 8 Price" ) \
706 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_9_PRICE, 0x0488, "Tier 8 Block 9 Price" ) \
707 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_10_PRICE, 0x0489, "Tier 8 Block 10 Price" ) \
708 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_11_PRICE, 0x048A, "Tier 8 Block 11 Price" ) \
709 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_12_PRICE, 0x048B, "Tier 8 Block 12 Price" ) \
710 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_13_PRICE, 0x048C, "Tier 8 Block 13 Price" ) \
711 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_14_PRICE, 0x048D, "Tier 8 Block 14 Price" ) \
712 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_15_PRICE, 0x048E, "Tier 8 Block 15 Price" ) \
713 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_8_BLOCK_16_PRICE, 0x048F, "Tier 8 Block 16 Price" ) \
714 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_1_PRICE, 0x0490, "Tier 9 Block 1 Price" ) \
715 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_2_PRICE, 0x0491, "Tier 9 Block 2 Price" ) \
716 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_3_PRICE, 0x0492, "Tier 9 Block 3 Price" ) \
717 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_4_PRICE, 0x0493, "Tier 9 Block 4 Price" ) \
718 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_5_PRICE, 0x0494, "Tier 9 Block 5 Price" ) \
719 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_6_PRICE, 0x0495, "Tier 9 Block 6 Price" ) \
720 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_7_PRICE, 0x0496, "Tier 9 Block 7 Price" ) \
721 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_8_PRICE, 0x0497, "Tier 9 Block 8 Price" ) \
722 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_9_PRICE, 0x0498, "Tier 9 Block 9 Price" ) \
723 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_10_PRICE, 0x0499, "Tier 9 Block 10 Price" ) \
724 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_11_PRICE, 0x049A, "Tier 9 Block 11 Price" ) \
725 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_12_PRICE, 0x049B, "Tier 9 Block 12 Price" ) \
726 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_13_PRICE, 0x049C, "Tier 9 Block 13 Price" ) \
727 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_14_PRICE, 0x049D, "Tier 9 Block 14 Price" ) \
728 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_15_PRICE, 0x049E, "Tier 9 Block 15 Price" ) \
729 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_9_BLOCK_16_PRICE, 0x049F, "Tier 9 Block 16 Price" ) \
730 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_1_PRICE, 0x04A0, "Tier 10 Block 1 Price" ) \
731 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_2_PRICE, 0x04A1, "Tier 10 Block 2 Price" ) \
732 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_3_PRICE, 0x04A2, "Tier 10 Block 3 Price" ) \
733 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_4_PRICE, 0x04A3, "Tier 10 Block 4 Price" ) \
734 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_5_PRICE, 0x04A4, "Tier 10 Block 5 Price" ) \
735 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_6_PRICE, 0x04A5, "Tier 10 Block 6 Price" ) \
736 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_7_PRICE, 0x04A6, "Tier 10 Block 7 Price" ) \
737 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_8_PRICE, 0x04A7, "Tier 10 Block 8 Price" ) \
738 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_9_PRICE, 0x04A8, "Tier 10 Block 9 Price" ) \
739 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_10_PRICE, 0x04A9, "Tier 10 Block 10 Price" ) \
740 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_11_PRICE, 0x04AA, "Tier 10 Block 11 Price" ) \
741 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_12_PRICE, 0x04AB, "Tier 10 Block 12 Price" ) \
742 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_13_PRICE, 0x04AC, "Tier 10 Block 13 Price" ) \
743 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_14_PRICE, 0x04AD, "Tier 10 Block 14 Price" ) \
744 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_15_PRICE, 0x04AE, "Tier 10 Block 15 Price" ) \
745 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_10_BLOCK_16_PRICE, 0x04AF, "Tier 10 Block 16 Price" ) \
746 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_1_PRICE, 0x04B0, "Tier 11 Block 1 Price" ) \
747 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_2_PRICE, 0x04B1, "Tier 11 Block 2 Price" ) \
748 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_3_PRICE, 0x04B2, "Tier 11 Block 3 Price" ) \
749 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_4_PRICE, 0x04B3, "Tier 11 Block 4 Price" ) \
750 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_5_PRICE, 0x04B4, "Tier 11 Block 5 Price" ) \
751 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_6_PRICE, 0x04B5, "Tier 11 Block 6 Price" ) \
752 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_7_PRICE, 0x04B6, "Tier 11 Block 7 Price" ) \
753 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_8_PRICE, 0x04B7, "Tier 11 Block 8 Price" ) \
754 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_9_PRICE, 0x04B8, "Tier 11 Block 9 Price" ) \
755 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_10_PRICE, 0x04B9, "Tier 11 Block 10 Price" ) \
756 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_11_PRICE, 0x04BA, "Tier 11 Block 11 Price" ) \
757 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_12_PRICE, 0x04BB, "Tier 11 Block 12 Price" ) \
758 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_13_PRICE, 0x04BC, "Tier 11 Block 13 Price" ) \
759 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_14_PRICE, 0x04BD, "Tier 11 Block 14 Price" ) \
760 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_15_PRICE, 0x04BE, "Tier 11 Block 15 Price" ) \
761 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_11_BLOCK_16_PRICE, 0x04BF, "Tier 11 Block 16 Price" ) \
762 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_1_PRICE, 0x04C0, "Tier 12 Block 1 Price" ) \
763 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_2_PRICE, 0x04C1, "Tier 12 Block 2 Price" ) \
764 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_3_PRICE, 0x04C2, "Tier 12 Block 3 Price" ) \
765 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_4_PRICE, 0x04C3, "Tier 12 Block 4 Price" ) \
766 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_5_PRICE, 0x04C4, "Tier 12 Block 5 Price" ) \
767 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_6_PRICE, 0x04C5, "Tier 12 Block 6 Price" ) \
768 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_7_PRICE, 0x04C6, "Tier 12 Block 7 Price" ) \
769 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_8_PRICE, 0x04C7, "Tier 12 Block 8 Price" ) \
770 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_9_PRICE, 0x04C8, "Tier 12 Block 9 Price" ) \
771 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_10_PRICE, 0x04C9, "Tier 12 Block 10 Price" ) \
772 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_11_PRICE, 0x04CA, "Tier 12 Block 11 Price" ) \
773 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_12_PRICE, 0x04CB, "Tier 12 Block 12 Price" ) \
774 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_13_PRICE, 0x04CC, "Tier 12 Block 13 Price" ) \
775 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_14_PRICE, 0x04CD, "Tier 12 Block 14 Price" ) \
776 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_15_PRICE, 0x04CE, "Tier 12 Block 15 Price" ) \
777 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_12_BLOCK_16_PRICE, 0x04CF, "Tier 12 Block 16 Price" ) \
778 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_1_PRICE, 0x04D0, "Tier 13 Block 1 Price" ) \
779 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_2_PRICE, 0x04D1, "Tier 13 Block 2 Price" ) \
780 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_3_PRICE, 0x04D2, "Tier 13 Block 3 Price" ) \
781 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_4_PRICE, 0x04D3, "Tier 13 Block 4 Price" ) \
782 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_5_PRICE, 0x04D4, "Tier 13 Block 5 Price" ) \
783 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_6_PRICE, 0x04D5, "Tier 13 Block 6 Price" ) \
784 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_7_PRICE, 0x04D6, "Tier 13 Block 7 Price" ) \
785 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_8_PRICE, 0x04D7, "Tier 13 Block 8 Price" ) \
786 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_9_PRICE, 0x04D8, "Tier 13 Block 9 Price" ) \
787 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_10_PRICE, 0x04D9, "Tier 13 Block 10 Price" ) \
788 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_11_PRICE, 0x04DA, "Tier 13 Block 11 Price" ) \
789 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_12_PRICE, 0x04DB, "Tier 13 Block 12 Price" ) \
790 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_13_PRICE, 0x04DC, "Tier 13 Block 13 Price" ) \
791 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_14_PRICE, 0x04DD, "Tier 13 Block 14 Price" ) \
792 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_15_PRICE, 0x04DE, "Tier 13 Block 15 Price" ) \
793 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_13_BLOCK_16_PRICE, 0x04DF, "Tier 13 Block 16 Price" ) \
794 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_1_PRICE, 0x04E0, "Tier 14 Block 1 Price" ) \
795 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_2_PRICE, 0x04E1, "Tier 14 Block 2 Price" ) \
796 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_3_PRICE, 0x04E2, "Tier 14 Block 3 Price" ) \
797 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_4_PRICE, 0x04E3, "Tier 14 Block 4 Price" ) \
798 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_5_PRICE, 0x04E4, "Tier 14 Block 5 Price" ) \
799 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_6_PRICE, 0x04E5, "Tier 14 Block 6 Price" ) \
800 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_7_PRICE, 0x04E6, "Tier 14 Block 7 Price" ) \
801 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_8_PRICE, 0x04E7, "Tier 14 Block 8 Price" ) \
802 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_9_PRICE, 0x04E8, "Tier 14 Block 9 Price" ) \
803 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_10_PRICE, 0x04E9, "Tier 14 Block 10 Price" ) \
804 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_11_PRICE, 0x04EA, "Tier 14 Block 11 Price" ) \
805 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_12_PRICE, 0x04EB, "Tier 14 Block 12 Price" ) \
806 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_13_PRICE, 0x04EC, "Tier 14 Block 13 Price" ) \
807 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_14_PRICE, 0x04ED, "Tier 14 Block 14 Price" ) \
808 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_15_PRICE, 0x04EE, "Tier 14 Block 15 Price" ) \
809 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_14_BLOCK_16_PRICE, 0x04EF, "Tier 14 Block 16 Price" ) \
810 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_1_PRICE, 0x04F0, "Tier 15 Block 1 Price" ) \
811 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_2_PRICE, 0x04F1, "Tier 15 Block 2 Price" ) \
812 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_3_PRICE, 0x04F2, "Tier 15 Block 3 Price" ) \
813 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_4_PRICE, 0x04F3, "Tier 15 Block 4 Price" ) \
814 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_5_PRICE, 0x04F4, "Tier 15 Block 5 Price" ) \
815 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_6_PRICE, 0x04F5, "Tier 15 Block 6 Price" ) \
816 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_7_PRICE, 0x04F6, "Tier 15 Block 7 Price" ) \
817 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_8_PRICE, 0x04F7, "Tier 15 Block 8 Price" ) \
818 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_9_PRICE, 0x04F8, "Tier 15 Block 9 Price" ) \
819 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_10_PRICE, 0x04F9, "Tier 15 Block 10 Price" ) \
820 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_11_PRICE, 0x04FA, "Tier 15 Block 11 Price" ) \
821 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_12_PRICE, 0x04FB, "Tier 15 Block 12 Price" ) \
822 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_13_PRICE, 0x04FC, "Tier 15 Block 13 Price" ) \
823 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_14_PRICE, 0x04FD, "Tier 15 Block 14 Price" ) \
824 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_15_PRICE, 0x04FE, "Tier 15 Block 15 Price" ) \
825 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_15_BLOCK_16_PRICE, 0x04FF, "Tier 15 Block 16 Price" ) \
826 /* Extended Price Information (Delivered) Set */ \
827 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_16, 0x050F, "Price Tier 16" ) \
828 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_17, 0x0510, "Price Tier 17" ) \
829 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_18, 0x0511, "Price Tier 18" ) \
830 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_19, 0x0512, "Price Tier 19" ) \
831 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_20, 0x0513, "Price Tier 20" ) \
832 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_21, 0x0514, "Price Tier 21" ) \
833 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_22, 0x0515, "Price Tier 22" ) \
834 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_23, 0x0516, "Price Tier 23" ) \
835 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_24, 0x0517, "Price Tier 24" ) \
836 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_25, 0x0518, "Price Tier 25" ) \
837 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_26, 0x0519, "Price Tier 26" ) \
838 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_27, 0x051A, "Price Tier 27" ) \
839 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_28, 0x051B, "Price Tier 28" ) \
840 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_29, 0x051C, "Price Tier 29" ) \
841 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_30, 0x051D, "Price Tier 30" ) \
842 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_31, 0x051E, "Price Tier 31" ) \
843 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_32, 0x051F, "Price Tier 32" ) \
844 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_33, 0x0520, "Price Tier 33" ) \
845 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_34, 0x0521, "Price Tier 34" ) \
846 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_35, 0x0522, "Price Tier 35" ) \
847 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_36, 0x0523, "Price Tier 36" ) \
848 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_37, 0x0524, "Price Tier 37" ) \
849 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_38, 0x0525, "Price Tier 38" ) \
850 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_39, 0x0526, "Price Tier 39" ) \
851 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_40, 0x0527, "Price Tier 40" ) \
852 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_41, 0x0528, "Price Tier 41" ) \
853 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_42, 0x0529, "Price Tier 42" ) \
854 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_43, 0x052A, "Price Tier 43" ) \
855 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_44, 0x052B, "Price Tier 44" ) \
856 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_45, 0x052C, "Price Tier 45" ) \
857 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_46, 0x052D, "Price Tier 46" ) \
858 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_47, 0x052E, "Price Tier 47" ) \
859 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TIER_48, 0x052F, "Price Tier 48" ) \
860 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CPP_1_PRICE, 0x05FE, "CPP 1 Price" ) \
861 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CPP_2_PRICE, 0x05FF, "CPP 2 Price" ) \
862 /* Tariff Information Set (Delivered) */ \
863 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TARIFF_LABEL, 0x0610, "Tariff Label" ) \
864 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NUMBER_OF_PRICE_TIERS_IN_USE, 0x0611, "Number of Price Tiers in Use" ) \
865 XXX(ZBEE_ZCL_ATTR_ID_PRICE_NUMBER_OF_BLOCK_THRES_IN_USE, 0x0612, "Number of Block Thresholds in Use" ) \
866 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TIER_BLOCK_MODE, 0x0613, "Tier Block Mode" ) \
867 XXX(ZBEE_ZCL_ATTR_ID_PRICE_UNIT_OF_MEASURE, 0x0615, "Unit of Measure" ) \
868 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENCY, 0x0616, "Currency" ) \
869 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PRICE_TRAILING_DIGIT, 0x0617, "Price Trailing Digit" ) \
870 XXX(ZBEE_ZCL_ATTR_ID_PRICE_TARIFF_RESOLUTION_PERIOD, 0x0619, "Tariff Resolution Period" ) \
871 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2, 0x0620, "CO2" ) \
872 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2_UNIT, 0x0621, "CO2 Unit" ) \
873 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CO2_TRAILING_DIGIT, 0x0622, "CO2 Trailing Digit" ) \
874 /* Billing Information (Delivered) Attribute Set */ \
875 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENT_BILLING_PERIOD_START, 0x0700, "Current Billing Period Start" ) \
876 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CURRENT_BILLING_PERIOD_DURATION, 0x0701, "Current Billing Period Duration" ) \
877 XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_START, 0x0702, "Last Billing Period Start" ) \
878 XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_DURATION, 0x0703, "Last Billing Period Duration" ) \
879 XXX(ZBEE_ZCL_ATTR_ID_PRICE_LAST_BILLING_PERIOD_CON_BILL, 0x0704, "Last Billing Period Consolidated Bill" ) \
880 /* Credit Payment Attribute Set */ \
881 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DUE_DATE, 0x0800, "Credit Payment Due Date" ) \
882 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_STATUS, 0x0801, "Credit Payment Status" ) \
883 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_OVER_DUE_AMOUNT, 0x0802, "Credit Payment Over Due Amount" ) \
884 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PAYMENT_DISCOUNT, 0x080A, "Payment Discount" ) \
885 XXX(ZBEE_ZCL_ATTR_ID_PRICE_PAYMENT_DISCOUNT_PERIOD, 0x080B, "Payment Discount Period" ) \
886 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_1, 0x0810, "Credit Payment #1" ) \
887 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_1, 0x0811, "Credit Payment Date #1" ) \
888 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_1, 0x0812, "Credit Payment Ref #1" ) \
889 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_2, 0x0820, "Credit Payment #2" ) \
890 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_2, 0x0821, "Credit Payment Date #2" ) \
891 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_2, 0x0822, "Credit Payment Ref #2" ) \
892 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_3, 0x0830, "Credit Payment #3" ) \
893 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_3, 0x0831, "Credit Payment Date #3" ) \
894 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_3, 0x0832, "Credit Payment Ref #3" ) \
895 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_4, 0x0840, "Credit Payment #4" ) \
896 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_4, 0x0841, "Credit Payment Date #4" ) \
897 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_4, 0x0842, "Credit Payment Ref #4" ) \
898 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_5, 0x0850, "Credit Payment #5" ) \
899 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_DATE_5, 0x0851, "Credit Payment Date #5" ) \
900 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CREDIT_PAYMENT_REF_5, 0x0852, "Credit Payment Ref #5" ) \
901 /* Received Tier Label Attribute Set */ \
902 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_1_PRICE_LABEL, 0x8000, "Received Tier 1 Price label" ) \
903 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_2_PRICE_LABEL, 0x8001, "Received Tier 2 Price label" ) \
904 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_3_PRICE_LABEL, 0x8002, "Received Tier 3 Price label" ) \
905 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_4_PRICE_LABEL, 0x8003, "Received Tier 4 Price label" ) \
906 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_5_PRICE_LABEL, 0x8004, "Received Tier 5 Price label" ) \
907 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_6_PRICE_LABEL, 0x8005, "Received Tier 6 Price label" ) \
908 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_7_PRICE_LABEL, 0x8006, "Received Tier 7 Price label" ) \
909 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_8_PRICE_LABEL, 0x8007, "Received Tier 8 Price label" ) \
910 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_9_PRICE_LABEL, 0x8008, "Received Tier 9 Price label" ) \
911 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_10_PRICE_LABEL, 0x8009, "Received Tier 10 Price label" ) \
912 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_11_PRICE_LABEL, 0x800A, "Received Tier 11 Price label" ) \
913 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_12_PRICE_LABEL, 0x800B, "Received Tier 12 Price label" ) \
914 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_13_PRICE_LABEL, 0x800C, "Received Tier 13 Price label" ) \
915 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_14_PRICE_LABEL, 0x800D, "Received Tier 14 Price label" ) \
916 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_15_PRICE_LABEL, 0x800E, "Received Tier 15 Price label" ) \
917 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_16_PRICE_LABEL, 0x800F, "Received Tier 16 Price label" ) \
918 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_17_PRICE_LABEL, 0x8010, "Received Tier 17 Price label" ) \
919 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_18_PRICE_LABEL, 0x8011, "Received Tier 18 Price label" ) \
920 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_19_PRICE_LABEL, 0x8012, "Received Tier 19 Price label" ) \
921 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_20_PRICE_LABEL, 0x8013, "Received Tier 20 Price label" ) \
922 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_21_PRICE_LABEL, 0x8014, "Received Tier 21 Price label" ) \
923 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_22_PRICE_LABEL, 0x8015, "Received Tier 22 Price label" ) \
924 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_23_PRICE_LABEL, 0x8016, "Received Tier 23 Price label" ) \
925 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_24_PRICE_LABEL, 0x8017, "Received Tier 24 Price label" ) \
926 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_25_PRICE_LABEL, 0x8018, "Received Tier 25 Price label" ) \
927 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_26_PRICE_LABEL, 0x8019, "Received Tier 26 Price label" ) \
928 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_27_PRICE_LABEL, 0x801A, "Received Tier 27 Price label" ) \
929 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_28_PRICE_LABEL, 0x801B, "Received Tier 28 Price label" ) \
930 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_29_PRICE_LABEL, 0x801C, "Received Tier 29 Price label" ) \
931 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_30_PRICE_LABEL, 0x801D, "Received Tier 30 Price label" ) \
932 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_31_PRICE_LABEL, 0x801E, "Received Tier 31 Price label" ) \
933 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_32_PRICE_LABEL, 0x801F, "Received Tier 32 Price label" ) \
934 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_33_PRICE_LABEL, 0x8020, "Received Tier 33 Price label" ) \
935 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_34_PRICE_LABEL, 0x8021, "Received Tier 34 Price label" ) \
936 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_35_PRICE_LABEL, 0x8022, "Received Tier 35 Price label" ) \
937 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_36_PRICE_LABEL, 0x8023, "Received Tier 36 Price label" ) \
938 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_37_PRICE_LABEL, 0x8024, "Received Tier 37 Price label" ) \
939 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_38_PRICE_LABEL, 0x8025, "Received Tier 38 Price label" ) \
940 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_39_PRICE_LABEL, 0x8026, "Received Tier 39 Price label" ) \
941 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_40_PRICE_LABEL, 0x8027, "Received Tier 40 Price label" ) \
942 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_41_PRICE_LABEL, 0x8028, "Received Tier 41 Price label" ) \
943 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_42_PRICE_LABEL, 0x8029, "Received Tier 42 Price label" ) \
944 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_43_PRICE_LABEL, 0x802A, "Received Tier 43 Price label" ) \
945 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_44_PRICE_LABEL, 0x802B, "Received Tier 44 Price label" ) \
946 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_45_PRICE_LABEL, 0x802C, "Received Tier 45 Price label" ) \
947 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_46_PRICE_LABEL, 0x802D, "Received Tier 46 Price label" ) \
948 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_47_PRICE_LABEL, 0x802E, "Received Tier 47 Price label" ) \
949 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_48_PRICE_LABEL, 0x802F, "Received Tier 48 Price label" ) \
950 /* Received Block Threshold Attribute Set */ \
951 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_1_THRESHOLD, 0x8100, "Received Block 1 Threshold" ) \
952 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_2_THRESHOLD, 0x8101, "Received Block 2 Threshold" ) \
953 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_3_THRESHOLD, 0x8102, "Received Block 3 Threshold" ) \
954 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_4_THRESHOLD, 0x8103, "Received Block 4 Threshold" ) \
955 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_5_THRESHOLD, 0x8104, "Received Block 5 Threshold" ) \
956 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_6_THRESHOLD, 0x8105, "Received Block 6 Threshold" ) \
957 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_7_THRESHOLD, 0x8106, "Received Block 7 Threshold" ) \
958 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_8_THRESHOLD, 0x8107, "Received Block 8 Threshold" ) \
959 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_9_THRESHOLD, 0x8108, "Received Block 9 Threshold" ) \
960 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_10_THRESHOLD, 0x8109, "Received Block 10 Threshold" ) \
961 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_11_THRESHOLD, 0x810A, "Received Block 11 Threshold" ) \
962 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_12_THRESHOLD, 0x810B, "Received Block 12 Threshold" ) \
963 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_13_THRESHOLD, 0x810C, "Received Block 13 Threshold" ) \
964 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_14_THRESHOLD, 0x810D, "Received Block 14 Threshold" ) \
965 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_15_THRESHOLD, 0x810E, "Received Block 15 Threshold" ) \
966 /* Received Block Period Attribute Set */ \
967 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_START_OF_BLOCK_PERIOD, 0x8200, "Received Start of Block Period" ) \
968 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_BLOCK_PERIOD_DURATION, 0x8201, "Received Block Period Duration" ) \
969 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_THRESHOLD_MULTIPLIER, 0x8202, "Received Threshold Multiplier" ) \
970 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_THRESHOLD_DIVISOR, 0x8203, "Received Threshold Divisor" ) \
971 /* Received Block Price Information Attribute Set */ \
972 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_1_PRICE, 0x8400, "Rx No Tier Block 1 Price" ) \
973 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_2_PRICE, 0x8401, "Rx No Tier Block 2 Price" ) \
974 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_3_PRICE, 0x8402, "Rx No Tier Block 3 Price" ) \
975 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_4_PRICE, 0x8403, "Rx No Tier Block 4 Price" ) \
976 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_5_PRICE, 0x8404, "Rx No Tier Block 5 Price" ) \
977 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_6_PRICE, 0x8405, "Rx No Tier Block 6 Price" ) \
978 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_7_PRICE, 0x8406, "Rx No Tier Block 7 Price" ) \
979 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_8_PRICE, 0x8407, "Rx No Tier Block 8 Price" ) \
980 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_9_PRICE, 0x8408, "Rx No Tier Block 9 Price" ) \
981 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_10_PRICE, 0x8409, "Rx No Tier Block 10 Price" ) \
982 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_11_PRICE, 0x840A, "Rx No Tier Block 11 Price" ) \
983 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_12_PRICE, 0x840B, "Rx No Tier Block 12 Price" ) \
984 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_13_PRICE, 0x840C, "Rx No Tier Block 13 Price" ) \
985 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_14_PRICE, 0x840D, "Rx No Tier Block 14 Price" ) \
986 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_15_PRICE, 0x840E, "Rx No Tier Block 15 Price" ) \
987 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NO_TIER_BLOCK_16_PRICE, 0x840F, "Rx No Tier Block 16 Price" ) \
988 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_1_PRICE, 0x8410, "Rx Tier 1 Block 1 Price" ) \
989 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_2_PRICE, 0x8411, "Rx Tier 1 Block 2 Price" ) \
990 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_3_PRICE, 0x8412, "Rx Tier 1 Block 3 Price" ) \
991 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_4_PRICE, 0x8413, "Rx Tier 1 Block 4 Price" ) \
992 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_5_PRICE, 0x8414, "Rx Tier 1 Block 5 Price" ) \
993 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_6_PRICE, 0x8415, "Rx Tier 1 Block 6 Price" ) \
994 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_7_PRICE, 0x8416, "Rx Tier 1 Block 7 Price" ) \
995 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_8_PRICE, 0x8417, "Rx Tier 1 Block 8 Price" ) \
996 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_9_PRICE, 0x8418, "Rx Tier 1 Block 9 Price" ) \
997 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_10_PRICE, 0x8419, "Rx Tier 1 Block 10 Price" ) \
998 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_11_PRICE, 0x841A, "Rx Tier 1 Block 11 Price" ) \
999 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_12_PRICE, 0x841B, "Rx Tier 1 Block 12 Price" ) \
1000 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_13_PRICE, 0x841C, "Rx Tier 1 Block 13 Price" ) \
1001 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_14_PRICE, 0x841D, "Rx Tier 1 Block 14 Price" ) \
1002 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_15_PRICE, 0x841E, "Rx Tier 1 Block 15 Price" ) \
1003 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_1_BLOCK_16_PRICE, 0x841F, "Rx Tier 1 Block 16 Price" ) \
1004 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_1_PRICE, 0x8420, "Rx Tier 2 Block 1 Price" ) \
1005 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_2_PRICE, 0x8421, "Rx Tier 2 Block 2 Price" ) \
1006 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_3_PRICE, 0x8422, "Rx Tier 2 Block 3 Price" ) \
1007 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_4_PRICE, 0x8423, "Rx Tier 2 Block 4 Price" ) \
1008 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_5_PRICE, 0x8424, "Rx Tier 2 Block 5 Price" ) \
1009 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_6_PRICE, 0x8425, "Rx Tier 2 Block 6 Price" ) \
1010 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_7_PRICE, 0x8426, "Rx Tier 2 Block 7 Price" ) \
1011 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_8_PRICE, 0x8427, "Rx Tier 2 Block 8 Price" ) \
1012 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_9_PRICE, 0x8428, "Rx Tier 2 Block 9 Price" ) \
1013 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_10_PRICE, 0x8429, "Rx Tier 2 Block 10 Price" ) \
1014 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_11_PRICE, 0x842A, "Rx Tier 2 Block 11 Price" ) \
1015 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_12_PRICE, 0x842B, "Rx Tier 2 Block 12 Price" ) \
1016 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_13_PRICE, 0x842C, "Rx Tier 2 Block 13 Price" ) \
1017 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_14_PRICE, 0x842D, "Rx Tier 2 Block 14 Price" ) \
1018 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_15_PRICE, 0x842E, "Rx Tier 2 Block 15 Price" ) \
1019 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_2_BLOCK_16_PRICE, 0x842F, "Rx Tier 2 Block 16 Price" ) \
1020 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_1_PRICE, 0x8430, "Rx Tier 3 Block 1 Price" ) \
1021 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_2_PRICE, 0x8431, "Rx Tier 3 Block 2 Price" ) \
1022 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_3_PRICE, 0x8432, "Rx Tier 3 Block 3 Price" ) \
1023 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_4_PRICE, 0x8433, "Rx Tier 3 Block 4 Price" ) \
1024 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_5_PRICE, 0x8434, "Rx Tier 3 Block 5 Price" ) \
1025 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_6_PRICE, 0x8435, "Rx Tier 3 Block 6 Price" ) \
1026 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_7_PRICE, 0x8436, "Rx Tier 3 Block 7 Price" ) \
1027 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_8_PRICE, 0x8437, "Rx Tier 3 Block 8 Price" ) \
1028 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_9_PRICE, 0x8438, "Rx Tier 3 Block 9 Price" ) \
1029 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_10_PRICE, 0x8439, "Rx Tier 3 Block 10 Price" ) \
1030 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_11_PRICE, 0x843A, "Rx Tier 3 Block 11 Price" ) \
1031 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_12_PRICE, 0x843B, "Rx Tier 3 Block 12 Price" ) \
1032 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_13_PRICE, 0x843C, "Rx Tier 3 Block 13 Price" ) \
1033 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_14_PRICE, 0x843D, "Rx Tier 3 Block 14 Price" ) \
1034 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_15_PRICE, 0x843E, "Rx Tier 3 Block 15 Price" ) \
1035 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_3_BLOCK_16_PRICE, 0x843F, "Rx Tier 3 Block 16 Price" ) \
1036 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_1_PRICE, 0x8440, "Rx Tier 4 Block 1 Price" ) \
1037 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_2_PRICE, 0x8441, "Rx Tier 4 Block 2 Price" ) \
1038 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_3_PRICE, 0x8442, "Rx Tier 4 Block 3 Price" ) \
1039 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_4_PRICE, 0x8443, "Rx Tier 4 Block 4 Price" ) \
1040 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_5_PRICE, 0x8444, "Rx Tier 4 Block 5 Price" ) \
1041 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_6_PRICE, 0x8445, "Rx Tier 4 Block 6 Price" ) \
1042 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_7_PRICE, 0x8446, "Rx Tier 4 Block 7 Price" ) \
1043 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_8_PRICE, 0x8447, "Rx Tier 4 Block 8 Price" ) \
1044 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_9_PRICE, 0x8448, "Rx Tier 4 Block 9 Price" ) \
1045 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_10_PRICE, 0x8449, "Rx Tier 4 Block 10 Price" ) \
1046 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_11_PRICE, 0x844A, "Rx Tier 4 Block 11 Price" ) \
1047 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_12_PRICE, 0x844B, "Rx Tier 4 Block 12 Price" ) \
1048 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_13_PRICE, 0x844C, "Rx Tier 4 Block 13 Price" ) \
1049 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_14_PRICE, 0x844D, "Rx Tier 4 Block 14 Price" ) \
1050 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_15_PRICE, 0x844E, "Rx Tier 4 Block 15 Price" ) \
1051 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_4_BLOCK_16_PRICE, 0x844F, "Rx Tier 4 Block 16 Price" ) \
1052 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_1_PRICE, 0x8450, "Rx Tier 5 Block 1 Price" ) \
1053 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_2_PRICE, 0x8451, "Rx Tier 5 Block 2 Price" ) \
1054 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_3_PRICE, 0x8452, "Rx Tier 5 Block 3 Price" ) \
1055 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_4_PRICE, 0x8453, "Rx Tier 5 Block 4 Price" ) \
1056 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_5_PRICE, 0x8454, "Rx Tier 5 Block 5 Price" ) \
1057 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_6_PRICE, 0x8455, "Rx Tier 5 Block 6 Price" ) \
1058 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_7_PRICE, 0x8456, "Rx Tier 5 Block 7 Price" ) \
1059 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_8_PRICE, 0x8457, "Rx Tier 5 Block 8 Price" ) \
1060 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_9_PRICE, 0x8458, "Rx Tier 5 Block 9 Price" ) \
1061 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_10_PRICE, 0x8459, "Rx Tier 5 Block 10 Price" ) \
1062 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_11_PRICE, 0x845A, "Rx Tier 5 Block 11 Price" ) \
1063 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_12_PRICE, 0x845B, "Rx Tier 5 Block 12 Price" ) \
1064 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_13_PRICE, 0x845C, "Rx Tier 5 Block 13 Price" ) \
1065 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_14_PRICE, 0x845D, "Rx Tier 5 Block 14 Price" ) \
1066 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_15_PRICE, 0x845E, "Rx Tier 5 Block 15 Price" ) \
1067 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_5_BLOCK_16_PRICE, 0x845F, "Rx Tier 5 Block 16 Price" ) \
1068 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_1_PRICE, 0x8460, "Rx Tier 6 Block 1 Price" ) \
1069 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_2_PRICE, 0x8461, "Rx Tier 6 Block 2 Price" ) \
1070 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_3_PRICE, 0x8462, "Rx Tier 6 Block 3 Price" ) \
1071 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_4_PRICE, 0x8463, "Rx Tier 6 Block 4 Price" ) \
1072 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_5_PRICE, 0x8464, "Rx Tier 6 Block 5 Price" ) \
1073 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_6_PRICE, 0x8465, "Rx Tier 6 Block 6 Price" ) \
1074 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_7_PRICE, 0x8466, "Rx Tier 6 Block 7 Price" ) \
1075 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_8_PRICE, 0x8467, "Rx Tier 6 Block 8 Price" ) \
1076 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_9_PRICE, 0x8468, "Rx Tier 6 Block 9 Price" ) \
1077 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_10_PRICE, 0x8469, "Rx Tier 6 Block 10 Price" ) \
1078 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_11_PRICE, 0x846A, "Rx Tier 6 Block 11 Price" ) \
1079 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_12_PRICE, 0x846B, "Rx Tier 6 Block 12 Price" ) \
1080 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_13_PRICE, 0x846C, "Rx Tier 6 Block 13 Price" ) \
1081 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_14_PRICE, 0x846D, "Rx Tier 6 Block 14 Price" ) \
1082 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_15_PRICE, 0x846E, "Rx Tier 6 Block 15 Price" ) \
1083 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_6_BLOCK_16_PRICE, 0x846F, "Rx Tier 6 Block 16 Price" ) \
1084 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_1_PRICE, 0x8470, "Rx Tier 7 Block 1 Price" ) \
1085 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_2_PRICE, 0x8471, "Rx Tier 7 Block 2 Price" ) \
1086 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_3_PRICE, 0x8472, "Rx Tier 7 Block 3 Price" ) \
1087 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_4_PRICE, 0x8473, "Rx Tier 7 Block 4 Price" ) \
1088 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_5_PRICE, 0x8474, "Rx Tier 7 Block 5 Price" ) \
1089 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_6_PRICE, 0x8475, "Rx Tier 7 Block 6 Price" ) \
1090 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_7_PRICE, 0x8476, "Rx Tier 7 Block 7 Price" ) \
1091 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_8_PRICE, 0x8477, "Rx Tier 7 Block 8 Price" ) \
1092 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_9_PRICE, 0x8478, "Rx Tier 7 Block 9 Price" ) \
1093 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_10_PRICE, 0x8479, "Rx Tier 7 Block 10 Price" ) \
1094 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_11_PRICE, 0x847A, "Rx Tier 7 Block 11 Price" ) \
1095 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_12_PRICE, 0x847B, "Rx Tier 7 Block 12 Price" ) \
1096 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_13_PRICE, 0x847C, "Rx Tier 7 Block 13 Price" ) \
1097 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_14_PRICE, 0x847D, "Rx Tier 7 Block 14 Price" ) \
1098 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_15_PRICE, 0x847E, "Rx Tier 7 Block 15 Price" ) \
1099 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_7_BLOCK_16_PRICE, 0x847F, "Rx Tier 7 Block 16 Price" ) \
1100 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_1_PRICE, 0x8480, "Rx Tier 8 Block 1 Price" ) \
1101 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_2_PRICE, 0x8481, "Rx Tier 8 Block 2 Price" ) \
1102 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_3_PRICE, 0x8482, "Rx Tier 8 Block 3 Price" ) \
1103 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_4_PRICE, 0x8483, "Rx Tier 8 Block 4 Price" ) \
1104 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_5_PRICE, 0x8484, "Rx Tier 8 Block 5 Price" ) \
1105 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_6_PRICE, 0x8485, "Rx Tier 8 Block 6 Price" ) \
1106 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_7_PRICE, 0x8486, "Rx Tier 8 Block 7 Price" ) \
1107 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_8_PRICE, 0x8487, "Rx Tier 8 Block 8 Price" ) \
1108 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_9_PRICE, 0x8488, "Rx Tier 8 Block 9 Price" ) \
1109 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_10_PRICE, 0x8489, "Rx Tier 8 Block 10 Price" ) \
1110 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_11_PRICE, 0x848A, "Rx Tier 8 Block 11 Price" ) \
1111 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_12_PRICE, 0x848B, "Rx Tier 8 Block 12 Price" ) \
1112 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_13_PRICE, 0x848C, "Rx Tier 8 Block 13 Price" ) \
1113 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_14_PRICE, 0x848D, "Rx Tier 8 Block 14 Price" ) \
1114 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_15_PRICE, 0x848E, "Rx Tier 8 Block 15 Price" ) \
1115 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_8_BLOCK_16_PRICE, 0x848F, "Rx Tier 8 Block 16 Price" ) \
1116 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_1_PRICE, 0x8490, "Rx Tier 9 Block 1 Price" ) \
1117 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_2_PRICE, 0x8491, "Rx Tier 9 Block 2 Price" ) \
1118 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_3_PRICE, 0x8492, "Rx Tier 9 Block 3 Price" ) \
1119 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_4_PRICE, 0x8493, "Rx Tier 9 Block 4 Price" ) \
1120 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_5_PRICE, 0x8494, "Rx Tier 9 Block 5 Price" ) \
1121 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_6_PRICE, 0x8495, "Rx Tier 9 Block 6 Price" ) \
1122 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_7_PRICE, 0x8496, "Rx Tier 9 Block 7 Price" ) \
1123 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_8_PRICE, 0x8497, "Rx Tier 9 Block 8 Price" ) \
1124 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_9_PRICE, 0x8498, "Rx Tier 9 Block 9 Price" ) \
1125 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_10_PRICE, 0x8499, "Rx Tier 9 Block 10 Price" ) \
1126 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_11_PRICE, 0x849A, "Rx Tier 9 Block 11 Price" ) \
1127 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_12_PRICE, 0x849B, "Rx Tier 9 Block 12 Price" ) \
1128 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_13_PRICE, 0x849C, "Rx Tier 9 Block 13 Price" ) \
1129 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_14_PRICE, 0x849D, "Rx Tier 9 Block 14 Price" ) \
1130 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_15_PRICE, 0x849E, "Rx Tier 9 Block 15 Price" ) \
1131 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_9_BLOCK_16_PRICE, 0x849F, "Rx Tier 9 Block 16 Price" ) \
1132 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_1_PRICE, 0x84A0, "Rx Tier 10 Block 1 Price" ) \
1133 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_2_PRICE, 0x84A1, "Rx Tier 10 Block 2 Price" ) \
1134 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_3_PRICE, 0x84A2, "Rx Tier 10 Block 3 Price" ) \
1135 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_4_PRICE, 0x84A3, "Rx Tier 10 Block 4 Price" ) \
1136 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_5_PRICE, 0x84A4, "Rx Tier 10 Block 5 Price" ) \
1137 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_6_PRICE, 0x84A5, "Rx Tier 10 Block 6 Price" ) \
1138 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_7_PRICE, 0x84A6, "Rx Tier 10 Block 7 Price" ) \
1139 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_8_PRICE, 0x84A7, "Rx Tier 10 Block 8 Price" ) \
1140 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_9_PRICE, 0x84A8, "Rx Tier 10 Block 9 Price" ) \
1141 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_10_PRICE, 0x84A9, "Rx Tier 10 Block 10 Price" ) \
1142 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_11_PRICE, 0x84AA, "Rx Tier 10 Block 11 Price" ) \
1143 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_12_PRICE, 0x84AB, "Rx Tier 10 Block 12 Price" ) \
1144 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_13_PRICE, 0x84AC, "Rx Tier 10 Block 13 Price" ) \
1145 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_14_PRICE, 0x84AD, "Rx Tier 10 Block 14 Price" ) \
1146 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_15_PRICE, 0x84AE, "Rx Tier 10 Block 15 Price" ) \
1147 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_10_BLOCK_16_PRICE, 0x84AF, "Rx Tier 10 Block 16 Price" ) \
1148 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_1_PRICE, 0x84B0, "Rx Tier 11 Block 1 Price" ) \
1149 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_2_PRICE, 0x84B1, "Rx Tier 11 Block 2 Price" ) \
1150 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_3_PRICE, 0x84B2, "Rx Tier 11 Block 3 Price" ) \
1151 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_4_PRICE, 0x84B3, "Rx Tier 11 Block 4 Price" ) \
1152 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_5_PRICE, 0x84B4, "Rx Tier 11 Block 5 Price" ) \
1153 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_6_PRICE, 0x84B5, "Rx Tier 11 Block 6 Price" ) \
1154 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_7_PRICE, 0x84B6, "Rx Tier 11 Block 7 Price" ) \
1155 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_8_PRICE, 0x84B7, "Rx Tier 11 Block 8 Price" ) \
1156 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_9_PRICE, 0x84B8, "Rx Tier 11 Block 9 Price" ) \
1157 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_10_PRICE, 0x84B9, "Rx Tier 11 Block 10 Price" ) \
1158 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_11_PRICE, 0x84BA, "Rx Tier 11 Block 11 Price" ) \
1159 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_12_PRICE, 0x84BB, "Rx Tier 11 Block 12 Price" ) \
1160 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_13_PRICE, 0x84BC, "Rx Tier 11 Block 13 Price" ) \
1161 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_14_PRICE, 0x84BD, "Rx Tier 11 Block 14 Price" ) \
1162 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_15_PRICE, 0x84BE, "Rx Tier 11 Block 15 Price" ) \
1163 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_11_BLOCK_16_PRICE, 0x84BF, "Rx Tier 11 Block 16 Price" ) \
1164 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_1_PRICE, 0x84C0, "Rx Tier 12 Block 1 Price" ) \
1165 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_2_PRICE, 0x84C1, "Rx Tier 12 Block 2 Price" ) \
1166 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_3_PRICE, 0x84C2, "Rx Tier 12 Block 3 Price" ) \
1167 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_4_PRICE, 0x84C3, "Rx Tier 12 Block 4 Price" ) \
1168 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_5_PRICE, 0x84C4, "Rx Tier 12 Block 5 Price" ) \
1169 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_6_PRICE, 0x84C5, "Rx Tier 12 Block 6 Price" ) \
1170 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_7_PRICE, 0x84C6, "Rx Tier 12 Block 7 Price" ) \
1171 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_8_PRICE, 0x84C7, "Rx Tier 12 Block 8 Price" ) \
1172 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_9_PRICE, 0x84C8, "Rx Tier 12 Block 9 Price" ) \
1173 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_10_PRICE, 0x84C9, "Rx Tier 12 Block 10 Price" ) \
1174 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_11_PRICE, 0x84CA, "Rx Tier 12 Block 11 Price" ) \
1175 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_12_PRICE, 0x84CB, "Rx Tier 12 Block 12 Price" ) \
1176 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_13_PRICE, 0x84CC, "Rx Tier 12 Block 13 Price" ) \
1177 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_14_PRICE, 0x84CD, "Rx Tier 12 Block 14 Price" ) \
1178 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_15_PRICE, 0x84CE, "Rx Tier 12 Block 15 Price" ) \
1179 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_12_BLOCK_16_PRICE, 0x84CF, "Rx Tier 12 Block 16 Price" ) \
1180 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_1_PRICE, 0x84D0, "Rx Tier 13 Block 1 Price" ) \
1181 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_2_PRICE, 0x84D1, "Rx Tier 13 Block 2 Price" ) \
1182 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_3_PRICE, 0x84D2, "Rx Tier 13 Block 3 Price" ) \
1183 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_4_PRICE, 0x84D3, "Rx Tier 13 Block 4 Price" ) \
1184 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_5_PRICE, 0x84D4, "Rx Tier 13 Block 5 Price" ) \
1185 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_6_PRICE, 0x84D5, "Rx Tier 13 Block 6 Price" ) \
1186 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_7_PRICE, 0x84D6, "Rx Tier 13 Block 7 Price" ) \
1187 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_8_PRICE, 0x84D7, "Rx Tier 13 Block 8 Price" ) \
1188 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_9_PRICE, 0x84D8, "Rx Tier 13 Block 9 Price" ) \
1189 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_10_PRICE, 0x84D9, "Rx Tier 13 Block 10 Price" ) \
1190 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_11_PRICE, 0x84DA, "Rx Tier 13 Block 11 Price" ) \
1191 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_12_PRICE, 0x84DB, "Rx Tier 13 Block 12 Price" ) \
1192 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_13_PRICE, 0x84DC, "Rx Tier 13 Block 13 Price" ) \
1193 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_14_PRICE, 0x84DD, "Rx Tier 13 Block 14 Price" ) \
1194 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_15_PRICE, 0x84DE, "Rx Tier 13 Block 15 Price" ) \
1195 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_13_BLOCK_16_PRICE, 0x84DF, "Rx Tier 13 Block 16 Price" ) \
1196 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_1_PRICE, 0x84E0, "Rx Tier 14 Block 1 Price" ) \
1197 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_2_PRICE, 0x84E1, "Rx Tier 14 Block 2 Price" ) \
1198 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_3_PRICE, 0x84E2, "Rx Tier 14 Block 3 Price" ) \
1199 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_4_PRICE, 0x84E3, "Rx Tier 14 Block 4 Price" ) \
1200 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_5_PRICE, 0x84E4, "Rx Tier 14 Block 5 Price" ) \
1201 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_6_PRICE, 0x84E5, "Rx Tier 14 Block 6 Price" ) \
1202 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_7_PRICE, 0x84E6, "Rx Tier 14 Block 7 Price" ) \
1203 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_8_PRICE, 0x84E7, "Rx Tier 14 Block 8 Price" ) \
1204 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_9_PRICE, 0x84E8, "Rx Tier 14 Block 9 Price" ) \
1205 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_10_PRICE, 0x84E9, "Rx Tier 14 Block 10 Price" ) \
1206 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_11_PRICE, 0x84EA, "Rx Tier 14 Block 11 Price" ) \
1207 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_12_PRICE, 0x84EB, "Rx Tier 14 Block 12 Price" ) \
1208 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_13_PRICE, 0x84EC, "Rx Tier 14 Block 13 Price" ) \
1209 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_14_PRICE, 0x84ED, "Rx Tier 14 Block 14 Price" ) \
1210 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_15_PRICE, 0x84EE, "Rx Tier 14 Block 15 Price" ) \
1211 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_14_BLOCK_16_PRICE, 0x84EF, "Rx Tier 14 Block 16 Price" ) \
1212 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_1_PRICE, 0x84F0, "Rx Tier 15 Block 1 Price" ) \
1213 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_2_PRICE, 0x84F1, "Rx Tier 15 Block 2 Price" ) \
1214 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_3_PRICE, 0x84F2, "Rx Tier 15 Block 3 Price" ) \
1215 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_4_PRICE, 0x84F3, "Rx Tier 15 Block 4 Price" ) \
1216 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_5_PRICE, 0x84F4, "Rx Tier 15 Block 5 Price" ) \
1217 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_6_PRICE, 0x84F5, "Rx Tier 15 Block 6 Price" ) \
1218 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_7_PRICE, 0x84F6, "Rx Tier 15 Block 7 Price" ) \
1219 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_8_PRICE, 0x84F7, "Rx Tier 15 Block 8 Price" ) \
1220 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_9_PRICE, 0x84F8, "Rx Tier 15 Block 9 Price" ) \
1221 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_10_PRICE, 0x84F9, "Rx Tier 15 Block 10 Price" ) \
1222 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_11_PRICE, 0x84FA, "Rx Tier 15 Block 11 Price" ) \
1223 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_12_PRICE, 0x84FB, "Rx Tier 15 Block 12 Price" ) \
1224 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_13_PRICE, 0x84FC, "Rx Tier 15 Block 13 Price" ) \
1225 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_14_PRICE, 0x84FD, "Rx Tier 15 Block 14 Price" ) \
1226 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_15_PRICE, 0x84FE, "Rx Tier 15 Block 15 Price" ) \
1227 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_TIER_15_BLOCK_16_PRICE, 0x84FF, "Rx Tier 15 Block 16 Price" ) \
1228 /* Received Extended Price Information Attribute Set */ \
1229 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_16, 0x850F, "Received Price Tier 16" ) \
1230 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_17, 0x8510, "Received Price Tier 17" ) \
1231 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_18, 0x8511, "Received Price Tier 18" ) \
1232 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_19, 0x8512, "Received Price Tier 19" ) \
1233 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_20, 0x8513, "Received Price Tier 20" ) \
1234 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_21, 0x8514, "Received Price Tier 21" ) \
1235 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_22, 0x8515, "Received Price Tier 22" ) \
1236 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_23, 0x8516, "Received Price Tier 23" ) \
1237 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_24, 0x8517, "Received Price Tier 24" ) \
1238 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_25, 0x8518, "Received Price Tier 25" ) \
1239 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_26, 0x8519, "Received Price Tier 26" ) \
1240 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_27, 0x851A, "Received Price Tier 27" ) \
1241 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_28, 0x851B, "Received Price Tier 28" ) \
1242 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_29, 0x851C, "Received Price Tier 29" ) \
1243 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_30, 0x851D, "Received Price Tier 30" ) \
1244 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_31, 0x851E, "Received Price Tier 31" ) \
1245 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_32, 0x851F, "Received Price Tier 32" ) \
1246 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_33, 0x8520, "Received Price Tier 33" ) \
1247 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_34, 0x8521, "Received Price Tier 34" ) \
1248 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_35, 0x8522, "Received Price Tier 35" ) \
1249 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_36, 0x8523, "Received Price Tier 36" ) \
1250 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_37, 0x8524, "Received Price Tier 37" ) \
1251 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_38, 0x8525, "Received Price Tier 38" ) \
1252 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_39, 0x8526, "Received Price Tier 39" ) \
1253 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_40, 0x8527, "Received Price Tier 40" ) \
1254 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_41, 0x8528, "Received Price Tier 41" ) \
1255 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_42, 0x8529, "Received Price Tier 42" ) \
1256 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_43, 0x852A, "Received Price Tier 43" ) \
1257 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_44, 0x852B, "Received Price Tier 44" ) \
1258 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_45, 0x852C, "Received Price Tier 45" ) \
1259 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_46, 0x852D, "Received Price Tier 46" ) \
1260 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_47, 0x852E, "Received Price Tier 47" ) \
1261 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_PRICE_TIER_48, 0x852F, "Received Price Tier 48" ) \
1262 /* Received Tariff Information Attribute Set */ \
1263 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TARIFF_LABEL, 0x8610, "Received Tariff label" ) \
1264 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NUM_OF_PRICE_TIERS_IN_USE, 0x8611, "Received Number of Tariff Tiers in Use" ) \
1265 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_NUM_OF_BLOCK_THRES_IN_USE, 0x8612, "Received Number of Block Thresholds in Use" ) \
1266 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TIER_BLOCK_MODE, 0x8613, "Received Tier Block Mode" ) \
1267 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_TARIFF_RES_PERIOD, 0x8615, "Received tariff Resolution Period" ) \
1268 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2, 0x8625, "Received CO2" ) \
1269 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2_UNIT, 0x8626, "Received CO2 Unit" ) \
1270 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RECEIVED_CO2_TRAILING_DIGIT, 0x8627, "Received CO2 Trailing Digit" ) \
1271 /* Received Billing Information Attribute Set */ \
1272 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_CURRENT_BILLING_PERIOD_START, 0x8700, "Received Current Billing Period Start" ) \
1273 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_CURRENT_BILLING_PERIOD_DUR, 0x8701, "Received Current Billing Period Duration" ) \
1274 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_LAST_BILLING_PERIOD_START, 0x8702, "Received Last Billing Period Start" ) \
1275 XXX(ZBEE_ZCL_ATTR_ID_PRICE_RX_LAST_BILLING_PERIOD_CON_BILL, 0x8704, "Received Last Billing Period Consolidated Bill" ) \
1276 /* Smart Energy */ \
1277 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE, 0xFFFE, "Attribute Reporting Status" )
1279 VALUE_STRING_ENUM(zbee_zcl_price_attr_server_names);
1280 VALUE_STRING_ARRAY(zbee_zcl_price_attr_server_names);
1281 static value_string_ext zbee_zcl_price_attr_server_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_price_attr_server_names);
1283 #define zbee_zcl_price_attr_client_names_VALUE_STRING_LIST(XXX) \
1284 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_PRICE_INC_RND_MINUTES, 0x0000, "Price Increase Randomize Minutes" ) \
1285 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_PRICE_DEC_RND_MINUTES, 0x0001, "Price Decrease Randomize Minutes" ) \
1286 XXX(ZBEE_ZCL_ATTR_ID_PRICE_CLNT_COMMODITY_TYPE, 0x0002, "Commodity Type" ) \
1287 /* Smart Energy */ \
1288 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE_CLNT, 0xFFFE, "Attribute Reporting Status" )
1290 VALUE_STRING_ENUM(zbee_zcl_price_attr_client_names);
1291 VALUE_STRING_ARRAY(zbee_zcl_price_attr_client_names);
1293 /* Server Commands Received */
1294 #define zbee_zcl_price_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
1295 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENT_PRICE, 0x00, "Get Current Price" ) \
1296 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_SCHEDULED_PRICES, 0x01, "Get Scheduled Prices" ) \
1297 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_ACKNOWLEDGEMENT, 0x02, "Price Acknowledgement" ) \
1298 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_PERIOD, 0x03, "Get Block Period(s)" ) \
1299 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CONVERSION_FACTOR, 0x04, "Get Conversion Factor" ) \
1300 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CALORIFIC_VALUE, 0x05, "Get Calorific Value" ) \
1301 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_INFORMATION, 0x06, "Get Tariff Information" ) \
1302 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_MATRIX, 0x07, "Get Price Matrix" ) \
1303 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_THRESHOLDS, 0x08, "Get Block Thresholds" ) \
1304 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CO2_VALUE, 0x09, "Get CO2 Value" ) \
1305 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TIER_LABELS, 0x0A, "Get Tier Labels" ) \
1306 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_BILLING_PERIOD, 0x0B, "Get Billing Period" ) \
1307 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CONSOLIDATED_BILL, 0x0C, "Get Consolidated Bill" ) \
1308 XXX(ZBEE_ZCL_CMD_ID_PRICE_CPP_EVENT_RESPONSE, 0x0D, "CPP Event Response" ) \
1309 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CREDIT_PAYMENT, 0x0E, "Get Credit Payment" ) \
1310 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENCY_CONVERSION, 0x0F, "Get Currency Conversion" ) \
1311 XXX(ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_CANCELLATION, 0x10, "Get Tariff Cancellation" )
1313 VALUE_STRING_ENUM(zbee_zcl_price_srv_rx_cmd_names);
1314 VALUE_STRING_ARRAY(zbee_zcl_price_srv_rx_cmd_names);
1316 /* Server Commands Generated */
1317 #define zbee_zcl_price_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
1318 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE, 0x00, "Publish Price" ) \
1319 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_PERIOD, 0x01, "Publish Block Period" ) \
1320 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONVERSION_FACTOR, 0x02, "Publish Conversion Factor" ) \
1321 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CALORIFIC_VALUE, 0x03, "Publish Calorific Value" ) \
1322 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TARIFF_INFORMATION, 0x04, "Publish Tariff Information" ) \
1323 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE_MATRIX, 0x05, "Publish Price Matrix" ) \
1324 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_THRESHOLDS, 0x06, "Publish Block Thresholds" ) \
1325 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CO2_VALUE, 0x07, "Publish CO2 Value" ) \
1326 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TIER_LABELS, 0x08, "Publish Tier Labels" ) \
1327 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BILLING_PERIOD, 0x09, "Publish Billing Period" ) \
1328 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONSOLIDATED_BILL, 0x0A, "Publish Consolidated Bill" ) \
1329 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CPP_EVENT, 0x0B, "Publish CPP Event" ) \
1330 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CREDIT_PAYMENT, 0x0C, "Publish Credit Payment" ) \
1331 XXX(ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CURRENCY_CONVERSION, 0x0D, "Publish Currency Conversion" ) \
1332 XXX(ZBEE_ZCL_CMD_ID_PRICE_CANCEL_TARIFF, 0x0E, "Cancel Tariff" )
1334 VALUE_STRING_ENUM(zbee_zcl_price_srv_tx_cmd_names);
1335 VALUE_STRING_ARRAY(zbee_zcl_price_srv_tx_cmd_names);
1337 /* Block Period Control Field BitMap - Price Acknowledgement */
1338 #define zbee_zcl_price_block_period_control_price_acknowledgement_names_VALUE_STRING_LIST(XXX) \
1339 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOLEDGEMENT_NOT_REQUIRED, 0x0, "Price Acknowledgement not required" ) \
1340 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOLEDGEMENT_REQUIRED, 0x1, "Price Acknowledgement required" )
1342 VALUE_STRING_ARRAY(zbee_zcl_price_block_period_control_price_acknowledgement_names);
1344 /* Block Period Control Field BitMap - Repeating Block */
1345 #define zbee_zcl_price_block_period_control_repeating_block_names_VALUE_STRING_LIST(XXX) \
1346 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_NON_REPEATING, 0x0, "Non Repeating Block" ) \
1347 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK_REPEATING, 0x1, "Repeating Block" )
1349 VALUE_STRING_ARRAY(zbee_zcl_price_block_period_control_repeating_block_names);
1351 /* Block Period DurationTimebase Enumeration */
1352 #define zbee_zcl_price_block_period_duration_timebase_names_VALUE_STRING_LIST(XXX) \
1353 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_MINUTE, 0x0, "Minutes" ) \
1354 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_DAY, 0x1, "Days" ) \
1355 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_WEEK, 0x2, "Weeks" ) \
1356 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE_MONTH, 0x3, "Months" )
1358 VALUE_STRING_ARRAY(zbee_zcl_price_block_period_duration_timebase_names);
1360 /* Block Period Duration Control Enumeration */
1361 #define zbee_zcl_price_block_period_duration_control_names_VALUE_STRING_LIST(XXX) \
1362 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_START_OF_TIMEBASE, 0x0, "Start of Timebase" ) \
1363 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_END_OF_TIMEBASE, 0x1, "End of Timebase" ) \
1364 XXX(ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL_NOT_SPECIFIED, 0x2, "Not Specified" )
1366 VALUE_STRING_ARRAY(zbee_zcl_price_block_period_duration_control_names);
1368 /* Tariff Type Enumeration */
1369 #define zbee_zcl_price_tariff_type_names_VALUE_STRING_LIST(XXX) \
1370 XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_DELIVERED_TARIFF, 0x0, "Delivered Tariff" ) \
1371 XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_RECEIVED_TARIFF, 0x1, "Received Tariff" ) \
1372 XXX(ZBEE_ZCL_PRICE_TARIFF_TYPE_DELIVERED_AND_RECEIVED_TARIFF, 0x2, "delivered and Received Tariff" )
1374 VALUE_STRING_ARRAY(zbee_zcl_price_tariff_type_names);
1376 /* Tariff Resolution Period Enumeration */
1377 #define zbee_zcl_price_tariff_resolution_period_names_VALUE_STRING_LIST(XXX) \
1378 XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_NOT_DEFINED, 0x00, "Not Defined" ) \
1379 XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_BLOCK_PERIOD, 0x01, "Block Period" ) \
1380 XXX(ZBEE_ZCL_PRICE_TARIFF_RESOLUTION_PERIOD_1_DAY, 0x02, "1 Day" )
1382 VALUE_STRING_ARRAY(zbee_zcl_price_tariff_resolution_period_names);
1384 /* Tariff Charging Scheme Enumeration */
1385 #define zbee_zcl_price_tariff_charging_scheme_names_VALUE_STRING_LIST(XXX) \
1386 XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_TOU_TARIFF, 0x0, "TOU Tariff" ) \
1387 XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TARIFF, 0x1, "Block Tariff" ) \
1388 XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TOU_WITH_COMMON_THRES, 0x2, "Block/TOU Tariff with common thresholds" ) \
1389 XXX(ZBEE_ZCL_PRICE_TARIFF_CHARGING_SCHEME_BLOCK_TOU_WITH_INDIV_TRHES, 0x3, "Block/TOU Tariff with individual thresholds per tier" )
1391 VALUE_STRING_ARRAY(zbee_zcl_price_tariff_charging_scheme_names);
1393 /* Tariff Type */
1394 #define ZBEE_ZCL_PRICE_TARIFF_TYPE 0x0F
1396 /* Trailing Digit and Price Tier */
1397 #define ZBEE_ZCL_PRICE_TIER 0x0F
1398 #define ZBEE_ZCL_PRICE_TRAILING_DIGIT 0xF0
1400 /* Number of Price Tiers and Register Tier */
1401 #define ZBEE_ZCL_PRICE_REGISTER_TIER 0x0F
1402 #define ZBEE_ZCL_PRICE_NUMBER_OF_PRICE_TIERS 0xF0
1404 /* Alternate Cost Trailing Digit */
1405 #define ZBEE_ZCL_PRICE_ALTERNATE_COST_TRAILING_DIGIT 0xF0
1407 /* Block Period Duration Type */
1408 #define ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE 0x0F
1409 #define ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL 0xF0
1411 /* Block Period Control Field BitMap */
1412 #define ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT 0x01
1413 #define ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK 0x02
1415 /* Conversion Factor Trailing Digit */
1416 #define ZBEE_ZCL_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT 0xF0
1418 /* Calorific Value Trailing Digit */
1419 #define ZBEE_ZCL_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT 0xF0
1421 /* Tariff Type / Charging Scheme */
1422 #define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_TYPE 0x0F
1423 #define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_CHARGING_SCHEME 0xF0
1425 /* Tariff Information Price Trailing Digit */
1426 #define ZBEE_ZCL_PRICE_TARIFF_INFORMATION_PRICE_TRAILING_DIGIT 0xF0
1428 /* Price Matrix Tier/Block ID */
1429 #define ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_BLOCK 0x0F
1430 #define ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_TIER 0xF0
1432 /* Block Thresholds Tier/Number of Block Thresholds */
1433 #define ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS 0x0F
1434 #define ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_TIER 0xF0
1436 /* CO2 Value Trailing Digit */
1437 #define ZBEE_ZCL_PRICE_CO2_VALUE_TRAILING_DIGIT 0xF0
1439 /* Billing Period Duration Type */
1440 #define ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_TIMEBASE 0x0F
1441 #define ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_CONTROL 0xF0
1443 /* Billing Period Tariff Type */
1444 #define ZBEE_ZCL_PRICE_BILLING_PERIOD_TARIFF_TYPE 0x0F
1446 /* Consolidated Bill Trailing Digit */
1447 #define ZBEE_ZCL_PRICE_CONSOLIDATED_BILL_TRAILING_DIGIT 0xF0
1449 /*************************/
1450 /* Function Declarations */
1451 /*************************/
1452 void proto_register_zbee_zcl_price(void);
1453 void proto_reg_handoff_zbee_zcl_price(void);
1455 /* Attribute Dissector Helpers */
1456 static void dissect_zcl_price_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
1458 /* Command Dissector Helpers */
1459 static void dissect_zcl_price_get_current_price (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1460 static void dissect_zcl_price_get_scheduled_prices (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1461 static void dissect_zcl_price_get_price_acknowledgement (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1462 static void dissect_zcl_price_get_block_period (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1463 static void dissect_zcl_price_get_conversion_factor (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1464 static void dissect_zcl_price_get_calorific_value (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1465 static void dissect_zcl_price_get_tariff_information (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1466 static void dissect_zcl_price_get_price_matrix (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1467 static void dissect_zcl_price_get_block_thresholds (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1468 static void dissect_zcl_price_get_co2_value (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1469 static void dissect_zcl_price_get_tier_labels (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1470 static void dissect_zcl_price_get_billing_period (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1471 static void dissect_zcl_price_get_consolidated_bill (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1472 static void dissect_zcl_price_get_cpp_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1473 static void dissect_zcl_price_get_credit_payment (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1474 static void dissect_zcl_price_publish_price (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1475 static void dissect_zcl_price_publish_block_period (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1476 static void dissect_zcl_price_publish_conversion_factor (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1477 static void dissect_zcl_price_publish_calorific_value (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1478 static void dissect_zcl_price_publish_tariff_information (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1479 static void dissect_zcl_price_publish_price_matrix (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1480 static void dissect_zcl_price_publish_block_thresholds (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1481 static void dissect_zcl_price_publish_co2_value (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1482 static void dissect_zcl_price_publish_tier_labels (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1483 static void dissect_zcl_price_publish_billing_period (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1484 static void dissect_zcl_price_publish_consolidated_bill (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1485 static void dissect_zcl_price_publish_cpp_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1486 static void dissect_zcl_price_publish_credit_payment (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1487 static void dissect_zcl_price_publish_currency_conversion (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1488 static void dissect_zcl_price_publish_cancel_tariff (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
1490 /*************************/
1491 /* Global Variables */
1492 /*************************/
1494 /* Initialize the protocol and registered fields */
1495 static int proto_zbee_zcl_price;
1497 static int hf_zbee_zcl_price_srv_tx_cmd_id;
1498 static int hf_zbee_zcl_price_srv_rx_cmd_id;
1499 static int hf_zbee_zcl_price_attr_server_id;
1500 static int hf_zbee_zcl_price_attr_client_id;
1501 static int hf_zbee_zcl_price_attr_reporting_status;
1502 static int hf_zbee_zcl_price_provider_id;
1503 static int hf_zbee_zcl_price_issuer_event_id;
1504 static int hf_zbee_zcl_price_min_issuer_event_id;
1505 static int hf_zbee_zcl_price_issuer_tariff_id;
1506 static int hf_zbee_zcl_price_command_index;
1507 static int hf_zbee_zcl_price_total_number_of_commands;
1508 static int hf_zbee_zcl_price_number_of_commands;
1509 static int hf_zbee_zcl_price_number_of_events;
1510 static int hf_zbee_zcl_price_number_of_records;
1511 static int hf_zbee_zcl_price_number_of_block_thresholds;
1512 static int hf_zbee_zcl_price_number_of_generation_tiers;
1513 static int hf_zbee_zcl_price_extended_number_of_price_tiers;
1514 static int hf_zbee_zcl_price_command_options;
1515 static int hf_zbee_zcl_price_control;
1516 static int hf_zbee_zcl_price_tier;
1517 static int hf_zbee_zcl_price_tariff_type_mask;
1518 static int hf_zbee_zcl_price_tariff_type;
1519 static int hf_zbee_zcl_price_tariff_resolution_period;
1520 static int hf_zbee_zcl_price_cpp_auth;
1521 static int hf_zbee_zcl_price_cpp_price_tier;
1522 static int hf_zbee_zcl_price_rate_label;
1523 static int hf_zbee_zcl_price_unit_of_measure;
1524 static int hf_zbee_zcl_price_currency;
1525 static int hf_zbee_zcl_price_trailing_digit_and_price_tier;
1526 static int hf_zbee_zcl_price_trailing_digit;
1527 static int hf_zbee_zcl_price_extended_price_tier;
1528 static int hf_zbee_zcl_price_number_of_price_tiers_and_register_tier;
1529 static int hf_zbee_zcl_price_register_tier;
1530 static int hf_zbee_zcl_price_number_of_price_tiers;
1531 static int hf_zbee_zcl_price_extended_register_tier;
1532 static int hf_zbee_zcl_price_duration_in_minutes;
1533 static int hf_zbee_zcl_price;
1534 static int hf_zbee_zcl_price_ratio;
1535 static int hf_zbee_zcl_price_generation_price;
1536 static int hf_zbee_zcl_price_generation_price_ratio;
1537 static int hf_zbee_zcl_price_generation_tier;
1538 static int hf_zbee_zcl_price_alternate_cost_delivered;
1539 static int hf_zbee_zcl_price_alternate_cost_unit;
1540 static int hf_zbee_zcl_price_alternate_cost_trailing_digit_mask;
1541 static int hf_zbee_zcl_price_alternate_cost_trailing_digit;
1542 static int hf_zbee_zcl_price_start_time;
1543 static int hf_zbee_zcl_price_earliest_start_time;
1544 static int hf_zbee_zcl_price_latest_end_time;
1545 static int hf_zbee_zcl_price_current_time;
1546 static int hf_zbee_zcl_price_price_ack_time;
1547 static int hf_zbee_zcl_price_block_period_start_time;
1548 static int hf_zbee_zcl_price_block_period_duration;
1549 static int hf_zbee_zcl_price_block_period_duration_type;
1550 static int hf_zbee_zcl_price_block_period_duration_timebase;
1551 static int hf_zbee_zcl_price_block_period_duration_control;
1552 static int hf_zbee_zcl_price_block_period_control;
1553 static int hf_zbee_zcl_price_block_period_control_price_acknowledgement;
1554 static int hf_zbee_zcl_price_block_period_control_repeating_block;
1555 static int hf_zbee_zcl_price_conversion_factor;
1556 static int hf_zbee_zcl_price_conversion_factor_trailing_digit_mask;
1557 static int hf_zbee_zcl_price_conversion_factor_trailing_digit;
1558 static int hf_zbee_zcl_price_calorific_value;
1559 static int hf_zbee_zcl_price_calorific_value_unit;
1560 static int hf_zbee_zcl_price_calorific_value_trailing_digit_mask;
1561 static int hf_zbee_zcl_price_calorific_value_trailing_digit;
1562 static int hf_zbee_zcl_price_tariff_information_type_and_charging_scheme;
1563 static int hf_zbee_zcl_price_tariff_information_type;
1564 static int hf_zbee_zcl_price_tariff_information_charging_scheme;
1565 static int hf_zbee_zcl_price_tariff_information_tariff_label;
1566 static int hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use;
1567 static int hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use;
1568 static int hf_zbee_zcl_price_tariff_information_price_trailing_digit_mask;
1569 static int hf_zbee_zcl_price_tariff_information_price_trailing_digit;
1570 static int hf_zbee_zcl_price_tariff_information_standing_charge;
1571 static int hf_zbee_zcl_price_tariff_information_tier_block_mode;
1572 static int hf_zbee_zcl_price_tariff_information_block_threshold_multiplier;
1573 static int hf_zbee_zcl_price_tariff_information_block_threshold_divisor;
1574 static int hf_zbee_zcl_price_price_matrix_sub_payload_control;
1575 static int hf_zbee_zcl_price_price_matrix_tier_block_id;
1576 static int hf_zbee_zcl_price_price_matrix_tier_block_id_block;
1577 static int hf_zbee_zcl_price_price_matrix_tier_block_id_tier;
1578 static int hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier;
1579 static int hf_zbee_zcl_price_price_matrix_price;
1580 static int hf_zbee_zcl_price_block_thresholds_sub_payload_control;
1581 static int hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds;
1582 static int hf_zbee_zcl_price_block_thresholds_tier;
1583 static int hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds;
1584 static int hf_zbee_zcl_price_block_thresholds_block_threshold;
1585 static int hf_zbee_zcl_price_co2_value;
1586 static int hf_zbee_zcl_price_co2_unit;
1587 static int hf_zbee_zcl_price_co2_value_trailing_digit_mask;
1588 static int hf_zbee_zcl_price_co2_value_trailing_digit;
1589 static int hf_zbee_zcl_price_tier_labels_number_of_labels;
1590 static int hf_zbee_zcl_price_tier_labels_tier_id;
1591 static int hf_zbee_zcl_price_tier_labels_tier_label;
1592 static int hf_zbee_zcl_price_billing_period_start_time;
1593 static int hf_zbee_zcl_price_billing_period_duration;
1594 static int hf_zbee_zcl_price_billing_period_duration_type;
1595 static int hf_zbee_zcl_price_billing_period_duration_timebase;
1596 static int hf_zbee_zcl_price_billing_period_duration_control;
1597 static int hf_zbee_zcl_price_consolidated_bill;
1598 static int hf_zbee_zcl_price_consolidated_bill_trailing_digit_mask;
1599 static int hf_zbee_zcl_price_consolidated_bill_trailing_digit;
1600 static int hf_zbee_zcl_price_credit_payment_due_date;
1601 static int hf_zbee_zcl_price_credit_payment_overdue_amount;
1602 static int hf_zbee_zcl_price_credit_payment_status;
1603 static int hf_zbee_zcl_price_credit_payment;
1604 static int hf_zbee_zcl_price_credit_payment_date;
1605 static int hf_zbee_zcl_price_credit_payment_ref;
1606 static int hf_zbee_zcl_price_old_currency;
1607 static int hf_zbee_zcl_price_new_currency;
1608 static int hf_zbee_zcl_price_currency_change_control_flags;
1610 /* Initialize the subtree pointers */
1611 static int ett_zbee_zcl_price;
1612 static int ett_zbee_zcl_price_tariff_type;
1613 static int ett_zbee_zcl_price_trailing_digit_and_price_tier;
1614 static int ett_zbee_zcl_price_number_of_price_tiers_and_register_tier;
1615 static int ett_zbee_zcl_price_alternate_cost_trailing_digit;
1616 static int ett_zbee_zcl_price_block_period_control;
1617 static int ett_zbee_zcl_price_block_period_duration_type;
1618 static int ett_zbee_zcl_price_conversion_factor_trailing_digit;
1619 static int ett_zbee_zcl_price_calorific_value_trailing_digit;
1620 static int ett_zbee_zcl_price_tariff_information_tariff_type_and_charging_scheme;
1621 static int ett_zbee_zcl_price_tariff_information_price_trailing_digit;
1622 static int ett_zbee_zcl_price_price_matrix_tier_block_id;
1623 static int ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds;
1624 static int ett_zbee_zcl_price_co2_value_trailing_digit;
1625 static int ett_zbee_zcl_price_billing_period_duration_type;
1626 static int ett_zbee_zcl_price_consolidated_bill_trailing_digit;
1628 static int * const zbee_zcl_price_billing_period_duration_type[] = {
1629 &hf_zbee_zcl_price_billing_period_duration_timebase,
1630 &hf_zbee_zcl_price_billing_period_duration_control,
1631 NULL
1634 static int * const zbee_zcl_price_block_period_duration_type[] = {
1635 &hf_zbee_zcl_price_block_period_duration_timebase,
1636 &hf_zbee_zcl_price_block_period_duration_control,
1637 NULL
1640 static int * const zbee_zcl_price_block_period_control[] = {
1641 &hf_zbee_zcl_price_block_period_control_price_acknowledgement,
1642 &hf_zbee_zcl_price_block_period_control_repeating_block,
1643 NULL
1646 static int * const zbee_zcl_price_tariff_type_mask[] = {
1647 &hf_zbee_zcl_price_tariff_type,
1648 NULL
1651 /*************************/
1652 /* Function Bodies */
1653 /*************************/
1656 *This function is called by ZCL foundation dissector in order to decode
1658 *@param tree pointer to data tree Wireshark uses to display packet.
1659 *@param tvb pointer to buffer containing raw packet.
1660 *@param offset pointer to buffer offset
1661 *@param attr_id attribute identifier
1662 *@param data_type attribute data type
1663 *@param client_attr ZCL client
1665 static void
1666 dissect_zcl_price_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
1668 switch (attr_id) {
1669 /* applies to all SE clusters */
1670 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PRICE:
1671 proto_tree_add_item(tree, hf_zbee_zcl_price_attr_reporting_status, tvb, *offset, 1, ENC_NA);
1672 *offset += 1;
1673 break;
1675 default: /* Catch all */
1676 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
1677 break;
1679 } /*dissect_zcl_price_attr_data*/
1682 *ZigBee ZCL Price cluster dissector for wireshark.
1684 *@param tvb pointer to buffer containing raw packet.
1685 *@param pinfo pointer to packet information fields
1686 *@param tree pointer to data tree Wireshark uses to display packet.
1688 static int
1689 dissect_zbee_zcl_price(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
1691 proto_tree *payload_tree;
1692 zbee_zcl_packet *zcl;
1693 unsigned offset = 0;
1694 uint8_t cmd_id;
1695 int rem_len;
1697 /* Reject the packet if data is NULL */
1698 if (data == NULL)
1699 return 0;
1700 zcl = (zbee_zcl_packet *)data;
1701 cmd_id = zcl->cmd_id;
1703 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
1704 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
1705 /* Append the command name to the info column. */
1706 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
1707 val_to_str_const(cmd_id, zbee_zcl_price_srv_rx_cmd_names, "Unknown Command"),
1708 zcl->tran_seqno);
1710 /* Add the command ID. */
1711 proto_tree_add_uint(tree, hf_zbee_zcl_price_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
1713 /* Check is this command has a payload, than add the payload tree */
1714 rem_len = tvb_reported_length_remaining(tvb, ++offset);
1715 if (rem_len > 0) {
1716 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_price, NULL, "Payload");
1718 /* Call the appropriate command dissector */
1719 switch (cmd_id) {
1721 case ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENT_PRICE:
1722 dissect_zcl_price_get_current_price(tvb, payload_tree, &offset);
1723 break;
1725 case ZBEE_ZCL_CMD_ID_PRICE_GET_SCHEDULED_PRICES:
1726 dissect_zcl_price_get_scheduled_prices(tvb, payload_tree, &offset);
1727 break;
1729 case ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_ACKNOWLEDGEMENT:
1730 dissect_zcl_price_get_price_acknowledgement(tvb, payload_tree, &offset);
1731 break;
1733 case ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_PERIOD:
1734 dissect_zcl_price_get_block_period(tvb, payload_tree, &offset);
1735 break;
1737 case ZBEE_ZCL_CMD_ID_PRICE_GET_CONVERSION_FACTOR:
1738 dissect_zcl_price_get_conversion_factor(tvb, payload_tree, &offset);
1739 break;
1741 case ZBEE_ZCL_CMD_ID_PRICE_GET_CALORIFIC_VALUE:
1742 dissect_zcl_price_get_calorific_value(tvb, payload_tree, &offset);
1743 break;
1745 case ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_INFORMATION:
1746 dissect_zcl_price_get_tariff_information(tvb, payload_tree, &offset);
1747 break;
1749 case ZBEE_ZCL_CMD_ID_PRICE_GET_PRICE_MATRIX:
1750 dissect_zcl_price_get_price_matrix(tvb, payload_tree, &offset);
1751 break;
1753 case ZBEE_ZCL_CMD_ID_PRICE_GET_BLOCK_THRESHOLDS:
1754 dissect_zcl_price_get_block_thresholds(tvb, payload_tree, &offset);
1755 break;
1757 case ZBEE_ZCL_CMD_ID_PRICE_GET_CO2_VALUE:
1758 dissect_zcl_price_get_co2_value(tvb, payload_tree, &offset);
1759 break;
1761 case ZBEE_ZCL_CMD_ID_PRICE_GET_TIER_LABELS:
1762 dissect_zcl_price_get_tier_labels(tvb, payload_tree, &offset);
1763 break;
1765 case ZBEE_ZCL_CMD_ID_PRICE_GET_BILLING_PERIOD:
1766 dissect_zcl_price_get_billing_period(tvb, payload_tree, &offset);
1767 break;
1769 case ZBEE_ZCL_CMD_ID_PRICE_GET_CONSOLIDATED_BILL:
1770 dissect_zcl_price_get_consolidated_bill(tvb, payload_tree, &offset);
1771 break;
1773 case ZBEE_ZCL_CMD_ID_PRICE_CPP_EVENT_RESPONSE:
1774 dissect_zcl_price_get_cpp_event(tvb, payload_tree, &offset);
1775 break;
1777 case ZBEE_ZCL_CMD_ID_PRICE_GET_CREDIT_PAYMENT:
1778 dissect_zcl_price_get_credit_payment(tvb, payload_tree, &offset);
1779 break;
1781 case ZBEE_ZCL_CMD_ID_PRICE_GET_CURRENCY_CONVERSION:
1782 /* No Payload */
1783 break;
1785 case ZBEE_ZCL_CMD_ID_PRICE_GET_TARIFF_CANCELLATION:
1786 /* No Payload */
1787 break;
1789 default:
1790 break;
1794 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
1795 /* Append the command name to the info column. */
1796 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
1797 val_to_str_const(cmd_id, zbee_zcl_price_srv_tx_cmd_names, "Unknown Command"),
1798 zcl->tran_seqno);
1800 /* Add the command ID. */
1801 proto_tree_add_uint(tree, hf_zbee_zcl_price_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
1803 /* Check is this command has a payload, than add the payload tree */
1804 rem_len = tvb_reported_length_remaining(tvb, ++offset);
1805 if (rem_len > 0) {
1806 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_price, NULL, "Payload");
1808 /* Call the appropriate command dissector */
1809 switch (cmd_id) {
1811 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE:
1812 dissect_zcl_price_publish_price(tvb, payload_tree, &offset);
1813 break;
1815 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_PERIOD:
1816 dissect_zcl_price_publish_block_period(tvb, payload_tree, &offset);
1817 break;
1819 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONVERSION_FACTOR:
1820 dissect_zcl_price_publish_conversion_factor(tvb, payload_tree, &offset);
1821 break;
1823 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CALORIFIC_VALUE:
1824 dissect_zcl_price_publish_calorific_value(tvb, payload_tree, &offset);
1825 break;
1827 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TARIFF_INFORMATION:
1828 dissect_zcl_price_publish_tariff_information(tvb, payload_tree, &offset);
1829 break;
1831 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_PRICE_MATRIX:
1832 dissect_zcl_price_publish_price_matrix(tvb, payload_tree, &offset);
1833 break;
1835 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BLOCK_THRESHOLDS:
1836 dissect_zcl_price_publish_block_thresholds(tvb, payload_tree, &offset);
1837 break;
1839 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CO2_VALUE:
1840 dissect_zcl_price_publish_co2_value(tvb, payload_tree, &offset);
1841 break;
1843 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_TIER_LABELS:
1844 dissect_zcl_price_publish_tier_labels(tvb, payload_tree, &offset);
1845 break;
1847 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_BILLING_PERIOD:
1848 dissect_zcl_price_publish_billing_period(tvb, payload_tree, &offset);
1849 break;
1851 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CONSOLIDATED_BILL:
1852 dissect_zcl_price_publish_consolidated_bill(tvb, payload_tree, &offset);
1853 break;
1855 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CPP_EVENT:
1856 dissect_zcl_price_publish_cpp_event(tvb, payload_tree, &offset);
1857 break;
1859 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CREDIT_PAYMENT:
1860 dissect_zcl_price_publish_credit_payment(tvb, payload_tree, &offset);
1861 break;
1863 case ZBEE_ZCL_CMD_ID_PRICE_PUBLISH_CURRENCY_CONVERSION:
1864 dissect_zcl_price_publish_currency_conversion(tvb, payload_tree, &offset);
1865 break;
1867 case ZBEE_ZCL_CMD_ID_PRICE_CANCEL_TARIFF:
1868 dissect_zcl_price_publish_cancel_tariff(tvb, payload_tree, &offset);
1869 break;
1871 default:
1872 break;
1877 return tvb_captured_length(tvb);
1878 } /*dissect_zbee_zcl_price*/
1881 *This function manages the Get Current Price payload
1883 *@param tvb pointer to buffer containing raw packet.
1884 *@param tree pointer to data tree Wireshark uses to display packet.
1885 *@param offset pointer to offset from caller
1887 static void
1888 dissect_zcl_price_get_current_price(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1890 /* Command Options */
1891 proto_tree_add_item(tree, hf_zbee_zcl_price_command_options, tvb, *offset, 1, ENC_NA);
1892 *offset += 1;
1893 } /*dissect_zcl_price_get_current_price*/
1896 *This function manages the Get Scheduled Prices payload
1898 *@param tvb pointer to buffer containing raw packet.
1899 *@param tree pointer to data tree Wireshark uses to display packet.
1900 *@param offset pointer to offset from caller
1902 static void
1903 dissect_zcl_price_get_scheduled_prices(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1905 /* Start Time */
1906 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1907 *offset += 4;
1909 /* Number of Events */
1910 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_events, tvb, *offset, 1, ENC_NA);
1911 *offset += 1;
1912 } /*dissect_zcl_price_get_scheduled_prices*/
1915 *This function manages the Get Price Acknowledgement payload
1917 *@param tvb pointer to buffer containing raw packet.
1918 *@param tree pointer to data tree Wireshark uses to display packet.
1919 *@param offset pointer to offset from caller
1921 static void
1922 dissect_zcl_price_get_price_acknowledgement(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1924 /* Provider ID */
1925 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1926 *offset += 4;
1928 /* Issuer Event ID */
1929 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1930 *offset += 4;
1932 /* Price Ack Time */
1933 proto_tree_add_item(tree, hf_zbee_zcl_price_price_ack_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1934 *offset += 4;
1936 /* Price Control */
1937 proto_tree_add_item(tree, hf_zbee_zcl_price_control, tvb, *offset, 1, ENC_NA);
1938 *offset += 1;
1939 } /*dissect_zcl_price_get_price_acknowledgement*/
1942 *This function manages the Get Block Period payload
1944 *@param tvb pointer to buffer containing raw packet.
1945 *@param tree pointer to data tree Wireshark uses to display packet.
1946 *@param offset pointer to offset from caller
1948 static void
1949 dissect_zcl_price_get_block_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1951 /* Start Time */
1952 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1953 *offset += 4;
1955 /* Number of Events */
1956 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_events, tvb, *offset, 1, ENC_NA);
1957 *offset += 1;
1959 /* (Optional) Tariff Type */
1960 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
1961 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
1962 *offset += 1;
1964 } /*dissect_zcl_price_get_block_period*/
1967 *This function manages the Get Conversion Factor payload
1969 *@param tvb pointer to buffer containing raw packet.
1970 *@param tree pointer to data tree Wireshark uses to display packet.
1971 *@param offset pointer to offset from caller
1973 static void
1974 dissect_zcl_price_get_conversion_factor(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
1976 /* Earliest Start Time */
1977 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1978 *offset += 4;
1980 /* Min Issuer Event ID */
1981 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
1982 *offset += 4;
1984 /* Number of Commands */
1985 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
1986 *offset += 1;
1987 } /*dissect_zcl_price_get_conversion_factor*/
1990 *This function manages the Get Calorific Value payload
1992 *@param tvb pointer to buffer containing raw packet.
1993 *@param tree pointer to data tree Wireshark uses to display packet.
1994 *@param offset pointer to offset from caller
1996 static void
1997 dissect_zcl_price_get_calorific_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2000 /* Earliest Start Time */
2001 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2002 *offset += 4;
2004 /* Min Issuer Event ID */
2005 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2006 *offset += 4;
2008 /* Number of Commands */
2009 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2010 *offset += 1;
2011 } /*dissect_zcl_price_get_calorific_value*/
2014 *This function manages the Get Tariff Information payload
2016 *@param tvb pointer to buffer containing raw packet.
2017 *@param tree pointer to data tree Wireshark uses to display packet.
2018 *@param offset pointer to offset from caller
2020 static void
2021 dissect_zcl_price_get_tariff_information(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2023 /* Earliest Start Time */
2024 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2025 *offset += 4;
2027 /* Min Issuer Event ID */
2028 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2029 *offset += 4;
2031 /* Number of Commands */
2032 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2033 *offset += 1;
2035 /* Tariff Type */
2036 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2037 *offset += 1;
2039 } /*dissect_zcl_price_get_tariff_information*/
2042 *This function manages the Get Price Matrix payload
2044 *@param tvb pointer to buffer containing raw packet.
2045 *@param tree pointer to data tree Wireshark uses to display packet.
2046 *@param offset pointer to offset from caller
2048 static void
2049 dissect_zcl_price_get_price_matrix(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2051 /* Issuer Tariff ID */
2052 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2053 *offset += 4;
2054 } /*dissect_zcl_price_get_price_matrix*/
2057 *This function manages the Get Block Thresholds payload
2059 *@param tvb pointer to buffer containing raw packet.
2060 *@param tree pointer to data tree Wireshark uses to display packet.
2061 *@param offset pointer to offset from caller
2063 static void
2064 dissect_zcl_price_get_block_thresholds(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2066 /* Issuer Tariff ID */
2067 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2068 *offset += 4;
2069 } /*dissect_zcl_price_get_block_thresholds*/
2072 *This function manages the Get CO2 Value payload
2074 *@param tvb pointer to buffer containing raw packet.
2075 *@param tree pointer to data tree Wireshark uses to display packet.
2076 *@param offset pointer to offset from caller
2078 static void
2079 dissect_zcl_price_get_co2_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2081 /* Earliest Start Time */
2082 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2083 *offset += 4;
2085 /* Min Issuer Event ID */
2086 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2087 *offset += 4;
2089 /* Number of Commands */
2090 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2091 *offset += 1;
2093 /* (Optional) Tariff Type */
2094 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2095 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2096 *offset += 1;
2098 } /*dissect_zcl_price_get_co2_value*/
2101 *This function manages the Get Tier Labels payload
2103 *@param tvb pointer to buffer containing raw packet.
2104 *@param tree pointer to data tree Wireshark uses to display packet.
2105 *@param offset pointer to offset from caller
2107 static void
2108 dissect_zcl_price_get_tier_labels(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2110 /* Issuer Tariff ID */
2111 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2112 *offset += 4;
2113 } /*dissect_zcl_price_get_tier_labels*/
2116 *This function manages the Get Billing Period payload
2118 *@param tvb pointer to buffer containing raw packet.
2119 *@param tree pointer to data tree Wireshark uses to display packet.
2120 *@param offset pointer to offset from caller
2122 static void
2123 dissect_zcl_price_get_billing_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2125 /* Earliest Start Time */
2126 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2127 *offset += 4;
2129 /* Min Issuer Event ID */
2130 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2131 *offset += 4;
2133 /* Number of Commands */
2134 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2135 *offset += 1;
2137 /* (Optional) Tariff Type */
2138 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2139 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2140 *offset += 1;
2143 } /*dissect_zcl_price_get_billing_period*/
2146 *This function manages the Get Consolidated Bill payload
2148 *@param tvb pointer to buffer containing raw packet.
2149 *@param tree pointer to data tree Wireshark uses to display packet.
2150 *@param offset pointer to offset from caller
2152 static void
2153 dissect_zcl_price_get_consolidated_bill(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2156 /* Earliest Start Time */
2157 proto_tree_add_item(tree, hf_zbee_zcl_price_earliest_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2158 *offset += 4;
2160 /* Min Issuer Event ID */
2161 proto_tree_add_item(tree, hf_zbee_zcl_price_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2162 *offset += 4;
2164 /* Number of Commands */
2165 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_commands, tvb, *offset, 1, ENC_NA);
2166 *offset += 1;
2168 /* (Optional) Tariff Type */
2169 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
2170 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_type, tvb, *offset, 1, ENC_NA);
2171 *offset += 1;
2174 } /*dissect_zcl_price_get_consolidated_bill*/
2177 *This function manages the Get CPP Event Response payload
2179 *@param tvb pointer to buffer containing raw packet.
2180 *@param tree pointer to data tree Wireshark uses to display packet.
2181 *@param offset pointer to offset from caller
2183 static void
2184 dissect_zcl_price_get_cpp_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2186 /* Issuer Event ID */
2187 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2188 *offset += 4;
2190 /* CPP Auth */
2191 proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_auth, tvb, *offset, 1, ENC_NA);
2192 *offset += 1;
2193 } /*dissect_zcl_price_get_event_response*/
2196 *This function manages the Get Credit Payment payload
2198 *@param tvb pointer to buffer containing raw packet.
2199 *@param tree pointer to data tree Wireshark uses to display packet.
2200 *@param offset pointer to offset from caller
2202 static void
2203 dissect_zcl_price_get_credit_payment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2206 /* Latest End Time */
2207 proto_tree_add_item(tree, hf_zbee_zcl_price_latest_end_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2208 *offset += 4;
2210 /* Number of Records */
2211 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_records, tvb, *offset, 1, ENC_NA);
2212 *offset += 1;
2213 } /*dissect_zcl_price_get_credit_payment*/
2216 *This function manages the Publish Price payload
2218 *@param tvb pointer to buffer containing raw packet.
2219 *@param tree pointer to data tree Wireshark uses to display packet.
2220 *@param offset pointer to offset from caller
2222 static void
2223 dissect_zcl_price_publish_price(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2225 int length;
2227 static int * const trailing_digit[] = {
2228 &hf_zbee_zcl_price_tier,
2229 &hf_zbee_zcl_price_trailing_digit,
2230 NULL
2233 static int * const number_of_price_tiers_and_register_tier[] = {
2234 &hf_zbee_zcl_price_register_tier,
2235 &hf_zbee_zcl_price_number_of_price_tiers,
2236 NULL
2239 static int * const alternate_cost_trailing_digit[] = {
2240 &hf_zbee_zcl_price_alternate_cost_trailing_digit,
2241 NULL
2244 /* Provider ID */
2245 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2246 *offset += 4;
2248 /* Rate Label */
2249 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_rate_label, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &length);
2250 *offset += length;
2252 /* Issuer Event ID */
2253 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2254 *offset += 4;
2256 /* Current Time */
2257 proto_tree_add_item(tree, hf_zbee_zcl_price_current_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2258 *offset += 4;
2260 /* Unit of Measure */
2261 proto_tree_add_item(tree, hf_zbee_zcl_price_unit_of_measure, tvb, *offset, 1, ENC_NA);
2262 *offset += 1;
2264 /* Currency */
2265 proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2266 *offset += 2;
2268 /* Price Trailing Digit and Price Tier */
2269 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);
2270 *offset += 1;
2272 /* Number of Price Tiers and Register Tier */
2273 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);
2274 *offset += 1;
2276 /* Start Time */
2277 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2278 *offset += 4;
2280 /* Duration in Minutes */
2281 proto_tree_add_item(tree, hf_zbee_zcl_price_duration_in_minutes, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2282 *offset += 2;
2284 /* Price */
2285 proto_tree_add_item(tree, hf_zbee_zcl_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2286 *offset += 4;
2288 /* (Optional) Price Ratio */
2289 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2290 proto_tree_add_item(tree, hf_zbee_zcl_price_ratio, tvb, *offset, 1, ENC_NA);
2291 *offset += 1;
2293 /* (Optional) Generation Price */
2294 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2295 proto_tree_add_item(tree, hf_zbee_zcl_price_generation_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2296 *offset += 4;
2298 /* (Optional) Generation Price Ratio */
2299 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2300 proto_tree_add_item(tree, hf_zbee_zcl_price_generation_price_ratio, tvb, *offset, 1, ENC_NA);
2301 *offset += 1;
2303 /* (Optional) Alternate Cost Delivered */
2304 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2305 proto_tree_add_item(tree, hf_zbee_zcl_price_alternate_cost_delivered, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2306 *offset += 4;
2308 /* (Optional) Alternate Cost Unit */
2309 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2310 proto_tree_add_item(tree, hf_zbee_zcl_price_alternate_cost_unit, tvb, *offset, 1, ENC_NA);
2311 *offset += 1;
2313 /* (Optional) Alternate Cost Trailing Digit */
2314 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2315 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);
2316 *offset += 1;
2318 /* (Optional) Number of Block Thresholds */
2319 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2320 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_block_thresholds, tvb, *offset, 1, ENC_NA);
2321 *offset += 1;
2323 /* (Optional) Price Control */
2324 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2325 proto_tree_add_item(tree, hf_zbee_zcl_price_control, tvb, *offset, 1, ENC_NA);
2326 *offset += 1;
2328 /* (Optional) Number of Generation Tiers */
2329 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2330 proto_tree_add_item(tree, hf_zbee_zcl_price_number_of_generation_tiers, tvb, *offset, 1, ENC_NA);
2331 *offset += 1;
2333 /* (Optional) Generation Tier */
2334 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2335 proto_tree_add_item(tree, hf_zbee_zcl_price_generation_tier, tvb, *offset, 1, ENC_NA);
2336 *offset += 1;
2338 /* (Optional) Extended Number of Price Tiers */
2339 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2340 proto_tree_add_item(tree, hf_zbee_zcl_price_extended_number_of_price_tiers, tvb, *offset, 1, ENC_NA);
2341 *offset += 1;
2343 /* (Optional) Extended Price Tier */
2344 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2345 proto_tree_add_item(tree, hf_zbee_zcl_price_extended_price_tier, tvb, *offset, 1, ENC_NA);
2346 *offset += 1;
2348 /* (Optional) Extended Register Tier */
2349 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
2350 proto_tree_add_item(tree, hf_zbee_zcl_price_extended_register_tier, tvb, *offset, 1, ENC_NA);
2351 *offset += 1;
2352 } /*dissect_zcl_price_publish_price*/
2355 *This function manages the Publish Block Period payload
2357 *@param tvb pointer to buffer containing raw packet.
2358 *@param tree pointer to data tree Wireshark uses to display packet.
2359 *@param offset pointer to offset from caller
2361 static void
2362 dissect_zcl_price_publish_block_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2364 /* Provider ID */
2365 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2366 *offset += 4;
2368 /* Issuer Event ID */
2369 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2370 *offset += 4;
2372 /* Block Period Start Time */
2373 proto_tree_add_item(tree, hf_zbee_zcl_price_block_period_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2374 *offset += 4;
2376 /* Block Period Duration */
2377 proto_tree_add_item(tree, hf_zbee_zcl_price_block_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2378 *offset += 3;
2380 /* Block Period Control */
2381 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);
2382 *offset += 1;
2384 /* Block Period Duration Type */
2385 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);
2386 *offset += 1;
2388 /* Tariff Type */
2389 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);
2390 *offset += 1;
2392 /* Tariff Resolution Period */
2393 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_resolution_period, tvb, *offset, 1, ENC_NA);
2394 *offset += 1;
2395 } /*dissect_zcl_price_publish_block_period*/
2398 *This function manages the Publish Conversion Factor payload
2400 *@param tvb pointer to buffer containing raw packet.
2401 *@param tree pointer to data tree Wireshark uses to display packet.
2402 *@param offset pointer to offset from caller
2404 static void
2405 dissect_zcl_price_publish_conversion_factor(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2407 static int * const conversion_factor_trailing_digit[] = {
2408 &hf_zbee_zcl_price_conversion_factor_trailing_digit,
2409 NULL
2412 /* Issuer Event ID */
2413 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2414 *offset += 4;
2416 /* Start Time */
2417 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2418 *offset += 4;
2420 /* Conversion Factor */
2421 proto_tree_add_item(tree, hf_zbee_zcl_price_conversion_factor, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2422 *offset += 4;
2424 /* Conversion Factor Trailing digit */
2425 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);
2426 *offset += 1;
2427 } /*dissect_zcl_price_publish_conversion_factor*/
2430 *This function manages the Publish Calorific Value payload
2432 *@param tvb pointer to buffer containing raw packet.
2433 *@param tree pointer to data tree Wireshark uses to display packet.
2434 *@param offset pointer to offset from caller
2436 static void
2437 dissect_zcl_price_publish_calorific_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2439 static int * const calorific_value_trailing_digit[] = {
2440 &hf_zbee_zcl_price_calorific_value_trailing_digit,
2441 NULL
2444 /* Issuer Event ID */
2445 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2446 *offset += 4;
2448 /* Start Time */
2449 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2450 *offset += 4;
2452 /* Calorific Value */
2453 proto_tree_add_item(tree, hf_zbee_zcl_price_calorific_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2454 *offset += 4;
2456 /* Calorific Value Unit */
2457 proto_tree_add_item(tree, hf_zbee_zcl_price_calorific_value_unit, tvb, *offset, 1, ENC_NA);
2458 *offset += 1;
2460 /* Calorific Value Trailing digit */
2461 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);
2462 *offset += 1;
2463 } /*dissect_zcl_price_publish_calorific_value*/
2466 *This function manages the Publish Tariff Information payload
2468 *@param tvb pointer to buffer containing raw packet.
2469 *@param tree pointer to data tree Wireshark uses to display packet.
2470 *@param offset pointer to offset from caller
2472 static void
2473 dissect_zcl_price_publish_tariff_information(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2475 int length;
2477 static int * const price_trailing_digit[] = {
2478 &hf_zbee_zcl_price_tariff_information_price_trailing_digit,
2479 NULL
2482 static int * const type_and_charging_scheme[] = {
2483 &hf_zbee_zcl_price_tariff_information_type,
2484 &hf_zbee_zcl_price_tariff_information_charging_scheme,
2485 NULL
2488 /* Provider ID */
2489 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2490 *offset += 4;
2492 /* Issuer Event ID */
2493 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2494 *offset += 4;
2496 /* Issuer Tariff ID */
2497 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2498 *offset += 4;
2500 /* Start Time */
2501 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2502 *offset += 4;
2504 /* Tariff Type / Charging Scheme */
2505 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);
2506 *offset += 1;
2508 /* Tariff Label */
2509 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_tariff_information_tariff_label, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2510 *offset += length;
2512 /* Number of Price Tiers in Use */
2513 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use, tvb, *offset, 1, ENC_NA);
2514 *offset += 1;
2516 /* Number of Block Thresholds in Use */
2517 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use, tvb, *offset, 1, ENC_NA);
2518 *offset += 1;
2520 /* Unit of Measure */
2521 proto_tree_add_item(tree, hf_zbee_zcl_price_unit_of_measure, tvb, *offset, 1, ENC_NA);
2522 *offset += 1;
2524 /* Currency */
2525 proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2526 *offset += 2;
2528 /* Price Trailing Digit */
2529 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);
2530 *offset += 1;
2532 /* Standing Charge */
2533 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_standing_charge, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2534 *offset += 4;
2536 /* Tier Block Mode */
2537 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_tier_block_mode, tvb, *offset, 1, ENC_NA);
2538 *offset += 1;
2540 /* Block Threshold Multiplier */
2541 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_block_threshold_multiplier, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2542 *offset += 3;
2544 /* Block Threshold Divisor */
2545 proto_tree_add_item(tree, hf_zbee_zcl_price_tariff_information_block_threshold_divisor, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2546 *offset += 3;
2547 } /*dissect_zcl_price_publish_tariff_information*/
2550 *This function manages the Publish Price Matrix payload
2552 *@param tvb pointer to buffer containing raw packet.
2553 *@param tree pointer to data tree Wireshark uses to display packet.
2554 *@param offset pointer to offset from caller
2556 static void
2557 dissect_zcl_price_publish_price_matrix(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2559 uint8_t sub_payload_control;
2561 static int * const tier_block_id[] = {
2562 &hf_zbee_zcl_price_price_matrix_tier_block_id_block,
2563 &hf_zbee_zcl_price_price_matrix_tier_block_id_tier,
2564 NULL
2567 /* Provider ID */
2568 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2569 *offset += 4;
2571 /* Issuer Event ID */
2572 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2573 *offset += 4;
2575 /* Start Time */
2576 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2577 *offset += 4;
2579 /* Issuer Tariff ID */
2580 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2581 *offset += 4;
2583 /* Command Index */
2584 proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2585 *offset += 1;
2587 /* Total Number of Commands */
2588 proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2589 *offset += 1;
2591 /* Sub-Payload Control */
2592 sub_payload_control = tvb_get_uint8(tvb, *offset) && 0x01; /* First bit determines Tier/Block ID field type */
2593 proto_tree_add_item(tree, hf_zbee_zcl_price_price_matrix_sub_payload_control, tvb, *offset, 1, ENC_NA);
2594 *offset += 1;
2596 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
2597 /* Tier/Block ID */
2598 if (sub_payload_control == 0)
2599 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);
2600 else
2601 proto_tree_add_item(tree, hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier, tvb, *offset, 1, ENC_NA);
2602 *offset += 1;
2604 /* Price */
2605 proto_tree_add_item(tree, hf_zbee_zcl_price_price_matrix_price, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2606 *offset += 4;
2608 } /*dissect_zcl_price_publish_price_matrix*/
2611 *This function manages the Publish Block Thresholds payload
2613 *@param tvb pointer to buffer containing raw packet.
2614 *@param tree pointer to data tree Wireshark uses to display packet.
2615 *@param offset pointer to offset from caller
2617 static void
2618 dissect_zcl_price_publish_block_thresholds(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2620 uint8_t sub_payload_control;
2622 static int * const tier_number_of_block_thresholds[] = {
2623 &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
2624 &hf_zbee_zcl_price_block_thresholds_tier,
2625 NULL
2628 static int * const number_of_block_thresholds[] = {
2629 &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
2630 NULL
2633 /* Provider ID */
2634 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2635 *offset += 4;
2637 /* Issuer Event ID */
2638 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2639 *offset += 4;
2641 /* Start Time */
2642 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2643 *offset += 4;
2645 /* Issuer Tariff ID */
2646 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2647 *offset += 4;
2649 /* Command Index */
2650 proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2651 *offset += 1;
2653 /* Total Number of Commands */
2654 proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2655 *offset += 1;
2657 /* Sub-Payload Control */
2658 sub_payload_control = tvb_get_uint8(tvb, *offset) && 0x01; /* First bit determines Tier/Number of Block Thresholds field type */
2659 proto_tree_add_item(tree, hf_zbee_zcl_price_block_thresholds_sub_payload_control, tvb, *offset, 1, ENC_NA);
2660 *offset += 1;
2662 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
2663 uint8_t thresholds;
2665 /* Tier/Number of Block Thresholds */
2666 thresholds = tvb_get_uint8(tvb, *offset) & ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS;
2667 if (sub_payload_control == 0)
2668 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);
2669 else
2670 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);
2671 *offset += 1;
2673 /* Block Threshold(s) */
2674 for (int i = 0; i < thresholds; i++) {
2675 proto_tree_add_item(tree, hf_zbee_zcl_price_block_thresholds_block_threshold, tvb, *offset, 6, ENC_LITTLE_ENDIAN);
2676 *offset += 6;
2679 } /*dissect_zcl_price_publish_block_thresholds*/
2682 *This function manages the Publish CO2 Value payload
2684 *@param tvb pointer to buffer containing raw packet.
2685 *@param tree pointer to data tree Wireshark uses to display packet.
2686 *@param offset pointer to offset from caller
2688 static void
2689 dissect_zcl_price_publish_co2_value(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2691 static int * const co2_value_trailing_digit[] = {
2692 &hf_zbee_zcl_price_co2_value_trailing_digit,
2693 NULL
2696 /* Provider ID */
2697 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2698 *offset += 4;
2700 /* Issuer Event ID */
2701 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2702 *offset += 4;
2704 /* Start Time */
2705 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2706 *offset += 4;
2708 /* Tariff Type */
2709 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);
2710 *offset += 1;
2712 /* CO2 Value */
2713 proto_tree_add_item(tree, hf_zbee_zcl_price_co2_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2714 *offset += 4;
2716 /* CO2 Unit */
2717 proto_tree_add_item(tree, hf_zbee_zcl_price_co2_unit, tvb, *offset, 1, ENC_NA);
2718 *offset += 1;
2720 /* CO2 Value Trailing Digit */
2721 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);
2722 *offset += 1;
2723 } /*dissect_zcl_price_publish_co2_value*/
2726 *This function manages the Publish Tier Labels payload
2728 *@param tvb pointer to buffer containing raw packet.
2729 *@param tree pointer to data tree Wireshark uses to display packet.
2730 *@param offset pointer to offset from caller
2732 static void
2733 dissect_zcl_price_publish_tier_labels(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2735 uint8_t number_of_labels;
2736 int length;
2738 /* Provider ID */
2739 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2740 *offset += 4;
2742 /* Issuer Event ID */
2743 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2744 *offset += 4;
2746 /* Issuer Tariff ID */
2747 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_tariff_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2748 *offset += 4;
2750 /* Command Index */
2751 proto_tree_add_item(tree, hf_zbee_zcl_price_command_index, tvb, *offset, 1, ENC_NA);
2752 *offset += 1;
2754 /* Total Number of Commands */
2755 proto_tree_add_item(tree, hf_zbee_zcl_price_total_number_of_commands, tvb, *offset, 1, ENC_NA);
2756 *offset += 1;
2758 /* Number of Labels */
2759 number_of_labels = tvb_get_uint8(tvb, *offset);
2760 proto_tree_add_item(tree, hf_zbee_zcl_price_tier_labels_number_of_labels, tvb, *offset, 1, ENC_NA);
2761 *offset += 1;
2763 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 0 && i < number_of_labels; i++) {
2764 /* Tier ID */
2765 proto_tree_add_item(tree, hf_zbee_zcl_price_tier_labels_tier_id, tvb, *offset, 1, ENC_NA);
2766 *offset += 1;
2768 /* Tier Label */
2769 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_tier_labels_tier_label, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2770 *offset += length;
2772 } /*dissect_zcl_price_publish_tier_labels*/
2775 *This function manages the Publish Consolidated Bill payload
2777 *@param tvb pointer to buffer containing raw packet.
2778 *@param tree pointer to data tree Wireshark uses to display packet.
2779 *@param offset pointer to offset from caller
2781 static void
2782 dissect_zcl_price_publish_billing_period(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2784 /* Provider ID */
2785 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2786 *offset += 4;
2788 /* Issuer Event ID */
2789 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2790 *offset += 4;
2792 /* Billing Period Start Time */
2793 proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2794 *offset += 4;
2796 /* Billing Period Duration */
2797 proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2798 *offset += 3;
2800 /* Billing Period Duration Type */
2801 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);
2802 *offset += 1;
2804 /* Tariff Type */
2805 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);
2806 *offset += 1;
2807 } /*dissect_zcl_price_publish_billing_period*/
2810 *This function manages the Publish Consolidated Bill payload
2812 *@param tvb pointer to buffer containing raw packet.
2813 *@param tree pointer to data tree Wireshark uses to display packet.
2814 *@param offset pointer to offset from caller
2816 static void
2817 dissect_zcl_price_publish_consolidated_bill(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2819 static int * const bill_trailing_digit[] = {
2820 &hf_zbee_zcl_price_consolidated_bill_trailing_digit,
2821 NULL
2824 /* Provider ID */
2825 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2826 *offset += 4;
2828 /* Issuer Event ID */
2829 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2830 *offset += 4;
2832 /* Billing Period Start Time */
2833 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2834 *offset += 4;
2836 /* Billing Period Duration */
2837 proto_tree_add_item(tree, hf_zbee_zcl_price_billing_period_duration, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
2838 *offset += 3;
2840 /* Billing Period Duration Type */
2841 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);
2842 *offset += 1;
2844 /* Tariff Type */
2845 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);
2846 *offset += 1;
2848 /* Consolidated Bill */
2849 proto_tree_add_item(tree, hf_zbee_zcl_price_consolidated_bill, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2850 *offset += 4;
2852 /* Currency */
2853 proto_tree_add_item(tree, hf_zbee_zcl_price_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2854 *offset += 2;
2856 /* Bill Trailing Digit */
2857 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);
2858 *offset += 1;
2859 } /*dissect_zcl_price_publish_consolidated_bill*/
2861 *This function manages the Publish CPP Event payload
2863 *@param tvb pointer to buffer containing raw packet.
2864 *@param tree pointer to data tree Wireshark uses to display packet.
2865 *@param offset pointer to offset from caller
2867 static void
2868 dissect_zcl_price_publish_cpp_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2870 /* Provider ID */
2871 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2872 *offset += 4;
2874 /* Issuer Event ID */
2875 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2876 *offset += 4;
2878 /* Start Time */
2879 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2880 *offset += 4;
2882 /* Duration in Minutes */
2883 proto_tree_add_item(tree, hf_zbee_zcl_price_duration_in_minutes, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2884 *offset += 2;
2886 /* Tariff Type */
2887 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);
2888 *offset += 1;
2890 /* CPP Price Tier */
2891 proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_price_tier, tvb, *offset, 1, ENC_NA);
2892 *offset += 1;
2894 /* CPP Auth */
2895 proto_tree_add_item(tree, hf_zbee_zcl_price_cpp_auth, tvb, *offset, 1, ENC_NA);
2896 *offset += 1;
2897 } /*dissect_zcl_price_publish_cpp_event*/
2901 *This function manages the Publish Credit Payment payload
2903 *@param tvb pointer to buffer containing raw packet.
2904 *@param tree pointer to data tree Wireshark uses to display packet.
2905 *@param offset pointer to offset from caller
2907 static void
2908 dissect_zcl_price_publish_credit_payment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2910 int length;
2912 /* Provider ID */
2913 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2914 *offset += 4;
2916 /* Issuer Event ID */
2917 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2918 *offset += 4;
2920 /* Credit Payment Due Date */
2921 proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_due_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2922 *offset += 4;
2924 /* Credit Payment Overdue Amount */
2925 proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_overdue_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2926 *offset += 4;
2928 /* Credit Payment Status */
2929 proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_status, tvb, *offset, 1, ENC_NA);
2930 *offset += 1;
2932 /* Credit Payment */
2933 proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2934 *offset += 4;
2936 /* Credit Payment Date */
2937 proto_tree_add_item(tree, hf_zbee_zcl_price_credit_payment_date, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
2938 *offset += 4;
2940 /* Credit Payment Ref */
2941 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_price_credit_payment_ref, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
2942 *offset += length;
2943 } /*dissect_zcl_price_publish_credit_payment*/
2946 *This function manages the Publish Currency Conversion payload
2948 *@param tvb pointer to buffer containing raw packet.
2949 *@param tree pointer to data tree Wireshark uses to display packet.
2950 *@param offset pointer to offset from caller
2952 static void
2953 dissect_zcl_price_publish_currency_conversion(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
2956 static int * const conversion_factor_trailing_digit[] = {
2957 &hf_zbee_zcl_price_conversion_factor_trailing_digit,
2958 NULL
2961 /* Provider ID */
2962 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2963 *offset += 4;
2965 /* Issuer Event ID */
2966 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2967 *offset += 4;
2969 /* Start Time */
2970 proto_tree_add_item(tree, hf_zbee_zcl_price_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2971 *offset += 4;
2973 /* Old Currency */
2974 proto_tree_add_item(tree, hf_zbee_zcl_price_old_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2975 *offset += 2;
2977 /* New Currency */
2978 proto_tree_add_item(tree, hf_zbee_zcl_price_new_currency, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
2979 *offset += 2;
2981 /* Conversion Factor */
2982 proto_tree_add_item(tree, hf_zbee_zcl_price_conversion_factor, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2983 *offset += 4;
2985 /* Conversion Factor Trailing digit */
2986 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);
2987 *offset += 1;
2989 /* Currency Change Control Flags */
2990 proto_tree_add_item(tree, hf_zbee_zcl_price_currency_change_control_flags, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
2991 *offset += 4;
2992 } /*dissect_zcl_price_publish_currency_conversion*/
2995 *This function manages the Publish Cancel Tariff payload
2997 *@param tvb pointer to buffer containing raw packet.
2998 *@param tree pointer to data tree Wireshark uses to display packet.
2999 *@param offset pointer to offset from caller
3001 static void
3002 dissect_zcl_price_publish_cancel_tariff(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3004 /* Provider ID */
3005 proto_tree_add_item(tree, hf_zbee_zcl_price_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
3006 *offset += 4;
3008 /* Issuer Event ID */
3009 proto_tree_add_item(tree, hf_zbee_zcl_price_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
3010 *offset += 4;
3012 /* Tariff Type */
3013 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);
3014 *offset += 1;
3015 } /*dissect_zcl_price_publish_cancel_tariff*/
3018 *This function registers the ZCL Price dissector
3021 void
3022 proto_register_zbee_zcl_price(void)
3024 static hf_register_info hf[] = {
3026 { &hf_zbee_zcl_price_attr_server_id,
3027 { "Attribute", "zbee_zcl_se.price.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_price_attr_server_names_ext,
3028 0x0, NULL, HFILL } },
3030 { &hf_zbee_zcl_price_attr_client_id,
3031 { "Attribute", "zbee_zcl_se.price.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_price_attr_client_names),
3032 0x0, NULL, HFILL } },
3034 { &hf_zbee_zcl_price_attr_reporting_status, /* common to all SE clusters */
3035 { "Attribute Reporting Status", "zbee_zcl_se.price.attr.attr_reporting_status",
3036 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
3038 { &hf_zbee_zcl_price_srv_tx_cmd_id,
3039 { "Command", "zbee_zcl_se.price.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_srv_tx_cmd_names),
3040 0x00, NULL, HFILL } },
3042 { &hf_zbee_zcl_price_srv_rx_cmd_id,
3043 { "Command", "zbee_zcl_se.price.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_srv_rx_cmd_names),
3044 0x00, NULL, HFILL } },
3046 { &hf_zbee_zcl_price_provider_id,
3047 { "Provider ID", "zbee_zcl_se.price.provider_id", FT_UINT32, BASE_DEC, NULL,
3048 0x00, NULL, HFILL } },
3050 { &hf_zbee_zcl_price_issuer_event_id,
3051 { "Issuer Event ID", "zbee_zcl_se.price.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
3052 0x00, NULL, HFILL } },
3054 { &hf_zbee_zcl_price_min_issuer_event_id,
3055 { "Min Issuer Event ID", "zbee_zcl_se.price.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
3056 0x00, NULL, HFILL } },
3058 { &hf_zbee_zcl_price_issuer_tariff_id,
3059 { "Issuer Tariff ID", "zbee_zcl_se.price.issuer_tariff_id", FT_UINT32, BASE_DEC, NULL,
3060 0x00, NULL, HFILL } },
3062 { &hf_zbee_zcl_price_command_index,
3063 { "Command Index", "zbee_zcl_se.price.command_index", FT_UINT8, BASE_DEC, NULL,
3064 0x00, NULL, HFILL } },
3066 { &hf_zbee_zcl_price_total_number_of_commands,
3067 { "Total Number of Commands", "zbee_zcl_se.price.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
3068 0x00, NULL, HFILL } },
3070 { &hf_zbee_zcl_price_number_of_commands,
3071 { "Number of Commands", "zbee_zcl_se.price.number_of_commands", FT_UINT8, BASE_DEC, NULL,
3072 0x00, NULL, HFILL } },
3074 { &hf_zbee_zcl_price_number_of_events,
3075 { "Number of Events", "zbee_zcl_se.price.number_of_events", FT_UINT8, BASE_DEC, NULL,
3076 0x00, NULL, HFILL } },
3078 { &hf_zbee_zcl_price_number_of_records,
3079 { "Number of Records", "zbee_zcl_se.price.number_of_records", FT_UINT8, BASE_DEC, NULL,
3080 0x00, NULL, HFILL } },
3082 { &hf_zbee_zcl_price_number_of_block_thresholds,
3083 { "Number of Block Thresholds", "zbee_zcl_se.price.number_of_block_thresholds", FT_UINT8, BASE_DEC, NULL,
3084 0x00, NULL, HFILL } },
3086 { &hf_zbee_zcl_price_number_of_generation_tiers,
3087 { "Number of Generation Tiers", "zbee_zcl_se.price.number_of_generation_tiers", FT_UINT8, BASE_DEC, NULL,
3088 0x00, NULL, HFILL } },
3090 { &hf_zbee_zcl_price_extended_number_of_price_tiers,
3091 { "Extended Number of Price Tiers", "zbee_zcl_se.price.extended_number_of_price_tiers", FT_UINT8, BASE_DEC, NULL,
3092 0x00, NULL, HFILL } },
3094 { &hf_zbee_zcl_price_command_options,
3095 { "Command Options", "zbee_zcl_se.price.command_options", FT_UINT8, BASE_HEX, NULL,
3096 0x00, NULL, HFILL } },
3098 { &hf_zbee_zcl_price_control,
3099 { "Price Control", "zbee_zcl_se.price.control", FT_UINT8, BASE_HEX, NULL,
3100 0x00, NULL, HFILL } },
3102 /* start Tariff Type fields */
3103 { &hf_zbee_zcl_price_tariff_type_mask,
3104 { "Tariff Type", "zbee_zcl_se.price.tariff_type_mask", FT_UINT8, BASE_HEX, NULL,
3105 0x00, NULL, HFILL } },
3107 { &hf_zbee_zcl_price_tariff_type,
3108 { "Tariff Type", "zbee_zcl_se.price.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
3109 ZBEE_ZCL_PRICE_TARIFF_TYPE, NULL, HFILL } },
3110 /* end Tariff Type fields */
3112 { &hf_zbee_zcl_price_tariff_resolution_period,
3113 { "Tariff Resolution Period", "zbee_zcl_se.price.tariff.resolution_period", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_resolution_period_names),
3114 0x00, NULL, HFILL } },
3116 { &hf_zbee_zcl_price_cpp_price_tier,
3117 { "CPP Price Tier", "zbee_zcl_se.price.cpp_price_tier", FT_UINT8, BASE_DEC, NULL,
3118 0x00, NULL, HFILL } },
3120 { &hf_zbee_zcl_price_cpp_auth,
3121 { "CPP Auth", "zbee_zcl_se.price.cpp_auth", FT_UINT8, BASE_DEC, NULL,
3122 0x00, NULL, HFILL } },
3124 { &hf_zbee_zcl_price_rate_label,
3125 { "Rate Label", "zbee_zcl_se.price.rate_label", FT_UINT_STRING, BASE_NONE, NULL,
3126 0x00, NULL, HFILL } },
3128 { &hf_zbee_zcl_price_unit_of_measure,
3129 { "Unit of Measure", "zbee_zcl_se.price.unit_of_measure", FT_UINT8, BASE_HEX, NULL,
3130 0x00, NULL, HFILL } },
3132 { &hf_zbee_zcl_price_currency,
3133 { "Currency", "zbee_zcl_se.price.currency", FT_UINT16, BASE_HEX, NULL,
3134 0x00, NULL, HFILL } },
3136 /* start Trailing Digit and Price Tier fields */
3137 { &hf_zbee_zcl_price_trailing_digit_and_price_tier,
3138 { "Trailing Digit and Price Tier", "zbee_zcl_se.price.trailing_digit_and_price_tier", FT_UINT8, BASE_HEX, NULL,
3139 0x00, NULL, HFILL } },
3141 { &hf_zbee_zcl_price_tier,
3142 { "Price Tier", "zbee_zcl_se.price.tier", FT_UINT8, BASE_HEX, NULL,
3143 ZBEE_ZCL_PRICE_TIER, NULL, HFILL } },
3145 { &hf_zbee_zcl_price_trailing_digit,
3146 { "Trailing Digit", "zbee_zcl_se.price.trailing_digit", FT_UINT8, BASE_HEX, NULL,
3147 ZBEE_ZCL_PRICE_TRAILING_DIGIT, NULL, HFILL } },
3148 /* end Trailing Digit and Price Tier fields */
3150 /* start Number of Price Tiers and Register Tier fields */
3151 { &hf_zbee_zcl_price_number_of_price_tiers_and_register_tier,
3152 { "Number of Price Tiers and Register Tier", "zbee_zcl_se.price.number_of_price_tiers_and_register_tier", FT_UINT8, BASE_HEX, NULL,
3153 0x00, NULL, HFILL } },
3155 { &hf_zbee_zcl_price_register_tier,
3156 { "Register Tier", "zbee_zcl_se.price.register_tier", FT_UINT8, BASE_HEX, NULL,
3157 ZBEE_ZCL_PRICE_REGISTER_TIER, NULL, HFILL } },
3159 { &hf_zbee_zcl_price_number_of_price_tiers,
3160 { "Number of Price Tiers", "zbee_zcl_se.price.number_of_price_tiers", FT_UINT8, BASE_HEX, NULL,
3161 ZBEE_ZCL_PRICE_NUMBER_OF_PRICE_TIERS, NULL, HFILL } },
3162 /* end Number of Price Tiers and Register Tier fields */
3164 { &hf_zbee_zcl_price_extended_price_tier,
3165 { "Extended Price Tier", "zbee_zcl_se.price.extended_price_tier", FT_UINT8, BASE_HEX, NULL,
3166 0x00, NULL, HFILL } },
3168 { &hf_zbee_zcl_price_extended_register_tier,
3169 { "Extended Register Tier", "zbee_zcl_se.price.extended_register_tier", FT_UINT8, BASE_HEX, NULL,
3170 0x00, NULL, HFILL } },
3172 { &hf_zbee_zcl_price_duration_in_minutes,
3173 { "Duration in Minutes", "zbee_zcl_se.price.duration_in_minutes", FT_UINT16, BASE_DEC, NULL,
3174 0x00, NULL, HFILL } },
3176 { &hf_zbee_zcl_price,
3177 { "Price", "zbee_zcl_se.price.price", FT_UINT32, BASE_DEC, NULL,
3178 0x00, NULL, HFILL } },
3180 { &hf_zbee_zcl_price_ratio,
3181 { "Price Ratio", "zbee_zcl_se.price.price.ratio", FT_UINT8, BASE_DEC, NULL,
3182 0x00, NULL, HFILL } },
3184 { &hf_zbee_zcl_price_generation_price,
3185 { "Generation Price", "zbee_zcl_se.price.generation_price", FT_UINT32, BASE_DEC, NULL,
3186 0x00, NULL, HFILL } },
3188 { &hf_zbee_zcl_price_generation_price_ratio,
3189 { "Generation Price Ratio", "zbee_zcl_se.price.generation_price.ratio", FT_UINT8, BASE_DEC, NULL,
3190 0x00, NULL, HFILL } },
3192 { &hf_zbee_zcl_price_generation_tier,
3193 { "Generation Tier", "zbee_zcl_se.price.generation_tier", FT_UINT8, BASE_HEX, NULL,
3194 0x00, NULL, HFILL } },
3196 { &hf_zbee_zcl_price_alternate_cost_delivered,
3197 { "Alternate Cost Delivered", "zbee_zcl_se.price.alternate_cost_delivered", FT_UINT32, BASE_DEC, NULL,
3198 0x00, NULL, HFILL } },
3200 { &hf_zbee_zcl_price_alternate_cost_unit,
3201 { "Alternate Cost Unit", "zbee_zcl_se.price.alternate_cost.unit", FT_UINT8, BASE_HEX, NULL,
3202 0x00, NULL, HFILL } },
3204 /* start Alternate Cost Trailing Digit */
3205 { &hf_zbee_zcl_price_alternate_cost_trailing_digit_mask,
3206 { "Alternate Cost Trailing Digit", "zbee_zcl_se.price.alternate_cost.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3207 0x00, NULL, HFILL } },
3209 { &hf_zbee_zcl_price_alternate_cost_trailing_digit,
3210 { "Alternate Cost Trailing Digit", "zbee_zcl_se.price.alternate_cost.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3211 ZBEE_ZCL_PRICE_ALTERNATE_COST_TRAILING_DIGIT, NULL, HFILL } },
3212 /* end Alternate Cost Trailing Digit */
3214 { &hf_zbee_zcl_price_start_time,
3215 { "Start Time", "zbee_zcl_se.price.start_time", FT_UINT32, BASE_CUSTOM,
3216 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3218 { &hf_zbee_zcl_price_earliest_start_time,
3219 { "Earliest Start Time", "zbee_zcl_se.price.earliest_start_time", FT_UINT32, BASE_CUSTOM,
3220 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3222 { &hf_zbee_zcl_price_latest_end_time,
3223 { "Latest End Time", "zbee_zcl_se.price.latest_end_time", FT_UINT32, BASE_CUSTOM,
3224 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3226 { &hf_zbee_zcl_price_current_time,
3227 { "Current Time", "zbee_zcl_se.price.current_time", FT_UINT32, BASE_CUSTOM,
3228 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3230 { &hf_zbee_zcl_price_price_ack_time,
3231 { "Price Ack Time", "zbee_zcl_se.price.price_ack_time", FT_UINT32, BASE_CUSTOM,
3232 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3234 { &hf_zbee_zcl_price_block_period_start_time,
3235 { "Block Period Start Time", "zbee_zcl_se.price.block_period.start_time", FT_UINT32, BASE_CUSTOM,
3236 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3238 { &hf_zbee_zcl_price_block_period_duration,
3239 { "Block Period Duration", "zbee_zcl_se.price.block_period.duration", FT_UINT24, BASE_DEC, NULL,
3240 0x00, NULL, HFILL } },
3242 /* start Block Period Control */
3243 { &hf_zbee_zcl_price_block_period_control,
3244 { "Block Period Control", "zbee_zcl_se.price.block_period.control", FT_UINT8, BASE_HEX, NULL,
3245 0x00, NULL, HFILL } },
3247 { &hf_zbee_zcl_price_block_period_control_price_acknowledgement,
3248 { "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),
3249 ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_PRICE_ACKNOWLEDGEMENT, NULL, HFILL } },
3251 { &hf_zbee_zcl_price_block_period_control_repeating_block,
3252 { "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),
3253 ZBEE_ZCL_PRICE_BLOCK_PERIOD_CONTROL_REPEATING_BLOCK, NULL, HFILL } },
3254 /* end Block Period Control */
3256 /* start Block Period Duration Type fields */
3257 { &hf_zbee_zcl_price_block_period_duration_type,
3258 { "Block Period Duration Type", "zbee_zcl_se.price.block_period.duration.type", FT_UINT8, BASE_HEX, NULL,
3259 0x00, NULL, HFILL } },
3261 { &hf_zbee_zcl_price_block_period_duration_timebase,
3262 { "Duration Timebase", "zbee_zcl_se.price.block_period.duration.timebase", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_timebase_names),
3263 ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_TIMEBASE, NULL, HFILL } },
3265 { &hf_zbee_zcl_price_block_period_duration_control,
3266 { "Duration Control", "zbee_zcl_se.price.block_period.duration.control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_control_names),
3267 ZBEE_ZCL_PRICE_BLOCK_PERIOD_DURATION_CONTROL, NULL, HFILL } },
3268 /* end Block Period Duration Type fields */
3270 { &hf_zbee_zcl_price_conversion_factor,
3271 { "Conversion Factor", "zbee_zcl_se.price.conversion_factor", FT_UINT32, BASE_DEC, NULL,
3272 0x00, NULL, HFILL } },
3274 /* start Conversion Factor Trailing Digit fields */
3275 { &hf_zbee_zcl_price_conversion_factor_trailing_digit_mask,
3276 { "Conversion Factor Trailing Digit", "zbee_zcl_se.price.conversion_factor_trailing_digit", FT_UINT8, BASE_DEC, NULL,
3277 0x00, NULL, HFILL } },
3279 { &hf_zbee_zcl_price_conversion_factor_trailing_digit,
3280 { "Conversion Factor Trailing Digit", "zbee_zcl_se.price.conversion_factor.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3281 ZBEE_ZCL_PRICE_CONVERSION_FACTOR_TRAILING_DIGIT, NULL, HFILL } },
3282 /* end Conversion Factor Trailing Digit fields */
3284 { &hf_zbee_zcl_price_calorific_value,
3285 { "Calorific Value", "zbee_zcl_se.price.calorific_value", FT_UINT32, BASE_DEC, NULL,
3286 0x00, NULL, HFILL } },
3288 { &hf_zbee_zcl_price_calorific_value_unit,
3289 { "Calorific Value Unit", "zbee_zcl_se.price.calorific_value.unit", FT_UINT8, BASE_HEX, NULL,
3290 0x00, NULL, HFILL } },
3292 /* start Calorific Value Trailing Digit fields */
3293 { &hf_zbee_zcl_price_calorific_value_trailing_digit_mask,
3294 { "Calorific Value Trailing Digit", "zbee_zcl_se.price.calorific_value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3295 0x00, NULL, HFILL } },
3297 { &hf_zbee_zcl_price_calorific_value_trailing_digit,
3298 { "Calorific Value Trailing Digit", "zbee_zcl_se.price.calorific_value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3299 ZBEE_ZCL_PRICE_CALORIFIC_VALUE_TRAILING_DIGIT, NULL, HFILL } },
3300 /* end Calorific Value Trailing Digit fields */
3302 /* start Tariff Information Type/Charging Scheme fields */
3303 { &hf_zbee_zcl_price_tariff_information_type_and_charging_scheme,
3304 { "Tariff Type/Charging Scheme", "zbee_zcl_se.price.tariff_information.type_and_charging_scheme", FT_UINT8, BASE_HEX, NULL,
3305 0x00, NULL, HFILL } },
3307 { &hf_zbee_zcl_price_tariff_information_type,
3308 { "Tariff Type", "zbee_zcl_se.price.tariff_information.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
3309 ZBEE_ZCL_PRICE_TARIFF_INFORMATION_TYPE, NULL, HFILL } },
3311 { &hf_zbee_zcl_price_tariff_information_charging_scheme,
3312 { "Charging Scheme", "zbee_zcl_se.price.tariff_information.charging_scheme", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_charging_scheme_names),
3313 ZBEE_ZCL_PRICE_TARIFF_INFORMATION_CHARGING_SCHEME, NULL, HFILL } },
3314 /* end Tariff Information Type/Charging Scheme fields */
3316 { &hf_zbee_zcl_price_tariff_information_tariff_label,
3317 { "Tariff Label", "zbee_zcl_se.price.tariff_information.tariff_label", FT_UINT_STRING, BASE_NONE, NULL,
3318 0x00, NULL, HFILL } },
3320 { &hf_zbee_zcl_price_tariff_information_number_of_price_tiers_in_use,
3321 { "Number of Price Tiers in Use", "zbee_zcl_se.price.tariff_information.number_of_price_tiers_in_use", FT_UINT8, BASE_DEC, NULL,
3322 0x00, NULL, HFILL } },
3324 { &hf_zbee_zcl_price_tariff_information_number_of_block_thresholds_in_use,
3325 { "Number of Block Thresholds in Use", "zbee_zcl_se.price.tariff_information.number_of_block_thresholds_in_use", FT_UINT8, BASE_DEC, NULL,
3326 0x00, NULL, HFILL } },
3328 /* start Price Trailing Digit fields */
3329 { &hf_zbee_zcl_price_tariff_information_price_trailing_digit_mask,
3330 { "Price Trailing Digit", "zbee_zcl_se.price.tariff_information.price.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3331 0x00, NULL, HFILL } },
3333 { &hf_zbee_zcl_price_tariff_information_price_trailing_digit,
3334 { "Price Trailing Digit", "zbee_zcl_se.price.tariff_information.price.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3335 ZBEE_ZCL_PRICE_TARIFF_INFORMATION_PRICE_TRAILING_DIGIT, NULL, HFILL } },
3336 /* start Price Trailing Digit fields */
3338 { &hf_zbee_zcl_price_tariff_information_standing_charge,
3339 { "Standing Charge", "zbee_zcl_se.price.tariff_information.standing_charge", FT_UINT32, BASE_DEC, NULL,
3340 0x00, NULL, HFILL } },
3342 { &hf_zbee_zcl_price_tariff_information_tier_block_mode,
3343 { "Tier Block Mode", "zbee_zcl_se.price.tariff_information.tier_block_mode", FT_UINT8, BASE_HEX, NULL,
3344 0x00, NULL, HFILL } },
3346 { &hf_zbee_zcl_price_block_thresholds_number_of_block_thresholds,
3347 { "Number of Block Thresholds", "zbee_zcl_se.price.tariff_information.number_of_block_thresholds", FT_UINT8, BASE_DEC, NULL,
3348 ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_NUMBER_OF_BLOCK_THRESHOLDS, NULL, HFILL } },
3350 { &hf_zbee_zcl_price_tariff_information_block_threshold_multiplier,
3351 { "Block Threshold Multiplier", "zbee_zcl_se.price.tariff_information.block_threshold_multiplier", FT_UINT24, BASE_DEC, NULL,
3352 0x00, NULL, HFILL } },
3354 { &hf_zbee_zcl_price_tariff_information_block_threshold_divisor,
3355 { "Block Threshold Divisor", "zbee_zcl_se.price.tariff_information.block_threshold_divisor", FT_UINT24, BASE_DEC, NULL,
3356 0x00, NULL, HFILL } },
3358 { &hf_zbee_zcl_price_price_matrix_sub_payload_control,
3359 { "Sub Payload Control", "zbee_zcl_se.price.price_matrix.sub_payload_control", FT_UINT8, BASE_DEC, NULL,
3360 0x00, NULL, HFILL } },
3362 /* start Tier/Block ID fields */
3363 { &hf_zbee_zcl_price_price_matrix_tier_block_id,
3364 { "Tier/Block ID", "zbee_zcl_se.price.price_matrix.tier_block_id", FT_UINT8, BASE_HEX, NULL,
3365 0x00, NULL, HFILL } },
3367 { &hf_zbee_zcl_price_price_matrix_tier_block_id_block,
3368 { "Block", "zbee_zcl_se.price.price_matrix.block", FT_UINT8, BASE_DEC, NULL,
3369 ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_BLOCK, NULL, HFILL } },
3371 { &hf_zbee_zcl_price_price_matrix_tier_block_id_tier,
3372 { "Tier", "zbee_zcl_se.price.price_matrix.tier", FT_UINT8, BASE_DEC, NULL,
3373 ZBEE_ZCL_PRICE_PRICE_MATRIX_TIER_BLOCK_ID_TIER, NULL, HFILL } },
3374 /* end Tier/Block ID fields */
3376 { &hf_zbee_zcl_price_price_matrix_tier_block_id_tou_tier,
3377 { "Tier", "zbee_zcl_se.price.price_matrix.tier", FT_UINT8, BASE_DEC, NULL,
3378 0x00, NULL, HFILL } },
3380 { &hf_zbee_zcl_price_price_matrix_price,
3381 { "Price", "zbee_zcl_se.price.price_matrix.price", FT_UINT32, BASE_DEC, NULL,
3382 0x00, NULL, HFILL } },
3384 { &hf_zbee_zcl_price_block_thresholds_sub_payload_control,
3385 { "Sub Payload Control", "zbee_zcl_se.price.block_thresholds.sub_payload_control", FT_UINT8, BASE_DEC, NULL,
3386 0x00, NULL, HFILL } },
3388 /* start Tier/Number of Block Thresholds fields */
3389 { &hf_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds,
3390 { "Tier/Number of Block Thresholds", "zbee_zcl_se.price.block_thresholds.tier_number_of_block_thresholds", FT_UINT8, BASE_HEX, NULL,
3391 0x00, NULL, HFILL } },
3393 { &hf_zbee_zcl_price_block_thresholds_tier,
3394 { "Tier", "zbee_zcl_se.price.block_thresholds.tier", FT_UINT8, BASE_DEC, NULL,
3395 ZBEE_ZCL_PRICE_BLOCK_THRESHOLDS_TIER, NULL, HFILL } },
3396 /* end Tier/Number of Block Thresholds fields */
3398 { &hf_zbee_zcl_price_block_thresholds_block_threshold,
3399 { "Block Threshold", "zbee_zcl_se.price.block_threshold", FT_UINT48, BASE_DEC, NULL,
3400 0x00, NULL, HFILL } },
3402 { &hf_zbee_zcl_price_co2_value,
3403 { "CO2 Value", "zbee_zcl_se.price.co2.value", FT_UINT32, BASE_DEC, NULL,
3404 0x00, NULL, HFILL } },
3406 { &hf_zbee_zcl_price_co2_unit,
3407 { "CO2 Unit", "zbee_zcl_se.price.co2.unit", FT_UINT8, BASE_HEX, NULL,
3408 0x00, NULL, HFILL } },
3410 /* start CO2 Trailing Digit fields */
3411 { &hf_zbee_zcl_price_co2_value_trailing_digit_mask,
3412 { "CO2 Value Trailing Digit", "zbee_zcl_se.price.co2.value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3413 0x00, NULL, HFILL } },
3415 { &hf_zbee_zcl_price_co2_value_trailing_digit,
3416 { "CO2 Value Trailing Digit", "zbee_zcl_se.price.co2.value.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3417 ZBEE_ZCL_PRICE_CO2_VALUE_TRAILING_DIGIT, NULL, HFILL } },
3418 /* end CO2 Trailing Digit fields */
3420 { &hf_zbee_zcl_price_tier_labels_number_of_labels,
3421 { "Number of Labels", "zbee_zcl_se.price.tier_labels.number_of_labels", FT_UINT8, BASE_DEC, NULL,
3422 0x00, NULL, HFILL } },
3424 { &hf_zbee_zcl_price_tier_labels_tier_id,
3425 { "Tier ID", "zbee_zcl_se.price.tier_labels.tier_id", FT_UINT8, BASE_DEC, NULL,
3426 0x00, NULL, HFILL } },
3428 { &hf_zbee_zcl_price_tier_labels_tier_label,
3429 { "Tariff Label", "zbee_zcl_se.price.tier_labels.tier_label", FT_UINT_STRING, BASE_NONE, NULL,
3430 0x00, NULL, HFILL } },
3432 { &hf_zbee_zcl_price_billing_period_start_time,
3433 { "Billing Period Start Time", "zbee_zcl_se.price.billing_period.start_time", FT_UINT32, BASE_CUSTOM,
3434 CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
3436 { &hf_zbee_zcl_price_billing_period_duration,
3437 { "Billing Period Duration", "zbee_zcl_se.price.billing_period.duration", FT_UINT24, BASE_DEC, NULL,
3438 0x00, NULL, HFILL } },
3440 /* start Billing Period Duration Type fields */
3441 { &hf_zbee_zcl_price_billing_period_duration_type,
3442 { "Billing Period Duration Type", "zbee_zcl_se.price.billing_period.duration.type", FT_UINT8, BASE_HEX, NULL,
3443 0x00, NULL, HFILL } },
3445 { &hf_zbee_zcl_price_billing_period_duration_timebase,
3446 { "Duration Timebase", "zbee_zcl_se.price.billing_period.duration.timebase", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_timebase_names),
3447 ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_TIMEBASE, NULL, HFILL } },
3449 { &hf_zbee_zcl_price_billing_period_duration_control,
3450 { "Duration Control", "zbee_zcl_se.price.billing_period.duration.control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_block_period_duration_control_names),
3451 ZBEE_ZCL_PRICE_BILLING_PERIOD_DURATION_CONTROL, NULL, HFILL } },
3452 /* end Billing Period Duration Type fields */
3454 { &hf_zbee_zcl_price_consolidated_bill,
3455 { "Consolidated Bill", "zbee_zcl_se.price.consolidated_bill", FT_UINT32, BASE_DEC, NULL,
3456 0x00, NULL, HFILL } },
3458 /* start Consolidated Bill Trailing Digit fields */
3459 { &hf_zbee_zcl_price_consolidated_bill_trailing_digit_mask,
3460 { "Bill Trailing Digit", "zbee_zcl_se.price.consolidated_bill.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3461 0x00, NULL, HFILL } },
3463 { &hf_zbee_zcl_price_consolidated_bill_trailing_digit,
3464 { "Bill Trailing Digit", "zbee_zcl_se.price.consolidated_bill.trailing_digit", FT_UINT8, BASE_DEC, NULL,
3465 ZBEE_ZCL_PRICE_CONSOLIDATED_BILL_TRAILING_DIGIT, NULL, HFILL } },
3466 /* end Consolidated Bill Trailing Digit fields */
3468 { &hf_zbee_zcl_price_credit_payment_due_date,
3469 { "Credit Payment Due Date", "zbee_zcl_se.price.credit_payment.due_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
3470 0x00, NULL, HFILL } },
3472 { &hf_zbee_zcl_price_credit_payment_date,
3473 { "Credit Payment Date", "zbee_zcl_se.price.credit_payment.date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
3474 0x00, NULL, HFILL } },
3476 { &hf_zbee_zcl_price_credit_payment_overdue_amount,
3477 { "Credit Payment Overdue Amount", "zbee_zcl_se.price.credit_payment.overdue_amount", FT_UINT32, BASE_DEC, NULL,
3478 0x00, NULL, HFILL } },
3480 { &hf_zbee_zcl_price_credit_payment_status,
3481 { "Credit Payment Status", "zbee_zcl_se.price.credit_payment.status", FT_UINT8, BASE_DEC, NULL,
3482 0x00, NULL, HFILL } },
3484 { &hf_zbee_zcl_price_credit_payment,
3485 { "Credit Payment", "zbee_zcl_se.price.credit_payment", FT_UINT32, BASE_DEC, NULL,
3486 0x00, NULL, HFILL } },
3488 { &hf_zbee_zcl_price_credit_payment_ref,
3489 { "Credit Payment Ref", "zbee_zcl_se.price.credit_payment.ref", FT_UINT_STRING, BASE_NONE, NULL,
3490 0x00, NULL, HFILL } },
3492 { &hf_zbee_zcl_price_old_currency,
3493 { "Old Currency", "zbee_zcl_se.price.old_currency", FT_UINT16, BASE_HEX, NULL,
3494 0x00, NULL, HFILL } },
3496 { &hf_zbee_zcl_price_new_currency,
3497 { "New Currency", "zbee_zcl_se.price.new_currency", FT_UINT16, BASE_HEX, NULL,
3498 0x00, NULL, HFILL } },
3500 { &hf_zbee_zcl_price_currency_change_control_flags,
3501 { "Currency Change Control Flags", "zbee_zcl_se.price.currency_change_control_flags", FT_UINT32, BASE_HEX, NULL,
3502 0x00, NULL, HFILL } },
3505 /* ZCL Price subtrees */
3506 int *ett[] = {
3507 &ett_zbee_zcl_price,
3508 &ett_zbee_zcl_price_tariff_type,
3509 &ett_zbee_zcl_price_trailing_digit_and_price_tier,
3510 &ett_zbee_zcl_price_number_of_price_tiers_and_register_tier,
3511 &ett_zbee_zcl_price_alternate_cost_trailing_digit,
3512 &ett_zbee_zcl_price_block_period_control,
3513 &ett_zbee_zcl_price_block_period_duration_type,
3514 &ett_zbee_zcl_price_conversion_factor_trailing_digit,
3515 &ett_zbee_zcl_price_calorific_value_trailing_digit,
3516 &ett_zbee_zcl_price_tariff_information_tariff_type_and_charging_scheme,
3517 &ett_zbee_zcl_price_tariff_information_price_trailing_digit,
3518 &ett_zbee_zcl_price_price_matrix_tier_block_id,
3519 &ett_zbee_zcl_price_block_thresholds_tier_number_of_block_thresholds,
3520 &ett_zbee_zcl_price_co2_value_trailing_digit,
3521 &ett_zbee_zcl_price_billing_period_duration_type,
3522 &ett_zbee_zcl_price_consolidated_bill_trailing_digit,
3525 /* Register the ZigBee ZCL Price cluster protocol name and description */
3526 proto_zbee_zcl_price = proto_register_protocol("ZigBee ZCL Price", "ZCL Price", ZBEE_PROTOABBREV_ZCL_PRICE);
3527 proto_register_field_array(proto_zbee_zcl_price, hf, array_length(hf));
3528 proto_register_subtree_array(ett, array_length(ett));
3530 /* Register the ZigBee ZCL Price dissector. */
3531 register_dissector(ZBEE_PROTOABBREV_ZCL_PRICE, dissect_zbee_zcl_price, proto_zbee_zcl_price);
3532 } /*proto_register_zbee_zcl_price*/
3535 *Hands off the ZCL Price dissector.
3538 void
3539 proto_reg_handoff_zbee_zcl_price(void)
3541 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_PRICE,
3542 proto_zbee_zcl_price,
3543 ett_zbee_zcl_price,
3544 ZBEE_ZCL_CID_PRICE,
3545 ZBEE_MFG_CODE_NONE,
3546 hf_zbee_zcl_price_attr_server_id,
3547 hf_zbee_zcl_price_attr_client_id,
3548 hf_zbee_zcl_price_srv_rx_cmd_id,
3549 hf_zbee_zcl_price_srv_tx_cmd_id,
3550 (zbee_zcl_fn_attr_data)dissect_zcl_price_attr_data
3552 } /*proto_reg_handoff_zbee_zcl_price*/
3554 /* ########################################################################## */
3555 /* #### (0x0701) DEMAND RESPONSE AND LOAD CONTROL CLUSTER ################### */
3556 /* ########################################################################## */
3558 /* Attributes */
3559 #define zbee_zcl_drlc_attr_client_names_VALUE_STRING_LIST(XXX) \
3560 XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_UTILITY_ENROLLMENT_GROUP, 0x0000, "Utility Enrollment Group" ) \
3561 XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_START_RANDOMIZATION_MINUTES,0x0001, "Start Randomization Minutes" ) \
3562 XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_DURATION_RND_MINUTES, 0x0002, "Duration Randomization Minutes" ) \
3563 XXX(ZBEE_ZCL_ATTR_ID_DRLC_CLNT_DEVICE_CLASS_VALUE, 0x0003, "Device Class Value" ) \
3564 /* Smart Energy */ \
3565 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DRLC_CLNT, 0xFFFE, "Attribute Reporting Status" )
3567 VALUE_STRING_ENUM(zbee_zcl_drlc_attr_client_names);
3568 VALUE_STRING_ARRAY(zbee_zcl_drlc_attr_client_names);
3570 /* Server Commands Received */
3571 #define zbee_zcl_drlc_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
3572 XXX(ZBEE_ZCL_CMD_ID_DRLC_REPORT_EVENT_STATUS, 0x00, "Report Event Status" ) \
3573 XXX(ZBEE_ZCL_CMD_ID_DRLC_GET_SCHEDULED_EVENTS, 0x01, "Get Scheduled Events" )
3575 VALUE_STRING_ENUM(zbee_zcl_drlc_srv_rx_cmd_names);
3576 VALUE_STRING_ARRAY(zbee_zcl_drlc_srv_rx_cmd_names);
3578 /* Server Commands Generated */
3579 #define zbee_zcl_drlc_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
3580 XXX(ZBEE_ZCL_CMD_ID_DRLC_LOAD_CONTROL_EVENT, 0x00, "Load Control Event" ) \
3581 XXX(ZBEE_ZCL_CMD_ID_DRLC_CANCEL_LOAD_CONTROL_EVENT, 0x01, "Cancel Load Control Event" ) \
3582 XXX(ZBEE_ZCL_CMD_ID_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS, 0x02, "Cancel All Load Control Events" )
3584 VALUE_STRING_ENUM(zbee_zcl_drlc_srv_tx_cmd_names);
3585 VALUE_STRING_ARRAY(zbee_zcl_drlc_srv_tx_cmd_names);
3587 #define ZBEE_ZCL_DRLC_TEMP_OFFSET_NOT_USED 0xFF
3588 #define ZBEE_ZCL_DRLC_TEMP_OFFSET_DIVIDER 10.0f
3590 #define ZBEE_ZCL_DRLC_TEMP_SET_POINT_NOT_USED 0x8000
3591 #define ZBEE_ZCL_DRLC_TEMP_SET_POINT_DIVIDER 100.0f
3593 #define ZBEE_ZCL_DRLC_AVERAGE_LOAD_ADJUSTMENT_PERCENTAGE 0x80
3595 static const range_string zbee_zcl_drlc_load_control_event_criticality_level[] = {
3596 { 0x0, 0x0, "Reserved" },
3597 { 0x1, 0x1, "Green" },
3598 { 0x2, 0x2, "1" },
3599 { 0x3, 0x3, "2" },
3600 { 0x4, 0x4, "3" },
3601 { 0x5, 0x5, "4" },
3602 { 0x6, 0x6, "5" },
3603 { 0x7, 0x7, "Emergency" },
3604 { 0x8, 0x8, "Planned Outage" },
3605 { 0x9, 0x9, "Service Disconnect" },
3606 { 0x0A, 0x0F, "Utility Defined" },
3607 { 0x10, 0xFF, "Reserved" },
3608 { 0, 0, NULL }
3611 static const range_string zbee_zcl_drlc_report_event_status_event_status[] = {
3612 { 0x0, 0x0, "Reserved for future use." },
3613 { 0x01, 0x01, "Load Control Event command received" },
3614 { 0x02, 0x02, "Event started" },
3615 { 0x03, 0x03, "Event completed" },
3616 { 0x04, 0x04, "User has chosen to \"Opt-Out\", user will not participate in this event" },
3617 { 0x05, 0x05, "User has chosen to \"Opt-In\", user will participate in this event" },
3618 { 0x06, 0x06, "The event has been cancelled" },
3619 { 0x07, 0x07, "The event has been superseded" },
3620 { 0x08, 0x08, "Event partially completed with User \"Opt-Out\"." },
3621 { 0x09, 0x09, "Event partially completed due to User \"Opt-In\"." },
3622 { 0x0A, 0x0A, "Event completed, no User participation (Previous \"Opt-Out\")." },
3623 { 0x0B, 0xF7, "Reserved for future use." },
3624 { 0xF8, 0xF8, "Rejected - Invalid Cancel Command (Default)" },
3625 { 0xF9, 0xF9, "Rejected - Invalid Cancel Command (Invalid Effective Time)" },
3626 { 0xFA, 0xFA , "Reserved" },
3627 { 0xFB, 0xFB, "Rejected - Event was received after it had expired (Current Time > Start Time + Duration)" },
3628 { 0xFC, 0xFC, "Reserved for future use." },
3629 { 0xFD, 0xFD, "Rejected - Invalid Cancel Command (Undefined Event)" },
3630 { 0xFE, 0xFE, "Load Control Event command Rejected" },
3631 { 0xFF, 0xFF, "Reserved for future use." },
3632 { 0, 0, NULL }
3635 static const range_string zbee_zcl_drlc_report_event_signature_type[] = {
3636 { 0x0, 0x0, "No Signature" },
3637 { 0x01, 0x01, "ECDSA" },
3638 { 0x02, 0xFF, "Reserved" },
3639 { 0, 0, NULL }
3642 static const true_false_string zbee_zcl_drlc_randomize_start_tfs = {
3643 "Randomize Start time",
3644 "Randomized Start not Applied"
3647 static const true_false_string zbee_zcl_drlc_randomize_duration_tfs = {
3648 "Randomize Duration time",
3649 "Randomized Duration not Applied"
3651 /*************************/
3652 /* Function Declarations */
3653 /*************************/
3654 void proto_register_zbee_zcl_drlc(void);
3655 void proto_reg_handoff_zbee_zcl_drlc(void);
3657 static void decode_zcl_drlc_temp_offset (char *s, uint8_t value);
3658 static void decode_zcl_drlc_temp_set_point (char *s, int16_t value);
3659 static void decode_zcl_drlc_average_load_adjustment_percentage (char *s, int8_t value);
3661 static void dissect_zcl_drlc_load_control_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3662 static void dissect_zcl_drlc_cancel_load_control_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3663 static void dissect_zcl_drlc_cancel_all_load_control_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3664 static void dissect_zcl_drlc_report_event_status (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3665 static void dissect_zcl_drlc_get_scheduled_events (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
3667 /* Attribute Dissector Helpers */
3668 static void dissect_zcl_drlc_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
3669 /*************************/
3670 /* Global Variables */
3671 /*************************/
3673 /* Initialize the protocol and registered fields */
3674 static int proto_zbee_zcl_drlc;
3676 static int hf_zbee_zcl_drlc_srv_tx_cmd_id;
3677 static int hf_zbee_zcl_drlc_srv_rx_cmd_id;
3678 static int hf_zbee_zcl_drlc_attr_client_id;
3679 static int hf_zbee_zcl_drlc_attr_reporting_status;
3680 static int hf_zbee_zcl_drlc_issuer_event_id;
3681 static int hf_zbee_zcl_drlc_device_class;
3682 static int hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace;
3683 static int hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters;
3684 static int hf_zbee_zcl_drlc_device_class_water_heater;
3685 static int hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi;
3686 static int hf_zbee_zcl_drlc_device_class_smart_appliances;
3687 static int hf_zbee_zcl_drlc_device_class_irrigation_pump;
3688 static int hf_zbee_zcl_drlc_device_class_managed_c_i_loads;
3689 static int hf_zbee_zcl_drlc_device_class_simple_misc_loads;
3690 static int hf_zbee_zcl_drlc_device_class_exterior_lighting;
3691 static int hf_zbee_zcl_drlc_device_class_interior_lighting;
3692 static int hf_zbee_zcl_drlc_device_class_electric_vehicle;
3693 static int hf_zbee_zcl_drlc_device_class_generation_systems;
3694 static int hf_zbee_zcl_drlc_device_class_reserved;
3695 static int hf_zbee_zcl_drlc_utility_enrollment_group;
3696 static int hf_zbee_zcl_drlc_start_time;
3697 static int hf_zbee_zcl_drlc_duration_in_minutes;
3698 static int hf_zbee_zcl_drlc_criticality_level;
3699 static int hf_zbee_zcl_drlc_cooling_temp_offset;
3700 static int hf_zbee_zcl_drlc_heating_temp_offset;
3701 static int hf_zbee_zcl_drlc_cooling_temp_set_point;
3702 static int hf_zbee_zcl_drlc_heating_temp_set_point;
3703 static int hf_zbee_zcl_drlc_average_load_adjustment_percentage;
3704 static int hf_zbee_zcl_drlc_duty_cycle;
3705 static int hf_zbee_zcl_drlc_event_control;
3706 static int hf_zbee_zcl_drlc_event_control_randomize_start_time;
3707 static int hf_zbee_zcl_drlc_event_control_randomize_duration_time;
3708 static int hf_zbee_zcl_drlc_event_control_reserved;
3709 static int hf_zbee_zcl_drlc_cancel_control;
3710 static int hf_zbee_zcl_drlc_cancel_control_event_in_process;
3711 static int hf_zbee_zcl_drlc_cancel_control_reserved;
3712 static int hf_zbee_zcl_drlc_effective_time;
3713 static int hf_zbee_zcl_drlc_report_event_issuer_event_id;
3714 static int hf_zbee_zcl_drlc_report_event_event_status;
3715 static int hf_zbee_zcl_drlc_report_event_event_status_time;
3716 static int hf_zbee_zcl_drlc_report_event_criticality_level_applied;
3717 static int hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied;
3718 static int hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied;
3719 static int hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage;
3720 static int hf_zbee_zcl_drlc_report_event_duty_cycle;
3721 static int hf_zbee_zcl_drlc_report_event_event_control;
3722 static int hf_zbee_zcl_drlc_report_event_signature_type;
3723 static int hf_zbee_zcl_drlc_report_event_signature;
3724 static int hf_zbee_zcl_drlc_get_scheduled_events_start_time;
3725 static int hf_zbee_zcl_drlc_get_scheduled_events_number_of_events;
3726 static int hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id;
3728 static int* const zbee_zcl_drlc_control_event_device_classes[] = {
3729 &hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace,
3730 &hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters,
3731 &hf_zbee_zcl_drlc_device_class_water_heater,
3732 &hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi,
3733 &hf_zbee_zcl_drlc_device_class_smart_appliances,
3734 &hf_zbee_zcl_drlc_device_class_irrigation_pump,
3735 &hf_zbee_zcl_drlc_device_class_managed_c_i_loads,
3736 &hf_zbee_zcl_drlc_device_class_simple_misc_loads,
3737 &hf_zbee_zcl_drlc_device_class_exterior_lighting,
3738 &hf_zbee_zcl_drlc_device_class_interior_lighting,
3739 &hf_zbee_zcl_drlc_device_class_electric_vehicle,
3740 &hf_zbee_zcl_drlc_device_class_generation_systems,
3741 &hf_zbee_zcl_drlc_device_class_reserved,
3742 NULL
3745 static int* const hf_zbee_zcl_drlc_event_control_flags[] = {
3746 &hf_zbee_zcl_drlc_event_control_randomize_start_time,
3747 &hf_zbee_zcl_drlc_event_control_randomize_duration_time,
3748 &hf_zbee_zcl_drlc_event_control_reserved,
3749 NULL
3752 static int* const hf_zbee_zcl_drlc_cancel_control_flags[] = {
3753 &hf_zbee_zcl_drlc_cancel_control_event_in_process,
3754 &hf_zbee_zcl_drlc_cancel_control_reserved,
3755 NULL
3757 /* Initialize the subtree pointers */
3758 static int ett_zbee_zcl_drlc;
3759 static int ett_zbee_zcl_drlc_device_class;
3760 static int ett_zbee_zcl_drlc_event_control;
3761 static int ett_zbee_zcl_drlc_cancel_control;
3763 /*************************/
3764 /* Function Bodies */
3765 /*************************/
3767 * This function decodes Temperature Offset.
3769 * @param s string to display
3770 * @param value value to decode
3772 static void
3773 decode_zcl_drlc_temp_offset(char *s, uint8_t value)
3775 if (value == ZBEE_ZCL_DRLC_TEMP_OFFSET_NOT_USED)
3776 snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3777 else {
3778 float temp_delta;
3779 temp_delta = value / ZBEE_ZCL_DRLC_TEMP_OFFSET_DIVIDER;
3780 snprintf(s, ITEM_LABEL_LENGTH, "%+.2f%s", temp_delta, units_degree_celsius.singular);
3782 } /*decode_zcl_drlc_temp_offset*/
3785 * This function decodes Temperature Set Point.
3787 * @param s string to display
3788 * @param value value to decode
3790 static void decode_zcl_drlc_temp_set_point(char *s, int16_t value)
3792 if (value & ZBEE_ZCL_DRLC_TEMP_SET_POINT_NOT_USED)
3793 snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3794 else {
3795 float temp_delta;
3796 temp_delta = value / ZBEE_ZCL_DRLC_TEMP_SET_POINT_DIVIDER;
3797 snprintf(s, ITEM_LABEL_LENGTH, "%+.2f%s", temp_delta, units_degree_celsius.singular);
3799 } /*decode_zcl_drlc_temp_set_point*/
3802 * This function decodes Average Load Adjustment Percentage.
3804 * @param s string to display
3805 * @param value value to decode
3807 static void decode_zcl_drlc_average_load_adjustment_percentage(char *s, int8_t value)
3809 if (value & ZBEE_ZCL_DRLC_AVERAGE_LOAD_ADJUSTMENT_PERCENTAGE)
3810 snprintf(s, ITEM_LABEL_LENGTH, "Not Used");
3811 else {
3812 snprintf(s, ITEM_LABEL_LENGTH, "%+d%%", value);
3814 } /*decode_zcl_drlc_average_load_adjustment_percentage*/
3817 *This function is called by ZCL foundation dissector in order to decode
3819 *@param tree pointer to data tree Wireshark uses to display packet.
3820 *@param tvb pointer to buffer containing raw packet.
3821 *@param offset pointer to buffer offset
3822 *@param attr_id attribute identifier
3823 *@param data_type attribute data type
3824 *@param client_attr ZCL client
3826 static void
3827 dissect_zcl_drlc_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
3829 switch (attr_id) {
3830 /* applies to all SE clusters */
3831 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DRLC_CLNT:
3832 proto_tree_add_item(tree, hf_zbee_zcl_drlc_attr_reporting_status, tvb, *offset, 1, ENC_NA);
3833 *offset += 1;
3834 break;
3836 default: /* Catch all */
3837 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
3838 break;
3840 } /*dissect_zcl_drlc_attr_data*/
3843 *This function is called by ZCL foundation dissector in order to decode
3844 *DRLC Load Control Event Command Payload.
3846 *@param tree pointer to data tree Wireshark uses to display packet.
3847 *@param tvb pointer to buffer containing raw packet.
3848 *@param offset pointer to buffer offset
3850 static void
3851 dissect_zcl_drlc_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3853 /* Issuer Event ID */
3854 proto_tree_add_item(tree, hf_zbee_zcl_drlc_issuer_event_id, tvb,
3855 *offset, 4, ENC_LITTLE_ENDIAN);
3856 *offset += 4;
3858 /* Device Class */
3859 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_device_class, ett_zbee_zcl_drlc_device_class,
3860 zbee_zcl_drlc_control_event_device_classes, ENC_LITTLE_ENDIAN);
3861 *offset += 2;
3863 /* Utility Enrollment Group */
3864 proto_tree_add_item(tree, hf_zbee_zcl_drlc_utility_enrollment_group, tvb,
3865 *offset, 1, ENC_NA);
3866 *offset += 1;
3868 /* Start Time */
3869 proto_tree_add_item(tree, hf_zbee_zcl_drlc_start_time, tvb,
3870 *offset, 4, ENC_LITTLE_ENDIAN);
3871 *offset += 4;
3872 /* Duration In Minutes */
3873 proto_tree_add_item(tree, hf_zbee_zcl_drlc_duration_in_minutes, tvb,
3874 *offset, 2, ENC_LITTLE_ENDIAN);
3875 *offset += 2;
3877 /* Criticality Level */
3878 proto_tree_add_item(tree, hf_zbee_zcl_drlc_criticality_level, tvb,
3879 *offset, 1, ENC_NA);
3880 *offset += 1;
3882 /* Cooling Temperature Offset */
3883 proto_tree_add_item(tree, hf_zbee_zcl_drlc_cooling_temp_offset, tvb,
3884 *offset, 1, ENC_NA);
3885 *offset += 1;
3887 /* Heating Temperature Offset */
3888 proto_tree_add_item(tree, hf_zbee_zcl_drlc_heating_temp_offset, tvb,
3889 *offset, 1, ENC_NA);
3890 *offset += 1;
3892 /* Cooling Temperature Set Point */
3893 proto_tree_add_item(tree, hf_zbee_zcl_drlc_cooling_temp_set_point, tvb,
3894 *offset, 2, ENC_LITTLE_ENDIAN);
3895 *offset += 2;
3897 /* Heating Temperature Set Point */
3898 proto_tree_add_item(tree, hf_zbee_zcl_drlc_heating_temp_set_point, tvb,
3899 *offset, 2, ENC_LITTLE_ENDIAN);
3900 *offset += 2;
3902 /* Average Load Adjustment Percentage */
3903 proto_tree_add_item(tree, hf_zbee_zcl_drlc_average_load_adjustment_percentage, tvb,
3904 *offset, 1, ENC_NA);
3905 *offset += 1;
3907 /* Duty Cycle */
3908 proto_tree_add_item(tree, hf_zbee_zcl_drlc_duty_cycle, tvb,
3909 *offset, 1, ENC_NA);
3910 *offset += 1;
3912 /* Event Control */
3913 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_event_control, ett_zbee_zcl_drlc_event_control,
3914 hf_zbee_zcl_drlc_event_control_flags, ENC_LITTLE_ENDIAN);
3915 *offset += 1;
3917 } /*dissect_zcl_drlc_load_control_event*/
3920 *This function is called by ZCL foundation dissector in order to decode
3921 *DRLC Cancel Load Control Event Command Payload.
3923 *@param tree pointer to data tree Wireshark uses to display packet.
3924 *@param tvb pointer to buffer containing raw packet.
3925 *@param offset pointer to buffer offset
3927 static void
3928 dissect_zcl_drlc_cancel_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3930 /* Issuer Event ID */
3931 proto_tree_add_item(tree, hf_zbee_zcl_drlc_issuer_event_id, tvb,
3932 *offset, 4, ENC_LITTLE_ENDIAN);
3933 *offset += 4;
3935 /* Device Class */
3936 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_device_class, ett_zbee_zcl_drlc_device_class,
3937 zbee_zcl_drlc_control_event_device_classes, ENC_LITTLE_ENDIAN);
3938 *offset += 2;
3940 /* Utility Enrollment Group */
3941 proto_tree_add_item(tree, hf_zbee_zcl_drlc_utility_enrollment_group, tvb,
3942 *offset, 1, ENC_NA);
3943 *offset += 1;
3945 /* Cancel Control */
3946 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_cancel_control, ett_zbee_zcl_drlc_cancel_control,
3947 hf_zbee_zcl_drlc_cancel_control_flags, ENC_LITTLE_ENDIAN);
3948 *offset += 1;
3950 /* Effective Time */
3951 proto_tree_add_item(tree, hf_zbee_zcl_drlc_effective_time, tvb,
3952 *offset, 4, ENC_LITTLE_ENDIAN);
3953 *offset += 4;
3958 *This function is called by ZCL foundation dissector in order to decode
3959 *DRLC Cancel All Load Control Events Command Payload.
3961 *@param tree pointer to data tree Wireshark uses to display packet.
3962 *@param tvb pointer to buffer containing raw packet.
3963 *@param offset pointer to buffer offset
3965 static void
3966 dissect_zcl_drlc_cancel_all_load_control_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3968 /* Cancel Control */
3969 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_cancel_control, ett_zbee_zcl_drlc_cancel_control,
3970 hf_zbee_zcl_drlc_cancel_control_flags, ENC_LITTLE_ENDIAN);
3971 *offset += 1;
3973 } /*dissect_zcl_drlc_cancel_all_load_control_event*/
3976 *This function is called by ZCL foundation dissector in order to decode
3977 *DRLC Report Event Status Command Payload.
3979 *@param tree pointer to data tree Wireshark uses to display packet.
3980 *@param tvb pointer to buffer containing raw packet.
3981 *@param offset pointer to buffer offset
3983 static void
3984 dissect_zcl_drlc_report_event_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
3986 /* Issuer Event ID */
3987 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_issuer_event_id, tvb,
3988 *offset, 4, ENC_LITTLE_ENDIAN);
3989 *offset += 4;
3991 /* Event Status */
3992 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_event_status, tvb, *offset, 1, ENC_NA);
3993 *offset += 1;
3995 /* Event Status Time */
3996 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_event_status_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
3997 *offset += 4;
3999 /* Criticality Level Applied */
4000 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_criticality_level_applied, tvb,
4001 *offset, 1, ENC_NA);
4002 *offset += 1;
4004 /* Cooling Temperature Set Point Applied */
4005 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied, tvb,
4006 *offset, 2, ENC_LITTLE_ENDIAN);
4007 *offset += 2;
4009 /* Heating Temperature Set Point Applied */
4010 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied, tvb,
4011 *offset, 2, ENC_LITTLE_ENDIAN);
4012 *offset += 2;
4014 /* Average Load Adjustment Percentage Applied */
4015 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage, tvb,
4016 *offset, 1, ENC_NA);
4017 *offset += 1;
4019 /* Duty Cycle Applied */
4020 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_duty_cycle, tvb,
4021 *offset, 1, ENC_NA);
4022 *offset += 1;
4024 /* Event Control */
4025 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_report_event_event_control, ett_zbee_zcl_drlc_event_control,
4026 hf_zbee_zcl_drlc_event_control_flags, ENC_LITTLE_ENDIAN);
4027 *offset += 1;
4029 /* Signature Type */
4030 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_signature_type, tvb,
4031 *offset, 1, ENC_NA);
4032 *offset += 1;
4034 /* Signature */
4035 unsigned rem_len;
4036 rem_len = tvb_reported_length_remaining(tvb, *offset);
4037 proto_tree_add_item(tree, hf_zbee_zcl_drlc_report_event_signature, tvb,
4038 *offset, rem_len, ENC_NA);
4039 *offset += rem_len;
4040 } /*dissect_zcl_drlc_report_event_status*/
4043 *This function is called by ZCL foundation dissector in order to decode
4044 *DRLC Get Scheduled Events Command Payload.
4046 *@param tree pointer to data tree Wireshark uses to display packet.
4047 *@param tvb pointer to buffer containing raw packet.
4048 *@param offset pointer to buffer offset
4050 static void
4051 dissect_zcl_drlc_get_scheduled_events(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
4053 int rem_len;
4055 /* Start Time */
4056 proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
4057 *offset += 4;
4059 /* Number of Events */
4060 proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_number_of_events, tvb,
4061 *offset, 1, ENC_NA);
4062 *offset += 1;
4064 rem_len = tvb_reported_length_remaining(tvb, *offset);
4065 if (rem_len > 3) {
4066 /* Issuer Event ID */
4067 proto_tree_add_item(tree, hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id, tvb,
4068 *offset, rem_len, ENC_LITTLE_ENDIAN);
4069 *offset += 4;
4071 } /*dissect_zcl_drlc_report_event_status*/
4074 *ZigBee ZCL DRLC cluster dissector for wireshark.
4076 *@param tvb pointer to buffer containing raw packet.
4077 *@param pinfo pointer to packet information fields
4078 *@param tree pointer to data tree Wireshark uses to display packet.
4080 static int
4081 dissect_zbee_zcl_drlc(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
4083 zbee_zcl_packet *zcl;
4084 unsigned offset = 0;
4085 uint8_t cmd_id;
4086 int rem_len;
4087 proto_tree *payload_tree;
4089 /* Reject the packet if data is NULL */
4090 if (data == NULL)
4091 return 0;
4092 zcl = (zbee_zcl_packet *)data;
4093 cmd_id = zcl->cmd_id;
4095 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
4096 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
4097 /* Append the command name to the info column. */
4098 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
4099 val_to_str_const(cmd_id, zbee_zcl_drlc_srv_rx_cmd_names, "Unknown Command"),
4100 zcl->tran_seqno);
4102 /* Add the command ID. */
4103 proto_tree_add_uint(tree, hf_zbee_zcl_drlc_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
4105 /* Check is this command has a payload, than add the payload tree */
4106 rem_len = tvb_reported_length_remaining(tvb, ++offset);
4107 if (rem_len > 0) {
4108 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_drlc, NULL, "Payload");
4110 /* Call the appropriate command dissector */
4111 switch (cmd_id) {
4113 case ZBEE_ZCL_CMD_ID_DRLC_REPORT_EVENT_STATUS:
4114 dissect_zcl_drlc_report_event_status(tvb, payload_tree, &offset);
4115 break;
4117 case ZBEE_ZCL_CMD_ID_DRLC_GET_SCHEDULED_EVENTS:
4118 dissect_zcl_drlc_get_scheduled_events(tvb, payload_tree, &offset);
4119 break;
4121 default:
4122 break;
4126 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
4127 /* Append the command name to the info column. */
4128 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
4129 val_to_str_const(cmd_id, zbee_zcl_drlc_srv_tx_cmd_names, "Unknown Command"),
4130 zcl->tran_seqno);
4132 /* Add the command ID. */
4133 proto_tree_add_uint(tree, hf_zbee_zcl_drlc_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
4135 /* Check is this command has a payload, than add the payload tree */
4136 rem_len = tvb_reported_length_remaining(tvb, ++offset);
4137 if (rem_len > 0) {
4138 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_drlc, NULL, "Payload");
4140 /* Call the appropriate command dissector */
4141 switch (cmd_id) {
4143 case ZBEE_ZCL_CMD_ID_DRLC_LOAD_CONTROL_EVENT:
4144 dissect_zcl_drlc_load_control_event(tvb, payload_tree, &offset);
4145 break;
4147 case ZBEE_ZCL_CMD_ID_DRLC_CANCEL_LOAD_CONTROL_EVENT:
4148 dissect_zcl_drlc_cancel_load_control_event(tvb, payload_tree, &offset);
4149 break;
4151 case ZBEE_ZCL_CMD_ID_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS:
4152 dissect_zcl_drlc_cancel_all_load_control_event(tvb, payload_tree, &offset);
4153 break;
4155 default:
4156 break;
4161 return tvb_captured_length(tvb);
4162 } /*dissect_zbee_zcl_drlc*/
4165 *This function registers the ZCL DRLC dissector
4168 void
4169 proto_register_zbee_zcl_drlc(void)
4171 static hf_register_info hf[] = {
4173 { &hf_zbee_zcl_drlc_attr_client_id,
4174 { "Attribute", "zbee_zcl_se.drlc.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_drlc_attr_client_names),
4175 0x0, NULL, HFILL } },
4177 { &hf_zbee_zcl_drlc_attr_reporting_status, /* common to all SE clusters */
4178 { "Attribute Reporting Status", "zbee_zcl_se.drlc.attr.attr_reporting_status",
4179 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
4181 { &hf_zbee_zcl_drlc_srv_tx_cmd_id,
4182 { "Command", "zbee_zcl_se.drlc.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_drlc_srv_tx_cmd_names),
4183 0x00, NULL, HFILL } },
4185 { &hf_zbee_zcl_drlc_srv_rx_cmd_id,
4186 { "Command", "zbee_zcl_se.drlc.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_drlc_srv_rx_cmd_names),
4187 0x00, NULL, HFILL } },
4189 { &hf_zbee_zcl_drlc_issuer_event_id,
4190 { "Issuer Event ID", "zbee_zcl_se.drlc.issuer_id",
4191 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4193 { &hf_zbee_zcl_drlc_device_class,
4194 { "Device Class", "zbee_zcl_se.drlc.device_class",
4195 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4197 { &hf_zbee_zcl_drlc_device_class_hvac_compressor_or_furnace,
4198 { "HVAC Compressor or Furnace", "zbee_zcl_se.drlc.device_class.hvac_compressor_or_furnace",
4199 FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } },
4201 { &hf_zbee_zcl_drlc_device_class_strip_heaters_baseboard_heaters,
4202 { "Strip Heaters/Baseboard Heaters", "zbee_zcl_se.drlc.device_class.strip_heaters_baseboard_heaters",
4203 FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
4205 { &hf_zbee_zcl_drlc_device_class_water_heater,
4206 { "Water Heater", "zbee_zcl_se.drlc.device_class.water_heater",
4207 FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
4209 { &hf_zbee_zcl_drlc_device_class_pool_pump_spa_jacuzzi,
4210 { "Pool Pump/Spa/Jacuzzi", "zbee_zcl_se.drlc.device_class.pool_pump_spa_jacuzzi",
4211 FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
4213 { &hf_zbee_zcl_drlc_device_class_smart_appliances,
4214 { "Smart Appliances", "zbee_zcl_se.drlc.device_class.smart_appliances",
4215 FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } },
4217 { &hf_zbee_zcl_drlc_device_class_irrigation_pump,
4218 { "Irrigation Pump", "zbee_zcl_se.drlc.device_class.irrigation_pump",
4219 FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
4221 { &hf_zbee_zcl_drlc_device_class_managed_c_i_loads,
4222 { "Managed Commercial & Industrial (C&I) loads", "zbee_zcl_se.drlc.device_class.managed_c_i_loads",
4223 FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
4225 { &hf_zbee_zcl_drlc_device_class_simple_misc_loads,
4226 { "Simple misc. (Residential On/Off) loads", "zbee_zcl_se.drlc.device_class.simple_misc_loads",
4227 FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
4229 { &hf_zbee_zcl_drlc_device_class_exterior_lighting,
4230 { "Exterior Lighting", "zbee_zcl_se.drlc.device_class.exterior_lighting",
4231 FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
4233 { &hf_zbee_zcl_drlc_device_class_interior_lighting,
4234 { "Interior Lighting", "zbee_zcl_se.drlc.device_class.interior_lighting",
4235 FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
4237 { &hf_zbee_zcl_drlc_device_class_electric_vehicle,
4238 { "Electric Vehicle", "zbee_zcl_se.drlc.device_class.electric_vehicle",
4239 FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
4241 { &hf_zbee_zcl_drlc_device_class_generation_systems,
4242 { "Generation Systems", "zbee_zcl_se.drlc.device_class.generation_systems",
4243 FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
4245 { &hf_zbee_zcl_drlc_device_class_reserved ,
4246 { "Reserved", "zbee_zcl_se.drlc.device_class.reserved",
4247 FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } },
4249 { &hf_zbee_zcl_drlc_utility_enrollment_group,
4250 { "Utility Enrollment Group", "zbee_zcl_se.drlc.utility_enrollment_group",
4251 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4253 { &hf_zbee_zcl_drlc_start_time,
4254 { "Start Time", "zbee_zcl_se.drlc.start_time",
4255 FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_zcl_se_utc_time), 0x0, NULL, HFILL } },
4257 { &hf_zbee_zcl_drlc_duration_in_minutes,
4258 { "Duration In Minutes", "zbee_zcl_se.drlc.duration_in_minutes",
4259 FT_UINT16, BASE_DEC, NULL, 0x0, NULL, HFILL } },
4261 { &hf_zbee_zcl_drlc_criticality_level,
4262 { "Criticality Level", "zbee_zcl_se.drlc.criticality_level",
4263 FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_load_control_event_criticality_level), 0x0, NULL, HFILL } },
4265 { &hf_zbee_zcl_drlc_cooling_temp_offset,
4266 { "Cooling Temperature Offset", "zbee_zcl_se.drlc.cooling_temperature_offset",
4267 FT_UINT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_offset), 0x0, NULL, HFILL } },
4269 { &hf_zbee_zcl_drlc_heating_temp_offset,
4270 { "Heating Temperature Offset", "zbee_zcl_se.drlc.heating_temperature_offset",
4271 FT_UINT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_offset), 0x0, NULL, HFILL } },
4273 { &hf_zbee_zcl_drlc_cooling_temp_set_point,
4274 { "Cooling Temperature Set Point", "zbee_zcl_se.drlc.cooling_temperature_set_point",
4275 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4277 { &hf_zbee_zcl_drlc_heating_temp_set_point,
4278 { "Heating Temperature Set Point", "zbee_zcl_se.drlc.heating_temperature_set_point",
4279 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4281 { &hf_zbee_zcl_drlc_average_load_adjustment_percentage,
4282 { "Average Load Adjustment Percentage", "zbee_zcl_se.drlc.average_load_adjustment_percentage",
4283 FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
4285 { &hf_zbee_zcl_drlc_duty_cycle,
4286 { "Duty Cycle", "zbee_zcl_se.drlc.duty_cycle",
4287 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4289 { &hf_zbee_zcl_drlc_event_control,
4290 { "Event Control", "zbee_zcl_se.drlc.event_control",
4291 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4293 { &hf_zbee_zcl_drlc_event_control_randomize_start_time,
4294 { "Randomize Start time", "zbee_zcl_se.drlc.randomize_start_time",
4295 FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_start_tfs), 0x01, NULL, HFILL } },
4297 { &hf_zbee_zcl_drlc_event_control_randomize_duration_time,
4298 { "Randomize Duration time", "zbee_zcl_se.drlc.randomize_duration_time",
4299 FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_duration_tfs), 0x02, NULL, HFILL } },
4301 { &hf_zbee_zcl_drlc_event_control_reserved,
4302 { "Reserved", "zbee_zcl_se.drlc.reserved",
4303 FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
4305 { &hf_zbee_zcl_drlc_cancel_control,
4306 { "Cancel Control", "zbee_zcl_se.drlc.cancel_control",
4307 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4309 { &hf_zbee_zcl_drlc_cancel_control_event_in_process,
4310 { "Event in process", "zbee_zcl_se.drlc.cancel_control.event_in_process",
4311 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
4313 { &hf_zbee_zcl_drlc_cancel_control_reserved,
4314 { "Reserved", "zbee_zcl_se.drlc.cancel_control.reserved",
4315 FT_UINT8, BASE_HEX, NULL, 0xFE, NULL, HFILL } },
4317 { &hf_zbee_zcl_drlc_effective_time,
4318 { "Reserved", "zbee_zcl_se.drlc.effective_time",
4319 FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_zcl_se_utc_time), 0xFE, NULL, HFILL } },
4321 { &hf_zbee_zcl_drlc_report_event_issuer_event_id,
4322 { "Issuer Event ID", "zbee_zcl_se.drlc.report_event.issuer_id",
4323 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4325 { &hf_zbee_zcl_drlc_report_event_event_status,
4326 { "Event Status", "zbee_zcl_se.drlc.report_event.event_status",
4327 FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_report_event_status_event_status), 0x0, NULL, HFILL } },
4329 { &hf_zbee_zcl_drlc_report_event_event_status_time,
4330 { "Event Status Time", "zbee_zcl_se.drlc.report_event.event_status_time",
4331 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, NULL, HFILL } },
4333 { &hf_zbee_zcl_drlc_report_event_criticality_level_applied ,
4334 { "Criticality Level Applied", "zbee_zcl_se.drlc.report_event.criticality_level_applied",
4335 FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_load_control_event_criticality_level), 0x0, NULL, HFILL } },
4337 { &hf_zbee_zcl_drlc_report_event_cooling_temp_set_point_applied,
4338 { "Cooling Temperature Set Point Applied", "zbee_zcl_se.drlc.report_event.cooling_temperature_set_point_applied",
4339 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4341 { &hf_zbee_zcl_drlc_report_event_heating_temp_set_point_applied,
4342 { "Heating Temperature Set Point Applied", "zbee_zcl_se.drlc.report_event.heating_temperature_set_point_applied",
4343 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
4345 { &hf_zbee_zcl_drlc_report_event_average_load_adjustment_percentage ,
4346 { "Average Load Adjustment Percentage Applied", "zbee_zcl_se.drlc.report_event.average_load_adjustment_percentage_applied",
4347 FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
4349 { &hf_zbee_zcl_drlc_report_event_duty_cycle,
4350 { "Duty Cycle Applied", "zbee_zcl_se.drlc.report_event.duty_cycle_applied",
4351 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4353 { &hf_zbee_zcl_drlc_report_event_event_control ,
4354 { "Event Control", "zbee_zcl_se.drlc.report_event.event_control",
4355 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4357 { &hf_zbee_zcl_drlc_report_event_signature_type,
4358 { "Signature Type", "zbee_zcl_se.drlc.report_event.signature_type",
4359 FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_drlc_report_event_signature_type), 0x0, NULL, HFILL } },
4361 { &hf_zbee_zcl_drlc_report_event_signature,
4362 { "Signature", "zbee_zcl_se.drlc.report_event.signature",
4363 FT_BYTES, BASE_NONE, NULL, 0x0, NULL, HFILL } },
4365 { &hf_zbee_zcl_drlc_get_scheduled_events_start_time,
4366 { "Start Time", "zbee_zcl_se.drlc.get_scheduled_events.start_time",
4367 FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_zcl_se_utc_time), 0x0, NULL, HFILL } },
4369 { &hf_zbee_zcl_drlc_get_scheduled_events_number_of_events,
4370 { "Number of Events", "zbee_zcl_se.drlc.get_scheduled_events.numbers_of_events",
4371 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4373 { &hf_zbee_zcl_drlc_get_scheduled_events_issuer_event_id,
4374 { "Minimum Issuer Event ID", "zbee_zcl_se.drlc.get_scheduled_events.issuer_event_id",
4375 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
4378 /* ZCL DRLC subtrees */
4379 int *ett[] = {
4380 &ett_zbee_zcl_drlc,
4381 &ett_zbee_zcl_drlc_device_class,
4382 &ett_zbee_zcl_drlc_event_control,
4383 &ett_zbee_zcl_drlc_cancel_control
4386 /* Register the ZigBee ZCL DRLC cluster protocol name and description */
4387 proto_zbee_zcl_drlc = proto_register_protocol("ZigBee ZCL DLRC", "ZCL DLRC", ZBEE_PROTOABBREV_ZCL_DRLC);
4388 proto_register_field_array(proto_zbee_zcl_drlc, hf, array_length(hf));
4389 proto_register_subtree_array(ett, array_length(ett));
4391 /* Register the ZigBee ZCL DRLC dissector. */
4392 register_dissector(ZBEE_PROTOABBREV_ZCL_DRLC, dissect_zbee_zcl_drlc, proto_zbee_zcl_drlc);
4393 } /*proto_register_zbee_zcl_drlc*/
4396 *Hands off the ZCL DRLC dissector.
4399 void
4400 proto_reg_handoff_zbee_zcl_drlc(void)
4402 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_DRLC,
4403 proto_zbee_zcl_drlc,
4404 ett_zbee_zcl_drlc,
4405 ZBEE_ZCL_CID_DEMAND_RESPONSE_LOAD_CONTROL,
4406 ZBEE_MFG_CODE_NONE,
4408 hf_zbee_zcl_drlc_attr_client_id,
4409 hf_zbee_zcl_drlc_srv_rx_cmd_id,
4410 hf_zbee_zcl_drlc_srv_tx_cmd_id,
4411 (zbee_zcl_fn_attr_data)dissect_zcl_drlc_attr_data
4413 } /*proto_reg_handoff_zbee_zcl_drlc*/
4415 /* ########################################################################## */
4416 /* #### (0x0702) METERING CLUSTER ########################################## */
4417 /* ########################################################################## */
4419 /* Attributes */
4420 #define zbee_zcl_met_attr_server_names_VALUE_STRING_LIST(XXX) \
4421 /* Reading Information Set */ \
4422 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_SUM_DEL, 0x0000, "Current Summation Delivered" ) \
4423 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_SUM_RECV, 0x0001, "Current Summation Received" ) \
4424 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DE_DEL, 0x0002, "Current Max Demand Delivered" ) \
4425 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DE_RECV, 0x0003, "Current Max Demand Received" ) \
4426 XXX(ZBEE_ZCL_ATTR_ID_MET_DFT_SUM, 0x0004, "DFTSummation" ) \
4427 XXX(ZBEE_ZCL_ATTR_ID_MET_DAILY_FREEZE_TIME, 0x0005, "Daily Freeze Time" ) \
4428 XXX(ZBEE_ZCL_ATTR_ID_MET_POWER_FACTOR, 0x0006, "Power Factor" ) \
4429 XXX(ZBEE_ZCL_ATTR_ID_MET_READ_SNAP_TIME, 0x0007, "Reading Snapshot Time" ) \
4430 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DEMAND_DEL_TIME, 0x0008, "Current Max Demand Delivered Time" ) \
4431 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MAX_DEMAND_RECV_TIME, 0x0009, "Current Max Demand Received Time" ) \
4432 XXX(ZBEE_ZCL_ATTR_ID_MET_DEFAULT_UPDATE_PERIOD, 0x000A, "Default Update Period" ) \
4433 XXX(ZBEE_ZCL_ATTR_ID_MET_FAST_POLL_UPDATE_PERIOD, 0x000B, "Fast Poll Update Period" ) \
4434 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_BLOCK_PER_CON_DEL, 0x000C, "Current Block Period Consumption Delivered" ) \
4435 XXX(ZBEE_ZCL_ATTR_ID_MET_DAILY_CON_TARGET, 0x000D, "Daily Consumption Target" ) \
4436 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_BLOCK, 0x000E, "Current Block" ) \
4437 XXX(ZBEE_ZCL_ATTR_ID_MET_PROFILE_INTERVAL_PERIOD, 0x000F, "Profile Interval Period" ) \
4438 XXX(ZBEE_ZCL_ATTR_ID_MET_DEPRECATED, 0x0010, "Deprecated" ) \
4439 XXX(ZBEE_ZCL_ATTR_ID_MET_PRESET_READING_TIME, 0x0011, "Preset Reading Time" ) \
4440 XXX(ZBEE_ZCL_ATTR_ID_MET_VOLUME_PER_REPORT, 0x0012, "Volume Per Report" ) \
4441 XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_RESTRICTION, 0x0013, "Flow Restriction" ) \
4442 XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_STATUS, 0x0014, "Supply Status" ) \
4443 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_INLET_ENER_CAR_SUM, 0x0015, "Current Inlet Energy Carrier Summation" ) \
4444 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_OUTLET_ENER_CAR_SUM, 0x0016, "Current Outlet Energy Carrier Summation" ) \
4445 XXX(ZBEE_ZCL_ATTR_ID_MET_INLET_TEMPERATURE, 0x0017, "Inlet Temperature" ) \
4446 XXX(ZBEE_ZCL_ATTR_ID_MET_OUTLET_TEMPERATURE, 0x0018, "Outlet Temperature" ) \
4447 XXX(ZBEE_ZCL_ATTR_ID_MET_CONTROL_TEMPERATURE, 0x0019, "Control Temperature" ) \
4448 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_INLET_ENER_CAR_DEM, 0x001A, "Current Inlet Energy Carrier Demand" ) \
4449 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_OUTLET_ENER_CAR_DEM, 0x001B, "Current Outlet Energy Carrier Demand" ) \
4450 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_BLOCK_CON_DEL, 0x001C, "Previous Block Period Consumption Delivered" ) \
4451 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_BLOCL_CON_RECV, 0x001D, "Current Block Period Consumption Received" ) \
4452 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_BLOCK_RECEIVED, 0x001E, "Current Block Received" ) \
4453 XXX(ZBEE_ZCL_ATTR_ID_MET_DFT_SUMMATION_RECEIVED, 0x001F, "DFT Summation Received" ) \
4454 XXX(ZBEE_ZCL_ATTR_ID_MET_ACTIVE_REG_TIER_DEL, 0x0020, "Active Register Tier Delivered" ) \
4455 XXX(ZBEE_ZCL_ATTR_ID_MET_ACTIVE_REG_TIER_RECV, 0x0021, "Active Register Tier Received" ) \
4456 XXX(ZBEE_ZCL_ATTR_ID_MET_LAST_BLOCK_SWITCH_TIME, 0x0022, "Last Block Switch Time" ) \
4457 /* Summation TOU Information Set */ \
4458 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_1_SUM_DEL, 0x0100, "Current Tier 1 Summation Delivered" ) \
4459 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_1_SUM_RECV, 0x0101, "Current Tier 1 Summation Received" ) \
4460 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_2_SUM_DEL, 0x0102, "Current Tier 2 Summation Delivered" ) \
4461 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_2_SUM_RECV, 0x0103, "Current Tier 2 Summation Received" ) \
4462 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_3_SUM_DEL, 0x0104, "Current Tier 3 Summation Delivered" ) \
4463 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_3_SUM_RECV, 0x0105, "Current Tier 3 Summation Received" ) \
4464 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_4_SUM_DEL, 0x0106, "Current Tier 4 Summation Delivered" ) \
4465 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_4_SUM_RECV, 0x0107, "Current Tier 4 Summation Received" ) \
4466 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_5_SUM_DEL, 0x0108, "Current Tier 5 Summation Delivered" ) \
4467 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_5_SUM_RECV, 0x0109, "Current Tier 5 Summation Received" ) \
4468 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_6_SUM_DEL, 0x010A, "Current Tier 6 Summation Delivered" ) \
4469 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_6_SUM_RECV, 0x010B, "Current Tier 6 Summation Received" ) \
4470 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_7_SUM_DEL, 0x010C, "Current Tier 7 Summation Delivered" ) \
4471 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_7_SUM_RECV, 0x010D, "Current Tier 7 Summation Received" ) \
4472 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_8_SUM_DEL, 0x010E, "Current Tier 8 Summation Delivered" ) \
4473 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_8_SUM_RECV, 0x010F, "Current Tier 8 Summation Received" ) \
4474 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_9_SUM_DEL, 0x0110, "Current Tier 9 Summation Delivered" ) \
4475 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_9_SUM_RECV, 0x0111, "Current Tier 9 Summation Received" ) \
4476 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_10_SUM_DEL, 0x0112, "Current Tier 10 Summation Delivered" ) \
4477 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_10_SUM_RECV, 0x0113, "Current Tier 10 Summation Received" ) \
4478 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_11_SUM_DEL, 0x0114, "Current Tier 11 Summation Delivered" ) \
4479 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_11_SUM_RECV, 0x0115, "Current Tier 11 Summation Received" ) \
4480 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_12_SUM_DEL, 0x0116, "Current Tier 12 Summation Delivered" ) \
4481 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_12_SUM_RECV, 0x0117, "Current Tier 12 Summation Received" ) \
4482 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_13_SUM_DEL, 0x0118, "Current Tier 13 Summation Delivered" ) \
4483 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_13_SUM_RECV, 0x0119, "Current Tier 13 Summation Received" ) \
4484 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_14_SUM_DEL, 0x011A, "Current Tier 14 Summation Delivered" ) \
4485 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_14_SUM_RECV, 0x011B, "Current Tier 14 Summation Received" ) \
4486 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_15_SUM_DEL, 0x011C, "Current Tier 15 Summation Delivered" ) \
4487 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_15_SUM_RECV, 0x011D, "Current Tier 15 Summation Received" ) \
4488 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_16_SUM_DEL, 0x011E, "Current Tier 16 Summation Delivered" ) \
4489 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_16_SUM_RECV, 0x011F, "Current Tier 16 Summation Received" ) \
4490 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_17_SUM_DEL, 0x0120, "Current Tier 17 Summation Delivered" ) \
4491 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_17_SUM_RECV, 0x0121, "Current Tier 17 Summation Received" ) \
4492 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_18_SUM_DEL, 0x0122, "Current Tier 18 Summation Delivered" ) \
4493 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_18_SUM_RECV, 0x0123, "Current Tier 18 Summation Received" ) \
4494 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_19_SUM_DEL, 0x0124, "Current Tier 19 Summation Delivered" ) \
4495 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_19_SUM_RECV, 0x0125, "Current Tier 19 Summation Received" ) \
4496 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_20_SUM_DEL, 0x0126, "Current Tier 20 Summation Delivered" ) \
4497 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_20_SUM_RECV, 0x0127, "Current Tier 20 Summation Received" ) \
4498 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_21_SUM_DEL, 0x0128, "Current Tier 21 Summation Delivered" ) \
4499 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_21_SUM_RECV, 0x0129, "Current Tier 21 Summation Received" ) \
4500 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_22_SUM_DEL, 0x012A, "Current Tier 22 Summation Delivered" ) \
4501 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_22_SUM_RECV, 0x012B, "Current Tier 22 Summation Received" ) \
4502 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_23_SUM_DEL, 0x012C, "Current Tier 23 Summation Delivered" ) \
4503 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_23_SUM_RECV, 0x012D, "Current Tier 23 Summation Received" ) \
4504 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_24_SUM_DEL, 0x012E, "Current Tier 24 Summation Delivered" ) \
4505 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_24_SUM_RECV, 0x012F, "Current Tier 24 Summation Received" ) \
4506 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_25_SUM_DEL, 0x0130, "Current Tier 25 Summation Delivered" ) \
4507 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_25_SUM_RECV, 0x0131, "Current Tier 25 Summation Received" ) \
4508 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_26_SUM_DEL, 0x0132, "Current Tier 26 Summation Delivered" ) \
4509 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_26_SUM_RECV, 0x0133, "Current Tier 26 Summation Received" ) \
4510 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_27_SUM_DEL, 0x0134, "Current Tier 27 Summation Delivered" ) \
4511 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_27_SUM_RECV, 0x0135, "Current Tier 27 Summation Received" ) \
4512 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_28_SUM_DEL, 0x0136, "Current Tier 28 Summation Delivered" ) \
4513 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_28_SUM_RECV, 0x0137, "Current Tier 28 Summation Received" ) \
4514 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_29_SUM_DEL, 0x0138, "Current Tier 29 Summation Delivered" ) \
4515 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_29_SUM_RECV, 0x0139, "Current Tier 29 Summation Received" ) \
4516 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_30_SUM_DEL, 0x013A, "Current Tier 30 Summation Delivered" ) \
4517 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_30_SUM_RECV, 0x013B, "Current Tier 30 Summation Received" ) \
4518 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_31_SUM_DEL, 0x013C, "Current Tier 31 Summation Delivered" ) \
4519 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_31_SUM_RECV, 0x013D, "Current Tier 31 Summation Received" ) \
4520 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_32_SUM_DEL, 0x013E, "Current Tier 32 Summation Delivered" ) \
4521 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_32_SUM_RECV, 0x013F, "Current Tier 32 Summation Received" ) \
4522 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_33_SUM_DEL, 0x0140, "Current Tier 33 Summation Delivered" ) \
4523 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_33_SUM_RECV, 0x0141, "Current Tier 33 Summation Received" ) \
4524 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_34_SUM_DEL, 0x0142, "Current Tier 34 Summation Delivered" ) \
4525 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_34_SUM_RECV, 0x0143, "Current Tier 34 Summation Received" ) \
4526 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_35_SUM_DEL, 0x0144, "Current Tier 35 Summation Delivered" ) \
4527 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_35_SUM_RECV, 0x0145, "Current Tier 35 Summation Received" ) \
4528 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_36_SUM_DEL, 0x0146, "Current Tier 36 Summation Delivered" ) \
4529 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_36_SUM_RECV, 0x0147, "Current Tier 36 Summation Received" ) \
4530 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_37_SUM_DEL, 0x0148, "Current Tier 37 Summation Delivered" ) \
4531 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_37_SUM_RECV, 0x0149, "Current Tier 37 Summation Received" ) \
4532 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_38_SUM_DEL, 0x014A, "Current Tier 38 Summation Delivered" ) \
4533 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_38_SUM_RECV, 0x014B, "Current Tier 38 Summation Received" ) \
4534 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_39_SUM_DEL, 0x014C, "Current Tier 39 Summation Delivered" ) \
4535 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_39_SUM_RECV, 0x014D, "Current Tier 39 Summation Received" ) \
4536 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_40_SUM_DEL, 0x014E, "Current Tier 40 Summation Delivered" ) \
4537 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_40_SUM_RECV, 0x014F, "Current Tier 40 Summation Received" ) \
4538 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_41_SUM_DEL, 0x0150, "Current Tier 41 Summation Delivered" ) \
4539 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_41_SUM_RECV, 0x0151, "Current Tier 41 Summation Received" ) \
4540 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_42_SUM_DEL, 0x0152, "Current Tier 42 Summation Delivered" ) \
4541 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_42_SUM_RECV, 0x0153, "Current Tier 42 Summation Received" ) \
4542 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_43_SUM_DEL, 0x0154, "Current Tier 43 Summation Delivered" ) \
4543 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_43_SUM_RECV, 0x0155, "Current Tier 43 Summation Received" ) \
4544 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_44_SUM_DEL, 0x0156, "Current Tier 44 Summation Delivered" ) \
4545 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_44_SUM_RECV, 0x0157, "Current Tier 44 Summation Received" ) \
4546 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_45_SUM_DEL, 0x0158, "Current Tier 45 Summation Delivered" ) \
4547 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_45_SUM_RECV, 0x0159, "Current Tier 45 Summation Received" ) \
4548 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_46_SUM_DEL, 0x015A, "Current Tier 46 Summation Delivered" ) \
4549 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_46_SUM_RECV, 0x015B, "Current Tier 46 Summation Received" ) \
4550 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_47_SUM_DEL, 0x015C, "Current Tier 47 Summation Delivered" ) \
4551 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_47_SUM_RECV, 0x015D, "Current Tier 47 Summation Received" ) \
4552 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_48_SUM_DEL, 0x015E, "Current Tier 48 Summation Delivered" ) \
4553 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_TIER_48_SUM_RECV, 0x015F, "Current Tier 48 Summation Received" ) \
4554 XXX(ZBEE_ZCL_ATTR_ID_MET_CPP1_SUMMATION_DELIVERED, 0x01FC, "CPP1 Summation Delivered" ) \
4555 XXX(ZBEE_ZCL_ATTR_ID_MET_CPP2_SUMMATION_DELIVERED, 0x01FE, "CPP2 Summation Delivered" ) \
4556 /* Meter Status Attribute Set */ \
4557 XXX(ZBEE_ZCL_ATTR_ID_MET_STATUS, 0x0200, "Status" ) \
4558 XXX(ZBEE_ZCL_ATTR_ID_MET_REMAIN_BAT_LIFE, 0x0201, "Remaining Battery Life" ) \
4559 XXX(ZBEE_ZCL_ATTR_ID_MET_HOURS_IN_OPERATION, 0x0202, "Hours in Operation" ) \
4560 XXX(ZBEE_ZCL_ATTR_ID_MET_HOURS_IN_FAULT, 0x0203, "Hours in Fault" ) \
4561 XXX(ZBEE_ZCL_ATTR_ID_MET_EXTENDED_STATUS, 0x0204, "Extended Status" ) \
4562 XXX(ZBEE_ZCL_ATTR_ID_MET_REMAIN_BAT_LIFE_DAYS, 0x0205, "Remaining Battery Life in Days" ) \
4563 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_METER_ID, 0x0206, "Current Meter ID" ) \
4564 XXX(ZBEE_ZCL_ATTR_ID_MET_AMBIENT_CON_IND, 0x0207, "Ambient Consumption Indicator" ) \
4565 /* Formatting */ \
4566 XXX(ZBEE_ZCL_ATTR_ID_MET_UNIT_OF_MEASURE, 0x0300, "Unit of Measure" ) \
4567 XXX(ZBEE_ZCL_ATTR_ID_MET_MULTIPLIER, 0x0301, "Multiplier" ) \
4568 XXX(ZBEE_ZCL_ATTR_ID_MET_DIVISOR, 0x0302, "Divisor" ) \
4569 XXX(ZBEE_ZCL_ATTR_ID_MET_SUMMATION_FORMATTING, 0x0303, "Summation Formatting" ) \
4570 XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_FORMATTING, 0x0304, "Demand Formatting" ) \
4571 XXX(ZBEE_ZCL_ATTR_ID_MET_HISTORICAL_CON_FORMATTING, 0x0305, "Historical Consumption Formatting" ) \
4572 XXX(ZBEE_ZCL_ATTR_ID_MET_METERING_DEVICE_TYPE, 0x0306, "Metering Device Type" ) \
4573 XXX(ZBEE_ZCL_ATTR_ID_MET_SITE_ID, 0x0307, "Site ID" ) \
4574 XXX(ZBEE_ZCL_ATTR_ID_MET_METER_SERIAL_NUMBER, 0x0308, "Meter Serial Number" ) \
4575 XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_UNIT_OF_MEASURE, 0x0309, "Energy Carrier Unit of Measure" ) \
4576 XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_SUMMATION_FORMAT, 0x030A, "Energy Carrier Summation Formatting" ) \
4577 XXX(ZBEE_ZCL_ATTR_ID_MET_ENERGY_CARRIER_DEMAND_FORMAT, 0x030B, "Energy Carrier Demand Formatting" ) \
4578 XXX(ZBEE_ZCL_ATTR_ID_MET_TEMPERATURE_UNIT_OF_MEASURE, 0x030C, "Temperature Unit of Measure" ) \
4579 XXX(ZBEE_ZCL_ATTR_ID_MET_TEMPERATURE_FORMATTING, 0x030D, "Temperature Formatting" ) \
4580 XXX(ZBEE_ZCL_ATTR_ID_MET_MODULE_SERIAL_NUMBER, 0x030E, "Module Serial Number" ) \
4581 XXX(ZBEE_ZCL_ATTR_ID_MET_OPERATING_TARIFF_LABEL_DELIVERED, 0x030F, "Operating Tariff Label Delivered" ) \
4582 XXX(ZBEE_ZCL_ATTR_ID_MET_OPERATING_TARIFF_LABEL_RECEIVED, 0x0310, "Operating Tariff Label Received" ) \
4583 XXX(ZBEE_ZCL_ATTR_ID_MET_CUSTOMER_ID_NUMBER, 0x0311, "Customer ID Number" ) \
4584 XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_UNIT_OF_MEASURE, 0x0312, "Alternative Unit of Measure" ) \
4585 XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_DEMAND_FORMATTING, 0x0313, "Alternative Demand Formatting" ) \
4586 XXX(ZBEE_ZCL_ATTR_ID_MET_ALT_CON_FORMATTING, 0x0314, "Alternative Consumption Formatting" ) \
4587 /* Historical Consumption Attribute */ \
4588 XXX(ZBEE_ZCL_ATTR_ID_MET_INSTANT_DEMAND, 0x0400, "Instantaneous Demand" ) \
4589 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_CON_DEL, 0x0401, "Current Day Consumption Delivered" ) \
4590 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_CON_RECV, 0x0402, "Current Day Consumption Received" ) \
4591 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_CON_DEL, 0x0403, "Previous Day Consumption Delivered" ) \
4592 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_CON_RECV, 0x0404, "Previous Day Consumption Received" ) \
4593 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_START_DEL, 0x0405, "Current Partial Profile Interval Start Time Delivered" ) \
4594 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_START_RECV, 0x0406, "Current Partial Profile Interval Start Time Received" ) \
4595 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_VALUE_DEL, 0x0407, "Current Partial Profile Interval Value Delivered" ) \
4596 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_PAR_PROF_INT_VALUE_RECV, 0x0408, "Current Partial Profile Interval Value Received" ) \
4597 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_PRESSURE, 0x0409, "Current Day Max Pressure" ) \
4598 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MIN_PRESSURE, 0x040A, "Current Day Min Pressure" ) \
4599 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_PRESSURE, 0x040B, "Previous Day Max Pressure" ) \
4600 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MIN_PRESSURE, 0x040C, "Previous Day Min Pressure" ) \
4601 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_DEMAND, 0x040D, "Current Day Max Demand" ) \
4602 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_DEMAND, 0x040E, "Previous Day Max Demand" ) \
4603 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MAX_DEMAND, 0x040F, "Current Month Max Demand" ) \
4604 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MAX_DEMAND, 0x0410, "Current Year Max Demand" ) \
4605 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_MAX_ENERGY_CARR_DEM, 0x0411, "Current Day Max Energy Carrier Demand" ) \
4606 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_MAX_ENERGY_CARR_DEM, 0x0412, "Previous Day Max Energy Carrier Demand" ) \
4607 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MAX_ENERGY_CARR_DEM, 0x0413, "Current Month Max Energy Carrier Demand" ) \
4608 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_MIN_ENERGY_CARR_DEM, 0x0414, "Current Month Min Energy Carrier Demand" ) \
4609 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MAX_ENERGY_CARR_DEM, 0x0415, "Current Year Max Energy Carrier Demand" ) \
4610 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_MIN_ENERGY_CARR_DEM, 0x0416, "Current Year Min Energy Carrier Demand" ) \
4611 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_2_DAY_CON_DEL, 0x0420, "Previous Day 2 Consumption Delivered" ) \
4612 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_2_DAY_CON_RECV, 0x0421, "Previous Day 2 Consumption Received" ) \
4613 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_3_DAY_CON_DEL, 0x0422, "Previous Day 3 Consumption Delivered" ) \
4614 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_3_DAY_CON_RECV, 0x0423, "Previous Day 3 Consumption Received" ) \
4615 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_4_DAY_CON_DEL, 0x0424, "Previous Day 4 Consumption Delivered" ) \
4616 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_4_DAY_CON_RECV, 0x0425, "Previous Day 4 Consumption Received" ) \
4617 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_5_DAY_CON_DEL, 0x0426, "Previous Day 5 Consumption Delivered" ) \
4618 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_5_DAY_CON_RECV, 0x0427, "Previous Day 5 Consumption Received" ) \
4619 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_6_DAY_CON_DEL, 0x0428, "Previous Day 6 Consumption Delivered" ) \
4620 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_6_DAY_CON_RECV, 0x0429, "Previous Day 6 Consumption Received" ) \
4621 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_7_DAY_CON_DEL, 0x042A, "Previous Day 7 Consumption Delivered" ) \
4622 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_7_DAY_CON_RECV, 0x042B, "Previous Day 7 Consumption Received" ) \
4623 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_8_DAY_CON_DEL, 0x042C, "Previous Day 8 Consumption Delivered" ) \
4624 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_8_DAY_CON_RECV, 0x042D, "Previous Day 8 Consumption Received" ) \
4625 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_CON_DEL, 0x0430, "Current Week Consumption Delivered" ) \
4626 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_CON_RECV, 0x0431, "Current Week Consumption Received" ) \
4627 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_CON_DEL, 0x0432, "Previous Week Consumption Delivered" ) \
4628 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_CON_RECV, 0x0433, "Previous Week Consumption Received" ) \
4629 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_CON_DEL, 0x0434, "Previous Week 2 Consumption Delivered" ) \
4630 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_CON_RECV, 0x0435, "Previous Week 2 Consumption Received" ) \
4631 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_CON_DEL, 0x0436, "Previous Week 3 Consumption Delivered" ) \
4632 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_CON_RECV, 0x0437, "Previous Week 3 Consumption Received" ) \
4633 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_CON_DEL, 0x0438, "Previous Week 4 Consumption Delivered" ) \
4634 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_CON_RECV, 0x0439, "Previous Week 4 Consumption Received" ) \
4635 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_CON_DEL, 0x043A, "Previous Week 5 Consumption Delivered" ) \
4636 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_CON_RECV, 0x043B, "Previous Week 5 Consumption Received" ) \
4637 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_CON_DEL, 0x0440, "Current Month Consumption Delivered" ) \
4638 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_CON_RECV, 0x0441, "Current Month Consumption Received" ) \
4639 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_CON_DEL, 0x0442, "Previous Month Consumption Delivered" ) \
4640 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_CON_RECV, 0x0443, "Previous Month Consumption Received" ) \
4641 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_CON_DEL, 0x0444, "Previous Month 2 Consumption Delivered" ) \
4642 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_CON_RECV, 0x0445, "Previous Month 2 Consumption Received" ) \
4643 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_CON_DEL, 0x0446, "Previous Month 3 Consumption Delivered" ) \
4644 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_CON_RECV, 0x0447, "Previous Month 3 Consumption Received" ) \
4645 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_CON_DEL, 0x0448, "Previous Month 4 Consumption Delivered" ) \
4646 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_CON_RECV, 0x0449, "Previous Month 4 Consumption Received" ) \
4647 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_CON_DEL, 0x044A, "Previous Month 5 Consumption Delivered" ) \
4648 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_CON_RECV, 0x044B, "Previous Month 5 Consumption Received" ) \
4649 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_CON_DEL, 0x044C, "Previous Month 6 Consumption Delivered" ) \
4650 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_CON_RECV, 0x044D, "Previous Month 6 Consumption Received" ) \
4651 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_CON_DEL, 0x044E, "Previous Month 7 Consumption Delivered" ) \
4652 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_CON_RECV, 0x044F, "Previous Month 7 Consumption Received" ) \
4653 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_CON_DEL, 0x0450, "Previous Month 8 Consumption Delivered" ) \
4654 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_CON_RECV, 0x0451, "Previous Month 8 Consumption Received" ) \
4655 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_CON_DEL, 0x0452, "Previous Month 9 Consumption Delivered" ) \
4656 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_CON_RECV, 0x0453, "Previous Month 9 Consumption Received" ) \
4657 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_CON_DEL, 0x0454, "Previous Month 10 Consumption Delivered" ) \
4658 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_CON_RECV, 0x0455, "Previous Month 10 Consumption Received" ) \
4659 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_CON_DEL, 0x0456, "Previous Month 11 Consumption Delivered" ) \
4660 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_CON_RECV, 0x0457, "Previous Month 11 Consumption Received" ) \
4661 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_CON_DEL, 0x0458, "Previous Month 12 Consumption Delivered" ) \
4662 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_CON_RECV, 0x0459, "Previous Month 12 Consumption Received" ) \
4663 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_CON_DEL, 0x045A, "Previous Month 13 Consumption Delivered" ) \
4664 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_CON_RECV, 0x045B, "Previous Month 13 Consumption Received" ) \
4665 XXX(ZBEE_ZCL_ATTR_ID_MET_HISTORICAL_FREEZE_TIME, 0x045C, "Historical Freeze Time" ) \
4666 /* Load Profile Configuration */ \
4667 XXX(ZBEE_ZCL_ATTR_ID_MET_MAX_NUMBER_OF_PERIODS_DELIVERED, 0x0500, "Max Number of Periods Delivered" ) \
4668 /* Supply Limit Attributes */ \
4669 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DEMAND_DELIVERED, 0x0600, "Current Demand Delivered" ) \
4670 XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_LIMIT, 0x0601, "Demand Limit" ) \
4671 XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_INTEGRATION_PERIOD, 0x0602, "Demand Integration Period" ) \
4672 XXX(ZBEE_ZCL_ATTR_ID_MET_NUMBER_OF_DEMAND_SUBINTERVALS, 0x0603, "Number of Demand Subintervals" ) \
4673 XXX(ZBEE_ZCL_ATTR_ID_MET_DEMAND_LIMIT_ARM_DURATION, 0x0604, "Demand Limit Arm Duration" ) \
4674 XXX(ZBEE_ZCL_ATTR_ID_MET_LOAD_LIMIT_SUPPLY_STATE, 0x0605, "Load Limit Supply State" ) \
4675 XXX(ZBEE_ZCL_ATTR_ID_MET_LOAD_LIMIT_COUNTER, 0x0606, "Load Limit Counter" ) \
4676 XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_TAMPER_STATE, 0x0607, "Supply Tamper State" ) \
4677 XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_DEPLETION_STATE, 0x0608, "Supply Depletion State" ) \
4678 XXX(ZBEE_ZCL_ATTR_ID_MET_SUPPLY_UNCONTROLLED_FLOW_STATE, 0x0609, "Supply Uncontrolled Flow State" ) \
4679 /* Block Information Attribute Set (Delivered) */ \
4680 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_1_SUM_DEL, 0x0700, "Current No Tier Block 1 Summation Delivered" ) \
4681 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_2_SUM_DEL, 0x0701, "Current No Tier Block 2 Summation Delivered" ) \
4682 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_3_SUM_DEL, 0x0702, "Current No Tier Block 3 Summation Delivered" ) \
4683 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_4_SUM_DEL, 0x0703, "Current No Tier Block 4 Summation Delivered" ) \
4684 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_5_SUM_DEL, 0x0704, "Current No Tier Block 5 Summation Delivered" ) \
4685 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_6_SUM_DEL, 0x0705, "Current No Tier Block 6 Summation Delivered" ) \
4686 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_7_SUM_DEL, 0x0706, "Current No Tier Block 7 Summation Delivered" ) \
4687 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_8_SUM_DEL, 0x0707, "Current No Tier Block 8 Summation Delivered" ) \
4688 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_9_SUM_DEL, 0x0708, "Current No Tier Block 9 Summation Delivered" ) \
4689 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_10_SUM_DEL, 0x0709, "Current No Tier Block 10 Summation Delivered" ) \
4690 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_11_SUM_DEL, 0x070A, "Current No Tier Block 11 Summation Delivered" ) \
4691 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_12_SUM_DEL, 0x070B, "Current No Tier Block 12 Summation Delivered" ) \
4692 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_13_SUM_DEL, 0x070C, "Current No Tier Block 13 Summation Delivered" ) \
4693 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_14_SUM_DEL, 0x070D, "Current No Tier Block 14 Summation Delivered" ) \
4694 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_15_SUM_DEL, 0x070E, "Current No Tier Block 15 Summation Delivered" ) \
4695 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_16_SUM_DEL, 0x070F, "Current No Tier Block 16 Summation Delivered" ) \
4696 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_1_SUM_DEL, 0x0710, "Current Tier 1 Block 1 Summation Delivered" ) \
4697 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_2_SUM_DEL, 0x0711, "Current Tier 1 Block 2 Summation Delivered" ) \
4698 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_3_SUM_DEL, 0x0712, "Current Tier 1 Block 3 Summation Delivered" ) \
4699 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_4_SUM_DEL, 0x0713, "Current Tier 1 Block 4 Summation Delivered" ) \
4700 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_5_SUM_DEL, 0x0714, "Current Tier 1 Block 5 Summation Delivered" ) \
4701 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_6_SUM_DEL, 0x0715, "Current Tier 1 Block 6 Summation Delivered" ) \
4702 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_7_SUM_DEL, 0x0716, "Current Tier 1 Block 7 Summation Delivered" ) \
4703 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_8_SUM_DEL, 0x0717, "Current Tier 1 Block 8 Summation Delivered" ) \
4704 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_9_SUM_DEL, 0x0718, "Current Tier 1 Block 9 Summation Delivered" ) \
4705 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_10_SUM_DEL, 0x0719, "Current Tier 1 Block 10 Summation Delivered" ) \
4706 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_11_SUM_DEL, 0x071A, "Current Tier 1 Block 11 Summation Delivered" ) \
4707 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_12_SUM_DEL, 0x071B, "Current Tier 1 Block 12 Summation Delivered" ) \
4708 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_13_SUM_DEL, 0x071C, "Current Tier 1 Block 13 Summation Delivered" ) \
4709 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_14_SUM_DEL, 0x071D, "Current Tier 1 Block 14 Summation Delivered" ) \
4710 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_15_SUM_DEL, 0x071E, "Current Tier 1 Block 15 Summation Delivered" ) \
4711 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_16_SUM_DEL, 0x071F, "Current Tier 1 Block 16 Summation Delivered" ) \
4712 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_1_SUM_DEL, 0x0720, "Current Tier 2 Block 1 Summation Delivered" ) \
4713 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_2_SUM_DEL, 0x0721, "Current Tier 2 Block 2 Summation Delivered" ) \
4714 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_3_SUM_DEL, 0x0722, "Current Tier 2 Block 3 Summation Delivered" ) \
4715 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_4_SUM_DEL, 0x0723, "Current Tier 2 Block 4 Summation Delivered" ) \
4716 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_5_SUM_DEL, 0x0724, "Current Tier 2 Block 5 Summation Delivered" ) \
4717 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_6_SUM_DEL, 0x0725, "Current Tier 2 Block 6 Summation Delivered" ) \
4718 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_7_SUM_DEL, 0x0726, "Current Tier 2 Block 7 Summation Delivered" ) \
4719 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_8_SUM_DEL, 0x0727, "Current Tier 2 Block 8 Summation Delivered" ) \
4720 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_9_SUM_DEL, 0x0728, "Current Tier 2 Block 9 Summation Delivered" ) \
4721 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_10_SUM_DEL, 0x0729, "Current Tier 2 Block 10 Summation Delivered" ) \
4722 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_11_SUM_DEL, 0x072A, "Current Tier 2 Block 11 Summation Delivered" ) \
4723 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_12_SUM_DEL, 0x072B, "Current Tier 2 Block 12 Summation Delivered" ) \
4724 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_13_SUM_DEL, 0x072C, "Current Tier 2 Block 13 Summation Delivered" ) \
4725 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_14_SUM_DEL, 0x072D, "Current Tier 2 Block 14 Summation Delivered" ) \
4726 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_15_SUM_DEL, 0x072E, "Current Tier 2 Block 15 Summation Delivered" ) \
4727 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_16_SUM_DEL, 0x072F, "Current Tier 2 Block 16 Summation Delivered" ) \
4728 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_1_SUM_DEL, 0x0730, "Current Tier 3 Block 1 Summation Delivered" ) \
4729 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_2_SUM_DEL, 0x0731, "Current Tier 3 Block 2 Summation Delivered" ) \
4730 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_3_SUM_DEL, 0x0732, "Current Tier 3 Block 3 Summation Delivered" ) \
4731 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_4_SUM_DEL, 0x0733, "Current Tier 3 Block 4 Summation Delivered" ) \
4732 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_5_SUM_DEL, 0x0734, "Current Tier 3 Block 5 Summation Delivered" ) \
4733 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_6_SUM_DEL, 0x0735, "Current Tier 3 Block 6 Summation Delivered" ) \
4734 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_7_SUM_DEL, 0x0736, "Current Tier 3 Block 7 Summation Delivered" ) \
4735 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_8_SUM_DEL, 0x0737, "Current Tier 3 Block 8 Summation Delivered" ) \
4736 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_9_SUM_DEL, 0x0738, "Current Tier 3 Block 9 Summation Delivered" ) \
4737 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_10_SUM_DEL, 0x0739, "Current Tier 3 Block 10 Summation Delivered" ) \
4738 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_11_SUM_DEL, 0x073A, "Current Tier 3 Block 11 Summation Delivered" ) \
4739 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_12_SUM_DEL, 0x073B, "Current Tier 3 Block 12 Summation Delivered" ) \
4740 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_13_SUM_DEL, 0x073C, "Current Tier 3 Block 13 Summation Delivered" ) \
4741 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_14_SUM_DEL, 0x073D, "Current Tier 3 Block 14 Summation Delivered" ) \
4742 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_15_SUM_DEL, 0x073E, "Current Tier 3 Block 15 Summation Delivered" ) \
4743 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_16_SUM_DEL, 0x073F, "Current Tier 3 Block 16 Summation Delivered" ) \
4744 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_1_SUM_DEL, 0x0740, "Current Tier 4 Block 1 Summation Delivered" ) \
4745 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_2_SUM_DEL, 0x0741, "Current Tier 4 Block 2 Summation Delivered" ) \
4746 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_3_SUM_DEL, 0x0742, "Current Tier 4 Block 3 Summation Delivered" ) \
4747 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_4_SUM_DEL, 0x0743, "Current Tier 4 Block 4 Summation Delivered" ) \
4748 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_5_SUM_DEL, 0x0744, "Current Tier 4 Block 5 Summation Delivered" ) \
4749 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_6_SUM_DEL, 0x0745, "Current Tier 4 Block 6 Summation Delivered" ) \
4750 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_7_SUM_DEL, 0x0746, "Current Tier 4 Block 7 Summation Delivered" ) \
4751 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_8_SUM_DEL, 0x0747, "Current Tier 4 Block 8 Summation Delivered" ) \
4752 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_9_SUM_DEL, 0x0748, "Current Tier 4 Block 9 Summation Delivered" ) \
4753 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_10_SUM_DEL, 0x0749, "Current Tier 4 Block 10 Summation Delivered" ) \
4754 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_11_SUM_DEL, 0x074A, "Current Tier 4 Block 11 Summation Delivered" ) \
4755 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_12_SUM_DEL, 0x074B, "Current Tier 4 Block 12 Summation Delivered" ) \
4756 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_13_SUM_DEL, 0x074C, "Current Tier 4 Block 13 Summation Delivered" ) \
4757 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_14_SUM_DEL, 0x074D, "Current Tier 4 Block 14 Summation Delivered" ) \
4758 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_15_SUM_DEL, 0x074E, "Current Tier 4 Block 15 Summation Delivered" ) \
4759 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_16_SUM_DEL, 0x074F, "Current Tier 4 Block 16 Summation Delivered" ) \
4760 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_1_SUM_DEL, 0x0750, "Current Tier 5 Block 1 Summation Delivered" ) \
4761 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_2_SUM_DEL, 0x0751, "Current Tier 5 Block 2 Summation Delivered" ) \
4762 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_3_SUM_DEL, 0x0752, "Current Tier 5 Block 3 Summation Delivered" ) \
4763 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_4_SUM_DEL, 0x0753, "Current Tier 5 Block 4 Summation Delivered" ) \
4764 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_5_SUM_DEL, 0x0754, "Current Tier 5 Block 5 Summation Delivered" ) \
4765 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_6_SUM_DEL, 0x0755, "Current Tier 5 Block 6 Summation Delivered" ) \
4766 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_7_SUM_DEL, 0x0756, "Current Tier 5 Block 7 Summation Delivered" ) \
4767 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_8_SUM_DEL, 0x0757, "Current Tier 5 Block 8 Summation Delivered" ) \
4768 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_9_SUM_DEL, 0x0758, "Current Tier 5 Block 9 Summation Delivered" ) \
4769 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_10_SUM_DEL, 0x0759, "Current Tier 5 Block 10 Summation Delivered" ) \
4770 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_11_SUM_DEL, 0x075A, "Current Tier 5 Block 11 Summation Delivered" ) \
4771 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_12_SUM_DEL, 0x075B, "Current Tier 5 Block 12 Summation Delivered" ) \
4772 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_13_SUM_DEL, 0x075C, "Current Tier 5 Block 13 Summation Delivered" ) \
4773 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_14_SUM_DEL, 0x075D, "Current Tier 5 Block 14 Summation Delivered" ) \
4774 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_15_SUM_DEL, 0x075E, "Current Tier 5 Block 15 Summation Delivered" ) \
4775 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_16_SUM_DEL, 0x075F, "Current Tier 5 Block 16 Summation Delivered" ) \
4776 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_1_SUM_DEL, 0x0760, "Current Tier 6 Block 1 Summation Delivered" ) \
4777 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_2_SUM_DEL, 0x0761, "Current Tier 6 Block 2 Summation Delivered" ) \
4778 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_3_SUM_DEL, 0x0762, "Current Tier 6 Block 3 Summation Delivered" ) \
4779 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_4_SUM_DEL, 0x0763, "Current Tier 6 Block 4 Summation Delivered" ) \
4780 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_5_SUM_DEL, 0x0764, "Current Tier 6 Block 5 Summation Delivered" ) \
4781 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_6_SUM_DEL, 0x0765, "Current Tier 6 Block 6 Summation Delivered" ) \
4782 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_7_SUM_DEL, 0x0766, "Current Tier 6 Block 7 Summation Delivered" ) \
4783 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_8_SUM_DEL, 0x0767, "Current Tier 6 Block 8 Summation Delivered" ) \
4784 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_9_SUM_DEL, 0x0768, "Current Tier 6 Block 9 Summation Delivered" ) \
4785 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_10_SUM_DEL, 0x0769, "Current Tier 6 Block 10 Summation Delivered" ) \
4786 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_11_SUM_DEL, 0x076A, "Current Tier 6 Block 11 Summation Delivered" ) \
4787 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_12_SUM_DEL, 0x076B, "Current Tier 6 Block 12 Summation Delivered" ) \
4788 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_13_SUM_DEL, 0x076C, "Current Tier 6 Block 13 Summation Delivered" ) \
4789 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_14_SUM_DEL, 0x076D, "Current Tier 6 Block 14 Summation Delivered" ) \
4790 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_15_SUM_DEL, 0x076E, "Current Tier 6 Block 15 Summation Delivered" ) \
4791 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_16_SUM_DEL, 0x076F, "Current Tier 6 Block 16 Summation Delivered" ) \
4792 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_1_SUM_DEL, 0x0770, "Current Tier 7 Block 1 Summation Delivered" ) \
4793 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_2_SUM_DEL, 0x0771, "Current Tier 7 Block 2 Summation Delivered" ) \
4794 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_3_SUM_DEL, 0x0772, "Current Tier 7 Block 3 Summation Delivered" ) \
4795 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_4_SUM_DEL, 0x0773, "Current Tier 7 Block 4 Summation Delivered" ) \
4796 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_5_SUM_DEL, 0x0774, "Current Tier 7 Block 5 Summation Delivered" ) \
4797 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_6_SUM_DEL, 0x0775, "Current Tier 7 Block 6 Summation Delivered" ) \
4798 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_7_SUM_DEL, 0x0776, "Current Tier 7 Block 7 Summation Delivered" ) \
4799 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_8_SUM_DEL, 0x0777, "Current Tier 7 Block 8 Summation Delivered" ) \
4800 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_9_SUM_DEL, 0x0778, "Current Tier 7 Block 9 Summation Delivered" ) \
4801 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_10_SUM_DEL, 0x0779, "Current Tier 7 Block 10 Summation Delivered" ) \
4802 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_11_SUM_DEL, 0x077A, "Current Tier 7 Block 11 Summation Delivered" ) \
4803 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_12_SUM_DEL, 0x077B, "Current Tier 7 Block 12 Summation Delivered" ) \
4804 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_13_SUM_DEL, 0x077C, "Current Tier 7 Block 13 Summation Delivered" ) \
4805 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_14_SUM_DEL, 0x077D, "Current Tier 7 Block 14 Summation Delivered" ) \
4806 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_15_SUM_DEL, 0x077E, "Current Tier 7 Block 15 Summation Delivered" ) \
4807 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_16_SUM_DEL, 0x077F, "Current Tier 7 Block 16 Summation Delivered" ) \
4808 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_1_SUM_DEL, 0x0780, "Current Tier 8 Block 1 Summation Delivered" ) \
4809 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_2_SUM_DEL, 0x0781, "Current Tier 8 Block 2 Summation Delivered" ) \
4810 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_3_SUM_DEL, 0x0782, "Current Tier 8 Block 3 Summation Delivered" ) \
4811 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_4_SUM_DEL, 0x0783, "Current Tier 8 Block 4 Summation Delivered" ) \
4812 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_5_SUM_DEL, 0x0784, "Current Tier 8 Block 5 Summation Delivered" ) \
4813 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_6_SUM_DEL, 0x0785, "Current Tier 8 Block 6 Summation Delivered" ) \
4814 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_7_SUM_DEL, 0x0786, "Current Tier 8 Block 7 Summation Delivered" ) \
4815 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_8_SUM_DEL, 0x0787, "Current Tier 8 Block 8 Summation Delivered" ) \
4816 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_9_SUM_DEL, 0x0788, "Current Tier 8 Block 9 Summation Delivered" ) \
4817 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_10_SUM_DEL, 0x0789, "Current Tier 8 Block 10 Summation Delivered" ) \
4818 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_11_SUM_DEL, 0x078A, "Current Tier 8 Block 11 Summation Delivered" ) \
4819 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_12_SUM_DEL, 0x078B, "Current Tier 8 Block 12 Summation Delivered" ) \
4820 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_13_SUM_DEL, 0x078C, "Current Tier 8 Block 13 Summation Delivered" ) \
4821 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_14_SUM_DEL, 0x078D, "Current Tier 8 Block 14 Summation Delivered" ) \
4822 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_15_SUM_DEL, 0x078E, "Current Tier 8 Block 15 Summation Delivered" ) \
4823 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_16_SUM_DEL, 0x078F, "Current Tier 8 Block 16 Summation Delivered" ) \
4824 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_1_SUM_DEL, 0x0790, "Current Tier 9 Block 1 Summation Delivered" ) \
4825 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_2_SUM_DEL, 0x0791, "Current Tier 9 Block 2 Summation Delivered" ) \
4826 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_3_SUM_DEL, 0x0792, "Current Tier 9 Block 3 Summation Delivered" ) \
4827 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_4_SUM_DEL, 0x0793, "Current Tier 9 Block 4 Summation Delivered" ) \
4828 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_5_SUM_DEL, 0x0794, "Current Tier 9 Block 5 Summation Delivered" ) \
4829 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_6_SUM_DEL, 0x0795, "Current Tier 9 Block 6 Summation Delivered" ) \
4830 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_7_SUM_DEL, 0x0796, "Current Tier 9 Block 7 Summation Delivered" ) \
4831 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_8_SUM_DEL, 0x0797, "Current Tier 9 Block 8 Summation Delivered" ) \
4832 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_9_SUM_DEL, 0x0798, "Current Tier 9 Block 9 Summation Delivered" ) \
4833 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_10_SUM_DEL, 0x0799, "Current Tier 9 Block 10 Summation Delivered" ) \
4834 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_11_SUM_DEL, 0x079A, "Current Tier 9 Block 11 Summation Delivered" ) \
4835 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_12_SUM_DEL, 0x079B, "Current Tier 9 Block 12 Summation Delivered" ) \
4836 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_13_SUM_DEL, 0x079C, "Current Tier 9 Block 13 Summation Delivered" ) \
4837 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_14_SUM_DEL, 0x079D, "Current Tier 9 Block 14 Summation Delivered" ) \
4838 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_15_SUM_DEL, 0x079E, "Current Tier 9 Block 15 Summation Delivered" ) \
4839 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_16_SUM_DEL, 0x079F, "Current Tier 9 Block 16 Summation Delivered" ) \
4840 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_1_SUM_DEL, 0x07A0, "Current Tier 10 Block 1 Summation Delivered" ) \
4841 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_2_SUM_DEL, 0x07A1, "Current Tier 10 Block 2 Summation Delivered" ) \
4842 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_3_SUM_DEL, 0x07A2, "Current Tier 10 Block 3 Summation Delivered" ) \
4843 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_4_SUM_DEL, 0x07A3, "Current Tier 10 Block 4 Summation Delivered" ) \
4844 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_5_SUM_DEL, 0x07A4, "Current Tier 10 Block 5 Summation Delivered" ) \
4845 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_6_SUM_DEL, 0x07A5, "Current Tier 10 Block 6 Summation Delivered" ) \
4846 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_7_SUM_DEL, 0x07A6, "Current Tier 10 Block 7 Summation Delivered" ) \
4847 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_8_SUM_DEL, 0x07A7, "Current Tier 10 Block 8 Summation Delivered" ) \
4848 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_9_SUM_DEL, 0x07A8, "Current Tier 10 Block 9 Summation Delivered" ) \
4849 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_10_SUM_DEL, 0x07A9, "Current Tier 10 Block 10 Summation Delivered" ) \
4850 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_11_SUM_DEL, 0x07AA, "Current Tier 10 Block 11 Summation Delivered" ) \
4851 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_12_SUM_DEL, 0x07AB, "Current Tier 10 Block 12 Summation Delivered" ) \
4852 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_13_SUM_DEL, 0x07AC, "Current Tier 10 Block 13 Summation Delivered" ) \
4853 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_14_SUM_DEL, 0x07AD, "Current Tier 10 Block 14 Summation Delivered" ) \
4854 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_15_SUM_DEL, 0x07AE, "Current Tier 10 Block 15 Summation Delivered" ) \
4855 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_16_SUM_DEL, 0x07AF, "Current Tier 10 Block 16 Summation Delivered" ) \
4856 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_1_SUM_DEL, 0x07B0, "Current Tier 11 Block 1 Summation Delivered" ) \
4857 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_2_SUM_DEL, 0x07B1, "Current Tier 11 Block 2 Summation Delivered" ) \
4858 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_3_SUM_DEL, 0x07B2, "Current Tier 11 Block 3 Summation Delivered" ) \
4859 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_4_SUM_DEL, 0x07B3, "Current Tier 11 Block 4 Summation Delivered" ) \
4860 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_5_SUM_DEL, 0x07B4, "Current Tier 11 Block 5 Summation Delivered" ) \
4861 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_6_SUM_DEL, 0x07B5, "Current Tier 11 Block 6 Summation Delivered" ) \
4862 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_7_SUM_DEL, 0x07B6, "Current Tier 11 Block 7 Summation Delivered" ) \
4863 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_8_SUM_DEL, 0x07B7, "Current Tier 11 Block 8 Summation Delivered" ) \
4864 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_9_SUM_DEL, 0x07B8, "Current Tier 11 Block 9 Summation Delivered" ) \
4865 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_10_SUM_DEL, 0x07B9, "Current Tier 11 Block 10 Summation Delivered" ) \
4866 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_11_SUM_DEL, 0x07BA, "Current Tier 11 Block 11 Summation Delivered" ) \
4867 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_12_SUM_DEL, 0x07BB, "Current Tier 11 Block 12 Summation Delivered" ) \
4868 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_13_SUM_DEL, 0x07BC, "Current Tier 11 Block 13 Summation Delivered" ) \
4869 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_14_SUM_DEL, 0x07BD, "Current Tier 11 Block 14 Summation Delivered" ) \
4870 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_15_SUM_DEL, 0x07BE, "Current Tier 11 Block 15 Summation Delivered" ) \
4871 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_16_SUM_DEL, 0x07BF, "Current Tier 11 Block 16 Summation Delivered" ) \
4872 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_1_SUM_DEL, 0x07C0, "Current Tier 12 Block 1 Summation Delivered" ) \
4873 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_2_SUM_DEL, 0x07C1, "Current Tier 12 Block 2 Summation Delivered" ) \
4874 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_3_SUM_DEL, 0x07C2, "Current Tier 12 Block 3 Summation Delivered" ) \
4875 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_4_SUM_DEL, 0x07C3, "Current Tier 12 Block 4 Summation Delivered" ) \
4876 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_5_SUM_DEL, 0x07C4, "Current Tier 12 Block 5 Summation Delivered" ) \
4877 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_6_SUM_DEL, 0x07C5, "Current Tier 12 Block 6 Summation Delivered" ) \
4878 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_7_SUM_DEL, 0x07C6, "Current Tier 12 Block 7 Summation Delivered" ) \
4879 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_8_SUM_DEL, 0x07C7, "Current Tier 12 Block 8 Summation Delivered" ) \
4880 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_9_SUM_DEL, 0x07C8, "Current Tier 12 Block 9 Summation Delivered" ) \
4881 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_10_SUM_DEL, 0x07C9, "Current Tier 12 Block 10 Summation Delivered" ) \
4882 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_11_SUM_DEL, 0x07CA, "Current Tier 12 Block 11 Summation Delivered" ) \
4883 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_12_SUM_DEL, 0x07CB, "Current Tier 12 Block 12 Summation Delivered" ) \
4884 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_13_SUM_DEL, 0x07CC, "Current Tier 12 Block 13 Summation Delivered" ) \
4885 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_14_SUM_DEL, 0x07CD, "Current Tier 12 Block 14 Summation Delivered" ) \
4886 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_15_SUM_DEL, 0x07CE, "Current Tier 12 Block 15 Summation Delivered" ) \
4887 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_16_SUM_DEL, 0x07CF, "Current Tier 12 Block 16 Summation Delivered" ) \
4888 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_1_SUM_DEL, 0x07D0, "Current Tier 13 Block 1 Summation Delivered" ) \
4889 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_2_SUM_DEL, 0x07D1, "Current Tier 13 Block 2 Summation Delivered" ) \
4890 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_3_SUM_DEL, 0x07D2, "Current Tier 13 Block 3 Summation Delivered" ) \
4891 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_4_SUM_DEL, 0x07D3, "Current Tier 13 Block 4 Summation Delivered" ) \
4892 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_5_SUM_DEL, 0x07D4, "Current Tier 13 Block 5 Summation Delivered" ) \
4893 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_6_SUM_DEL, 0x07D5, "Current Tier 13 Block 6 Summation Delivered" ) \
4894 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_7_SUM_DEL, 0x07D6, "Current Tier 13 Block 7 Summation Delivered" ) \
4895 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_8_SUM_DEL, 0x07D7, "Current Tier 13 Block 8 Summation Delivered" ) \
4896 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_9_SUM_DEL, 0x07D8, "Current Tier 13 Block 9 Summation Delivered" ) \
4897 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_10_SUM_DEL, 0x07D9, "Current Tier 13 Block 10 Summation Delivered" ) \
4898 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_11_SUM_DEL, 0x07DA, "Current Tier 13 Block 11 Summation Delivered" ) \
4899 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_12_SUM_DEL, 0x07DB, "Current Tier 13 Block 12 Summation Delivered" ) \
4900 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_13_SUM_DEL, 0x07DC, "Current Tier 13 Block 13 Summation Delivered" ) \
4901 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_14_SUM_DEL, 0x07DD, "Current Tier 13 Block 14 Summation Delivered" ) \
4902 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_15_SUM_DEL, 0x07DE, "Current Tier 13 Block 15 Summation Delivered" ) \
4903 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_16_SUM_DEL, 0x07DF, "Current Tier 13 Block 16 Summation Delivered" ) \
4904 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_1_SUM_DEL, 0x07E0, "Current Tier 14 Block 1 Summation Delivered" ) \
4905 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_2_SUM_DEL, 0x07E1, "Current Tier 14 Block 2 Summation Delivered" ) \
4906 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_3_SUM_DEL, 0x07E2, "Current Tier 14 Block 3 Summation Delivered" ) \
4907 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_4_SUM_DEL, 0x07E3, "Current Tier 14 Block 4 Summation Delivered" ) \
4908 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_5_SUM_DEL, 0x07E4, "Current Tier 14 Block 5 Summation Delivered" ) \
4909 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_6_SUM_DEL, 0x07E5, "Current Tier 14 Block 6 Summation Delivered" ) \
4910 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_7_SUM_DEL, 0x07E6, "Current Tier 14 Block 7 Summation Delivered" ) \
4911 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_8_SUM_DEL, 0x07E7, "Current Tier 14 Block 8 Summation Delivered" ) \
4912 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_9_SUM_DEL, 0x07E8, "Current Tier 14 Block 9 Summation Delivered" ) \
4913 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_10_SUM_DEL, 0x07E9, "Current Tier 14 Block 10 Summation Delivered" ) \
4914 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_11_SUM_DEL, 0x07EA, "Current Tier 14 Block 11 Summation Delivered" ) \
4915 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_12_SUM_DEL, 0x07EB, "Current Tier 14 Block 12 Summation Delivered" ) \
4916 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_13_SUM_DEL, 0x07EC, "Current Tier 14 Block 13 Summation Delivered" ) \
4917 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_14_SUM_DEL, 0x07ED, "Current Tier 14 Block 14 Summation Delivered" ) \
4918 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_15_SUM_DEL, 0x07EE, "Current Tier 14 Block 15 Summation Delivered" ) \
4919 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_16_SUM_DEL, 0x07EF, "Current Tier 14 Block 16 Summation Delivered" ) \
4920 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_1_SUM_DEL, 0x07F0, "Current Tier 15 Block 1 Summation Delivered" ) \
4921 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_2_SUM_DEL, 0x07F1, "Current Tier 15 Block 2 Summation Delivered" ) \
4922 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_3_SUM_DEL, 0x07F2, "Current Tier 15 Block 3 Summation Delivered" ) \
4923 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_4_SUM_DEL, 0x07F3, "Current Tier 15 Block 4 Summation Delivered" ) \
4924 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_5_SUM_DEL, 0x07F4, "Current Tier 15 Block 5 Summation Delivered" ) \
4925 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_6_SUM_DEL, 0x07F5, "Current Tier 15 Block 6 Summation Delivered" ) \
4926 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_7_SUM_DEL, 0x07F6, "Current Tier 15 Block 7 Summation Delivered" ) \
4927 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_8_SUM_DEL, 0x07F7, "Current Tier 15 Block 8 Summation Delivered" ) \
4928 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_9_SUM_DEL, 0x07F8, "Current Tier 15 Block 9 Summation Delivered" ) \
4929 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_10_SUM_DEL, 0x07F9, "Current Tier 15 Block 10 Summation Delivered" ) \
4930 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_11_SUM_DEL, 0x07FA, "Current Tier 15 Block 11 Summation Delivered" ) \
4931 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_12_SUM_DEL, 0x07FB, "Current Tier 15 Block 12 Summation Delivered" ) \
4932 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_13_SUM_DEL, 0x07FC, "Current Tier 15 Block 13 Summation Delivered" ) \
4933 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_14_SUM_DEL, 0x07FD, "Current Tier 15 Block 14 Summation Delivered" ) \
4934 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_15_SUM_DEL, 0x07FE, "Current Tier 15 Block 15 Summation Delivered" ) \
4935 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_16_SUM_DEL, 0x07FF, "Current Tier 15 Block 16 Summation Delivered" ) \
4936 /* Alarms Set */ \
4937 XXX(ZBEE_ZCL_ATTR_ID_MET_GENERIC_ALARM_MASK, 0x0800, "Generic Alarm Mask" ) \
4938 XXX(ZBEE_ZCL_ATTR_ID_MET_ELECTRICITY_ALARM_MASK, 0x0801, "Electricity Alarm Mask" ) \
4939 XXX(ZBEE_ZCL_ATTR_ID_MET_GENERIC_FLOW_PRESS_ALARM_MASK, 0x0802, "Generic Flow/Pressure Alarm Mask" ) \
4940 XXX(ZBEE_ZCL_ATTR_ID_MET_WATER_SPECIFIC_ALARM_MASK, 0x0803, "Water Specific Alarm Mask" ) \
4941 XXX(ZBEE_ZCL_ATTR_ID_MET_HEAT_COOLING_SPECIFIC_ALARM_MASK, 0x0804, "Heat and Cooling Specific Alarm Mask" ) \
4942 XXX(ZBEE_ZCL_ATTR_ID_MET_GAS_SPECIFIC_ALARM_MASK, 0x0805, "Gas Specific Alarm Mask" ) \
4943 XXX(ZBEE_ZCL_ATTR_ID_MET_EXTENDED_GENERIC_ALARM_MASK, 0x0806, "Extended Generic Alarm Mask" ) \
4944 XXX(ZBEE_ZCL_ATTR_ID_MET_MANUFACTURER_ALARM_MASK, 0x0807, "Manufacturer Alarm Mask" ) \
4945 /* Block Information Attribute Set (Received) */ \
4946 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_1_SUM_RECV, 0x0900, "Current No Tier Block 1 Summation Received" ) \
4947 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_2_SUM_RECV, 0x0901, "Current No Tier Block 2 Summation Received" ) \
4948 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_3_SUM_RECV, 0x0902, "Current No Tier Block 3 Summation Received" ) \
4949 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_4_SUM_RECV, 0x0903, "Current No Tier Block 4 Summation Received" ) \
4950 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_5_SUM_RECV, 0x0904, "Current No Tier Block 5 Summation Received" ) \
4951 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_6_SUM_RECV, 0x0905, "Current No Tier Block 6 Summation Received" ) \
4952 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_7_SUM_RECV, 0x0906, "Current No Tier Block 7 Summation Received" ) \
4953 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_8_SUM_RECV, 0x0907, "Current No Tier Block 8 Summation Received" ) \
4954 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_9_SUM_RECV, 0x0908, "Current No Tier Block 9 Summation Received" ) \
4955 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_10_SUM_RECV, 0x0909, "Current No Tier Block 10 Summation Received" ) \
4956 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_11_SUM_RECV, 0x090A, "Current No Tier Block 11 Summation Received" ) \
4957 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_12_SUM_RECV, 0x090B, "Current No Tier Block 12 Summation Received" ) \
4958 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_13_SUM_RECV, 0x090C, "Current No Tier Block 13 Summation Received" ) \
4959 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_14_SUM_RECV, 0x090D, "Current No Tier Block 14 Summation Received" ) \
4960 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_15_SUM_RECV, 0x090E, "Current No Tier Block 15 Summation Received" ) \
4961 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_NO_TIER_BLOCK_16_SUM_RECV, 0x090F, "Current No Tier Block 16 Summation Received" ) \
4962 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_1_SUM_RECV, 0x0910, "Current Tier 1 Block 1 Summation Received" ) \
4963 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_2_SUM_RECV, 0x0911, "Current Tier 1 Block 2 Summation Received" ) \
4964 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_3_SUM_RECV, 0x0912, "Current Tier 1 Block 3 Summation Received" ) \
4965 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_4_SUM_RECV, 0x0913, "Current Tier 1 Block 4 Summation Received" ) \
4966 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_5_SUM_RECV, 0x0914, "Current Tier 1 Block 5 Summation Received" ) \
4967 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_6_SUM_RECV, 0x0915, "Current Tier 1 Block 6 Summation Received" ) \
4968 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_7_SUM_RECV, 0x0916, "Current Tier 1 Block 7 Summation Received" ) \
4969 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_8_SUM_RECV, 0x0917, "Current Tier 1 Block 8 Summation Received" ) \
4970 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_9_SUM_RECV, 0x0918, "Current Tier 1 Block 9 Summation Received" ) \
4971 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_10_SUM_RECV, 0x0919, "Current Tier 1 Block 10 Summation Received" ) \
4972 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_11_SUM_RECV, 0x091A, "Current Tier 1 Block 11 Summation Received" ) \
4973 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_12_SUM_RECV, 0x091B, "Current Tier 1 Block 12 Summation Received" ) \
4974 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_13_SUM_RECV, 0x091C, "Current Tier 1 Block 13 Summation Received" ) \
4975 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_14_SUM_RECV, 0x091D, "Current Tier 1 Block 14 Summation Received" ) \
4976 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_15_SUM_RECV, 0x091E, "Current Tier 1 Block 15 Summation Received" ) \
4977 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_1_BLOCK_16_SUM_RECV, 0x091F, "Current Tier 1 Block 16 Summation Received" ) \
4978 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_1_SUM_RECV, 0x0920, "Current Tier 2 Block 1 Summation Received" ) \
4979 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_2_SUM_RECV, 0x0921, "Current Tier 2 Block 2 Summation Received" ) \
4980 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_3_SUM_RECV, 0x0922, "Current Tier 2 Block 3 Summation Received" ) \
4981 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_4_SUM_RECV, 0x0923, "Current Tier 2 Block 4 Summation Received" ) \
4982 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_5_SUM_RECV, 0x0924, "Current Tier 2 Block 5 Summation Received" ) \
4983 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_6_SUM_RECV, 0x0925, "Current Tier 2 Block 6 Summation Received" ) \
4984 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_7_SUM_RECV, 0x0926, "Current Tier 2 Block 7 Summation Received" ) \
4985 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_8_SUM_RECV, 0x0927, "Current Tier 2 Block 8 Summation Received" ) \
4986 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_9_SUM_RECV, 0x0928, "Current Tier 2 Block 9 Summation Received" ) \
4987 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_10_SUM_RECV, 0x0929, "Current Tier 2 Block 10 Summation Received" ) \
4988 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_11_SUM_RECV, 0x092A, "Current Tier 2 Block 11 Summation Received" ) \
4989 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_12_SUM_RECV, 0x092B, "Current Tier 2 Block 12 Summation Received" ) \
4990 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_13_SUM_RECV, 0x092C, "Current Tier 2 Block 13 Summation Received" ) \
4991 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_14_SUM_RECV, 0x092D, "Current Tier 2 Block 14 Summation Received" ) \
4992 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_15_SUM_RECV, 0x092E, "Current Tier 2 Block 15 Summation Received" ) \
4993 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_2_BLOCK_16_SUM_RECV, 0x092F, "Current Tier 2 Block 16 Summation Received" ) \
4994 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_1_SUM_RECV, 0x0930, "Current Tier 3 Block 1 Summation Received" ) \
4995 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_2_SUM_RECV, 0x0931, "Current Tier 3 Block 2 Summation Received" ) \
4996 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_3_SUM_RECV, 0x0932, "Current Tier 3 Block 3 Summation Received" ) \
4997 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_4_SUM_RECV, 0x0933, "Current Tier 3 Block 4 Summation Received" ) \
4998 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_5_SUM_RECV, 0x0934, "Current Tier 3 Block 5 Summation Received" ) \
4999 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_6_SUM_RECV, 0x0935, "Current Tier 3 Block 6 Summation Received" ) \
5000 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_7_SUM_RECV, 0x0936, "Current Tier 3 Block 7 Summation Received" ) \
5001 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_8_SUM_RECV, 0x0937, "Current Tier 3 Block 8 Summation Received" ) \
5002 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_9_SUM_RECV, 0x0938, "Current Tier 3 Block 9 Summation Received" ) \
5003 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_10_SUM_RECV, 0x0939, "Current Tier 3 Block 10 Summation Received" ) \
5004 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_11_SUM_RECV, 0x093A, "Current Tier 3 Block 11 Summation Received" ) \
5005 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_12_SUM_RECV, 0x093B, "Current Tier 3 Block 12 Summation Received" ) \
5006 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_13_SUM_RECV, 0x093C, "Current Tier 3 Block 13 Summation Received" ) \
5007 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_14_SUM_RECV, 0x093D, "Current Tier 3 Block 14 Summation Received" ) \
5008 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_15_SUM_RECV, 0x093E, "Current Tier 3 Block 15 Summation Received" ) \
5009 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_3_BLOCK_16_SUM_RECV, 0x093F, "Current Tier 3 Block 16 Summation Received" ) \
5010 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_1_SUM_RECV, 0x0940, "Current Tier 4 Block 1 Summation Received" ) \
5011 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_2_SUM_RECV, 0x0941, "Current Tier 4 Block 2 Summation Received" ) \
5012 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_3_SUM_RECV, 0x0942, "Current Tier 4 Block 3 Summation Received" ) \
5013 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_4_SUM_RECV, 0x0943, "Current Tier 4 Block 4 Summation Received" ) \
5014 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_5_SUM_RECV, 0x0944, "Current Tier 4 Block 5 Summation Received" ) \
5015 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_6_SUM_RECV, 0x0945, "Current Tier 4 Block 6 Summation Received" ) \
5016 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_7_SUM_RECV, 0x0946, "Current Tier 4 Block 7 Summation Received" ) \
5017 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_8_SUM_RECV, 0x0947, "Current Tier 4 Block 8 Summation Received" ) \
5018 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_9_SUM_RECV, 0x0948, "Current Tier 4 Block 9 Summation Received" ) \
5019 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_10_SUM_RECV, 0x0949, "Current Tier 4 Block 10 Summation Received" ) \
5020 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_11_SUM_RECV, 0x094A, "Current Tier 4 Block 11 Summation Received" ) \
5021 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_12_SUM_RECV, 0x094B, "Current Tier 4 Block 12 Summation Received" ) \
5022 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_13_SUM_RECV, 0x094C, "Current Tier 4 Block 13 Summation Received" ) \
5023 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_14_SUM_RECV, 0x094D, "Current Tier 4 Block 14 Summation Received" ) \
5024 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_15_SUM_RECV, 0x094E, "Current Tier 4 Block 15 Summation Received" ) \
5025 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_4_BLOCK_16_SUM_RECV, 0x094F, "Current Tier 4 Block 16 Summation Received" ) \
5026 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_1_SUM_RECV, 0x0950, "Current Tier 5 Block 1 Summation Received" ) \
5027 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_2_SUM_RECV, 0x0951, "Current Tier 5 Block 2 Summation Received" ) \
5028 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_3_SUM_RECV, 0x0952, "Current Tier 5 Block 3 Summation Received" ) \
5029 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_4_SUM_RECV, 0x0953, "Current Tier 5 Block 4 Summation Received" ) \
5030 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_5_SUM_RECV, 0x0954, "Current Tier 5 Block 5 Summation Received" ) \
5031 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_6_SUM_RECV, 0x0955, "Current Tier 5 Block 6 Summation Received" ) \
5032 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_7_SUM_RECV, 0x0956, "Current Tier 5 Block 7 Summation Received" ) \
5033 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_8_SUM_RECV, 0x0957, "Current Tier 5 Block 8 Summation Received" ) \
5034 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_9_SUM_RECV, 0x0958, "Current Tier 5 Block 9 Summation Received" ) \
5035 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_10_SUM_RECV, 0x0959, "Current Tier 5 Block 10 Summation Received" ) \
5036 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_11_SUM_RECV, 0x095A, "Current Tier 5 Block 11 Summation Received" ) \
5037 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_12_SUM_RECV, 0x095B, "Current Tier 5 Block 12 Summation Received" ) \
5038 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_13_SUM_RECV, 0x095C, "Current Tier 5 Block 13 Summation Received" ) \
5039 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_14_SUM_RECV, 0x095D, "Current Tier 5 Block 14 Summation Received" ) \
5040 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_15_SUM_RECV, 0x095E, "Current Tier 5 Block 15 Summation Received" ) \
5041 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_5_BLOCK_16_SUM_RECV, 0x095F, "Current Tier 5 Block 16 Summation Received" ) \
5042 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_1_SUM_RECV, 0x0960, "Current Tier 6 Block 1 Summation Received" ) \
5043 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_2_SUM_RECV, 0x0961, "Current Tier 6 Block 2 Summation Received" ) \
5044 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_3_SUM_RECV, 0x0962, "Current Tier 6 Block 3 Summation Received" ) \
5045 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_4_SUM_RECV, 0x0963, "Current Tier 6 Block 4 Summation Received" ) \
5046 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_5_SUM_RECV, 0x0964, "Current Tier 6 Block 5 Summation Received" ) \
5047 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_6_SUM_RECV, 0x0965, "Current Tier 6 Block 6 Summation Received" ) \
5048 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_7_SUM_RECV, 0x0966, "Current Tier 6 Block 7 Summation Received" ) \
5049 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_8_SUM_RECV, 0x0967, "Current Tier 6 Block 8 Summation Received" ) \
5050 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_9_SUM_RECV, 0x0968, "Current Tier 6 Block 9 Summation Received" ) \
5051 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_10_SUM_RECV, 0x0969, "Current Tier 6 Block 10 Summation Received" ) \
5052 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_11_SUM_RECV, 0x096A, "Current Tier 6 Block 11 Summation Received" ) \
5053 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_12_SUM_RECV, 0x096B, "Current Tier 6 Block 12 Summation Received" ) \
5054 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_13_SUM_RECV, 0x096C, "Current Tier 6 Block 13 Summation Received" ) \
5055 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_14_SUM_RECV, 0x096D, "Current Tier 6 Block 14 Summation Received" ) \
5056 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_15_SUM_RECV, 0x096E, "Current Tier 6 Block 15 Summation Received" ) \
5057 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_6_BLOCK_16_SUM_RECV, 0x096F, "Current Tier 6 Block 16 Summation Received" ) \
5058 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_1_SUM_RECV, 0x0970, "Current Tier 7 Block 1 Summation Received" ) \
5059 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_2_SUM_RECV, 0x0971, "Current Tier 7 Block 2 Summation Received" ) \
5060 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_3_SUM_RECV, 0x0972, "Current Tier 7 Block 3 Summation Received" ) \
5061 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_4_SUM_RECV, 0x0973, "Current Tier 7 Block 4 Summation Received" ) \
5062 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_5_SUM_RECV, 0x0974, "Current Tier 7 Block 5 Summation Received" ) \
5063 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_6_SUM_RECV, 0x0975, "Current Tier 7 Block 6 Summation Received" ) \
5064 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_7_SUM_RECV, 0x0976, "Current Tier 7 Block 7 Summation Received" ) \
5065 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_8_SUM_RECV, 0x0977, "Current Tier 7 Block 8 Summation Received" ) \
5066 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_9_SUM_RECV, 0x0978, "Current Tier 7 Block 9 Summation Received" ) \
5067 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_10_SUM_RECV, 0x0979, "Current Tier 7 Block 10 Summation Received" ) \
5068 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_11_SUM_RECV, 0x097A, "Current Tier 7 Block 11 Summation Received" ) \
5069 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_12_SUM_RECV, 0x097B, "Current Tier 7 Block 12 Summation Received" ) \
5070 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_13_SUM_RECV, 0x097C, "Current Tier 7 Block 13 Summation Received" ) \
5071 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_14_SUM_RECV, 0x097D, "Current Tier 7 Block 14 Summation Received" ) \
5072 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_15_SUM_RECV, 0x097E, "Current Tier 7 Block 15 Summation Received" ) \
5073 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_7_BLOCK_16_SUM_RECV, 0x097F, "Current Tier 7 Block 16 Summation Received" ) \
5074 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_1_SUM_RECV, 0x0980, "Current Tier 8 Block 1 Summation Received" ) \
5075 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_2_SUM_RECV, 0x0981, "Current Tier 8 Block 2 Summation Received" ) \
5076 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_3_SUM_RECV, 0x0982, "Current Tier 8 Block 3 Summation Received" ) \
5077 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_4_SUM_RECV, 0x0983, "Current Tier 8 Block 4 Summation Received" ) \
5078 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_5_SUM_RECV, 0x0984, "Current Tier 8 Block 5 Summation Received" ) \
5079 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_6_SUM_RECV, 0x0985, "Current Tier 8 Block 6 Summation Received" ) \
5080 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_7_SUM_RECV, 0x0986, "Current Tier 8 Block 7 Summation Received" ) \
5081 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_8_SUM_RECV, 0x0987, "Current Tier 8 Block 8 Summation Received" ) \
5082 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_9_SUM_RECV, 0x0988, "Current Tier 8 Block 9 Summation Received" ) \
5083 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_10_SUM_RECV, 0x0989, "Current Tier 8 Block 10 Summation Received" ) \
5084 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_11_SUM_RECV, 0x098A, "Current Tier 8 Block 11 Summation Received" ) \
5085 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_12_SUM_RECV, 0x098B, "Current Tier 8 Block 12 Summation Received" ) \
5086 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_13_SUM_RECV, 0x098C, "Current Tier 8 Block 13 Summation Received" ) \
5087 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_14_SUM_RECV, 0x098D, "Current Tier 8 Block 14 Summation Received" ) \
5088 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_15_SUM_RECV, 0x098E, "Current Tier 8 Block 15 Summation Received" ) \
5089 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_8_BLOCK_16_SUM_RECV, 0x098F, "Current Tier 8 Block 16 Summation Received" ) \
5090 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_1_SUM_RECV, 0x0990, "Current Tier 9 Block 1 Summation Received" ) \
5091 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_2_SUM_RECV, 0x0991, "Current Tier 9 Block 2 Summation Received" ) \
5092 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_3_SUM_RECV, 0x0992, "Current Tier 9 Block 3 Summation Received" ) \
5093 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_4_SUM_RECV, 0x0993, "Current Tier 9 Block 4 Summation Received" ) \
5094 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_5_SUM_RECV, 0x0994, "Current Tier 9 Block 5 Summation Received" ) \
5095 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_6_SUM_RECV, 0x0995, "Current Tier 9 Block 6 Summation Received" ) \
5096 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_7_SUM_RECV, 0x0996, "Current Tier 9 Block 7 Summation Received" ) \
5097 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_8_SUM_RECV, 0x0997, "Current Tier 9 Block 8 Summation Received" ) \
5098 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_9_SUM_RECV, 0x0998, "Current Tier 9 Block 9 Summation Received" ) \
5099 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_10_SUM_RECV, 0x0999, "Current Tier 9 Block 10 Summation Received" ) \
5100 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_11_SUM_RECV, 0x099A, "Current Tier 9 Block 11 Summation Received" ) \
5101 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_12_SUM_RECV, 0x099B, "Current Tier 9 Block 12 Summation Received" ) \
5102 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_13_SUM_RECV, 0x099C, "Current Tier 9 Block 13 Summation Received" ) \
5103 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_14_SUM_RECV, 0x099D, "Current Tier 9 Block 14 Summation Received" ) \
5104 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_15_SUM_RECV, 0x099E, "Current Tier 9 Block 15 Summation Received" ) \
5105 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_9_BLOCK_16_SUM_RECV, 0x099F, "Current Tier 9 Block 16 Summation Received" ) \
5106 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_1_SUM_RECV, 0x09A0, "Current Tier 10 Block 1 Summation Received" ) \
5107 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_2_SUM_RECV, 0x09A1, "Current Tier 10 Block 2 Summation Received" ) \
5108 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_3_SUM_RECV, 0x09A2, "Current Tier 10 Block 3 Summation Received" ) \
5109 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_4_SUM_RECV, 0x09A3, "Current Tier 10 Block 4 Summation Received" ) \
5110 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_5_SUM_RECV, 0x09A4, "Current Tier 10 Block 5 Summation Received" ) \
5111 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_6_SUM_RECV, 0x09A5, "Current Tier 10 Block 6 Summation Received" ) \
5112 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_7_SUM_RECV, 0x09A6, "Current Tier 10 Block 7 Summation Received" ) \
5113 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_8_SUM_RECV, 0x09A7, "Current Tier 10 Block 8 Summation Received" ) \
5114 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_9_SUM_RECV, 0x09A8, "Current Tier 10 Block 9 Summation Received" ) \
5115 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_10_SUM_RECV, 0x09A9, "Current Tier 10 Block 10 Summation Received" ) \
5116 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_11_SUM_RECV, 0x09AA, "Current Tier 10 Block 11 Summation Received" ) \
5117 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_12_SUM_RECV, 0x09AB, "Current Tier 10 Block 12 Summation Received" ) \
5118 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_13_SUM_RECV, 0x09AC, "Current Tier 10 Block 13 Summation Received" ) \
5119 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_14_SUM_RECV, 0x09AD, "Current Tier 10 Block 14 Summation Received" ) \
5120 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_15_SUM_RECV, 0x09AE, "Current Tier 10 Block 15 Summation Received" ) \
5121 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_10_BLOCK_16_SUM_RECV, 0x09AF, "Current Tier 10 Block 16 Summation Received" ) \
5122 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_1_SUM_RECV, 0x09B0, "Current Tier 11 Block 1 Summation Received" ) \
5123 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_2_SUM_RECV, 0x09B1, "Current Tier 11 Block 2 Summation Received" ) \
5124 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_3_SUM_RECV, 0x09B2, "Current Tier 11 Block 3 Summation Received" ) \
5125 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_4_SUM_RECV, 0x09B3, "Current Tier 11 Block 4 Summation Received" ) \
5126 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_5_SUM_RECV, 0x09B4, "Current Tier 11 Block 5 Summation Received" ) \
5127 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_6_SUM_RECV, 0x09B5, "Current Tier 11 Block 6 Summation Received" ) \
5128 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_7_SUM_RECV, 0x09B6, "Current Tier 11 Block 7 Summation Received" ) \
5129 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_8_SUM_RECV, 0x09B7, "Current Tier 11 Block 8 Summation Received" ) \
5130 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_9_SUM_RECV, 0x09B8, "Current Tier 11 Block 9 Summation Received" ) \
5131 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_10_SUM_RECV, 0x09B9, "Current Tier 11 Block 10 Summation Received" ) \
5132 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_11_SUM_RECV, 0x09BA, "Current Tier 11 Block 11 Summation Received" ) \
5133 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_12_SUM_RECV, 0x09BB, "Current Tier 11 Block 12 Summation Received" ) \
5134 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_13_SUM_RECV, 0x09BC, "Current Tier 11 Block 13 Summation Received" ) \
5135 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_14_SUM_RECV, 0x09BD, "Current Tier 11 Block 14 Summation Received" ) \
5136 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_15_SUM_RECV, 0x09BE, "Current Tier 11 Block 15 Summation Received" ) \
5137 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_11_BLOCK_16_SUM_RECV, 0x09BF, "Current Tier 11 Block 16 Summation Received" ) \
5138 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_1_SUM_RECV, 0x09C0, "Current Tier 12 Block 1 Summation Received" ) \
5139 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_2_SUM_RECV, 0x09C1, "Current Tier 12 Block 2 Summation Received" ) \
5140 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_3_SUM_RECV, 0x09C2, "Current Tier 12 Block 3 Summation Received" ) \
5141 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_4_SUM_RECV, 0x09C3, "Current Tier 12 Block 4 Summation Received" ) \
5142 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_5_SUM_RECV, 0x09C4, "Current Tier 12 Block 5 Summation Received" ) \
5143 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_6_SUM_RECV, 0x09C5, "Current Tier 12 Block 6 Summation Received" ) \
5144 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_7_SUM_RECV, 0x09C6, "Current Tier 12 Block 7 Summation Received" ) \
5145 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_8_SUM_RECV, 0x09C7, "Current Tier 12 Block 8 Summation Received" ) \
5146 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_9_SUM_RECV, 0x09C8, "Current Tier 12 Block 9 Summation Received" ) \
5147 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_10_SUM_RECV, 0x09C9, "Current Tier 12 Block 10 Summation Received" ) \
5148 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_11_SUM_RECV, 0x09CA, "Current Tier 12 Block 11 Summation Received" ) \
5149 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_12_SUM_RECV, 0x09CB, "Current Tier 12 Block 12 Summation Received" ) \
5150 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_13_SUM_RECV, 0x09CC, "Current Tier 12 Block 13 Summation Received" ) \
5151 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_14_SUM_RECV, 0x09CD, "Current Tier 12 Block 14 Summation Received" ) \
5152 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_15_SUM_RECV, 0x09CE, "Current Tier 12 Block 15 Summation Received" ) \
5153 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_12_BLOCK_16_SUM_RECV, 0x09CF, "Current Tier 12 Block 16 Summation Received" ) \
5154 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_1_SUM_RECV, 0x09D0, "Current Tier 13 Block 1 Summation Received" ) \
5155 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_2_SUM_RECV, 0x09D1, "Current Tier 13 Block 2 Summation Received" ) \
5156 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_3_SUM_RECV, 0x09D2, "Current Tier 13 Block 3 Summation Received" ) \
5157 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_4_SUM_RECV, 0x09D3, "Current Tier 13 Block 4 Summation Received" ) \
5158 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_5_SUM_RECV, 0x09D4, "Current Tier 13 Block 5 Summation Received" ) \
5159 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_6_SUM_RECV, 0x09D5, "Current Tier 13 Block 6 Summation Received" ) \
5160 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_7_SUM_RECV, 0x09D6, "Current Tier 13 Block 7 Summation Received" ) \
5161 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_8_SUM_RECV, 0x09D7, "Current Tier 13 Block 8 Summation Received" ) \
5162 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_9_SUM_RECV, 0x09D8, "Current Tier 13 Block 9 Summation Received" ) \
5163 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_10_SUM_RECV, 0x09D9, "Current Tier 13 Block 10 Summation Received" ) \
5164 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_11_SUM_RECV, 0x09DA, "Current Tier 13 Block 11 Summation Received" ) \
5165 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_12_SUM_RECV, 0x09DB, "Current Tier 13 Block 12 Summation Received" ) \
5166 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_13_SUM_RECV, 0x09DC, "Current Tier 13 Block 13 Summation Received" ) \
5167 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_14_SUM_RECV, 0x09DD, "Current Tier 13 Block 14 Summation Received" ) \
5168 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_15_SUM_RECV, 0x09DE, "Current Tier 13 Block 15 Summation Received" ) \
5169 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_13_BLOCK_16_SUM_RECV, 0x09DF, "Current Tier 13 Block 16 Summation Received" ) \
5170 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_1_SUM_RECV, 0x09E0, "Current Tier 14 Block 1 Summation Received" ) \
5171 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_2_SUM_RECV, 0x09E1, "Current Tier 14 Block 2 Summation Received" ) \
5172 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_3_SUM_RECV, 0x09E2, "Current Tier 14 Block 3 Summation Received" ) \
5173 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_4_SUM_RECV, 0x09E3, "Current Tier 14 Block 4 Summation Received" ) \
5174 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_5_SUM_RECV, 0x09E4, "Current Tier 14 Block 5 Summation Received" ) \
5175 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_6_SUM_RECV, 0x09E5, "Current Tier 14 Block 6 Summation Received" ) \
5176 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_7_SUM_RECV, 0x09E6, "Current Tier 14 Block 7 Summation Received" ) \
5177 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_8_SUM_RECV, 0x09E7, "Current Tier 14 Block 8 Summation Received" ) \
5178 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_9_SUM_RECV, 0x09E8, "Current Tier 14 Block 9 Summation Received" ) \
5179 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_10_SUM_RECV, 0x09E9, "Current Tier 14 Block 10 Summation Received" ) \
5180 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_11_SUM_RECV, 0x09EA, "Current Tier 14 Block 11 Summation Received" ) \
5181 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_12_SUM_RECV, 0x09EB, "Current Tier 14 Block 12 Summation Received" ) \
5182 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_13_SUM_RECV, 0x09EC, "Current Tier 14 Block 13 Summation Received" ) \
5183 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_14_SUM_RECV, 0x09ED, "Current Tier 14 Block 14 Summation Received" ) \
5184 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_15_SUM_RECV, 0x09EE, "Current Tier 14 Block 15 Summation Received" ) \
5185 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_14_BLOCK_16_SUM_RECV, 0x09EF, "Current Tier 14 Block 16 Summation Received" ) \
5186 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_1_SUM_RECV, 0x09F0, "Current Tier 15 Block 1 Summation Received" ) \
5187 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_2_SUM_RECV, 0x09F1, "Current Tier 15 Block 2 Summation Received" ) \
5188 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_3_SUM_RECV, 0x09F2, "Current Tier 15 Block 3 Summation Received" ) \
5189 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_4_SUM_RECV, 0x09F3, "Current Tier 15 Block 4 Summation Received" ) \
5190 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_5_SUM_RECV, 0x09F4, "Current Tier 15 Block 5 Summation Received" ) \
5191 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_6_SUM_RECV, 0x09F5, "Current Tier 15 Block 6 Summation Received" ) \
5192 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_7_SUM_RECV, 0x09F6, "Current Tier 15 Block 7 Summation Received" ) \
5193 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_8_SUM_RECV, 0x09F7, "Current Tier 15 Block 8 Summation Received" ) \
5194 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_9_SUM_RECV, 0x09F8, "Current Tier 15 Block 9 Summation Received" ) \
5195 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_10_SUM_RECV, 0x09F9, "Current Tier 15 Block 10 Summation Received" ) \
5196 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_11_SUM_RECV, 0x09FA, "Current Tier 15 Block 11 Summation Received" ) \
5197 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_12_SUM_RECV, 0x09FB, "Current Tier 15 Block 12 Summation Received" ) \
5198 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_13_SUM_RECV, 0x09FC, "Current Tier 15 Block 13 Summation Received" ) \
5199 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_14_SUM_RECV, 0x09FD, "Current Tier 15 Block 14 Summation Received" ) \
5200 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_15_SUM_RECV, 0x09FE, "Current Tier 15 Block 15 Summation Received" ) \
5201 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_TIER_15_BLOCK_16_SUM_RECV, 0x09FF, "Current Tier 15 Block 16 Summation Received" ) \
5202 /* Meter Billing Attribute Set */ \
5203 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_DELIVERED, 0x0A00, "Bill to Date Delivered" ) \
5204 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_TIMESTAMP_DEL, 0x0A01, "Bill to Date Time Stamp Delivered" ) \
5205 XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_DELIVERED, 0x0A02, "Projected Bill Delivered" ) \
5206 XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_TIME_STAMP_DEL, 0x0A03, "Projected Bill Time Stamp Delivered" ) \
5207 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_DELIVERED_TRAILING_DIGIT, 0x0A04, "Bill Delivered Trailing Digit" ) \
5208 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_RECEIVED, 0x0A10, "Bill to Date Received" ) \
5209 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_TO_DATE_TIMESTAMP_RECEIVED, 0x0A11, "Bill to Date Time Stamp Received" ) \
5210 XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_RECEIVED, 0x0A12, "Projected Bill Received" ) \
5211 XXX(ZBEE_ZCL_ATTR_ID_MET_PROJECTED_BILL_TIME_STAMP_RECV, 0x0A13, "Projected Bill Time Stamp Received" ) \
5212 XXX(ZBEE_ZCL_ATTR_ID_MET_BILL_RECEIVED_TRAILING_DIGIT, 0x0A14, "Bill Received Trailing Digit" ) \
5213 /* Supply Control Attribute Set */ \
5214 XXX(ZBEE_ZCL_ATTR_ID_MET_PROPOSED_CHANGE_SUPPLY_IMP_TIME, 0x0B00, "Proposed Change Supply Implementation Time" ) \
5215 XXX(ZBEE_ZCL_ATTR_ID_MET_PROPOSED_CHANGE_SUPPLY_STATUS, 0x0B01, "Proposed Change Supply Status" ) \
5216 XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_THRESHOLD, 0x0B10, "Uncontrolled Flow Threshold" ) \
5217 XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_UNIT_OF_MEAS, 0x0B11, "Uncontrolled Flow Unit of Measure" ) \
5218 XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_MULTIPLIER, 0x0B12, "Uncontrolled Flow Multiplier" ) \
5219 XXX(ZBEE_ZCL_ATTR_ID_MET_UNCONTROLLED_FLOW_DIVISOR, 0x0B13, "Uncontrolled Flow Divisor" ) \
5220 XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_STABILISATION_PERIOD, 0x0B14, "Flow Stabilisation Period" ) \
5221 XXX(ZBEE_ZCL_ATTR_ID_MET_FLOW_MEASUREMENT_PERIOD, 0x0B15, "Flow Measurement Period" ) \
5222 /* Alternative Historical Consumption Attribute Set */ \
5223 XXX(ZBEE_ZCL_ATTR_ID_MET_ALTERNATIVE_INSTANT_DEMAND, 0x0C00, "Alternative Instantaneous Demand" ) \
5224 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_ALT_CON_DEL, 0x0C01, "Current Day Alternative Consumption Delivered" ) \
5225 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_DAY_ALT_CON_RECV, 0x0C02, "Current Day Alternative Consumption Received" ) \
5226 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_ALT_CON_DEL, 0x0C03, "Previous Day Alternative Consumption Delivered" ) \
5227 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_ALT_CON_RECV, 0x0C04, "Previous Day Alternative Consumption Received" ) \
5228 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_DEL, 0x0C05, "Current Alternative Partial Profile Interval Start Time Delivered" ) \
5229 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_RECV, 0x0C06, "Current Alternative Partial Profile Interval Start Time Received" ) \
5230 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_VAL_DEL, 0x0C07, "Current Alternative Partial Profile Interval Value Delivered" ) \
5231 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_ALT_PAR_PROF_INT_VAL_RECV, 0x0C08, "Current Alternative Partial Profile Interval Value Received" ) \
5232 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MAX_PRESS, 0x0C09, "Current Day Alternative Max Pressure" ) \
5233 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MIN_PRESS, 0x0C0A, "Current Day Alternative Min Pressure" ) \
5234 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MAX_PRESS, 0x0C0B, "Previous Day Alternative Max Pressure" ) \
5235 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MIN_PRESS, 0x0C0C, "Previous Day Alternative Min Pressure" ) \
5236 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_DAY_ALT_MAX_DEMAND, 0x0C0D, "Current Day Alternative Max Demand" ) \
5237 XXX(ZBEE_ZCL_ATTR_ID_MET_PREVIOUS_DAY_ALT_MAX_DEMAND, 0x0C0E, "Previous Day Alternative Max Demand" ) \
5238 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_MONTH_ALT_MAX_DEMAND, 0x0C0F, "Current Month Alternative Max Demand" ) \
5239 XXX(ZBEE_ZCL_ATTR_ID_MET_CURRENT_YEAR_ALT_MAX_DEMAND, 0x0C10, "Current Year Alternative Max Demand" ) \
5240 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_2_ALT_CON_DEL, 0x0C20, "Previous Day 2 Alternative Consumption Delivered" ) \
5241 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_2_ALT_CON_RECV, 0x0C21, "Previous Day 2 Alternative Consumption Received" ) \
5242 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_3_ALT_CON_DEL, 0x0C22, "Previous Day 3 Alternative Consumption Delivered" ) \
5243 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_3_ALT_CON_RECV, 0x0C23, "Previous Day 3 Alternative Consumption Received" ) \
5244 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_4_ALT_CON_DEL, 0x0C24, "Previous Day 4 Alternative Consumption Delivered" ) \
5245 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_4_ALT_CON_RECV, 0x0C25, "Previous Day 4 Alternative Consumption Received" ) \
5246 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_5_ALT_CON_DEL, 0x0C26, "Previous Day 5 Alternative Consumption Delivered" ) \
5247 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_5_ALT_CON_RECV, 0x0C27, "Previous Day 5 Alternative Consumption Received" ) \
5248 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_6_ALT_CON_DEL, 0x0C28, "Previous Day 6 Alternative Consumption Delivered" ) \
5249 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_6_ALT_CON_RECV, 0x0C29, "Previous Day 6 Alternative Consumption Received" ) \
5250 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_7_ALT_CON_DEL, 0x0C2A, "Previous Day 7 Alternative Consumption Delivered" ) \
5251 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_7_ALT_CON_RECV, 0x0C2B, "Previous Day 7 Alternative Consumption Received" ) \
5252 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_8_ALT_CON_DEL, 0x0C2C, "Previous Day 8 Alternative Consumption Delivered" ) \
5253 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_DAY_8_ALT_CON_RECV, 0x0C2D, "Previous Day 8 Alternative Consumption Received" ) \
5254 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_ALT_CON_DEL, 0x0C30, "Current Week Alternative Consumption Delivered" ) \
5255 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_WEEK_ALT_CON_RECV, 0x0C31, "Current Week Alternative Consumption Received" ) \
5256 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_ALT_CON_DEL, 0x0C32, "Previous Week Alternative Consumption Delivered" ) \
5257 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_ALT_CON_RECV, 0x0C33, "Previous Week Alternative Consumption Received" ) \
5258 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_ALT_CON_DEL, 0x0C34, "Previous Week 2 Alternative Consumption Delivered" ) \
5259 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_2_ALT_CON_RECV, 0x0C35, "Previous Week 2 Alternative Consumption Received" ) \
5260 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_ALT_CON_DEL, 0x0C36, "Previous Week 3 Alternative Consumption Delivered" ) \
5261 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_3_ALT_CON_RECV, 0x0C37, "Previous Week 3 Alternative Consumption Received" ) \
5262 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_ALT_CON_DEL, 0x0C38, "Previous Week 4 Alternative Consumption Delivered" ) \
5263 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_4_ALT_CON_RECV, 0x0C39, "Previous Week 4 Alternative Consumption Received" ) \
5264 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_ALT_CON_DEL, 0x0C3A, "Previous Week 5 Alternative Consumption Delivered" ) \
5265 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_WEEK_5_ALT_CON_RECV, 0x0C3B, "Previous Week 5 Alternative Consumption Received" ) \
5266 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_ALT_CON_DEL, 0x0C40, "Current Month Alternative Consumption Delivered" ) \
5267 XXX(ZBEE_ZCL_ATTR_ID_MET_CUR_MONTH_ALT_CON_RECV, 0x0C41, "Current Month Alternative Consumption Received" ) \
5268 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_ALT_CON_DEL, 0x0C42, "Previous Month Alternative Consumption Delivered" ) \
5269 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_ALT_CON_RECV, 0x0C43, "Previous Month Alternative Consumption Received" ) \
5270 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_ALT_CON_DEL, 0x0C44, "Previous Month 2 Alternative Consumption Delivered" ) \
5271 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_2_ALT_CON_RECV, 0x0C45, "Previous Month 2 Alternative Consumption Received" ) \
5272 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_ALT_CON_DEL, 0x0C46, "Previous Month 3 Alternative Consumption Delivered" ) \
5273 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_3_ALT_CON_RECV, 0x0C47, "Previous Month 3 Alternative Consumption Received" ) \
5274 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_ALT_CON_DEL, 0x0C48, "Previous Month 4 Alternative Consumption Delivered" ) \
5275 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_4_ALT_CON_RECV, 0x0C49, "Previous Month 4 Alternative Consumption Received" ) \
5276 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_ALT_CON_DEL, 0x0C4A, "Previous Month 5 Alternative Consumption Delivered" ) \
5277 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_5_ALT_CON_RECV, 0x0C4B, "Previous Month 5 Alternative Consumption Received" ) \
5278 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_ALT_CON_DEL, 0x0C4C, "Previous Month 6 Alternative Consumption Delivered" ) \
5279 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_6_ALT_CON_RECV, 0x0C4D, "Previous Month 6 Alternative Consumption Received" ) \
5280 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_ALT_CON_DEL, 0x0C4E, "Previous Month 7 Alternative Consumption Delivered" ) \
5281 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_7_ALT_CON_RECV, 0x0C4F, "Previous Month 7 Alternative Consumption Received" ) \
5282 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_ALT_CON_DEL, 0x0C50, "Previous Month 8 Alternative Consumption Delivered" ) \
5283 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_8_ALT_CON_RECV, 0x0C51, "Previous Month 8 Alternative Consumption Received" ) \
5284 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_ALT_CON_DEL, 0x0C52, "Previous Month 9 Alternative Consumption Delivered" ) \
5285 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_9_ALT_CON_RECV, 0x0C53, "Previous Month 9 Alternative Consumption Received" ) \
5286 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_ALT_CON_DEL, 0x0C54, "Previous Month 10 Alternative Consumption Delivered" ) \
5287 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_10_ALT_CON_RECV, 0x0C55, "Previous Month 10 Alternative Consumption Received" ) \
5288 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_ALT_CON_DEL, 0x0C56, "Previous Month 11 Alternative Consumption Delivered" ) \
5289 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_11_ALT_CON_RECV, 0x0C57, "Previous Month 11 Alternative Consumption Received" ) \
5290 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_ALT_CON_DEL, 0x0C58, "Previous Month 12 Alternative Consumption Delivered" ) \
5291 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_12_ALT_CON_RECV, 0x0C59, "Previous Month 12 Alternative Consumption Received" ) \
5292 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_ALT_CON_DEL, 0x0C5A, "Previous Month 13 Alternative Consumption Delivered" ) \
5293 XXX(ZBEE_ZCL_ATTR_ID_MET_PREV_MONTH_13_ALT_CON_RECV, 0x0C5B, "Previous Month 13 Alternative Consumption Received" ) \
5294 /* Smart Energy */ \
5295 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET, 0xFFFE, "Attribute Reporting Status" )
5297 VALUE_STRING_ENUM(zbee_zcl_met_attr_server_names);
5298 VALUE_STRING_ARRAY(zbee_zcl_met_attr_server_names);
5299 static value_string_ext zbee_zcl_met_attr_server_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_met_attr_server_names);
5301 #define zbee_zcl_met_attr_client_names_VALUE_STRING_LIST(XXX) \
5302 /* Notification AttributeSet*/ \
5303 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS, 0x0000, "Functional Notification Flags" ) \
5304 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2, 0x0001, "Notification Flags 2" ) \
5305 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3, 0x0002, "Notification Flags 3" ) \
5306 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4, 0x0003, "Notification Flags 4" ) \
5307 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5, 0x0004, "Notification Flags 5" ) \
5308 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_6, 0x0005, "Notification Flags 6" ) \
5309 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_7, 0x0006, "Notification Flags 7" ) \
5310 XXX(ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_8, 0x0007, "Notification Flags 8" ) \
5311 /* Smart Energy */ \
5312 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET_CLNT, 0xFFFE, "Attribute Reporting Status" )
5314 VALUE_STRING_ENUM(zbee_zcl_met_attr_client_names);
5315 VALUE_STRING_ARRAY(zbee_zcl_met_attr_client_names);
5317 /* Server Commands Received */
5318 #define zbee_zcl_met_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
5319 XXX(ZBEE_ZCL_CMD_ID_MET_GET_PROFILE, 0x00, "Get Profile" ) \
5320 XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR_RSP, 0x01, "Request Mirror Response" ) \
5321 XXX(ZBEE_ZCL_CMD_ID_MET_MIRROR_REMOVED, 0x02, "Mirror Removed" ) \
5322 XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE, 0x03, "Request Fast Poll Mode" ) \
5323 XXX(ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT, 0x04, "Schedule Snapshot" ) \
5324 XXX(ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT, 0x05, "Take Snapshot" ) \
5325 XXX(ZBEE_ZCL_CMD_ID_MET_GET_SNAPSHOT, 0x06, "Get Snapshot" ) \
5326 XXX(ZBEE_ZCL_CMD_ID_MET_START_SAMPLING, 0x07, "Start Sampling" ) \
5327 XXX(ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA, 0x08, "Get Sampled Data" ) \
5328 XXX(ZBEE_ZCL_CMD_ID_MET_MIRROR_REPORT_ATTRIBUTE_RESPONSE, 0x09, "Mirror Report Attribute Response" ) \
5329 XXX(ZBEE_ZCL_CMD_ID_MET_RESET_LOAD_LIMIT_COUNTER, 0x0A, "Reset Load Limit Counter" ) \
5330 XXX(ZBEE_ZCL_CMD_ID_MET_CHANGE_SUPPLY, 0x0B, "Change Supply" ) \
5331 XXX(ZBEE_ZCL_CMD_ID_MET_LOCAL_CHANGE_SUPPLY, 0x0C, "Local Change Supply" ) \
5332 XXX(ZBEE_ZCL_CMD_ID_MET_SET_SUPPLY_STATUS, 0x0D, "Set Supply Status" ) \
5333 XXX(ZBEE_ZCL_CMD_ID_MET_SET_UNCONTROLLED_FLOW_THRESHOLD, 0x0E, "Set Uncontrolled Flow Threshold" )
5335 VALUE_STRING_ENUM(zbee_zcl_met_srv_rx_cmd_names);
5336 VALUE_STRING_ARRAY(zbee_zcl_met_srv_rx_cmd_names);
5338 /* Server Commands Generated */
5339 #define zbee_zcl_met_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
5340 XXX(ZBEE_ZCL_CMD_ID_MET_GET_PROFILE_RESPONSE, 0x00, "Get Profile Response" ) \
5341 XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR, 0x01, "Request Mirror" ) \
5342 XXX(ZBEE_ZCL_CMD_ID_MET_REMOVE_MIRROR, 0x02, "Remove Mirror" ) \
5343 XXX(ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE_RESPONSE, 0x03, "Request Fast Poll Mode Response" ) \
5344 XXX(ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT_RESPONSE, 0x04, "Schedule Snapshot Response" ) \
5345 XXX(ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT_RESPONSE, 0x05, "Take Snapshot Response" ) \
5346 XXX(ZBEE_ZCL_CMD_ID_MET_PUBLISH_SNAPSHOT, 0x06, "Publish Snapshot" ) \
5347 XXX(ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA_RSP, 0x07, "Get Sampled Data Response" ) \
5348 XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_MIRROR, 0x08, "Configure Mirror" ) \
5349 XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_SCHEME, 0x09, "Configure Notification Scheme" ) \
5350 XXX(ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_FLAGS, 0x0A, "Configure Notification Flags" ) \
5351 XXX(ZBEE_ZCL_CMD_ID_MET_GET_NOTIFIED_MESSAGE, 0x0B, "Get Notified Message" ) \
5352 XXX(ZBEE_ZCL_CMD_ID_MET_SUPPLY_STATUS_RESPONSE, 0x0C, "Supply Status Response" ) \
5353 XXX(ZBEE_ZCL_CMD_ID_MET_START_SAMPLING_RESPONSE, 0x0D, "Start Sampling Response" )
5355 VALUE_STRING_ENUM(zbee_zcl_met_srv_tx_cmd_names);
5356 VALUE_STRING_ARRAY(zbee_zcl_met_srv_tx_cmd_names);
5358 #define ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A 0x1
5359 #define ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B 0x2
5361 static const range_string zbee_zcl_met_notification_scheme[] = {
5362 { 0x0, 0x0, "No Notification Scheme Defined" },
5363 { ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A, ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A, "Predefined Notification Scheme A" },
5364 { ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B, ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B, "Predefined Notification Scheme B" },
5365 { 0x3, 0x80, "Reserved" },
5366 { 0x81, 0xFE, "For MSP Requirements" },
5367 { 0xFF, 0xFF, "Reserved" },
5368 { 0, 0, NULL }
5371 /* Snapshot Schedule Confirmation */
5372 #define zbee_zcl_met_snapshot_schedule_confirmation_VALUE_STRING_LIST(XXX) \
5373 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_ACCEPTED, 0x00, "Accepted" ) \
5374 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_TYPE_NOT_SUPPORTED, 0x01, "Snapshot Type not supported") \
5375 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_CAUSE_NOT_SUPPORTED, 0x02, "Snapshot Cause not supported") \
5376 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_CURRENTLY_NOT_AVAILABLE, 0x03, "Snapshot Cause not supported") \
5377 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_NOT_SUPPORTED_BY_DEVICE, 0x04, "Snapshot Schedules not supported by device") \
5378 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_CONFIRMATION_ID_INSUFFICIENT_SPACE, 0x05, "Insufficient space for snapshot schedule")
5380 VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_confirmation);
5381 VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_confirmation);
5383 /* Snapshot Schedule Frequency Type*/
5384 #define zbee_zcl_met_snapshot_schedule_frequency_type_VALUE_STRING_LIST(XXX) \
5385 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_DAY, 0x0, "Day" ) \
5386 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_WEEK, 0x1, "Week" ) \
5387 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_MONTH, 0x2, "Month" ) \
5388 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_TYPE_RESERVED, 0x3, "Reserved" )
5390 VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_frequency_type);
5391 VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_frequency_type);
5393 /* Snapshot Schedule Wild-Card Frequency*/
5394 #define zbee_zcl_met_snapshot_schedule_frequency_wild_card_VALUE_STRING_LIST(XXX) \
5395 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_START_OF, 0x0, "Start of" ) \
5396 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_END_OF, 0x1, "End of" ) \
5397 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_NOT_USED, 0x2, "Wild-card not used" ) \
5398 XXX(ZBEE_ZCL_SNAPSHOT_SCHEDULE_FREQUENCY_WILD_CARD_RESERVED, 0x3, "Reserved" )
5400 VALUE_STRING_ENUM(zbee_zcl_met_snapshot_schedule_frequency_wild_card);
5401 VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_schedule_frequency_wild_card);
5403 /* Snapshot Payload Type */
5404 #define zbee_zcl_met_snapshot_payload_type_VALUE_STRING_LIST(XXX) \
5405 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_DELIVERED_REGISTERS, 0, "TOU Information Set Delivered Registers" ) \
5406 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_RECEIVED_REGISTERS, 1, "TOU Information Set Received Registers") \
5407 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_DELIVERED, 2, "Block Tier Information Set Delivered") \
5408 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_RECEIVED, 3, "Block Tier Information Set Received") \
5409 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_DELIVERED_NO_BILLING, 4, "TOU Information Set Delivered (No Billing)") \
5410 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_TOU_INFO_SET_RECEIVED_NO_BILLING, 5, "TOU Information Set Received (No Billing)") \
5411 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_DELIVERED_NO_BILLING, 6, "Block Tier Information Set Delivered (No Billing)") \
5412 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_BLOCK_TIER_INFO_SET_RECEIVED_NO_BILLING, 7, "Block Tier Information Set Received (No Billing)") \
5413 XXX(ZBEE_ZCL_SNAPSHOT_PAYLOAD_TYPE_DATA_UNAVAILABLE, 128, "Data Unavailable")
5415 VALUE_STRING_ENUM(zbee_zcl_met_snapshot_payload_type);
5416 VALUE_STRING_ARRAY(zbee_zcl_met_snapshot_payload_type);
5418 /* Functional Notification Flags */
5419 #define ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_OTA_FIRMWARE 0x00000001
5420 #define ZBEE_ZCL_FUNC_NOTI_FLAG_CBKE_UPDATE_REQUESTED 0x00000002
5421 #define ZBEE_ZCL_FUNC_NOTI_FLAG_TIME_SYNC 0x00000004
5422 #define ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_1 0x00000008
5423 #define ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_HAN 0x00000010
5424 #define ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_WAN 0x00000020
5425 #define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET 0x000001C0
5426 #define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET 0x00000E00
5427 #define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER 0x00001000
5428 #define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_METERING_CLUSTER 0x00002000
5429 #define ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER 0x00004000
5430 #define ZBEE_ZCL_FUNC_NOTI_FLAG_NETWORK_KEY_ACTIVE 0x00008000
5431 #define ZBEE_ZCL_FUNC_NOTI_FLAG_DISPLAY_MESSAGE 0x00010000
5432 #define ZBEE_ZCL_FUNC_NOTI_FLAG_CANCEL_ALL_MESSAGES 0x00020000
5433 #define ZBEE_ZCL_FUNC_NOTI_FLAG_CHANGE_SUPPLY 0x00040000
5434 #define ZBEE_ZCL_FUNC_NOTI_FLAG_LOCAL_CHANGE_SUPPLY 0x00080000
5435 #define ZBEE_ZCL_FUNC_NOTI_FLAG_SET_UNCONTROLLED_FLOW_THRESHOLD 0x00100000
5436 #define ZBEE_ZCL_FUNC_NOTI_FLAG_TUNNEL_MESSAGE_PENDING 0x00200000
5437 #define ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SNAPSHOT 0x00400000
5438 #define ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SAMPLED_DATA 0x00800000
5439 #define ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE 0x01000000
5440 #define ZBEE_ZCL_FUNC_NOTI_FLAG_ENERGY_SCAN_PENDING 0x02000000
5441 #define ZBEE_ZCL_FUNC_NOTI_FLAG_CHANNEL_CHANGE_PENDING 0x04000000
5442 #define ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_2 0xF8000000
5444 /* Notification Flags 2 */
5445 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE 0x00000001
5446 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_PERIOD 0x00000002
5447 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TARIFF_INFORMATION 0x00000004
5448 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONVERSION_FACTOR 0x00000008
5449 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CALORIFIC_VALUE 0x00000010
5450 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CO2_VALUE 0x00000020
5451 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BILLING_PERIOD 0x00000040
5452 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONSOLIDATED_BILL 0x00000080
5453 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE_MATRIX 0x00000100
5454 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_THRESHOLDS 0x00000200
5455 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CURRENCY_CONVERSION 0x00000400
5456 #define ZBEE_ZCL_NOTI_FLAG_2_RESERVED 0x00000800
5457 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CREDIT_PAYMENT_INFO 0x00001000
5458 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CPP_EVENT 0x00002000
5459 #define ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TIER_LABELS 0x00004000
5460 #define ZBEE_ZCL_NOTI_FLAG_2_CANCEL_TARIFF 0x00008000
5461 #define ZBEE_ZCL_NOTI_FLAG_2_RESERVED_FUTURE 0xFFFF0000
5463 /* Notification Flags 3 */
5464 #define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_CALENDAR 0x00000001
5465 #define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SPECIAL_DAYS 0x00000002
5466 #define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SEASONS 0x00000004
5467 #define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_WEEK 0x00000008
5468 #define ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_DAY 0x00000010
5469 #define ZBEE_ZCL_NOTI_FLAG_3_CANCEL_DAY 0x00000020
5470 #define ZBEE_ZCL_NOTI_FLAG_3_RESERVED 0xFFFFFFC0
5472 /* Notification Flags 4 */
5473 #define ZBEE_ZCL_NOTI_FLAG_4_SELECT_AVAILABLE_EMERGENCY_CREDIT 0x00000001
5474 #define ZBEE_ZCL_NOTI_FLAG_4_CHANGE_DEBT 0x00000002
5475 #define ZBEE_ZCL_NOTI_FLAG_4_EMERGENCY_CREDIT_SETUP 0x00000004
5476 #define ZBEE_ZCL_NOTI_FLAG_4_CONSUMER_TOP_UP 0x00000008
5477 #define ZBEE_ZCL_NOTI_FLAG_4_CREDIT_ADJUSTMENT 0x00000010
5478 #define ZBEE_ZCL_NOTI_FLAG_4_CHANGE_PAYMENT_MODE 0x00000020
5479 #define ZBEE_ZCL_NOTI_FLAG_4_GET_PREPAY_SNAPSHOT 0x00000040
5480 #define ZBEE_ZCL_NOTI_FLAG_4_GET_TOP_UP_LOG 0x00000080
5481 #define ZBEE_ZCL_NOTI_FLAG_4_SET_LOW_CREDIT_WARNING_LEVEL 0x00000100
5482 #define ZBEE_ZCL_NOTI_FLAG_4_GET_DEBT_REPAYMENT_LOG 0x00000200
5483 #define ZBEE_ZCL_NOTI_FLAG_4_SET_MAXIMUM_CREDIT_LIMIT 0x00000400
5484 #define ZBEE_ZCL_NOTI_FLAG_4_SET_OVERALL_DEBT_CAP 0x00000800
5485 #define ZBEE_ZCL_NOTI_FLAG_4_RESERVED 0xFFFFF000
5487 /* Notification Flags 5 */
5488 #define ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_TENANCY 0x00000001
5489 #define ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_SUPPLIER 0x00000002
5490 #define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_1_RESPONSE 0x00000004
5491 #define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_2_RESPONSE 0x00000008
5492 #define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_3_RESPONSE 0x00000010
5493 #define ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_4_RESPONSE 0x00000020
5494 #define ZBEE_ZCL_NOTI_FLAG_5_UPDATE_SITE_ID 0x00000040
5495 #define ZBEE_ZCL_NOTI_FLAG_5_RESET_BATTERY_COUNTER 0x00000080
5496 #define ZBEE_ZCL_NOTI_FLAG_5_UPDATE_CIN 0x00000100
5497 #define ZBEE_ZCL_NOTI_FLAG_5_RESERVED 0XFFFFFE00
5499 /*************************/
5500 /* Function Declarations */
5501 /*************************/
5502 void proto_register_zbee_zcl_met(void);
5503 void proto_reg_handoff_zbee_zcl_met(void);
5505 /* Attribute Dissector Helpers */
5506 static void dissect_zcl_met_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
5508 /* Command Dissector Helpers */
5509 static void dissect_zcl_met_get_profile (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5510 static void dissect_zcl_met_request_mirror_rsp (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5511 static void dissect_zcl_met_mirror_removed (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5512 static void dissect_zcl_met_request_fast_poll_mode (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5513 static void dissect_zcl_met_schedule_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5514 static void dissect_zcl_met_take_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5515 static void dissect_zcl_met_get_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5516 static void dissect_zcl_met_start_sampling (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5517 static void dissect_zcl_met_get_sampled_data (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5518 static void dissect_zcl_met_mirror_report_attribute_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5519 static void dissect_zcl_met_reset_load_limit_counter (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5520 static void dissect_zcl_met_change_supply (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5521 static void dissect_zcl_met_local_change_supply (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5522 static void dissect_zcl_met_set_supply_status (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5523 static void dissect_zcl_met_set_uncontrolled_flow_threshold (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5524 static void dissect_zcl_met_get_profile_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5525 static void dissect_zcl_met_request_fast_poll_mode_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5526 static void dissect_zcl_met_schedule_snapshot_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5527 static void dissect_zcl_met_take_snapshot_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5528 static void dissect_zcl_met_publish_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5529 static void dissect_zcl_met_get_sampled_data_rsp (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5530 static void dissect_zcl_met_configure_mirror (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5531 static void dissect_zcl_met_configure_notification_scheme (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5532 static void dissect_zcl_met_configure_notification_flags (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5533 static void dissect_zcl_met_get_notified_msg (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5534 static void dissect_zcl_met_supply_status_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5535 static void dissect_zcl_met_start_sampling_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
5536 static void dissect_zcl_met_notification_flags (tvbuff_t *tvb, proto_tree *tree, unsigned *offset, uint16_t noti_flags_number);
5538 /*************************/
5539 /* Global Variables */
5540 /*************************/
5542 /* Initialize the protocol and registered fields */
5543 static int proto_zbee_zcl_met;
5545 static int hf_zbee_zcl_met_srv_tx_cmd_id;
5546 static int hf_zbee_zcl_met_srv_rx_cmd_id;
5547 static int hf_zbee_zcl_met_attr_server_id;
5548 static int hf_zbee_zcl_met_attr_client_id;
5549 static int hf_zbee_zcl_met_attr_reporting_status;
5550 static int hf_zbee_zcl_met_func_noti_flags;
5551 static int hf_zbee_zcl_met_func_noti_flag_new_ota_firmware;
5552 static int hf_zbee_zcl_met_func_noti_flag_cbke_update_request;
5553 static int hf_zbee_zcl_met_func_noti_flag_time_sync;
5554 static int hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han;
5555 static int hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan;
5556 static int hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set;
5557 static int hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set;
5558 static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster;
5559 static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster;
5560 static int hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster;
5561 static int hf_zbee_zcl_met_func_noti_flag_network_key_active;
5562 static int hf_zbee_zcl_met_func_noti_flag_display_message;
5563 static int hf_zbee_zcl_met_func_noti_flag_cancel_all_messages;
5564 static int hf_zbee_zcl_met_func_noti_flag_change_supply;
5565 static int hf_zbee_zcl_met_func_noti_flag_local_change_supply;
5566 static int hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold;
5567 static int hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending;
5568 static int hf_zbee_zcl_met_func_noti_flag_get_snapshot;
5569 static int hf_zbee_zcl_met_func_noti_flag_get_sampled_data;
5570 static int hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available;
5571 static int hf_zbee_zcl_met_func_noti_flag_energy_scan_pending;
5572 static int hf_zbee_zcl_met_func_noti_flag_channel_change_pending;
5573 static int hf_zbee_zcl_met_func_noti_flag_reserved;
5574 static int hf_zbee_zcl_met_noti_flags_2;
5575 static int hf_zbee_zcl_met_noti_flag_2_publish_price;
5576 static int hf_zbee_zcl_met_noti_flag_2_publish_block_period;
5577 static int hf_zbee_zcl_met_noti_flag_2_publish_tariff_info;
5578 static int hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor;
5579 static int hf_zbee_zcl_met_noti_flag_2_publish_calorific_value;
5580 static int hf_zbee_zcl_met_noti_flag_2_publish_co2_value;
5581 static int hf_zbee_zcl_met_noti_flag_2_publish_billing_period;
5582 static int hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill;
5583 static int hf_zbee_zcl_met_noti_flag_2_publish_price_matrix;
5584 static int hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds;
5585 static int hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion;
5586 static int hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info;
5587 static int hf_zbee_zcl_met_noti_flag_2_publish_cpp_event;
5588 static int hf_zbee_zcl_met_noti_flag_2_publish_tier_labels;
5589 static int hf_zbee_zcl_met_noti_flag_2_cancel_tariff;
5590 static int hf_zbee_zcl_met_noti_flag_2_reserved;
5591 static int hf_zbee_zcl_met_noti_flags_3;
5592 static int hf_zbee_zcl_met_noti_flag_3_publish_calendar;
5593 static int hf_zbee_zcl_met_noti_flag_3_publish_special_days;
5594 static int hf_zbee_zcl_met_noti_flag_3_publish_seasons;
5595 static int hf_zbee_zcl_met_noti_flag_3_publish_week;
5596 static int hf_zbee_zcl_met_noti_flag_3_publish_day;
5597 static int hf_zbee_zcl_met_noti_flag_3_cancel_calendar;
5598 static int hf_zbee_zcl_met_noti_flag_3_reserved;
5599 static int hf_zbee_zcl_met_noti_flags_4;
5600 static int hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit;
5601 static int hf_zbee_zcl_met_noti_flag_4_change_debt;
5602 static int hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup;
5603 static int hf_zbee_zcl_met_noti_flag_4_consumer_top_up;
5604 static int hf_zbee_zcl_met_noti_flag_4_credit_adjustment;
5605 static int hf_zbee_zcl_met_noti_flag_4_change_payment_mode;
5606 static int hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot;
5607 static int hf_zbee_zcl_met_noti_flag_4_get_top_up_log;
5608 static int hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level;
5609 static int hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log;
5610 static int hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit;
5611 static int hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap;
5612 static int hf_zbee_zcl_met_noti_flag_4_reserved;
5613 static int hf_zbee_zcl_met_noti_flags_5;
5614 static int hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy;
5615 static int hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier;
5616 static int hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response;
5617 static int hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response;
5618 static int hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response;
5619 static int hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response;
5620 static int hf_zbee_zcl_met_noti_flag_5_update_site_id;
5621 static int hf_zbee_zcl_met_noti_flag_5_reset_battery_counter;
5622 static int hf_zbee_zcl_met_noti_flag_5_update_cin;
5623 static int hf_zbee_zcl_met_noti_flag_5_reserved;
5624 static int hf_zbee_zcl_met_get_profile_interval_channel;
5625 static int hf_zbee_zcl_met_get_profile_end_time;
5626 static int hf_zbee_zcl_met_get_profile_number_of_periods;
5627 static int hf_zbee_zcl_met_request_mirror_rsp_endpoint_id;
5628 static int hf_zbee_zcl_met_mirror_removed_removed_endpoint_id;
5629 static int hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period;
5630 static int hf_zbee_zcl_met_request_fast_poll_mode_duration;
5631 static int hf_zbee_zcl_met_schedule_snapshot_issuer_event_id;
5632 static int hf_zbee_zcl_met_schedule_snapshot_command_index;
5633 static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id;
5634 static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_start_time;
5635 static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule;
5636 static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type;
5637 static int hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause;
5638 static int hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands;
5639 static int hf_zbee_zcl_met_take_snapshot_snapshot_cause;
5640 static int hf_zbee_zcl_met_get_snapshot_start_time;
5641 static int hf_zbee_zcl_met_get_snapshot_end_time;
5642 static int hf_zbee_zcl_met_get_snapshot_snapshot_offset;
5643 static int hf_zbee_zcl_met_get_snapshot_snapshot_cause;
5644 static int hf_zbee_zcl_met_start_sampling_issuer_event_id;
5645 static int hf_zbee_zcl_met_start_sampling_start_sampling_time;
5646 static int hf_zbee_zcl_met_start_sampling_sample_type;
5647 static int hf_zbee_zcl_met_start_sampling_sample_request_interval;
5648 static int hf_zbee_zcl_met_start_sampling_max_number_of_samples;
5649 static int hf_zbee_zcl_met_get_sampled_data_sample_id;
5650 static int hf_zbee_zcl_met_get_sampled_data_sample_start_time;
5651 static int hf_zbee_zcl_met_get_sampled_data_sample_type;
5652 static int hf_zbee_zcl_met_get_sampled_data_number_of_samples;
5653 static int hf_zbee_zcl_met_start_sampling_response_sample_id;
5654 static int hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme;
5655 static int hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n;
5656 static int hf_zbee_zcl_met_reset_load_limit_counter_provider_id;
5657 static int hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id;
5658 static int hf_zbee_zcl_met_change_supply_provider_id;
5659 static int hf_zbee_zcl_met_change_supply_issuer_event_id;
5660 static int hf_zbee_zcl_met_change_supply_request_date_time;
5661 static int hf_zbee_zcl_met_change_supply_implementation_date_time;
5662 static int hf_zbee_zcl_met_change_supply_proposed_supply_status;
5663 static int hf_zbee_zcl_met_change_supply_supply_control_bits;
5664 static int hf_zbee_zcl_met_local_change_supply_proposed_supply_status;
5665 static int hf_zbee_zcl_met_set_supply_status_issuer_event_id;
5666 static int hf_zbee_zcl_met_set_supply_status_supply_tamper_state;
5667 static int hf_zbee_zcl_met_set_supply_status_supply_depletion_state;
5668 static int hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state;
5669 static int hf_zbee_zcl_met_set_supply_status_load_limit_supply_state;
5670 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id;
5671 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id;
5672 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold;
5673 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure;
5674 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier;
5675 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor;
5676 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period;
5677 static int hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period;
5678 static int hf_zbee_zcl_met_get_profile_response_end_time;
5679 static int hf_zbee_zcl_met_get_profile_response_status;
5680 static int hf_zbee_zcl_met_get_profile_response_profile_interval_period;
5681 static int hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered;
5682 static int hf_zbee_zcl_met_get_profile_response_intervals;
5683 static int hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period;
5684 static int hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time;
5685 static int hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id;
5686 static int hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id;
5687 static int hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation;
5688 static int hf_zbee_zcl_met_take_snapshot_response_snapshot_id;
5689 static int hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation;
5690 static int hf_zbee_zcl_met_publish_snapshot_snapshot_id;
5691 static int hf_zbee_zcl_met_publish_snapshot_snapshot_time;
5692 static int hf_zbee_zcl_met_publish_snapshot_snapshots_found;
5693 static int hf_zbee_zcl_met_publish_snapshot_cmd_index;
5694 static int hf_zbee_zcl_met_publish_snapshot_total_commands;
5695 static int hf_zbee_zcl_met_publish_snapshot_snapshot_cause;
5696 static int hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type;
5697 static int hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload;
5698 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_id;
5699 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_start_time;
5700 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_type;
5701 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval;
5702 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples;
5703 static int hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples;
5704 static int hf_zbee_zcl_met_configure_mirror_issuer_event_id;
5705 static int hf_zbee_zcl_met_configure_mirror_reporting_interval;
5706 static int hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting;
5707 static int hf_zbee_zcl_met_configure_mirror_notification_scheme;
5708 static int hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id;
5709 static int hf_zbee_zcl_met_configure_notification_scheme_notification_scheme;
5710 static int hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order;
5711 static int hf_zbee_zcl_met_configure_notification_flags_issuer_event_id;
5712 static int hf_zbee_zcl_met_configure_notification_flags_notification_scheme;
5713 static int hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id;
5714 static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_cluster_id;
5715 static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_manufacturer_code;
5716 static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_no_of_commands;
5717 static int hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_command_identifier;
5718 static int hf_zbee_zcl_met_get_notified_msg_notification_scheme;
5719 static int hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id;
5720 static int hf_zbee_zcl_met_get_notified_msg_notification_flags;
5721 static int hf_zbee_zcl_met_supply_status_response_provider_id;
5722 static int hf_zbee_zcl_met_supply_status_response_issuer_event_id;
5723 static int hf_zbee_zcl_met_supply_status_response_implementation_date_time;
5724 static int hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation;
5725 static int hf_zbee_zcl_met_snapshot_cause_general;
5726 static int hf_zbee_zcl_met_snapshot_cause_end_of_billing_period;
5727 static int hf_zbee_zcl_met_snapshot_cause_end_of_block_period;
5728 static int hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information;
5729 static int hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix;
5730 static int hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds;
5731 static int hf_zbee_zcl_met_snapshot_cause_change_of_cv;
5732 static int hf_zbee_zcl_met_snapshot_cause_change_of_cf;
5733 static int hf_zbee_zcl_met_snapshot_cause_change_of_calendar;
5734 static int hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing;
5735 static int hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client;
5736 static int hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period;
5737 static int hf_zbee_zcl_met_snapshot_cause_change_of_tenancy;
5738 static int hf_zbee_zcl_met_snapshot_cause_change_of_supplier;
5739 static int hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode;
5740 static int hf_zbee_zcl_met_snapshot_cause_debt_payment;
5741 static int hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot;
5742 static int hf_zbee_zcl_met_snapshot_cause_ota_firmware_download;
5743 static int hf_zbee_zcl_met_snapshot_cause_reserved;
5744 static int hf_zbee_zcl_met_snapshot_schedule_frequency;
5745 static int hf_zbee_zcl_met_snapshot_schedule_frequency_type;
5746 static int hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card;
5748 static int* const zbee_zcl_met_snapshot_schedule_bits[] = {
5749 &hf_zbee_zcl_met_snapshot_schedule_frequency,
5750 &hf_zbee_zcl_met_snapshot_schedule_frequency_type,
5751 &hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card,
5752 NULL
5755 static int* const zbee_zcl_met_func_noti_flags[] = {
5756 &hf_zbee_zcl_met_func_noti_flag_new_ota_firmware,
5757 &hf_zbee_zcl_met_func_noti_flag_cbke_update_request,
5758 &hf_zbee_zcl_met_func_noti_flag_time_sync,
5759 &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han,
5760 &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan,
5761 &hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set,
5762 &hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set,
5763 &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster,
5764 &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster,
5765 &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster,
5766 &hf_zbee_zcl_met_func_noti_flag_network_key_active,
5767 &hf_zbee_zcl_met_func_noti_flag_display_message,
5768 &hf_zbee_zcl_met_func_noti_flag_cancel_all_messages,
5769 &hf_zbee_zcl_met_func_noti_flag_change_supply,
5770 &hf_zbee_zcl_met_func_noti_flag_local_change_supply,
5771 &hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold,
5772 &hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending,
5773 &hf_zbee_zcl_met_func_noti_flag_get_snapshot,
5774 &hf_zbee_zcl_met_func_noti_flag_get_sampled_data,
5775 &hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available,
5776 &hf_zbee_zcl_met_func_noti_flag_energy_scan_pending,
5777 &hf_zbee_zcl_met_func_noti_flag_channel_change_pending,
5778 &hf_zbee_zcl_met_func_noti_flag_reserved,
5779 NULL
5782 static int* const zbee_zcl_met_noti_flags_2[] = {
5783 &hf_zbee_zcl_met_noti_flag_2_publish_price,
5784 &hf_zbee_zcl_met_noti_flag_2_publish_block_period,
5785 &hf_zbee_zcl_met_noti_flag_2_publish_tariff_info,
5786 &hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor,
5787 &hf_zbee_zcl_met_noti_flag_2_publish_calorific_value,
5788 &hf_zbee_zcl_met_noti_flag_2_publish_co2_value,
5789 &hf_zbee_zcl_met_noti_flag_2_publish_billing_period,
5790 &hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill,
5791 &hf_zbee_zcl_met_noti_flag_2_publish_price_matrix,
5792 &hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds,
5793 &hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion,
5794 &hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info,
5795 &hf_zbee_zcl_met_noti_flag_2_publish_cpp_event,
5796 &hf_zbee_zcl_met_noti_flag_2_publish_tier_labels,
5797 &hf_zbee_zcl_met_noti_flag_2_cancel_tariff,
5798 &hf_zbee_zcl_met_noti_flag_2_reserved,
5799 NULL
5802 static int* const zbee_zcl_met_noti_flags_3[] = {
5803 &hf_zbee_zcl_met_noti_flag_3_publish_calendar,
5804 &hf_zbee_zcl_met_noti_flag_3_publish_special_days,
5805 &hf_zbee_zcl_met_noti_flag_3_publish_seasons,
5806 &hf_zbee_zcl_met_noti_flag_3_publish_week,
5807 &hf_zbee_zcl_met_noti_flag_3_publish_day,
5808 &hf_zbee_zcl_met_noti_flag_3_cancel_calendar,
5809 &hf_zbee_zcl_met_noti_flag_3_reserved,
5810 NULL
5813 static int* const zbee_zcl_met_noti_flags_4[] = {
5814 &hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit,
5815 &hf_zbee_zcl_met_noti_flag_4_change_debt,
5816 &hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup,
5817 &hf_zbee_zcl_met_noti_flag_4_consumer_top_up,
5818 &hf_zbee_zcl_met_noti_flag_4_credit_adjustment,
5819 &hf_zbee_zcl_met_noti_flag_4_change_payment_mode,
5820 &hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot,
5821 &hf_zbee_zcl_met_noti_flag_4_get_top_up_log,
5822 &hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level,
5823 &hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log,
5824 &hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit,
5825 &hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap,
5826 &hf_zbee_zcl_met_noti_flag_4_reserved,
5827 NULL
5830 static int* const zbee_zcl_met_noti_flags_5[] = {
5831 &hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy,
5832 &hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier,
5833 &hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response,
5834 &hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response,
5835 &hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response,
5836 &hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response,
5837 &hf_zbee_zcl_met_noti_flag_5_update_site_id,
5838 &hf_zbee_zcl_met_noti_flag_5_reset_battery_counter,
5839 &hf_zbee_zcl_met_noti_flag_5_update_cin,
5840 &hf_zbee_zcl_met_noti_flag_5_reserved,
5841 NULL
5844 static int* const zbee_zcl_met_snapshot_cause_flags[] = {
5845 &hf_zbee_zcl_met_snapshot_cause_general,
5846 &hf_zbee_zcl_met_snapshot_cause_end_of_billing_period,
5847 &hf_zbee_zcl_met_snapshot_cause_end_of_block_period,
5848 &hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information,
5849 &hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix,
5850 &hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds,
5851 &hf_zbee_zcl_met_snapshot_cause_change_of_cv,
5852 &hf_zbee_zcl_met_snapshot_cause_change_of_cf,
5853 &hf_zbee_zcl_met_snapshot_cause_change_of_calendar,
5854 &hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing,
5855 &hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client,
5856 &hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period,
5857 &hf_zbee_zcl_met_snapshot_cause_change_of_tenancy,
5858 &hf_zbee_zcl_met_snapshot_cause_change_of_supplier,
5859 &hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode,
5860 &hf_zbee_zcl_met_snapshot_cause_debt_payment,
5861 &hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot,
5862 &hf_zbee_zcl_met_snapshot_cause_ota_firmware_download,
5863 &hf_zbee_zcl_met_snapshot_cause_reserved,
5864 NULL
5867 /* Initialize the subtree pointers */
5868 static int ett_zbee_zcl_met;
5869 static int ett_zbee_zcl_met_func_noti_flags;
5870 static int ett_zbee_zcl_met_noti_flags_2;
5871 static int ett_zbee_zcl_met_noti_flags_3;
5872 static int ett_zbee_zcl_met_noti_flags_4;
5873 static int ett_zbee_zcl_met_noti_flags_5;
5874 static int ett_zbee_zcl_met_snapshot_cause_flags;
5875 static int ett_zbee_zcl_met_snapshot_schedule;
5876 static int ett_zbee_zcl_met_schedule_snapshot_response_payload;
5877 static int ett_zbee_zcl_met_schedule_snapshot_payload;
5878 static int ett_zbee_zcl_met_mirror_noti_flag;
5879 static int ett_zbee_zcl_met_bit_field_allocation;
5881 /*************************/
5882 /* Function Bodies */
5883 /*************************/
5886 *This function is called by ZCL foundation dissector in order to decode
5888 *@param tree pointer to data tree Wireshark uses to display packet.
5889 *@param tvb pointer to buffer containing raw packet.
5890 *@param offset pointer to buffer offset
5891 *@param attr_id attribute identifier
5892 *@param data_type attribute data type
5893 *@param client_attr ZCL client
5895 static void
5896 dissect_zcl_met_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
5898 if (client_attr) {
5899 switch (attr_id) {
5900 /* applies to all SE clusters */
5901 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET_CLNT:
5902 proto_tree_add_item(tree, hf_zbee_zcl_met_attr_reporting_status, tvb, *offset, 1, ENC_NA);
5903 *offset += 1;
5904 break;
5906 case ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS:
5907 proto_item_append_text(tree, ", Functional Notification Flags");
5908 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);
5909 *offset += 4;
5910 break;
5912 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2:
5913 proto_item_append_text(tree, ", Notification Flags 2");
5914 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);
5915 *offset += 4;
5916 break;
5918 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3:
5919 proto_item_append_text(tree, ", Notification Flags 3");
5920 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);
5921 *offset += 4;
5922 break;
5924 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4:
5925 proto_item_append_text(tree, ", Notification Flags 4");
5926 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);
5927 *offset += 4;
5928 break;
5930 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5:
5931 proto_item_append_text(tree, ", Notification Flags 5");
5932 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);
5933 *offset += 4;
5934 break;
5936 default: /* Catch all */
5937 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
5938 break;
5941 else {
5942 switch (attr_id) {
5943 /* applies to all SE clusters */
5944 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_MET:
5945 proto_tree_add_item(tree, hf_zbee_zcl_met_attr_reporting_status, tvb, *offset, 1, ENC_NA);
5946 *offset += 1;
5947 break;
5949 default: /* Catch all */
5950 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
5951 break;
5954 } /*dissect_zcl_met_attr_data*/
5957 *This function manages the Start Sampling Response payload.
5959 *@param tvb pointer to buffer containing raw packet.
5960 *@param tree pointer to data tree Wireshark uses to display packet.
5961 *@param offset pointer to offset from caller
5963 static void dissect_zcl_met_start_sampling_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
5965 /* Sample ID */
5966 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_response_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
5967 *offset += 2;
5968 } /*dissect_zcl_met_start_sampling_response*/
5971 *ZigBee ZCL Metering cluster dissector for wireshark.
5973 *@param tvb pointer to buffer containing raw packet.
5974 *@param pinfo pointer to packet information fields
5975 *@param tree pointer to data tree Wireshark uses to display packet.
5977 static int
5978 dissect_zbee_zcl_met(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
5980 proto_tree *payload_tree;
5981 zbee_zcl_packet *zcl;
5982 unsigned offset = 0;
5983 uint8_t cmd_id;
5984 int rem_len;
5986 /* Reject the packet if data is NULL */
5987 if (data == NULL)
5988 return 0;
5989 zcl = (zbee_zcl_packet *)data;
5990 cmd_id = zcl->cmd_id;
5992 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
5993 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
5994 /* Append the command name to the info column. */
5995 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
5996 val_to_str_const(cmd_id, zbee_zcl_met_srv_rx_cmd_names, "Unknown Command"),
5997 zcl->tran_seqno);
5999 /* Add the command ID. */
6000 proto_tree_add_uint(tree, hf_zbee_zcl_met_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
6002 /* Check is this command has a payload, than add the payload tree */
6003 rem_len = tvb_reported_length_remaining(tvb, ++offset);
6004 if (rem_len > 0) {
6005 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_met, NULL, "Payload");
6007 /* Call the appropriate command dissector */
6008 switch (cmd_id) {
6010 case ZBEE_ZCL_CMD_ID_MET_GET_PROFILE:
6011 dissect_zcl_met_get_profile(tvb, payload_tree, &offset);
6012 break;
6014 case ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR_RSP:
6015 dissect_zcl_met_request_mirror_rsp(tvb, payload_tree, &offset);
6016 break;
6018 case ZBEE_ZCL_CMD_ID_MET_MIRROR_REMOVED:
6019 dissect_zcl_met_mirror_removed(tvb, payload_tree, &offset);
6020 break;
6022 case ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE:
6023 dissect_zcl_met_request_fast_poll_mode(tvb, payload_tree, &offset);
6024 break;
6026 case ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT:
6027 dissect_zcl_met_schedule_snapshot(tvb, payload_tree, &offset);
6028 break;
6030 case ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT:
6031 dissect_zcl_met_take_snapshot(tvb, payload_tree, &offset);
6032 break;
6034 case ZBEE_ZCL_CMD_ID_MET_GET_SNAPSHOT:
6035 dissect_zcl_met_get_snapshot(tvb, payload_tree, &offset);
6036 break;
6038 case ZBEE_ZCL_CMD_ID_MET_START_SAMPLING:
6039 dissect_zcl_met_start_sampling(tvb, payload_tree, &offset);
6040 break;
6042 case ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA:
6043 dissect_zcl_met_get_sampled_data(tvb, payload_tree, &offset);
6044 break;
6046 case ZBEE_ZCL_CMD_ID_MET_MIRROR_REPORT_ATTRIBUTE_RESPONSE:
6047 dissect_zcl_met_mirror_report_attribute_response(tvb, payload_tree, &offset);
6048 break;
6050 case ZBEE_ZCL_CMD_ID_MET_RESET_LOAD_LIMIT_COUNTER:
6051 dissect_zcl_met_reset_load_limit_counter(tvb, payload_tree, &offset);
6052 break;
6054 case ZBEE_ZCL_CMD_ID_MET_CHANGE_SUPPLY:
6055 dissect_zcl_met_change_supply(tvb, payload_tree, &offset);
6056 break;
6058 case ZBEE_ZCL_CMD_ID_MET_LOCAL_CHANGE_SUPPLY:
6059 dissect_zcl_met_local_change_supply(tvb, payload_tree, &offset);
6060 break;
6062 case ZBEE_ZCL_CMD_ID_MET_SET_SUPPLY_STATUS:
6063 dissect_zcl_met_set_supply_status(tvb, payload_tree, &offset);
6064 break;
6066 case ZBEE_ZCL_CMD_ID_MET_SET_UNCONTROLLED_FLOW_THRESHOLD:
6067 dissect_zcl_met_set_uncontrolled_flow_threshold(tvb, payload_tree, &offset);
6068 break;
6070 default:
6071 break;
6075 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
6076 /* Append the command name to the info column. */
6077 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
6078 val_to_str_const(cmd_id, zbee_zcl_met_srv_tx_cmd_names, "Unknown Command"),
6079 zcl->tran_seqno);
6081 /* Add the command ID. */
6082 proto_tree_add_uint(tree, hf_zbee_zcl_met_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
6084 /* Check is this command has a payload, than add the payload tree */
6085 rem_len = tvb_reported_length_remaining(tvb, ++offset);
6086 if (rem_len > 0) {
6087 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_met, NULL, "Payload");
6089 /* Call the appropriate command dissector */
6090 switch (cmd_id) {
6092 case ZBEE_ZCL_CMD_ID_MET_GET_PROFILE_RESPONSE:
6093 dissect_zcl_met_get_profile_response(tvb, payload_tree, &offset);
6094 break;
6096 case ZBEE_ZCL_CMD_ID_MET_REQUEST_MIRROR:
6097 /* No payload */
6098 break;
6100 case ZBEE_ZCL_CMD_ID_MET_REMOVE_MIRROR:
6101 /* No payload */
6102 break;
6104 case ZBEE_ZCL_CMD_ID_MET_REQUEST_FAST_POLL_MODE_RESPONSE:
6105 dissect_zcl_met_request_fast_poll_mode_response(tvb, payload_tree, &offset);
6106 break;
6108 case ZBEE_ZCL_CMD_ID_MET_SCHEDULE_SNAPSHOT_RESPONSE:
6109 dissect_zcl_met_schedule_snapshot_response(tvb, payload_tree, &offset);
6110 break;
6112 case ZBEE_ZCL_CMD_ID_MET_TAKE_SNAPSHOT_RESPONSE:
6113 dissect_zcl_met_take_snapshot_response(tvb, payload_tree, &offset);
6114 break;
6116 case ZBEE_ZCL_CMD_ID_MET_PUBLISH_SNAPSHOT:
6117 dissect_zcl_met_publish_snapshot(tvb, payload_tree, &offset);
6118 break;
6120 case ZBEE_ZCL_CMD_ID_MET_GET_SAMPLED_DATA_RSP:
6121 dissect_zcl_met_get_sampled_data_rsp(tvb, payload_tree, &offset);
6122 break;
6124 case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_MIRROR:
6125 dissect_zcl_met_configure_mirror(tvb, payload_tree, &offset);
6126 break;
6128 case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_SCHEME:
6129 dissect_zcl_met_configure_notification_scheme(tvb, payload_tree, &offset);
6130 break;
6132 case ZBEE_ZCL_CMD_ID_MET_CONFIGURE_NOTIFICATION_FLAGS:
6133 dissect_zcl_met_configure_notification_flags(tvb, payload_tree, &offset);
6134 break;
6136 case ZBEE_ZCL_CMD_ID_MET_GET_NOTIFIED_MESSAGE:
6137 dissect_zcl_met_get_notified_msg(tvb, payload_tree, &offset);
6138 break;
6140 case ZBEE_ZCL_CMD_ID_MET_SUPPLY_STATUS_RESPONSE:
6141 dissect_zcl_met_supply_status_response(tvb, payload_tree, &offset);
6142 break;
6144 case ZBEE_ZCL_CMD_ID_MET_START_SAMPLING_RESPONSE:
6145 dissect_zcl_met_start_sampling_response(tvb, payload_tree, &offset);
6146 break;
6148 default:
6149 break;
6154 return tvb_captured_length(tvb);
6155 } /*dissect_zbee_zcl_met*/
6158 *This function manages the Get Profile payload
6160 *@param tvb pointer to buffer containing raw packet.
6161 *@param tree pointer to data tree Wireshark uses to display packet.
6162 *@param offset pointer to offset from caller
6164 static void
6165 dissect_zcl_met_get_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6167 /* Interval Channel */
6168 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_interval_channel, tvb, *offset, 1, ENC_NA);
6169 *offset += 1;
6171 /* End Time */
6172 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6173 *offset += 4;
6175 /* Number of Periods */
6176 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_number_of_periods, tvb, *offset, 1, ENC_NA);
6177 *offset += 1;
6178 } /*dissect_zcl_met_get_profile*/
6181 *This function manages the Request Mirror Response payload
6183 *@param tvb pointer to buffer containing raw packet.
6184 *@param tree pointer to data tree Wireshark uses to display packet.
6185 *@param offset pointer to offset from caller
6187 static void
6188 dissect_zcl_met_request_mirror_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6190 /* EndPoint ID */
6191 proto_tree_add_item(tree, hf_zbee_zcl_met_request_mirror_rsp_endpoint_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6192 *offset += 2;
6193 } /*dissect_zcl_met_request_mirror_rsp*/
6196 *This function manages the Mirror Removed payload
6198 *@param tvb pointer to buffer containing raw packet.
6199 *@param tree pointer to data tree Wireshark uses to display packet.
6200 *@param offset pointer to offset from caller
6202 static void
6203 dissect_zcl_met_mirror_removed(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6205 /* Removed EndPoint ID */
6206 proto_tree_add_item(tree, hf_zbee_zcl_met_mirror_removed_removed_endpoint_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6207 *offset += 2;
6208 } /*dissect_zcl_met_mirror_removed*/
6211 *This function manages the Request Fast Poll Mode payload
6213 *@param tvb pointer to buffer containing raw packet.
6214 *@param tree pointer to data tree Wireshark uses to display packet.
6215 *@param offset pointer to offset from caller
6217 static void
6218 dissect_zcl_met_request_fast_poll_mode(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6220 /* Fast Poll Update Period */
6221 proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period, tvb, *offset, 1, ENC_NA);
6222 *offset += 1;
6224 /* Duration */
6225 proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_duration, tvb, *offset, 1, ENC_NA);
6226 *offset += 1;
6227 } /*dissect_zcl_met_request_fast_poll_mode*/
6230 *This function manages the Schedule Snapshot payload
6232 *@param tvb pointer to buffer containing raw packet.
6233 *@param tree pointer to data tree Wireshark uses to display packet.
6234 *@param offset pointer to offset from caller
6236 static void
6237 dissect_zcl_met_schedule_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6239 /* Issue Event ID */
6240 proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6241 *offset += 4;
6243 /* Command Index */
6244 proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_command_index, tvb, *offset, 1, ENC_NA);
6245 *offset += 1;
6247 /* Total Number of Commands */
6248 proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands, tvb, *offset, 1, ENC_NA);
6249 *offset += 1;
6251 /* Snapshot Schedule Payload */
6252 proto_tree *payload_tree;
6254 payload_tree = proto_tree_add_subtree(tree, tvb, *offset, 13,
6255 ett_zbee_zcl_met_schedule_snapshot_payload, NULL, "Snapshot Schedule Payload");
6257 /* Snapshot Schedule ID */
6258 proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id,
6259 tvb, *offset, 1, ENC_NA);
6260 *offset += 1;
6262 /* Snapshot Start Time */
6263 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);
6264 *offset += 4;
6266 /* Snapshot Schedule */
6267 proto_tree_add_bitmask(payload_tree, tvb, *offset, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule,
6268 ett_zbee_zcl_met_snapshot_schedule,
6269 zbee_zcl_met_snapshot_schedule_bits, ENC_LITTLE_ENDIAN);
6270 *offset += 3;
6272 /* Snapshot Payload Type */
6273 proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type,
6274 tvb, *offset, 1, ENC_NA);
6275 *offset += 1;
6277 /* Snapshot Cause */
6278 proto_tree_add_bitmask(payload_tree, tvb, *offset, hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause,
6279 ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6280 *offset += 4;
6282 } /*dissect_zcl_met_schedule_snapshot*/
6285 *This function manages the Take Snapshot payload
6287 *@param tvb pointer to buffer containing raw packet.
6288 *@param tree pointer to data tree Wireshark uses to display packet.
6289 *@param offset pointer to offset from caller
6291 static void
6292 dissect_zcl_met_take_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6294 /* Snapshot Cause */
6295 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_take_snapshot_snapshot_cause,
6296 ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6297 *offset += 4;
6298 } /*dissect_zcl_met_take_snapshot*/
6301 *This function manages the Get Snapshot payload
6303 *@param tvb pointer to buffer containing raw packet.
6304 *@param tree pointer to data tree Wireshark uses to display packet.
6305 *@param offset pointer to offset from caller
6307 static void
6308 dissect_zcl_met_get_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6310 /* Start Time */
6311 proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6312 *offset += 4;
6314 if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
6315 /* End Time - Introduced from ZCL version 1.2 */
6316 proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6317 *offset += 4;
6320 /* Snapshot Offset */
6321 proto_tree_add_item(tree, hf_zbee_zcl_met_get_snapshot_snapshot_offset, tvb, *offset, 1, ENC_NA);
6322 *offset += 1;
6324 /* Snapshot Cause */
6325 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_get_snapshot_snapshot_cause,
6326 ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6327 *offset += 4;
6328 } /*dissect_zcl_met_get_snapshot*/
6331 *This function manages the Start Sampling payload
6333 *@param tvb pointer to buffer containing raw packet.
6334 *@param tree pointer to data tree Wireshark uses to display packet.
6335 *@param offset pointer to offset from caller
6337 static void
6338 dissect_zcl_met_start_sampling(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6340 /* Issuer Event ID */
6341 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6342 *offset += 4;
6344 /* Start Sampling Time */
6345 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_start_sampling_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6346 *offset += 4;
6348 /* Sample Type */
6349 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_sample_type, tvb, *offset, 1, ENC_NA);
6350 *offset += 1;
6352 /* Sample Request Interval */
6353 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_sample_request_interval, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6354 *offset += 2;
6356 /* Max Number of Samples */
6357 proto_tree_add_item(tree, hf_zbee_zcl_met_start_sampling_max_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6358 *offset += 2;
6359 } /*dissect_zcl_met_start_sampling*/
6362 *This function manages the Get Sampled Data payload
6364 *@param tvb pointer to buffer containing raw packet.
6365 *@param tree pointer to data tree Wireshark uses to display packet.
6366 *@param offset pointer to offset from caller
6368 static void
6369 dissect_zcl_met_get_sampled_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6371 /* Sample ID */
6372 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6373 *offset += 2;
6375 /* Sample Start Time */
6376 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);
6377 *offset += 4;
6379 /* Sample Type */
6380 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_sample_type, tvb, *offset, 1, ENC_NA);
6381 *offset += 1;
6383 /* Number of Samples */
6384 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6385 *offset += 2;
6386 } /*dissect_zcl_met_get_sampled_data*/
6389 *This function manages the Mirror Report Attribute Response payload
6391 *@param tvb pointer to buffer containing raw packet.
6392 *@param tree pointer to data tree Wireshark uses to display packet.
6393 *@param offset pointer to offset from caller
6395 static void
6396 dissect_zcl_met_mirror_report_attribute_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6398 uint8_t notif_scheme_type;
6399 int noti_flags_count;
6401 notif_scheme_type = tvb_get_uint8(tvb, *offset);
6402 /* Notification Scheme */
6403 proto_tree_add_item(tree, hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme, tvb, *offset, 1, ENC_NA);
6404 *offset += 1;
6406 switch(notif_scheme_type) {
6407 case ZBEE_ZCL_MET_NOTIFICATION_SCHEME_A:
6408 noti_flags_count = 1;
6409 break;
6410 case ZBEE_ZCL_MET_NOTIFICATION_SCHEME_B:
6411 noti_flags_count = 5;
6412 break;
6413 default:
6414 noti_flags_count = -1;
6415 break;
6417 if (noti_flags_count > 0) {
6418 for (uint16_t noti_flags_number = 0; noti_flags_number < noti_flags_count; noti_flags_number++) {
6419 dissect_zcl_met_notification_flags(tvb, tree, offset, noti_flags_number);
6421 } else {
6422 /* Notification Flag */
6423 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6424 proto_tree *notification_flag_tree;
6425 notification_flag_tree = proto_tree_add_subtree(tree, tvb, *offset, 4, ett_zbee_zcl_met_mirror_noti_flag, NULL, "Notification Flags");
6426 proto_tree_add_item(notification_flag_tree, hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n,
6427 tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6428 *offset += 4;
6431 } /*dissect_zcl_met_mirror_report_attribute_response*/
6434 *This function manages the Reset Load Limit Counter payload
6436 *@param tvb pointer to buffer containing raw packet.
6437 *@param tree pointer to data tree Wireshark uses to display packet.
6438 *@param offset pointer to offset from caller
6440 static void
6441 dissect_zcl_met_reset_load_limit_counter(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6443 /* Provider ID */
6444 proto_tree_add_item(tree, hf_zbee_zcl_met_reset_load_limit_counter_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6445 *offset += 4;
6447 /* Issuer Event ID */
6448 proto_tree_add_item(tree, hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6449 *offset += 4;
6450 } /*dissect_zcl_met_reset_load_limit_counter*/
6453 *This function manages the Change Supply payload
6455 *@param tvb pointer to buffer containing raw packet.
6456 *@param tree pointer to data tree Wireshark uses to display packet.
6457 *@param offset pointer to offset from caller
6459 static void
6460 dissect_zcl_met_change_supply(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6462 /* Provider ID */
6463 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6464 *offset += 4;
6466 /* Issuer Event ID */
6467 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6468 *offset += 4;
6470 /* Request Date/Time */
6471 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_request_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6472 *offset += 4;
6474 /* Implementation Date/Time */
6475 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_implementation_date_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6476 *offset += 4;
6478 /* Proposed Supple Status */
6479 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_proposed_supply_status, tvb, *offset, 1, ENC_NA);
6480 *offset += 1;
6482 /* Supple Control Bits */
6483 proto_tree_add_item(tree, hf_zbee_zcl_met_change_supply_supply_control_bits, tvb, *offset, 1, ENC_NA);
6484 *offset += 1;
6485 } /*dissect_zcl_met_change_supply*/
6488 *This function manages the Local Change Supply payload
6490 *@param tvb pointer to buffer containing raw packet.
6491 *@param tree pointer to data tree Wireshark uses to display packet.
6492 *@param offset pointer to offset from caller
6494 static void
6495 dissect_zcl_met_local_change_supply(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6497 /* Proposed Supply Status */
6498 proto_tree_add_item(tree, hf_zbee_zcl_met_local_change_supply_proposed_supply_status, tvb, *offset, 1, ENC_NA);
6499 *offset += 1;
6500 } /*dissect_zcl_met_local_change_supply*/
6503 *This function manages the Set Supply Status payload
6505 *@param tvb pointer to buffer containing raw packet.
6506 *@param tree pointer to data tree Wireshark uses to display packet.
6507 *@param offset pointer to offset from caller
6509 static void
6510 dissect_zcl_met_set_supply_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6512 /* Issuer Event ID */
6513 proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6514 *offset += 4;
6516 /* Supply Tamper State */
6517 proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_tamper_state, tvb, *offset, 1, ENC_NA);
6518 *offset += 1;
6520 /* Supply Depletion State */
6521 proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_depletion_state, tvb, *offset, 1, ENC_NA);
6522 *offset += 1;
6524 /* Supply Uncontrolled Flow State */
6525 proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state, tvb, *offset, 1, ENC_NA);
6526 *offset += 1;
6528 /* Load Limit Supply State */
6529 proto_tree_add_item(tree, hf_zbee_zcl_met_set_supply_status_load_limit_supply_state, tvb, *offset, 1, ENC_NA);
6530 *offset += 1;
6531 } /*dissect_zcl_met_set_supply_status*/
6534 *This function manages the Set Uncontrolled Flow Threshold payload
6536 *@param tvb pointer to buffer containing raw packet.
6537 *@param tree pointer to data tree Wireshark uses to display packet.
6538 *@param offset pointer to offset from caller
6540 static void
6541 dissect_zcl_met_set_uncontrolled_flow_threshold(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6543 /* Provider ID */
6544 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6545 *offset += 4;
6547 /* Issuer Event ID */
6548 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6549 *offset += 4;
6551 /* Uncontrolled Flow Threshold */
6552 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6553 *offset += 2;
6555 /* Unit of Measure */
6556 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure, tvb, *offset, 1, ENC_NA);
6557 *offset += 1;
6559 /* Multiplier */
6560 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6561 *offset += 2;
6563 /* Divisor */
6564 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6565 *offset += 2;
6567 /* Stabilisation Period */
6568 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period, tvb, *offset, 1, ENC_NA);
6569 *offset += 1;
6571 /* Measurement Period */
6572 proto_tree_add_item(tree, hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6573 *offset += 2;
6574 } /*dissect_zcl_met_set_uncontrolled_flow_threshold*/
6577 *This function manages the Get Profile Response payload
6579 *@param tvb pointer to buffer containing raw packet.
6580 *@param tree pointer to data tree Wireshark uses to display packet.
6581 *@param offset pointer to offset from caller
6583 static void
6584 dissect_zcl_met_get_profile_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6587 /* End Time */
6588 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_end_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6589 *offset += 4;
6591 /* Status */
6592 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_status, tvb, *offset, 1, ENC_NA);
6593 *offset += 1;
6595 /* Profile Interval Period */
6596 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_profile_interval_period, tvb, *offset, 1, ENC_NA);
6597 *offset += 1;
6599 /* Number of Periods Delivered */
6600 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered, tvb, *offset, 1, ENC_NA);
6601 *offset += 1;
6603 /* Intervals */
6604 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6605 proto_tree_add_item(tree, hf_zbee_zcl_met_get_profile_response_intervals, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
6606 *offset += 3;
6608 } /*dissect_zcl_met_get_profile_response*/
6611 *This function manages the Request Fast Poll Mode Response payload
6613 *@param tvb pointer to buffer containing raw packet.
6614 *@param tree pointer to data tree Wireshark uses to display packet.
6615 *@param offset pointer to offset from caller
6617 static void
6618 dissect_zcl_met_request_fast_poll_mode_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6620 uint32_t end_time_utc;
6621 nstime_t end_time;
6622 const uint8_t *end_time_string;
6624 /* Applied Update Period */
6625 proto_tree_add_item(tree, hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period, tvb, *offset, 1, ENC_NA);
6626 *offset += 1;
6628 /* Fast Poll End Time */
6629 end_time_utc = (uint32_t)tvb_get_letohl(tvb, *offset);
6630 end_time.secs = end_time_utc + EPOCH_DELTA_2000_01_01_00_00_00_UTC;
6631 end_time.nsecs = 0;
6632 end_time_string = (const uint8_t *)abs_time_to_str(wmem_packet_scope(), &end_time, ABSOLUTE_TIME_UTC, true);
6633 proto_tree_add_time_format(tree, hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time, tvb, *offset, 4, &end_time,
6634 "Fast Poll Mode End Time: %s (%u)", end_time_string, end_time_utc);
6635 *offset += 4;
6636 } /*dissect_zcl_met_request_fast_poll_mode_response*/
6639 *This function manages the Schedule Snapshot Response payload
6641 *@param tvb pointer to buffer containing raw packet.
6642 *@param tree pointer to data tree Wireshark uses to display packet.
6643 *@param offset pointer to offset from caller
6645 static void
6646 dissect_zcl_met_schedule_snapshot_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6648 /* Issuer Event ID */
6649 proto_tree_add_item(tree, hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6650 *offset += 4;
6652 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
6653 proto_tree *payload_tree;
6655 payload_tree = proto_tree_add_subtree(tree, tvb, *offset, 2,
6656 ett_zbee_zcl_met_schedule_snapshot_response_payload, NULL, "Snapshot Response Payload");
6658 /* Snapshot Schedule ID */
6659 proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id, tvb, *offset, 1, ENC_NA);
6660 *offset += 1;
6662 /* Snapshot Schedule Confirmation */
6663 proto_tree_add_item(payload_tree, hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation, tvb, *offset, 1, ENC_NA);
6664 *offset += 1;
6666 } /*dissect_zcl_met_schedule_snapshot_response*/
6669 *This function manages the Take Snapshot Response payload
6671 *@param tvb pointer to buffer containing raw packet.
6672 *@param tree pointer to data tree Wireshark uses to display packet.
6673 *@param offset pointer to offset from caller
6675 static void
6676 dissect_zcl_met_take_snapshot_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6678 /* Snapshot ID */
6679 proto_tree_add_item(tree, hf_zbee_zcl_met_take_snapshot_response_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6680 *offset += 4;
6682 /* Snapshot Confirmation */
6683 proto_tree_add_item(tree, hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation, tvb, *offset, 1, ENC_NA);
6684 *offset += 1;
6685 } /*dissect_zcl_met_take_snapshot_response*/
6688 *This function manages the Publish Snapshot payload
6690 *@param tvb pointer to buffer containing raw packet.
6691 *@param tree pointer to data tree Wireshark uses to display packet.
6692 *@param offset pointer to offset from caller
6694 static void
6695 dissect_zcl_met_publish_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6697 int rem_len;
6699 /* Snapshot ID */
6700 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6701 *offset += 4;
6703 /* Snapshot Time */
6704 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
6705 *offset += 4;
6707 /* Total Snapshots Found */
6708 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshots_found, tvb, *offset, 1, ENC_NA);
6709 *offset += 1;
6711 /* Command Index */
6712 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_cmd_index, tvb, *offset, 1, ENC_NA);
6713 *offset += 1;
6715 /* Total Number of Commands */
6716 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_total_commands, tvb, *offset, 1, ENC_NA);
6717 *offset += 1;
6719 /* Snapshot Cause */
6720 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_met_publish_snapshot_snapshot_cause,
6721 ett_zbee_zcl_met_snapshot_cause_flags, zbee_zcl_met_snapshot_cause_flags, ENC_LITTLE_ENDIAN);
6722 *offset += 4;
6724 /* Snapshot Payload Type */
6725 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type, tvb, *offset, 1, ENC_NA);
6726 *offset += 1;
6728 /* Snapshot Sub-Payload */
6729 rem_len = tvb_reported_length_remaining(tvb, *offset);
6730 proto_tree_add_item(tree, hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload, tvb, *offset, rem_len, ENC_NA);
6731 *offset += rem_len;
6732 } /*dissect_zcl_met_publish_snapshot*/
6735 *This function manages the Get Sampled Data Response payload
6737 *@param tvb pointer to buffer containing raw packet.
6738 *@param tree pointer to data tree Wireshark uses to display packet.
6739 *@param offset pointer to offset from caller
6741 static void
6742 dissect_zcl_met_get_sampled_data_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6744 int rem_len;
6746 /* Snapshot ID */
6747 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6748 *offset += 2;
6750 /* Sample Start Time */
6751 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);
6752 *offset += 4;
6754 /* Sample Type */
6755 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_type, tvb, *offset, 1, ENC_NA);
6756 *offset += 1;
6758 /* Sample Request Interval */
6759 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6760 *offset += 2;
6762 /* Number of Samples */
6763 proto_tree_add_item(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6764 *offset += 2;
6766 /* Samples */
6767 rem_len = tvb_reported_length_remaining(tvb, *offset);
6768 while (rem_len >= 3) {
6769 uint32_t val = tvb_get_uint24(tvb, *offset, ENC_LITTLE_ENDIAN);
6770 proto_tree_add_uint(tree, hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples, tvb, *offset, 3, val);
6771 *offset += 3;
6772 rem_len -= 3;
6774 } /*dissect_zcl_met_get_sampled_data_rsp*/
6777 *This function manages the Configure Mirror payload
6779 *@param tvb pointer to buffer containing raw packet.
6780 *@param tree pointer to data tree Wireshark uses to display packet.
6781 *@param offset pointer to offset from caller
6783 static void
6784 dissect_zcl_met_configure_mirror(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6786 /* Issuer Event ID */
6787 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6788 *offset += 4;
6790 /* Reporting Interval */
6791 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_reporting_interval, tvb, *offset, 3, ENC_LITTLE_ENDIAN);
6792 *offset += 3;
6794 /* Mirror Notification Reporting */
6795 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting, tvb, *offset, 1, ENC_NA);
6796 *offset += 1;
6798 /* Notification Scheme */
6799 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_mirror_notification_scheme, tvb, *offset, 1, ENC_NA);
6800 *offset += 1;
6801 } /*dissect_zcl_met_configure_mirror*/
6804 *This function manages the Configure Notification Scheme payload
6806 *@param tvb pointer to buffer containing raw packet.
6807 *@param tree pointer to data tree Wireshark uses to display packet.
6808 *@param offset pointer to offset from caller
6810 static void
6811 dissect_zcl_met_configure_notification_scheme(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6813 /* Issuer Event ID */
6814 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6815 *offset += 4;
6817 /* Notification Scheme */
6818 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_notification_scheme, tvb, *offset, 1, ENC_NA);
6819 *offset += 1;
6821 /* Notification Flag Order */
6822 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6823 *offset += 4;
6824 } /*dissect_zcl_met_configure_notification_scheme*/
6827 *This function manages the Configure Notification Flags payload
6829 *@param tvb pointer to buffer containing raw packet.
6830 *@param tree pointer to data tree Wireshark uses to display packet.
6831 *@param offset pointer to offset from caller
6833 static void
6834 dissect_zcl_met_configure_notification_flags(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6836 proto_tree *bit_field_allocation_tree;
6837 int rem_len;
6839 /* Issuer Event ID */
6840 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6841 *offset += 4;
6843 /* Notification Scheme */
6844 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_notification_scheme, tvb, *offset, 1, ENC_NA);
6845 *offset += 1;
6847 /* Notification Attribute ID */
6848 proto_tree_add_item(tree, hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6849 *offset += 2;
6851 bit_field_allocation_tree = proto_tree_add_subtree(tree, tvb, *offset, -1, ett_zbee_zcl_met_bit_field_allocation, NULL, "Bit Field Allocation");
6853 /* Cluster ID */
6854 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);
6855 *offset += 2;
6857 /* Manufacturer Code */
6858 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);
6859 *offset += 2;
6861 /* No. of Commands */
6862 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);
6863 *offset += 1;
6865 rem_len = tvb_reported_length_remaining(tvb, *offset);
6866 while (rem_len >= 1) {
6867 /* Command Identifier */
6868 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);
6869 *offset += 1;
6870 rem_len -= 1;
6872 } /*dissect_zcl_met_configure_notification_flags*/
6874 static void
6875 dissect_zcl_met_notification_flags(tvbuff_t *tvb, proto_tree *tree, unsigned *offset, uint16_t noti_flags_number)
6877 /* Notification Flags #N */
6878 switch (noti_flags_number) {
6879 case ZBEE_ZCL_ATTR_ID_MET_CLNT_FUNC_NOTI_FLAGS:
6880 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);
6881 break;
6882 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_2:
6883 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);
6884 break;
6885 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_3:
6886 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);
6887 break;
6888 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_4:
6889 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);
6890 break;
6891 case ZBEE_ZCL_ATTR_ID_MET_CLNT_NOTI_FLAGS_5:
6892 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);
6893 break;
6894 default:
6895 proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_flags, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6896 break;
6898 *offset += 4;
6903 *This function manages the Get Notified Message payload
6905 *@param tvb pointer to buffer containing raw packet.
6906 *@param tree pointer to data tree Wireshark uses to display packet.
6907 *@param offset pointer to offset from caller
6909 static void
6910 dissect_zcl_met_get_notified_msg(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6912 uint16_t noti_flags_number;
6914 /* Notification Scheme */
6915 proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_scheme, tvb, *offset, 1, ENC_NA);
6916 *offset += 1;
6918 /* Notification Flag attribute ID */
6919 noti_flags_number = tvb_get_uint16(tvb, *offset, ENC_LITTLE_ENDIAN);
6920 proto_tree_add_item(tree, hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
6921 *offset += 2;
6923 dissect_zcl_met_notification_flags(tvb, tree, offset, noti_flags_number);
6924 } /*dissect_zcl_met_get_notified_msg*/
6927 *This function manages the Supply Status Response payload
6929 *@param tvb pointer to buffer containing raw packet.
6930 *@param tree pointer to data tree Wireshark uses to display packet.
6931 *@param offset pointer to offset from caller
6933 static void
6934 dissect_zcl_met_supply_status_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
6936 /* Provider ID */
6937 proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6938 *offset += 4;
6940 /* Issuer Event ID */
6941 proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
6942 *offset += 4;
6944 /* Implementation Date/Time */
6945 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);
6946 *offset += 4;
6948 /* Supply Status After Implementation */
6949 proto_tree_add_item(tree, hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation, tvb, *offset, 1, ENC_NA);
6950 *offset += 1;
6951 } /*dissect_zcl_met_supply_status_response*/
6954 *This function registers the ZCL Metering dissector
6957 void
6958 proto_register_zbee_zcl_met(void)
6960 static hf_register_info hf[] = {
6962 { &hf_zbee_zcl_met_attr_server_id,
6963 { "Attribute", "zbee_zcl_se.met.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_met_attr_server_names_ext,
6964 0x0, NULL, HFILL } },
6966 { &hf_zbee_zcl_met_attr_client_id,
6967 { "Attribute", "zbee_zcl_se.met.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_met_attr_client_names),
6968 0x0, NULL, HFILL } },
6970 { &hf_zbee_zcl_met_attr_reporting_status, /* common to all SE clusters */
6971 { "Attribute Reporting Status", "zbee_zcl_se.met.attr.attr_reporting_status",
6972 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
6974 /* Functional Notification Flags */
6975 { &hf_zbee_zcl_met_func_noti_flags,
6976 { "Functional Notification Flags", "zbee_zcl_se.met.attr.func_noti_flag", FT_UINT32, BASE_HEX, NULL,
6977 0x00, NULL, HFILL } },
6979 { &hf_zbee_zcl_met_func_noti_flag_new_ota_firmware,
6980 { "New OTA Firmware", "zbee_zcl_se.met.attr.func_noti_flag.new_ota_firmware", FT_BOOLEAN, 32, NULL,
6981 ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_OTA_FIRMWARE, NULL, HFILL } },
6983 { &hf_zbee_zcl_met_func_noti_flag_cbke_update_request,
6984 { "CBKE Update Request", "zbee_zcl_se.met.attr.func_noti_flag.cbke_update_request", FT_BOOLEAN, 32, NULL,
6985 ZBEE_ZCL_FUNC_NOTI_FLAG_CBKE_UPDATE_REQUESTED, NULL, HFILL } },
6987 { &hf_zbee_zcl_met_func_noti_flag_time_sync,
6988 { "Time Sync", "zbee_zcl_se.met.attr.func_noti_flag.time_sync", FT_BOOLEAN, 32, NULL,
6989 ZBEE_ZCL_FUNC_NOTI_FLAG_TIME_SYNC, NULL, HFILL } },
6991 { &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_han,
6992 { "Stay Awake Request HAN", "zbee_zcl_se.met.attr.func_noti_flag.stay_awake_request_han", FT_BOOLEAN, 32, NULL,
6993 ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_HAN, NULL, HFILL } },
6995 { &hf_zbee_zcl_met_func_noti_flag_stay_awake_request_wan,
6996 { "Stay Awake Request WAN", "zbee_zcl_se.met.attr.func_noti_flag.stay_awake_request_wan", FT_BOOLEAN, 32, NULL,
6997 ZBEE_ZCL_FUNC_NOTI_FLAG_STAY_AWAKE_REQUEST_WAN, NULL, HFILL } },
6999 { &hf_zbee_zcl_met_func_noti_flag_push_historical_metering_data_attribute_set,
7000 { "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,
7001 ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_METERING_DATA_ATTRIBUTE_SET, NULL, HFILL } },
7003 { &hf_zbee_zcl_met_func_noti_flag_push_historical_prepayment_data_attribute_set,
7004 { "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,
7005 ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_HISTORICAL_PREPAYMENT_DATA_ATTRIBUTE_SET, NULL, HFILL } },
7007 { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_basic_cluster,
7008 { "Push All Static Data - Basic Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_basic_cluster", FT_BOOLEAN, 32, NULL,
7009 ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_BASIC_CLUSTER, NULL, HFILL } },
7011 { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_metering_cluster,
7012 { "Push All Static Data - Metering Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_metering_cluster", FT_BOOLEAN, 32, NULL,
7013 ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_METERING_CLUSTER, NULL, HFILL } },
7015 { &hf_zbee_zcl_met_func_noti_flag_push_all_static_data_prepayment_cluster,
7016 { "Push All Static Data - Prepayment Cluster", "zbee_zcl_se.met.attr.func_noti_flag.push_all_static_data_prepayment_cluster", FT_BOOLEAN, 32, NULL,
7017 ZBEE_ZCL_FUNC_NOTI_FLAG_PUSH_ALL_STATIC_DATA_PREPAYMENT_CLUSTER, NULL, HFILL } },
7019 { &hf_zbee_zcl_met_func_noti_flag_network_key_active,
7020 { "Network Key Active", "zbee_zcl_se.met.attr.func_noti_flag.network_key_active", FT_BOOLEAN, 32, NULL,
7021 ZBEE_ZCL_FUNC_NOTI_FLAG_NETWORK_KEY_ACTIVE, NULL, HFILL } },
7023 { &hf_zbee_zcl_met_func_noti_flag_display_message,
7024 { "Display Message", "zbee_zcl_se.met.attr.func_noti_flag.display_message", FT_BOOLEAN, 32, NULL,
7025 ZBEE_ZCL_FUNC_NOTI_FLAG_DISPLAY_MESSAGE, NULL, HFILL } },
7027 { &hf_zbee_zcl_met_func_noti_flag_cancel_all_messages,
7028 { "Cancel All Messages", "zbee_zcl_se.met.attr.func_noti_flag.cancel_all_messages", FT_BOOLEAN, 32, NULL,
7029 ZBEE_ZCL_FUNC_NOTI_FLAG_CANCEL_ALL_MESSAGES, NULL, HFILL } },
7031 { &hf_zbee_zcl_met_func_noti_flag_change_supply,
7032 { "Change Supply", "zbee_zcl_se.met.attr.func_noti_flag.change_supply", FT_BOOLEAN, 32, NULL,
7033 ZBEE_ZCL_FUNC_NOTI_FLAG_CHANGE_SUPPLY, NULL, HFILL } },
7035 { &hf_zbee_zcl_met_func_noti_flag_local_change_supply,
7036 { "Local Change Supply", "zbee_zcl_se.met.attr.func_noti_flag.local_change_supply", FT_BOOLEAN, 32, NULL,
7037 ZBEE_ZCL_FUNC_NOTI_FLAG_LOCAL_CHANGE_SUPPLY, NULL, HFILL } },
7039 { &hf_zbee_zcl_met_func_noti_flag_set_uncontrolled_flow_threshold,
7040 { "Set Uncontrolled Flow Threshold", "zbee_zcl_se.met.attr.func_noti_flag.set_uncontrolled_flow_threshold", FT_BOOLEAN, 32, NULL,
7041 ZBEE_ZCL_FUNC_NOTI_FLAG_SET_UNCONTROLLED_FLOW_THRESHOLD, NULL, HFILL } },
7043 { &hf_zbee_zcl_met_func_noti_flag_tunnel_message_pending,
7044 { "Tunnel Message Pending", "zbee_zcl_se.met.attr.func_noti_flag.tunnel_message_pending", FT_BOOLEAN, 32, NULL,
7045 ZBEE_ZCL_FUNC_NOTI_FLAG_TUNNEL_MESSAGE_PENDING, NULL, HFILL } },
7047 { &hf_zbee_zcl_met_func_noti_flag_get_snapshot,
7048 { "Get Snapshot", "zbee_zcl_se.met.attr.func_noti_flag.get_snapshot", FT_BOOLEAN, 32, NULL,
7049 ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SNAPSHOT, NULL, HFILL } },
7051 { &hf_zbee_zcl_met_func_noti_flag_get_sampled_data,
7052 { "Get Sampled Data", "zbee_zcl_se.met.attr.func_noti_flag.get_sampled_data", FT_BOOLEAN, 32, NULL,
7053 ZBEE_ZCL_FUNC_NOTI_FLAG_GET_SAMPLED_DATA, NULL, HFILL } },
7055 { &hf_zbee_zcl_met_func_noti_flag_new_sub_ghz_channel_masks_available,
7056 { "New Sub-GHz Channel Masks Available", "zbee_zcl_se.met.attr.func_noti_flag.new_sub_ghz_channel_masks_available", FT_BOOLEAN, 32, NULL,
7057 ZBEE_ZCL_FUNC_NOTI_FLAG_NEW_SUB_GHZ_CHANNEL_MASKS_AVAILABLE, NULL, HFILL } },
7059 { &hf_zbee_zcl_met_func_noti_flag_energy_scan_pending,
7060 { "Energy Scan Pending", "zbee_zcl_se.met.attr.func_noti_flag.energy_scan_pending", FT_BOOLEAN, 32, NULL,
7061 ZBEE_ZCL_FUNC_NOTI_FLAG_ENERGY_SCAN_PENDING, NULL, HFILL } },
7063 { &hf_zbee_zcl_met_func_noti_flag_channel_change_pending,
7064 { "Channel Change Pending", "zbee_zcl_se.met.attr.func_noti_flag.channel_change_pending", FT_BOOLEAN, 32, NULL,
7065 ZBEE_ZCL_FUNC_NOTI_FLAG_CHANNEL_CHANGE_PENDING, NULL, HFILL } },
7067 { &hf_zbee_zcl_met_func_noti_flag_reserved,
7068 { "Reserved", "zbee_zcl_se.met.attr.func_noti_flag.reserved", FT_UINT32, BASE_HEX, NULL,
7069 ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_1 | ZBEE_ZCL_FUNC_NOTI_FLAG_RESERVED_2, NULL, HFILL } },
7071 /* Notification Flags 2 */
7072 { &hf_zbee_zcl_met_noti_flags_2,
7073 { "Notification Flags 2", "zbee_zcl_se.met.attr.noti_flag_2", FT_UINT32, BASE_HEX, NULL,
7074 0x00, NULL, HFILL } },
7076 { &hf_zbee_zcl_met_noti_flag_2_publish_price,
7077 { "Publish Price", "zbee_zcl_se.met.attr.noti_flag_2.publish_price", FT_BOOLEAN, 32, NULL,
7078 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE, NULL, HFILL } },
7080 { &hf_zbee_zcl_met_noti_flag_2_publish_block_period,
7081 { "Publish Block Period", "zbee_zcl_se.met.attr.noti_flag_2.publish_block_period", FT_BOOLEAN, 32, NULL,
7082 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_PERIOD, NULL, HFILL } },
7084 { &hf_zbee_zcl_met_noti_flag_2_publish_tariff_info,
7085 { "Publish Tariff Information", "zbee_zcl_se.met.attr.noti_flag_2.publish_tariff_info", FT_BOOLEAN, 32, NULL,
7086 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TARIFF_INFORMATION, NULL, HFILL } },
7088 { &hf_zbee_zcl_met_noti_flag_2_publish_conversion_factor,
7089 { "Publish Conversion Factor", "zbee_zcl_se.met.attr.noti_flag_2.publish_conversion_factor", FT_BOOLEAN, 32, NULL,
7090 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONVERSION_FACTOR, NULL, HFILL } },
7092 { &hf_zbee_zcl_met_noti_flag_2_publish_calorific_value,
7093 { "Publish Calorific Value", "zbee_zcl_se.met.attr.noti_flag_2.publish_calorific_value", FT_BOOLEAN, 32, NULL,
7094 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CALORIFIC_VALUE, NULL, HFILL } },
7096 { &hf_zbee_zcl_met_noti_flag_2_publish_co2_value,
7097 { "Publish CO2 Value", "zbee_zcl_se.met.attr.noti_flag_2.publish_co2_value", FT_BOOLEAN, 32, NULL,
7098 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CO2_VALUE, NULL, HFILL } },
7100 { &hf_zbee_zcl_met_noti_flag_2_publish_billing_period,
7101 { "Publish Billing Period", "zbee_zcl_se.met.attr.noti_flag_2.publish_billing_period", FT_BOOLEAN, 32, NULL,
7102 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BILLING_PERIOD, NULL, HFILL } },
7104 { &hf_zbee_zcl_met_noti_flag_2_publish_consolidated_bill,
7105 { "Publish Consolidated Bill", "zbee_zcl_se.met.attr.noti_flag_2.publish_consolidated_bill", FT_BOOLEAN, 32, NULL,
7106 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CONSOLIDATED_BILL, NULL, HFILL } },
7108 { &hf_zbee_zcl_met_noti_flag_2_publish_price_matrix,
7109 { "Publish Price Matrix", "zbee_zcl_se.met.attr.noti_flag_2.publish_price_matrix", FT_BOOLEAN, 32, NULL,
7110 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_PRICE_MATRIX, NULL, HFILL } },
7112 { &hf_zbee_zcl_met_noti_flag_2_publish_block_thresholds,
7113 { "Publish Block Thresholds", "zbee_zcl_se.met.attr.noti_flag_2.publish_block_thresholds", FT_BOOLEAN, 32, NULL,
7114 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_BLOCK_THRESHOLDS, NULL, HFILL } },
7116 { &hf_zbee_zcl_met_noti_flag_2_publish_currency_conversion,
7117 { "Publish Currency Conversion", "zbee_zcl_se.met.attr.noti_flag_2.publish_currency_conversion", FT_BOOLEAN, 32, NULL,
7118 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CURRENCY_CONVERSION, NULL, HFILL } },
7120 { &hf_zbee_zcl_met_noti_flag_2_publish_credit_payment_info,
7121 { "Publish Credit Payment Info", "zbee_zcl_se.met.attr.noti_flag_2.publish_credit_payment_info", FT_BOOLEAN, 32, NULL,
7122 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CREDIT_PAYMENT_INFO, NULL, HFILL } },
7124 { &hf_zbee_zcl_met_noti_flag_2_publish_cpp_event,
7125 { "Publish CPP Event", "zbee_zcl_se.met.attr.noti_flag_2.publish_cpp_event", FT_BOOLEAN, 32, NULL,
7126 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_CPP_EVENT, NULL, HFILL } },
7128 { &hf_zbee_zcl_met_noti_flag_2_publish_tier_labels,
7129 { "Publish Tier Labels", "zbee_zcl_se.met.attr.noti_flag_2.publish_tier_labels", FT_BOOLEAN, 32, NULL,
7130 ZBEE_ZCL_NOTI_FLAG_2_PUBLISH_TIER_LABELS, NULL, HFILL } },
7132 { &hf_zbee_zcl_met_noti_flag_2_cancel_tariff,
7133 { "Cancel Tariff", "zbee_zcl_se.met.attr.noti_flag_2.cancel_tariff", FT_BOOLEAN, 32, NULL,
7134 ZBEE_ZCL_NOTI_FLAG_2_CANCEL_TARIFF, NULL, HFILL } },
7136 { &hf_zbee_zcl_met_noti_flag_2_reserved,
7137 { "Reserved", "zbee_zcl_se.met.attr.noti_flag_2.reserved", FT_UINT32, BASE_HEX, NULL,
7138 ZBEE_ZCL_NOTI_FLAG_2_RESERVED | ZBEE_ZCL_NOTI_FLAG_2_RESERVED_FUTURE, NULL, HFILL } },
7140 /* Notification Flags 3 */
7141 { &hf_zbee_zcl_met_noti_flags_3,
7142 { "Notification Flags 3", "zbee_zcl_se.met.attr.noti_flag_3", FT_UINT32, BASE_HEX, NULL,
7143 0x00, NULL, HFILL } },
7145 { &hf_zbee_zcl_met_noti_flag_3_publish_calendar,
7146 { "Publish Calendar", "zbee_zcl_se.met.attr.noti_flag_3.publish_calendar", FT_BOOLEAN, 32, NULL,
7147 ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_CALENDAR, NULL, HFILL } },
7149 { &hf_zbee_zcl_met_noti_flag_3_publish_special_days,
7150 { "Publish Special Days", "zbee_zcl_se.met.attr.noti_flag_3.publish_special_days", FT_BOOLEAN, 32, NULL,
7151 ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SPECIAL_DAYS, NULL, HFILL } },
7153 { &hf_zbee_zcl_met_noti_flag_3_publish_seasons,
7154 { "Publish Seasons", "zbee_zcl_se.met.attr.noti_flag_3.publish_seasons", FT_BOOLEAN, 32, NULL,
7155 ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_SEASONS, NULL, HFILL } },
7157 { &hf_zbee_zcl_met_noti_flag_3_publish_week,
7158 { "Publish Week", "zbee_zcl_se.met.attr.noti_flag_3.publish_week", FT_BOOLEAN, 32, NULL,
7159 ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_WEEK, NULL, HFILL } },
7161 { &hf_zbee_zcl_met_noti_flag_3_publish_day,
7162 { "Publish Day", "zbee_zcl_se.met.attr.noti_flag_3.publish_day", FT_BOOLEAN, 32, NULL,
7163 ZBEE_ZCL_NOTI_FLAG_3_PUBLISH_DAY, NULL, HFILL } },
7165 { &hf_zbee_zcl_met_noti_flag_3_cancel_calendar,
7166 { "Cancel Calendar", "zbee_zcl_se.met.attr.noti_flag_3.cancel_calendar", FT_BOOLEAN, 32, NULL,
7167 ZBEE_ZCL_NOTI_FLAG_3_CANCEL_DAY, NULL, HFILL } },
7169 { &hf_zbee_zcl_met_noti_flag_3_reserved,
7170 { "Reserved", "zbee_zcl_se.met.attr.noti_flag_3.reserved", FT_UINT32, BASE_HEX, NULL,
7171 ZBEE_ZCL_NOTI_FLAG_3_RESERVED , NULL, HFILL } },
7173 /* Notification Flags 4 */
7174 { &hf_zbee_zcl_met_noti_flags_4,
7175 { "Notification Flags 4", "zbee_zcl_se.met.attr.noti_flag_4", FT_UINT32, BASE_HEX, NULL,
7176 0x00, NULL, HFILL } },
7178 { &hf_zbee_zcl_met_noti_flag_4_select_available_emergency_credit,
7179 { "Select Available Emergency Credit", "zbee_zcl_se.met.attr.noti_flag_4.select_available_emergency_credit", FT_BOOLEAN, 32, NULL,
7180 ZBEE_ZCL_NOTI_FLAG_4_SELECT_AVAILABLE_EMERGENCY_CREDIT, NULL, HFILL } },
7182 { &hf_zbee_zcl_met_noti_flag_4_change_debt,
7183 { "Change Debt", "zbee_zcl_se.met.attr.noti_flag_4.change_debt", FT_BOOLEAN, 32, NULL,
7184 ZBEE_ZCL_NOTI_FLAG_4_CHANGE_DEBT, NULL, HFILL } },
7186 { &hf_zbee_zcl_met_noti_flag_4_emergency_credit_setup,
7187 { "Emergency Credit Setup", "zbee_zcl_se.met.attr.noti_flag_4.emergency_credit_setup", FT_BOOLEAN, 32, NULL,
7188 ZBEE_ZCL_NOTI_FLAG_4_EMERGENCY_CREDIT_SETUP, NULL, HFILL } },
7190 { &hf_zbee_zcl_met_noti_flag_4_consumer_top_up,
7191 { "Consumer Top Up", "zbee_zcl_se.met.attr.noti_flag_4.consumer_top_up", FT_BOOLEAN, 32, NULL,
7192 ZBEE_ZCL_NOTI_FLAG_4_CONSUMER_TOP_UP, NULL, HFILL } },
7194 { &hf_zbee_zcl_met_noti_flag_4_credit_adjustment,
7195 { "Credit Adjustment", "zbee_zcl_se.met.attr.noti_flag_4.credit_adjustment", FT_BOOLEAN, 32, NULL,
7196 ZBEE_ZCL_NOTI_FLAG_4_CREDIT_ADJUSTMENT, NULL, HFILL } },
7198 { &hf_zbee_zcl_met_noti_flag_4_change_payment_mode,
7199 { "Change Payment Mode", "zbee_zcl_se.met.attr.noti_flag_4.change_payment_mode", FT_BOOLEAN, 32, NULL,
7200 ZBEE_ZCL_NOTI_FLAG_4_CHANGE_PAYMENT_MODE, NULL, HFILL } },
7202 { &hf_zbee_zcl_met_noti_flag_4_get_prepay_snapshot,
7203 { "Get Prepay Snapshot", "zbee_zcl_se.met.attr.noti_flag_4.get_prepay_snapshot", FT_BOOLEAN, 32, NULL,
7204 ZBEE_ZCL_NOTI_FLAG_4_GET_PREPAY_SNAPSHOT, NULL, HFILL } },
7206 { &hf_zbee_zcl_met_noti_flag_4_get_top_up_log,
7207 { "Get Top Up Log", "zbee_zcl_se.met.attr.noti_flag_4.get_top_up_log", FT_BOOLEAN, 32, NULL,
7208 ZBEE_ZCL_NOTI_FLAG_4_GET_TOP_UP_LOG, NULL, HFILL } },
7210 { &hf_zbee_zcl_met_noti_flag_4_set_low_credit_warning_level,
7211 { "Set Low Credit Warning Level", "zbee_zcl_se.met.attr.noti_flag_4.set_low_credit_warning_level", FT_BOOLEAN, 32, NULL,
7212 ZBEE_ZCL_NOTI_FLAG_4_SET_LOW_CREDIT_WARNING_LEVEL, NULL, HFILL } },
7214 { &hf_zbee_zcl_met_noti_flag_4_get_debt_repayment_log,
7215 { "Get Debt Repayment Log", "zbee_zcl_se.met.attr.noti_flag_4.get_debt_repayment_log", FT_BOOLEAN, 32, NULL,
7216 ZBEE_ZCL_NOTI_FLAG_4_GET_DEBT_REPAYMENT_LOG, NULL, HFILL } },
7218 { &hf_zbee_zcl_met_noti_flag_4_set_maximum_credit_limit,
7219 { "Set Maximum Credit Limit", "zbee_zcl_se.met.attr.noti_flag_4.set_maximum_credit_limit", FT_BOOLEAN, 32, NULL,
7220 ZBEE_ZCL_NOTI_FLAG_4_SET_MAXIMUM_CREDIT_LIMIT, NULL, HFILL } },
7222 { &hf_zbee_zcl_met_noti_flag_4_set_overall_debt_cap,
7223 { "Set Overall Debt Cap", "zbee_zcl_se.met.attr.noti_flag_4.set_overall_debt_cap", FT_BOOLEAN, 32, NULL,
7224 ZBEE_ZCL_NOTI_FLAG_4_SET_OVERALL_DEBT_CAP, NULL, HFILL } },
7226 { &hf_zbee_zcl_met_noti_flag_4_reserved,
7227 { "Reserved", "zbee_zcl_se.met.attr.noti_flag_4.reserved", FT_UINT32, BASE_HEX, NULL,
7228 ZBEE_ZCL_NOTI_FLAG_4_RESERVED, NULL, HFILL } },
7230 /* Notification Flags 5 */
7231 { &hf_zbee_zcl_met_noti_flags_5,
7232 { "Notification Flags 5", "zbee_zcl_se.met.attr.noti_flag_5", FT_UINT32, BASE_HEX, NULL,
7233 0x00, NULL, HFILL } },
7235 { &hf_zbee_zcl_met_noti_flag_5_publish_change_of_tenancy,
7236 { "Publish Change of Tenancy", "zbee_zcl_se.met.attr.noti_flag_5.publish_change_of_tenancy", FT_BOOLEAN, 32, NULL,
7237 ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_TENANCY, NULL, HFILL } },
7239 { &hf_zbee_zcl_met_noti_flag_5_publish_change_of_supplier,
7240 { "Publish Change of Supplier", "zbee_zcl_se.met.attr.noti_flag_5.publish_change_of_supplier", FT_BOOLEAN, 32, NULL,
7241 ZBEE_ZCL_NOTI_FLAG_5_PUBLISH_CHANGE_OF_SUPPLIER, NULL, HFILL } },
7243 { &hf_zbee_zcl_met_noti_flag_5_request_new_password_1_response,
7244 { "Request New Password 1 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_1_response", FT_BOOLEAN, 32, NULL,
7245 ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_1_RESPONSE, NULL, HFILL } },
7247 { &hf_zbee_zcl_met_noti_flag_5_request_new_password_2_response,
7248 { "Request New Password 2 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_2_response", FT_BOOLEAN, 32, NULL,
7249 ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_2_RESPONSE, NULL, HFILL } },
7251 { &hf_zbee_zcl_met_noti_flag_5_request_new_password_3_response,
7252 { "Request New Password 3 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_3_response", FT_BOOLEAN, 32, NULL,
7253 ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_3_RESPONSE, NULL, HFILL } },
7255 { &hf_zbee_zcl_met_noti_flag_5_request_new_password_4_response,
7256 { "Request New Password 4 Response", "zbee_zcl_se.met.attr.noti_flag_5.request_new_password_4_response", FT_BOOLEAN, 32, NULL,
7257 ZBEE_ZCL_NOTI_FLAG_5_REQUEST_NEW_PASSWORD_4_RESPONSE, NULL, HFILL } },
7259 { &hf_zbee_zcl_met_noti_flag_5_update_site_id,
7260 { "Update Site ID", "zbee_zcl_se.met.attr.noti_flag_5.update_site_id", FT_BOOLEAN, 32, NULL,
7261 ZBEE_ZCL_NOTI_FLAG_5_UPDATE_SITE_ID, NULL, HFILL } },
7263 { &hf_zbee_zcl_met_noti_flag_5_reset_battery_counter,
7264 { "Reset Battery Counter", "zbee_zcl_se.met.attr.noti_flag_5.reset_battery_counter", FT_BOOLEAN, 32, NULL,
7265 ZBEE_ZCL_NOTI_FLAG_5_RESET_BATTERY_COUNTER, NULL, HFILL } },
7267 { &hf_zbee_zcl_met_noti_flag_5_update_cin,
7268 { "Update CIN", "zbee_zcl_se.met.attr.noti_flag_5.update_cin", FT_BOOLEAN, 32, NULL,
7269 ZBEE_ZCL_NOTI_FLAG_5_UPDATE_CIN, NULL, HFILL } },
7271 { &hf_zbee_zcl_met_noti_flag_5_reserved,
7272 { "Reserved", "zbee_zcl_se.met.attr.noti_flag_5.reserved", FT_UINT32, BASE_HEX, NULL,
7273 ZBEE_ZCL_NOTI_FLAG_5_RESERVED, NULL, HFILL } },
7275 { &hf_zbee_zcl_met_srv_tx_cmd_id,
7276 { "Command", "zbee_zcl_se.met.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_srv_tx_cmd_names),
7277 0x00, NULL, HFILL } },
7279 { &hf_zbee_zcl_met_srv_rx_cmd_id,
7280 { "Command", "zbee_zcl_se.met.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_srv_rx_cmd_names),
7281 0x00, NULL, HFILL } },
7283 { &hf_zbee_zcl_met_get_profile_interval_channel,
7284 { "Interval Channel", "zbee_zcl_se.met.get_profile.interval_channel", FT_UINT8, BASE_DEC, NULL,
7285 0x00, NULL, HFILL } },
7287 { &hf_zbee_zcl_met_get_profile_end_time,
7288 { "End Time", "zbee_zcl_se.met.get_profile.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7289 0x00, NULL, HFILL } },
7291 { &hf_zbee_zcl_met_get_profile_number_of_periods,
7292 { "Number of Periods", "zbee_zcl_se.met.get_profile.number_of_periods", FT_UINT8, BASE_DEC, NULL,
7293 0x00, NULL, HFILL } },
7295 { &hf_zbee_zcl_met_request_mirror_rsp_endpoint_id,
7296 { "EndPoint ID", "zbee_zcl_se.met.request_mirror_rsp.endpoint_id", FT_UINT16, BASE_DEC, NULL,
7297 0x00, NULL, HFILL } },
7299 { &hf_zbee_zcl_met_mirror_removed_removed_endpoint_id,
7300 { "Removed EndPoint ID", "zbee_zcl_se.met.mirror_removed.removed_endpoint_id", FT_UINT16, BASE_DEC, NULL,
7301 0x00, NULL, HFILL } },
7303 { &hf_zbee_zcl_met_request_fast_poll_mode_fast_poll_update_period,
7304 { "Fast Poll Update Period", "zbee_zcl_se.met.request_fast_poll_mode.fast_poll_update_period", FT_UINT8, BASE_DEC, NULL,
7305 0x00, NULL, HFILL } },
7307 { &hf_zbee_zcl_met_request_fast_poll_mode_duration,
7308 { "Duration", "zbee_zcl_se.met.request_fast_poll_mode.duration", FT_UINT8, BASE_DEC, NULL,
7309 0x00, NULL, HFILL } },
7311 { &hf_zbee_zcl_met_schedule_snapshot_issuer_event_id,
7312 { "Issuer Event ID", "zbee_zcl_se.met.schedule_snapshot.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7313 0x00, NULL, HFILL } },
7315 { &hf_zbee_zcl_met_schedule_snapshot_command_index,
7316 { "Command Index", "zbee_zcl_se.met.schedule_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
7317 0x00, NULL, HFILL } },
7319 { &hf_zbee_zcl_met_schedule_snapshot_total_number_of_commands,
7320 { "Total Number of Commands", "zbee_zcl_se.met.schedule_snapshot.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
7321 0x00, NULL, HFILL } },
7323 { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule_id,
7324 { "Snapshot Schedule ID", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_schedule_id", FT_UINT8, BASE_DEC, NULL,
7325 0x00, NULL, HFILL } },
7327 { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_start_time,
7328 { "Snapshot Start Time", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7329 0x00, NULL, HFILL } },
7331 { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_schedule,
7332 { "Snapshot Schedule", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_schedule", FT_UINT24, BASE_HEX, NULL,
7333 0x00, NULL, HFILL } },
7335 { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_shapshot_payload_type,
7336 { "Snapshot Payload Type", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_payload_type",
7337 FT_UINT8, BASE_DEC, VALS(zbee_zcl_met_snapshot_payload_type),
7338 0x00, NULL, HFILL } },
7340 { &hf_zbee_zcl_met_schedule_snapshot_snapshot_schedule_payload_snapshot_cause,
7341 { "Snapshot Cause", "zbee_zcl_se.met.schedule_snapshot.snapshot_schedule_payload.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7342 0x00, NULL, HFILL } },
7344 { &hf_zbee_zcl_met_snapshot_schedule_frequency,
7345 { "Snapshot Schedule Frequency", "zbee_zcl_se.met.snapshot_schedule.frequency",
7346 FT_UINT24, BASE_DEC, NULL,
7347 0x0FFFFF, NULL, HFILL } },
7349 { &hf_zbee_zcl_met_snapshot_schedule_frequency_type,
7350 { "Snapshot Schedule Frequency Type", "zbee_zcl_se.met.snapshot_schedule.frequency_type",
7351 FT_UINT24, BASE_HEX, VALS(zbee_zcl_met_snapshot_schedule_frequency_type),
7352 0x300000, NULL, HFILL } },
7354 { &hf_zbee_zcl_met_snapshot_schedule_frequency_wild_card,
7355 { "Snapshot Schedule Frequency Wild Card", "zbee_zcl_se.met.snapshot_schedule.frequency_wild_card",
7356 FT_UINT24, BASE_HEX,VALS(zbee_zcl_met_snapshot_schedule_frequency_wild_card),
7357 0xC00000, NULL, HFILL } },
7359 { &hf_zbee_zcl_met_take_snapshot_snapshot_cause,
7360 { "Snapshot Cause", "zbee_zcl_se.met.take_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7361 0x00, NULL, HFILL } },
7363 { &hf_zbee_zcl_met_get_snapshot_start_time,
7364 { "Start Time", "zbee_zcl_se.met.get_snapshot.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7365 0x00, NULL, HFILL } },
7367 { &hf_zbee_zcl_met_get_snapshot_end_time,
7368 { "End Time", "zbee_zcl_se.met.get_snapshot.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7369 0x00, NULL, HFILL } },
7371 { &hf_zbee_zcl_met_get_snapshot_snapshot_offset,
7372 { "Snapshot Offset", "zbee_zcl_se.met.get_snapshot.snapshot_offset", FT_UINT8, BASE_DEC, NULL,
7373 0x00, NULL, HFILL } },
7375 { &hf_zbee_zcl_met_get_snapshot_snapshot_cause,
7376 { "Snapshot Cause", "zbee_zcl_se.met.get_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7377 0x00, NULL, HFILL } },
7379 { &hf_zbee_zcl_met_start_sampling_issuer_event_id,
7380 { "Issuer Event ID", "zbee_zcl_se.met.start_sampling.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7381 0x00, NULL, HFILL } },
7383 { &hf_zbee_zcl_met_start_sampling_start_sampling_time,
7384 { "Start Sampling Time", "zbee_zcl_se.met.start_sampling.start_sampling_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7385 0x00, NULL, HFILL } },
7387 { &hf_zbee_zcl_met_start_sampling_sample_type,
7388 { "Sample Type", "zbee_zcl_se.met.start_sampling.sample_type", FT_UINT8, BASE_DEC, NULL,
7389 0x00, NULL, HFILL } },
7391 { &hf_zbee_zcl_met_start_sampling_sample_request_interval,
7392 { "Sample Request Interval", "zbee_zcl_se.met.start_sampling.sample_request_interval", FT_UINT16, BASE_DEC, NULL,
7393 0x00, NULL, HFILL } },
7395 { &hf_zbee_zcl_met_start_sampling_max_number_of_samples,
7396 { "Max Number of Samples", "zbee_zcl_se.met.start_sampling.max_number_of_samples", FT_UINT16, BASE_DEC, NULL,
7397 0x00, NULL, HFILL } },
7399 { &hf_zbee_zcl_met_get_sampled_data_sample_id,
7400 { "Sample ID", "zbee_zcl_se.met.get_sampled_data.sample_id", FT_UINT16, BASE_DEC, NULL,
7401 0x00, NULL, HFILL } },
7403 { &hf_zbee_zcl_met_get_sampled_data_sample_start_time,
7404 { "Sample Start Time", "zbee_zcl_se.met.get_sampled_data.sample_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7405 0x00, NULL, HFILL } },
7407 { &hf_zbee_zcl_met_get_sampled_data_sample_type,
7408 { "Sample Type", "zbee_zcl_se.met.get_sampled_data.sample_type", FT_UINT8, BASE_DEC, NULL,
7409 0x00, NULL, HFILL } },
7411 { &hf_zbee_zcl_met_get_sampled_data_number_of_samples,
7412 { "Number of Samples", "zbee_zcl_se.met.get_sampled_data.number_of_samples", FT_UINT16, BASE_DEC, NULL,
7413 0x00, NULL, HFILL } },
7415 { &hf_zbee_zcl_met_start_sampling_response_sample_id,
7416 { "Sample ID", "zbee_zcl_se.met.start_sampling_response.sample_id", FT_UINT16, BASE_DEC, NULL,
7417 0x00, NULL, HFILL } },
7419 { &hf_zbee_zcl_met_mirror_report_attribute_response_notification_scheme,
7420 { "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),
7421 0x00, NULL, HFILL } },
7423 { &hf_zbee_zcl_met_mirror_report_attribute_response_notification_flags_n,
7424 { "Notification Flag", "zbee_zcl_se.met.mirror_report_attribute_response.notification_flags_n", FT_UINT32, BASE_HEX, NULL,
7425 0x00, NULL, HFILL } },
7427 { &hf_zbee_zcl_met_reset_load_limit_counter_provider_id,
7428 { "Provider ID", "zbee_zcl_se.met.reset_load_limit_counter.provider_id", FT_UINT32, BASE_DEC, NULL,
7429 0x00, NULL, HFILL } },
7431 { &hf_zbee_zcl_met_reset_load_limit_counter_issuer_event_id,
7432 { "Issuer Event ID", "zbee_zcl_se.met.reset_load_limit_counter.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7433 0x00, NULL, HFILL } },
7435 { &hf_zbee_zcl_met_change_supply_provider_id,
7436 { "Provider ID", "zbee_zcl_se.met.change_supply.provider_id", FT_UINT32, BASE_DEC, NULL,
7437 0x00, NULL, HFILL } },
7439 { &hf_zbee_zcl_met_change_supply_issuer_event_id,
7440 { "Issuer Event ID", "zbee_zcl_se.met.change_supply.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7441 0x00, NULL, HFILL } },
7443 { &hf_zbee_zcl_met_change_supply_request_date_time,
7444 { "Request Date/Time", "zbee_zcl_se.met.change_supply.request_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7445 0x00, NULL, HFILL } },
7447 { &hf_zbee_zcl_met_change_supply_implementation_date_time,
7448 { "Implementation Date/Time", "zbee_zcl_se.met.change_supply.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7449 0x00, NULL, HFILL } },
7451 { &hf_zbee_zcl_met_change_supply_proposed_supply_status,
7452 { "Proposed Supply Status", "zbee_zcl_se.met.change_supply.proposed_supply_status", FT_UINT8, BASE_DEC, NULL,
7453 0x00, NULL, HFILL } },
7455 { &hf_zbee_zcl_met_change_supply_supply_control_bits,
7456 { "Supply Control bits", "zbee_zcl_se.met.change_supply.supply_control_bits", FT_UINT8, BASE_HEX, NULL,
7457 0x00, NULL, HFILL } },
7459 { &hf_zbee_zcl_met_local_change_supply_proposed_supply_status,
7460 { "Proposed Supply Status", "zbee_zcl_se.met.local_change_supply.proposed_supply_status", FT_UINT8, BASE_DEC, NULL,
7461 0x00, NULL, HFILL } },
7463 { &hf_zbee_zcl_met_set_supply_status_issuer_event_id,
7464 { "Issuer Event ID", "zbee_zcl_se.met.set_supply_status.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7465 0x00, NULL, HFILL } },
7467 { &hf_zbee_zcl_met_set_supply_status_supply_tamper_state,
7468 { "Supply Tamper State", "zbee_zcl_se.met.set_supply_status.supply_tamper_state", FT_UINT8, BASE_DEC, NULL,
7469 0x00, NULL, HFILL } },
7471 { &hf_zbee_zcl_met_set_supply_status_supply_depletion_state,
7472 { "Supply Depletion State", "zbee_zcl_se.met.set_supply_status.supply_depletion_state", FT_UINT8, BASE_DEC, NULL,
7473 0x00, NULL, HFILL } },
7475 { &hf_zbee_zcl_met_set_supply_status_supply_uncontrolled_flow_state,
7476 { "Supply Uncontrolled Flow State", "zbee_zcl_se.met.set_supply_status.supply_uncontrolled_flow_state", FT_UINT8, BASE_DEC, NULL,
7477 0x00, NULL, HFILL } },
7479 { &hf_zbee_zcl_met_set_supply_status_load_limit_supply_state,
7480 { "Load Limit Supply State", "zbee_zcl_se.met.set_supply_status.load_limit_supply_state", FT_UINT8, BASE_DEC, NULL,
7481 0x00, NULL, HFILL } },
7483 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_provider_id,
7484 { "Provider ID", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.provider_id", FT_UINT32, BASE_DEC, NULL,
7485 0x00, NULL, HFILL } },
7487 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_issuer_event_id,
7488 { "Issuer Event ID", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7489 0x00, NULL, HFILL } },
7491 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_uncontrolled_flow_threshold,
7492 { "Uncontrolled Flow Threshold", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.uncontrolled_flow_threshold", FT_UINT16, BASE_DEC, NULL,
7493 0x00, NULL, HFILL } },
7495 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_unit_of_measure,
7496 { "Unit of Measure", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.unit_of_measure", FT_UINT8, BASE_DEC, NULL,
7497 0x00, NULL, HFILL } },
7499 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_multiplier,
7500 { "Multiplier", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.multiplier", FT_UINT16, BASE_DEC, NULL,
7501 0x00, NULL, HFILL } },
7503 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_divisor,
7504 { "Divisor", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.divisor", FT_UINT16, BASE_DEC, NULL,
7505 0x00, NULL, HFILL } },
7507 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_stabilisation_period,
7508 { "Stabilisation Period", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.stabilisation_period", FT_UINT8, BASE_DEC, NULL,
7509 0x00, NULL, HFILL } },
7511 { &hf_zbee_zcl_met_set_uncontrolled_flow_threshold_measurement_period,
7512 { "Measurement Period", "zbee_zcl_se.met.set_uncontrolled_flow_threshold.measurement_period", FT_UINT16, BASE_DEC, NULL,
7513 0x00, NULL, HFILL } },
7515 { &hf_zbee_zcl_met_get_profile_response_end_time,
7516 { "End Time", "zbee_zcl_se.met.get_profile_response.end_time",
7517 FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_zcl_se_utc_time), 0x00, NULL, HFILL } },
7519 { &hf_zbee_zcl_met_get_profile_response_status,
7520 { "Status", "zbee_zcl_se.met.get_profile_response.status", FT_UINT8, BASE_HEX, NULL,
7521 0x00, NULL, HFILL } },
7523 { &hf_zbee_zcl_met_get_profile_response_profile_interval_period,
7524 { "Profile Interval Period", "zbee_zcl_se.met.get_profile_response.profile_interval_period", FT_UINT8, BASE_DEC, NULL,
7525 0x00, NULL, HFILL } },
7527 { &hf_zbee_zcl_met_get_profile_response_number_of_periods_delivered,
7528 { "Number of Periods Delivered", "zbee_zcl_se.met.get_profile_response.number_of_periods_delivered", FT_UINT8, BASE_DEC, NULL,
7529 0x00, NULL, HFILL } },
7531 { &hf_zbee_zcl_met_get_profile_response_intervals,
7532 { "Intervals", "zbee_zcl_se.met.get_profile_response.intervals", FT_UINT24, BASE_DEC, NULL,
7533 0x00, NULL, HFILL } },
7535 { &hf_zbee_zcl_met_request_fast_poll_mode_response_applied_update_period,
7536 { "Applied Update Period (seconds)", "zbee_zcl_se.met.request_fast_poll_mode_response.applied_update_period", FT_UINT8, BASE_DEC, NULL,
7537 0x00, NULL, HFILL } },
7539 { &hf_zbee_zcl_met_request_fast_poll_mode_response_fast_poll_mode_end_time,
7540 { "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,
7541 0x00, NULL, HFILL } },
7543 { &hf_zbee_zcl_met_schedule_snapshot_response_issuer_event_id,
7544 { "Issuer Event ID", "zbee_zcl_se.met.schedule_snapshot_response.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7545 0x00, NULL, HFILL } },
7547 { &hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_id,
7548 { "Snapshot Schedule ID", "zbee_zcl_se.met.schedule_snapshot_response.response_snapshot_schedule_id", FT_UINT8, BASE_DEC, NULL,
7549 0x00, NULL, HFILL } },
7551 { &hf_zbee_zcl_met_schedule_snapshot_response_snapshot_schedule_confirmation,
7552 { "Snapshot Schedule Confirmation", "zbee_zcl_se.met.schedule_snapshot_response.snapshot_schedule_confirmation", FT_UINT8, BASE_HEX, VALS(zbee_zcl_met_snapshot_schedule_confirmation),
7553 0x00, NULL, HFILL } },
7555 { &hf_zbee_zcl_met_take_snapshot_response_snapshot_id,
7556 { "Snapshot ID", "zbee_zcl_se.met.take_snapshot_response.snapshot_id", FT_UINT32, BASE_DEC, NULL,
7557 0x00, NULL, HFILL } },
7559 { &hf_zbee_zcl_met_take_snapshot_response_snapshot_confirmation,
7560 { "Snapshot Confirmation", "zbee_zcl_se.met.take_snapshot_response.snapshot_confirmation", FT_UINT8, BASE_HEX, NULL,
7561 0x00, NULL, HFILL } },
7563 { &hf_zbee_zcl_met_publish_snapshot_snapshot_id,
7564 { "Snapshot ID", "zbee_zcl_se.met.publish_snapshot.snapshot_id", FT_UINT32, BASE_DEC, NULL,
7565 0x00, NULL, HFILL } },
7567 { &hf_zbee_zcl_met_publish_snapshot_snapshot_time,
7568 { "Snapshot Time", "zbee_zcl_se.met.publish_snapshot.snapshot_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7569 0x00, NULL, HFILL } },
7571 { &hf_zbee_zcl_met_publish_snapshot_snapshots_found,
7572 { "Total Snapshots Found", "zbee_zcl_se.met.publish_snapshot.snapshots_found", FT_UINT8, BASE_DEC, NULL,
7573 0x00, NULL, HFILL } },
7575 { &hf_zbee_zcl_met_publish_snapshot_cmd_index,
7576 { "Command Index", "zbee_zcl_se.met.publish_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
7577 0x00, NULL, HFILL } },
7579 { &hf_zbee_zcl_met_publish_snapshot_total_commands,
7580 { "Total Number of Commands", "zbee_zcl_se.met.publish_snapshot.total_commands", FT_UINT8, BASE_DEC, NULL,
7581 0x00, NULL, HFILL } },
7583 { &hf_zbee_zcl_met_publish_snapshot_snapshot_cause,
7584 { "Snapshot Cause", "zbee_zcl_se.met.publish_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
7585 0x00, NULL, HFILL } },
7587 { &hf_zbee_zcl_met_publish_snapshot_snapshot_payload_type,
7588 { "Snapshot Payload Type", "zbee_zcl_se.met.publish_snapshot.payload_type", FT_UINT8, BASE_DEC, VALS(zbee_zcl_met_snapshot_payload_type),
7589 0x00, NULL, HFILL } },
7591 { &hf_zbee_zcl_met_publish_snapshot_snapshot_sub_payload,
7592 { "Snapshot Sub-Payload", "zbee_zcl_se.met.publish_snapshot.sub_payload", FT_BYTES, BASE_NONE, NULL,
7593 0x00, NULL, HFILL } },
7595 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_id,
7596 { "Sample ID", "zbee_zcl_se.met.get_sampled_data_rsp.sample_id", FT_UINT16, BASE_DEC, NULL,
7597 0x00, NULL, HFILL } },
7599 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_start_time,
7600 { "Sample Start Time", "zbee_zcl_se.met.get_sampled_data_rsp.sample_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7601 0x00, NULL, HFILL } },
7603 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_type,
7604 { "Sample Type", "zbee_zcl_se.met.get_sampled_data_rsp.sample_type", FT_UINT8, BASE_DEC, NULL,
7605 0x00, NULL, HFILL } },
7607 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_request_interval,
7608 { "Sample Request Interval", "zbee_zcl_se.met.get_sampled_data_rsp.sample_request_interval", FT_UINT16, BASE_DEC, NULL,
7609 0x00, NULL, HFILL } },
7611 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_number_of_samples,
7612 { "Number of Samples", "zbee_zcl_se.met.get_sampled_data_rsp.number_of_samples", FT_UINT16, BASE_DEC, NULL,
7613 0x00, NULL, HFILL } },
7615 { &hf_zbee_zcl_met_get_sampled_data_rsp_sample_samples,
7616 { "Samples", "zbee_zcl_se.met.get_sampled_data_rsp.samples", FT_UINT24, BASE_DEC, NULL,
7617 0x00, NULL, HFILL } },
7619 { &hf_zbee_zcl_met_configure_mirror_issuer_event_id,
7620 { "Issuer Event ID", "zbee_zcl_se.met.configure_mirror.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7621 0x00, NULL, HFILL } },
7623 { &hf_zbee_zcl_met_configure_mirror_reporting_interval,
7624 { "Reporting Interval", "zbee_zcl_se.met.configure_mirror.reporting_interval", FT_UINT24, BASE_DEC, NULL,
7625 0x00, NULL, HFILL } },
7627 { &hf_zbee_zcl_met_configure_mirror_mirror_notification_reporting,
7628 { "Mirror Notification Reporting", "zbee_zcl_se.met.configure_mirror.mirror_notification_reporting", FT_BOOLEAN, BASE_NONE, NULL,
7629 0x00, NULL, HFILL } },
7631 { &hf_zbee_zcl_met_configure_mirror_notification_scheme,
7632 { "Notification Scheme", "zbee_zcl_se.met.configure_mirror.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7633 0x00, NULL, HFILL } },
7635 { &hf_zbee_zcl_met_configure_notification_scheme_issuer_event_id,
7636 { "Issuer Event ID", "zbee_zcl_se.met.configure_notification_scheme.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7637 0x00, NULL, HFILL } },
7639 { &hf_zbee_zcl_met_configure_notification_scheme_notification_scheme,
7640 { "Notification Scheme", "zbee_zcl_se.met.configure_notification_scheme.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7641 0x00, NULL, HFILL } },
7643 { &hf_zbee_zcl_met_configure_notification_scheme_notification_flag_order,
7644 { "Notification Flag Order", "zbee_zcl_se.met.configure_notification_scheme.notification_flag_order", FT_UINT32, BASE_HEX, NULL,
7645 0x00, NULL, HFILL } },
7647 { &hf_zbee_zcl_met_configure_notification_flags_issuer_event_id,
7648 { "Issuer Event ID", "zbee_zcl_se.met.configure_notification_flags.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7649 0x00, NULL, HFILL } },
7651 { &hf_zbee_zcl_met_configure_notification_flags_notification_scheme,
7652 { "Notification Scheme", "zbee_zcl_se.met.configure_notification_flags.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7653 0x00, NULL, HFILL } },
7655 { &hf_zbee_zcl_met_configure_notification_flags_notification_flag_attribute_id,
7656 { "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),
7657 0x00, NULL, HFILL } },
7659 { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_cluster_id,
7660 { "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),
7661 0x00, NULL, HFILL } },
7663 { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_manufacturer_code,
7664 { "Manufacturer Code", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.manufacturer_code", FT_UINT16, BASE_HEX, NULL,
7665 0x00, NULL, HFILL } },
7667 { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_no_of_commands,
7668 { "No. of Commands", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.no_of_commands", FT_UINT8, BASE_DEC, NULL,
7669 0x00, NULL, HFILL } },
7671 { &hf_zbee_zcl_met_configure_notification_flags_bit_field_allocation_command_identifier,
7672 { "Command Identifier", "zbee_zcl_se.met.configure_notification_flags.bit_field_allocation.command_identifier", FT_UINT8, BASE_HEX, NULL,
7673 0x00, NULL, HFILL } },
7675 { &hf_zbee_zcl_met_get_notified_msg_notification_scheme,
7676 { "Notification Scheme", "zbee_zcl_se.met.get_notified_msg.notification_scheme", FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_met_notification_scheme),
7677 0x00, NULL, HFILL } },
7679 { &hf_zbee_zcl_met_get_notified_msg_notification_flag_attribute_id,
7680 { "Notification Flag attribute ID", "zbee_zcl_se.met.get_notified_msg.notification_flag_attribute_id", FT_UINT16, BASE_DEC, NULL,
7681 0x00, NULL, HFILL } },
7683 { &hf_zbee_zcl_met_get_notified_msg_notification_flags,
7684 { "Notification Flags", "zbee_zcl_se.met.get_notified_msg.notification_flags", FT_UINT32, BASE_HEX, NULL,
7685 0x00, NULL, HFILL } },
7687 { &hf_zbee_zcl_met_supply_status_response_provider_id,
7688 { "Provider ID", "zbee_zcl_se.met.supply_status_response.provider_id", FT_UINT32, BASE_DEC, NULL,
7689 0x00, NULL, HFILL } },
7691 { &hf_zbee_zcl_met_supply_status_response_issuer_event_id,
7692 { "Issuer Event ID", "zbee_zcl_se.met.supply_status_response.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
7693 0x00, NULL, HFILL } },
7695 { &hf_zbee_zcl_met_supply_status_response_implementation_date_time,
7696 { "Implementation Date/Time", "zbee_zcl_se.met.supply_status_response.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
7697 0x00, NULL, HFILL } },
7699 { &hf_zbee_zcl_met_supply_status_response_supply_status_after_implementation,
7700 { "Supply Status After Implementation", "zbee_zcl_se.met.supply_status_response.supply_status_after_implementation", FT_UINT8, BASE_DEC, NULL,
7701 0x00, NULL, HFILL } },
7703 { &hf_zbee_zcl_met_snapshot_cause_general,
7704 { "General", "zbee_zcl_se.met.snapshot_cause.general", FT_BOOLEAN, 32, NULL,
7705 0x00000001, NULL, HFILL } },
7706 { &hf_zbee_zcl_met_snapshot_cause_end_of_billing_period,
7707 { "End of Billing Period", "zbee_zcl_se.met.snapshot_cause.end_of_billing_period", FT_BOOLEAN, 32, NULL,
7708 0x00000002, NULL, HFILL } },
7709 { &hf_zbee_zcl_met_snapshot_cause_end_of_block_period,
7710 { "End of Block Period", "zbee_zcl_se.met.snapshot_cause.end_of_block_period", FT_BOOLEAN, 32, NULL,
7711 0x00000004, NULL, HFILL } },
7712 { &hf_zbee_zcl_met_snapshot_cause_change_of_tariff_information,
7713 { "Change of Tariff Information", "zbee_zcl_se.met.snapshot_cause.change_of_tariff_information", FT_BOOLEAN, 32, NULL,
7714 0x00000008, NULL, HFILL } },
7715 { &hf_zbee_zcl_met_snapshot_cause_change_of_price_matrix,
7716 { "Change of Price Matrix", "zbee_zcl_se.met.snapshot_cause.change_of_price_matrix", FT_BOOLEAN, 32, NULL,
7717 0x00000010, NULL, HFILL } },
7718 { &hf_zbee_zcl_met_snapshot_cause_change_of_block_thresholds,
7719 { "Change of Block Thresholds", "zbee_zcl_se.met.snapshot_cause.change_of_block_thresholds", FT_BOOLEAN, 32, NULL,
7720 0x00000020, NULL, HFILL } },
7721 { &hf_zbee_zcl_met_snapshot_cause_change_of_cv,
7722 { "Change of CV", "zbee_zcl_se.met.snapshot_cause.change_of_cv", FT_BOOLEAN, 32, NULL,
7723 0x00000040, NULL, HFILL } },
7724 { &hf_zbee_zcl_met_snapshot_cause_change_of_cf,
7725 { "Change of CF", "zbee_zcl_se.met.snapshot_cause.change_of_cf", FT_BOOLEAN, 32, NULL,
7726 0x00000080, NULL, HFILL } },
7727 { &hf_zbee_zcl_met_snapshot_cause_change_of_calendar,
7728 { "Change of Calendar", "zbee_zcl_se.met.snapshot_cause.change_of_calendar", FT_BOOLEAN, 32, NULL,
7729 0x00000100, NULL, HFILL } },
7730 { &hf_zbee_zcl_met_snapshot_cause_critical_peak_pricing,
7731 { "Critical Peak Pricing", "zbee_zcl_se.met.snapshot_cause.critical_peak_pricing", FT_BOOLEAN, 32, NULL,
7732 0x00000200, NULL, HFILL } },
7733 { &hf_zbee_zcl_met_snapshot_cause_manually_triggered_from_client,
7734 { "Manually Triggered from Client", "zbee_zcl_se.met.snapshot_cause.manually_triggered_from_client", FT_BOOLEAN, 32, NULL,
7735 0x00000400, NULL, HFILL } },
7736 { &hf_zbee_zcl_met_snapshot_cause_end_of_resolve_period,
7737 { "End of Resolve Period", "zbee_zcl_se.met.snapshot_cause.end_of_resolve_period", FT_BOOLEAN, 32, NULL,
7738 0x00000800, NULL, HFILL } },
7739 { &hf_zbee_zcl_met_snapshot_cause_change_of_tenancy,
7740 { "Change of Tenancy", "zbee_zcl_se.met.snapshot_cause.change_of_tenancy", FT_BOOLEAN, 32, NULL,
7741 0x00001000, NULL, HFILL } },
7742 { &hf_zbee_zcl_met_snapshot_cause_change_of_supplier,
7743 { "Change of Supplier", "zbee_zcl_se.met.snapshot_cause.change_of_supplier", FT_BOOLEAN, 32, NULL,
7744 0x00002000, NULL, HFILL } },
7745 { &hf_zbee_zcl_met_snapshot_cause_change_of_meter_mode,
7746 { "Change of (Meter) Mode", "zbee_zcl_se.met.snapshot_cause.change_of_meter_mode", FT_BOOLEAN, 32, NULL,
7747 0x00004000, NULL, HFILL } },
7748 { &hf_zbee_zcl_met_snapshot_cause_debt_payment,
7749 { "Debt Payment", "zbee_zcl_se.met.snapshot_cause.debt_payment", FT_BOOLEAN, 32, NULL,
7750 0x00008000, NULL, HFILL } },
7751 { &hf_zbee_zcl_met_snapshot_cause_scheduled_snapshot,
7752 { "Scheduled Snapshot", "zbee_zcl_se.met.snapshot_cause.scheduled_snapshot", FT_BOOLEAN, 32, NULL,
7753 0x00010000, NULL, HFILL } },
7754 { &hf_zbee_zcl_met_snapshot_cause_ota_firmware_download,
7755 { "OTA Firmware Download", "zbee_zcl_se.met.snapshot_cause.ota_firmware_download", FT_BOOLEAN, 32, NULL,
7756 0x00020000, NULL, HFILL } },
7757 { &hf_zbee_zcl_met_snapshot_cause_reserved,
7758 { "Reserved", "zbee_zcl_se.met.snapshot_cause.reserved", FT_UINT32, BASE_HEX, NULL,
7759 0xFFFC0000, NULL, HFILL } }
7762 /* ZCL Metering subtrees */
7763 int *ett[] = {
7764 &ett_zbee_zcl_met,
7765 &ett_zbee_zcl_met_func_noti_flags,
7766 &ett_zbee_zcl_met_noti_flags_2,
7767 &ett_zbee_zcl_met_noti_flags_3,
7768 &ett_zbee_zcl_met_noti_flags_4,
7769 &ett_zbee_zcl_met_noti_flags_5,
7770 &ett_zbee_zcl_met_snapshot_cause_flags,
7771 &ett_zbee_zcl_met_snapshot_schedule,
7772 &ett_zbee_zcl_met_schedule_snapshot_response_payload,
7773 &ett_zbee_zcl_met_schedule_snapshot_payload,
7774 &ett_zbee_zcl_met_mirror_noti_flag,
7775 &ett_zbee_zcl_met_bit_field_allocation
7778 /* Register the ZigBee ZCL Metering cluster protocol name and description */
7779 proto_zbee_zcl_met = proto_register_protocol("ZigBee ZCL Metering", "ZCL Metering", ZBEE_PROTOABBREV_ZCL_MET);
7780 proto_register_field_array(proto_zbee_zcl_met, hf, array_length(hf));
7781 proto_register_subtree_array(ett, array_length(ett));
7783 /* Register the ZigBee ZCL Metering dissector. */
7784 register_dissector(ZBEE_PROTOABBREV_ZCL_MET, dissect_zbee_zcl_met, proto_zbee_zcl_met);
7785 } /*proto_register_zbee_zcl_met*/
7788 *Hands off the ZCL Metering dissector.
7791 void
7792 proto_reg_handoff_zbee_zcl_met(void)
7794 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_MET,
7795 proto_zbee_zcl_met,
7796 ett_zbee_zcl_met,
7797 ZBEE_ZCL_CID_SIMPLE_METERING,
7798 ZBEE_MFG_CODE_NONE,
7799 hf_zbee_zcl_met_attr_server_id,
7800 hf_zbee_zcl_met_attr_client_id,
7801 hf_zbee_zcl_met_srv_rx_cmd_id,
7802 hf_zbee_zcl_met_srv_tx_cmd_id,
7803 (zbee_zcl_fn_attr_data)dissect_zcl_met_attr_data
7805 } /*proto_reg_handoff_zbee_zcl_met*/
7807 /* ########################################################################## */
7808 /* #### (0x0703) MESSAGING CLUSTER ########################################## */
7809 /* ########################################################################## */
7811 /* Attributes - None */
7813 /* Server Commands Received */
7814 #define zbee_zcl_msg_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
7815 XXX(ZBEE_ZCL_CMD_ID_MSG_GET_LAST_MSG, 0x00, "Get Last Message" ) \
7816 XXX(ZBEE_ZCL_CMD_ID_MSG_MSG_CONFIRM, 0x01, "Message Confirmation" ) \
7817 XXX(ZBEE_ZCL_CMD_ID_MSG_GET_MESSAGE_CANCEL, 0x02, "Get Message Cancellation" )
7819 VALUE_STRING_ENUM(zbee_zcl_msg_srv_rx_cmd_names);
7820 VALUE_STRING_ARRAY(zbee_zcl_msg_srv_rx_cmd_names);
7822 /* Server Commands Generated */
7823 #define zbee_zcl_msg_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
7824 XXX(ZBEE_ZCL_CMD_ID_MSG_DISPLAY_MSG, 0x00, "Display Message" ) \
7825 XXX(ZBEE_ZCL_CMD_ID_MSG_CANCEL_MSG, 0x01, "Cancel Message" ) \
7826 XXX(ZBEE_ZCL_CMD_ID_MSG_DISPLAY_PROTECTED_MSG, 0x02, "Display Protected Message" ) \
7827 XXX(ZBEE_ZCL_CMD_ID_MSG_CANCEL_ALL_MSG, 0x03, "Cancel All Messages" )
7829 VALUE_STRING_ENUM(zbee_zcl_msg_srv_tx_cmd_names);
7830 VALUE_STRING_ARRAY(zbee_zcl_msg_srv_tx_cmd_names);
7832 /* Message Control Field Bit Map */
7833 #define ZBEE_ZCL_MSG_CTRL_TX_MASK 0x03
7834 #define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MASK 0x0C
7835 #define ZBEE_ZCL_MSG_CTRL_RESERVED_MASK 0x50
7836 #define ZBEE_ZCL_MSG_CTRL_ENHANCED_CONFIRM_MASK 0x20
7837 #define ZBEE_ZCL_MSG_CTRL_CONFIRM_MASK 0x80
7839 #define ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ONLY 0x00 /* Normal Transmission Only */
7840 #define ZBEE_ZCL_MSG_CTRL_TX_NORMAL_ANON_INTERPAN 0x01 /* Normal and Anonymous Inter-PAN Transmission Only */
7841 #define ZBEE_ZCL_MSG_CTRL_TX_ANON_INTERPAN_ONLY 0x02 /* Anonymous Inter-PAN Transmission Only */
7843 #define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_LOW 0x00 /* Low */
7844 #define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MEDIUM 0x01 /* Medium */
7845 #define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_HIGH 0x02 /* High */
7846 #define ZBEE_ZCL_MSG_CTRL_IMPORTANCE_CRITICAL 0x03 /* Critical */
7848 #define ZBEE_ZCL_MSG_EXT_CTRL_STATUS_MASK 0x01
7850 #define ZBEE_ZCL_MSG_CONFIRM_CTRL_MASK 0x01
7852 #define ZBEE_ZCL_MSG_START_TIME_NOW 0x00000000 /* Now */
7854 /*************************/
7855 /* Function Declarations */
7856 /*************************/
7857 void proto_register_zbee_zcl_msg(void);
7858 void proto_reg_handoff_zbee_zcl_msg(void);
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);
7867 /* Private functions prototype */
7868 static void decode_zcl_msg_duration (char *s, uint16_t value);
7870 /*************************/
7871 /* Global Variables */
7872 /*************************/
7874 /* Initialize the protocol and registered fields */
7875 static int proto_zbee_zcl_msg;
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;
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;
7902 static expert_field ei_zbee_zcl_msg_msg_ctrl_deprecated;
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 }
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 }
7921 /*************************/
7922 /* Function Bodies */
7923 /*************************/
7926 *ZigBee ZCL Messaging cluster dissector for wireshark.
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.
7932 static int
7933 dissect_zbee_zcl_msg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
7935 proto_tree *payload_tree;
7936 zbee_zcl_packet *zcl;
7937 unsigned offset = 0;
7938 uint8_t cmd_id;
7939 int rem_len;
7941 /* Reject the packet if data is NULL */
7942 if (data == NULL)
7943 return 0;
7944 zcl = (zbee_zcl_packet *)data;
7945 cmd_id = zcl->cmd_id;
7947 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
7948 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
7949 /* Append the command name to the info column. */
7950 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
7951 val_to_str_const(cmd_id, zbee_zcl_msg_srv_rx_cmd_names, "Unknown Command"),
7952 zcl->tran_seqno);
7954 /* Add the command ID. */
7955 proto_tree_add_uint(tree, hf_zbee_zcl_msg_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
7957 /* Check is this command has a payload, than add the payload tree */
7958 rem_len = tvb_reported_length_remaining(tvb, ++offset);
7959 if (rem_len > 0) {
7960 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_msg, NULL, "Payload");
7962 /* Call the appropriate command dissector */
7963 switch (cmd_id) {
7965 case ZBEE_ZCL_CMD_ID_MSG_GET_LAST_MSG:
7966 /* No payload */
7967 break;
7969 case ZBEE_ZCL_CMD_ID_MSG_MSG_CONFIRM:
7970 dissect_zcl_msg_confirm(tvb, payload_tree, &offset);
7971 break;
7973 case ZBEE_ZCL_CMD_ID_MSG_GET_MESSAGE_CANCEL:
7974 dissect_zcl_msg_get_cancel(tvb, payload_tree, &offset);
7975 break;
7977 default:
7978 break;
7982 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
7983 /* Append the command name to the info column. */
7984 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
7985 val_to_str_const(cmd_id, zbee_zcl_msg_srv_tx_cmd_names, "Unknown Command"),
7986 zcl->tran_seqno);
7988 /* Add the command ID. */
7989 proto_tree_add_uint(tree, hf_zbee_zcl_msg_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
7991 /* Check is this command has a payload, than add the payload tree */
7992 rem_len = tvb_reported_length_remaining(tvb, ++offset);
7993 if (rem_len > 0) {
7994 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_msg, NULL, "Payload");
7996 /* Call the appropriate command dissector */
7997 switch (cmd_id) {
7999 case ZBEE_ZCL_CMD_ID_MSG_DISPLAY_MSG:
8000 dissect_zcl_msg_display(tvb, payload_tree, &offset);
8001 break;
8003 case ZBEE_ZCL_CMD_ID_MSG_CANCEL_MSG:
8004 dissect_zcl_msg_cancel(tvb, pinfo, payload_tree, &offset);
8005 break;
8007 case ZBEE_ZCL_CMD_ID_MSG_DISPLAY_PROTECTED_MSG:
8008 dissect_zcl_msg_display(tvb, payload_tree, &offset);
8009 break;
8011 case ZBEE_ZCL_CMD_ID_MSG_CANCEL_ALL_MSG:
8012 dissect_zcl_msg_cancel_all(tvb, payload_tree, &offset);
8013 break;
8015 default:
8016 break;
8021 return tvb_captured_length(tvb);
8022 } /*dissect_zbee_zcl_msg*/
8025 *This function manages the Display Message payload
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
8031 static void
8032 dissect_zcl_msg_display(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8034 unsigned msg_len;
8036 static int * const message_ctrl_flags[] = {
8037 &hf_zbee_zcl_msg_ctrl_tx,
8038 &hf_zbee_zcl_msg_ctrl_importance,
8039 &hf_zbee_zcl_msg_ctrl_enh_confirm,
8040 &hf_zbee_zcl_msg_ctrl_reserved,
8041 &hf_zbee_zcl_msg_ctrl_confirm,
8042 NULL
8045 static int * const message_ext_ctrl_flags[] = {
8046 &hf_zbee_zcl_msg_ext_ctrl_status,
8047 NULL
8050 /* Message ID */
8051 proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8052 *offset += 4;
8054 /* Message Control */
8055 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_msg_ctrl, ett_zbee_zcl_msg_message_control, message_ctrl_flags, ENC_NA);
8056 *offset += 1;
8058 /* Start Time */
8059 proto_tree_add_item(tree, hf_zbee_zcl_msg_start_time, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8060 *offset += 4;
8062 /* Duration In Minutes*/
8063 proto_tree_add_item(tree, hf_zbee_zcl_msg_duration, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8064 *offset += 2;
8066 /* Message */
8067 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_msg_message, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &msg_len);
8068 *offset += msg_len;
8070 /* (Optional) Extended Message Control */
8071 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
8072 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 *offset += 1;
8076 } /*dissect_zcl_msg_display*/
8079 *This function manages the Cancel Message payload
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
8085 static void
8086 dissect_zcl_msg_cancel(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
8088 int8_t msg_ctrl;
8090 /* Message ID */
8091 proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8092 *offset += 4;
8094 /* Message Control */
8095 msg_ctrl = tvb_get_uint8(tvb, *offset);
8096 proto_tree_add_item(tree, hf_zbee_zcl_msg_ctrl, tvb, *offset, 1, ENC_NA);
8097 *offset += 1;
8099 if (msg_ctrl != 0x00) {
8100 expert_add_info(pinfo, tree, &ei_zbee_zcl_msg_msg_ctrl_deprecated);
8103 } /* dissect_zcl_msg_cancel */
8106 *This function manages the Cancel All Messages payload
8108 *@param tvb pointer to buffer containing raw packet.
8109 *@param tree pointer to data tree Wireshark uses to display packet.
8110 *@param offset pointer to offset from caller
8112 static void
8113 dissect_zcl_msg_cancel_all(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8115 /* Implementation Date/Time */
8116 proto_tree_add_item(tree, hf_zbee_zcl_msg_implementation_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8117 *offset += 4;
8119 } /* dissect_zcl_msg_cancel_all */
8122 *This function manages the Get Message Cancellation payload
8124 *@param tvb pointer to buffer containing raw packet.
8125 *@param tree pointer to data tree Wireshark uses to display packet.
8126 *@param offset pointer to offset from caller
8128 static void
8129 dissect_zcl_msg_get_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8131 /* Earliest Implementation Time */
8132 proto_tree_add_item(tree, hf_zbee_zcl_msg_earliest_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8133 *offset += 4;
8135 } /* dissect_zcl_msg_get_cancel */
8138 *This function manages the Message Confirmation payload
8140 *@param tvb pointer to buffer containing raw packet.
8141 *@param tree pointer to data tree Wireshark uses to display packet.
8142 *@param offset pointer to offset from caller
8144 static void
8145 dissect_zcl_msg_confirm(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8147 unsigned msg_len;
8149 /* Message ID */
8150 proto_tree_add_item(tree, hf_zbee_zcl_msg_message_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
8151 *offset += 4;
8153 /* Confirmation Time */
8154 proto_tree_add_item(tree, hf_zbee_zcl_msg_confirm_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
8155 *offset += 4;
8157 /* (Optional) Confirm Control */
8158 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
8159 proto_tree_add_item(tree, hf_zbee_zcl_msg_confirm_ctrl, tvb, *offset, 1, ENC_NA);
8160 *offset += 1;
8162 /* (Optional) Response Text, but is we have a length we expect to find the subsequent string */
8163 if ( tvb_reported_length_remaining(tvb, *offset) <= 0 ) return;
8164 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_msg_confirm_response, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &msg_len);
8165 *offset += msg_len;
8166 } /* dissect_zcl_msg_confirm */
8169 *This function decodes duration in minute type variable
8172 static void
8173 decode_zcl_msg_duration(char *s, uint16_t value)
8175 if (value == 0xffff)
8176 snprintf(s, ITEM_LABEL_LENGTH, "Until changed");
8177 else
8178 snprintf(s, ITEM_LABEL_LENGTH, "%d minutes", value);
8179 return;
8180 } /*decode_zcl_msg_duration*/
8183 * This function decodes UTC time, with a special case for
8184 * ZBEE_ZCL_MSG_START_TIME_NOW which has special meaning when
8185 * used in a Smart Energy context
8187 * @param s string to display
8188 * @param value value to decode
8190 static void
8191 decode_zcl_se_utc_time(char *s, uint32_t value)
8193 if (value == ZBEE_ZCL_MSG_START_TIME_NOW)
8194 snprintf(s, ITEM_LABEL_LENGTH, "Now (0)");
8195 else {
8196 decode_zcl_utc_time(s,value);
8198 } /* decode_zcl_se_utc_time */
8201 *This function registers the ZCL Messaging dissector
8204 void
8205 proto_register_zbee_zcl_msg(void)
8207 static hf_register_info hf[] = {
8209 { &hf_zbee_zcl_msg_srv_tx_cmd_id,
8210 { "Command", "zbee_zcl_se.msg.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_srv_tx_cmd_names),
8211 0x00, NULL, HFILL } },
8213 { &hf_zbee_zcl_msg_srv_rx_cmd_id,
8214 { "Command", "zbee_zcl_se.msg.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_srv_rx_cmd_names),
8215 0x00, NULL, HFILL } },
8217 { &hf_zbee_zcl_msg_message_id,
8218 { "Message ID", "zbee_zcl_se.msg.message.id", FT_UINT32, BASE_HEX, NULL,
8219 0x00, NULL, HFILL } },
8221 /* Start of 'Message Control' fields */
8222 { &hf_zbee_zcl_msg_ctrl,
8223 { "Message Control", "zbee_zcl_se.msg.message.ctrl", FT_UINT8, BASE_HEX, NULL,
8224 0x0, NULL, HFILL } },
8226 { &hf_zbee_zcl_msg_ctrl_tx,
8227 { "Transmission", "zbee_zcl_se.msg.message.ctrl.tx", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_ctrl_tx_names),
8228 ZBEE_ZCL_MSG_CTRL_TX_MASK, NULL, HFILL } },
8230 { &hf_zbee_zcl_msg_ctrl_importance,
8231 { "Importance", "zbee_zcl_se.msg.message.ctrl.importance", FT_UINT8, BASE_HEX, VALS(zbee_zcl_msg_ctrl_importance_names),
8232 ZBEE_ZCL_MSG_CTRL_IMPORTANCE_MASK, NULL, HFILL } },
8234 { &hf_zbee_zcl_msg_ctrl_enh_confirm,
8235 { "Confirmation", "zbee_zcl_se.msg.message.ctrl.enhconfirm", FT_BOOLEAN, 8, TFS(&tfs_required_not_required),
8236 ZBEE_ZCL_MSG_CTRL_ENHANCED_CONFIRM_MASK, NULL, HFILL } },
8238 { &hf_zbee_zcl_msg_ctrl_reserved,
8239 { "Reserved", "zbee_zcl_se.msg.message.ctrl.reserved", FT_UINT8, BASE_HEX, NULL,
8240 ZBEE_ZCL_MSG_CTRL_RESERVED_MASK, NULL, HFILL } },
8242 { &hf_zbee_zcl_msg_ctrl_confirm,
8243 { "Confirmation", "zbee_zcl_se.msg.message.ctrl.confirm", FT_BOOLEAN, 8, TFS(&tfs_required_not_required),
8244 ZBEE_ZCL_MSG_CTRL_CONFIRM_MASK, NULL, HFILL } },
8245 /* End of 'Message Control' fields */
8247 /* Start of 'Extended Message Control' fields */
8248 { &hf_zbee_zcl_msg_ext_ctrl,
8249 { "Extended Message Control", "zbee_zcl_se.msg.message.ext.ctrl", FT_UINT8, BASE_HEX, NULL,
8250 0x0, NULL, HFILL } },
8252 { &hf_zbee_zcl_msg_ext_ctrl_status,
8253 { "Message Confirmation Status", "zbee_zcl_se.msg.message.ext.ctrl.status", FT_BOOLEAN, 8, TFS(&tfs_confirmed_unconfirmed),
8254 ZBEE_ZCL_MSG_EXT_CTRL_STATUS_MASK, NULL, HFILL } },
8255 /* End of 'Extended Message Control' fields */
8257 { &hf_zbee_zcl_msg_start_time,
8258 { "Start Time", "zbee_zcl_se.msg.message.start_time", FT_UINT32, BASE_CUSTOM, CF_FUNC(decode_zcl_utc_time),
8259 0x00, NULL, HFILL } },
8261 { &hf_zbee_zcl_msg_duration,
8262 { "Duration", "zbee_zcl_se.msg.message.duration", FT_UINT16, BASE_CUSTOM, CF_FUNC(decode_zcl_msg_duration),
8263 0x00, NULL, HFILL } },
8265 { &hf_zbee_zcl_msg_message,
8266 { "Message", "zbee_zcl_se.msg.message", FT_UINT_STRING, BASE_NONE, NULL,
8267 0x00, NULL, HFILL } },
8269 { &hf_zbee_zcl_msg_confirm_time,
8270 { "Confirmation Time", "zbee_zcl_se.msg.message.confirm_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8271 0x0, NULL, HFILL } },
8273 { &hf_zbee_zcl_msg_confirm_ctrl,
8274 { "Confirmation Control", "zbee_zcl_se.msg.message.confirm_ctrl", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
8275 ZBEE_ZCL_MSG_CONFIRM_CTRL_MASK, NULL, HFILL } },
8277 { &hf_zbee_zcl_msg_confirm_response,
8278 { "Response", "zbee_zcl_se.msg.message.confirm_response", FT_UINT_STRING, BASE_NONE, NULL,
8279 0x00, NULL, HFILL } },
8281 { &hf_zbee_zcl_msg_implementation_time,
8282 { "Implementation Time", "zbee_zcl_se.msg.impl_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8283 0, NULL, HFILL } },
8285 { &hf_zbee_zcl_msg_earliest_time,
8286 { "Earliest Implementation Time", "zbee_zcl_se.msg.earliest_impl_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
8287 0, NULL, HFILL } },
8291 /* ZCL Messaging subtrees */
8292 int *ett[] = {
8293 &ett_zbee_zcl_msg,
8294 &ett_zbee_zcl_msg_message_control,
8295 &ett_zbee_zcl_msg_ext_message_control,
8298 /* Expert Info */
8299 expert_module_t* expert_zbee_zcl_msg;
8300 static ei_register_info ei[] = {
8301 { &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 }},
8304 /* Register the ZigBee ZCL Messaging cluster protocol name and description */
8305 proto_zbee_zcl_msg = proto_register_protocol("ZigBee ZCL Messaging", "ZCL Messaging", ZBEE_PROTOABBREV_ZCL_MSG);
8306 proto_register_field_array(proto_zbee_zcl_msg, hf, array_length(hf));
8307 proto_register_subtree_array(ett, array_length(ett));
8309 expert_zbee_zcl_msg = expert_register_protocol(proto_zbee_zcl_msg);
8310 expert_register_field_array(expert_zbee_zcl_msg, ei, array_length(ei));
8312 /* Register the ZigBee ZCL Messaging dissector. */
8313 register_dissector(ZBEE_PROTOABBREV_ZCL_MSG, dissect_zbee_zcl_msg, proto_zbee_zcl_msg);
8314 } /*proto_register_zbee_zcl_msg*/
8317 *Hands off the ZCL Messaging dissector.
8320 void
8321 proto_reg_handoff_zbee_zcl_msg(void)
8323 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_MSG,
8324 proto_zbee_zcl_msg,
8325 ett_zbee_zcl_msg,
8326 ZBEE_ZCL_CID_MESSAGE,
8327 ZBEE_MFG_CODE_NONE,
8328 -1, -1,
8329 hf_zbee_zcl_msg_srv_rx_cmd_id,
8330 hf_zbee_zcl_msg_srv_tx_cmd_id,
8331 NULL
8333 } /*proto_reg_handoff_zbee_zcl_msg*/
8335 /* ########################################################################## */
8336 /* #### (0x0704) TUNNELING CLUSTER ########################################### */
8337 /* ########################################################################## */
8339 /* Attributes */
8340 #define zbee_zcl_tun_attr_names_VALUE_STRING_LIST(XXX) \
8341 XXX(ZBEE_ZCL_ATTR_ID_TUN_CLOSE_TIMEOUT, 0x0000, "Close Tunnel Timeout" ) \
8342 /* Smart Energy */ \
8343 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_TUN, 0xFFFE, "Attribute Reporting Status" )
8345 VALUE_STRING_ENUM(zbee_zcl_tun_attr_names);
8346 VALUE_STRING_ARRAY(zbee_zcl_tun_attr_names);
8348 /* Server Commands Received */
8349 #define zbee_zcl_tun_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
8350 XXX(ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL, 0x00, "Request Tunnel" ) \
8351 XXX(ZBEE_ZCL_CMD_ID_TUN_CLOSE_TUNNEL, 0x01, "Close Tunnel" ) \
8352 XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA, 0x02, "Transfer Data" ) \
8353 XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR, 0x03, "Transfer Data Error" ) \
8354 XXX(ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA, 0x04, "Ack Transfer Data" ) \
8355 XXX(ZBEE_ZCL_CMD_ID_TUN_READY_DATA, 0x05, "Ready Data" ) \
8356 XXX(ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS, 0x06, "Get Supported Tunnel Protocols" )
8358 VALUE_STRING_ENUM(zbee_zcl_tun_srv_rx_cmd_names);
8359 VALUE_STRING_ARRAY(zbee_zcl_tun_srv_rx_cmd_names);
8361 /* Server Commands Generated */
8362 #define zbee_zcl_tun_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
8363 XXX(ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL_RSP, 0x00, "Request Tunnel Response" ) \
8364 XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_TX, 0x01, "Transfer Data" ) \
8365 XXX(ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR_TX, 0x02, "Transfer Data Error" ) \
8366 XXX(ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA_TX, 0x03, "Ack Transfer Data" ) \
8367 XXX(ZBEE_ZCL_CMD_ID_TUN_READY_DATA_TX, 0x04, "Ready Data" ) \
8368 XXX(ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS_RSP, 0x05, "Supported Tunnel Protocols Response" ) \
8369 XXX(ZBEE_ZCL_CMD_ID_TUN_CLOSURE_NOTIFY, 0x06, "Tunnel Closure Notification" )
8371 VALUE_STRING_ENUM(zbee_zcl_tun_srv_tx_cmd_names);
8372 VALUE_STRING_ARRAY(zbee_zcl_tun_srv_tx_cmd_names);
8374 /*************************/
8375 /* Function Declarations */
8376 /*************************/
8377 void proto_register_zbee_zcl_tun(void);
8378 void proto_reg_handoff_zbee_zcl_tun(void);
8380 /* Attribute Dissector Helpers */
8381 static void dissect_zcl_tun_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
8383 /* Private functions prototype */
8385 /*************************/
8386 /* Global Variables */
8387 /*************************/
8389 /* Initialize the protocol and registered fields */
8390 static int proto_zbee_zcl_tun;
8392 static int hf_zbee_zcl_tun_srv_tx_cmd_id;
8393 static int hf_zbee_zcl_tun_srv_rx_cmd_id;
8394 static int hf_zbee_zcl_tun_attr_id;
8395 static int hf_zbee_zcl_tun_attr_reporting_status;
8396 static int hf_zbee_zcl_tun_attr_close_timeout;
8397 static int hf_zbee_zcl_tun_protocol_id;
8398 static int hf_zbee_zcl_tun_manufacturer_code;
8399 static int hf_zbee_zcl_tun_flow_control_support;
8400 static int hf_zbee_zcl_tun_max_in_size;
8401 static int hf_zbee_zcl_tun_tunnel_id;
8402 static int hf_zbee_zcl_tun_num_octets_left;
8403 static int hf_zbee_zcl_tun_protocol_offset;
8404 static int hf_zbee_zcl_tun_protocol_list_complete;
8405 static int hf_zbee_zcl_tun_protocol_count;
8406 static int hf_zbee_zcl_tun_transfer_status;
8407 static int hf_zbee_zcl_tun_transfer_data_status;
8409 static heur_dissector_list_t zbee_zcl_tun_heur_subdissector_list;
8411 /* Initialize the subtree pointers */
8412 static int ett_zbee_zcl_tun;
8414 #define zbee_zcl_tun_protocol_names_VALUE_STRING_LIST(XXX) \
8415 XXX(ZBEE_ZCL_TUN_PROTO_DLMS, 0x00, "DLMS/COSEM (IEC 62056)" ) \
8416 XXX(ZBEE_ZCL_TUN_PROTO_IEC_61107, 0x01, "IEC 61107" ) \
8417 XXX(ZBEE_ZCL_TUN_PROTO_ANSI_C12, 0x02, "ANSI C12" ) \
8418 XXX(ZBEE_ZCL_TUN_PROTO_M_BUS, 0x03, "M-BUS" ) \
8419 XXX(ZBEE_ZCL_TUN_PROTO_SML, 0x04, "SML" ) \
8420 XXX(ZBEE_ZCL_TUN_PROTO_CLIMATE_TALK, 0x05, "ClimateTalk" ) \
8421 XXX(ZBEE_ZCL_TUN_PROTO_GB_HRGP, 0x06, "GB-HRGP" ) \
8422 XXX(ZBEE_ZCL_TUN_PROTO_IPV6, 0x07, "IPv6" ) \
8423 XXX(ZBEE_ZCL_TUN_PROTO_IPV4, 0x08, "IPv4" ) \
8424 XXX(ZBEE_ZCL_TUN_PROTO_NULL, 0x09, "null" ) \
8425 XXX(ZBEE_ZCL_TUN_PROTO_TEST, 199, "test" ) \
8426 XXX(ZBEE_ZCL_TUN_PROTO_MANUFACTURER, 200, "Manufacturer Specific" ) \
8427 XXX(ZBEE_ZCL_TUN_PROTO_RESERVED, 0xFF, "Reserved" )
8429 VALUE_STRING_ENUM(zbee_zcl_tun_protocol_names);
8430 VALUE_STRING_ARRAY(zbee_zcl_tun_protocol_names);
8432 #define zbee_zcl_tun_trans_data_status_names_VALUE_STRING_LIST(XXX) \
8433 XXX(ZBEE_ZCL_TUN_TRANS_STATUS_NO_TUNNEL, 0x00, "Tunnel ID Does Not Exist" ) \
8434 XXX(ZBEE_ZCL_TUN_TRANS_STATUS_WRONG_DEV, 0x01, "Wrong Device" ) \
8435 XXX(ZBEE_ZCL_TUN_TRANS_STATUS_OVERFLOW, 0x02, "Data Overflow" )
8437 VALUE_STRING_ENUM(zbee_zcl_tun_trans_data_status_names);
8438 VALUE_STRING_ARRAY(zbee_zcl_tun_trans_data_status_names);
8440 #define zbee_zcl_tun_status_names_VALUE_STRING_LIST(XXX) \
8441 XXX(ZBEE_ZCL_TUN_STATUS_SUCCESS, 0x00, "Success" ) \
8442 XXX(ZBEE_ZCL_TUN_STATUS_BUSY, 0x01, "Busy" ) \
8443 XXX(ZBEE_ZCL_TUN_STATUS_NO_MORE_IDS, 0x02, "No More Tunnel IDs" ) \
8444 XXX(ZBEE_ZCL_TUN_STATUS_PROTO_NOT_SUPP, 0x03, "Protocol Not Supported" ) \
8445 XXX(ZBEE_ZCL_TUN_STATUS_FLOW_CONTROL_NOT_SUPP, 0x04, "Flow Control Not Supported" )
8447 VALUE_STRING_ENUM(zbee_zcl_tun_status_names);
8448 VALUE_STRING_ARRAY(zbee_zcl_tun_status_names);
8450 /*************************/
8451 /* Function Bodies */
8452 /*************************/
8455 *This function is called by ZCL foundation dissector in order to decode
8457 *@param tree pointer to data tree Wireshark uses to display packet.
8458 *@param tvb pointer to buffer containing raw packet.
8459 *@param offset pointer to buffer offset
8460 *@param attr_id attribute identifier
8461 *@param data_type attribute data type
8462 *@param client_attr ZCL client
8464 static void
8465 dissect_zcl_tun_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
8467 switch (attr_id) {
8468 /* cluster specific attributes */
8469 case ZBEE_ZCL_ATTR_ID_TUN_CLOSE_TIMEOUT:
8470 proto_tree_add_item(tree, hf_zbee_zcl_tun_attr_close_timeout, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8471 *offset += 2;
8472 break;
8474 /* applies to all SE clusters */
8475 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_TUN:
8476 proto_tree_add_item(tree, hf_zbee_zcl_tun_attr_reporting_status, tvb, *offset, 1, ENC_NA);
8477 *offset += 1;
8478 break;
8480 default: /* Catch all */
8481 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
8482 break;
8484 } /*dissect_zcl_ias_zone_attr_data*/
8487 *This function manages the Request Tunnel payload
8489 *@param tvb pointer to buffer containing raw packet.
8490 *@param tree pointer to data tree Wireshark uses to display packet.
8491 *@param offset pointer to offset from caller
8493 static void
8494 dissect_zcl_tun_request_tunnel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8496 proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_id, tvb, *offset, 1, ENC_NA);
8497 *offset += 1;
8499 proto_tree_add_item(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8500 *offset += 2;
8502 proto_tree_add_item(tree, hf_zbee_zcl_tun_flow_control_support, tvb, *offset, 1, ENC_NA);
8503 *offset += 1;
8505 proto_tree_add_item(tree, hf_zbee_zcl_tun_max_in_size, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8506 *offset += 2;
8510 *This function manages the Close Tunnel payload
8512 *@param tvb pointer to buffer containing raw packet.
8513 *@param tree pointer to data tree Wireshark uses to display packet.
8514 *@param offset pointer to offset from caller
8516 static void
8517 dissect_zcl_tun_close_tunnel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8519 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8520 *offset += 2;
8524 *This function manages the Transfer Data payload
8526 *@param tvb pointer to buffer containing raw packet.
8527 *@param pinfo pointer to packet information fields
8528 *@param tree pointer to data tree Wireshark uses to display packet.
8529 *@param offset pointer to offset from caller
8531 static void
8532 dissect_zcl_tun_transfer_data(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, unsigned *offset)
8534 int length;
8535 heur_dtbl_entry_t *hdtbl_entry;
8536 tvbuff_t *data_tvb;
8537 proto_tree *root_tree = proto_tree_get_root(tree);
8539 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8540 *offset += 2;
8542 length = tvb_reported_length_remaining(tvb, *offset);
8543 data_tvb = tvb_new_subset_remaining(tvb, *offset);
8544 *offset += length;
8546 if (dissector_try_heuristic(zbee_zcl_tun_heur_subdissector_list, data_tvb, pinfo, root_tree, &hdtbl_entry, NULL)) {
8547 return;
8550 call_data_dissector(data_tvb, pinfo, root_tree);
8554 *This function manages the Transfer Data Error payload
8556 *@param tvb pointer to buffer containing raw packet.
8557 *@param tree pointer to data tree Wireshark uses to display packet.
8558 *@param offset pointer to offset from caller
8560 static void
8561 dissect_zcl_tun_transfer_data_error(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8563 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8564 *offset += 2;
8566 proto_tree_add_item(tree, hf_zbee_zcl_tun_transfer_data_status, tvb, *offset, 1, ENC_NA);
8567 *offset += 1;
8571 *This function manages the Ack Transfer Data payload
8573 *@param tvb pointer to buffer containing raw packet.
8574 *@param tree pointer to data tree Wireshark uses to display packet.
8575 *@param offset pointer to offset from caller
8577 static void
8578 dissect_zcl_tun_ack_transfer_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8580 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8581 *offset += 2;
8583 proto_tree_add_item(tree, hf_zbee_zcl_tun_num_octets_left, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8584 *offset += 2;
8588 *This function manages the Ready Data payload
8590 *@param tvb pointer to buffer containing raw packet.
8591 *@param tree pointer to data tree Wireshark uses to display packet.
8592 *@param offset pointer to offset from caller
8594 static void
8595 dissect_zcl_tun_ready_data(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8597 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8598 *offset += 2;
8600 proto_tree_add_item(tree, hf_zbee_zcl_tun_num_octets_left, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8601 *offset += 2;
8605 *This function manages the Get Supported Tunnel Protocols payload
8607 *@param tvb pointer to buffer containing raw packet.
8608 *@param tree pointer to data tree Wireshark uses to display packet.
8609 *@param offset pointer to offset from caller
8611 static void
8612 dissect_zcl_tun_get_supported(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8614 proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_offset, tvb, *offset, 1, ENC_NA);
8615 *offset += 1;
8619 *This function manages the Request Tunnel Response payload
8621 *@param tvb pointer to buffer containing raw packet.
8622 *@param tree pointer to data tree Wireshark uses to display packet.
8623 *@param offset pointer to offset from caller
8625 static void
8626 dissect_zcl_tun_request_tunnel_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8628 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8629 *offset += 2;
8631 proto_tree_add_item(tree, hf_zbee_zcl_tun_transfer_status, tvb, *offset, 1, ENC_NA);
8632 *offset += 1;
8634 proto_tree_add_item(tree, hf_zbee_zcl_tun_max_in_size, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8635 *offset += 2;
8639 *This function manages the Supported Tunnel Protocols Response payload
8641 *@param tvb pointer to buffer containing raw packet.
8642 *@param tree pointer to data tree Wireshark uses to display packet.
8643 *@param offset pointer to offset from caller
8645 static void
8646 dissect_zcl_tun_get_supported_rsp(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8648 uint16_t mfg_code;
8650 proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_list_complete, tvb, *offset, 1, ENC_NA);
8651 *offset += 1;
8653 proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_count, tvb, *offset, 1, ENC_NA);
8654 *offset += 1;
8656 while (tvb_reported_length_remaining(tvb, *offset) > 0) {
8657 mfg_code = tvb_get_letohs(tvb, *offset);
8658 if (mfg_code == 0xFFFF) {
8659 proto_tree_add_uint_format(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, mfg_code, "Standard Protocol (Mfg Code %#x)", mfg_code);
8661 else {
8662 proto_tree_add_item(tree, hf_zbee_zcl_tun_manufacturer_code, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8664 *offset += 2;
8666 proto_tree_add_item(tree, hf_zbee_zcl_tun_protocol_id, tvb, *offset, 1, ENC_NA);
8667 *offset += 1;
8672 *This function manages the Tunnel Closure Notification payload
8674 *@param tvb pointer to buffer containing raw packet.
8675 *@param tree pointer to data tree Wireshark uses to display packet.
8676 *@param offset pointer to offset from caller
8678 static void
8679 dissect_zcl_tun_closure_notify(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
8681 proto_tree_add_item(tree, hf_zbee_zcl_tun_tunnel_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
8682 *offset += 2;
8686 *ZigBee ZCL Tunneling cluster dissector for wireshark.
8688 *@param tvb pointer to buffer containing raw packet.
8689 *@param pinfo pointer to packet information fields
8690 *@param tree pointer to data tree Wireshark uses to display packet.
8692 static int
8693 dissect_zbee_zcl_tun(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
8695 proto_tree *payload_tree;
8696 zbee_zcl_packet *zcl;
8697 unsigned offset = 0;
8698 uint8_t cmd_id;
8699 int rem_len;
8701 /* Reject the packet if data is NULL */
8702 if (data == NULL)
8703 return 0;
8704 zcl = (zbee_zcl_packet *)data;
8705 cmd_id = zcl->cmd_id;
8707 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
8708 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
8709 /* Append the command name to the info column. */
8710 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
8711 val_to_str_const(cmd_id, zbee_zcl_tun_srv_rx_cmd_names, "Unknown Command"),
8712 zcl->tran_seqno);
8714 /* Add the command ID. */
8715 proto_tree_add_uint(tree, hf_zbee_zcl_tun_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
8717 /* Check is this command has a payload, than add the payload tree */
8718 rem_len = tvb_reported_length_remaining(tvb, ++offset);
8719 if (rem_len > 0) {
8720 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_tun, NULL, "Payload");
8722 /* Call the appropriate command dissector */
8723 switch (cmd_id) {
8725 case ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL:
8726 dissect_zcl_tun_request_tunnel(tvb, payload_tree, &offset);
8727 break;
8729 case ZBEE_ZCL_CMD_ID_TUN_CLOSE_TUNNEL:
8730 dissect_zcl_tun_close_tunnel(tvb, payload_tree, &offset);
8731 break;
8733 case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA:
8734 dissect_zcl_tun_transfer_data(tvb, pinfo, payload_tree, &offset);
8735 break;
8737 case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR:
8738 dissect_zcl_tun_transfer_data_error(tvb, payload_tree, &offset);
8739 break;
8741 case ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA:
8742 dissect_zcl_tun_ack_transfer_data(tvb, payload_tree, &offset);
8743 break;
8745 case ZBEE_ZCL_CMD_ID_TUN_READY_DATA:
8746 dissect_zcl_tun_ready_data(tvb, payload_tree, &offset);
8747 break;
8749 case ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS:
8750 dissect_zcl_tun_get_supported(tvb, payload_tree, &offset);
8751 break;
8753 default:
8754 break;
8758 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
8759 /* Append the command name to the info column. */
8760 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
8761 val_to_str_const(cmd_id, zbee_zcl_tun_srv_tx_cmd_names, "Unknown Command"),
8762 zcl->tran_seqno);
8764 /* Add the command ID. */
8765 proto_tree_add_uint(tree, hf_zbee_zcl_tun_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
8767 /* Check is this command has a payload, than add the payload tree */
8768 rem_len = tvb_reported_length_remaining(tvb, ++offset);
8769 if (rem_len > 0) {
8770 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_tun, NULL, "Payload");
8772 /* Call the appropriate command dissector */
8773 switch (cmd_id) {
8775 case ZBEE_ZCL_CMD_ID_TUN_REQUEST_TUNNEL_RSP:
8776 dissect_zcl_tun_request_tunnel_rsp(tvb, payload_tree, &offset);
8777 break;
8779 case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_TX:
8780 dissect_zcl_tun_transfer_data(tvb, pinfo, payload_tree, &offset);
8781 break;
8783 case ZBEE_ZCL_CMD_ID_TUN_TRANSFER_DATA_ERROR_TX:
8784 dissect_zcl_tun_transfer_data_error(tvb, payload_tree, &offset);
8785 break;
8787 case ZBEE_ZCL_CMD_ID_TUN_ACK_TRANSFER_DATA_TX:
8788 dissect_zcl_tun_ack_transfer_data(tvb, payload_tree, &offset);
8789 break;
8791 case ZBEE_ZCL_CMD_ID_TUN_READY_DATA_TX:
8792 dissect_zcl_tun_ready_data(tvb, payload_tree, &offset);
8793 break;
8795 case ZBEE_ZCL_CMD_ID_TUN_GET_SUPPORTED_PROTOCOLS_RSP:
8796 dissect_zcl_tun_get_supported_rsp(tvb, payload_tree, &offset);
8797 break;
8799 case ZBEE_ZCL_CMD_ID_TUN_CLOSURE_NOTIFY:
8800 dissect_zcl_tun_closure_notify(tvb, payload_tree, &offset);
8801 break;
8803 default:
8804 break;
8809 return tvb_captured_length(tvb);
8810 } /*dissect_zbee_zcl_tun*/
8813 *This function registers the ZCL Tunneling dissector
8816 void
8817 proto_register_zbee_zcl_tun(void)
8819 static hf_register_info hf[] = {
8821 { &hf_zbee_zcl_tun_attr_id,
8822 { "Attribute", "zbee_zcl_se.tun.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_tun_attr_names),
8823 0x0, NULL, HFILL } },
8825 { &hf_zbee_zcl_tun_attr_reporting_status, /* common to all SE clusters */
8826 { "Attribute Reporting Status", "zbee_zcl_se.tun.attr.attr_reporting_status",
8827 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
8829 { &hf_zbee_zcl_tun_attr_close_timeout,
8830 { "Close Tunnel Timeout", "zbee_zcl_se.tun.attr.close_tunnel", FT_UINT16, BASE_DEC, NULL,
8831 0x0, NULL, HFILL } },
8833 { &hf_zbee_zcl_tun_srv_tx_cmd_id,
8834 { "Command", "zbee_zcl_se.tun.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_srv_tx_cmd_names),
8835 0x00, NULL, HFILL } },
8837 { &hf_zbee_zcl_tun_srv_rx_cmd_id,
8838 { "Command", "zbee_zcl_se.tun.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_srv_rx_cmd_names),
8839 0x00, NULL, HFILL } },
8841 { &hf_zbee_zcl_tun_protocol_id,
8842 { "Protocol ID", "zbee_zcl_se.tun.protocol_id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_protocol_names),
8843 0x00, NULL, HFILL } },
8845 { &hf_zbee_zcl_tun_manufacturer_code,
8846 { "Manufacturer Code", "zbee_zcl_se.tun.manufacturer_code", FT_UINT16, BASE_HEX, VALS(zbee_mfr_code_names),
8847 0x00, NULL, HFILL } },
8849 { &hf_zbee_zcl_tun_flow_control_support,
8850 { "Flow Control Supported", "zbee_zcl_se.tun.flow_control_supported", FT_BOOLEAN, BASE_NONE, NULL,
8851 0x00, NULL, HFILL } },
8853 { &hf_zbee_zcl_tun_max_in_size,
8854 { "Max Incoming Transfer Size", "zbee_zcl_se.tun.max_in_transfer_size", FT_UINT16, BASE_HEX, NULL,
8855 0x00, NULL, HFILL } },
8857 { &hf_zbee_zcl_tun_tunnel_id,
8858 { "Tunnel Id", "zbee_zcl_se.tun.tunnel_id", FT_UINT16, BASE_HEX, NULL,
8859 0x00, NULL, HFILL } },
8861 { &hf_zbee_zcl_tun_num_octets_left,
8862 { "Num Octets Left", "zbee_zcl_se.tun.octets_left", FT_UINT16, BASE_HEX, NULL,
8863 0x00, NULL, HFILL } },
8865 { &hf_zbee_zcl_tun_protocol_offset,
8866 { "Protocol Offset", "zbee_zcl_se.tun.protocol_offset", FT_UINT8, BASE_HEX, NULL,
8867 0x00, NULL, HFILL } },
8869 { &hf_zbee_zcl_tun_transfer_status,
8870 { "Transfer Status", "zbee_zcl_se.tun.transfer_status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_status_names),
8871 0x00, NULL, HFILL } },
8873 { &hf_zbee_zcl_tun_transfer_data_status,
8874 { "Transfer Data Status", "zbee_zcl_se.tun.transfer_data_status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_tun_trans_data_status_names),
8875 0x00, NULL, HFILL } },
8877 { &hf_zbee_zcl_tun_protocol_count,
8878 { "Protocol Count", "zbee_zcl_se.tun.protocol_count", FT_UINT8, BASE_HEX, NULL,
8879 0x00, NULL, HFILL } },
8881 { &hf_zbee_zcl_tun_protocol_list_complete,
8882 { "List Complete", "zbee_zcl_se.tun.protocol_list_complete", FT_BOOLEAN, BASE_NONE, NULL,
8883 0x00, NULL, HFILL } },
8887 /* ZCL Tunneling subtrees */
8888 int *ett[] = {
8889 &ett_zbee_zcl_tun,
8892 /* Register the ZigBee ZCL Tunneling cluster protocol name and description */
8893 proto_zbee_zcl_tun = proto_register_protocol("ZigBee ZCL Tunneling", "ZCL Tunneling", ZBEE_PROTOABBREV_ZCL_TUN);
8894 proto_register_field_array(proto_zbee_zcl_tun, hf, array_length(hf));
8895 proto_register_subtree_array(ett, array_length(ett));
8897 /* Make heuristic dissectors possible */
8898 zbee_zcl_tun_heur_subdissector_list = register_heur_dissector_list_with_description(ZBEE_PROTOABBREV_ZCL_TUN, "ZigBee Transfer Data", proto_zbee_zcl_tun);
8900 /* Register the ZigBee ZCL Tunneling dissector. */
8901 register_dissector(ZBEE_PROTOABBREV_ZCL_TUN, dissect_zbee_zcl_tun, proto_zbee_zcl_tun);
8903 } /* proto_register_zbee_zcl_tun */
8906 *Hands off the ZCL Tunneling dissector.
8909 void
8910 proto_reg_handoff_zbee_zcl_tun(void)
8912 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_TUN,
8913 proto_zbee_zcl_tun,
8914 ett_zbee_zcl_tun,
8915 ZBEE_ZCL_CID_TUNNELING,
8916 ZBEE_MFG_CODE_NONE,
8917 hf_zbee_zcl_tun_attr_id,
8919 hf_zbee_zcl_tun_srv_rx_cmd_id,
8920 hf_zbee_zcl_tun_srv_tx_cmd_id,
8921 (zbee_zcl_fn_attr_data)dissect_zcl_tun_attr_data
8923 } /* proto_reg_handoff_zbee_zcl_tun */
8926 /* ########################################################################## */
8927 /* #### (0x0705) PREPAYMENT CLUSTER ########################################## */
8928 /* ########################################################################## */
8930 /* Attributes */
8931 #define zbee_zcl_pp_attr_names_VALUE_STRING_LIST(XXX) \
8932 /* Prepayment Information Set */ \
8933 XXX(ZBEE_ZCL_ATTR_ID_PP_PAYMENT_CONTROL_CONFIGURATION, 0x0000, "Payment Control Configuration" ) \
8934 XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_REMAINING, 0x0001, "Credit Remaining" ) \
8935 XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_REMAINING, 0x0002, "Emergency Credit Remaining" ) \
8936 XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_STATUS, 0x0003, "Credit Status" ) \
8937 XXX(ZBEE_ZCL_ATTR_ID_PP_CREDIT_REMAINING_TIMESTAMP, 0x0004, "Credit Remaining Timestamp" ) \
8938 XXX(ZBEE_ZCL_ATTR_ID_PP_ACCUMULATED_DEBT, 0x0005, "Accumulated Debt" ) \
8939 XXX(ZBEE_ZCL_ATTR_ID_PP_OVERALL_DEBT_CAP, 0x0006, "Overall Debt Cap" ) \
8940 XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_LIMIT, 0x0010, "Emergency Credit Limit / Allowance" ) \
8941 XXX(ZBEE_ZCL_ATTR_ID_PP_EMERGENCY_CREDIT_THRESHOLD, 0x0011, "Emergency Credit Threshold" ) \
8942 XXX(ZBEE_ZCL_ATTR_ID_PP_TOTAL_CREDIT_ADDED, 0x0020, "Total Credit Added" ) \
8943 XXX(ZBEE_ZCL_ATTR_ID_PP_MAX_CREDIT_LIMIT, 0x0021, "Max Credit Limit" ) \
8944 XXX(ZBEE_ZCL_ATTR_ID_PP_MAX_CREDIT_PER_TOPUP, 0x0022, "Max Credit Per Top Up" ) \
8945 XXX(ZBEE_ZCL_ATTR_ID_PP_FRIENDLY_CREDIT_WARNING, 0x0030, "Friendly Credit Warning" ) \
8946 XXX(ZBEE_ZCL_ATTR_ID_PP_LOW_CREDIT_WARNING, 0x0031, "Low Credit Warning" ) \
8947 XXX(ZBEE_ZCL_ATTR_ID_PP_IHD_LOW_CREDIT_WARNING, 0x0032, "IHD Low Credit Warning" ) \
8948 XXX(ZBEE_ZCL_ATTR_ID_PP_INTERRUPT_SUSPEND_TIME, 0x0033, "Interrupt Suspend Time" ) \
8949 XXX(ZBEE_ZCL_ATTR_ID_PP_REMAINING_FRIENDLY_CREDIT_TIME, 0x0034, "Remaining Friendly Credit Time" ) \
8950 XXX(ZBEE_ZCL_ATTR_ID_PP_NEXT_FRIENDLY_CREDIT_PERIOD, 0x0035, "Next Friendly Credit Period" ) \
8951 XXX(ZBEE_ZCL_ATTR_ID_PP_CUT_OFF_VALUE, 0x0040, "Cut Off Value" ) \
8952 XXX(ZBEE_ZCL_ATTR_ID_PP_TOKEN_CARRIER_ID, 0x0080, "Token Carrier ID" ) \
8953 /* Top-up Set */ \
8954 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_1, 0x0100, "Top-up Date/time #1" ) \
8955 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_1, 0x0101, "Top-up Amount #1" ) \
8956 XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_1, 0x0102, "Originating Device #1" ) \
8957 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_1, 0x0103, "Top-up Code #1" ) \
8958 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_2, 0x0110, "Top-up Date/time #2" ) \
8959 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_2, 0x0111, "Top-up Amount #2" ) \
8960 XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_2, 0x0112, "Originating Device #2" ) \
8961 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_2, 0x0113, "Top-up Code #2" ) \
8962 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_3, 0x0120, "Top-up Date/time #3" ) \
8963 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_3, 0x0121, "Top-up Amount #3" ) \
8964 XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_3, 0x0122, "Originating Device #3" ) \
8965 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_3, 0x0123, "Top-up Code #3" ) \
8966 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_4, 0x0130, "Top-up Date/time #4" ) \
8967 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_4, 0x0131, "Top-up Amount #4" ) \
8968 XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_4, 0x0132, "Originating Device #4" ) \
8969 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_4, 0x0133, "Top-up Code #4" ) \
8970 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_DATE_TIME_5, 0x0140, "Top-up Date/time #5" ) \
8971 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_AMOUNT_5, 0x0141, "Top-up Amount #5" ) \
8972 XXX(ZBEE_ZCL_ATTR_ID_PP_ORIGINATING_DEVICE_5, 0x0142, "Originating Device #5" ) \
8973 XXX(ZBEE_ZCL_ATTR_ID_PP_TOPUP_CODE_5, 0x0143, "Top-up Code #5" ) \
8974 /* Debt Set */ \
8975 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_1, 0x0210, "Debt Label #1" ) \
8976 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_1, 0x0211, "Debt Amount #1" ) \
8977 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_1, 0x0212, "Debt Recovery Method #1" ) \
8978 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_1, 0x0213, "Debt Recovery Start Time #1" ) \
8979 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_1, 0x0214, "Debt Recovery Collection Time #1" ) \
8980 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_1, 0x0216, "Debt Recovery Frequency #1" ) \
8981 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_1, 0x0217, "Debt Recovery Amount #1" ) \
8982 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_1, 0x0219, "Debt Recovery Top Up Percentage #1" ) \
8983 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_2, 0x0220, "Debt Label #2" ) \
8984 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_2, 0x0221, "Debt Amount #2" ) \
8985 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_2, 0x0222, "Debt Recovery Method #2" ) \
8986 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_2, 0x0223, "Debt Recovery Start Time #2" ) \
8987 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_2, 0x0224, "Debt Recovery Collection Time #2" ) \
8988 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_2, 0x0226, "Debt Recovery Frequency #2" ) \
8989 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_2, 0x0227, "Debt Recovery Amount #2" ) \
8990 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_2, 0x0229, "Debt Recovery Top Up Percentage #2" ) \
8991 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_LABEL_3, 0x0230, "Debt Label #3" ) \
8992 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_AMOUNT_3, 0x0231, "Debt Amount #3" ) \
8993 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_METHOD_3, 0x0232, "Debt Recovery Method #3" ) \
8994 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_START_TIME_3, 0x0233, "Debt Recovery Start Time #3" ) \
8995 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_COLLECTION_TIME_3, 0x0234, "Debt Recovery Collection Time #3" ) \
8996 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_FREQ_3, 0x0236, "Debt Recovery Frequency #3" ) \
8997 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_AMOUNT_3, 0x0237, "Debt Recovery Amount #3" ) \
8998 XXX(ZBEE_ZCL_ATTR_ID_PP_DEBT_RECOVERY_TOP_UP_PERCENTAGE_3, 0x0239, "Debt Recovery Top Up Percentage #3" ) \
8999 /* Alarm Set */ \
9000 XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAYMENT_ALARM_STATUS, 0x0400, "Prepayment Alarm Status" ) \
9001 XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_GENERIC_ALARM_MASK, 0x0401, "Prepay Generic Alarm Mask" ) \
9002 XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_SWITCH_ALARM_MASK, 0x0402, "Prepay Switch Alarm Mask" ) \
9003 XXX(ZBEE_ZCL_ATTR_ID_PP_PREPAY_EVENT_ALARM_MASK, 0x0403, "Prepay Event Alarm Mask" ) \
9004 /* Historical Cost Consumption Information Set */ \
9005 XXX(ZBEE_ZCL_ATTR_ID_PP_HISTORICAL_COST_CON_FORMAT, 0x0500, "Historical Cost Consumption Formatting" ) \
9006 XXX(ZBEE_ZCL_ATTR_ID_PP_CONSUMPTION_UNIT_OF_MEASUREMENT, 0x0501, "Consumption Unit of Measurement" ) \
9007 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENCY_SCALING_FACTOR, 0x0502, "Currency Scaling Factor" ) \
9008 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENCY, 0x0503, "Currency" ) \
9009 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_DAY_COST_CON_DELIVERED, 0x051C, "Current Day Cost Consumption Delivered" ) \
9010 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_DAY_COST_CON_RECEIVED, 0x051D, "Current Day Cost Consumption Received" ) \
9011 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_COST_CON_DELIVERED, 0x051E, "Previous Day Cost Consumption Delivered" ) \
9012 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_COST_CON_RECEIVED, 0x051F, "Previous Day Cost Consumption Received" ) \
9013 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_2_COST_CON_DELIVERED, 0x0520, "Previous Day 2 Cost Consumption Delivered" ) \
9014 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_2_COST_CON_RECEIVED, 0x0521, "Previous Day 2 Cost Consumption Received" ) \
9015 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_3_COST_CON_DELIVERED, 0x0522, "Previous Day 3 Cost Consumption Delivered" ) \
9016 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_3_COST_CON_RECEIVED, 0x0523, "Previous Day 3 Cost Consumption Received" ) \
9017 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_4_COST_CON_DELIVERED, 0x0524, "Previous Day 4 Cost Consumption Delivered" ) \
9018 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_4_COST_CON_RECEIVED, 0x0525, "Previous Day 4 Cost Consumption Received" ) \
9019 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_5_COST_CON_DELIVERED, 0x0526, "Previous Day 5 Cost Consumption Delivered" ) \
9020 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_5_COST_CON_RECEIVED, 0x0527, "Previous Day 5 Cost Consumption Received" ) \
9021 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_6_COST_CON_DELIVERED, 0x0528, "Previous Day 6 Cost Consumption Delivered" ) \
9022 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_6_COST_CON_RECEIVED, 0x0529, "Previous Day 6 Cost Consumption Received" ) \
9023 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_7_COST_CON_DELIVERED, 0x052A, "Previous Day 7 Cost Consumption Delivered" ) \
9024 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_7_COST_CON_RECEIVED, 0x052B, "Previous Day 7 Cost Consumption Received" ) \
9025 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_8_COST_CON_DELIVERED, 0x052C, "Previous Day 8 Cost Consumption Delivered" ) \
9026 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_DAY_8_COST_CON_RECEIVED, 0x052D, "Previous Day 8 Cost Consumption Received" ) \
9027 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_WEEK_COST_CON_DELIVERED, 0x0530, "Current Week Cost Consumption Delivered" ) \
9028 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_WEEK_COST_CON_RECEIVED, 0x0531, "Current Week Cost Consumption Received" ) \
9029 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_COST_CON_DELIVERED, 0x0532, "Previous Week Cost Consumption Delivered" ) \
9030 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_COST_CON_RECEIVED, 0x0533, "Previous Week Cost Consumption Received" ) \
9031 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_2_COST_CON_DELIVERED, 0x0534, "Previous Week 2 Cost Consumption Delivered" ) \
9032 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_2_COST_CON_RECEIVED, 0x0535, "Previous Week 2 Cost Consumption Received" ) \
9033 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_3_COST_CON_DELIVERED, 0x0536, "Previous Week 3 Cost Consumption Delivered" ) \
9034 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_3_COST_CON_RECEIVED, 0x0537, "Previous Week 3 Cost Consumption Received" ) \
9035 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_4_COST_CON_DELIVERED, 0x0538, "Previous Week 4 Cost Consumption Delivered" ) \
9036 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_4_COST_CON_RECEIVED, 0x0539, "Previous Week 4 Cost Consumption Received" ) \
9037 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_5_COST_CON_DELIVERED, 0x053A, "Previous Week 5 Cost Consumption Delivered" ) \
9038 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_WEEK_5_COST_CON_RECEIVED, 0x053B, "Previous Week 5 Cost Consumption Received" ) \
9039 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_MON_COST_CON_DELIVERED, 0x0540, "Current Month Cost Consumption Delivered" ) \
9040 XXX(ZBEE_ZCL_ATTR_ID_PP_CURRENT_MON_COST_CON_RECEIVED, 0x0541, "Current Month Cost Consumption Received" ) \
9041 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_COST_CON_DELIVERED, 0x0542, "Previous Month Cost Consumption Delivered" ) \
9042 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_COST_CON_RECEIVED, 0x0543, "Previous Month Cost Consumption Received" ) \
9043 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_2_COST_CON_DELIVERED, 0x0544, "Previous Month 2 Cost Consumption Delivered" ) \
9044 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_2_COST_CON_RECEIVED, 0x0545, "Previous Month 2 Cost Consumption Received" ) \
9045 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_3_COST_CON_DELIVERED, 0x0546, "Previous Month 3 Cost Consumption Delivered" ) \
9046 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_3_COST_CON_RECEIVED, 0x0547, "Previous Month 3 Cost Consumption Received" ) \
9047 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_4_COST_CON_DELIVERED, 0x0548, "Previous Month 4 Cost Consumption Delivered" ) \
9048 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_4_COST_CON_RECEIVED, 0x0549, "Previous Month 4 Cost Consumption Received" ) \
9049 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_5_COST_CON_DELIVERED, 0x054A, "Previous Month 5 Cost Consumption Delivered" ) \
9050 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_5_COST_CON_RECEIVED, 0x054B, "Previous Month 5 Cost Consumption Received" ) \
9051 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_6_COST_CON_DELIVERED, 0x054C, "Previous Month 6 Cost Consumption Delivered" ) \
9052 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_6_COST_CON_RECEIVED, 0x054D, "Previous Month 6 Cost Consumption Received" ) \
9053 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_7_COST_CON_DELIVERED, 0x054E, "Previous Month 7 Cost Consumption Delivered" ) \
9054 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_7_COST_CON_RECEIVED, 0x054F, "Previous Month 7 Cost Consumption Received" ) \
9055 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_8_COST_CON_DELIVERED, 0x0550, "Previous Month 8 Cost Consumption Delivered" ) \
9056 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_8_COST_CON_RECEIVED, 0x0551, "Previous Month 8 Cost Consumption Received" ) \
9057 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_9_COST_CON_DELIVERED, 0x0552, "Previous Month 9 Cost Consumption Delivered" ) \
9058 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_9_COST_CON_RECEIVED, 0x0553, "Previous Month 9 Cost Consumption Received" ) \
9059 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_10_COST_CON_DELIVERED, 0x0554, "Previous Month 10 Cost Consumption Delivered" ) \
9060 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_10_COST_CON_RECEIVED, 0x0555, "Previous Month 10 Cost Consumption Received" ) \
9061 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_11_COST_CON_DELIVERED, 0x0556, "Previous Month 11 Cost Consumption Delivered" ) \
9062 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_11_COST_CON_RECEIVED, 0x0557, "Previous Month 11 Cost Consumption Received" ) \
9063 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_12_COST_CON_DELIVERED, 0x0558, "Previous Month 12 Cost Consumption Delivered" ) \
9064 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_12_COST_CON_RECEIVED, 0x0559, "Previous Month 12 Cost Consumption Received" ) \
9065 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_13_COST_CON_DELIVERED, 0x055A, "Previous Month 13 Cost Consumption Delivered" ) \
9066 XXX(ZBEE_ZCL_ATTR_ID_PP_PREVIOUS_MON_13_COST_CON_RECEIVED, 0x055B, "Previous Month 13 Cost Consumption Received" ) \
9067 XXX(ZBEE_ZCL_ATTR_ID_PP_HISTORICAL_FREEZE_TIME, 0x055C, "Historical Freeze Time" ) \
9068 /* Smart Energy */ \
9069 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PP, 0xFFFE, "Attribute Reporting Status" )
9071 VALUE_STRING_ENUM(zbee_zcl_pp_attr_names);
9072 VALUE_STRING_ARRAY(zbee_zcl_pp_attr_names);
9073 static value_string_ext zbee_zcl_pp_attr_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_pp_attr_names);
9075 /* Server Commands Received */
9076 #define zbee_zcl_pp_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
9077 XXX(ZBEE_ZCL_CMD_ID_PP_SELECT_AVAILABLE_EMERGENCY_CREDIT, 0x00, "Select Available Emergency Credit" ) \
9078 XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_DEBT, 0x02, "Change Debt" ) \
9079 XXX(ZBEE_ZCL_CMD_ID_PP_EMERGENCY_CREDIT_SETUP, 0x03, "Emergency Credit Setup" ) \
9080 XXX(ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP, 0x04, "Consumer Top Up" ) \
9081 XXX(ZBEE_ZCL_CMD_ID_PP_CREDIT_ADJUSTMENT, 0x05, "Credit Adjustment" ) \
9082 XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE, 0x06, "Change Payment Mode" ) \
9083 XXX(ZBEE_ZCL_CMD_ID_PP_GET_PREPAY_SNAPTSHOT, 0x07, "Get Prepay Snapshot" ) \
9084 XXX(ZBEE_ZCL_CMD_ID_PP_GET_TOP_UP_LOG, 0x08, "Get Top Up Log" ) \
9085 XXX(ZBEE_ZCL_CMD_ID_PP_SET_LOW_CREDIT_WARNING_LEVEL, 0x09, "Set Low Credit Warning Level" ) \
9086 XXX(ZBEE_ZCL_CMD_ID_PP_GET_DEBT_REPAYMENT_LOG, 0x0A, "Get Debt Repayment Log" ) \
9087 XXX(ZBEE_ZCL_CMD_ID_PP_SET_MAXIMUM_CREDIT_LIMIT, 0x0B, "Set Maximum Credit Limit" ) \
9088 XXX(ZBEE_ZCL_CMD_ID_PP_SET_OVERALL_DEBT_CAP, 0x0C, "Set Overall Debt Cap" )
9090 VALUE_STRING_ENUM(zbee_zcl_pp_srv_rx_cmd_names);
9091 VALUE_STRING_ARRAY(zbee_zcl_pp_srv_rx_cmd_names);
9093 /* Server Commands Generated */
9094 #define zbee_zcl_pp_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
9095 XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_PREPAY_SNAPSHOT, 0x01, "Publish Prepay Snapshot" ) \
9096 XXX(ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE_RESPONSE, 0x02, "Change Payment Mode Response" ) \
9097 XXX(ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP_RESPONSE, 0x03, "Consumer Top Up Response" ) \
9098 XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_TOP_UP_LOG, 0x05, "Publish Top Up Log" ) \
9099 XXX(ZBEE_ZCL_CMD_ID_PP_PUBLISH_DEBT_LOG, 0x06, "Publish Debt Log" )
9101 VALUE_STRING_ENUM(zbee_zcl_pp_srv_tx_cmd_names);
9102 VALUE_STRING_ARRAY(zbee_zcl_pp_srv_tx_cmd_names);
9104 /*************************/
9105 /* Function Declarations */
9106 /*************************/
9107 void proto_register_zbee_zcl_pp(void);
9108 void proto_reg_handoff_zbee_zcl_pp(void);
9110 /* Attribute Dissector Helpers */
9111 static void dissect_zcl_pp_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
9113 /* Command Dissector Helpers */
9114 static void dissect_zcl_pp_select_available_emergency_credit (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9115 static void dissect_zcl_pp_change_debt (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9116 static void dissect_zcl_pp_emergency_credit_setup (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9117 static void dissect_zcl_pp_consumer_top_up (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9118 static void dissect_zcl_pp_credit_adjustment (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9119 static void dissect_zcl_pp_change_payment_mode (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9120 static void dissect_zcl_pp_get_prepay_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9121 static void dissect_zcl_pp_get_top_up_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9122 static void dissect_zcl_pp_set_low_credit_warning_level (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9123 static void dissect_zcl_pp_get_debt_repayment_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9124 static void dissect_zcl_pp_set_maximum_credit_limit (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9125 static void dissect_zcl_pp_set_overall_debt_cap (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9126 static void dissect_zcl_pp_publish_prepay_snapshot (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9127 static void dissect_zcl_pp_change_payment_mode_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9128 static void dissect_zcl_pp_consumer_top_up_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9129 static void dissect_zcl_pp_publish_top_up_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9130 static void dissect_zcl_pp_publish_debt_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
9132 /*************************/
9133 /* Global Variables */
9134 /*************************/
9136 /* Initialize the protocol and registered fields */
9137 static int proto_zbee_zcl_pp;
9139 static int hf_zbee_zcl_pp_srv_tx_cmd_id;
9140 static int hf_zbee_zcl_pp_srv_rx_cmd_id;
9141 static int hf_zbee_zcl_pp_attr_id;
9142 static int hf_zbee_zcl_pp_attr_reporting_status;
9143 static int hf_zbee_zcl_pp_select_available_emc_cmd_issue_date_time;
9144 static int hf_zbee_zcl_pp_select_available_emc_originating_device;
9145 static int hf_zbee_zcl_pp_change_debt_issuer_event_id;
9146 static int hf_zbee_zcl_pp_change_debt_label;
9147 static int hf_zbee_zcl_pp_change_debt_amount;
9148 static int hf_zbee_zcl_pp_change_debt_recovery_method;
9149 static int hf_zbee_zcl_pp_change_debt_amount_type;
9150 static int hf_zbee_zcl_pp_change_debt_recovery_start_time;
9151 static int hf_zbee_zcl_pp_change_debt_recovery_collection_time;
9152 static int hf_zbee_zcl_pp_change_debt_recovery_frequency;
9153 static int hf_zbee_zcl_pp_change_debt_recovery_amount;
9154 static int hf_zbee_zcl_pp_change_debt_recovery_balance_percentage;
9155 static int hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id;
9156 static int hf_zbee_zcl_pp_emergency_credit_setup_start_time;
9157 static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit;
9158 static int hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold;
9159 static int hf_zbee_zcl_pp_consumer_top_up_originating_device;
9160 static int hf_zbee_zcl_pp_consumer_top_up_top_up_code;
9161 static int hf_zbee_zcl_pp_credit_adjustment_issuer_event_id;
9162 static int hf_zbee_zcl_pp_credit_adjustment_start_time;
9163 static int hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type;
9164 static int hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value;
9165 static int hf_zbee_zcl_pp_change_payment_mode_provider_id;
9166 static int hf_zbee_zcl_pp_change_payment_mode_issuer_event_id;
9167 static int hf_zbee_zcl_pp_change_payment_mode_implementation_date_time;
9168 static int hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration;
9169 static int hf_zbee_zcl_pp_change_payment_mode_cut_off_value;
9170 static int hf_zbee_zcl_pp_get_prepay_snapshot_earliest_start_time;
9171 static int hf_zbee_zcl_pp_get_prepay_snapshot_latest_end_time;
9172 static int hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset;
9173 static int hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause;
9174 static int hf_zbee_zcl_pp_get_top_up_log_latest_end_time;
9175 static int hf_zbee_zcl_pp_get_top_up_log_number_of_records;
9176 static int hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level;
9177 static int hf_zbee_zcl_pp_get_debt_repayment_log_latest_end_time;
9178 static int hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts;
9179 static int hf_zbee_zcl_pp_get_debt_repayment_log_debt_type;
9180 static int hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id;
9181 static int hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id;
9182 static int hf_zbee_zcl_pp_set_maximum_credit_limit_implementation_date_time;
9183 static int hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level;
9184 static int hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up;
9185 static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id;
9186 static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id;
9187 static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_implementation_date_time;
9188 static int hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap;
9189 static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id;
9190 static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time;
9191 static int hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found;
9192 static int hf_zbee_zcl_pp_publish_prepay_snapshot_command_index;
9193 static int hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands;
9194 static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause;
9195 static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type;
9196 static int hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload;
9197 static int hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit;
9198 static int hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id;
9199 static int hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit;
9200 static int hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold;
9201 static int hf_zbee_zcl_pp_consumer_top_up_response_result_type;
9202 static int hf_zbee_zcl_pp_consumer_top_up_response_top_up_value;
9203 static int hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up;
9204 static int hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining;
9205 static int hf_zbee_zcl_pp_publish_top_up_log_command_index;
9206 static int hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands;
9207 static int hf_zbee_zcl_pp_publish_top_up_log_top_up_code;
9208 static int hf_zbee_zcl_pp_publish_top_up_log_top_up_amount;
9209 static int hf_zbee_zcl_pp_publish_top_up_log_top_up_time;
9210 static int hf_zbee_zcl_pp_publish_debt_log_command_index;
9211 static int hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands;
9212 static int hf_zbee_zcl_pp_publish_debt_log_collection_time;
9213 static int hf_zbee_zcl_pp_publish_debt_log_amount_collected;
9214 static int hf_zbee_zcl_pp_publish_debt_log_debt_type;
9215 static int hf_zbee_zcl_pp_publish_debt_log_outstanding_debt;
9216 static int hf_zbee_zcl_pp_payment_control_configuration;
9217 static int hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled;
9218 static int hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled;
9219 static int hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled;
9220 static int hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled;
9221 static int hf_zbee_zcl_pp_payment_control_configuration_account_base;
9222 static int hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted;
9223 static int hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration;
9224 static int hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration;
9225 static int hf_zbee_zcl_pp_payment_control_configuration_debt_configuration;
9226 static int hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration;
9227 static int hf_zbee_zcl_pp_payment_control_configuration_reserved;
9228 static int hf_zbee_zcl_pp_snapshot_payload_cause_general;
9229 static int hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period;
9230 static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information;
9231 static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix;
9232 static int hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client;
9233 static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy;
9234 static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier;
9235 static int hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode;
9236 static int hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition;
9237 static int hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition;
9238 static int hf_zbee_zcl_pp_snapshot_payload_cause_reserved;
9240 static int* const zbee_zcl_pp_payment_control_configuration_flags[] = {
9241 &hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled,
9242 &hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled,
9243 &hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled,
9244 &hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled,
9245 &hf_zbee_zcl_pp_payment_control_configuration_account_base,
9246 &hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted,
9247 &hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration,
9248 &hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration,
9249 &hf_zbee_zcl_pp_payment_control_configuration_debt_configuration,
9250 &hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration,
9251 &hf_zbee_zcl_pp_payment_control_configuration_reserved,
9252 NULL
9255 static int* const zbee_zcl_pp_snapshot_payload_cause_flags[] = {
9256 &hf_zbee_zcl_pp_snapshot_payload_cause_general,
9257 &hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period,
9258 &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information,
9259 &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix,
9260 &hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client,
9261 &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy,
9262 &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier,
9263 &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode,
9264 &hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition,
9265 &hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition,
9266 &hf_zbee_zcl_pp_snapshot_payload_cause_reserved,
9267 NULL
9270 /* Initialize the subtree pointers */
9271 #define ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT 3
9272 #define ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT 30
9273 #define ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT 30
9274 #define ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT (ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT + \
9275 ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT + \
9276 ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT)
9278 static int ett_zbee_zcl_pp;
9279 static int ett_zbee_zcl_pp_payment_control_configuration;
9280 static int ett_zbee_zcl_pp_snapshot_payload_cause;
9281 static int ett_zbee_zcl_pp_publish_top_up_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT];
9282 static int ett_zbee_zcl_pp_publish_debt_log_entry[ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT];
9284 /*************************/
9285 /* Function Bodies */
9286 /*************************/
9289 *This function is called by ZCL foundation dissector in order to decode
9291 *@param tree pointer to data tree Wireshark uses to display packet.
9292 *@param tvb pointer to buffer containing raw packet.
9293 *@param offset pointer to buffer offset
9294 *@param attr_id attribute identifier
9295 *@param data_type attribute data type
9296 *@param client_attr ZCL client
9298 static void
9299 dissect_zcl_pp_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
9301 switch (attr_id) {
9302 /* applies to all SE clusters */
9303 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_PP:
9304 proto_tree_add_item(tree, hf_zbee_zcl_pp_attr_reporting_status, tvb, *offset, 1, ENC_NA);
9305 *offset += 1;
9306 break;
9307 case ZBEE_ZCL_ATTR_ID_PP_PAYMENT_CONTROL_CONFIGURATION:
9308 proto_item_append_text(tree, ", Payment Control Configuration");
9309 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_payment_control_configuration,
9310 ett_zbee_zcl_pp_payment_control_configuration, zbee_zcl_pp_payment_control_configuration_flags, ENC_LITTLE_ENDIAN);
9311 *offset += 2;
9312 break;
9313 default: /* Catch all */
9314 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
9315 break;
9317 } /*dissect_zcl_pp_attr_data*/
9320 *ZigBee ZCL Prepayment cluster dissector for wireshark.
9322 *@param tvb pointer to buffer containing raw packet.
9323 *@param pinfo pointer to packet information fields
9324 *@param tree pointer to data tree Wireshark uses to display packet.
9326 static int
9327 dissect_zbee_zcl_pp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
9329 proto_tree *payload_tree;
9330 zbee_zcl_packet *zcl;
9331 unsigned offset = 0;
9332 uint8_t cmd_id;
9333 int rem_len;
9335 /* Reject the packet if data is NULL */
9336 if (data == NULL)
9337 return 0;
9338 zcl = (zbee_zcl_packet *)data;
9339 cmd_id = zcl->cmd_id;
9341 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
9342 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
9343 /* Append the command name to the info column. */
9344 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
9345 val_to_str_const(cmd_id, zbee_zcl_pp_srv_rx_cmd_names, "Unknown Command"),
9346 zcl->tran_seqno);
9348 /* Add the command ID. */
9349 proto_tree_add_uint(tree, hf_zbee_zcl_pp_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
9351 /* Check is this command has a payload, than add the payload tree */
9352 rem_len = tvb_reported_length_remaining(tvb, ++offset);
9353 if (rem_len > 0) {
9354 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_pp, NULL, "Payload");
9356 /* Call the appropriate command dissector */
9357 switch (cmd_id) {
9359 case ZBEE_ZCL_CMD_ID_PP_SELECT_AVAILABLE_EMERGENCY_CREDIT:
9360 dissect_zcl_pp_select_available_emergency_credit(tvb, payload_tree, &offset);
9361 break;
9363 case ZBEE_ZCL_CMD_ID_PP_CHANGE_DEBT:
9364 dissect_zcl_pp_change_debt(tvb, payload_tree, &offset);
9365 break;
9367 case ZBEE_ZCL_CMD_ID_PP_EMERGENCY_CREDIT_SETUP:
9368 dissect_zcl_pp_emergency_credit_setup(tvb, payload_tree, &offset);
9369 break;
9371 case ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP:
9372 dissect_zcl_pp_consumer_top_up(tvb, payload_tree, &offset);
9373 break;
9375 case ZBEE_ZCL_CMD_ID_PP_CREDIT_ADJUSTMENT:
9376 dissect_zcl_pp_credit_adjustment(tvb, payload_tree, &offset);
9377 break;
9379 case ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE:
9380 dissect_zcl_pp_change_payment_mode(tvb, payload_tree, &offset);
9381 break;
9383 case ZBEE_ZCL_CMD_ID_PP_GET_PREPAY_SNAPTSHOT:
9384 dissect_zcl_pp_get_prepay_snapshot(tvb, payload_tree, &offset);
9385 break;
9387 case ZBEE_ZCL_CMD_ID_PP_GET_TOP_UP_LOG:
9388 dissect_zcl_pp_get_top_up_log(tvb, payload_tree, &offset);
9389 break;
9391 case ZBEE_ZCL_CMD_ID_PP_SET_LOW_CREDIT_WARNING_LEVEL:
9392 dissect_zcl_pp_set_low_credit_warning_level(tvb, payload_tree, &offset);
9393 break;
9395 case ZBEE_ZCL_CMD_ID_PP_GET_DEBT_REPAYMENT_LOG:
9396 dissect_zcl_pp_get_debt_repayment_log(tvb, payload_tree, &offset);
9397 break;
9399 case ZBEE_ZCL_CMD_ID_PP_SET_MAXIMUM_CREDIT_LIMIT:
9400 dissect_zcl_pp_set_maximum_credit_limit(tvb, payload_tree, &offset);
9401 break;
9403 case ZBEE_ZCL_CMD_ID_PP_SET_OVERALL_DEBT_CAP:
9404 dissect_zcl_pp_set_overall_debt_cap(tvb, payload_tree, &offset);
9405 break;
9407 default:
9408 break;
9412 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
9413 /* Append the command name to the info column. */
9414 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
9415 val_to_str_const(cmd_id, zbee_zcl_pp_srv_tx_cmd_names, "Unknown Command"),
9416 zcl->tran_seqno);
9418 /* Add the command ID. */
9419 proto_tree_add_uint(tree, hf_zbee_zcl_pp_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
9421 /* Check is this command has a payload, than add the payload tree */
9422 rem_len = tvb_reported_length_remaining(tvb, ++offset);
9423 if (rem_len > 0) {
9424 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_pp, NULL, "Payload");
9426 /* Call the appropriate command dissector */
9427 switch (cmd_id) {
9429 case ZBEE_ZCL_CMD_ID_PP_PUBLISH_PREPAY_SNAPSHOT:
9430 dissect_zcl_pp_publish_prepay_snapshot(tvb, payload_tree, &offset);
9431 break;
9433 case ZBEE_ZCL_CMD_ID_PP_CHANGE_PAYMENT_MODE_RESPONSE:
9434 dissect_zcl_pp_change_payment_mode_response(tvb, payload_tree, &offset);
9435 break;
9437 case ZBEE_ZCL_CMD_ID_PP_CONSUMER_TOP_UP_RESPONSE:
9438 dissect_zcl_pp_consumer_top_up_response(tvb, payload_tree, &offset);
9439 break;
9441 case ZBEE_ZCL_CMD_ID_PP_PUBLISH_TOP_UP_LOG:
9442 dissect_zcl_pp_publish_top_up_log(tvb, payload_tree, &offset);
9443 break;
9445 case ZBEE_ZCL_CMD_ID_PP_PUBLISH_DEBT_LOG:
9446 dissect_zcl_pp_publish_debt_log(tvb, payload_tree, &offset);
9447 break;
9449 default:
9450 break;
9455 return tvb_captured_length(tvb);
9456 } /*dissect_zbee_zcl_pp*/
9459 *This function manages the Select Available Emergency Credit payload
9461 *@param tvb pointer to buffer containing raw packet.
9462 *@param tree pointer to data tree Wireshark uses to display packet.
9463 *@param offset pointer to offset from caller
9465 static void
9466 dissect_zcl_pp_select_available_emergency_credit(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9468 /* Command Issue Date/Time */
9469 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);
9470 *offset += 4;
9472 /* Originating Device */
9473 proto_tree_add_item(tree, hf_zbee_zcl_pp_select_available_emc_originating_device, tvb, *offset, 1, ENC_NA);
9474 *offset += 1;
9475 } /*dissect_zcl_pp_select_available_emergency_credit*/
9478 *This function manages the Change Debt payload
9480 *@param tvb pointer to buffer containing raw packet.
9481 *@param tree pointer to data tree Wireshark uses to display packet.
9482 *@param offset pointer to offset from caller
9484 static void
9485 dissect_zcl_pp_change_debt(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9487 uint8_t label_length;
9489 /* Issuer Event ID */
9490 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9491 *offset += 4;
9493 /* Debt Label */
9494 label_length = tvb_get_uint8(tvb, *offset) + 1;
9495 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_label, tvb, *offset, label_length, ENC_NA);
9496 *offset += label_length;
9498 /* Debt Amount */
9499 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9500 *offset += 4;
9502 /* Debt Recovery Method */
9503 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_method, tvb, *offset, 1, ENC_NA);
9504 *offset += 1;
9506 /* Debt Amount Type */
9507 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_amount_type, tvb, *offset, 1, ENC_NA);
9508 *offset += 1;
9510 /* Debt Recovery Start Time */
9511 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9512 *offset += 4;
9514 /* Debt Recovery Collection Time */
9515 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_collection_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
9516 *offset += 2;
9518 /* Debt Recovery Frequency */
9519 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_frequency, tvb, *offset, 1, ENC_NA);
9520 *offset += 1;
9522 /* Debt Recovery Amount */
9523 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9524 *offset += 4;
9526 /* Debt Recovery Balance Percentage */
9527 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_debt_recovery_balance_percentage, tvb, *offset, 1, ENC_NA);
9528 *offset += 1;
9529 } /*dissect_zcl_pp_change_debt*/
9532 *This function manages the Select Available Emergency Credit payload
9534 *@param tvb pointer to buffer containing raw packet.
9535 *@param tree pointer to data tree Wireshark uses to display packet.
9536 *@param offset pointer to offset from caller
9538 static void
9539 dissect_zcl_pp_emergency_credit_setup(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9541 /* Issuer Event ID */
9542 proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9543 *offset += 4;
9545 /* Start Time */
9546 proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9547 *offset += 4;
9549 /* Emergency Credit Limit */
9550 proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9551 *offset += 4;
9553 /* Emergency Credit Threshold */
9554 proto_tree_add_item(tree, hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9555 *offset += 4;
9556 } /*dissect_zcl_pp_emergency_credit_setup*/
9559 *This function manages the Consumer Top Up payload
9561 *@param tvb pointer to buffer containing raw packet.
9562 *@param tree pointer to data tree Wireshark uses to display packet.
9563 *@param offset pointer to offset from caller
9565 static void
9566 dissect_zcl_pp_consumer_top_up(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9568 int length;
9570 /* Originating Device */
9571 proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_originating_device, tvb, *offset, 1, ENC_NA);
9572 *offset += 1;
9574 /* TopUp Code */
9575 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);
9576 *offset += length;
9577 } /*dissect_zcl_pp_consumer_top_up*/
9580 *This function manages the Credit Adjustment payload
9582 *@param tvb pointer to buffer containing raw packet.
9583 *@param tree pointer to data tree Wireshark uses to display packet.
9584 *@param offset pointer to offset from caller
9586 static void
9587 dissect_zcl_pp_credit_adjustment(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9589 /* Issuer Event ID */
9590 proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9591 *offset += 4;
9593 /* Start Time */
9594 proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9595 *offset += 4;
9597 /* Credit Adjustment Type */
9598 proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type, tvb, *offset, 1, ENC_NA);
9599 *offset += 1;
9601 /* Credit Adjustment Value */
9602 proto_tree_add_item(tree, hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9603 *offset += 4;
9604 } /*dissect_zcl_pp_credit_adjustment*/
9607 *This function manages the Change Payment Mode payload
9609 *@param tvb pointer to buffer containing raw packet.
9610 *@param tree pointer to data tree Wireshark uses to display packet.
9611 *@param offset pointer to offset from caller
9613 static void
9614 dissect_zcl_pp_change_payment_mode(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9616 /* Provider ID */
9617 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9618 *offset += 4;
9620 /* Issuer Event ID */
9621 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9622 *offset += 4;
9624 /* Implementation Date/Time */
9625 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);
9626 *offset += 4;
9628 /* Proposed Payment Control Configuration */
9629 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration,
9630 ett_zbee_zcl_pp_payment_control_configuration, zbee_zcl_pp_payment_control_configuration_flags, ENC_LITTLE_ENDIAN);
9631 *offset += 2;
9633 /* Cut Off Value */
9634 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_cut_off_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9635 *offset += 4;
9636 } /*dissect_zcl_pp_change_payment_mode*/
9639 *This function manages the Get Prepay Snapshot payload
9641 *@param tvb pointer to buffer containing raw packet.
9642 *@param tree pointer to data tree Wireshark uses to display packet.
9643 *@param offset pointer to offset from caller
9645 static void
9646 dissect_zcl_pp_get_prepay_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9648 /* Earliest Start Time */
9649 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);
9650 *offset += 4;
9652 /* Latest End Time */
9653 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);
9654 *offset += 4;
9656 /* Snapshot Offset */
9657 proto_tree_add_item(tree, hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset, tvb, *offset, 1, ENC_NA);
9658 *offset += 1;
9660 /* Snapshot Cause */
9661 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause,
9662 ett_zbee_zcl_pp_snapshot_payload_cause, zbee_zcl_pp_snapshot_payload_cause_flags, ENC_LITTLE_ENDIAN);
9663 *offset += 4;
9664 } /*dissect_zcl_pp_get_prepay_snapshot*/
9667 *This function manages the Get Top Up Log payload
9669 *@param tvb pointer to buffer containing raw packet.
9670 *@param tree pointer to data tree Wireshark uses to display packet.
9671 *@param offset pointer to offset from caller
9673 static void
9674 dissect_zcl_pp_get_top_up_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9676 /* Latest End Time */
9677 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);
9678 *offset += 4;
9680 /* Number of Records */
9681 proto_tree_add_item(tree, hf_zbee_zcl_pp_get_top_up_log_number_of_records, tvb, *offset, 1, ENC_NA);
9682 *offset += 1;
9683 } /*dissect_zcl_pp_get_top_up_log*/
9686 *This function manages the Set Low Credit Warning Level payload
9688 *@param tvb pointer to buffer containing raw packet.
9689 *@param tree pointer to data tree Wireshark uses to display packet.
9690 *@param offset pointer to offset from caller
9692 static void
9693 dissect_zcl_pp_set_low_credit_warning_level(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9695 /* Low Credit Warning Level */
9696 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9697 *offset += 4;
9698 } /*dissect_zcl_pp_set_low_credit_warning_level*/
9701 *This function manages the Get Debt Repayment Log payload
9703 *@param tvb pointer to buffer containing raw packet.
9704 *@param tree pointer to data tree Wireshark uses to display packet.
9705 *@param offset pointer to offset from caller
9707 static void
9708 dissect_zcl_pp_get_debt_repayment_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9710 /* Latest End Time */
9711 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);
9712 *offset += 4;
9714 /* Number of Records */
9715 proto_tree_add_item(tree, hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts, tvb, *offset, 1, ENC_NA);
9716 *offset += 1;
9718 /* Debt Type */
9719 proto_tree_add_item(tree, hf_zbee_zcl_pp_get_debt_repayment_log_debt_type, tvb, *offset, 1, ENC_NA);
9720 *offset += 1;
9721 } /*dissect_zcl_pp_get_debt_repayment_log*/
9724 *This function manages the Set Maximum Credit Limit payload
9726 *@param tvb pointer to buffer containing raw packet.
9727 *@param tree pointer to data tree Wireshark uses to display packet.
9728 *@param offset pointer to offset from caller
9730 static void
9731 dissect_zcl_pp_set_maximum_credit_limit(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9733 /* Provider ID */
9734 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9735 *offset += 4;
9737 /* Issuer Event ID */
9738 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9739 *offset += 4;
9741 /* Implementation Date/Time */
9742 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);
9743 *offset += 4;
9745 /* Maximum Credit Level */
9746 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9747 *offset += 4;
9749 /* Maximum Credit Per Top Up */
9750 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9751 *offset += 4;
9752 } /*dissect_zcl_pp_set_maximum_credit_limit*/
9755 *This function manages the Set Overall Debt Cap payload
9757 *@param tvb pointer to buffer containing raw packet.
9758 *@param tree pointer to data tree Wireshark uses to display packet.
9759 *@param offset pointer to offset from caller
9761 static void
9762 dissect_zcl_pp_set_overall_debt_cap(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9764 /* Provider ID */
9765 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9766 *offset += 4;
9768 /* Issuer Event ID */
9769 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9770 *offset += 4;
9772 /* Implementation Date/Time */
9773 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);
9774 *offset += 4;
9776 /* Overall Debt Cap */
9777 proto_tree_add_item(tree, hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9778 *offset += 4;
9779 } /*dissect_zcl_pp_set_overall_debt_cap*/
9782 *This function manages the Publish Prepay Snapshot payload
9784 *@param tvb pointer to buffer containing raw packet.
9785 *@param tree pointer to data tree Wireshark uses to display packet.
9786 *@param offset pointer to offset from caller
9788 static void
9789 dissect_zcl_pp_publish_prepay_snapshot(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9791 int rem_len;
9793 /* Snapshot ID */
9794 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9795 *offset += 4;
9797 /* Snapshot Time */
9798 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
9799 *offset += 4;
9801 /* Total Snapshots Found */
9802 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found, tvb, *offset, 1, ENC_NA);
9803 *offset += 1;
9805 /* Command Index */
9806 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_command_index, tvb, *offset, 1, ENC_NA);
9807 *offset += 1;
9809 /* Total Number of Commands */
9810 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9811 *offset += 1;
9813 /* Snapshot Cause */
9814 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause,
9815 ett_zbee_zcl_pp_snapshot_payload_cause, zbee_zcl_pp_snapshot_payload_cause_flags, ENC_LITTLE_ENDIAN);
9816 *offset += 4;
9818 /* Snapshot Payload Type */
9819 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type, tvb, *offset, 1, ENC_NA);
9820 *offset += 1;
9822 /* Snapshot Payload */
9823 rem_len = tvb_reported_length_remaining(tvb, *offset);
9824 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload, tvb, *offset, rem_len, ENC_NA);
9825 *offset += rem_len;
9826 } /*dissect_zcl_pp_publish_prepay_snapshot*/
9829 *This function manages the Change Payment Mode Response payload
9831 *@param tvb pointer to buffer containing raw packet.
9832 *@param tree pointer to data tree Wireshark uses to display packet.
9833 *@param offset pointer to offset from caller
9835 static void
9836 dissect_zcl_pp_change_payment_mode_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9838 /* Friendly Credit */
9839 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit, tvb, *offset, 1, ENC_NA);
9840 *offset += 1;
9842 /* Friendly Credit Calendar ID */
9843 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9844 *offset += 4;
9846 /* Emergency Credit Limit */
9847 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9848 *offset += 4;
9850 /* Emergency Credit Threshold */
9851 proto_tree_add_item(tree, hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9852 *offset += 4;
9853 } /*dissect_zcl_pp_change_payment_mode_response*/
9856 *This function manages the Consumer Top Up Response payload
9858 *@param tvb pointer to buffer containing raw packet.
9859 *@param tree pointer to data tree Wireshark uses to display packet.
9860 *@param offset pointer to offset from caller
9862 static void
9863 dissect_zcl_pp_consumer_top_up_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9865 /* Result Type */
9866 proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_result_type, tvb, *offset, 1, ENC_NA);
9867 *offset += 1;
9869 /* Top Up Value */
9870 proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_top_up_value, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9871 *offset += 4;
9873 /* Source of Top up */
9874 proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up, tvb, *offset, 1, ENC_NA);
9875 *offset += 1;
9877 /* Credit Remaining */
9878 proto_tree_add_item(tree, hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9879 *offset += 4;
9880 } /*dissect_zcl_pp_consumer_top_up_response*/
9883 *This function manages the Publish Top Up Log payload
9885 *@param tvb pointer to buffer containing raw packet.
9886 *@param tree pointer to data tree Wireshark uses to display packet.
9887 *@param offset pointer to offset from caller
9889 static void
9890 dissect_zcl_pp_publish_top_up_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9892 unsigned i = 0;
9893 int length;
9894 proto_tree *sub_tree;
9896 /* Command Index */
9897 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_top_up_log_command_index, tvb, *offset, 1, ENC_NA);
9898 *offset += 1;
9900 /* Total Number of Commands */
9901 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9902 *offset += 1;
9904 /* Top Up Payload */
9905 while (tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT) {
9906 /* Add subtree */
9907 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);
9908 i++;
9910 /* Top Up Code */
9911 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);
9912 *offset += length;
9914 /* Top Up Amount */
9915 proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_top_up_log_top_up_amount, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9916 *offset += 4;
9918 /* Top Up Time */
9919 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);
9920 *offset += 4;
9922 /* Set length of subtree */
9923 proto_item_set_end(proto_tree_get_parent(sub_tree), tvb, *offset);
9925 } /*dissect_zcl_pp_publish_top_up_log*/
9928 *This function manages the Publish Debt Log payload
9930 *@param tvb pointer to buffer containing raw packet.
9931 *@param tree pointer to data tree Wireshark uses to display packet.
9932 *@param offset pointer to offset from caller
9934 static void
9935 dissect_zcl_pp_publish_debt_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
9937 unsigned i = 0;
9938 proto_tree *sub_tree;
9940 /* Command Index */
9941 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_debt_log_command_index, tvb, *offset, 1, ENC_NA);
9942 *offset += 1;
9944 /* Total Number of Commands */
9945 proto_tree_add_item(tree, hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands, tvb, *offset, 1, ENC_NA);
9946 *offset += 1;
9948 /* Debt Payload */
9949 while (tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT) {
9950 /* Add subtree */
9951 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);
9952 i++;
9954 /* Collection Time */
9955 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);
9956 *offset += 4;
9958 /* Amount Collected */
9959 proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_amount_collected, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9960 *offset += 4;
9962 /* Debt Type */
9963 proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_debt_type, tvb, *offset, 1, ENC_NA);
9964 *offset += 1;
9966 /* Outstanding Debt */
9967 proto_tree_add_item(sub_tree, hf_zbee_zcl_pp_publish_debt_log_outstanding_debt, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
9968 *offset += 4;
9970 } /*dissect_zcl_pp_publish_debt_log*/
9973 *This function registers the ZCL Prepayment dissector
9976 void
9977 proto_register_zbee_zcl_pp(void)
9979 static hf_register_info hf[] = {
9981 { &hf_zbee_zcl_pp_attr_id,
9982 { "Attribute", "zbee_zcl_se.pp.attr_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_pp_attr_names_ext,
9983 0x0, NULL, HFILL } },
9985 { &hf_zbee_zcl_pp_attr_reporting_status, /* common to all SE clusters */
9986 { "Attribute Reporting Status", "zbee_zcl_se.pp.attr.attr_reporting_status",
9987 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
9989 { &hf_zbee_zcl_pp_srv_tx_cmd_id,
9990 { "Command", "zbee_zcl_se.pp.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_pp_srv_tx_cmd_names),
9991 0x00, NULL, HFILL } },
9993 { &hf_zbee_zcl_pp_srv_rx_cmd_id,
9994 { "Command", "zbee_zcl_se.pp.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_pp_srv_rx_cmd_names),
9995 0x00, NULL, HFILL } },
9997 { &hf_zbee_zcl_pp_select_available_emc_cmd_issue_date_time,
9998 { "Command Issue Date/Time", "zbee_zcl_se.pp.select_available_emc.cmd_issue_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
9999 0x00, NULL, HFILL } },
10001 { &hf_zbee_zcl_pp_select_available_emc_originating_device,
10002 { "Originating Device", "zbee_zcl_se.pp.select_available_emc.originating_device", FT_UINT8, BASE_DEC, NULL,
10003 0x00, NULL, HFILL } },
10005 { &hf_zbee_zcl_pp_change_debt_issuer_event_id,
10006 { "Issuer Event ID", "zbee_zcl_se.pp.change_debt.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10007 0x00, NULL, HFILL } },
10009 { &hf_zbee_zcl_pp_change_debt_label,
10010 { "Debt Label", "zbee_zcl_se.pp.change_debt.debt_label", FT_BYTES, BASE_NONE, NULL,
10011 0x00, NULL, HFILL } },
10013 { &hf_zbee_zcl_pp_change_debt_amount,
10014 { "Debt Amount", "zbee_zcl_se.pp.change_debt.debt_amount", FT_INT32, BASE_DEC, NULL,
10015 0x00, NULL, HFILL } },
10017 { &hf_zbee_zcl_pp_change_debt_recovery_method,
10018 { "Debt Recovery Method", "zbee_zcl_se.pp.change_debt.recovery_method", FT_UINT8, BASE_DEC, NULL,
10019 0x00, NULL, HFILL } },
10021 { &hf_zbee_zcl_pp_change_debt_amount_type,
10022 { "Debt Amount Type", "zbee_zcl_se.pp.change_debt.amount_type", FT_UINT8, BASE_DEC, NULL,
10023 0x00, NULL, HFILL } },
10025 { &hf_zbee_zcl_pp_change_debt_recovery_start_time,
10026 { "Debt Recovery Start Time", "zbee_zcl_se.pp.change_debt.recovery_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10027 0x00, NULL, HFILL } },
10029 { &hf_zbee_zcl_pp_change_debt_recovery_collection_time,
10030 { "Debt Recovery Collection Time", "zbee_zcl_se.pp.change_debt.recovery_collection_time", FT_UINT16, BASE_DEC, NULL,
10031 0x00, NULL, HFILL } },
10033 { &hf_zbee_zcl_pp_change_debt_recovery_frequency,
10034 { "Debt Recovery Frequency", "zbee_zcl_se.pp.change_debt.recovery_frequency", FT_UINT8, BASE_DEC, NULL,
10035 0x00, NULL, HFILL } },
10037 { &hf_zbee_zcl_pp_change_debt_recovery_amount,
10038 { "Debt Recovery Amount", "zbee_zcl_se.pp.change_debt.recovery_amount", FT_INT32, BASE_DEC, NULL,
10039 0x00, NULL, HFILL } },
10041 { &hf_zbee_zcl_pp_change_debt_recovery_balance_percentage,
10042 { "Debt Recovery Balance Percentage", "zbee_zcl_se.pp.change_debt.recovery_balance_percentage", FT_UINT16, BASE_DEC, NULL,
10043 0x00, NULL, HFILL } },
10045 { &hf_zbee_zcl_pp_emergency_credit_setup_issuer_event_id,
10046 { "Issuer Event ID", "zbee_zcl_se.pp.emc_setup.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10047 0x00, NULL, HFILL } },
10049 { &hf_zbee_zcl_pp_emergency_credit_setup_start_time,
10050 { "Start Time", "zbee_zcl_se.pp.emc_setup.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10051 0x00, NULL, HFILL } },
10053 { &hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_limit,
10054 { "Emergency Credit Limit", "zbee_zcl_se.pp.emc_setup.emc_limit", FT_UINT32, BASE_DEC, NULL,
10055 0x00, NULL, HFILL } },
10057 { &hf_zbee_zcl_pp_emergency_credit_setup_emergency_credit_threshold,
10058 { "Emergency Credit Threshold", "zbee_zcl_se.pp.emc_setup.emc_threshold", FT_UINT32, BASE_DEC, NULL,
10059 0x00, NULL, HFILL } },
10061 { &hf_zbee_zcl_pp_consumer_top_up_originating_device,
10062 { "Originating Device", "zbee_zcl_se.pp.consumer_top_up.originating_device", FT_UINT8, BASE_DEC, NULL,
10063 0x00, NULL, HFILL } },
10065 { &hf_zbee_zcl_pp_consumer_top_up_top_up_code,
10066 { "TopUp Code", "zbee_zcl_se.pp.consumer_top_up.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
10067 0x00, NULL, HFILL } },
10069 { &hf_zbee_zcl_pp_credit_adjustment_issuer_event_id,
10070 { "Issuer Event ID", "zbee_zcl_se.pp.credit_adjustment.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10071 0x00, NULL, HFILL } },
10073 { &hf_zbee_zcl_pp_credit_adjustment_start_time,
10074 { "Start Time", "zbee_zcl_se.pp.credit_adjustment.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10075 0x00, NULL, HFILL } },
10077 { &hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_type,
10078 { "Credit Adjustment Type", "zbee_zcl_se.pp.credit_adjustment.credit_adjustment_type", FT_UINT8, BASE_DEC, NULL,
10079 0x00, NULL, HFILL } },
10081 { &hf_zbee_zcl_pp_credit_adjustment_credit_adjustment_value,
10082 { "Credit Adjustment Value", "zbee_zcl_se.pp.credit_adjustment.credit_adjustment_value", FT_INT32, BASE_DEC, NULL,
10083 0x00, NULL, HFILL } },
10085 { &hf_zbee_zcl_pp_change_payment_mode_provider_id,
10086 { "Provider ID", "zbee_zcl_se.pp.change_payment_mode.provider_id", FT_UINT32, BASE_DEC, NULL,
10087 0x00, NULL, HFILL } },
10089 { &hf_zbee_zcl_pp_change_payment_mode_issuer_event_id,
10090 { "Issuer Event ID", "zbee_zcl_se.pp.change_payment_mode.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10091 0x00, NULL, HFILL } },
10093 { &hf_zbee_zcl_pp_change_payment_mode_implementation_date_time,
10094 { "Implementation Date/Time", "zbee_zcl_se.pp.change_payment_mode.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10095 0x00, NULL, HFILL } },
10097 { &hf_zbee_zcl_pp_change_payment_mode_proposed_payment_control_configuration,
10098 { "Proposed Payment Control Configuration", "zbee_zcl_se.pp.change_payment_mode.payment_control_configuration", FT_UINT16, BASE_HEX, NULL,
10099 0x00, NULL, HFILL } },
10101 { &hf_zbee_zcl_pp_change_payment_mode_cut_off_value,
10102 { "Cut Off Value", "zbee_zcl_se.pp.change_payment_mode.cut_off_value", FT_INT32, BASE_DEC, NULL,
10103 0x00, NULL, HFILL } },
10105 { &hf_zbee_zcl_pp_get_prepay_snapshot_earliest_start_time,
10106 { "Earliest Start Time", "zbee_zcl_se.pp.get_prepay_snapshot.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10107 0x00, NULL, HFILL } },
10109 { &hf_zbee_zcl_pp_get_prepay_snapshot_latest_end_time,
10110 { "Latest End Time", "zbee_zcl_se.pp.get_prepay_snapshot.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10111 0x00, NULL, HFILL } },
10113 { &hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_offset,
10114 { "Snapshot Offset", "zbee_zcl_se.pp.get_prepay_snapshot.snapshot_offset", FT_UINT8, BASE_DEC, NULL,
10115 0x00, NULL, HFILL } },
10117 { &hf_zbee_zcl_pp_get_prepay_snapshot_snapshot_cause,
10118 { "Snapshot Cause", "zbee_zcl_se.pp.get_prepay_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
10119 0x00, NULL, HFILL } },
10121 { &hf_zbee_zcl_pp_get_top_up_log_latest_end_time,
10122 { "Latest End Time", "zbee_zcl_se.pp.get_top_up_log.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10123 0x00, NULL, HFILL } },
10125 { &hf_zbee_zcl_pp_get_top_up_log_number_of_records,
10126 { "Number of Records", "zbee_zcl_se.pp.get_top_up_log.number_of_records", FT_UINT8, BASE_DEC, NULL,
10127 0x00, NULL, HFILL } },
10129 { &hf_zbee_zcl_pp_set_low_credit_warning_level_low_credit_warning_level,
10130 { "Low Credit Warning Level", "zbee_zcl_se.pp.set_low_credit_warning_level.low_credit_warning_level", FT_UINT32, BASE_DEC, NULL,
10131 0x00, NULL, HFILL } },
10133 { &hf_zbee_zcl_pp_get_debt_repayment_log_latest_end_time,
10134 { "Latest End Time", "zbee_zcl_se.pp.get_debt_repayment_log.latest_end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10135 0x00, NULL, HFILL } },
10137 { &hf_zbee_zcl_pp_get_debt_repayment_log_number_of_debts,
10138 { "Number of Records", "zbee_zcl_se.pp.get_debt_repayment_log.number_of_records", FT_UINT8, BASE_DEC, NULL,
10139 0x00, NULL, HFILL } },
10141 { &hf_zbee_zcl_pp_get_debt_repayment_log_debt_type,
10142 { "Debt Type", "zbee_zcl_se.pp.get_debt_repayment_log.debt_type", FT_UINT8, BASE_DEC, NULL,
10143 0x00, NULL, HFILL } },
10145 { &hf_zbee_zcl_pp_set_maximum_credit_limit_provider_id,
10146 { "Provider ID", "zbee_zcl_se.pp.set_maximum_credit_limit.provider_id", FT_UINT32, BASE_DEC, NULL,
10147 0x00, NULL, HFILL } },
10149 { &hf_zbee_zcl_pp_set_maximum_credit_limit_issuer_event_id,
10150 { "Issuer Event ID", "zbee_zcl_se.pp.set_maximum_credit_limit.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10151 0x00, NULL, HFILL } },
10153 { &hf_zbee_zcl_pp_set_maximum_credit_limit_implementation_date_time,
10154 { "Implementation Date/Time", "zbee_zcl_se.pp.set_maximum_credit_limit.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10155 0x00, NULL, HFILL } },
10157 { &hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_level,
10158 { "Maximum Credit Level", "zbee_zcl_se.pp.set_maximum_credit_limit.max_credit_level", FT_UINT32, BASE_DEC, NULL,
10159 0x00, NULL, HFILL } },
10161 { &hf_zbee_zcl_pp_set_maximum_credit_limit_maximum_credit_per_top_up,
10162 { "Maximum Credit Per Top Up", "zbee_zcl_se.pp.set_maximum_credit_limit.max_credit_per_top_up", FT_UINT32, BASE_DEC, NULL,
10163 0x00, NULL, HFILL } },
10165 { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_provider_id,
10166 { "Provider ID", "zbee_zcl_se.pp.set_overall_debt_cap_limit.provider_id", FT_UINT32, BASE_DEC, NULL,
10167 0x00, NULL, HFILL } },
10169 { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_issuer_event_id,
10170 { "Issuer Event ID", "zbee_zcl_se.pp.set_overall_debt_cap_limit.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
10171 0x00, NULL, HFILL } },
10173 { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_implementation_date_time,
10174 { "Implementation Date/Time", "zbee_zcl_se.pp.set_overall_debt_cap_limit.implementation_date_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10175 0x00, NULL, HFILL } },
10177 { &hf_zbee_zcl_pp_set_overall_debt_cap_limit_overall_debt_cap,
10178 { "Overall Debt Cap", "zbee_zcl_se.pp.set_overall_debt_cap_limit.overall_debt_cap", FT_INT32, BASE_DEC, NULL,
10179 0x00, NULL, HFILL } },
10181 { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_id,
10182 { "Snapshot ID", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_id", FT_UINT32, BASE_DEC, NULL,
10183 0x00, NULL, HFILL } },
10185 { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_time,
10186 { "Snapshot Time", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10187 0x00, NULL, HFILL } },
10189 { &hf_zbee_zcl_pp_publish_prepay_snapshot_total_snapshots_found,
10190 { "Total Snapshots Found", "zbee_zcl_se.pp.publish_prepay_snapshot.total_snapshots_found", FT_UINT8, BASE_DEC, NULL,
10191 0x00, NULL, HFILL } },
10193 { &hf_zbee_zcl_pp_publish_prepay_snapshot_command_index,
10194 { "Command Index", "zbee_zcl_se.pp.publish_prepay_snapshot.command_index", FT_UINT8, BASE_DEC, NULL,
10195 0x00, NULL, HFILL } },
10197 { &hf_zbee_zcl_pp_publish_prepay_snapshot_total_number_of_commands,
10198 { "Total Number of Commands", "zbee_zcl_se.pp.publish_prepay_snapshot.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10199 0x00, NULL, HFILL } },
10201 { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_cause,
10202 { "Snapshot Cause", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_cause", FT_UINT32, BASE_HEX, NULL,
10203 0x00, NULL, HFILL } },
10205 { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload_type,
10206 { "Snapshot Payload Type", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_payload_type", FT_UINT8, BASE_DEC, NULL,
10207 0x00, NULL, HFILL } },
10209 { &hf_zbee_zcl_pp_publish_prepay_snapshot_snapshot_payload,
10210 { "Snapshot Payload", "zbee_zcl_se.pp.publish_prepay_snapshot.snapshot_payload", FT_BYTES, BASE_NONE, NULL,
10211 0x00, NULL, HFILL } },
10213 { &hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit,
10214 { "Friendly Credit", "zbee_zcl_se.pp.change_payment_mode_response.friendly_credit", FT_UINT8, BASE_HEX, NULL,
10215 0x00, NULL, HFILL } },
10217 { &hf_zbee_zcl_pp_change_payment_mode_response_friendly_credit_calendar_id,
10218 { "Friendly Credit Calendar ID", "zbee_zcl_se.pp.change_payment_mode_response.friendly_credit_calendar_id", FT_UINT32, BASE_DEC, NULL,
10219 0x00, NULL, HFILL } },
10221 { &hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_limit,
10222 { "Emergency Credit Limit", "zbee_zcl_se.pp.change_payment_mode_response.emc_limit", FT_UINT32, BASE_DEC, NULL,
10223 0x00, NULL, HFILL } },
10225 { &hf_zbee_zcl_pp_change_payment_mode_response_emergency_credit_threshold,
10226 { "Emergency Credit Threshold", "zbee_zcl_se.pp.change_payment_mode_response.emc_threshold", FT_UINT32, BASE_DEC, NULL,
10227 0x00, NULL, HFILL } },
10229 { &hf_zbee_zcl_pp_consumer_top_up_response_result_type,
10230 { "Result Type", "zbee_zcl_se.pp.consumer_top_up_response.result_type", FT_UINT8, BASE_DEC, NULL,
10231 0x00, NULL, HFILL } },
10233 { &hf_zbee_zcl_pp_consumer_top_up_response_top_up_value,
10234 { "Top Up Value", "zbee_zcl_se.pp.consumer_top_up_response.top_up_value", FT_INT32, BASE_DEC, NULL,
10235 0x00, NULL, HFILL } },
10237 { &hf_zbee_zcl_pp_consumer_top_up_response_source_of_top_up,
10238 { "Source of Top up", "zbee_zcl_se.pp.consumer_top_up_response.source_of_top_up", FT_UINT8, BASE_DEC, NULL,
10239 0x00, NULL, HFILL } },
10241 { &hf_zbee_zcl_pp_consumer_top_up_response_credit_remaining,
10242 { "Credit Remaining", "zbee_zcl_se.pp.consumer_top_up_response.credit_remaining", FT_INT32, BASE_DEC, NULL,
10243 0x00, NULL, HFILL } },
10245 { &hf_zbee_zcl_pp_publish_top_up_log_command_index,
10246 { "Command Index", "zbee_zcl_se.pp.publish_top_up_log.command_index", FT_UINT8, BASE_DEC, NULL,
10247 0x00, NULL, HFILL } },
10249 { &hf_zbee_zcl_pp_publish_top_up_log_total_number_of_commands,
10250 { "Total Number of Commands", "zbee_zcl_se.pp.publish_top_up_log.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10251 0x00, NULL, HFILL } },
10253 { &hf_zbee_zcl_pp_publish_top_up_log_top_up_code,
10254 { "TopUp Code", "zbee_zcl_se.pp.publish_top_up_log.top_up_code", FT_UINT_BYTES, SEP_COLON, NULL,
10255 0x00, NULL, HFILL } },
10257 { &hf_zbee_zcl_pp_publish_top_up_log_top_up_amount,
10258 { "TopUp Amount", "zbee_zcl_se.pp.publish_top_up_log.top_up_amount", FT_INT32, BASE_DEC, NULL,
10259 0x00, NULL, HFILL } },
10261 { &hf_zbee_zcl_pp_publish_top_up_log_top_up_time,
10262 { "TopUp Time", "zbee_zcl_se.pp.publish_top_up_log.top_up_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10263 0x00, NULL, HFILL } },
10265 { &hf_zbee_zcl_pp_publish_debt_log_command_index,
10266 { "Command Index", "zbee_zcl_se.pp.publish_debt_log.command_index", FT_UINT8, BASE_DEC, NULL,
10267 0x00, NULL, HFILL } },
10269 { &hf_zbee_zcl_pp_publish_debt_log_total_number_of_commands,
10270 { "Total Number of Commands", "zbee_zcl_se.pp.publish_debt_log.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
10271 0x00, NULL, HFILL } },
10273 { &hf_zbee_zcl_pp_publish_debt_log_collection_time,
10274 { "Collection Time", "zbee_zcl_se.pp.publish_debt_log.collection_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
10275 0x00, NULL, HFILL } },
10277 { &hf_zbee_zcl_pp_publish_debt_log_amount_collected,
10278 { "Amount Collected", "zbee_zcl_se.pp.publish_debt_log.amount_collected", FT_INT32, BASE_DEC, NULL,
10279 0x00, NULL, HFILL } },
10281 { &hf_zbee_zcl_pp_publish_debt_log_debt_type,
10282 { "Debt Type", "zbee_zcl_se.pp.publish_debt_log.debt_type", FT_UINT8, BASE_DEC, NULL,
10283 0x00, NULL, HFILL } },
10285 { &hf_zbee_zcl_pp_publish_debt_log_outstanding_debt,
10286 { "Outstanding Debt", "zbee_zcl_se.pp.publish_debt_log.outstanding_debt", FT_UINT32, BASE_DEC, NULL,
10287 0x00, NULL, HFILL } },
10289 { &hf_zbee_zcl_pp_payment_control_configuration,
10290 { "Payment Control Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration", FT_UINT16, BASE_HEX, NULL,
10291 0x00, NULL, HFILL } },
10292 { &hf_zbee_zcl_pp_payment_control_configuration_disconnection_enabled,
10293 { "Disconnection Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.disconnection_enabled", FT_BOOLEAN, 16, NULL,
10294 0x0001, NULL, HFILL } },
10295 { &hf_zbee_zcl_pp_payment_control_configuration_prepayment_enabled,
10296 { "Prepayment Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.prepayment_enabled", FT_BOOLEAN, 16, NULL,
10297 0x0002, NULL, HFILL } },
10298 { &hf_zbee_zcl_pp_payment_control_configuration_credit_management_enabled,
10299 { "Credit Management Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.credit_management_enabled", FT_BOOLEAN, 16, NULL,
10300 0x0004, NULL, HFILL } },
10301 { &hf_zbee_zcl_pp_payment_control_configuration_credit_display_enabled,
10302 { "Credit Display Enabled", "zbee_zcl_se.pp.attr.payment_control_configuration.credit_display_enabled", FT_BOOLEAN, 16, NULL,
10303 0x0010, NULL, HFILL } },
10304 { &hf_zbee_zcl_pp_payment_control_configuration_account_base,
10305 { "Account Base", "zbee_zcl_se.pp.attr.payment_control_configuration.account_base", FT_BOOLEAN, 16, NULL,
10306 0x0040, NULL, HFILL } },
10307 { &hf_zbee_zcl_pp_payment_control_configuration_contactor_fitted,
10308 { "Contactor Fitted", "zbee_zcl_se.pp.attr.payment_control_configuration.contactor_fitted", FT_BOOLEAN, 16, NULL,
10309 0x0080, NULL, HFILL } },
10310 { &hf_zbee_zcl_pp_payment_control_configuration_standing_charge_configuration,
10311 { "Standing Charge Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.standing_charge_configuration", FT_BOOLEAN, 16, NULL,
10312 0x0100, NULL, HFILL } },
10313 { &hf_zbee_zcl_pp_payment_control_configuration_emergency_standing_charge_configuration,
10314 { "Emergency Standing Charge Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.emergency_standing_charge_configuration", FT_BOOLEAN, 16, NULL,
10315 0x0200, NULL, HFILL } },
10316 { &hf_zbee_zcl_pp_payment_control_configuration_debt_configuration,
10317 { "Debt Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.debt_configuration", FT_BOOLEAN, 16, NULL,
10318 0x0400, NULL, HFILL } },
10319 { &hf_zbee_zcl_pp_payment_control_configuration_emergency_debt_configuration,
10320 { "Emergency Debt Configuration", "zbee_zcl_se.pp.attr.payment_control_configuration.emergency_debt_configuration", FT_BOOLEAN, 16, NULL,
10321 0x0800, NULL, HFILL } },
10322 { &hf_zbee_zcl_pp_payment_control_configuration_reserved,
10323 { "Reserved", "zbee_zcl_se.pp.attr.payment_control_configuration.reserved", FT_UINT16, BASE_HEX, NULL,
10324 0xF028, NULL, HFILL } },
10326 { &hf_zbee_zcl_pp_snapshot_payload_cause_general,
10327 { "General", "zbee_zcl_se.pp.snapshot_payload_cause.general", FT_BOOLEAN, 32, NULL,
10328 0x00000001, NULL, HFILL } },
10329 { &hf_zbee_zcl_pp_snapshot_payload_cause_end_of_billing_period,
10330 { "End of Billing Period", "zbee_zcl_se.pp.snapshot_payload_cause.end_of_billing_period", FT_BOOLEAN, 32, NULL,
10331 0x00000002, NULL, HFILL } },
10332 { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tariff_information,
10333 { "Change of Tariff Information", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_tariff_information", FT_BOOLEAN, 32, NULL,
10334 0x00000008, NULL, HFILL } },
10335 { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_price_matrix,
10336 { "Change of Price Matrix", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_price_matrix", FT_BOOLEAN, 32, NULL,
10337 0x00000010, NULL, HFILL } },
10338 { &hf_zbee_zcl_pp_snapshot_payload_cause_manually_triggered_from_client,
10339 { "Manually Triggered from Client", "zbee_zcl_se.pp.snapshot_payload_cause.manually_triggered_from_client", FT_BOOLEAN, 32, NULL,
10340 0x00000400, NULL, HFILL } },
10341 { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_tenancy,
10342 { "Change of Tenancy", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_tenancy", FT_BOOLEAN, 32, NULL,
10343 0x00001000, NULL, HFILL } },
10344 { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_supplier,
10345 { "Change of Supplier", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_supplier", FT_BOOLEAN, 32, NULL,
10346 0x00002000, NULL, HFILL } },
10347 { &hf_zbee_zcl_pp_snapshot_payload_cause_change_of_meter_mode,
10348 { "Change of (Meter) Mode", "zbee_zcl_se.pp.snapshot_payload_cause.change_of_meter_mode", FT_BOOLEAN, 32, NULL,
10349 0x00004000, NULL, HFILL } },
10350 { &hf_zbee_zcl_pp_snapshot_payload_cause_top_up_addition,
10351 { "TopUp addition", "zbee_zcl_se.pp.snapshot_payload_cause.top_up_addition", FT_BOOLEAN, 32, NULL,
10352 0x00040000, NULL, HFILL } },
10353 { &hf_zbee_zcl_pp_snapshot_payload_cause_debt_credit_addition,
10354 { "Debt/Credit addition", "zbee_zcl_se.pp.snapshot_payload_cause.debt_credit_addition", FT_BOOLEAN, 32, NULL,
10355 0x00080000, NULL, HFILL } },
10356 { &hf_zbee_zcl_pp_snapshot_payload_cause_reserved,
10357 { "Reserved", "zbee_zcl_se.pp.snapshot_payload_cause.reserved", FT_UINT32, BASE_HEX, NULL,
10358 0xFFF38BE4, NULL, HFILL } },
10361 /* ZCL Prepayment subtrees */
10362 int *ett[ZBEE_ZCL_SE_PP_NUM_TOTAL_ETT];
10363 ett[0] = &ett_zbee_zcl_pp;
10364 ett[1] = &ett_zbee_zcl_pp_payment_control_configuration;
10365 ett[2] = &ett_zbee_zcl_pp_snapshot_payload_cause;
10367 unsigned j = ZBEE_ZCL_SE_PP_NUM_INDIVIDUAL_ETT;
10369 /* Initialize Publish Top Up Log subtrees */
10370 for (unsigned i = 0; i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_TOP_UP_LOG_ETT; i++, j++) {
10371 ett[j] = &ett_zbee_zcl_pp_publish_top_up_entry[i];
10374 /* Initialize Publish Debt Log subtrees */
10375 for (unsigned i = 0; i < ZBEE_ZCL_SE_PP_NUM_PUBLISH_DEBT_LOG_ETT; i++, j++ ) {
10376 ett[j] = &ett_zbee_zcl_pp_publish_debt_log_entry[i];
10379 /* Register the ZigBee ZCL Prepayment cluster protocol name and description */
10380 proto_zbee_zcl_pp = proto_register_protocol("ZigBee ZCL Prepayment", "ZCL Prepayment", ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT);
10381 proto_register_field_array(proto_zbee_zcl_pp, hf, array_length(hf));
10382 proto_register_subtree_array(ett, array_length(ett));
10384 /* Register the ZigBee ZCL Prepayment dissector. */
10385 register_dissector(ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT, dissect_zbee_zcl_pp, proto_zbee_zcl_pp);
10386 } /*proto_register_zbee_zcl_pp*/
10389 *Hands off the ZCL Prepayment dissector.
10392 void
10393 proto_reg_handoff_zbee_zcl_pp(void)
10395 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_PRE_PAYMENT,
10396 proto_zbee_zcl_pp,
10397 ett_zbee_zcl_pp,
10398 ZBEE_ZCL_CID_PRE_PAYMENT,
10399 ZBEE_MFG_CODE_NONE,
10400 hf_zbee_zcl_pp_attr_id,
10402 hf_zbee_zcl_pp_srv_rx_cmd_id,
10403 hf_zbee_zcl_pp_srv_tx_cmd_id,
10404 (zbee_zcl_fn_attr_data)dissect_zcl_pp_attr_data
10406 } /*proto_reg_handoff_zbee_zcl_pp*/
10408 /* ########################################################################## */
10409 /* #### (0x0706) ENERGY MANAGEMENT CLUSTER ################################## */
10410 /* ########################################################################## */
10412 /* Attributes */
10413 #define zbee_zcl_energy_management_attr_names_VALUE_STRING_LIST(XXX) \
10414 /* Block Threshold (Delivered) Set */ \
10415 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_LOAD_CONTROL_STATE, 0x0000, "Load Control State" ) \
10416 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CURRENT_EVENT_ID, 0x0001, "Current Event ID" ) \
10417 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CURRENT_EVENT_STATUS, 0x0002, "Current Event Status" ) \
10418 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_CONFORMANCE_LEVEL, 0x0003, "Conformance Level" ) \
10419 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_OFF_TIME, 0x0004, "Minimum Off Time" ) \
10420 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_ON_TIME, 0x0005, "Minimum On Time" ) \
10421 XXX(ZBEE_ZCL_ATTR_ID_ENERGY_MANAGEMENT_MINIMUM_CYCLE_PERIOD, 0x0006, "Minimum Cycle Period" ) \
10422 /* Smart Energy */ \
10423 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_ENERGY_MANAGEMENT, 0xFFFE, "Attribute Reporting Status" )
10425 VALUE_STRING_ENUM(zbee_zcl_energy_management_attr_names);
10426 VALUE_STRING_ARRAY(zbee_zcl_energy_management_attr_names);
10428 /* Server Commands Received */
10429 #define zbee_zcl_energy_management_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
10430 XXX(ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_MANAGE_EVENT, 0x00, "Manage Event" )
10432 VALUE_STRING_ENUM(zbee_zcl_energy_management_srv_rx_cmd_names);
10433 VALUE_STRING_ARRAY(zbee_zcl_energy_management_srv_rx_cmd_names);
10435 /* Server Commands Generated */
10436 #define zbee_zcl_energy_management_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
10437 XXX(ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_REPORT_EVENT_STATUS, 0x00, "Report Event Status" )
10439 VALUE_STRING_ENUM(zbee_zcl_energy_management_srv_tx_cmd_names);
10440 VALUE_STRING_ARRAY(zbee_zcl_energy_management_srv_tx_cmd_names);
10442 /*************************/
10443 /* Function Declarations */
10444 /*************************/
10445 void proto_register_zbee_zcl_energy_management(void);
10446 void proto_reg_handoff_zbee_zcl_energy_management(void);
10448 static void dissect_zbee_zcl_energy_management_manage_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10449 static void dissect_zbee_zcl_energy_management_report_event_status (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
10451 /* Attribute Dissector Helpers */
10452 static void dissect_zcl_energy_management_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
10454 /*************************/
10455 /* Global Variables */
10456 /*************************/
10458 /* Initialize the protocol and registered fields */
10459 static int proto_zbee_zcl_energy_management;
10461 static int hf_zbee_zcl_energy_management_srv_tx_cmd_id;
10462 static int hf_zbee_zcl_energy_management_srv_rx_cmd_id;
10463 static int hf_zbee_zcl_energy_management_attr_id;
10464 static int hf_zbee_zcl_energy_management_attr_reporting_status;
10465 static int hf_zbee_zcl_energy_management_issuer_event_id;
10466 static int hf_zbee_zcl_energy_management_device_class;
10467 static int hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace;
10468 static int hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters;
10469 static int hf_zbee_zcl_energy_management_device_class_water_heater;
10470 static int hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi;
10471 static int hf_zbee_zcl_energy_management_device_class_smart_appliances;
10472 static int hf_zbee_zcl_energy_management_device_class_irrigation_pump;
10473 static int hf_zbee_zcl_energy_management_device_class_managed_c_i_loads;
10474 static int hf_zbee_zcl_energy_management_device_class_simple_misc_loads;
10475 static int hf_zbee_zcl_energy_management_device_class_exterior_lighting;
10476 static int hf_zbee_zcl_energy_management_device_class_interior_lighting;
10477 static int hf_zbee_zcl_energy_management_device_class_electric_vehicle;
10478 static int hf_zbee_zcl_energy_management_device_class_generation_systems;
10479 static int hf_zbee_zcl_energy_management_device_class_reserved;
10480 static int hf_zbee_zcl_energy_management_utility_enrollment_group;
10481 static int hf_zbee_zcl_energy_management_action_required;
10482 static int hf_zbee_zcl_energy_management_action_required_opt_out_of_event;
10483 static int hf_zbee_zcl_energy_management_action_required_opt_into_event;
10484 static int hf_zbee_zcl_energy_management_action_required_disable_duty_cycling;
10485 static int hf_zbee_zcl_energy_management_action_required_enable_duty_cycling;
10486 static int hf_zbee_zcl_energy_management_action_required_reserved;
10488 static int hf_zbee_zcl_energy_management_report_event_issuer_event_id;
10489 static int hf_zbee_zcl_energy_management_report_event_event_status;
10490 static int hf_zbee_zcl_energy_management_report_event_event_status_time;
10491 static int hf_zbee_zcl_energy_management_report_event_criticality_level_applied;
10492 static int hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied;
10493 static int hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied;
10494 static int hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage;
10495 static int hf_zbee_zcl_energy_management_report_event_duty_cycle;
10496 static int hf_zbee_zcl_energy_management_report_event_event_control;
10497 static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time;
10498 static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time;
10499 static int hf_zbee_zcl_energy_management_report_event_event_control_reserved;
10502 static int* const zbee_zcl_energy_management_device_classes[] = {
10503 &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
10504 &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
10505 &hf_zbee_zcl_energy_management_device_class_water_heater,
10506 &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
10507 &hf_zbee_zcl_energy_management_device_class_smart_appliances,
10508 &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
10509 &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
10510 &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
10511 &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
10512 &hf_zbee_zcl_energy_management_device_class_interior_lighting,
10513 &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
10514 &hf_zbee_zcl_energy_management_device_class_generation_systems,
10515 &hf_zbee_zcl_energy_management_device_class_reserved,
10516 NULL
10519 static int* const zbee_zcl_energy_management_action_required[] = {
10520 &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
10521 &hf_zbee_zcl_energy_management_action_required_opt_into_event,
10522 &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
10523 &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
10524 &hf_zbee_zcl_energy_management_action_required_reserved,
10525 NULL
10528 static int* const hf_zbee_zcl_energy_management_event_control_flags[] = {
10529 &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
10530 &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
10531 &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
10532 NULL
10535 /* Initialize the subtree pointers */
10536 static int ett_zbee_zcl_energy_management;
10537 static int ett_zbee_zcl_energy_management_device_class;
10538 static int ett_zbee_zcl_energy_management_actions_required;
10539 static int ett_zbee_zcl_energy_management_report_event_event_control;
10541 static const range_string zbee_zcl_energy_management_load_control_event_criticality_level[] = {
10542 { 0x0, 0x0, "Reserved" },
10543 { 0x1, 0x1, "Green" },
10544 { 0x2, 0x2, "1" },
10545 { 0x3, 0x3, "2" },
10546 { 0x4, 0x4, "3" },
10547 { 0x5, 0x5, "4" },
10548 { 0x6, 0x6, "5" },
10549 { 0x7, 0x7, "Emergency" },
10550 { 0x8, 0x8, "Planned Outage" },
10551 { 0x9, 0x9, "Service Disconnect" },
10552 { 0x0A, 0x0F, "Utility Defined" },
10553 { 0x10, 0xFF, "Reserved" },
10554 { 0, 0, NULL }
10557 /*************************/
10558 /* Function Bodies */
10559 /*************************/
10562 *This function is called by ZCL foundation dissector in order to decode
10564 *@param tree pointer to data tree Wireshark uses to display packet.
10565 *@param tvb pointer to buffer containing raw packet.
10566 *@param offset pointer to buffer offset
10567 *@param attr_id attribute identifier
10568 *@param data_type attribute data type
10569 *@param client_attr ZCL client
10571 static void
10572 dissect_zcl_energy_management_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
10574 switch (attr_id) {
10575 /* applies to all SE clusters */
10576 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_ENERGY_MANAGEMENT:
10577 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_attr_reporting_status, tvb, *offset, 1, ENC_NA);
10578 *offset += 1;
10579 break;
10581 default: /* Catch all */
10582 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
10583 break;
10585 } /*dissect_zcl_energy_management_attr_data*/
10588 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10590 *@param tvb pointer to buffer containing raw packet.
10591 *@param tree pointer to data tree Wireshark uses to display packet.
10592 *@param offset pointer to buffer offset
10594 static void
10595 dissect_zbee_zcl_energy_management_manage_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
10597 /* Issuer Event ID */
10598 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_issuer_event_id, tvb,
10599 *offset, 4, ENC_LITTLE_ENDIAN);
10600 *offset += 4;
10602 /* Device Class */
10603 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_device_class, ett_zbee_zcl_energy_management_device_class,
10604 zbee_zcl_energy_management_device_classes, ENC_LITTLE_ENDIAN);
10605 *offset += 2;
10607 /* Utility Enrollment Group */
10608 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_utility_enrollment_group, tvb,
10609 *offset, 1, ENC_NA);
10610 *offset += 1;
10612 /* Action(s) Required */
10613 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_action_required, ett_zbee_zcl_energy_management_actions_required,
10614 zbee_zcl_energy_management_action_required, ENC_NA);
10615 *offset += 1;
10619 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10621 *@param tvb pointer to buffer containing raw packet.
10622 *@param tree pointer to data tree Wireshark uses to display packet.
10623 *@param offset pointer to buffer offset
10625 static void
10626 dissect_zbee_zcl_energy_management_report_event_status(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
10628 /* Event Control */
10630 /* Issuer Event ID */
10631 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_issuer_event_id, tvb,
10632 *offset, 4, ENC_LITTLE_ENDIAN);
10633 *offset += 4;
10635 /* Event Status */
10636 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_event_status, tvb, *offset, 1, ENC_NA);
10637 *offset += 1;
10639 /* Event Status Time */
10640 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);
10641 *offset += 4;
10643 /* Criticality Level Applied */
10644 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_criticality_level_applied, tvb,
10645 *offset, 1, ENC_NA);
10646 *offset += 1;
10648 /* Cooling Temperature Set Point Applied */
10649 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied, tvb,
10650 *offset, 2, ENC_LITTLE_ENDIAN);
10651 *offset += 2;
10653 /* Heating Temperature Set Point Applied */
10654 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied, tvb,
10655 *offset, 2, ENC_LITTLE_ENDIAN);
10656 *offset += 2;
10658 /* Average Load Adjustment Percentage Applied */
10659 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage, tvb,
10660 *offset, 1, ENC_NA);
10661 *offset += 1;
10663 /* Duty Cycle Applied */
10664 proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_duty_cycle, tvb,
10665 *offset, 1, ENC_NA);
10666 *offset += 1;
10668 /* Event Control */
10669 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,
10670 hf_zbee_zcl_energy_management_event_control_flags, ENC_LITTLE_ENDIAN);
10671 *offset += 1;
10673 } /*dissect_zbee_zcl_energy_management_report_event_status*/
10676 *ZigBee ZCL Energy Management cluster dissector for wireshark.
10678 *@param tvb pointer to buffer containing raw packet.
10679 *@param pinfo pointer to packet information fields
10680 *@param tree pointer to data tree Wireshark uses to display packet.
10682 static int
10683 dissect_zbee_zcl_energy_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
10685 zbee_zcl_packet *zcl;
10686 unsigned offset = 0;
10687 uint8_t cmd_id;
10688 int rem_len;
10690 /* Reject the packet if data is NULL */
10691 if (data == NULL)
10692 return 0;
10693 zcl = (zbee_zcl_packet *)data;
10694 cmd_id = zcl->cmd_id;
10696 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
10697 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
10698 /* Append the command name to the info column. */
10699 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
10700 val_to_str_const(cmd_id, zbee_zcl_energy_management_srv_rx_cmd_names, "Unknown Command"),
10701 zcl->tran_seqno);
10703 /* Add the command ID. */
10704 proto_tree_add_uint(tree, hf_zbee_zcl_energy_management_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
10706 /* Check is this command has a payload, than add the payload tree */
10707 rem_len = tvb_reported_length_remaining(tvb, ++offset);
10708 if (rem_len > 0) {
10709 proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_energy_management, NULL, "Payload");
10711 /* Call the appropriate command dissector */
10712 switch (cmd_id) {
10714 case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_MANAGE_EVENT:
10715 dissect_zbee_zcl_energy_management_manage_event(tvb, tree, &offset);
10716 break;
10718 default:
10719 break;
10723 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
10724 /* Append the command name to the info column. */
10725 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
10726 val_to_str_const(cmd_id, zbee_zcl_energy_management_srv_tx_cmd_names, "Unknown Command"),
10727 zcl->tran_seqno);
10729 /* Add the command ID. */
10730 proto_tree_add_uint(tree, hf_zbee_zcl_energy_management_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
10732 /* Check is this command has a payload, than add the payload tree */
10733 rem_len = tvb_reported_length_remaining(tvb, ++offset);
10734 if (rem_len > 0) {
10735 proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_energy_management, NULL, "Payload");
10737 /* Call the appropriate command dissector */
10738 switch (cmd_id) {
10740 case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_REPORT_EVENT_STATUS:
10741 dissect_zbee_zcl_energy_management_report_event_status(tvb, tree, &offset);
10742 break;
10744 default:
10745 break;
10750 return tvb_captured_length(tvb);
10751 } /*dissect_zbee_zcl_energy_management*/
10754 *This function registers the ZCL Energy_Management dissector
10757 void
10758 proto_register_zbee_zcl_energy_management(void)
10760 static hf_register_info hf[] = {
10762 { &hf_zbee_zcl_energy_management_attr_id,
10763 { "Attribute", "zbee_zcl_se.energy_management.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_energy_management_attr_names),
10764 0x0, NULL, HFILL } },
10766 { &hf_zbee_zcl_energy_management_attr_reporting_status, /* common to all SE clusters */
10767 { "Attribute Reporting Status", "zbee_zcl_se.energy_management.attr.attr_reporting_status",
10768 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
10770 { &hf_zbee_zcl_energy_management_srv_tx_cmd_id,
10771 { "Command", "zbee_zcl_se.energy_management.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_energy_management_srv_tx_cmd_names),
10772 0x00, NULL, HFILL } },
10774 { &hf_zbee_zcl_energy_management_srv_rx_cmd_id,
10775 { "Command", "zbee_zcl_se.energy_management.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_energy_management_srv_rx_cmd_names),
10776 0x00, NULL, HFILL } },
10778 { &hf_zbee_zcl_energy_management_issuer_event_id,
10779 { "Issuer Event ID", "zbee_zcl_se.energy_management.issuer_id",
10780 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10782 { &hf_zbee_zcl_energy_management_device_class,
10783 { "Device Class", "zbee_zcl_se.energy_management.device_class",
10784 FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10786 { &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
10787 { "HVAC Compressor or Furnace", "zbee_zcl_se.energy_management.device_class.hvac_compressor_or_furnace",
10788 FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } },
10790 { &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
10791 { "Strip Heaters/Baseboard Heaters", "zbee_zcl_se.energy_management.device_class.strip_heaters_baseboard_heaters",
10792 FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
10794 { &hf_zbee_zcl_energy_management_device_class_water_heater,
10795 { "Water Heater", "zbee_zcl_se.energy_management.device_class.water_heater",
10796 FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
10798 { &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
10799 { "Pool Pump/Spa/Jacuzzi", "zbee_zcl_se.energy_management.device_class.pool_pump_spa_jacuzzi",
10800 FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
10802 { &hf_zbee_zcl_energy_management_device_class_smart_appliances,
10803 { "Smart Appliances", "zbee_zcl_se.energy_management.device_class.smart_appliances",
10804 FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } },
10806 { &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
10807 { "Irrigation Pump", "zbee_zcl_se.energy_management.device_class.irrigation_pump",
10808 FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
10810 { &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
10811 { "Managed Commercial & Industrial (C&I) loads", "zbee_zcl_se.energy_management.device_class.managed_c_i_loads",
10812 FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
10814 { &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
10815 { "Simple misc. (Residential On/Off) loads", "zbee_zcl_se.energy_management.device_class.simple_misc_loads",
10816 FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
10818 { &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
10819 { "Exterior Lighting", "zbee_zcl_se.energy_management.device_class.exterior_lighting",
10820 FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
10822 { &hf_zbee_zcl_energy_management_device_class_interior_lighting,
10823 { "Interior Lighting", "zbee_zcl_se.energy_management.device_class.interior_lighting",
10824 FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
10826 { &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
10827 { "Electric Vehicle", "zbee_zcl_se.energy_management.device_class.electric_vehicle",
10828 FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
10830 { &hf_zbee_zcl_energy_management_device_class_generation_systems,
10831 { "Generation Systems", "zbee_zcl_se.energy_management.device_class.generation_systems",
10832 FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
10834 { &hf_zbee_zcl_energy_management_device_class_reserved ,
10835 { "Reserved", "zbee_zcl_se.energy_management.device_class.reserved",
10836 FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } },
10838 { &hf_zbee_zcl_energy_management_utility_enrollment_group,
10839 { "Utility Enrollment Group", "zbee_zcl_se.energy_management.utility_enrollment_group",
10840 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10842 { &hf_zbee_zcl_energy_management_action_required,
10843 { "Action(s) Required", "zbee_zcl_se.energy_management.action_required",
10844 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10846 { &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
10847 { "Opt Out of Event", "zbee_zcl_se.energy_management.action_required.opt_out_of_event",
10848 FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
10850 { &hf_zbee_zcl_energy_management_action_required_opt_into_event,
10851 { "Opt Into Event", "zbee_zcl_se.energy_management.action_required.opt_into_event",
10852 FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } },
10854 { &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
10855 { "Disable Duty Cycling", "zbee_zcl_se.energy_management.action_required.disable_duty_cycling",
10856 FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } },
10858 { &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
10859 { "Enable Duty Cycling", "zbee_zcl_se.energy_management.action_required.enable_duty_cycling",
10860 FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } },
10862 { &hf_zbee_zcl_energy_management_action_required_reserved,
10863 { "Reserved", "zbee_zcl_se.energy_management.action_required.reserved",
10864 FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
10866 { &hf_zbee_zcl_energy_management_report_event_issuer_event_id,
10867 { "Issuer Event ID", "zbee_zcl_se.energy_management.report_event.issuer_id",
10868 FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10870 { &hf_zbee_zcl_energy_management_report_event_event_status,
10871 { "Event Status", "zbee_zcl_se.energy_management.report_event.event_status",
10872 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10874 { &hf_zbee_zcl_energy_management_report_event_event_status_time,
10875 { "Event Status Time", "zbee_zcl_se.energy_management.report_event.event_status_time",
10876 FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, NULL, HFILL } },
10878 { &hf_zbee_zcl_energy_management_report_event_criticality_level_applied ,
10879 { "Criticality Level Applied", "zbee_zcl_se.energy_management.report_event.criticality_level_applied",
10880 FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_energy_management_load_control_event_criticality_level), 0x0, NULL, HFILL } },
10882 { &hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied,
10883 { "Cooling Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.cooling_temperature_set_point_applied",
10884 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
10886 { &hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied,
10887 { "Heating Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.heating_temperature_set_point_applied",
10888 FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
10890 { &hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage ,
10891 { "Average Load Adjustment Percentage Applied", "zbee_zcl_se.energy_management.report_event.average_load_adjustment_percentage_applied",
10892 FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
10894 { &hf_zbee_zcl_energy_management_report_event_duty_cycle,
10895 { "Duty Cycle Applied", "zbee_zcl_se.energy_management.report_event.duty_cycle_applied",
10896 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10898 { &hf_zbee_zcl_energy_management_report_event_event_control,
10899 { "Event Control", "zbee_zcl_se.energy_management.report_event.event_control",
10900 FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
10902 { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
10903 { "Randomize Start time", "zbee_zcl_se.energy_management.report_event.randomize_start_time",
10904 FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_start_tfs), 0x01, NULL, HFILL } },
10906 { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
10907 { "Randomize Duration time", "zbee_zcl_se.energy_management.report_event.randomize_duration_time",
10908 FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_duration_tfs), 0x02, NULL, HFILL } },
10910 { &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
10911 { "Reserved", "zbee_zcl_se.energy_management.reserved",
10912 FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
10915 /* ZCL Energy_Management subtrees */
10916 int *ett[] = {
10917 &ett_zbee_zcl_energy_management,
10918 &ett_zbee_zcl_energy_management_device_class,
10919 &ett_zbee_zcl_energy_management_actions_required,
10920 &ett_zbee_zcl_energy_management_report_event_event_control,
10923 /* Register the ZigBee ZCL Energy Management cluster protocol name and description */
10924 proto_zbee_zcl_energy_management = proto_register_protocol("ZigBee ZCL Energy Management", "ZCL Energy Management", ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT);
10925 proto_register_field_array(proto_zbee_zcl_energy_management, hf, array_length(hf));
10926 proto_register_subtree_array(ett, array_length(ett));
10928 /* Register the ZigBee ZCL Energy Management dissector. */
10929 register_dissector(ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT, dissect_zbee_zcl_energy_management, proto_zbee_zcl_energy_management);
10930 } /*proto_register_zbee_zcl_energy_management*/
10933 *Hands off the ZCL Energy_Management dissector.
10936 void
10937 proto_reg_handoff_zbee_zcl_energy_management(void)
10939 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_ENERGY_MANAGEMENT,
10940 proto_zbee_zcl_energy_management,
10941 ett_zbee_zcl_energy_management,
10942 ZBEE_ZCL_CID_ENERGY_MANAGEMENT,
10943 ZBEE_MFG_CODE_NONE,
10944 hf_zbee_zcl_energy_management_attr_id,
10946 hf_zbee_zcl_energy_management_srv_rx_cmd_id,
10947 hf_zbee_zcl_energy_management_srv_tx_cmd_id,
10948 (zbee_zcl_fn_attr_data)dissect_zcl_energy_management_attr_data
10950 } /*proto_reg_handoff_zbee_zcl_energy_management*/
10953 /* ########################################################################## */
10954 /* #### (0x0707) CALENDAR CLUSTER ########################################### */
10955 /* ########################################################################## */
10957 /* Attributes */
10958 #define zbee_zcl_calendar_attr_names_VALUE_STRING_LIST(XXX) \
10959 /* Auxiliary Switch Label Attribute Set */ \
10960 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_1_LABEL, 0x0000, "Aux Switch 1 Label" ) \
10961 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_2_LABEL, 0x0001, "Aux Switch 2 Label" ) \
10962 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_3_LABEL, 0x0002, "Aux Switch 3 Label" ) \
10963 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_4_LABEL, 0x0003, "Aux Switch 4 Label" ) \
10964 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_5_LABEL, 0x0004, "Aux Switch 5 Label" ) \
10965 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_6_LABEL, 0x0005, "Aux Switch 6 Label" ) \
10966 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_7_LABEL, 0x0006, "Aux Switch 7 Label" ) \
10967 XXX(ZBEE_ZCL_ATTR_ID_CAL_AUX_SWITCH_8_LABEL, 0x0007, "Aux Switch 8 Label" ) \
10968 /* Smart Energy */ \
10969 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_CAL, 0xFFFE, "Attribute Reporting Status" )
10971 VALUE_STRING_ENUM(zbee_zcl_calendar_attr_names);
10972 VALUE_STRING_ARRAY(zbee_zcl_calendar_attr_names);
10974 /* Server Commands Received */
10975 #define zbee_zcl_calendar_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
10976 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR, 0x00, "Get Calendar" ) \
10977 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_DAY_PROFILES, 0x01, "Get Day Profiles" ) \
10978 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_WEEK_PROFILES, 0x02, "Get Week Profiles" ) \
10979 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_SEASONS, 0x03, "Get Seasons" ) \
10980 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_SPECIAL_DAYS, 0x04, "Get Special Days" ) \
10981 XXX(ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR_CANCELLATION, 0x05, "Get Calendar Cancellation" )
10983 VALUE_STRING_ENUM(zbee_zcl_calendar_srv_rx_cmd_names);
10984 VALUE_STRING_ARRAY(zbee_zcl_calendar_srv_rx_cmd_names);
10986 /* Server Commands Generated */
10987 #define zbee_zcl_calendar_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
10988 XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_CALENDAR, 0x00, "Publish Calendar" ) \
10989 XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_DAY_PROFILE, 0x01, "Publish Day Profile" ) \
10990 XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_WEEK_PROFILE, 0x02, "Publish Week Profile" ) \
10991 XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SEASONS, 0x03, "Publish Seasons" ) \
10992 XXX(ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SPECIAL_DAYS, 0x04, "Publish Special Days" ) \
10993 XXX(ZBEE_ZCL_CMD_ID_CAL_CANCEL_CALENDAR, 0x05, "Cancel Calendar" )
10995 VALUE_STRING_ENUM(zbee_zcl_calendar_srv_tx_cmd_names);
10996 VALUE_STRING_ARRAY(zbee_zcl_calendar_srv_tx_cmd_names);
10998 /*************************/
10999 /* Function Declarations */
11000 /*************************/
11001 void proto_register_zbee_zcl_calendar(void);
11002 void proto_reg_handoff_zbee_zcl_calendar(void);
11004 /* Attribute Dissector Helpers */
11005 static void dissect_zcl_calendar_attr_data (proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
11007 /* Command Dissector Helpers */
11008 static void dissect_zcl_calendar_get_calendar (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11009 static void dissect_zcl_calendar_get_day_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11010 static void dissect_zcl_calendar_get_week_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11011 static void dissect_zcl_calendar_get_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11012 static void dissect_zcl_calendar_get_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11013 static void dissect_zcl_calendar_publish_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11014 static void dissect_zcl_calendar_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11015 static void dissect_zcl_calendar_publish_week_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11016 static void dissect_zcl_calendar_publish_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11017 static void dissect_zcl_calendar_publish_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11018 static void dissect_zcl_calendar_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11020 /*************************/
11021 /* Global Variables */
11022 /*************************/
11024 /* Initialize the protocol and registered fields */
11025 static int proto_zbee_zcl_calendar;
11027 static int hf_zbee_zcl_calendar_srv_tx_cmd_id;
11028 static int hf_zbee_zcl_calendar_srv_rx_cmd_id;
11029 static int hf_zbee_zcl_calendar_attr_id;
11030 static int hf_zbee_zcl_calendar_attr_reporting_status;
11031 static int hf_zbee_zcl_calendar_type;
11032 static int hf_zbee_zcl_calendar_start_time;
11033 static int hf_zbee_zcl_calendar_earliest_start_time;
11034 static int hf_zbee_zcl_calendar_time_reference;
11035 static int hf_zbee_zcl_calendar_name;
11036 static int hf_zbee_zcl_calendar_command_index;
11037 static int hf_zbee_zcl_calendar_date_year;
11038 static int hf_zbee_zcl_calendar_date_month;
11039 static int hf_zbee_zcl_calendar_date_month_day;
11040 static int hf_zbee_zcl_calendar_date_week_day;
11041 static int hf_zbee_zcl_calendar_provider_id;
11042 static int hf_zbee_zcl_calendar_issuer_event_id;
11043 static int hf_zbee_zcl_calendar_min_issuer_event_id;
11044 static int hf_zbee_zcl_calendar_issuer_calendar_id;
11045 static int hf_zbee_zcl_calendar_day_id;
11046 static int hf_zbee_zcl_calendar_day_id_ref;
11047 static int hf_zbee_zcl_calendar_day_id_ref_monday;
11048 static int hf_zbee_zcl_calendar_day_id_ref_tuesday;
11049 static int hf_zbee_zcl_calendar_day_id_ref_wednesday;
11050 static int hf_zbee_zcl_calendar_day_id_ref_thursday;
11051 static int hf_zbee_zcl_calendar_day_id_ref_friday;
11052 static int hf_zbee_zcl_calendar_day_id_ref_saturday;
11053 static int hf_zbee_zcl_calendar_day_id_ref_sunday;
11054 static int hf_zbee_zcl_calendar_week_id;
11055 static int hf_zbee_zcl_calendar_week_id_ref;
11056 static int hf_zbee_zcl_calendar_start_day_id;
11057 static int hf_zbee_zcl_calendar_start_week_id;
11058 static int hf_zbee_zcl_calendar_number_of_calendars;
11059 static int hf_zbee_zcl_calendar_number_of_events;
11060 static int hf_zbee_zcl_calendar_number_of_days;
11061 static int hf_zbee_zcl_calendar_number_of_weeks;
11062 static int hf_zbee_zcl_calendar_number_of_seasons;
11063 static int hf_zbee_zcl_calendar_number_of_day_profiles;
11064 static int hf_zbee_zcl_calendar_number_of_week_profiles;
11065 static int hf_zbee_zcl_calendar_total_number_of_schedule_entries;
11066 static int hf_zbee_zcl_calendar_total_number_of_special_days;
11067 static int hf_zbee_zcl_calendar_total_number_of_commands;
11068 static int hf_zbee_zcl_calendar_schedule_entry_start_time;
11069 static int hf_zbee_zcl_calendar_schedule_entry_price_tier;
11070 static int hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable;
11071 static int hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state;
11073 /* Initialize the subtree pointers */
11074 static int ett_zbee_zcl_calendar;
11075 static int ett_zbee_zcl_calendar_special_day_date;
11076 static int ett_zbee_zcl_calendar_season_start_date;
11078 #define zbee_zcl_calendar_type_names_VALUE_STRING_LIST(XXX) \
11079 XXX(ZBEE_ZCL_CALENDAR_TYPE_DELIVERED, 0x00, "Delivered Calendar" ) \
11080 XXX(ZBEE_ZCL_CALENDAR_TYPE_RECEIVED, 0x01, "Received Calendar" ) \
11081 XXX(ZBEE_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED, 0x02, "Delivered and Received Calendar" ) \
11082 XXX(ZBEE_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT, 0x03, "Friendly Credit Calendar" ) \
11083 XXX(ZBEE_ZCL_CALENDAR_TYPE_AUXILIARY_LOAD_SWITCH, 0x04, "Auxiliary Load Switch Calendar" )
11085 VALUE_STRING_ENUM(zbee_zcl_calendar_type_names);
11086 VALUE_STRING_ARRAY(zbee_zcl_calendar_type_names);
11088 #define zbee_zcl_calendar_time_reference_names_VALUE_STRING_LIST(XXX) \
11089 XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_UTC_TIME, 0x00, "UTC Time" ) \
11090 XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_STANDARD_TIME, 0x01, "Standard Time" ) \
11091 XXX(ZBEE_ZCL_CALENDAR_TIME_REFERENCE_LOCAL_TIME, 0x02, "Local Time" )
11093 VALUE_STRING_ENUM(zbee_zcl_calendar_time_reference_names);
11094 VALUE_STRING_ARRAY(zbee_zcl_calendar_time_reference_names);
11096 /*************************/
11097 /* Function Bodies */
11098 /*************************/
11101 *This function is called by ZCL foundation dissector in order to decode
11103 *@param tree pointer to data tree Wireshark uses to display packet.
11104 *@param tvb pointer to buffer containing raw packet.
11105 *@param offset pointer to buffer offset
11106 *@param attr_id attribute identifier
11107 *@param data_type attribute data type
11108 *@param client_attr ZCL client
11110 static void
11111 dissect_zcl_calendar_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
11113 switch (attr_id) {
11114 /* applies to all SE clusters */
11115 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_CAL:
11116 proto_tree_add_item(tree, hf_zbee_zcl_calendar_attr_reporting_status, tvb, *offset, 1, ENC_NA);
11117 *offset += 1;
11118 break;
11120 default: /* Catch all */
11121 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
11122 break;
11124 } /*dissect_zcl_calendar_attr_data*/
11127 *ZigBee ZCL Calendar cluster dissector for wireshark.
11129 *@param tvb pointer to buffer containing raw packet.
11130 *@param pinfo pointer to packet information fields
11131 *@param tree pointer to data tree Wireshark uses to display packet.
11133 static int
11134 dissect_zbee_zcl_calendar(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
11136 proto_tree *payload_tree;
11137 zbee_zcl_packet *zcl;
11138 unsigned offset = 0;
11139 uint8_t cmd_id;
11140 int rem_len;
11142 /* Reject the packet if data is NULL */
11143 if (data == NULL)
11144 return 0;
11145 zcl = (zbee_zcl_packet *)data;
11146 cmd_id = zcl->cmd_id;
11148 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
11149 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
11150 /* Append the command name to the info column. */
11151 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
11152 val_to_str_const(cmd_id, zbee_zcl_calendar_srv_rx_cmd_names, "Unknown Command"),
11153 zcl->tran_seqno);
11155 /* Add the command ID. */
11156 proto_tree_add_uint(tree, hf_zbee_zcl_calendar_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
11158 /* Check is this command has a payload, than add the payload tree */
11159 rem_len = tvb_reported_length_remaining(tvb, ++offset);
11160 if (rem_len > 0) {
11161 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_calendar, NULL, "Payload");
11163 /* Call the appropriate command dissector */
11164 switch (cmd_id) {
11166 case ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR:
11167 dissect_zcl_calendar_get_calendar(tvb, payload_tree, &offset);
11168 break;
11170 case ZBEE_ZCL_CMD_ID_CAL_GET_DAY_PROFILES:
11171 dissect_zcl_calendar_get_day_profiles(tvb, payload_tree, &offset);
11172 break;
11174 case ZBEE_ZCL_CMD_ID_CAL_GET_WEEK_PROFILES:
11175 dissect_zcl_calendar_get_week_profiles(tvb, payload_tree, &offset);
11176 break;
11178 case ZBEE_ZCL_CMD_ID_CAL_GET_SEASONS:
11179 dissect_zcl_calendar_get_seasons(tvb, payload_tree, &offset);
11180 break;
11182 case ZBEE_ZCL_CMD_ID_CAL_GET_SPECIAL_DAYS:
11183 dissect_zcl_calendar_get_special_days(tvb, payload_tree, &offset);
11184 break;
11186 case ZBEE_ZCL_CMD_ID_CAL_GET_CALENDAR_CANCELLATION:
11187 /* No Payload */
11188 break;
11190 default:
11191 break;
11195 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
11196 /* Append the command name to the info column. */
11197 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
11198 val_to_str_const(cmd_id, zbee_zcl_calendar_srv_tx_cmd_names, "Unknown Command"),
11199 zcl->tran_seqno);
11201 /* Add the command ID. */
11202 proto_tree_add_uint(tree, hf_zbee_zcl_calendar_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
11204 /* Check is this command has a payload, than add the payload tree */
11205 rem_len = tvb_reported_length_remaining(tvb, ++offset);
11206 if (rem_len > 0) {
11207 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_calendar, NULL, "Payload");
11209 /* Call the appropriate command dissector */
11210 switch (cmd_id) {
11212 case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_CALENDAR:
11213 dissect_zcl_calendar_publish_calendar(tvb, payload_tree, &offset);
11214 break;
11216 case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_DAY_PROFILE:
11217 dissect_zcl_calendar_publish_day_profile(tvb, payload_tree, &offset);
11218 break;
11220 case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_WEEK_PROFILE:
11221 dissect_zcl_calendar_publish_week_profile(tvb, payload_tree, &offset);
11222 break;
11224 case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SEASONS:
11225 dissect_zcl_calendar_publish_seasons(tvb, payload_tree, &offset);
11226 break;
11228 case ZBEE_ZCL_CMD_ID_CAL_PUBLISH_SPECIAL_DAYS:
11229 dissect_zcl_calendar_publish_special_days(tvb, payload_tree, &offset);
11230 break;
11232 case ZBEE_ZCL_CMD_ID_CAL_CANCEL_CALENDAR:
11233 dissect_zcl_calendar_cancel(tvb, payload_tree, &offset);
11234 break;
11236 default:
11237 break;
11242 return tvb_captured_length(tvb);
11243 } /*dissect_zbee_zcl_calendar*/
11246 *This function manages the Get Calendar payload
11248 *@param tvb pointer to buffer containing raw packet.
11249 *@param tree pointer to data tree Wireshark uses to display packet.
11250 *@param offset pointer to offset from caller
11252 static void
11253 dissect_zcl_calendar_get_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11255 /* Earliest Start Time */
11256 proto_tree_add_item(tree, hf_zbee_zcl_calendar_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11257 *offset += 4;
11259 /* Min Issuer Event ID */
11260 proto_tree_add_item(tree, hf_zbee_zcl_calendar_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11261 *offset += 4;
11263 /* Number of Calendars */
11264 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_calendars, tvb, *offset, 1, ENC_NA);
11265 *offset += 1;
11267 /* Calendar Type */
11268 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11269 *offset += 1;
11271 /* Provider Id */
11272 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11273 *offset += 4;
11274 } /*dissect_zcl_calendar_get_calendar*/
11277 *This function manages the Get Day Profiles payload
11279 *@param tvb pointer to buffer containing raw packet.
11280 *@param tree pointer to data tree Wireshark uses to display packet.
11281 *@param offset pointer to offset from caller
11283 static void
11284 dissect_zcl_calendar_get_day_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11286 /* Provider Id */
11287 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11288 *offset += 4;
11290 /* Issuer Calendar ID */
11291 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11292 *offset += 4;
11294 /* Start Day Id */
11295 proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_day_id, tvb, *offset, 1, ENC_NA);
11296 *offset += 1;
11298 /* Number of Days */
11299 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_days, tvb, *offset, 1, ENC_NA);
11300 *offset += 1;
11301 } /*dissect_zcl_calendar_get_day_profiles*/
11304 *This function manages the Get Week Profiles payload
11306 *@param tvb pointer to buffer containing raw packet.
11307 *@param tree pointer to data tree Wireshark uses to display packet.
11308 *@param offset pointer to offset from caller
11310 static void
11311 dissect_zcl_calendar_get_week_profiles(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11313 /* Provider Id */
11314 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11315 *offset += 4;
11317 /* Issuer Calendar ID */
11318 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11319 *offset += 4;
11321 /* Start Week Id */
11322 proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_week_id, tvb, *offset, 1, ENC_NA);
11323 *offset += 1;
11325 /* Number of Weeks */
11326 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_weeks, tvb, *offset, 1, ENC_NA);
11327 *offset += 1;
11328 } /*dissect_zcl_calendar_get_week_profiles*/
11331 *This function manages the Get Seasons payload
11333 *@param tvb pointer to buffer containing raw packet.
11334 *@param tree pointer to data tree Wireshark uses to display packet.
11335 *@param offset pointer to offset from caller
11337 static void
11338 dissect_zcl_calendar_get_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11340 /* Provider Id */
11341 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11342 *offset += 4;
11344 /* Issuer Calendar ID */
11345 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11346 *offset += 4;
11347 } /*dissect_zcl_calendar_get_seasons*/
11350 *This function manages the Get Special Days payload
11352 *@param tvb pointer to buffer containing raw packet.
11353 *@param tree pointer to data tree Wireshark uses to display packet.
11354 *@param offset pointer to offset from caller
11356 static void
11357 dissect_zcl_calendar_get_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11359 /* Start Time */
11360 proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11361 *offset += 4;
11363 /* Number of Events */
11364 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_events, tvb, *offset, 1, ENC_NA);
11365 *offset += 1;
11367 /* Calendar Type */
11368 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11369 *offset += 1;
11371 /* Provider Id */
11372 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11373 *offset += 4;
11375 /* Issuer Calendar ID */
11376 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11377 *offset += 4;
11378 } /*dissect_zcl_calendar_get_special_days*/
11381 *This function manages the Publish Calendar payload
11383 *@param tvb pointer to buffer containing raw packet.
11384 *@param tree pointer to data tree Wireshark uses to display packet.
11385 *@param offset pointer to offset from caller
11387 static void
11388 dissect_zcl_calendar_publish_calendar(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11390 int length;
11392 /* Provider Id */
11393 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11394 *offset += 4;
11396 /* Issuer Event ID */
11397 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11398 *offset += 4;
11400 /* Issuer Calendar ID */
11401 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11402 *offset += 4;
11404 /* Start Time */
11405 proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11406 *offset += 4;
11408 /* Calendar Type */
11409 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11410 *offset += 1;
11412 /* Calendar Time Reference */
11413 proto_tree_add_item(tree, hf_zbee_zcl_calendar_time_reference, tvb, *offset, 1, ENC_NA);
11414 *offset += 1;
11416 /* Calendar Name */
11417 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_calendar_name, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
11418 *offset += length;
11420 /* Number of Seasons */
11421 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_seasons, tvb, *offset, 1, ENC_NA);
11422 *offset += 1;
11424 /* Number of Week Profiles */
11425 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_week_profiles, tvb, *offset, 1, ENC_NA);
11426 *offset += 1;
11428 /* Number of Day Profiles */
11429 proto_tree_add_item(tree, hf_zbee_zcl_calendar_number_of_day_profiles, tvb, *offset, 1, ENC_NA);
11430 *offset += 1;
11431 } /*dissect_zcl_calendar_publish_calendar*/
11434 *This function manages the Publish Day Profile payload
11436 *@param tvb pointer to buffer containing raw packet.
11437 *@param tree pointer to data tree Wireshark uses to display packet.
11438 *@param offset pointer to offset from caller
11440 static void
11441 dissect_zcl_calendar_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11443 uint8_t schedule_entries_count;
11444 uint8_t calendar_type;
11446 /* Provider Id */
11447 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11448 *offset += 4;
11450 /* Issuer Event ID */
11451 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11452 *offset += 4;
11454 /* Issuer Calendar ID */
11455 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11456 *offset += 4;
11458 /* Day ID */
11459 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id, tvb, *offset, 1, ENC_NA);
11460 *offset += 1;
11462 /* Total Number of Schedule Entries */
11463 schedule_entries_count = tvb_get_uint8(tvb, *offset);
11464 proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_schedule_entries, tvb, *offset, 1, ENC_NA);
11465 *offset += 1;
11467 /* Command Index */
11468 proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11469 *offset += 1;
11471 /* Total Number of Commands */
11472 proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11473 *offset += 1;
11475 /* Calendar Type */
11476 calendar_type = tvb_get_uint8(tvb, *offset);
11477 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11478 *offset += 1;
11480 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 3 && i < schedule_entries_count; i++) {
11481 /* Start Time */
11482 proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_start_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
11483 *offset += 2;
11485 switch (calendar_type) {
11486 /* Rate Start Time */
11487 case ZBEE_ZCL_CALENDAR_TYPE_DELIVERED:
11488 case ZBEE_ZCL_CALENDAR_TYPE_RECEIVED:
11489 case ZBEE_ZCL_CALENDAR_TYPE_DELIVERED_AND_RECEIVED:
11490 /* Price Tier */
11491 proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_price_tier, tvb, *offset, 1, ENC_NA);
11492 *offset += 1;
11493 break;
11495 /* Friendly Credit Start Time */
11496 case ZBEE_ZCL_CALENDAR_TYPE_FRIENDLY_CREDIT:
11497 /* Price Tier */
11498 proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable, tvb, *offset, 1, ENC_NA);
11499 *offset += 1;
11500 break;
11502 /* Auxiliary Load Start Time */
11503 case ZBEE_ZCL_CALENDAR_TYPE_AUXILIARY_LOAD_SWITCH:
11504 /* Price Tier */
11505 proto_tree_add_item(tree, hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state, tvb, *offset, 1, ENC_NA);
11506 *offset += 1;
11507 break;
11510 } /*dissect_zcl_calendar_publish_day_profile*/
11513 *This function manages the Publish Week Profile payload
11515 *@param tvb pointer to buffer containing raw packet.
11516 *@param tree pointer to data tree Wireshark uses to display packet.
11517 *@param offset pointer to offset from caller
11519 static void
11520 dissect_zcl_calendar_publish_week_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11522 /* Provider Id */
11523 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11524 *offset += 4;
11526 /* Issuer Event ID */
11527 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11528 *offset += 4;
11530 /* Issuer Calendar ID */
11531 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11532 *offset += 4;
11534 /* Week ID */
11535 proto_tree_add_item(tree, hf_zbee_zcl_calendar_week_id, tvb, *offset, 1, ENC_NA);
11536 *offset += 1;
11538 /* Day ID Ref Monday */
11539 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_monday, tvb, *offset, 1, ENC_NA);
11540 *offset += 1;
11542 /* Day ID Ref Tuesday */
11543 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_tuesday, tvb, *offset, 1, ENC_NA);
11544 *offset += 1;
11546 /* Day ID Ref Wednesday */
11547 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_wednesday, tvb, *offset, 1, ENC_NA);
11548 *offset += 1;
11550 /* Day ID Ref Thursday */
11551 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_thursday, tvb, *offset, 1, ENC_NA);
11552 *offset += 1;
11554 /* Day ID Ref Friday */
11555 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_friday, tvb, *offset, 1, ENC_NA);
11556 *offset += 1;
11558 /* Day ID Ref Saturday */
11559 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_saturday, tvb, *offset, 1, ENC_NA);
11560 *offset += 1;
11562 /* Day ID Ref Sunday */
11563 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref_sunday, tvb, *offset, 1, ENC_NA);
11564 *offset += 1;
11565 } /*dissect_zcl_calendar_publish_week_profile*/
11568 *This function manages the Publish Season Profile payload
11570 *@param tvb pointer to buffer containing raw packet.
11571 *@param tree pointer to data tree Wireshark uses to display packet.
11572 *@param offset pointer to offset from caller
11574 static void
11575 dissect_zcl_calendar_publish_seasons(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11577 /* Provider Id */
11578 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11579 *offset += 4;
11581 /* Issuer Event ID */
11582 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11583 *offset += 4;
11585 /* Issuer Calendar ID */
11586 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11587 *offset += 4;
11589 /* Command Index */
11590 proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11591 *offset += 1;
11593 /* Total Number of Commands */
11594 proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11595 *offset += 1;
11597 while (tvb_reported_length_remaining(tvb, *offset) >= 5) {
11598 /* Season Start Date */
11599 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);
11601 /* Week ID Ref */
11602 proto_tree_add_item(tree, hf_zbee_zcl_calendar_week_id_ref, tvb, *offset, 1, ENC_NA);
11603 *offset += 1;
11605 } /*dissect_zcl_calendar_publish_seasons*/
11608 *This function manages the Publish Special Days payload
11610 *@param tvb pointer to buffer containing raw packet.
11611 *@param tree pointer to data tree Wireshark uses to display packet.
11612 *@param offset pointer to offset from caller
11614 static void
11615 dissect_zcl_calendar_publish_special_days(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11617 uint8_t total_special_days_count;
11619 /* Provider Id */
11620 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11621 *offset += 4;
11623 /* Issuer Event ID */
11624 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11625 *offset += 4;
11627 /* Issuer Calendar ID */
11628 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11629 *offset += 4;
11631 /* Start Time */
11632 proto_tree_add_item(tree, hf_zbee_zcl_calendar_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
11633 *offset += 4;
11635 /* Calendar Type */
11636 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11637 *offset += 1;
11639 /* Total Number of Special Days */
11640 total_special_days_count = tvb_get_uint8(tvb, *offset);
11641 proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_special_days, tvb, *offset, 1, ENC_NA);
11642 *offset += 1;
11644 /* Command Index */
11645 proto_tree_add_item(tree, hf_zbee_zcl_calendar_command_index, tvb, *offset, 1, ENC_NA);
11646 *offset += 1;
11648 /* Total Number of Commands */
11649 proto_tree_add_item(tree, hf_zbee_zcl_calendar_total_number_of_commands, tvb, *offset, 1, ENC_NA);
11650 *offset += 1;
11652 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 5 && i < total_special_days_count; i++) {
11653 /* Special Day Date */
11654 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);
11656 /* Day ID Ref */
11657 proto_tree_add_item(tree, hf_zbee_zcl_calendar_day_id_ref, tvb, *offset, 1, ENC_NA);
11658 *offset += 1;
11660 } /*dissect_zcl_calendar_publish_special_days*/
11663 *This function manages the Cancel Calendar payload
11665 *@param tvb pointer to buffer containing raw packet.
11666 *@param tree pointer to data tree Wireshark uses to display packet.
11667 *@param offset pointer to offset from caller
11669 static void
11670 dissect_zcl_calendar_cancel(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
11672 /* Provider Id */
11673 proto_tree_add_item(tree, hf_zbee_zcl_calendar_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11674 *offset += 4;
11676 /* Issuer Calendar ID */
11677 proto_tree_add_item(tree, hf_zbee_zcl_calendar_issuer_calendar_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
11678 *offset += 4;
11680 /* Calendar Type */
11681 proto_tree_add_item(tree, hf_zbee_zcl_calendar_type, tvb, *offset, 1, ENC_NA);
11682 *offset += 1;
11683 } /*dissect_zcl_calendar_cancel*/
11686 *This function registers the ZCL Calendar dissector
11689 void
11690 proto_register_zbee_zcl_calendar(void)
11692 static hf_register_info hf[] = {
11694 { &hf_zbee_zcl_calendar_attr_id,
11695 { "Attribute", "zbee_zcl_se.calendar.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_calendar_attr_names),
11696 0x0, NULL, HFILL } },
11698 { &hf_zbee_zcl_calendar_attr_reporting_status, /* common to all SE clusters */
11699 { "Attribute Reporting Status", "zbee_zcl_se.calendar.attr.attr_reporting_status",
11700 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
11702 { &hf_zbee_zcl_calendar_srv_tx_cmd_id,
11703 { "Command", "zbee_zcl_se.calendar.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_srv_tx_cmd_names),
11704 0x00, NULL, HFILL } },
11706 { &hf_zbee_zcl_calendar_srv_rx_cmd_id,
11707 { "Command", "zbee_zcl_se.calendar.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_srv_rx_cmd_names),
11708 0x00, NULL, HFILL } },
11710 { &hf_zbee_zcl_calendar_type,
11711 { "Calendar Type", "zbee_zcl_se.calendar.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_type_names),
11712 0x00, NULL, HFILL } },
11714 { &hf_zbee_zcl_calendar_start_time,
11715 { "Start Time", "zbee_zcl_se.calendar.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
11716 0x00, NULL, HFILL } },
11718 { &hf_zbee_zcl_calendar_earliest_start_time,
11719 { "Earliest Start Time", "zbee_zcl_se.calendar.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
11720 0x00, NULL, HFILL } },
11722 { &hf_zbee_zcl_calendar_time_reference,
11723 { "Calendar Time Reference", "zbee_zcl_se.calendar.time_reference", FT_UINT8, BASE_HEX, VALS(zbee_zcl_calendar_time_reference_names),
11724 0x00, NULL, HFILL } },
11726 { &hf_zbee_zcl_calendar_name,
11727 { "Calendar Name", "zbee_zcl_se.calendar.name", FT_UINT_STRING, BASE_NONE, NULL,
11728 0x00, NULL, HFILL } },
11730 { &hf_zbee_zcl_calendar_command_index,
11731 { "Command Index", "zbee_zcl_se.calendar.command_index", FT_UINT8, BASE_DEC, NULL,
11732 0x00, NULL, HFILL } },
11734 { &hf_zbee_zcl_calendar_date_year,
11735 { "Year", "zbee_zcl_se.calendar.date.year", FT_UINT8, BASE_DEC, NULL,
11736 0x00, NULL, HFILL } },
11738 { &hf_zbee_zcl_calendar_date_month,
11739 { "Month", "zbee_zcl_se.calendar.date.month", FT_UINT8, BASE_DEC, NULL,
11740 0x00, NULL, HFILL } },
11742 { &hf_zbee_zcl_calendar_date_month_day,
11743 { "Month Day", "zbee_zcl_se.calendar.date.month_day", FT_UINT8, BASE_DEC, NULL,
11744 0x00, NULL, HFILL } },
11746 { &hf_zbee_zcl_calendar_date_week_day,
11747 { "Week Day", "zbee_zcl_se.calendar.date.week_day", FT_UINT8, BASE_DEC, NULL,
11748 0x00, NULL, HFILL } },
11750 { &hf_zbee_zcl_calendar_provider_id,
11751 { "Provider ID", "zbee_zcl_se.calendar.provider_id", FT_UINT32, BASE_DEC, NULL,
11752 0x00, NULL, HFILL } },
11754 { &hf_zbee_zcl_calendar_issuer_event_id,
11755 { "Issuer Event ID", "zbee_zcl_se.calendar.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
11756 0x00, NULL, HFILL } },
11758 { &hf_zbee_zcl_calendar_min_issuer_event_id,
11759 { "Min. Issuer Event ID", "zbee_zcl_se.calendar.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
11760 0x00, NULL, HFILL } },
11762 { &hf_zbee_zcl_calendar_issuer_calendar_id,
11763 { "Issuer Calendar ID", "zbee_zcl_se.calendar.issuer_calendar_id", FT_UINT32, BASE_DEC, NULL,
11764 0x00, NULL, HFILL } },
11766 { &hf_zbee_zcl_calendar_day_id,
11767 { "Day ID", "zbee_zcl_se.calendar.day_id", FT_UINT8, BASE_DEC, NULL,
11768 0x00, NULL, HFILL } },
11770 { &hf_zbee_zcl_calendar_day_id_ref,
11771 { "Day ID Ref", "zbee_zcl_se.calendar.day_id_ref", FT_UINT8, BASE_DEC, NULL,
11772 0x00, NULL, HFILL } },
11774 { &hf_zbee_zcl_calendar_day_id_ref_monday,
11775 { "Day ID Ref Monday", "zbee_zcl_se.calendar.day_id_ref_monday", FT_UINT8, BASE_DEC, NULL,
11776 0x00, NULL, HFILL } },
11778 { &hf_zbee_zcl_calendar_day_id_ref_tuesday,
11779 { "Day ID Ref Tuesday", "zbee_zcl_se.calendar.day_id_ref_tuesday", FT_UINT8, BASE_DEC, NULL,
11780 0x00, NULL, HFILL } },
11782 { &hf_zbee_zcl_calendar_day_id_ref_wednesday,
11783 { "Day ID Ref Wednesday", "zbee_zcl_se.calendar.day_id_ref_wednesday", FT_UINT8, BASE_DEC, NULL,
11784 0x00, NULL, HFILL } },
11786 { &hf_zbee_zcl_calendar_day_id_ref_thursday,
11787 { "Day ID Ref Thursday", "zbee_zcl_se.calendar.day_id_ref_thursday", FT_UINT8, BASE_DEC, NULL,
11788 0x00, NULL, HFILL } },
11790 { &hf_zbee_zcl_calendar_day_id_ref_friday,
11791 { "Day ID Ref Friday", "zbee_zcl_se.calendar.day_id_ref_friday", FT_UINT8, BASE_DEC, NULL,
11792 0x00, NULL, HFILL } },
11794 { &hf_zbee_zcl_calendar_day_id_ref_saturday,
11795 { "Day ID Ref Saturday", "zbee_zcl_se.calendar.day_id_ref_saturday", FT_UINT8, BASE_DEC, NULL,
11796 0x00, NULL, HFILL } },
11798 { &hf_zbee_zcl_calendar_day_id_ref_sunday,
11799 { "Day ID Ref Sunday", "zbee_zcl_se.calendar.day_id_ref_sunday", FT_UINT8, BASE_DEC, NULL,
11800 0x00, NULL, HFILL } },
11802 { &hf_zbee_zcl_calendar_week_id,
11803 { "Week ID", "zbee_zcl_se.calendar.week_id", FT_UINT8, BASE_DEC, NULL,
11804 0x00, NULL, HFILL } },
11806 { &hf_zbee_zcl_calendar_week_id_ref,
11807 { "Week ID Ref", "zbee_zcl_se.calendar.week_id_ref", FT_UINT8, BASE_DEC, NULL,
11808 0x00, NULL, HFILL } },
11810 { &hf_zbee_zcl_calendar_start_day_id,
11811 { "Start Day ID", "zbee_zcl_se.calendar.start_day_id", FT_UINT8, BASE_DEC, NULL,
11812 0x00, NULL, HFILL } },
11814 { &hf_zbee_zcl_calendar_start_week_id,
11815 { "Start Week ID", "zbee_zcl_se.calendar.start_week_id", FT_UINT8, BASE_DEC, NULL,
11816 0x00, NULL, HFILL } },
11818 { &hf_zbee_zcl_calendar_number_of_calendars,
11819 { "Number of Calendars", "zbee_zcl_se.calendar.number_of_calendars", FT_UINT8, BASE_DEC, NULL,
11820 0x00, NULL, HFILL } },
11822 { &hf_zbee_zcl_calendar_number_of_events,
11823 { "Number of Events", "zbee_zcl_se.calendar.number_of_events", FT_UINT8, BASE_DEC, NULL,
11824 0x00, NULL, HFILL } },
11826 { &hf_zbee_zcl_calendar_number_of_days,
11827 { "Number of Days", "zbee_zcl_se.calendar.number_of_days", FT_UINT8, BASE_DEC, NULL,
11828 0x00, NULL, HFILL } },
11830 { &hf_zbee_zcl_calendar_number_of_weeks,
11831 { "Number of Weeks", "zbee_zcl_se.calendar.number_of_weeks", FT_UINT8, BASE_DEC, NULL,
11832 0x00, NULL, HFILL } },
11834 { &hf_zbee_zcl_calendar_number_of_seasons,
11835 { "Number of Seasons", "zbee_zcl_se.calendar.number_of_seasons", FT_UINT8, BASE_DEC, NULL,
11836 0x00, NULL, HFILL } },
11838 { &hf_zbee_zcl_calendar_number_of_day_profiles,
11839 { "Number of Day Profiles", "zbee_zcl_se.calendar.number_of_day_profiles", FT_UINT8, BASE_DEC, NULL,
11840 0x00, NULL, HFILL } },
11842 { &hf_zbee_zcl_calendar_number_of_week_profiles,
11843 { "Number of Week Profiles", "zbee_zcl_se.calendar.number_of_week_profiles", FT_UINT8, BASE_DEC, NULL,
11844 0x00, NULL, HFILL } },
11846 { &hf_zbee_zcl_calendar_total_number_of_schedule_entries,
11847 { "Total Number of Schedule Entries", "zbee_zcl_se.calendar.total_number_of_schedule_entries", FT_UINT8, BASE_DEC, NULL,
11848 0x00, NULL, HFILL } },
11850 { &hf_zbee_zcl_calendar_total_number_of_special_days,
11851 { "Total Number of Special Days", "zbee_zcl_se.calendar.total_number_of_special_days", FT_UINT8, BASE_DEC, NULL,
11852 0x00, NULL, HFILL } },
11854 { &hf_zbee_zcl_calendar_total_number_of_commands,
11855 { "Total Number of Commands", "zbee_zcl_se.calendar.total_number_of_commands", FT_UINT8, BASE_DEC, NULL,
11856 0x00, NULL, HFILL } },
11858 { &hf_zbee_zcl_calendar_schedule_entry_start_time,
11859 { "Start Time", "zbee_zcl_se.calendar.schedule_entry.start_time", FT_UINT16, BASE_DEC, NULL,
11860 0x00, NULL, HFILL } },
11862 { &hf_zbee_zcl_calendar_schedule_entry_price_tier,
11863 { "Price Tier", "zbee_zcl_se.calendar.schedule_entry.price_tier", FT_UINT8, BASE_DEC, NULL,
11864 0x00, NULL, HFILL } },
11866 { &hf_zbee_zcl_calendar_schedule_entry_friendly_credit_enable,
11867 { "Friendly Credit Enable", "zbee_zcl_se.calendar.schedule_entry.friendly_credit_enable", FT_BOOLEAN, BASE_NONE, TFS(&tfs_enabled_disabled),
11868 0x00, NULL, HFILL } },
11870 { &hf_zbee_zcl_calendar_schedule_entry_auxiliary_load_switch_state,
11871 { "Auxiliary Load Switch State", "zbee_zcl_se.calendar.schedule_entry.auxiliary_load_switch_state", FT_UINT8, BASE_HEX, NULL,
11872 0x00, NULL, HFILL } },
11876 /* ZCL Calendar subtrees */
11877 int *ett[] = {
11878 &ett_zbee_zcl_calendar,
11879 &ett_zbee_zcl_calendar_special_day_date,
11880 &ett_zbee_zcl_calendar_season_start_date,
11883 /* Register the ZigBee ZCL Calendar cluster protocol name and description */
11884 proto_zbee_zcl_calendar = proto_register_protocol("ZigBee ZCL Calendar", "ZCL Calendar", ZBEE_PROTOABBREV_ZCL_CALENDAR);
11885 proto_register_field_array(proto_zbee_zcl_calendar, hf, array_length(hf));
11886 proto_register_subtree_array(ett, array_length(ett));
11888 /* Register the ZigBee ZCL Calendar dissector. */
11889 register_dissector(ZBEE_PROTOABBREV_ZCL_CALENDAR, dissect_zbee_zcl_calendar, proto_zbee_zcl_calendar);
11890 } /*proto_register_zbee_zcl_calendar*/
11893 *Hands off the ZCL Calendar dissector.
11896 void
11897 proto_reg_handoff_zbee_zcl_calendar(void)
11899 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_CALENDAR,
11900 proto_zbee_zcl_calendar,
11901 ett_zbee_zcl_calendar,
11902 ZBEE_ZCL_CID_CALENDAR,
11903 ZBEE_MFG_CODE_NONE,
11904 hf_zbee_zcl_calendar_attr_id,
11906 hf_zbee_zcl_calendar_srv_rx_cmd_id,
11907 hf_zbee_zcl_calendar_srv_tx_cmd_id,
11908 (zbee_zcl_fn_attr_data)dissect_zcl_calendar_attr_data
11910 } /*proto_reg_handoff_zbee_zcl_calendar*/
11912 /* ----------------------- Daily Schedule cluster ---------------------- */
11913 /* Attributes */
11914 #define zbee_zcl_daily_schedule_attr_names_VALUE_STRING_LIST(XXX) \
11915 /* Auxiliary Switch Label Attribute Set */ \
11916 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_1_LABEL, 0x0000, "Aux Switch 1 Label" ) \
11917 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_2_LABEL, 0x0001, "Aux Switch 2 Label" ) \
11918 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_3_LABEL, 0x0002, "Aux Switch 3 Label" ) \
11919 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_4_LABEL, 0x0003, "Aux Switch 4 Label" ) \
11920 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_5_LABEL, 0x0004, "Aux Switch 5 Label" ) \
11921 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_6_LABEL, 0x0005, "Aux Switch 6 Label" ) \
11922 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_7_LABEL, 0x0006, "Aux Switch 7 Label" ) \
11923 XXX(ZBEE_ZCL_ATTR_ID_DSH_AUX_SWITCH_8_LABEL, 0x0007, "Aux Switch 8 Label" ) \
11924 XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_AUX_LOAD_SWITCH_STATE, 0x0100, "Current Auxiliary Load Switch State" ) \
11925 XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_DELIVERED_TIER, 0x0101, "Current Delivered Tier" ) \
11926 XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_TIER_LABEL, 0x0102, "Current Tier Label" ) \
11927 XXX(ZBEE_ZCL_ATTR_ID_DSH_LINKY_PEAK_PERIOD_STATUS, 0x0103, "Linky Peak Period Status" ) \
11928 XXX(ZBEE_ZCL_ATTR_ID_DSH_PEAK_START_TIME, 0x0104, "Peak Start Time" ) \
11929 XXX(ZBEE_ZCL_ATTR_ID_DSH_PEAK_END_TIME, 0x0105, "Peak End Time" ) \
11930 XXX(ZBEE_ZCL_ATTR_ID_DSH_CURRENT_TARIFF_LABEL, 0x0106, "Current Tariff Label" ) \
11932 VALUE_STRING_ENUM(zbee_zcl_daily_schedule_attr_names);
11933 VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_attr_names);
11935 /* Server Commands Received */
11936 #define zbee_zcl_daily_schedule_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
11937 XXX(ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE, 0x00, "Get Schedule" ) \
11938 XXX(ZBEE_ZCL_CMD_ID_DSH_GET_DAY_PROFILE, 0x01, "Get Day Profile" ) \
11939 XXX(ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE_CANCELLATION, 0x05, "Get Schedule Cancellation" ) \
11941 VALUE_STRING_ENUM(zbee_zcl_daily_schedule_srv_rx_cmd_names);
11942 VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_srv_rx_cmd_names);
11944 /* Server Commands Generated */
11945 #define zbee_zcl_daily_schedule_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
11946 XXX(ZBEE_ZCL_CMD_ID_DSH_PUBLISH_SCHEDULE, 0x00, "Publish Schedule" ) \
11947 XXX(ZBEE_ZCL_CMD_ID_DSH_PUBLISH_DAY_PROFILE, 0x01, "Publish Day Profile" ) \
11948 XXX(ZBEE_ZCL_CMD_ID_DSH_CANCEL_SCHEDULE, 0x05, "Cancel Schedule" ) \
11950 VALUE_STRING_ENUM(zbee_zcl_daily_schedule_srv_tx_cmd_names);
11951 VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_srv_tx_cmd_names);
11953 /*************************/
11954 /* Function Declarations */
11955 /*************************/
11956 void proto_register_zbee_zcl_daily_schedule(void);
11957 void proto_reg_handoff_zbee_zcl_daily_schedule(void);
11959 /* Attribute Dissector Helpers */
11960 static void dissect_zcl_daily_schedule_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
11962 /* Command Dissector Helpers */
11963 static void dissect_zcl_daily_schedule_get_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11964 static void dissect_zcl_daily_schedule_get_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11965 static void dissect_zcl_daily_schedule_publish_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11966 static void dissect_zcl_daily_schedule_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11967 static void dissect_zcl_daily_schedule_cancel_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
11969 /*************************/
11970 /* Global Variables */
11971 /*************************/
11973 /* Initialize the protocol and registered fields */
11974 static int proto_zbee_zcl_daily_schedule;
11976 static int hf_zbee_zcl_daily_schedule_srv_tx_cmd_id;
11977 static int hf_zbee_zcl_daily_schedule_srv_rx_cmd_id;
11978 static int hf_zbee_zcl_daily_schedule_attr_server_id;
11979 /* Get Schedule cmd */
11980 static int hf_zbee_zcl_daily_schedule_type;
11981 static int hf_zbee_zcl_daily_schedule_name;
11982 static int hf_zbee_zcl_daily_schedule_start_time;
11983 static int hf_zbee_zcl_daily_schedule_earliest_start_time;
11984 static int hf_zbee_zcl_daily_schedule_command_index;
11985 static int hf_zbee_zcl_daily_schedule_id;
11986 static int hf_zbee_zcl_daily_schedule_time_reference;
11987 static int hf_zbee_zcl_daily_schedule_provider_id;
11988 static int hf_zbee_zcl_daily_schedule_issuer_event_id;
11989 static int hf_zbee_zcl_daily_schedule_min_issuer_event_id;
11990 static int hf_zbee_zcl_daily_schedule_number_of_schedules;
11991 static int hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries;
11992 static int hf_zbee_zcl_daily_schedule_schedule_entry_start_time;
11993 static int hf_zbee_zcl_daily_schedule_schedule_entry_price_tier;
11994 static int hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state;
11996 /* Initialize the subtree pointers */
11997 static int ett_zbee_zcl_daily_schedule;
11999 #define zbee_zcl_daily_schedule_type_names_VALUE_STRING_LIST(XXX) \
12000 XXX(ZBEE_ZCL_SCHEDULE_TYPE_LINKY_SCHEDULE, 0x00, "Linky Schedule" ) \
12002 VALUE_STRING_ENUM(zbee_zcl_daily_schedule_type_names);
12003 VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_type_names);
12005 #define zbee_zcl_daily_schedule_time_reference_names_VALUE_STRING_LIST(XXX) \
12006 XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_UTC_TIME, 0x00, "UTC Time" ) \
12007 XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_STANDARD_TIME, 0x01, "Standard Time" ) \
12008 XXX(ZBEE_ZCL_SCHEDULE_TIME_REFERENCE_LOCAL_TIME, 0x02, "Local Time" )
12010 VALUE_STRING_ENUM(zbee_zcl_daily_schedule_time_reference_names);
12011 VALUE_STRING_ARRAY(zbee_zcl_daily_schedule_time_reference_names);
12014 *ZigBee ZCL Daily Schedule cluster dissector for wireshark.
12016 *@param tvb pointer to buffer containing raw packet.
12017 *@param pinfo pointer to packet information fields
12018 *@param tree pointer to data tree Wireshark uses to display packet.
12020 static int
12021 dissect_zbee_zcl_daily_schedule(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
12023 proto_tree *payload_tree;
12024 zbee_zcl_packet *zcl;
12025 unsigned offset = 0;
12026 uint8_t cmd_id;
12027 int rem_len;
12029 /* Reject the packet if data is NULL */
12030 if (data == NULL)
12031 return 0;
12032 zcl = (zbee_zcl_packet *)data;
12033 cmd_id = zcl->cmd_id;
12035 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
12036 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
12037 /* Append the command name to the info column. */
12038 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
12039 val_to_str_const(cmd_id, zbee_zcl_calendar_srv_rx_cmd_names, "Unknown Command"),
12040 zcl->tran_seqno);
12042 /* Add the command ID. */
12043 proto_tree_add_uint(tree, hf_zbee_zcl_daily_schedule_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
12045 /* Check is this command has a payload, than add the payload tree */
12046 rem_len = tvb_reported_length_remaining(tvb, ++offset);
12047 if (rem_len > 0) {
12048 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_daily_schedule, NULL, "Payload");
12050 /* Call the appropriate command dissector */
12051 switch (cmd_id) {
12053 case ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE:
12054 dissect_zcl_daily_schedule_get_schedule(tvb, payload_tree, &offset);
12055 break;
12057 case ZBEE_ZCL_CMD_ID_DSH_GET_DAY_PROFILE:
12058 dissect_zcl_daily_schedule_get_day_profile(tvb, payload_tree, &offset);
12059 break;
12061 case ZBEE_ZCL_CMD_ID_DSH_GET_SCHEDULE_CANCELLATION:
12062 /* No Payload */
12063 break;
12065 default:
12066 break;
12070 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
12071 /* Append the command name to the info column. */
12072 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
12073 val_to_str_const(cmd_id, zbee_zcl_daily_schedule_srv_tx_cmd_names, "Unknown Command"),
12074 zcl->tran_seqno);
12076 /* Add the command ID. */
12077 proto_tree_add_uint(tree, hf_zbee_zcl_daily_schedule_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
12079 /* Check is this command has a payload, than add the payload tree */
12080 rem_len = tvb_reported_length_remaining(tvb, ++offset);
12081 if (rem_len > 0) {
12082 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_daily_schedule, NULL, "Payload");
12084 /* Call the appropriate command dissector */
12085 switch (cmd_id) {
12087 case ZBEE_ZCL_CMD_ID_DSH_PUBLISH_SCHEDULE:
12088 dissect_zcl_daily_schedule_publish_schedule(tvb, payload_tree, &offset);
12089 break;
12091 case ZBEE_ZCL_CMD_ID_DSH_PUBLISH_DAY_PROFILE:
12092 dissect_zcl_daily_schedule_publish_day_profile(tvb, payload_tree, &offset);
12093 break;
12095 case ZBEE_ZCL_CMD_ID_DSH_CANCEL_SCHEDULE:
12096 dissect_zcl_daily_schedule_cancel_schedule(tvb, payload_tree, &offset);
12097 break;
12099 default:
12100 break;
12105 return tvb_captured_length(tvb);
12106 } /*dissect_zbee_zcl_daily_schedule*/
12109 *This function manages the Publish Calendar payload
12111 *@param tvb pointer to buffer containing raw packet.
12112 *@param tree pointer to data tree Wireshark uses to display packet.
12113 *@param offset pointer to offset from caller
12115 static void
12116 dissect_zcl_daily_schedule_publish_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12118 int length;
12120 /* Provider Id */
12121 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12122 *offset += 4;
12124 /* Issuer Event ID */
12125 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12126 *offset += 4;
12128 /* Schedule ID */
12129 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12130 *offset += 4;
12132 /* Start Time */
12133 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
12134 *offset += 4;
12136 /* Schedule Type */
12137 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12138 *offset += 1;
12140 /* Schedule Time Reference */
12141 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_time_reference, tvb, *offset, 1, ENC_NA);
12142 *offset += 1;
12144 /* Schedule Name */
12145 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_daily_schedule_name, tvb, *offset, 1, ENC_NA | ENC_ZIGBEE, &length);
12146 *offset += length;
12147 } /*dissect_zcl_daily_schedule_publish_schedule*/
12150 *This function manages the Publish Day Profile payload
12152 *@param tvb pointer to buffer containing raw packet.
12153 *@param tree pointer to data tree Wireshark uses to display packet.
12154 *@param offset pointer to offset from caller
12156 static void
12157 dissect_zcl_daily_schedule_publish_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12159 uint8_t schedule_entries_count;
12160 uint8_t calendar_type;
12162 /* Provider Id */
12163 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12164 *offset += 4;
12166 /* Issuer Event ID */
12167 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12168 *offset += 4;
12170 /* Issuer Calendar ID */
12171 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12172 *offset += 4;
12174 /* Total Number of Schedule Entries */
12175 schedule_entries_count = tvb_get_uint8(tvb, *offset);
12176 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries, tvb, *offset, 1, ENC_NA);
12177 *offset += 1;
12179 /* Command Index */
12180 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_command_index, tvb, *offset, 1, ENC_NA);
12181 *offset += 1;
12183 /* Number of Schedules */
12184 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_number_of_schedules, tvb, *offset, 1, ENC_NA);
12185 *offset += 1;
12187 /* Calendar Type */
12188 calendar_type = tvb_get_uint8(tvb, *offset);
12189 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12190 *offset += 1;
12192 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 4 && i < schedule_entries_count; i++) {
12193 /* Start Time */
12194 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_start_time, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
12195 *offset += 2;
12197 switch (calendar_type) {
12198 /* Rate Start Time */
12199 case ZBEE_ZCL_SCHEDULE_TYPE_LINKY_SCHEDULE:
12200 /* Price Tier */
12201 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_price_tier, tvb, *offset, 1, ENC_NA);
12202 *offset += 1;
12203 /* Auxiliary Load Switch State */
12204 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state, tvb, *offset, 1, ENC_NA);
12205 *offset += 1;
12206 break;
12209 } /*dissect_zcl_daily_schedule_publish_day_profile*/
12212 *This function manages the Cancel Calendar payload
12214 *@param tvb pointer to buffer containing raw packet.
12215 *@param tree pointer to data tree Wireshark uses to display packet.
12216 *@param offset pointer to offset from caller
12218 static void
12219 dissect_zcl_daily_schedule_cancel_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12221 /* Provider Id */
12222 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12223 *offset += 4;
12225 /* Issuer Calendar ID */
12226 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12227 *offset += 4;
12229 /* Schedule Type */
12230 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12231 *offset += 1;
12232 } /*dissect_zcl_calendar_cancel*/
12235 *This function manages the Get Calendar payload
12237 *@param tvb pointer to buffer containing raw packet.
12238 *@param tree pointer to data tree Wireshark uses to display packet.
12239 *@param offset pointer to offset from caller
12241 static void
12242 dissect_zcl_daily_schedule_get_schedule(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12244 /* Provider Id */
12245 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12246 *offset += 4;
12248 /* Earliest Start Time */
12249 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_earliest_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
12250 *offset += 4;
12252 /* Min Issuer Event ID */
12253 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_min_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12254 *offset += 4;
12256 /* Number of Schedules */
12257 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_number_of_schedules, tvb, *offset, 1, ENC_NA);
12258 *offset += 1;
12260 /* Schedule Type */
12261 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_type, tvb, *offset, 1, ENC_NA);
12262 *offset += 1;
12263 } /*dissect_zcl_daily_schedule_get_schedule*/
12266 *This function manages the Get Day Profiles payload
12268 *@param tvb pointer to buffer containing raw packet.
12269 *@param tree pointer to data tree Wireshark uses to display packet.
12270 *@param offset pointer to offset from caller
12272 static void
12273 dissect_zcl_daily_schedule_get_day_profile(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
12275 /* Provider Id */
12276 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12277 *offset += 4;
12279 /* Schedule ID */
12280 proto_tree_add_item(tree, hf_zbee_zcl_daily_schedule_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
12281 *offset += 4;
12282 } /*dissect_zcl_daily_schedule_get_day_profile*/
12285 *This function is called by ZCL foundation dissector in order to decode
12287 *@param tree pointer to data tree Wireshark uses to display packet.
12288 *@param tvb pointer to buffer containing raw packet.
12289 *@param offset pointer to buffer offset
12290 *@param attr_id attribute identifier
12291 *@param data_type attribute data type
12293 static void
12294 dissect_zcl_daily_schedule_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
12296 (void)attr_id;
12297 /* Catch all */
12298 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
12299 } /*dissect_zcl_calendar_attr_data*/
12302 *This function registers the ZCL Calendar dissector
12305 void
12306 proto_register_zbee_zcl_daily_schedule(void)
12308 static hf_register_info hf[] = {
12310 { &hf_zbee_zcl_daily_schedule_attr_server_id,
12311 { "Attribute", "zbee_zcl_se.daily_schedule.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_daily_schedule_attr_names),
12312 0x0, NULL, HFILL } },
12314 { &hf_zbee_zcl_daily_schedule_srv_tx_cmd_id,
12315 { "Command", "zbee_zcl_se.daily_schedule.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_srv_tx_cmd_names),
12316 0x00, NULL, HFILL } },
12318 { &hf_zbee_zcl_daily_schedule_srv_rx_cmd_id,
12319 { "Command", "zbee_zcl_se.daily_schedule.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_srv_rx_cmd_names),
12320 0x00, NULL, HFILL } },
12322 { &hf_zbee_zcl_daily_schedule_type,
12323 { "Schedule Type", "zbee_zcl_se.daily_schedule.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_type_names),
12324 0x00, NULL, HFILL } },
12326 { &hf_zbee_zcl_daily_schedule_start_time,
12327 { "Start Time", "zbee_zcl_se.daily_schedule.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
12328 0x00, NULL, HFILL } },
12330 { &hf_zbee_zcl_daily_schedule_earliest_start_time,
12331 { "Earliest Start Time", "zbee_zcl_se.daily_schedule.earliest_start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
12332 0x00, NULL, HFILL } },
12334 { &hf_zbee_zcl_daily_schedule_time_reference,
12335 { "Schedule Time Reference", "zbee_zcl_se.daily_schedule.time_reference", FT_UINT8, BASE_HEX, VALS(zbee_zcl_daily_schedule_time_reference_names),
12336 0x00, NULL, HFILL } },
12338 { &hf_zbee_zcl_daily_schedule_name,
12339 { "Schedule Name", "zbee_zcl_se.daily_schedule.name", FT_UINT_STRING, BASE_NONE, NULL,
12340 0x00, NULL, HFILL } },
12342 { &hf_zbee_zcl_daily_schedule_command_index,
12343 { "Command Index", "zbee_zcl_se.daily_schedule.command_index", FT_UINT8, BASE_DEC, NULL,
12344 0x00, NULL, HFILL } },
12346 { &hf_zbee_zcl_daily_schedule_provider_id,
12347 { "Provider ID", "zbee_zcl_se.daily_schedule.provider_id", FT_UINT32, BASE_DEC, NULL,
12348 0x00, NULL, HFILL } },
12350 { &hf_zbee_zcl_daily_schedule_issuer_event_id,
12351 { "Issuer Event ID", "zbee_zcl_se.daily_schedule.issuer_event_id", FT_UINT32, BASE_DEC, NULL,
12352 0x00, NULL, HFILL } },
12354 { &hf_zbee_zcl_daily_schedule_min_issuer_event_id,
12355 { "Min. Issuer Event ID", "zbee_zcl_se.daily_schedule.min_issuer_event_id", FT_UINT32, BASE_DEC, NULL,
12356 0x00, NULL, HFILL } },
12358 { &hf_zbee_zcl_daily_schedule_id,
12359 { "Schedule ID", "zbee_zcl_se.daily_schedule.id", FT_UINT32, BASE_DEC, NULL,
12360 0x00, NULL, HFILL } },
12362 { &hf_zbee_zcl_daily_schedule_total_number_of_schedule_entries,
12363 { "Total Number of Schedule Entries", "zbee_zcl_se.daily_schedule.total_number_of_schedule_entries", FT_UINT8, BASE_DEC, NULL,
12364 0x00, NULL, HFILL } },
12366 { &hf_zbee_zcl_daily_schedule_number_of_schedules,
12367 { "Number of Schedules", "zbee_zcl_se.daily_schedule.number_of_schedules", FT_UINT8, BASE_DEC, NULL,
12368 0x00, NULL, HFILL } },
12370 { &hf_zbee_zcl_daily_schedule_schedule_entry_start_time,
12371 { "Start Time", "zbee_zcl_se.daily_schedule.schedule_entry.start_time", FT_UINT16, BASE_DEC, NULL,
12372 0x00, NULL, HFILL } },
12374 { &hf_zbee_zcl_daily_schedule_schedule_entry_price_tier,
12375 { "Price Tier", "zbee_zcl_se.daily_schedule.schedule_entry.price_tier", FT_UINT8, BASE_DEC, NULL,
12376 0x00, NULL, HFILL } },
12378 { &hf_zbee_zcl_daily_schedule_schedule_entry_auxiliary_load_switch_state,
12379 { "Auxiliary Load Switch State", "zbee_zcl_se.daily_schedule.schedule_entry.auxiliary_load_switch_state", FT_UINT8, BASE_HEX, NULL,
12380 0x00, NULL, HFILL } },
12384 /* ZCL Daily Schedule subtrees */
12385 int *ett[] = {
12386 &ett_zbee_zcl_daily_schedule,
12389 /* Register the ZigBee ZCL Calendar cluster protocol name and description */
12390 proto_zbee_zcl_daily_schedule = proto_register_protocol("ZigBee ZCL Daily Schedule", "ZCL Daily Schedule", ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE);
12391 proto_register_field_array(proto_zbee_zcl_daily_schedule, hf, array_length(hf));
12392 proto_register_subtree_array(ett, array_length(ett));
12394 /* Register the ZigBee ZCL Daily Schedule dissector. */
12395 register_dissector(ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE, dissect_zbee_zcl_daily_schedule, proto_zbee_zcl_daily_schedule);
12396 } /*proto_register_zbee_zcl_calendar*/
12398 void
12399 proto_reg_handoff_zbee_zcl_daily_schedule(void)
12401 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_DAILY_SCHEDULE,
12402 proto_zbee_zcl_daily_schedule,
12403 ett_zbee_zcl_daily_schedule,
12404 ZBEE_ZCL_CID_DAILY_SCHEDULE,
12405 ZBEE_MFG_CODE_NONE,
12406 hf_zbee_zcl_daily_schedule_attr_server_id,
12408 hf_zbee_zcl_daily_schedule_srv_rx_cmd_id,
12409 hf_zbee_zcl_daily_schedule_srv_tx_cmd_id,
12410 (zbee_zcl_fn_attr_data)dissect_zcl_daily_schedule_attr_data
12412 } /*proto_reg_handoff_zbee_zcl_calendar*/
12415 /* ########################################################################## */
12416 /* #### (0x0708) DEVICE_MANAGEMENT CLUSTER ############################################## */
12417 /* ########################################################################## */
12419 /* Attributes */
12420 #define zbee_zcl_device_management_attr_server_names_VALUE_STRING_LIST(XXX) \
12421 /* Supplier Control Attribute Set */ \
12422 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_ID, 0x0100, "Provider ID" ) \
12423 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_NAME, 0x0101, "Provider Name" ) \
12424 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROVIDER_CONTACT_DETAILS, 0x0102, "Provider Contact Details" ) \
12425 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_ID, 0x0110, "Proposed Provider ID" ) \
12426 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_NAME, 0x0111, "Proposed Provider Name" ) \
12427 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CHANGE_DATE_TIME, 0x0112, "Proposed Provider Change Date/Time" ) \
12428 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CHANGE_CONTROL, 0x0113, "Proposed Provider Change Control" ) \
12429 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_PROVIDER_CONTACT_DETAILS, 0x0114, "Proposed Provider Contact Details" ) \
12430 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_ID, 0x0120, "Received Provider ID" ) \
12431 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_NAME, 0x0121, "Received Provider Name" ) \
12432 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROVIDER_CONTACT_DETAILS, 0x0122, "Received Provider Contact Details" ) \
12433 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_ID, 0x0130, "Received Proposed Provider ID" ) \
12434 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_NAME, 0x0131, "Received Proposed Provider Name" ) \
12435 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CHANGE_DATE_TIME, 0x0132, "Received Proposed Provider Change Date/Time" ) \
12436 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CHANGE_CONTROL, 0x0133, "Received Proposed Provider Change Control" ) \
12437 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_RECEIVED_PROPOSED_PROVIDER_CONTACT_DETAILS, 0x0134, "Received Proposed Provider Contact Details" ) \
12438 /* Tenancy Control Attribute Set */ \
12439 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CHANGE_OF_TENANCY_UPDATE_DATE_TIME, 0x0200, "Change of Tenancy Update Date/Time" ) \
12440 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_PROPOSED_TENANCY_CHANGE_CONTROL, 0x0201, "Proposed Tenancy Change control" ) \
12441 /* Backhaul Control Attribute Set */ \
12442 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_WAN_STATUS, 0x0300, "WAN Status" ) \
12443 /* HAN Control Attribute Set */ \
12444 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_LOW_MEDIUM_THRESHOLD, 0x0400, "Low Medium Threshold" ) \
12445 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_MEDIUM_HIGH_THRESHOLD, 0x0401, "Medium High Threshold" ) \
12446 /* Add client attribute sets */ \
12447 /* Smart Energy */ \
12448 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT, 0xFFFE, "Attribute Reporting Status" )
12450 VALUE_STRING_ENUM(zbee_zcl_device_management_attr_server_names);
12451 VALUE_STRING_ARRAY(zbee_zcl_device_management_attr_server_names);
12453 #define zbee_zcl_device_management_attr_client_names_VALUE_STRING_LIST(XXX) \
12454 /* Supplier Attribute Set */ \
12455 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROVIDER_ID, 0x0000, "Provider ID" ) \
12456 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RECEIVED_PROVIDER_ID, 0x0010, "Received Provider ID" ) \
12457 /* Price Event Configuration Attribute Set */ \
12458 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOU_TARIFF_ACTIVATION, 0x0100, "TOU Tariff Activation" ) \
12459 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BLOCK_TARIFF_ACTIVATED, 0x0101, "Block Tariff Activated" ) \
12460 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BLOCK_TOU_TARIFF_ACTIVATED, 0x0102, "Block TOU Tariff Activated" ) \
12461 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SINGLE_TARIFF_RATE_ACTIVATED, 0x0103, "Single Tariff Rate Activated" ) \
12462 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ASYNCHRONOUS_BILLING_OCCURRED, 0x0104, "Asynchronous Billing Occurred" ) \
12463 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SYNCHRONOUS_BILLING_OCCURRED, 0x0105, "Synchronous Billing Occurred" ) \
12464 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_NOT_SUPPORTED, 0x0106, "Tariff Not Supported" ) \
12465 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_CLUSTER_NOT_FOUND, 0x0107, "Price Cluster Not Found" ) \
12466 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENCY_CHANGE_PASSIVE_ACTIVATED, 0x0108, "Currency Change Passive Activated" ) \
12467 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENCY_CHANGE_PASSIVE_UPDATED, 0x0109, "Currency Change Passive Updated" ) \
12468 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_MATRIX_PASSIVE_ACTIVATED, 0x010A, "Price Matrix Passive Activated" ) \
12469 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRICE_MATRIX_PASSIVE_UPDATED, 0x010B, "Price Matrix Passive Updated" ) \
12470 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_CHANGE_PASSIVE_ACTIVATED, 0x010C, "Tariff Change Passive Activated" ) \
12471 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TARIFF_CHANGED_PASSIVE_UPDATED, 0x010D, "Tariff Changed Passive Updated" ) \
12472 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_RECEIVED, 0x01B0, "Publish Price Received" ) \
12473 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_ACTIONED, 0x01B1, "Publish Price Actioned" ) \
12474 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_CANCELLED, 0x01B2, "Publish Price Cancelled" ) \
12475 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_REJECTED, 0x01B3, "Publish Price Rejected" ) \
12476 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_RECEIVED, 0x01B4, "Publish Tariff Information Received" ) \
12477 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_ACTIONED, 0x01B5, "Publish Tariff Information Actioned" ) \
12478 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_CANCELLED, 0x01B6, "Publish Tariff Information Cancelled" ) \
12479 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TARIFF_INFORMATION_REJECTED, 0x01B7, "Publish Tariff Information Rejected" ) \
12480 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_RECEIVED, 0x01B8, "Publish Price Matrix Received" ) \
12481 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_ACTIONED, 0x01B9, "Publish Price Matrix Actioned" ) \
12482 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_CANCELLED, 0x01BA, "Publish Price Matrix Cancelled" ) \
12483 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_PRICE_MATRIX_REJECTED, 0x01BB, "Publish Price Matrix Rejected" ) \
12484 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_RECEIVED, 0x01BC, "Publish Block Thresholds Received" ) \
12485 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_ACTIONED, 0x01BD, "Publish Block Thresholds Actioned" ) \
12486 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_CANCELLED, 0x01BE, "Publish Block Thresholds Cancelled" ) \
12487 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_THRESHOLDS_REJECTED, 0x01BF, "Publish Block Thresholds Rejected" ) \
12488 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_RECEIVED, 0x01C0, "Publish Calorific Value Received" ) \
12489 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_ACTIONED, 0x01C1, "Publish Calorific Value Actioned" ) \
12490 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_CANCELLED, 0x01C2, "Publish Calorific Value Cancelled" ) \
12491 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALORIFIC_VALUE_REJECTED, 0x01C3, "Publish Calorific Value Rejected" ) \
12492 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_RECEIVED, 0x01C4, "Publish Conversion Factor Received" ) \
12493 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_ACTIONED, 0x01C5, "Publish Conversion Factor Actioned" ) \
12494 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_CANCELLED, 0x01C6, "Publish Conversion Factor Cancelled" ) \
12495 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONVERSION_FACTOR_REJECTED, 0x01C7, "Publish Conversion Factor Rejected" ) \
12496 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_RECEIVED, 0x01C8, "Publish CO2 Value Received" ) \
12497 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_ACTIONED, 0x01C9, "Publish CO2 Value Actioned" ) \
12498 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_CANCELLED, 0x01CA, "Publish CO2 Value Cancelled" ) \
12499 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CO2_VALUE_REJECTED, 0x01CB, "Publish CO2 Value Rejected" ) \
12500 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_RECEIVED, 0x01CC, "Publish CPP event Received" ) \
12501 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_ACTIONED, 0x01CD, "Publish CPP event Actioned" ) \
12502 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_CANCELLED, 0x01CE, "Publish CPP event Cancelled" ) \
12503 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CPP_EVENT_REJECTED, 0x01CF, "Publish CPP event Rejected" ) \
12504 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_RECEIVED, 0x01D0, "Publish Tier Labels Received" ) \
12505 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_ACTIONED, 0x01D1, "Publish Tier Labels Actioned" ) \
12506 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_CANCELLED, 0x01D2, "Publish Tier Labels Cancelled" ) \
12507 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_TIER_LABELS_REJECTED, 0x01D3, "Publish Tier Labels Rejected" ) \
12508 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_RECEIVED, 0x01D4, "Publish Billing Period Received" ) \
12509 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_ACTIONED, 0x01D5, "Publish Billing Period Actioned" ) \
12510 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_CANCELLED, 0x01D6, "Publish Billing Period Cancelled" ) \
12511 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BILLING_PERIOD_REJECTED, 0x01D7, "Publish Billing Period Rejected" ) \
12512 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_RECEIVED, 0x01D8, "Publish Consolidated Bill Received" ) \
12513 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_ACTIONED, 0x01D9, "Publish Consolidated Bill Actioned" ) \
12514 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_CANCELLED, 0x01DA, "Publish Consolidated Bill Cancelled" ) \
12515 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CONSOLIDATED_BILL_REJECTED, 0x01DB, "Publish Consolidated Bill Rejected" ) \
12516 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_RECEIVED, 0x01DC, "Publish Block Period Received" ) \
12517 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_ACTIONED, 0x01DD, "Publish Block Period Actioned" ) \
12518 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_CANCELLED, 0x01DE, "Publish Block Period Cancelled" ) \
12519 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_BLOCK_PERIOD_REJECTED, 0x01DF, "Publish Block Period Rejected" ) \
12520 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_RECEIVED, 0x01E0, "Publish Credit Payment Info Received" ) \
12521 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_ACTIONED, 0x01E1, "Publish Credit Payment Info Actioned" ) \
12522 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_CANCELLED, 0x01E2, "Publish Credit Payment Info Cancelled" ) \
12523 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CREDIT_PAYMENT_INFO_REJECTED, 0x01E3, "Publish Credit Payment Info Rejected" ) \
12524 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_RECEIVED, 0x01E4, "Publish Currency Conversion Received" ) \
12525 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_ACTIONED, 0x01E5, "Publish Currency Conversion Actioned" ) \
12526 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_CANCELLED, 0x01E6, "Publish Currency Conversion Cancelled" ) \
12527 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CURRENCY_CONVERSION_REJECTED, 0x01E7, "Publish Currency Conversion Rejected" ) \
12528 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_PRICE_CLUSTER_GROUP_ID, 0x01FF, "Reserved for Price Cluster Group ID" ) \
12529 /* Metering Event Configuration Attribute Set */ \
12530 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHECK_METER, 0x0200, "Check Meter" ) \
12531 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_BATTERY, 0x0201, "Low Battery" ) \
12532 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAMPER_DETECT, 0x0202, "Tamper Detect" ) \
12533 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_STATUS, 0x0203, "Supply Status" ) \
12534 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_QUALITY, 0x0204, "Supply Quality" ) \
12535 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LEAK_DETECT, 0x0205, "Leak Detect" ) \
12536 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SERVICE_DISCONNECT, 0x0206, "Service Disconnect" ) \
12537 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METERING_REVERSE_FLOW_GAS_WATER_HEAT, 0x0207, "Reverse Flow (Gas, Water, Heat/Cooling)" ) \
12538 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_COVER_REMOVED, 0x0208, "Meter Cover Removed" ) \
12539 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_COVER_CLOSED, 0x0209, "Meter Cover Closed" ) \
12540 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STRONG_MAGNETIC_FIELD, 0x020A, "Strong Magnetic Field" ) \
12541 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_STRONG_MAGNETIC_FIELD, 0x020B, "No Strong Magnetic Field" ) \
12542 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_FAILURE, 0x020C, "Battery Failure" ) \
12543 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROGRAM_MEMORY_ERROR, 0x020D, "Program Memory Error" ) \
12544 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RAM_ERROR, 0x020E, "RAM Error" ) \
12545 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NV_MEMORY_ERROR, 0x020F, "NV Memory Error" ) \
12546 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L1, 0x0210, "Low Voltage L1" ) \
12547 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L1, 0x0211, "High Voltage L1" ) \
12548 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L2, 0x0212, "Low Voltage L2" ) \
12549 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L2, 0x0213, "High Voltage L2" ) \
12550 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_VOLTAGE_L3, 0x0214, "Low Voltage L3" ) \
12551 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_HIGH_VOLTAGE_L3, 0x0215, "High Voltage L3" ) \
12552 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L1, 0x0216, "Over Current L1" ) \
12553 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L2, 0x0217, "Over Current L2" ) \
12554 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_CURRENT_L3, 0x0218, "Over Current L3" ) \
12555 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L1, 0x0219, "Frequency too Low L1" ) \
12556 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L1, 0x021A, "Frequency too High L1" ) \
12557 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L2, 0x021B, "Frequency too Low L2" ) \
12558 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L2, 0x021C, "Frequency too High L2" ) \
12559 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_LOW_L3, 0x021D, "Frequency too Low L3" ) \
12560 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FREQUENCY_TOO_HIGH_L3, 0x021E, "Frequency too High L3" ) \
12561 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GROUND_FAULT, 0x021F, "Ground Fault" ) \
12562 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ELECTRIC_TAMPER_DETECT, 0x0220, "Electric Tamper Detect" ) \
12563 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INCORRECT_POLARITY, 0x0221, "Incorrect Polarity" ) \
12564 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CURRENT_NO_VOLTAGE, 0x0222, "Current No Voltage" ) \
12565 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNDER_VOLTAGE, 0x0223, "Under Voltage" ) \
12566 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OVER_VOLTAGE, 0x0224, "Over Voltage" ) \
12567 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NORMAL_VOLTAGE, 0x0225, "Normal Voltage" ) \
12568 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PF_BELOW_THRESHOLD, 0x0226, "PF Below Threshold" ) \
12569 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PF_ABOVE_THRESHOLD, 0x0227, "PF Above Threshold" ) \
12570 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TERMINAL_COVER_REMOVED, 0x0228, "Terminal Cover Removed" ) \
12571 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TERMINAL_COVER_CLOSED, 0x0229, "Terminal Cover Closed" ) \
12572 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BURST_DETECT, 0x0230, "Burst Detect" ) \
12573 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRESSURE_TOO_LOW, 0x0231, "Pressure too Low" ) \
12574 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PRESSURE_TOO_HIGH, 0x0232, "Pressure too High" ) \
12575 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_COMMUNICATION_ERROR, 0x0233, "Flow Sensor Communication Error" ) \
12576 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_MEASUREMENT_FAULT, 0x0234, "Flow Sensor Measurement Fault" ) \
12577 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_REVERSE_FLOW, 0x0235, "Flow Sensor Reverse Flow" ) \
12578 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FLOW_SENSOR_AIR_DETECT, 0x0236, "Flow Sensor Air Detect" ) \
12579 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PIPE_EMPTY, 0x0237, "Pipe Empty" ) \
12580 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INLET_TEMPERATURE_SENSOR_FAULT, 0x0250, "Inlet Temperature Sensor Fault" ) \
12581 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_OUTLET_TEMPERATURE_SENSOR_FAULT, 0x0251, "Outlet Temperature Sensor Fault" ) \
12582 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REVERSE_FLOW, 0x0260, "Reverse Flow" ) \
12583 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TILT_TAMPER, 0x0261, "Tilt Tamper" ) \
12584 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_COVER_REMOVED, 0x0262, "Battery Cover Removed" ) \
12585 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_COVER_CLOSED, 0x0263, "Battery Cover Closed" ) \
12586 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EXCESS_FLOW, 0x0264, "Excess Flow" ) \
12587 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TILT_TAMPER_ENDED, 0x0265, "Tilt Tamper Ended" ) \
12588 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MEASUREMENT_SYSTEM_ERROR, 0x0270, "Measurement System Error" ) \
12589 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_WATCHDOG_ERROR, 0x0271, "Watchdog Error" ) \
12590 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_DISCONNECT_FAILURE, 0x0272, "Supply Disconnect Failure" ) \
12591 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_CONNECT_FAILURE, 0x0273, "Supply Connect Failure" ) \
12592 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MEASUREMENT_SOFTWARE_CHANGED, 0x0274, "Measurement Software Changed" ) \
12593 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DST_ENABLED, 0x0275, "DST Enabled" ) \
12594 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DST_DISABLED, 0x0276, "DST Disabled" ) \
12595 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_ADJUST_BACKWARD, 0x0277, "Clock Adjust Backward" ) \
12596 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_ADJUST_FORWARD, 0x0278, "Clock Adjust Forward" ) \
12597 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOCK_INVALID, 0x0279, "Clock Invalid" ) \
12598 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMUNICATION_ERROR_HAN, 0x027A, "Communication Error HAN" ) \
12599 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMUNICATION_OK_HAN, 0x027B, "Communication OK HAN" ) \
12600 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_FRAUD_ATTEMPT, 0x027C, "Meter Fraud Attempt" ) \
12601 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_POWER_LOSS, 0x027D, "Power Loss" ) \
12602 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNUSUAL_HAN_TRAFFIC, 0x027E, "Unusual HAN Traffic" ) \
12603 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_CLOCK_CHANGE, 0x027F, "Unexpected Clock Change" ) \
12604 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_COMMS_USING_UNAUTHENTICATED_COMPONENT, 0x0280, "Comms Using Unauthenticated Component" ) \
12605 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MET_ERROR_REGISTER_CLEAR, 0x0281, "Metering Error Register Clear" ) \
12606 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MET_ALARM_REGISTER_CLEAR, 0x0282, "Metering Alarm Register Clear" ) \
12607 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_HW_RESET, 0x0283, "Unexpected HW Reset" ) \
12608 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNEXPECTED_PROGRAM_EXECUTION, 0x0284, "Unexpected Program Execution" ) \
12609 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_EXCEEDED, 0x0285, "Limit Threshold Exceeded" ) \
12610 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_OK, 0x0286, "Limit Threshold OK" ) \
12611 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LIMIT_THRESHOLD_CHANGED, 0x0287, "Limit Threshold Changed" ) \
12612 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MAXIMUM_DEMAND_EXCEEDED, 0x0288, "Maximum Demand Exceeded" ) \
12613 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PROFILE_CLEARED, 0x0289, "Profile Cleared" ) \
12614 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOAD_PROFILE_CLEARED, 0x028A, "Load Profile Cleared" ) \
12615 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_BATTERY_WARNING, 0x028B, "Battery Warning" ) \
12616 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_WRONG_SIGNATURE, 0x028C, "Wrong Signature" ) \
12617 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_SIGNATURE, 0x028D, "No Signature" ) \
12618 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SIGNATURE_NOT_VALID, 0x028E, "Signature Not Valid" ) \
12619 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNAUTHORISED_ACTION_FROM_HAN, 0x028F, "Unauthorized Action From HAN" ) \
12620 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FAST_POLLING_START, 0x0290, "Fast Polling Start" ) \
12621 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FAST_POLLING_END, 0x0291, "Fast Polling End" ) \
12622 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_REPORTING_INTERVAL_CHANGED, 0x0292, "Meter Reporting Interval Changed" ) \
12623 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCONNECT_TO_LOAD_LIMIT, 0x0293, "Disconnect to Load Limit" ) \
12624 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_SUPPLY_STATUS_REGISTER_CHANGED, 0x0294, "Meter Supply Status Register Changed" ) \
12625 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_METER_ALARM_STATUS_REGISTER_CHANGED, 0x0295, "Meter Alarm Status Register Changed" ) \
12626 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EXTENDED_METER_ALARM_STATUS_REG_CHANGED,0x0296, "Extended Meter Alarm Status Register Changed." ) \
12627 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DATA_ACCESS_VIA_LOCAL_PORT, 0x0297, "Data Access Via Local Port" ) \
12628 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_MIRROR_SUCCESS, 0x0298, "Configure Mirror Success" ) \
12629 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_MIRROR_FAILURE, 0x0299, "Configure Mirror Failure" ) \
12630 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAG_SCHEME_SUCC,0x029A, "Configure Notification Flag Scheme Success" ) \
12631 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAG_SCHEME_FAIL,0x029B, "Configure Notification Flag Scheme Failure" ) \
12632 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAGS_SUCCESS, 0x029C, "Configure Notification Flags Success" ) \
12633 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONFIGURE_NOTIFICATION_FLAGS_FAILURE, 0x029D, "Configure Notification Flags Failure" ) \
12634 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STAY_AWAKE_REQUEST_HAN, 0x029E, "Stay Awake Request HAN" ) \
12635 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_STAY_AWAKE_REQUEST_WAN, 0x029F, "Stay Awake Request WAN" ) \
12636 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_A, 0x02B0, "Manufacturer Specific A" ) \
12637 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_B, 0x02B1, "Manufacturer Specific B" ) \
12638 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_C, 0x02B2, "Manufacturer Specific C" ) \
12639 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_D, 0x02B3, "Manufacturer Specific D" ) \
12640 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_E, 0x02B4, "Manufacturer Specific E" ) \
12641 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_F, 0x02B5, "Manufacturer Specific F" ) \
12642 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_G, 0x02B6, "Manufacturer Specific G" ) \
12643 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_H, 0x02B7, "Manufacturer Specific H" ) \
12644 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUFACTURER_SPECIFIC_I, 0x02B8, "Manufacturer Specific I" ) \
12645 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_RECEIVED, 0x02C0, "Get Profile Command Received" ) \
12646 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_ACTIONED, 0x02C1, "Get Profile Command Actioned" ) \
12647 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_CANCELLED, 0x02C2, "Get Profile Command Cancelled" ) \
12648 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PROFILE_COMMAND_REJECTED, 0x02C3, "Get Profile Command Rejected" ) \
12649 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_RECV, 0x02C4, "Request Mirror Response Command Received" ) \
12650 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_ACTION, 0x02C5, "Request Mirror Response Command Actioned" ) \
12651 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_CANCEL, 0x02C6, "Request Mirror Response Command Cancelled" ) \
12652 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_MIRROR_RESPONSE_COMMAND_REJECT, 0x02C7, "Request Mirror Response Command Rejected" ) \
12653 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_RECEIVED, 0x02C8, "Mirror Removed Command Received" ) \
12654 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_ACTIONED, 0x02C9, "Mirror Removed Command Actioned" ) \
12655 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_CANCELLED, 0x02CA, "Mirror Removed Command Cancelled" ) \
12656 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REMOVED_COMMAND_REJECTED, 0x02CB, "Mirror Removed Command Rejected" ) \
12657 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_RECEIVED, 0x02CC, "Get Snapshot Command Received" ) \
12658 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_ACTIONED, 0x02CD, "Get Snapshot Command Actioned" ) \
12659 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_CANCELLED, 0x02CE, "Get Snapshot Command Cancelled" ) \
12660 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SNAPSHOT_COMMAND_REJECTED, 0x02CF, "Get Snapshot Command Rejected" ) \
12661 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_RECEIVED, 0x02D0, "Take Snapshot Command Received" ) \
12662 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_ACTIONED, 0x02D1, "Take Snapshot Command Actioned" ) \
12663 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_CANCELLED, 0x02D2, "Take Snapshot Command Cancelled" ) \
12664 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TAKE_SNAPSHOT_COMMAND_REJECTED, 0x02D3, "Take Snapshot Command Rejected" ) \
12665 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_RECV, 0x02D4, "Mirror Report Attribute Response Command Received" ) \
12666 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_ACTION, 0x02D5, "Mirror Report Attribute Response Command Actioned" ) \
12667 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_CANCEL, 0x02D6, "Mirror Report Attribute Response Command Cancelled" ) \
12668 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MIRROR_REPORT_ATTRIBUTE_RSP_CMD_REJECT, 0x02D7, "Mirror Report Attribute Response Command Rejected" ) \
12669 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_RECEIVED, 0x02D8, "Schedule Snapshot Command Received" ) \
12670 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_ACTIONED, 0x02D9, "Schedule Snapshot Command Actioned" ) \
12671 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_CANCELLED, 0x02DA, "Schedule Snapshot Command Cancelled" ) \
12672 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SCHEDULE_SNAPSHOT_COMMAND_REJECTED, 0x02DB, "Schedule Snapshot Command Rejected" ) \
12673 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_RECEIVED, 0x02DC, "Start Sampling Command Received" ) \
12674 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_ACTIONED, 0x02DD, "Start Sampling Command Actioned" ) \
12675 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_CANCELLED, 0x02DE, "Start Sampling Command Cancelled" ) \
12676 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_START_SAMPLING_COMMAND_REJECTED, 0x02DF, "Start Sampling Command Rejected" ) \
12677 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_RECEIVED, 0x02E0, "Get Sampled Data Command Received" ) \
12678 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_ACTIONED, 0x02E1, "Get Sampled Data Command Actioned" ) \
12679 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_CANCELLED, 0x02E2, "Get Sampled Data Command Cancelled" ) \
12680 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SAMPLED_DATA_COMMAND_REJECTED, 0x02E3, "Get Sampled Data Command Rejected" ) \
12681 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_ON, 0x02E4, "Supply On" ) \
12682 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_ARMED, 0x02E5, "Supply Armed" ) \
12683 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SUPPLY_OFF, 0x02E6, "Supply Off" ) \
12684 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCONNECTED_DUE_TO_TAMPER_DETECTED, 0x02E7, "Disconnected due to Tamper Detected" ) \
12685 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUAL_DISCONNECT, 0x02E8, "Manual Disconnect" ) \
12686 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MANUAL_CONNECT, 0x02E9, "Manual Connect" ) \
12687 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REMOTE_DISCONNECTION, 0x02EA, "Remote Disconnection" ) \
12688 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REMOTE_CONNECT, 0x02EB, "Remote Connect" ) \
12689 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_DISCONNECTION, 0x02EC, "Local Disconnection" ) \
12690 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CONNECT, 0x02ED, "Local Connect" ) \
12691 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_RECEIVED, 0x02EE, "Change Supply Received" ) \
12692 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_ACTIONED, 0x02EF, "Change Supply Actioned" ) \
12693 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_CANCELLED, 0x02F0, "Change Supply Cancelled" ) \
12694 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_SUPPLY_REJECTED, 0x02F1, "Change Supply Rejected" ) \
12695 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_RECEIVED, 0x02F2, "Local Change Supply Received" ) \
12696 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_ACTIONED, 0x02F3, "Local Change Supply Actioned" ) \
12697 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_CANCELLED, 0x02F4, "Local Change Supply Cancelled" ) \
12698 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOCAL_CHANGE_SUPPLY_REJECTED, 0x02F5, "Local Change Supply Rejected" ) \
12699 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_RECV, 0x02F6, "Publish Uncontrolled Flow Threshold Received" ) \
12700 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_ACTION, 0x02F7, "Publish Uncontrolled Flow Threshold Actioned" ) \
12701 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_CANCEL, 0x02F8, "Publish Uncontrolled Flow Threshold Cancelled" ) \
12702 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_UNCONTROLLED_FLOW_THRES_REJECY, 0x02F9, "Publish Uncontrolled Flow Threshold Rejected" ) \
12703 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_METERING_CLUSTER_GROUP_ID, 0x02FF, "Reserved for Metering Cluster Group Id" ) \
12704 /* Messaging Event Configuration Attribute Set */ \
12705 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MESSAGE_CONFIRMATION_SENT, 0x0300, "Message Confirmation Sent" ) \
12706 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_RECEIVED, 0x03C0, "Display Message Received" ) \
12707 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_ACTIONED, 0x03C1, "Display Message Actioned" ) \
12708 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_CANCELLED, 0x03C2, "Display Message Cancelled" ) \
12709 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISPLAY_MESSAGE_REJECTED, 0x03C3, "Display Message Rejected" ) \
12710 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_RECEIVED, 0x03C4, "Cancel Message Received" ) \
12711 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_ACTIONED, 0x03C5, "Cancel Message Actioned" ) \
12712 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_CANCELLED, 0x03C6, "Cancel Message Cancelled" ) \
12713 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CANCEL_MESSAGE_REJECTED, 0x03C7, "Cancel Message Rejected" ) \
12714 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_MESSAGING_CLUSTER_GROUP_ID,0x03FF, "Reserved for Messaging Cluster Group ID" ) \
12715 /* Prepayment Event Configuration Attribute Set */ \
12716 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_LOW_CREDIT, 0x0400, "Low Credit" ) \
12717 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_NO_CREDIT_ZERO_CREDIT, 0x0401, "No Credit (Zero Credit)" ) \
12718 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_EXHAUSTED, 0x0402, "Credit Exhausted" ) \
12719 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_ENABLED, 0x0403, "Emergency Credit Enabled" ) \
12720 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_EXHAUSTED, 0x0404, "Emergency Credit Exhausted" ) \
12721 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IHD_LOW_CREDIT_WARNING, 0x0405, "IHD Low Credit Warning" ) \
12722 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PHYSICAL_ATTACK_ON_THE_PREPAY_METER, 0x0420, "Physical Attack on the Prepay Meter" ) \
12723 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ELECTRONIC_ATTACK_ON_THE_PREPAY_METER, 0x0421, "Electronic Attack on the Prepay Meter" ) \
12724 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DISCOUNT_APPLIED, 0x0422, "Discount Applied" ) \
12725 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT, 0x0423, "Credit Adjustment" ) \
12726 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUST_FAIL, 0x0424, "Credit Adjust Fail" ) \
12727 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DEBT_ADJUSTMENT, 0x0425, "Debt Adjustment" ) \
12728 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_DEBT_ADJUST_FAIL, 0x0426, "Debt Adjust Fail" ) \
12729 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_CHANGE, 0x0427, "Mode Change" ) \
12730 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_CODE_ERROR, 0x0428, "Topup Code Error" ) \
12731 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ALREADY_USED, 0x0429, "Topup Already Used" ) \
12732 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_CODE_INVALID, 0x042A, "Topup Code Invalid" ) \
12733 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ACCEPTED_VIA_REMOTE, 0x042B, "Topup Accepted via Remote" ) \
12734 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_ACCEPTED_VIA_MANUAL_ENTRY, 0x042C, "Topup Accepted via Manual Entry" ) \
12735 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_IN_USE, 0x042D, "Friendly Credit in Use" ) \
12736 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_PERIOD_END_WARNING, 0x042E, "Friendly Credit Period End Warning" ) \
12737 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FRIENDLY_CREDIT_PERIOD_END, 0x042F, "Friendly Credit Period End" ) \
12738 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PP_ERROR_REGISTER_CLEAR, 0x0430, "Prepayment Error Register Clear" ) \
12739 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PP_ALARM_REGISTER_CLEAR, 0x0431, "Prepayment Alarm Register Clear" ) \
12740 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PREPAY_CLUSTER_NOT_FOUND, 0x0432, "Prepay Cluster Not Found" ) \
12741 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TOPUP_VALUE_TOO_LARGE, 0x0433, "Topup Value too Large" ) \
12742 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_CREDIT_2_PREPAY, 0x0441, "Mode Credit 2 Prepay" ) \
12743 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_PREPAY_2_CREDIT, 0x0442, "Mode Prepay 2 Credit" ) \
12744 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_MODE_DEFAULT, 0x0443, "Mode Default" ) \
12745 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_RECV, 0x04C0, "Select Available Emergency Credit Received" ) \
12746 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_ACTION, 0x04C1, "Select Available Emergency Credit Actioned" ) \
12747 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_CANCEL, 0x04C2, "Select Available Emergency Credit Cancelled" ) \
12748 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SELECT_AVAILABLE_EMERG_CREDIT_REJECT, 0x04C3, "Select Available Emergency Credit Rejected" ) \
12749 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_RECEIVED, 0x04C4, "Change Debt Received" ) \
12750 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_ACTIONED, 0x04C5, "Change Debt Actioned" ) \
12751 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_CANCELLED, 0x04C6, "Change Debt Cancelled" ) \
12752 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_DEBT_REJECTED, 0x04C7, "Change Debt Rejected" ) \
12753 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_RECEIVED, 0x04C8, "Emergency Credit Setup Received" ) \
12754 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_ACTIONED, 0x04C9, "Emergency Credit Setup Actioned" ) \
12755 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_CANCELLED, 0x04CA, "Emergency Credit Setup Cancelled" ) \
12756 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EMERGENCY_CREDIT_SETUP_REJECTED, 0x04CB, "Emergency Credit Setup Rejected" ) \
12757 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_RECEIVED, 0x04CC, "Consumer Topup Received" ) \
12758 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_ACTIONED, 0x04CD, "Consumer Topup Actioned" ) \
12759 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_CANCELLED, 0x04CE, "Consumer Topup Cancelled" ) \
12760 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CONSUMER_TOPUP_REJECTED, 0x04CF, "Consumer Topup Rejected" ) \
12761 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_RECEIVED, 0x04D0, "Credit Adjustment Received" ) \
12762 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_ACTIONED, 0x04D1, "Credit Adjustment Actioned" ) \
12763 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_CANCELLED, 0x04D2, "Credit Adjustment Cancelled" ) \
12764 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CREDIT_ADJUSTMENT_REJECTED, 0x04D3, "Credit Adjustment Rejected" ) \
12765 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_RECEIVED, 0x04D4, "Change Payment Mode Received" ) \
12766 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_ACTIONED, 0x04D5, "Change Payment Mode Actioned" ) \
12767 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_CANCELLED, 0x04D6, "Change Payment Mode Cancelled" ) \
12768 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PAYMENT_MODE_REJECTED, 0x04D7, "Change Payment Mode Rejected" ) \
12769 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_RECEIVED, 0x04D8, "Get Prepay Snapshot Received" ) \
12770 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_ACTIONED, 0x04D9, "Get Prepay Snapshot Actioned" ) \
12771 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_CANCELLED, 0x04DA, "Get Prepay Snapshot Cancelled" ) \
12772 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_PREPAY_SNAPSHOT_REJECTED, 0x04DB, "Get Prepay Snapshot Rejected" ) \
12773 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_RECEIVED, 0x04DC, "Get Topup Log Received" ) \
12774 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_ACTIONED, 0x04DD, "Get Topup Log Actioned" ) \
12775 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_CANCELLED, 0x04DE, "Get Topup Log Cancelled" ) \
12776 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_TOPUP_LOG_REJECTED, 0x04DF, "Get Topup Log Rejected" ) \
12777 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_RECEIVED, 0x04E0, "Set Low Credit Warning Level Received" ) \
12778 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_ACTIONED, 0x04E1, "Set Low Credit Warning Level Actioned" ) \
12779 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_CANCELLED, 0x04E2, "Set Low Credit Warning Level Cancelled" ) \
12780 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_LOW_CREDIT_WARNING_LEVEL_REJECTED, 0x04E3, "Set Low Credit Warning Level Rejected" ) \
12781 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_RECEIVED, 0x04E4, "Get Debt Repay Log Received" ) \
12782 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_ACTIONED, 0x04E5, "Get Debt Repay Log Actioned" ) \
12783 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_CANCELLED, 0x04E6, "Get Debt Repay Log Cancelled" ) \
12784 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_DEBT_REPAY_LOG_REJECTED, 0x04E7, "Get Debt Repay Log Rejected" ) \
12785 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_RECEIVED, 0x04E8, "Set Maximum Credit Limit Received" ) \
12786 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_ACTIONED, 0x04E9, "Set Maximum Credit Limit Actioned" ) \
12787 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_CANCELLED, 0x04EA, "Set Maximum Credit Limit Cancelled" ) \
12788 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_MAXIMUM_CREDIT_LIMIT_REJECTED, 0x04EB, "Set Maximum Credit Limit Rejected" ) \
12789 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_RECEIVED, 0x04EC, "Set Overall Debt Cap Received" ) \
12790 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_ACTIONED, 0x04ED, "Set Overall Debt Cap Actioned" ) \
12791 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_CANCELLED, 0x04EE, "Set Overall Debt Cap Cancelled" ) \
12792 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_OVERALL_DEBT_CAP_REJECTED, 0x04EF, "Set Overall Debt Cap Rejected" ) \
12793 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_PP_CLUSTER_GROUP_ID, 0x04FF, "Reserved for Prepayment Cluster Group ID" ) \
12794 /* Calendar Event Configuration Attribute Set */ \
12795 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CLUSTER_NOT_FOUND, 0x0500, "Calendar Cluster Not Found" ) \
12796 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CHANGE_PASSIVE_ACTIVATED, 0x0501, "Calendar Change Passive Activated" ) \
12797 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CALENDAR_CHANGE_PASSIVE_UPDATED, 0x0502, "Calendar Change Passive Updated" ) \
12798 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_RECEIVED, 0x05C0, "Publish Calendar Received" ) \
12799 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_ACTIONED, 0x05C1, "Publish Calendar Actioned" ) \
12800 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_CANCELLED, 0x05C2, "Publish Calendar Cancelled" ) \
12801 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_CALENDAR_REJECTED, 0x05C3, "Publish Calendar Rejected" ) \
12802 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_RECEIVED, 0x05C4, "Publish Day Profile Received" ) \
12803 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_ACTIONED, 0x05C5, "Publish Day Profile Actioned" ) \
12804 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_CANCELLED, 0x05C6, "Publish Day Profile Cancelled" ) \
12805 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_DAY_PROFILE_REJECTED, 0x05C7, "Publish Day Profile Rejected" ) \
12806 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_RECEIVED, 0x05C8, "Publish Week Profile Received" ) \
12807 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_ACTIONED, 0x05C9, "Publish Week Profile Actioned" ) \
12808 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_CANCELLED, 0x05CA, "Publish Week Profile Cancelled" ) \
12809 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_WEEK_PROFILE_REJECTED, 0x05CB, "Publish Week Profile Rejected" ) \
12810 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_RECEIVED, 0x05CC, "Publish Seasons Received" ) \
12811 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_ACTIONED, 0x05CD, "Publish Seasons Actioned" ) \
12812 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_CANCELLED, 0x05CE, "Publish Seasons Cancelled" ) \
12813 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SEASONS_REJECTED, 0x05CF, "Publish Seasons Rejected" ) \
12814 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_RECEIVED, 0x05D0, "Publish Special Days Received" ) \
12815 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_ACTIONED, 0x05D1, "Publish Special Days Actioned" ) \
12816 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_CANCELLED, 0x05D2, "Publish Special Days Cancelled" ) \
12817 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_SPECIAL_DAYS_REJECTED, 0x05D3, "Publish Special Days Rejected" ) \
12818 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_CALENDAR_CLUSTER_GROUP_ID, 0x05FF, "Reserved For Calendar Cluster Group ID" ) \
12819 /* Device Management Event Configuration Attribute Set */ \
12820 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_1_CHANGE, 0x0600, "Password 1 Change" ) \
12821 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_2_CHANGE, 0x0601, "Password 2 Change" ) \
12822 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_3_CHANGE, 0x0602, "Password 3 Change" ) \
12823 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PASSWORD_4_CHANGE, 0x0603, "Password 4 Change" ) \
12824 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_EVENT_LOG_CLEARED, 0x0604, "Event Log Cleared" ) \
12825 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_APS_TIMEOUT, 0x0610, "ZigBee APS Timeout" ) \
12826 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_IEEE_TRANS_FAILURE_OVER_THRES, 0x0611, "ZigBee IEEE Transmission Failure Over Threshold" ) \
12827 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ZIGBEE_IEEE_FRAME_CHECK_SEQ_THRES, 0x0612, "ZigBee IEEE Frame Check Sequence Threshold" ) \
12828 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_CERTIFICATE, 0x0613, "Error Certificate" ) \
12829 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_SIGNATURE, 0x0614, "Error Signature" ) \
12830 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ERROR_PROGRAM_STORAGE, 0x0615, "Error Program Storage" ) \
12831 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_RECEIVED, 0x06C0, "Publish CoT Received" ) \
12832 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_ACTIONED, 0x06C1, "Publish CoT Actioned" ) \
12833 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_CANCELLED, 0x06C2, "Publish CoT Cancelled" ) \
12834 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COT_REJECTED, 0x06C3, "Publish CoT Rejected" ) \
12835 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_RECEIVED, 0x06C4, "Publish CoS Received" ) \
12836 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_ACTIONED, 0x06C5, "Publish CoS Actioned" ) \
12837 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_CANCELLED, 0x06C6, "Publish CoS Cancelled" ) \
12838 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PUBLISH_COS_REJECTED, 0x06C7, "Publish CoS Rejected" ) \
12839 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_RECEIVED, 0x06C8, "Change Password Received" ) \
12840 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_ACTIONED, 0x06C9, "Change Password Actioned" ) \
12841 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_CANCELLED, 0x06CA, "Change Password Cancelled" ) \
12842 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CHANGE_PASSWORD_REJECTED, 0x06CB, "Change Password Rejected" ) \
12843 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_RECEIVED, 0x06CC, "Set Event Configuration Received" ) \
12844 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_ACTIONED, 0x06CD, "Set Event Configuration Actioned" ) \
12845 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_CANCELLED, 0x06CE, "Set Event Configuration Cancelled" ) \
12846 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_SET_EVENT_CONFIGURATION_REJECTED, 0x06CF, "Set Event Configuration Rejected" ) \
12847 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_RECEIVED, 0x06D0, "Update Site ID Received" ) \
12848 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_ACTIONED, 0x06D1, "Update Site ID Actioned" ) \
12849 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_CANCELLED, 0x06D2, "Update Site ID Cancelled" ) \
12850 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_SITE_ID_REJECTED, 0x06D3, "Update Site ID Rejected" ) \
12851 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_RECEIVED, 0x06D4, "Update CIN Received" ) \
12852 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_ACTIONED, 0x06D5, "Update CIN Actioned" ) \
12853 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_CANCELLED, 0x06D6, "Update CIN Cancelled" ) \
12854 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPDATE_CIN_REJECTED, 0x06D7, "Update CIN Rejected" ) \
12855 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_DM_CLUSTER_ID, 0x06FF, "Reserved for Device Management Cluster Group ID" ) \
12856 /* Tunnel Event Configuration Attribute Set */ \
12857 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TUNNELING_CLUSTER_NOT_FOUND, 0x0700, "Tunneling Cluster Not Found" ) \
12858 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UNSUPPORTED_PROTOCOL, 0x0701, "Unsupported Protocol" ) \
12859 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_INCORRECT_PROTOCOL, 0x0702, "Incorrect Protocol" ) \
12860 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_RECEIVED, 0x07C0, "Request Tunnel Command Received" ) \
12861 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_REJECTED, 0x07C1, "Request Tunnel Command Rejected" ) \
12862 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_REQUEST_TUNNEL_COMMAND_GENERATED, 0x07C2, "Request Tunnel Command Generated" ) \
12863 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_RECEIVED, 0x07C3, "Close Tunnel Command Received" ) \
12864 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_REJECTED, 0x07C4, "Close Tunnel Command Rejected" ) \
12865 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_CLOSE_TUNNEL_COMMAND_GENERATED, 0x07C5, "Close Tunnel Command Generated" ) \
12866 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_RECEIVED, 0x07C6, "Transfer Data Command Received" ) \
12867 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_REJECTED, 0x07C7, "Transfer Data Command Rejected" ) \
12868 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_COMMAND_GENERATED, 0x07C8, "Transfer Data Command Generated" ) \
12869 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_RECEIVED, 0x07C9, "Transfer Data Error Command Received" ) \
12870 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_REJECTED, 0x07CA, "Transfer Data Error Command Rejected" ) \
12871 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_TRANSFER_DATA_ERROR_COMMAND_GENERATED, 0x07CB, "Transfer Data Error Command Generated" ) \
12872 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_RECEIVED, 0x07CC, "Ack Transfer Data Command Received" ) \
12873 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_REJECTED, 0x07CD, "Ack Transfer Data Command Rejected" ) \
12874 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_ACK_TRANSFER_DATA_COMMAND_GENERATED, 0x07CE, "Ack Transfer Data Command Generated" ) \
12875 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_RECEIVED, 0x07CF, "Ready Data Command Received" ) \
12876 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_REJECTED, 0x07D0, "Ready Data Command Rejected" ) \
12877 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_READY_DATA_COMMAND_GENERATED, 0x07D1, "Ready Data Command Generated" ) \
12878 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_RECV, 0x07D2, "Get Supported Tunnel Protocols Command Received" ) \
12879 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_REJECT, 0x07D3, "Get Supported Tunnel Protocols Command Rejected" ) \
12880 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_GET_SUPPORTED_TUNNEL_PROT_CMD_GENERATED,0x07D4, "Get Supported Tunnel Protocols Command Generated" ) \
12881 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_TUNNEL_CLUSTER_GROUP_ID, 0x07FF, "Reserved for Tunnel Cluster Group ID" ) \
12882 /* OTA Event Configuration Attribute Set */ \
12883 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_READY_FOR_ACTIVATION, 0x0800, "Firmware Ready for Activation" ) \
12884 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_ACTIVATED, 0x0801, "Firmware Activated" ) \
12885 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_FIRMWARE_ACTIVATION_FAILURE, 0x0802, "Firmware Activation Failure" ) \
12886 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_READY_FOR_ACTIVATION, 0x0803, "Patch Ready for Activation" ) \
12887 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_ACTIVATED, 0x0804, "Patch Activated" ) \
12888 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_PATCH_FAILURE, 0x0805, "Patch Failure" ) \
12889 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_NOTIFY_COMMAND_RECEIVED, 0x08C0, "Image Notify Command Received" ) \
12890 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_NOTIFY_COMMAND_REJECTED, 0x08C1, "Image Notify Command Rejected" ) \
12891 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_REQUEST_GENERATED, 0x08C2, "Query Next Image Request Generated" ) \
12892 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_RESPONSE_RECEIVED, 0x08C3, "Query Next Image Response Received" ) \
12893 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_NEXT_IMAGE_RESPONSE_REJECTED, 0x08C4, "Query Next Image Response Rejected" ) \
12894 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_REQUEST_GENERATED, 0x08C5, "Image Block Request Generated" ) \
12895 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_PAGE_REQUEST_GENERATED, 0x08C6, "Image Page Request Generated" ) \
12896 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_RESPONSE_RECEIVED, 0x08C7, "Image Block Response Received" ) \
12897 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_IMAGE_BLOCK_RESPONSE_REJECTED, 0x08C8, "Image Block Response Rejected" ) \
12898 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_REQUEST_GENERATED, 0x08C9, "Upgrade End Request Generated" ) \
12899 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_RESPONSE_RECEIVED, 0x08CA, "Upgrade End Response Received" ) \
12900 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_UPGRADE_END_RESPONSE_REJECTED, 0x08CB, "Upgrade End Response Rejected" ) \
12901 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_REQUEST_GENERATED, 0x08CC, "Query Specific File Request Generated" ) \
12902 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_RESPONSE_RECEIVED, 0x08CD, "Query Specific File Response Received" ) \
12903 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_QUERY_SPECIFIC_FILE_RESPONSE_REJECTED, 0x08CE, "Query Specific File Response Rejected" ) \
12904 XXX(ZBEE_ZCL_ATTR_ID_DEVICE_MANAGEMENT_CLNT_RESERVED_FOR_OTA_CLUSTER_GROUP_ID, 0x08FF, "Reserved For OTA Cluster Group ID" ) \
12905 /* Smart Energy */ \
12906 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT_CLNT, 0xFFFE, "Attribute Reporting Status" )
12908 VALUE_STRING_ENUM(zbee_zcl_device_management_attr_client_names);
12909 VALUE_STRING_ARRAY(zbee_zcl_device_management_attr_client_names);
12910 static value_string_ext zbee_zcl_device_management_attr_client_names_ext = VALUE_STRING_EXT_INIT(zbee_zcl_device_management_attr_client_names);
12912 /* Server Commands Received */
12913 #define zbee_zcl_device_management_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
12914 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_TENANCY, 0x00, "Get Change Of Tenancy" ) \
12915 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_SUPPLIER, 0x01, "Get Change Of Supplier" ) \
12916 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD, 0x02, "Request New Password" ) \
12917 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_SITE_ID, 0x03, "Get Site ID" ) \
12918 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REPORT_EVENT_CONFIGURATION, 0x04, "Report Event Configuration" ) \
12919 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CIN, 0x05, "Get CIN" )
12921 VALUE_STRING_ENUM(zbee_zcl_device_management_srv_rx_cmd_names);
12922 VALUE_STRING_ARRAY(zbee_zcl_device_management_srv_rx_cmd_names);
12924 /* Server Commands Generated */
12925 #define zbee_zcl_device_management_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
12926 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_TENANCY, 0x00, "Publish Change Of Tenancy" ) \
12927 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_SUPPLIER, 0x01, "Publish Change Of Supplier" ) \
12928 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD_RESPONSE, 0x02, "Request New Password Response" ) \
12929 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_SITE_ID, 0x03, "Update Site ID" ) \
12930 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_SET_EVENT_CONFIGURATION, 0x04, "Set Event Configuration" ) \
12931 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_EVENT_CONFIGURATION, 0x05, "Get Event Configuration" ) \
12932 XXX(ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_CIN, 0x06, "Update CIN" )
12934 VALUE_STRING_ENUM(zbee_zcl_device_management_srv_tx_cmd_names);
12935 VALUE_STRING_ARRAY(zbee_zcl_device_management_srv_tx_cmd_names);
12937 #define zbee_zcl_device_management_password_types_VALUE_STRING_LIST(XXX) \
12938 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_RESERVED, 0x00, "Reserved") \
12939 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_1, 0x01, "Password 1") \
12940 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_2, 0x02, "Password 2") \
12941 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_3, 0x03, "Password 3") \
12942 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_PASSWORD_TYPE_PASSWORD_4, 0x04, "Password 4")
12944 VALUE_STRING_ENUM(zbee_zcl_device_management_password_types);
12945 VALUE_STRING_ARRAY(zbee_zcl_device_management_password_types);
12947 #define zbee_zcl_device_management_event_configuration_log_types_VALUE_STRING_LIST(XXX) \
12948 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_DO_NOT_LOG, 0x0, "Do not Log") \
12949 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_TAMPER, 0x1, "Log as Tamper") \
12950 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_FAULT, 0x2, "Log as Fault") \
12951 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_GENERAL_EVENT, 0x3, "Log as General Event") \
12952 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_SECURITY_EVENT, 0x4, "Log as Security Event") \
12953 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_EVENT_CONFIGURATION_LOG_AS_NETWORK_EVENT, 0x5, "Log as Network Event")
12955 VALUE_STRING_ENUM(zbee_zcl_device_management_event_configuration_log_types);
12956 VALUE_STRING_ARRAY(zbee_zcl_device_management_event_configuration_log_types);
12958 #define zbee_zcl_device_management_contactor_states_VALUE_STRING_LIST(XXX) \
12959 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_OFF, 0x0, "Supply OFF") \
12960 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_OFF_ARMED, 0x1, "Supply OFF / ARMED") \
12961 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_ON, 0x2, "Supply ON") \
12962 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_SUPPLY_UNCHANGED, 0x3, "Supply UNCHANGED")
12964 VALUE_STRING_ENUM(zbee_zcl_device_management_contactor_states);
12965 VALUE_STRING_ARRAY(zbee_zcl_device_management_contactor_states);
12967 #define zbee_zcl_device_management_configuration_controls_VALUE_STRING_LIST(XXX) \
12968 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LIST, 0x00, "Apply by List") \
12969 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP, 0x01, "Apply by Event Group") \
12970 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE, 0x02, "Apply by Log Type") \
12971 XXX(ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH, 0x03, "Apply by Configuration Match")
12973 VALUE_STRING_ENUM(zbee_zcl_device_management_configuration_controls);
12974 VALUE_STRING_ARRAY(zbee_zcl_device_management_configuration_controls);
12976 /*************************/
12977 /* Function Declarations */
12978 /*************************/
12979 void proto_register_zbee_zcl_device_management(void);
12980 void proto_reg_handoff_zbee_zcl_device_management(void);
12982 /* Attribute Dissector Helpers */
12983 static void dissect_zcl_device_management_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
12985 /*************************/
12986 /* Global Variables */
12987 /*************************/
12989 /* Initialize the protocol and registered fields */
12990 static int proto_zbee_zcl_device_management;
12992 static int hf_zbee_zcl_device_management_srv_tx_cmd_id;
12993 static int hf_zbee_zcl_device_management_srv_rx_cmd_id;
12994 static int hf_zbee_zcl_device_management_attr_server_id;
12995 static int hf_zbee_zcl_device_management_attr_client_id;
12996 static int hf_zbee_zcl_device_management_attr_reporting_status;
12997 static int hf_zbee_zcl_device_management_password_type;
12998 static int hf_zbee_zcl_device_management_command_index;
12999 static int hf_zbee_zcl_device_management_total_commands;
13000 static int hf_zbee_zcl_device_management_event_id;
13001 static int hf_zbee_zcl_device_management_event_configuration;
13002 static int hf_zbee_zcl_device_management_event_configuration_logging;
13003 static int hf_zbee_zcl_device_management_event_configuration_push_event_to_wan;
13004 static int hf_zbee_zcl_device_management_event_configuration_push_event_to_han;
13005 static int hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee;
13006 static int hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical;
13007 static int hf_zbee_zcl_device_management_event_configuration_reserved;
13008 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id;
13009 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id;
13010 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type;
13011 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_implementation_date;
13012 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control;
13013 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot;
13014 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot;
13015 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register;
13016 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register;
13017 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period;
13018 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan;
13019 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge;
13020 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information;
13021 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information;
13022 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer;
13023 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier;
13024 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state;
13025 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log;
13026 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data;
13027 static int hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved;
13029 static int hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id;
13030 static int hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id;
13031 static int hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type;
13032 static int hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id;
13033 static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_implementation_time;
13034 static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control;
13035 static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_name;
13036 static int hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_contact_details;
13038 static int hf_zbee_zcl_device_management_request_new_password_issuer_event_id;
13039 static int hf_zbee_zcl_device_management_request_new_password_implementation_date;
13040 static int hf_zbee_zcl_device_management_request_new_password_password;
13041 static int hf_zbee_zcl_device_management_request_new_password_duration_in_minutes;
13043 static int hf_zbee_zcl_device_management_update_site_id_issuer_event_id;
13044 static int hf_zbee_zcl_device_management_update_site_id_site_id_time;
13045 static int hf_zbee_zcl_device_management_update_site_id_provider_id;
13046 static int hf_zbee_zcl_device_management_update_site_id_site_id;
13048 static int hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id;
13049 static int hf_zbee_zcl_device_management_set_event_configuration_start_time;
13050 static int hf_zbee_zcl_device_management_set_event_configuration_configuration_control;
13051 static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events;
13052 static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id;
13053 static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id;
13054 static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id;
13055 static int hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_configuration_value_match;
13057 static int hf_zbee_zcl_device_management_get_event_configuration_event_id;
13059 static int hf_zbee_zcl_device_management_update_cin_issuer_event_id;
13060 static int hf_zbee_zcl_device_management_update_cin_cin_implementation_time;
13061 static int hf_zbee_zcl_device_management_update_cin_provider_id;
13062 static int hf_zbee_zcl_device_management_update_cin_customerid_number;
13064 static int* const hf_zbee_zcl_device_management_event_configuration_flags[] = {
13065 &hf_zbee_zcl_device_management_event_configuration_logging,
13066 &hf_zbee_zcl_device_management_event_configuration_push_event_to_wan,
13067 &hf_zbee_zcl_device_management_event_configuration_push_event_to_han,
13068 &hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee,
13069 &hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical,
13070 &hf_zbee_zcl_device_management_event_configuration_reserved,
13071 NULL
13074 static int* const hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_flags[] = {
13075 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot,
13076 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot,
13077 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register,
13078 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register,
13079 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period,
13080 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan,
13081 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge,
13082 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information,
13083 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information,
13084 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer,
13085 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier,
13086 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state,
13087 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log,
13088 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data,
13089 &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved,
13090 NULL
13093 /* Initialize the subtree pointers */
13094 static int ett_zbee_zcl_device_management;
13095 static int ett_zbee_zcl_device_management_event_configuration_payload;
13096 static int ett_zbee_zcl_device_management_event_configuration;
13097 static int ett_zbee_zcl_device_management_proposed_tenancy_change_control;
13099 /*************************/
13100 /* Function Bodies */
13101 /*************************/
13104 *This function is called by ZCL foundation dissector in order to decode
13106 *@param tree pointer to data tree Wireshark uses to display packet.
13107 *@param tvb pointer to buffer containing raw packet.
13108 *@param offset pointer to buffer offset
13109 *@param attr_id attribute identifier
13110 *@param data_type attribute data type
13111 *@param client_attr ZCL client
13113 static void
13114 dissect_zcl_device_management_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
13116 switch (attr_id) {
13117 /* applies to all SE clusters */
13118 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_DEVICE_MANAGEMENT:
13119 proto_tree_add_item(tree, hf_zbee_zcl_device_management_attr_reporting_status, tvb, *offset, 1, ENC_NA);
13120 *offset += 1;
13121 break;
13123 default: /* Catch all */
13124 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
13125 break;
13127 } /*dissect_zcl_device_management_attr_data*/
13130 *This function is called by ZCL foundation dissector in order to decode
13132 *@param tree pointer to data tree Wireshark uses to display packet.
13133 *@param tvb pointer to buffer containing raw packet.
13134 *@param offset pointer to buffer offset
13136 static void
13137 dissect_zcl_device_management_request_new_password(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13139 /* Password Type */
13140 proto_tree_add_item(tree, hf_zbee_zcl_device_management_password_type, tvb, *offset, 1, ENC_NA);
13141 *offset += 1;
13145 *This function is called by ZCL foundation dissector in order to decode
13147 *@param tree pointer to data tree Wireshark uses to display packet.
13148 *@param tvb pointer to buffer containing raw packet.
13149 *@param offset pointer to buffer offset
13151 static void
13152 dissect_zcl_device_management_report_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13154 proto_tree *event_configuration_payload;
13155 unsigned rem_len;
13157 /* Command Index */
13158 proto_tree_add_item(tree, hf_zbee_zcl_device_management_command_index, tvb, *offset, 1, ENC_NA);
13159 *offset += 1;
13161 /* Total Commands */
13162 proto_tree_add_item(tree, hf_zbee_zcl_device_management_total_commands, tvb, *offset, 1, ENC_NA);
13163 *offset += 1;
13165 rem_len = tvb_reported_length_remaining(tvb, *offset);
13166 /* Event Configuration Payload */
13167 event_configuration_payload = proto_tree_add_subtree(tree, tvb, *offset, rem_len, ett_zbee_zcl_device_management_event_configuration_payload, NULL, "Event Configuration Payload");
13169 while(tvb_reported_length_remaining(tvb, *offset) > 2) {
13170 /* Event ID */
13171 proto_tree_add_item(event_configuration_payload, hf_zbee_zcl_device_management_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13172 *offset += 2;
13174 /* Event Configuration */
13175 proto_tree_add_bitmask(event_configuration_payload, tvb, *offset, hf_zbee_zcl_device_management_event_configuration,
13176 ett_zbee_zcl_device_management_event_configuration, hf_zbee_zcl_device_management_event_configuration_flags, ENC_NA);
13177 *offset += 1;
13182 *This function is called by ZCL foundation dissector in order to decode
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
13188 static void
13189 dissect_zcl_device_management_publish_change_of_tenancy(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13191 /* Provider ID */
13192 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13193 *offset += 4;
13195 /* Issuer Event ID */
13196 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13197 *offset += 4;
13199 /* Tariff Type */
13200 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type, tvb, *offset, 1, ENC_NA);
13201 *offset += 1;
13203 /* Implementation Date/Time */
13204 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);
13205 *offset += 4;
13207 /* Proposed Tenancy Change Control */
13208 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control,
13209 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);
13210 *offset += 4;
13212 } /*dissect_zcl_device_management_publish_change_of_tenancy*/
13215 *This function is called by ZCL foundation dissector in order to decode
13217 *@param tree pointer to data tree Wireshark uses to display packet.
13218 *@param tvb pointer to buffer containing raw packet.
13219 *@param offset pointer to buffer offset
13221 static void
13222 dissect_zcl_device_management_publish_change_of_supplier(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13224 int name_length;
13225 int detail_length;
13227 /* Current Provider ID */
13228 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13229 *offset += 4;
13231 /* Issuer Event ID */
13232 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13233 *offset += 4;
13235 /* Tariff Type */
13236 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type, tvb, *offset, 1, ENC_NA);
13237 *offset += 1;
13239 /* Proposed Provider ID */
13240 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13241 *offset += 4;
13243 /* Provider Change Implementation Time */
13244 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);
13245 *offset += 4;
13247 /* Provider Change Control */
13248 proto_tree_add_item(tree, hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13249 *offset += 4;
13251 /* Proposed Provider Name */
13252 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);
13253 *offset += name_length;
13255 /* Proposed Provider Contact Details */
13256 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);
13257 *offset += detail_length;
13259 } /*dissect_zcl_device_management_publish_change_of_supplier*/
13262 *This function is called by ZCL foundation dissector in order to decode
13264 *@param tree pointer to data tree Wireshark uses to display packet.
13265 *@param tvb pointer to buffer containing raw packet.
13266 *@param offset pointer to buffer offset
13268 static void
13269 dissect_zcl_device_management_request_new_password_response(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13271 int password_length;
13273 /* Issuer Event ID */
13274 proto_tree_add_item(tree, hf_zbee_zcl_device_management_request_new_password_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13275 *offset += 4;
13277 /* Implementation Date/Time */
13278 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);
13279 *offset += 4;
13281 /* Duration in minutes */
13282 proto_tree_add_item(tree, hf_zbee_zcl_device_management_request_new_password_duration_in_minutes, tvb, *offset, 2, ENC_NA);
13283 *offset += 2;
13285 /* Password Type */
13286 proto_tree_add_item(tree, hf_zbee_zcl_device_management_password_type, tvb, *offset, 1, ENC_NA);
13287 *offset += 1;
13289 /* Password */
13290 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);
13291 *offset += password_length;
13293 } /*dissect_zcl_device_management_request_new_password_response*/
13296 *This function is called by ZCL foundation dissector in order to decode
13298 *@param tree pointer to data tree Wireshark uses to display packet.
13299 *@param tvb pointer to buffer containing raw packet.
13300 *@param offset pointer to buffer offset
13302 static void
13303 dissect_zcl_device_management_update_site_id(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13305 int siteid_length;
13307 /* Issuer Event ID */
13308 proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_site_id_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13309 *offset += 4;
13311 /* SiteID Time */
13312 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);
13313 *offset += 4;
13315 /* Provider ID */
13316 proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_site_id_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13317 *offset += 4;
13319 /* SiteID */
13320 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);
13321 *offset += siteid_length;
13323 } /*dissect_zcl_device_management_update_site_id*/
13326 *This function is called by ZCL foundation dissector in order to decode
13328 *@param tree pointer to data tree Wireshark uses to display packet.
13329 *@param tvb pointer to buffer containing raw packet.
13330 *@param offset pointer to buffer offset
13332 static void
13333 dissect_zcl_device_management_set_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13335 uint8_t config_control;
13336 uint8_t number_of_events;
13338 /* Issuer Event ID */
13339 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13340 *offset += 4;
13342 /* Start Date/Time */
13343 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);
13344 *offset += 4;
13346 /* Event Configuration */
13347 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_device_management_event_configuration,
13348 ett_zbee_zcl_device_management_event_configuration, hf_zbee_zcl_device_management_event_configuration_flags, ENC_NA);
13349 *offset += 1;
13351 /* Configuration Control */
13352 config_control = tvb_get_uint8(tvb, *offset);
13353 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_configuration_control, tvb, *offset, 1, ENC_NA);
13354 *offset += 1;
13356 /* Event Configuration Payload */
13357 switch (config_control) {
13358 case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LIST:
13359 number_of_events = tvb_get_uint8(tvb, *offset);
13360 /* Number of Events */
13361 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events, tvb, *offset, 1, ENC_NA);
13362 *offset += 1;
13364 /* Event IDs */
13365 for (unsigned i = 0; tvb_reported_length_remaining(tvb, *offset) > 0 && i < number_of_events; i++) {
13366 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13367 *offset += 2;
13369 break;
13370 case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_EVENT_GROUP:
13371 /* Event Group ID */
13372 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13373 *offset += 2;
13374 break;
13375 case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_LOG_TYPE:
13376 /* Log ID */
13377 proto_tree_add_item(tree, hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
13378 *offset += 1;
13379 break;
13380 case ZBEE_ZCL_DEVICE_MANAGEMENT_CONFIGURATION_CONTROL_APPLY_BY_CONFIGURATION_MATCH:
13381 /* Configuration Value Match */
13382 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);
13383 *offset += 1;
13384 break;
13386 } /*dissect_zcl_device_management_set_event_configuration*/
13389 *This function is called by ZCL foundation dissector in order to decode
13391 *@param tree pointer to data tree Wireshark uses to display packet.
13392 *@param tvb pointer to buffer containing raw packet.
13393 *@param offset pointer to buffer offset
13395 static void
13396 dissect_zcl_device_management_get_event_configuration(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13398 /* Event ID */
13399 proto_tree_add_item(tree, hf_zbee_zcl_device_management_get_event_configuration_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
13400 *offset += 2;
13401 } /*dissect_zcl_device_management_get_event_configuration*/
13404 *This function is called by ZCL foundation dissector in order to decode
13406 *@param tree pointer to data tree Wireshark uses to display packet.
13407 *@param tvb pointer to buffer containing raw packet.
13408 *@param offset pointer to buffer offset
13410 static void
13411 dissect_zcl_device_management_update_cin(proto_tree *tree, tvbuff_t *tvb, unsigned *offset)
13413 int customer_id_length;
13415 /* Issuer Event ID */
13416 proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_cin_issuer_event_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13417 *offset += 4;
13419 /* CIN Implementation Time */
13420 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);
13421 *offset += 4;
13423 /* Provider ID */
13424 proto_tree_add_item(tree, hf_zbee_zcl_device_management_update_cin_provider_id, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
13425 *offset += 4;
13427 /* CustomerID Number */
13428 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);
13429 *offset += customer_id_length;
13430 } /*dissect_zcl_device_management_update_cin*/
13433 *ZigBee ZCL Device Management cluster dissector for wireshark.
13435 *@param tvb pointer to buffer containing raw packet.
13436 *@param pinfo pointer to packet information fields
13437 *@param tree pointer to data tree Wireshark uses to display packet.
13439 static int
13440 dissect_zbee_zcl_device_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13442 zbee_zcl_packet *zcl;
13443 proto_tree *payload_tree;
13444 unsigned offset = 0;
13445 uint8_t cmd_id;
13446 int rem_len;
13448 /* Reject the packet if data is NULL */
13449 if (data == NULL)
13450 return 0;
13451 zcl = (zbee_zcl_packet *)data;
13452 cmd_id = zcl->cmd_id;
13454 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
13455 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
13456 /* Append the command name to the info column. */
13457 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13458 val_to_str_const(cmd_id, zbee_zcl_device_management_srv_rx_cmd_names, "Unknown Command"),
13459 zcl->tran_seqno);
13461 /* Add the command ID. */
13462 proto_tree_add_uint(tree, hf_zbee_zcl_device_management_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
13464 /* Check is this command has a payload, than add the payload tree */
13465 rem_len = tvb_reported_length_remaining(tvb, ++offset);
13466 if (rem_len > 0) {
13467 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_device_management, NULL, "Payload");
13468 /* Call the appropriate command dissector */
13469 switch (cmd_id) {
13470 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_TENANCY:
13471 /* No Payload */
13472 break;
13473 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CHANGE_OF_SUPPLIER:
13474 /* No Payload */
13475 break;
13476 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD:
13477 dissect_zcl_device_management_request_new_password(payload_tree, tvb, &offset);
13478 break;
13480 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_SITE_ID:
13481 /* No Payload */
13482 break;
13484 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REPORT_EVENT_CONFIGURATION:
13485 dissect_zcl_device_management_report_event_configuration(payload_tree, tvb, &offset);
13486 break;
13488 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_CIN:
13489 /* No Payload */
13490 break;
13492 default:
13493 break;
13497 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
13498 /* Append the command name to the info column. */
13499 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13500 val_to_str_const(cmd_id, zbee_zcl_device_management_srv_tx_cmd_names, "Unknown Command"),
13501 zcl->tran_seqno);
13503 /* Add the command ID. */
13504 proto_tree_add_uint(tree, hf_zbee_zcl_device_management_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
13506 /* Check is this command has a payload, than add the payload tree */
13507 rem_len = tvb_reported_length_remaining(tvb, ++offset);
13508 if (rem_len > 0) {
13509 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_device_management, NULL, "Payload");
13511 /* Call the appropriate command dissector */
13512 switch (cmd_id) {
13514 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_TENANCY:
13515 dissect_zcl_device_management_publish_change_of_tenancy(payload_tree, tvb, &offset);
13516 break;
13517 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_PUBLISH_CHANGE_OF_SUPPLIER:
13518 dissect_zcl_device_management_publish_change_of_supplier(payload_tree, tvb, &offset);
13519 break;
13521 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_REQUEST_NEW_PASSWORD_RESPONSE:
13522 dissect_zcl_device_management_request_new_password_response(payload_tree, tvb, &offset);
13523 break;
13525 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_SITE_ID:
13526 dissect_zcl_device_management_update_site_id(payload_tree, tvb, &offset);
13527 break;
13529 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_SET_EVENT_CONFIGURATION:
13530 dissect_zcl_device_management_set_event_configuration(payload_tree, tvb, &offset);
13531 break;
13533 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_GET_EVENT_CONFIGURATION:
13534 dissect_zcl_device_management_get_event_configuration(payload_tree, tvb, &offset);
13535 break;
13537 case ZBEE_ZCL_CMD_ID_DEVICE_MANAGEMENT_UPDATE_CIN:
13538 dissect_zcl_device_management_update_cin(payload_tree, tvb, &offset);
13539 break;
13541 default:
13542 break;
13547 return tvb_captured_length(tvb);
13548 } /*dissect_zbee_zcl_device_management*/
13551 *This function registers the ZCL Device Management dissector
13554 void
13555 proto_register_zbee_zcl_device_management(void)
13557 static hf_register_info hf[] = {
13559 { &hf_zbee_zcl_device_management_attr_server_id,
13560 { "Attribute", "zbee_zcl_se.device_management.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_device_management_attr_server_names),
13561 0x0, NULL, HFILL } },
13563 { &hf_zbee_zcl_device_management_attr_client_id,
13564 { "Attribute", "zbee_zcl_se.device_management.attr_client_id", FT_UINT16, BASE_HEX | BASE_EXT_STRING, &zbee_zcl_device_management_attr_client_names_ext,
13565 0x0, NULL, HFILL } },
13567 { &hf_zbee_zcl_device_management_attr_reporting_status, /* common to all SE clusters */
13568 { "Attribute Reporting Status", "zbee_zcl_se.device_management.attr.attr_reporting_status",
13569 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
13571 { &hf_zbee_zcl_device_management_srv_tx_cmd_id,
13572 { "Command", "zbee_zcl_se.device_management.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_srv_tx_cmd_names),
13573 0x00, NULL, HFILL } },
13575 { &hf_zbee_zcl_device_management_srv_rx_cmd_id,
13576 { "Command", "zbee_zcl_se.device_management.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_srv_rx_cmd_names),
13577 0x00, NULL, HFILL } },
13579 { &hf_zbee_zcl_device_management_password_type,
13580 { "Password Type", "zbee_zcl_se.device_management.password_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_password_types),
13581 0x00, NULL, HFILL } },
13583 { &hf_zbee_zcl_device_management_command_index,
13584 { "Command Index", "zbee_zcl_se.device_management.command_index", FT_UINT8, BASE_HEX, NULL,
13585 0x00, NULL, HFILL } },
13587 { &hf_zbee_zcl_device_management_total_commands,
13588 { "Total Commands", "zbee_zcl_se.device_management.total_commands", FT_UINT8, BASE_HEX, NULL,
13589 0x00, NULL, HFILL } },
13591 { &hf_zbee_zcl_device_management_event_id,
13592 { "Event ID", "zbee_zcl_se.device_management.event_id", FT_UINT16, BASE_HEX, NULL,
13593 0x00, NULL, HFILL } },
13595 { &hf_zbee_zcl_device_management_event_configuration,
13596 { "Event Configuration", "zbee_zcl_se.device_management.event_configuration", FT_UINT8, BASE_HEX, NULL,
13597 0x00, NULL, HFILL } },
13599 { &hf_zbee_zcl_device_management_event_configuration_logging,
13600 { "Logging", "zbee_zcl_se.device_management.event_configuration.logging", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_event_configuration_log_types),
13601 0x07, NULL, HFILL } },
13603 { &hf_zbee_zcl_device_management_event_configuration_push_event_to_wan,
13604 { "Push Event to WAN", "zbee_zcl_se.device_management.event_configuration.push_event_to_wan", FT_BOOLEAN, 8, NULL,
13605 0x08, NULL, HFILL } },
13607 { &hf_zbee_zcl_device_management_event_configuration_push_event_to_han,
13608 { "Push Event to HAN", "zbee_zcl_se.device_management.event_configuration.push_event_to_han", FT_BOOLEAN, 8, NULL,
13609 0x10, NULL, HFILL } },
13611 { &hf_zbee_zcl_device_management_event_configuration_raise_alarm_zigbee,
13612 { "Raise Alarm (Zigbee)", "zbee_zcl_se.device_management.event_configuration.raise_alarm_zigbee", FT_BOOLEAN, 8, NULL,
13613 0x20, NULL, HFILL } },
13615 { &hf_zbee_zcl_device_management_event_configuration_raise_alarm_physical,
13616 { "Raise Alarm (Physical)", "zbee_zcl_se.device_management.event_configuration.raise_alarm_physical", FT_BOOLEAN, 8, NULL,
13617 0x40, NULL, HFILL } },
13619 { &hf_zbee_zcl_device_management_event_configuration_reserved,
13620 { "Reserved", "zbee_zcl_se.device_management.event_configuration.reserved", FT_UINT8, BASE_HEX, NULL,
13621 0x80, NULL, HFILL } },
13623 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_provider_id,
13624 { "Provider ID", "zbee_zcl_se.device_management.publish_change_of_tenancy.provider_id", FT_UINT32, BASE_HEX, NULL,
13625 0x0, NULL, HFILL } },
13627 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_issuer_event_id,
13628 { "Issuer Event ID", "zbee_zcl_se.device_management.publish_change_of_tenancy.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13629 0x0, NULL, HFILL } },
13631 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_tariff_type,
13632 { "Tariff Type", "zbee_zcl_se.device_management.publish_change_of_tenancy.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
13633 0x0, NULL, HFILL } },
13635 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_implementation_date,
13636 { "Implementation Date/Time", "zbee_zcl_se.device_management.publish_change_of_tenancy.implementation_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13637 0x0, NULL, HFILL } },
13639 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control,
13640 { "Proposed Tenancy Change Control", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control", FT_UINT32, BASE_HEX, NULL,
13641 0x0, NULL, HFILL } },
13643 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_pre_snapshot,
13644 { "Pre Snapshots", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.pre_snapshot", FT_BOOLEAN, 32, NULL,
13645 0x00000001, NULL, HFILL } },
13647 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_post_snapshot,
13648 { "Post Snapshots", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.post_snapshot", FT_BOOLEAN, 32, NULL,
13649 0x00000002, NULL, HFILL } },
13651 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_credit_register,
13652 { "Reset Credit Register", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_credit_register", FT_BOOLEAN, 32, NULL,
13653 0x00000004, NULL, HFILL } },
13655 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_debit_register,
13656 { "Reset Debit Register", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_debit_register", FT_BOOLEAN, 32, NULL,
13657 0x00000008, NULL, HFILL } },
13659 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reset_billing_period,
13660 { "Reset Billing Period", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reset_billing_period", FT_BOOLEAN, 32, NULL,
13661 0x00000010, NULL, HFILL } },
13663 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_tariff_plan,
13664 { "Clear Tariff Plan", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_tariff_plan", FT_BOOLEAN, 32, NULL,
13665 0x00000020, NULL, HFILL } },
13667 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_standing_charge,
13668 { "Clear Standing Charge", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_standing_charge", FT_BOOLEAN, 32, NULL,
13669 0x00000040, NULL, HFILL } },
13671 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_block_historical_load_profile_information,
13672 { "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,
13673 0x00000080, NULL, HFILL } },
13675 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_historical_load_profile_information,
13676 { "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,
13677 0x00000100, NULL, HFILL } },
13679 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_consumer,
13680 { "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,
13681 0x00000200, NULL, HFILL } },
13683 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_ihd_data_supplier,
13684 { "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,
13685 0x00000400, NULL, HFILL } },
13687 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_meter_contactor_state,
13688 { "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),
13689 0x00001800, NULL, HFILL } },
13691 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_transaction_log,
13692 { "Clear Transaction Log", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_transaction_log", FT_BOOLEAN, 32, NULL,
13693 0x00002000, NULL, HFILL } },
13695 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_clear_prepayment_data,
13696 { "Clear Prepayment Data", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.clear_prepayment_data", FT_BOOLEAN, 32, NULL,
13697 0x00004000, NULL, HFILL } },
13699 { &hf_zbee_zcl_device_management_publish_change_of_tenancy_proposed_tenancy_change_control_reserved,
13700 { "Reserved", "zbee_zcl_se.device_management.publish_change_of_tenancy.proposed_tenancy_change_control.reserved", FT_UINT32, BASE_HEX, NULL,
13701 0xFFFF8000, NULL, HFILL } },
13703 { &hf_zbee_zcl_device_management_publish_change_of_supplier_current_provider_id,
13704 { "Current Provider ID", "zbee_zcl_se.device_management.publish_change_of_supplier.current_provider_id", FT_UINT32, BASE_HEX, NULL,
13705 0x0, NULL, HFILL } },
13707 { &hf_zbee_zcl_device_management_publish_change_of_supplier_issuer_event_id,
13708 { "Issuer Event ID", "zbee_zcl_se.device_management.publish_change_of_supplier.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13709 0x0, NULL, HFILL } },
13711 { &hf_zbee_zcl_device_management_publish_change_of_supplier_tariff_type,
13712 { "Tariff Type", "zbee_zcl_se.device_management.publish_change_of_supplier.tariff_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_price_tariff_type_names),
13713 0x0, NULL, HFILL } },
13715 { &hf_zbee_zcl_device_management_publish_change_of_supplier_proposed_provider_id,
13716 { "Proposed Provider ID", "zbee_zcl_se.device_management.publish_change_of_supplier.proposed_provider_id", FT_UINT32, BASE_HEX, NULL,
13717 0x0, NULL, HFILL } },
13719 { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_implementation_time,
13720 { "Provider Change Implementation Time", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_change_implementation_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13721 0x0, NULL, HFILL } },
13723 { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_change_control,
13724 { "Provider Change Control", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_change_control", FT_UINT32, BASE_HEX, NULL,
13725 0x0, NULL, HFILL } },
13727 { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_name,
13728 { "Proposed Provider Name", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_proposed_provider_name", FT_UINT_STRING, BASE_NONE, NULL,
13729 0x0, NULL, HFILL } },
13731 { &hf_zbee_zcl_device_management_publish_change_of_supplier_provider_proposed_provider_contact_details,
13732 { "Proposed Provider Contact Details", "zbee_zcl_se.device_management.publish_change_of_supplier.provider_proposed_provider_contact_details", FT_UINT_STRING, BASE_NONE, NULL,
13733 0x0, NULL, HFILL } },
13735 { &hf_zbee_zcl_device_management_request_new_password_issuer_event_id,
13736 { "Issuer Event ID", "zbee_zcl_se.device_management.request_new_password.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13737 0x0, NULL, HFILL } },
13739 { &hf_zbee_zcl_device_management_request_new_password_implementation_date,
13740 { "Implementation Date/Time", "zbee_zcl_se.device_management.request_new_password.implementation_date", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13741 0x0, NULL, HFILL } },
13743 { &hf_zbee_zcl_device_management_request_new_password_duration_in_minutes,
13744 { "Duration in minutes", "zbee_zcl_se.device_management.request_new_password.duration_in_minutes", FT_UINT16, BASE_DEC, NULL,
13745 0x0, NULL, HFILL } },
13747 { &hf_zbee_zcl_device_management_request_new_password_password,
13748 { "Password", "zbee_zcl_se.device_management.request_new_password.password", FT_UINT_STRING, BASE_NONE, NULL,
13749 0x0, NULL, HFILL } },
13751 { &hf_zbee_zcl_device_management_update_site_id_issuer_event_id,
13752 { "Issuer Event ID", "zbee_zcl_se.device_management.update_site_id.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13753 0x0, NULL, HFILL } },
13755 { &hf_zbee_zcl_device_management_update_site_id_site_id_time,
13756 { "SiteID Time", "zbee_zcl_se.device_management.update_site_id.site_id_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13757 0x0, NULL, HFILL } },
13759 { &hf_zbee_zcl_device_management_update_site_id_provider_id,
13760 { "Provider ID", "zbee_zcl_se.device_management.update_site_id.provider_id", FT_UINT32, BASE_HEX, NULL,
13761 0x0, NULL, HFILL } },
13763 { &hf_zbee_zcl_device_management_update_site_id_site_id,
13764 { "SiteID", "zbee_zcl_se.device_management.update_site_id.site_id", FT_UINT_STRING, BASE_NONE, NULL,
13765 0x0, NULL, HFILL } },
13767 { &hf_zbee_zcl_device_management_get_event_configuration_event_id,
13768 { "Event ID", "zbee_zcl_se.device_management.get_event_configuration.event_id", FT_UINT16, BASE_HEX, NULL,
13769 0x0, NULL, HFILL } },
13771 { &hf_zbee_zcl_device_management_update_cin_issuer_event_id,
13772 { "Issuer Event ID", "zbee_zcl_se.device_management.update_cin.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13773 0x0, NULL, HFILL } },
13775 { &hf_zbee_zcl_device_management_update_cin_cin_implementation_time,
13776 { "CIN Implementation Time", "zbee_zcl_se.device_management.update_cin.cin_implementation_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13777 0x0, NULL, HFILL } },
13779 { &hf_zbee_zcl_device_management_update_cin_provider_id,
13780 { "Provider ID", "zbee_zcl_se.device_management.update_cin.provider_id", FT_UINT32, BASE_HEX, NULL,
13781 0x0, NULL, HFILL } },
13783 { &hf_zbee_zcl_device_management_update_cin_customerid_number,
13784 { "CustomerID Number", "zbee_zcl_se.device_management.update_cin.customerid_number", FT_UINT_STRING, BASE_NONE, NULL,
13785 0x0, NULL, HFILL } },
13787 { &hf_zbee_zcl_device_management_set_event_configuration_issuer_event_id,
13788 { "Issuer Event ID", "zbee_zcl_se.device_management.set_event_configuration.issuer_event_id", FT_UINT32, BASE_HEX, NULL,
13789 0x0, NULL, HFILL } },
13791 { &hf_zbee_zcl_device_management_set_event_configuration_start_time,
13792 { "Start Date/Time", "zbee_zcl_se.device_management.set_event_configuration.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
13793 0x0, NULL, HFILL } },
13795 { &hf_zbee_zcl_device_management_set_event_configuration_configuration_control,
13796 { "Configuration Control", "zbee_zcl_se.device_management.set_event_configuration.configuration_control", FT_UINT8, BASE_HEX, VALS(zbee_zcl_device_management_configuration_controls),
13797 0x0, NULL, HFILL } },
13799 { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_number_of_events,
13800 { "Number of Events", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.number_of_events", FT_UINT8, BASE_DEC, NULL,
13801 0x0, NULL, HFILL } },
13803 { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_id,
13804 { "Event ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.event_id", FT_UINT16, BASE_DEC, NULL,
13805 0x0, NULL, HFILL } },
13807 { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_group_id,
13808 { "Event Group ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.event_group_id", FT_UINT16, BASE_DEC, NULL,
13809 0x0, NULL, HFILL } },
13811 { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_log_id,
13812 { "Log ID", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.log_id", FT_UINT8, BASE_DEC, NULL,
13813 0x0, NULL, HFILL } },
13815 { &hf_zbee_zcl_device_management_set_event_configuration_event_configuration_event_configuration_value_match,
13816 { "Configuration Value Match", "zbee_zcl_se.device_management.set_event_configuration.event_configuration.configuration_value_match", FT_UINT8, BASE_DEC, NULL,
13817 0x0, NULL, HFILL } },
13821 /* ZCL Device Management subtrees */
13822 int *ett[] = {
13823 &ett_zbee_zcl_device_management,
13824 &ett_zbee_zcl_device_management_event_configuration_payload,
13825 &ett_zbee_zcl_device_management_event_configuration,
13826 &ett_zbee_zcl_device_management_proposed_tenancy_change_control
13829 /* Register the ZigBee ZCL Device Management cluster protocol name and description */
13830 proto_zbee_zcl_device_management = proto_register_protocol("ZigBee ZCL Device Management", "ZCL Device Management", ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT);
13831 proto_register_field_array(proto_zbee_zcl_device_management, hf, array_length(hf));
13832 proto_register_subtree_array(ett, array_length(ett));
13834 /* Register the ZigBee ZCL Device Management dissector. */
13835 register_dissector(ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT, dissect_zbee_zcl_device_management, proto_zbee_zcl_device_management);
13836 } /*proto_register_zbee_zcl_device_management*/
13839 *Hands off the ZCL Device Management dissector.
13842 void
13843 proto_reg_handoff_zbee_zcl_device_management(void)
13845 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_DEVICE_MANAGEMENT,
13846 proto_zbee_zcl_device_management,
13847 ett_zbee_zcl_device_management,
13848 ZBEE_ZCL_CID_DEVICE_MANAGEMENT,
13849 ZBEE_MFG_CODE_NONE,
13850 hf_zbee_zcl_device_management_attr_server_id,
13851 hf_zbee_zcl_device_management_attr_client_id,
13852 hf_zbee_zcl_device_management_srv_rx_cmd_id,
13853 hf_zbee_zcl_device_management_srv_tx_cmd_id,
13854 (zbee_zcl_fn_attr_data)dissect_zcl_device_management_attr_data
13856 } /*proto_reg_handoff_zbee_zcl_device_management*/
13859 /* ########################################################################## */
13860 /* #### (0x0709) EVENTS CLUSTER ############################################# */
13861 /* ########################################################################## */
13863 /* Attributes - None */
13865 /* Server Commands Received */
13866 #define zbee_zcl_events_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
13867 XXX(ZBEE_ZCL_CMD_ID_EVENTS_GET_EVENT_LOG, 0x00, "Get Event Log" ) \
13868 XXX(ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_REQUEST, 0x01, "Clear Event Log Request" )
13870 VALUE_STRING_ENUM(zbee_zcl_events_srv_rx_cmd_names);
13871 VALUE_STRING_ARRAY(zbee_zcl_events_srv_rx_cmd_names);
13873 /* Server Commands Generated */
13874 #define zbee_zcl_events_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
13875 XXX(ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT, 0x00, "Publish Event" ) \
13876 XXX(ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT_LOG, 0x01, "Publish Event Log" ) \
13877 XXX(ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_RESPONSE, 0x02, "Clear Event Log Response" )
13879 VALUE_STRING_ENUM(zbee_zcl_events_srv_tx_cmd_names);
13880 VALUE_STRING_ARRAY(zbee_zcl_events_srv_tx_cmd_names);
13882 /*************************/
13883 /* Function Declarations */
13884 /*************************/
13885 void proto_register_zbee_zcl_events(void);
13886 void proto_reg_handoff_zbee_zcl_events(void);
13888 /* Command Dissector Helpers */
13889 static void dissect_zcl_events_get_event_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13890 static void dissect_zcl_events_clear_event_log_request (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13891 static void dissect_zcl_events_publish_event (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13892 static void dissect_zcl_events_publish_event_log (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13893 static void dissect_zcl_events_clear_event_log_response (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
13895 /*************************/
13896 /* Global Variables */
13897 /*************************/
13899 /* Initialize the protocol and registered fields */
13900 static int proto_zbee_zcl_events;
13902 static int hf_zbee_zcl_events_srv_tx_cmd_id;
13903 static int hf_zbee_zcl_events_srv_rx_cmd_id;
13904 static int hf_zbee_zcl_events_get_event_log_event_control_log_id;
13905 static int hf_zbee_zcl_events_get_event_log_event_id;
13906 static int hf_zbee_zcl_events_get_event_log_start_time;
13907 static int hf_zbee_zcl_events_get_event_log_end_time;
13908 static int hf_zbee_zcl_events_get_event_log_number_of_events;
13909 static int hf_zbee_zcl_events_get_event_log_event_offset;
13910 static int hf_zbee_zcl_events_clear_event_log_request_log_id;
13911 static int hf_zbee_zcl_events_publish_event_log_id;
13912 static int hf_zbee_zcl_events_publish_event_event_id;
13913 static int hf_zbee_zcl_events_publish_event_event_time;
13914 static int hf_zbee_zcl_events_publish_event_event_control;
13915 static int hf_zbee_zcl_events_publish_event_event_data;
13916 static int hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events;
13917 static int hf_zbee_zcl_events_publish_event_log_command_index;
13918 static int hf_zbee_zcl_events_publish_event_log_total_commands;
13919 static int hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control;
13920 static int hf_zbee_zcl_events_publish_event_log_log_id;
13921 static int hf_zbee_zcl_events_publish_event_log_event_id;
13922 static int hf_zbee_zcl_events_publish_event_log_event_time;
13923 static int hf_zbee_zcl_events_publish_event_log_event_data;
13924 static int hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs;
13926 /* Initialize the subtree pointers */
13927 #define ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT 1
13928 #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
13929 #define ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT (ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT + ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT)
13931 static int ett_zbee_zcl_events;
13932 static int ett_zbee_zcl_events_publish_event_log_entry[ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT];
13934 /*************************/
13935 /* Function Bodies */
13936 /*************************/
13939 *ZigBee ZCL Events cluster dissector for wireshark.
13941 *@param tvb pointer to buffer containing raw packet.
13942 *@param pinfo pointer to packet information fields
13943 *@param tree pointer to data tree Wireshark uses to display packet.
13945 static int
13946 dissect_zbee_zcl_events(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
13948 proto_tree *payload_tree;
13949 zbee_zcl_packet *zcl;
13950 unsigned offset = 0;
13951 uint8_t cmd_id;
13952 int rem_len;
13954 /* Reject the packet if data is NULL */
13955 if (data == NULL)
13956 return 0;
13957 zcl = (zbee_zcl_packet *)data;
13958 cmd_id = zcl->cmd_id;
13960 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
13961 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
13962 /* Append the command name to the info column. */
13963 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13964 val_to_str_const(cmd_id, zbee_zcl_events_srv_rx_cmd_names, "Unknown Command"),
13965 zcl->tran_seqno);
13967 /* Add the command ID. */
13968 proto_tree_add_uint(tree, hf_zbee_zcl_events_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
13970 /* Check is this command has a payload, than add the payload tree */
13971 rem_len = tvb_reported_length_remaining(tvb, ++offset);
13972 if (rem_len > 0) {
13973 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_events, NULL, "Payload");
13975 /* Call the appropriate command dissector */
13976 switch (cmd_id) {
13978 case ZBEE_ZCL_CMD_ID_EVENTS_GET_EVENT_LOG:
13979 dissect_zcl_events_get_event_log(tvb, payload_tree, &offset);
13980 break;
13982 case ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_REQUEST:
13983 dissect_zcl_events_clear_event_log_request(tvb, payload_tree, &offset);
13984 break;
13986 default:
13987 break;
13991 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
13992 /* Append the command name to the info column. */
13993 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
13994 val_to_str_const(cmd_id, zbee_zcl_events_srv_tx_cmd_names, "Unknown Command"),
13995 zcl->tran_seqno);
13997 /* Add the command ID. */
13998 proto_tree_add_uint(tree, hf_zbee_zcl_events_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
14000 /* Check is this command has a payload, than add the payload tree */
14001 rem_len = tvb_reported_length_remaining(tvb, ++offset);
14002 if (rem_len > 0) {
14003 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_events, NULL, "Payload");
14005 /* Call the appropriate command dissector */
14006 switch (cmd_id) {
14008 case ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT:
14009 dissect_zcl_events_publish_event(tvb, payload_tree, &offset);
14010 break;
14012 case ZBEE_ZCL_CMD_ID_EVENTS_PUBLISH_EVENT_LOG:
14013 dissect_zcl_events_publish_event_log(tvb, payload_tree, &offset);
14014 break;
14016 case ZBEE_ZCL_CMD_ID_EVENTS_CLEAR_EVENT_LOG_RESPONSE:
14017 dissect_zcl_events_clear_event_log_response(tvb, payload_tree, &offset);
14018 break;
14020 default:
14021 break;
14026 return tvb_captured_length(tvb);
14027 } /*dissect_zbee_zcl_events*/
14030 *This function manages the Get Event Log payload
14032 *@param tvb pointer to buffer containing raw packet.
14033 *@param tree pointer to data tree Wireshark uses to display packet.
14034 *@param offset pointer to offset from caller
14036 static void
14037 dissect_zcl_events_get_event_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14039 /* Event Control / Log ID */
14040 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_control_log_id, tvb, *offset, 1, ENC_NA);
14041 *offset += 1;
14043 /* Event ID */
14044 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14045 *offset += 2;
14047 /* Start Time */
14048 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_start_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14049 *offset += 4;
14051 /* End Time */
14052 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_end_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14053 *offset += 4;
14055 /* Number of Events */
14056 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_number_of_events, tvb, *offset, 1, ENC_NA);
14057 *offset += 1;
14059 /* Event Offset */
14060 proto_tree_add_item(tree, hf_zbee_zcl_events_get_event_log_event_offset, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14061 *offset += 2;
14062 } /*dissect_zcl_events_get_event_log*/
14065 *This function manages the Clear Event Log Request payload
14067 *@param tvb pointer to buffer containing raw packet.
14068 *@param tree pointer to data tree Wireshark uses to display packet.
14069 *@param offset pointer to offset from caller
14071 static void
14072 dissect_zcl_events_clear_event_log_request(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14074 /* Log ID */
14075 proto_tree_add_item(tree, hf_zbee_zcl_events_clear_event_log_request_log_id, tvb, *offset, 1, ENC_NA);
14076 *offset += 1;
14077 } /*dissect_zcl_events_clear_event_log_request*/
14080 *This function manages the Publish Event payload
14082 *@param tvb pointer to buffer containing raw packet.
14083 *@param tree pointer to data tree Wireshark uses to display packet.
14084 *@param offset pointer to offset from caller
14086 static void
14087 dissect_zcl_events_publish_event(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14089 int length;
14091 if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
14092 /* Log ID - Introduced from ZCL version 1.2 */
14093 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_id, tvb, *offset, 1, ENC_NA);
14094 *offset += 1;
14097 /* Event ID */
14098 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14099 *offset += 2;
14101 /* Event Time */
14102 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_time, tvb, *offset, 4, ENC_TIME_ZBEE_ZCL|ENC_LITTLE_ENDIAN);
14103 *offset += 4;
14105 /* Event Control */
14106 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_event_control, tvb, *offset, 1, ENC_NA);
14107 *offset += 1;
14109 /* Event Data */
14110 proto_tree_add_item_ret_length(tree, hf_zbee_zcl_events_publish_event_event_data, tvb, *offset, 1, ENC_NA|ENC_ZIGBEE, &length);
14111 *offset += length;
14112 } /*dissect_zcl_events_publish_event*/
14115 *This function manages the Publish Event Log payload
14117 *@param tvb pointer to buffer containing raw packet.
14118 *@param tree pointer to data tree Wireshark uses to display packet.
14119 *@param offset pointer to offset from caller
14121 static void
14122 dissect_zcl_events_publish_event_log(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14124 proto_tree* event_log_tree;
14125 int length;
14127 /* Total Number of Matching Events */
14128 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14129 *offset += 2;
14131 /* Command Index */
14132 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_command_index, tvb, *offset, 1, ENC_NA);
14133 *offset += 1;
14135 /* Total Commands */
14136 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_total_commands, tvb, *offset, 1, ENC_NA);
14137 *offset += 1;
14139 /* Number of Events / Log Payload Control */
14140 proto_tree_add_item(tree, hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control, tvb, *offset, 1, ENC_NA);
14141 *offset += 1;
14143 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) > 0 && i < ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT; i++) {
14144 /* Add subtree */
14145 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);
14147 if (gPREF_zbee_se_protocol_version >= ZBEE_SE_VERSION_1_2) {
14148 /* Log ID - Introduced from ZCL version 1.2 */
14149 proto_tree_add_item(event_log_tree, hf_zbee_zcl_events_publish_event_log_log_id, tvb, *offset, 1, ENC_NA);
14150 *offset += 1;
14153 /* Event ID */
14154 proto_item_append_text(event_log_tree, ", Event ID: 0x%04x", tvb_get_uint16(tvb, *offset, ENC_LITTLE_ENDIAN));
14155 proto_tree_add_item(event_log_tree, hf_zbee_zcl_events_publish_event_log_event_id, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
14156 *offset += 2;
14158 /* Event Time */
14159 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);
14160 *offset += 4;
14162 /* Event Data */
14163 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);
14164 *offset += length;
14166 /* Set length of subtree */
14167 proto_item_set_end(proto_tree_get_parent(event_log_tree), tvb, *offset);
14169 } /*dissect_zcl_events_publish_event_log*/
14172 *This function manages the Clear Event Log Response payload
14174 *@param tvb pointer to buffer containing raw packet.
14175 *@param tree pointer to data tree Wireshark uses to display packet.
14176 *@param offset pointer to offset from caller
14178 static void
14179 dissect_zcl_events_clear_event_log_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14181 /* Cleared Event Logs */
14182 proto_tree_add_item(tree, hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs, tvb, *offset, 1, ENC_NA);
14183 *offset += 1;
14184 } /*dissect_zcl_events_clear_event_log_response*/
14187 *This function registers the ZCL Events dissector
14190 void
14191 proto_register_zbee_zcl_events(void)
14193 static hf_register_info hf[] = {
14195 { &hf_zbee_zcl_events_srv_tx_cmd_id,
14196 { "Command", "zbee_zcl_se.events.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_events_srv_tx_cmd_names),
14197 0x00, NULL, HFILL } },
14199 { &hf_zbee_zcl_events_srv_rx_cmd_id,
14200 { "Command", "zbee_zcl_se.events.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_events_srv_rx_cmd_names),
14201 0x00, NULL, HFILL } },
14203 { &hf_zbee_zcl_events_get_event_log_event_control_log_id,
14204 { "Event Control / Log ID", "zbee_zcl_se.events.get_event_log.event_control_log_id", FT_UINT8, BASE_HEX, NULL,
14205 0x00, NULL, HFILL } },
14207 { &hf_zbee_zcl_events_get_event_log_event_id,
14208 { "Event ID", "zbee_zcl_se.events.get_event_log.event_id", FT_UINT16, BASE_HEX, NULL,
14209 0x00, NULL, HFILL } },
14211 { &hf_zbee_zcl_events_get_event_log_start_time,
14212 { "Start Time", "zbee_zcl_se.events.get_event_log.start_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14213 0x00, NULL, HFILL } },
14215 { &hf_zbee_zcl_events_get_event_log_end_time,
14216 { "End Time", "zbee_zcl_se.events.get_event_log.end_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14217 0x00, NULL, HFILL } },
14219 { &hf_zbee_zcl_events_get_event_log_number_of_events,
14220 { "Number of Events", "zbee_zcl_se.events.get_event_log.number_of_events", FT_UINT8, BASE_DEC, NULL,
14221 0x00, NULL, HFILL } },
14223 { &hf_zbee_zcl_events_get_event_log_event_offset,
14224 { "Event Offset", "zbee_zcl_se.events.get_event_log.event_offset", FT_UINT16, BASE_DEC, NULL,
14225 0x00, NULL, HFILL } },
14227 { &hf_zbee_zcl_events_clear_event_log_request_log_id,
14228 { "Log ID", "zbee_zcl_se.events.clear_event_log_request.log_id", FT_UINT8, BASE_HEX, NULL,
14229 0x00, NULL, HFILL } },
14231 { &hf_zbee_zcl_events_publish_event_log_id,
14232 { "Log ID", "zbee_zcl_se.events.publish_event.log_id", FT_UINT8, BASE_HEX, NULL,
14233 0x00, NULL, HFILL } },
14235 { &hf_zbee_zcl_events_publish_event_event_id,
14236 { "Event ID", "zbee_zcl_se.events.publish_event.event_id", FT_UINT16, BASE_HEX, NULL,
14237 0x00, NULL, HFILL } },
14239 { &hf_zbee_zcl_events_publish_event_event_time,
14240 { "Event Time", "zbee_zcl_se.events.publish_event.event_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14241 0x00, NULL, HFILL } },
14243 { &hf_zbee_zcl_events_publish_event_event_control,
14244 { "Event Control", "zbee_zcl_se.events.publish_event.event_control", FT_UINT8, BASE_HEX, NULL,
14245 0x00, NULL, HFILL } },
14247 { &hf_zbee_zcl_events_publish_event_event_data,
14248 { "Event Data", "zbee_zcl_se.events.publish_event.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
14249 0x00, NULL, HFILL } },
14251 { &hf_zbee_zcl_events_publish_event_log_total_number_of_matching_events,
14252 { "Total Number of Matching Events", "zbee_zcl_se.events.publish_event_log.matching_events", FT_UINT16, BASE_DEC, NULL,
14253 0x00, NULL, HFILL } },
14255 { &hf_zbee_zcl_events_publish_event_log_command_index,
14256 { "Command Index", "zbee_zcl_se.events.publish_event_log.command_index", FT_UINT8, BASE_DEC, NULL,
14257 0x00, NULL, HFILL } },
14259 { &hf_zbee_zcl_events_publish_event_log_total_commands,
14260 { "Total Commands", "zbee_zcl_se.events.publish_event_log.total_commands", FT_UINT8, BASE_DEC, NULL,
14261 0x00, NULL, HFILL } },
14263 { &hf_zbee_zcl_events_publish_event_log_number_of_events_log_payload_control,
14264 { "Number of Events / Log Payload Control", "zbee_zcl_se.events.publish_event_log.number_of_events_log_payload_control", FT_UINT8, BASE_HEX, NULL,
14265 0x00, NULL, HFILL } },
14267 { &hf_zbee_zcl_events_publish_event_log_log_id,
14268 { "Log ID", "zbee_zcl_se.events.publish_event_log.log_id", FT_UINT8, BASE_HEX, NULL,
14269 0x00, NULL, HFILL } },
14271 { &hf_zbee_zcl_events_publish_event_log_event_id,
14272 { "Event ID", "zbee_zcl_se.events.publish_event_log.event_id", FT_UINT16, BASE_HEX, NULL,
14273 0x00, NULL, HFILL } },
14275 { &hf_zbee_zcl_events_publish_event_log_event_time,
14276 { "Event Time", "zbee_zcl_se.events.publish_event_log.event_time", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
14277 0x00, NULL, HFILL } },
14279 { &hf_zbee_zcl_events_publish_event_log_event_data,
14280 { "Event Data", "zbee_zcl_se.events.publish_event_log.event_data", FT_UINT_BYTES, SEP_COLON, NULL,
14281 0x00, NULL, HFILL } },
14283 { &hf_zbee_zcl_events_clear_event_log_response_cleared_event_logs,
14284 { "Cleared Event Logs", "zbee_zcl_se.events.clear_event_log_response.cleared_event_logs", FT_UINT8, BASE_HEX, NULL,
14285 0x00, NULL, HFILL } },
14289 /* ZCL Events subtrees */
14290 int *ett[ZBEE_ZCL_SE_EVENTS_NUM_TOTAL_ETT];
14291 ett[0] = &ett_zbee_zcl_events;
14293 unsigned j = ZBEE_ZCL_SE_EVENTS_NUM_INDIVIDUAL_ETT;
14295 /* Initialize Publish Event Log subtrees */
14296 for (unsigned i = 0; i < ZBEE_ZCL_SE_EVENTS_NUM_PUBLISH_EVENT_LOG_ETT; i++, j++) {
14297 ett[j] = &ett_zbee_zcl_events_publish_event_log_entry[i];
14300 /* Register the ZigBee ZCL Events cluster protocol name and description */
14301 proto_zbee_zcl_events = proto_register_protocol("ZigBee ZCL Events", "ZCL Events", ZBEE_PROTOABBREV_ZCL_EVENTS);
14302 proto_register_field_array(proto_zbee_zcl_events, hf, array_length(hf));
14303 proto_register_subtree_array(ett, array_length(ett));
14305 /* Register the ZigBee ZCL Events dissector. */
14306 register_dissector(ZBEE_PROTOABBREV_ZCL_EVENTS, dissect_zbee_zcl_events, proto_zbee_zcl_events);
14307 } /*proto_register_zbee_zcl_events*/
14310 *Hands off the ZCL Events dissector.
14313 void
14314 proto_reg_handoff_zbee_zcl_events(void)
14316 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_EVENTS,
14317 proto_zbee_zcl_events,
14318 ett_zbee_zcl_events,
14319 ZBEE_ZCL_CID_EVENTS,
14320 ZBEE_MFG_CODE_NONE,
14321 -1, -1,
14322 hf_zbee_zcl_events_srv_rx_cmd_id,
14323 hf_zbee_zcl_events_srv_tx_cmd_id,
14324 NULL
14326 } /*proto_reg_handoff_zbee_zcl_events*/
14328 /* ########################################################################## */
14329 /* #### (0x070A) MDU PAIRING CLUSTER ############################################ */
14330 /* ########################################################################## */
14332 /* Attributes - None */
14334 /* Server Commands Received */
14335 #define zbee_zcl_mdu_pairing_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14336 XXX(ZBEE_ZCL_CMD_ID_MDU_PAIRING_REQUEST, 0x00, "Pairing Request" )
14338 VALUE_STRING_ENUM(zbee_zcl_mdu_pairing_srv_rx_cmd_names);
14339 VALUE_STRING_ARRAY(zbee_zcl_mdu_pairing_srv_rx_cmd_names);
14341 /* Server Commands Generated */
14342 #define zbee_zcl_mdu_pairing_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14343 XXX(ZBEE_ZCL_CMD_ID_MDU_PAIRING_RESPONSE, 0x00, "Pairing Response" )
14345 VALUE_STRING_ENUM(zbee_zcl_mdu_pairing_srv_tx_cmd_names);
14346 VALUE_STRING_ARRAY(zbee_zcl_mdu_pairing_srv_tx_cmd_names);
14348 /*************************/
14349 /* Function Declarations */
14350 /*************************/
14351 void proto_register_zbee_zcl_mdu_pairing(void);
14352 void proto_reg_handoff_zbee_zcl_mdu_pairing(void);
14354 /* Command Dissector Helpers */
14355 static void dissect_zcl_mdu_pairing_request (tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14356 static void dissect_zcl_mdu_pairing_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14358 /*************************/
14359 /* Global Variables */
14360 /*************************/
14362 /* Initialize the protocol and registered fields */
14363 static int proto_zbee_zcl_mdu_pairing;
14365 static int hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id;
14366 static int hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id;
14367 static int hf_zbee_zcl_mdu_pairing_info_version;
14368 static int hf_zbee_zcl_mdu_pairing_total_devices_number;
14369 static int hf_zbee_zcl_mdu_pairing_cmd_id;
14370 static int hf_zbee_zcl_mdu_pairing_total_commands_number;
14371 static int hf_zbee_zcl_mdu_pairing_device_eui64;
14372 static int hf_zbee_zcl_mdu_pairing_local_info_version;
14373 static int hf_zbee_zcl_mdu_pairing_requesting_device_eui64;
14375 /* Initialize the subtree pointers */
14376 static int ett_zbee_zcl_mdu_pairing;
14378 /*************************/
14379 /* Function Bodies */
14380 /*************************/
14383 *ZigBee ZCL MDU Pairing cluster dissector for wireshark.
14385 *@param tvb pointer to buffer containing raw packet.
14386 *@param pinfo pointer to packet information fields
14387 *@param tree pointer to data tree Wireshark uses to display packet.
14389 static int
14390 dissect_zbee_zcl_mdu_pairing(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14392 proto_tree *payload_tree;
14393 zbee_zcl_packet *zcl;
14394 unsigned offset = 0;
14395 uint8_t cmd_id;
14396 int rem_len;
14398 /* Reject the packet if data is NULL */
14399 if (data == NULL)
14400 return 0;
14401 zcl = (zbee_zcl_packet *)data;
14402 cmd_id = zcl->cmd_id;
14404 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
14405 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
14406 /* Append the command name to the info column. */
14407 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14408 val_to_str_const(cmd_id, zbee_zcl_mdu_pairing_srv_rx_cmd_names, "Unknown Command"),
14409 zcl->tran_seqno);
14411 /* Add the command ID. */
14412 proto_tree_add_uint(tree, hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
14414 /* Check is this command has a payload, than add the payload tree */
14415 rem_len = tvb_reported_length_remaining(tvb, ++offset);
14416 if (rem_len > 0) {
14417 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_mdu_pairing, NULL, "Payload");
14419 /* Call the appropriate command dissector */
14420 switch (cmd_id) {
14422 case ZBEE_ZCL_CMD_ID_MDU_PAIRING_REQUEST:
14423 dissect_zcl_mdu_pairing_request(tvb, payload_tree, &offset);
14424 break;
14426 default:
14427 break;
14431 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
14432 /* Append the command name to the info column. */
14433 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14434 val_to_str_const(cmd_id, zbee_zcl_mdu_pairing_srv_tx_cmd_names, "Unknown Command"),
14435 zcl->tran_seqno);
14437 /* Add the command ID. */
14438 proto_tree_add_uint(tree, hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
14440 /* Check is this command has a payload, than add the payload tree */
14441 rem_len = tvb_reported_length_remaining(tvb, ++offset);
14442 if (rem_len > 0) {
14443 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_mdu_pairing, NULL, "Payload");
14445 /* Call the appropriate command dissector */
14446 switch (cmd_id) {
14448 case ZBEE_ZCL_CMD_ID_MDU_PAIRING_RESPONSE:
14449 dissect_zcl_mdu_pairing_response(tvb, payload_tree, &offset);
14450 break;
14452 default:
14453 break;
14458 return tvb_captured_length(tvb);
14459 } /*dissect_zbee_zcl_mdu_pairing*/
14462 *This function manages the Pairing Request payload
14464 *@param tvb pointer to buffer containing raw packet.
14465 *@param tree pointer to data tree Wireshark uses to display packet.
14466 *@param offset pointer to offset from caller
14468 static void
14469 dissect_zcl_mdu_pairing_request(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14471 /* Local pairing information version */
14472 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_local_info_version, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
14473 *offset += 4;
14475 /* EUI64 of Requesting Device */
14476 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_requesting_device_eui64, tvb, *offset, 8, ENC_LITTLE_ENDIAN);
14477 *offset += 8;
14478 } /*dissect_zcl_mdu_pairing_request*/
14481 *This function manages the Pairing Response payload
14483 *@param tvb pointer to buffer containing raw packet.
14484 *@param tree pointer to data tree Wireshark uses to display packet.
14485 *@param offset pointer to offset from caller
14487 static void
14488 dissect_zcl_mdu_pairing_response(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14490 uint8_t devices_num;
14492 /* Pairing information version */
14493 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_info_version, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
14494 *offset += 4;
14496 /* Total Number of Devices */
14497 devices_num = tvb_get_uint8(tvb, *offset);
14498 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_total_devices_number, tvb, *offset, 1, ENC_NA);
14499 *offset += 1;
14501 /* Command index */
14502 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_cmd_id, tvb, *offset, 1, ENC_NA);
14503 *offset += 1;
14505 /* Total Number of Commands */
14506 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_total_commands_number, tvb, *offset, 1, ENC_NA);
14507 *offset += 1;
14509 /* EUI64 of Devices */
14510 for (int i = 0; tvb_reported_length_remaining(tvb, *offset) >= 8 && i < devices_num; i++) {
14511 /* EUI64 of Device i */
14512 proto_tree_add_item(tree, hf_zbee_zcl_mdu_pairing_device_eui64, tvb, *offset, 8, ENC_LITTLE_ENDIAN);
14513 *offset += 8;
14515 } /*dissect_zcl_mdu_pairing_response*/
14518 *This function registers the ZCL MDU Pairing dissector
14521 void
14522 proto_register_zbee_zcl_mdu_pairing(void)
14524 static hf_register_info hf[] = {
14526 { &hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id,
14527 { "Command", "zbee_zcl_se.mdu_pairing.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_mdu_pairing_srv_tx_cmd_names),
14528 0x00, NULL, HFILL } },
14530 { &hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id,
14531 { "Command", "zbee_zcl_se.mdu_pairing.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_mdu_pairing_srv_rx_cmd_names),
14532 0x00, NULL, HFILL } },
14534 { &hf_zbee_zcl_mdu_pairing_info_version,
14535 { "Pairing information version", "zbee_zcl_se.mdu_pairing.info_version", FT_UINT32, BASE_DEC, NULL,
14536 0x0, NULL, HFILL } },
14538 { &hf_zbee_zcl_mdu_pairing_total_devices_number,
14539 { "Total Number of Devices", "zbee_zcl_se.mdu_pairing.total_devices_number", FT_UINT8, BASE_DEC, NULL,
14540 0x0, NULL, HFILL } },
14542 { &hf_zbee_zcl_mdu_pairing_cmd_id,
14543 { "Command Index", "zbee_zcl_se.mdu_pairing.command_index", FT_UINT8, BASE_HEX, NULL,
14544 0x0, NULL, HFILL } },
14546 { &hf_zbee_zcl_mdu_pairing_total_commands_number,
14547 { "Total Number of Commands", "zbee_zcl_se.mdu_pairing.total_commands_number", FT_UINT8, BASE_DEC, NULL,
14548 0x0, NULL, HFILL } },
14550 { &hf_zbee_zcl_mdu_pairing_device_eui64,
14551 { "Device EUI64", "zbee_zcl_se.mdu_pairing.device_eui64", FT_EUI64, BASE_NONE, NULL,
14552 0x0, NULL, HFILL } },
14554 { &hf_zbee_zcl_mdu_pairing_local_info_version,
14555 { "Local Pairing Information Version", "zbee_zcl_se.mdu_pairing.local_info_version", FT_UINT32, BASE_DEC, NULL,
14556 0x0, NULL, HFILL } },
14558 { &hf_zbee_zcl_mdu_pairing_requesting_device_eui64,
14559 { "EUI64 of Requesting Device", "zbee_zcl_se.mdu_pairing.requesting_device_eui64", FT_EUI64, BASE_NONE, NULL,
14560 0x0, NULL, HFILL } },
14563 /* ZCL MDU Pairing subtrees */
14564 int *ett[] = {
14565 &ett_zbee_zcl_mdu_pairing
14568 /* Register the ZigBee ZCL MDU Pairing cluster protocol name and description */
14569 proto_zbee_zcl_mdu_pairing = proto_register_protocol("ZigBee ZCL MDU Pairing", "ZCL MDU Pairing", ZBEE_PROTOABBREV_ZCL_MDU_PAIRING);
14570 proto_register_field_array(proto_zbee_zcl_mdu_pairing, hf, array_length(hf));
14571 proto_register_subtree_array(ett, array_length(ett));
14573 /* Register the ZigBee ZCL MDU Pairing dissector. */
14574 register_dissector(ZBEE_PROTOABBREV_ZCL_MDU_PAIRING, dissect_zbee_zcl_mdu_pairing, proto_zbee_zcl_mdu_pairing);
14575 } /*proto_register_zbee_zcl_mdu_pairing*/
14578 *Hands off the ZCL MDU Pairing dissector.
14581 void
14582 proto_reg_handoff_zbee_zcl_mdu_pairing(void)
14584 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_MDU_PAIRING,
14585 proto_zbee_zcl_mdu_pairing,
14586 ett_zbee_zcl_mdu_pairing,
14587 ZBEE_ZCL_CID_MDU_PAIRING,
14588 ZBEE_MFG_CODE_NONE,
14589 -1, -1,
14590 hf_zbee_zcl_mdu_pairing_srv_rx_cmd_id,
14591 hf_zbee_zcl_mdu_pairing_srv_tx_cmd_id,
14592 NULL
14594 } /*proto_reg_handoff_zbee_zcl_mdu_pairing*/
14596 /* ########################################################################## */
14597 /* #### (0x070B) SUB-GHZ CLUSTER ############################################ */
14598 /* ########################################################################## */
14600 /* Attributes */
14601 #define zbee_zcl_sub_ghz_attr_names_VALUE_STRING_LIST(XXX) \
14602 XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_CHANNEL_CHANGE, 0x0000, "Channel Change" ) \
14603 XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_28_CHANNEL_MASK, 0x0001, "Page 28 Channel Mask" ) \
14604 XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_29_CHANNEL_MASK, 0x0002, "Page 29 Channel Mask" ) \
14605 XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_30_CHANNEL_MASK, 0x0003, "Page 30 Channel Mask" ) \
14606 XXX(ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_31_CHANNEL_MASK, 0x0004, "Page 31 Channel Mask" ) \
14607 XXX(ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_SUB_GHZ, 0xFFFE, "Attribute Reporting Status" )
14609 VALUE_STRING_ENUM(zbee_zcl_sub_ghz_attr_names);
14610 VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_attr_names);
14612 /* Server Commands Received */
14613 #define zbee_zcl_sub_ghz_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14614 XXX(ZBEE_ZCL_CMD_ID_SUB_GHZ_GET_SUSPEND_ZCL_MESSAGES_STATUS, 0x00, "Get Suspend ZCL Messages Status" )
14616 VALUE_STRING_ENUM(zbee_zcl_sub_ghz_srv_rx_cmd_names);
14617 VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_srv_rx_cmd_names);
14619 /* Server Commands Generated */
14620 #define zbee_zcl_sub_ghz_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14621 XXX(ZBEE_ZCL_CMD_ID_SUB_GHZ_SUSPEND_ZCL_MESSAGES, 0x00, "Suspend ZCL Messages" )
14623 VALUE_STRING_ENUM(zbee_zcl_sub_ghz_srv_tx_cmd_names);
14624 VALUE_STRING_ARRAY(zbee_zcl_sub_ghz_srv_tx_cmd_names);
14626 /*************************/
14627 /* Function Declarations */
14628 /*************************/
14629 void proto_register_zbee_zcl_sub_ghz(void);
14630 void proto_reg_handoff_zbee_zcl_sub_ghz(void);
14632 /* Attribute Dissector Helpers */
14633 static void dissect_zcl_sub_ghz_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr);
14635 /* Command Dissector Helpers */
14636 static void dissect_zcl_sub_ghz_suspend_zcl_messages(tvbuff_t *tvb, proto_tree *tree, unsigned *offset);
14638 /*************************/
14639 /* Global Variables */
14640 /*************************/
14642 /* Initialize the protocol and registered fields */
14643 static int proto_zbee_zcl_sub_ghz;
14645 static int hf_zbee_zcl_sub_ghz_srv_tx_cmd_id;
14646 static int hf_zbee_zcl_sub_ghz_srv_rx_cmd_id;
14647 static int hf_zbee_zcl_sub_ghz_attr_id;
14648 static int hf_zbee_zcl_sub_ghz_attr_reporting_status;
14649 static int hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period;
14651 /* Initialize the subtree pointers */
14652 static int ett_zbee_zcl_sub_ghz;
14654 /*************************/
14655 /* Function Bodies */
14656 /*************************/
14659 *This function is called by ZCL foundation dissector in order to decode
14661 *@param tree pointer to data tree Wireshark uses to display packet.
14662 *@param tvb pointer to buffer containing raw packet.
14663 *@param offset pointer to buffer offset
14664 *@param attr_id attribute identifier
14665 *@param data_type attribute data type
14666 *@param client_attr ZCL client
14668 static void
14669 dissect_zcl_sub_ghz_attr_data(proto_tree *tree, tvbuff_t *tvb, unsigned *offset, uint16_t attr_id, unsigned data_type, bool client_attr)
14671 /* Dissect attribute data type and data */
14672 switch (attr_id) {
14673 /* applies to all SE clusters */
14674 case ZBEE_ZCL_ATTR_ID_SE_ATTR_REPORT_STATUS_SUB_GHZ:
14675 proto_tree_add_item(tree, hf_zbee_zcl_sub_ghz_attr_reporting_status, tvb, *offset, 1, ENC_NA);
14676 *offset += 1;
14677 break;
14679 case ZBEE_ZCL_ATTR_ID_SUB_GHZ_CHANNEL_CHANGE:
14680 case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_28_CHANNEL_MASK:
14681 case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_29_CHANNEL_MASK:
14682 case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_30_CHANNEL_MASK:
14683 case ZBEE_ZCL_ATTR_ID_SUB_GHZ_PAGE_31_CHANNEL_MASK:
14684 default: /* Catch all */
14685 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
14686 break;
14688 } /*dissect_zcl_sub_ghz_attr_data*/
14692 *ZigBee ZCL Sub-Ghz cluster dissector for wireshark.
14694 *@param tvb pointer to buffer containing raw packet.
14695 *@param pinfo pointer to packet information fields
14696 *@param tree pointer to data tree Wireshark uses to display packet.
14698 static int
14699 dissect_zbee_zcl_sub_ghz(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
14701 proto_tree *payload_tree;
14702 zbee_zcl_packet *zcl;
14703 unsigned offset = 0;
14704 uint8_t cmd_id;
14705 int rem_len;
14707 /* Reject the packet if data is NULL */
14708 if (data == NULL)
14709 return 0;
14710 zcl = (zbee_zcl_packet *)data;
14711 cmd_id = zcl->cmd_id;
14713 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
14714 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
14715 /* Append the command name to the info column. */
14716 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14717 val_to_str_const(cmd_id, zbee_zcl_sub_ghz_srv_rx_cmd_names, "Unknown Command"),
14718 zcl->tran_seqno);
14720 /* Add the command ID. */
14721 proto_tree_add_uint(tree, hf_zbee_zcl_sub_ghz_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
14723 /* Check is this command has a payload, than add the payload tree */
14724 rem_len = tvb_reported_length_remaining(tvb, ++offset);
14725 if (rem_len > 0) {
14726 /* payload_tree = */proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_sub_ghz, NULL, "Payload");
14728 /* Call the appropriate command dissector */
14729 switch (cmd_id) {
14731 case ZBEE_ZCL_CMD_ID_SUB_GHZ_GET_SUSPEND_ZCL_MESSAGES_STATUS:
14732 /* No Payload */
14733 break;
14735 default:
14736 break;
14740 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
14741 /* Append the command name to the info column. */
14742 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
14743 val_to_str_const(cmd_id, zbee_zcl_sub_ghz_srv_tx_cmd_names, "Unknown Command"),
14744 zcl->tran_seqno);
14746 /* Add the command ID. */
14747 proto_tree_add_uint(tree, hf_zbee_zcl_sub_ghz_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
14749 /* Check is this command has a payload, than add the payload tree */
14750 rem_len = tvb_reported_length_remaining(tvb, ++offset);
14751 if (rem_len > 0) {
14752 payload_tree = proto_tree_add_subtree(tree, tvb, offset, rem_len, ett_zbee_zcl_sub_ghz, NULL, "Payload");
14754 /* Call the appropriate command dissector */
14755 switch (cmd_id) {
14757 case ZBEE_ZCL_CMD_ID_SUB_GHZ_SUSPEND_ZCL_MESSAGES:
14758 dissect_zcl_sub_ghz_suspend_zcl_messages(tvb, payload_tree, &offset);
14759 break;
14761 default:
14762 break;
14767 return tvb_captured_length(tvb);
14768 } /*dissect_zbee_zcl_sub_ghz*/
14771 *This function manages the Suspend ZCL Messages payload
14773 *@param tvb pointer to buffer containing raw packet.
14774 *@param tree pointer to data tree Wireshark uses to display packet.
14775 *@param offset pointer to offset from caller
14777 static void
14778 dissect_zcl_sub_ghz_suspend_zcl_messages(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14780 /* (Optional) Suspension Period */
14781 if (tvb_reported_length_remaining(tvb, *offset) > 0) {
14782 proto_tree_add_item(tree, hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period, tvb, *offset, 1, ENC_NA);
14783 *offset += 1;
14785 } /*dissect_zcl_sub_ghz_suspend_zcl_messages*/
14788 *This function registers the ZCL Sub-Ghz dissector
14791 void
14792 proto_register_zbee_zcl_sub_ghz(void)
14794 static hf_register_info hf[] = {
14796 { &hf_zbee_zcl_sub_ghz_attr_id,
14797 { "Attribute", "zbee_zcl_se.sub_ghz.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_sub_ghz_attr_names),
14798 0x0, NULL, HFILL } },
14800 { &hf_zbee_zcl_sub_ghz_attr_reporting_status, /* common to all SE clusters */
14801 { "Attribute Reporting Status", "zbee_zcl_se.sub_ghz.attr.attr_reporting_status",
14802 FT_UINT8, BASE_HEX, VALS(zbee_zcl_se_reporting_status_names), 0x00, NULL, HFILL } },
14804 { &hf_zbee_zcl_sub_ghz_srv_tx_cmd_id,
14805 { "Command", "zbee_zcl_se.sub_ghz.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_sub_ghz_srv_tx_cmd_names),
14806 0x00, NULL, HFILL } },
14808 { &hf_zbee_zcl_sub_ghz_srv_rx_cmd_id,
14809 { "Command", "zbee_zcl_se.sub_ghz.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_sub_ghz_srv_rx_cmd_names),
14810 0x00, NULL, HFILL } },
14812 { &hf_zbee_zcl_sub_ghz_zcl_messages_suspension_period,
14813 { "ZCL Messages Suspension Period", "zbee_zcl_se.sub_ghz.zcl_messages_suspension_period", FT_UINT8, BASE_DEC, NULL,
14814 0x0, NULL, HFILL } },
14817 /* ZCL Sub-Ghz subtrees */
14818 int *ett[] = {
14819 &ett_zbee_zcl_sub_ghz
14822 /* Register the ZigBee ZCL Sub-Ghz cluster protocol name and description */
14823 proto_zbee_zcl_sub_ghz = proto_register_protocol("ZigBee ZCL Sub-Ghz", "ZCL Sub-Ghz", ZBEE_PROTOABBREV_ZCL_SUB_GHZ);
14824 proto_register_field_array(proto_zbee_zcl_sub_ghz, hf, array_length(hf));
14825 proto_register_subtree_array(ett, array_length(ett));
14827 /* Register the ZigBee ZCL Sub-Ghz dissector. */
14828 register_dissector(ZBEE_PROTOABBREV_ZCL_SUB_GHZ, dissect_zbee_zcl_sub_ghz, proto_zbee_zcl_sub_ghz);
14829 } /*proto_register_zbee_zcl_sub_ghz*/
14832 *Hands off the ZCL Sub-Ghz dissector.
14835 void
14836 proto_reg_handoff_zbee_zcl_sub_ghz(void)
14838 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_SUB_GHZ,
14839 proto_zbee_zcl_sub_ghz,
14840 ett_zbee_zcl_sub_ghz,
14841 ZBEE_ZCL_CID_SUB_GHZ,
14842 ZBEE_MFG_CODE_NONE,
14843 hf_zbee_zcl_sub_ghz_attr_id,
14845 hf_zbee_zcl_sub_ghz_srv_rx_cmd_id,
14846 hf_zbee_zcl_sub_ghz_srv_tx_cmd_id,
14847 (zbee_zcl_fn_attr_data)dissect_zcl_sub_ghz_attr_data
14849 } /*proto_reg_handoff_zbee_zcl_sub_ghz*/
14851 /* ########################################################################## */
14852 /* #### (0x0800) KEY ESTABLISHMENT ########################################## */
14853 /* ########################################################################## */
14855 /*************************/
14856 /* Defines */
14857 /*************************/
14859 #define ZBEE_ZCL_KE_USAGE_KEY_AGREEMENT 0x08
14860 #define ZBEE_ZCL_KE_USAGE_DIGITAL_SIGNATURE 0x80
14862 /* Attributes */
14863 #define zbee_zcl_ke_attr_names_VALUE_STRING_LIST(XXX) \
14864 XXX(ZBEE_ZCL_ATTR_ID_KE_SUITE, 0x0000, "Supported Key Establishment Suites" )
14866 VALUE_STRING_ARRAY(zbee_zcl_ke_attr_names);
14868 /* Server Commands Received */
14869 #define zbee_zcl_ke_srv_rx_cmd_names_VALUE_STRING_LIST(XXX) \
14870 XXX(ZBEE_ZCL_CMD_ID_KE_INITIATE_REQ, 0x00, "Initiate Key Establishment Request" ) \
14871 XXX(ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_REQ, 0x01, "Ephemeral Data Request" ) \
14872 XXX(ZBEE_ZCL_CMD_ID_KE_CONFIRM_REQ, 0x02, "Confirm Key Data Request" ) \
14873 XXX(ZBEE_ZCL_CMD_ID_KE_CLNT_TERMINATE, 0x03, "Terminate Key Establishment" )
14875 VALUE_STRING_ENUM(zbee_zcl_ke_srv_rx_cmd_names);
14876 VALUE_STRING_ARRAY(zbee_zcl_ke_srv_rx_cmd_names);
14878 /* Server Commands Generated */
14879 #define zbee_zcl_ke_srv_tx_cmd_names_VALUE_STRING_LIST(XXX) \
14880 XXX(ZBEE_ZCL_CMD_ID_KE_INITIATE_RSP, 0x00, "Initiate Key Establishment Response" ) \
14881 XXX(ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_RSP, 0x01, "Ephemeral Data Response" ) \
14882 XXX(ZBEE_ZCL_CMD_ID_KE_CONFIRM_RSP, 0x02, "Confirm Key Data Response" ) \
14883 XXX(ZBEE_ZCL_CMD_ID_KE_SRV_TERMINATE, 0x03, "Terminate Key Establishment" )
14885 VALUE_STRING_ENUM(zbee_zcl_ke_srv_tx_cmd_names);
14886 VALUE_STRING_ARRAY(zbee_zcl_ke_srv_tx_cmd_names);
14888 /* Suite Names */
14889 #define zbee_zcl_ke_suite_names_VALUE_STRING_LIST(XXX) \
14890 XXX(ZBEE_ZCL_KE_SUITE_1, 0x0001, "Crypto Suite 1 (CBKE K163)" ) \
14891 XXX(ZBEE_ZCL_KE_SUITE_2, 0x0002, "Crypto Suite 2 (CBKE K283)" )
14893 VALUE_STRING_ENUM(zbee_zcl_ke_suite_names);
14894 VALUE_STRING_ARRAY(zbee_zcl_ke_suite_names);
14896 /* Crypto Suite 2 Type Names */
14897 #define zbee_zcl_ke_type_names_VALUE_STRING_LIST(XXX) \
14898 XXX(ZBEE_ZCL_KE_TYPE_NO_EXT, 0x00, "No Extensions" )
14900 VALUE_STRING_ARRAY(zbee_zcl_ke_type_names);
14902 /* Crypto Suite 2 Curve Names */
14903 #define zbee_zcl_ke_curve_names_VALUE_STRING_LIST(XXX) \
14904 XXX(ZBEE_ZCL_KE_CURVE_SECT283K1, 0x0D, "sect283k1" )
14906 VALUE_STRING_ARRAY(zbee_zcl_ke_curve_names);
14908 /* Crypto Suite 2 Hash Names */
14909 #define zbee_zcl_ke_hash_names_VALUE_STRING_LIST(XXX) \
14910 XXX(ZBEE_ZCL_KE_HASH_AES_MMO, 0x08, "AES MMO" )
14912 VALUE_STRING_ARRAY(zbee_zcl_ke_hash_names);
14914 #define zbee_zcl_ke_status_names_VALUE_STRING_LIST(XXX) \
14915 XXX(ZBEE_ZCL_KE_STATUS_RESERVED, 0x00, "Reserved" ) \
14916 XXX(ZBEE_ZCL_KE_STATUS_UNKNOWN_ISSUER, 0x01, "Unknown Issuer" ) \
14917 XXX(ZBEE_ZCL_KE_STATUS_BAD_KEY_CONFIRM, 0x02, "Bad Key Confirm" ) \
14918 XXX(ZBEE_ZCL_KE_STATUS_BAD_MESSAGE, 0x03, "Bad Message" ) \
14919 XXX(ZBEE_ZCL_KE_STATUS_NO_RESOURCES, 0x04, "No Resources" ) \
14920 XXX(ZBEE_ZCL_KE_STATUS_UNSUPPORTED_SUITE, 0x05, "Unsupported Suite" ) \
14921 XXX(ZBEE_ZCL_KE_STATUS_INVALID_CERTIFICATE, 0x06, "Invalid Certificate" )
14923 VALUE_STRING_ARRAY(zbee_zcl_ke_status_names);
14925 /*************************/
14926 /* Function Declarations */
14927 /*************************/
14929 void proto_register_zbee_zcl_ke(void);
14930 void proto_reg_handoff_zbee_zcl_ke(void);
14932 /* Private functions prototype */
14934 /*************************/
14935 /* Global Variables */
14936 /*************************/
14938 /* Initialize the protocol and registered fields */
14939 static int proto_zbee_zcl_ke;
14940 static int hf_zbee_zcl_ke_srv_tx_cmd_id;
14941 static int hf_zbee_zcl_ke_srv_rx_cmd_id;
14942 static int hf_zbee_zcl_ke_attr_id;
14943 static int hf_zbee_zcl_ke_attr_client_id;
14944 static int hf_zbee_zcl_ke_suite;
14945 static int hf_zbee_zcl_ke_ephemeral_time;
14946 static int hf_zbee_zcl_ke_confirm_time;
14947 static int hf_zbee_zcl_ke_status;
14948 static int hf_zbee_zcl_ke_wait_time;
14949 static int hf_zbee_zcl_ke_cert_reconstr;
14950 static int hf_zbee_zcl_ke_cert_subject;
14951 static int hf_zbee_zcl_ke_cert_issuer;
14952 static int hf_zbee_zcl_ke_cert_profile_attr;
14953 static int hf_zbee_zcl_ke_cert_type;
14954 static int hf_zbee_zcl_ke_cert_serialno;
14955 static int hf_zbee_zcl_ke_cert_curve;
14956 static int hf_zbee_zcl_ke_cert_hash;
14957 static int hf_zbee_zcl_ke_cert_valid_from;
14958 static int hf_zbee_zcl_ke_cert_valid_to;
14959 static int hf_zbee_zcl_ke_cert_key_usage_agreement;
14960 static int hf_zbee_zcl_ke_cert_key_usage_signature;
14961 static int hf_zbee_zcl_ke_ephemeral_qeu;
14962 static int hf_zbee_zcl_ke_ephemeral_qev;
14963 static int hf_zbee_zcl_ke_macu;
14964 static int hf_zbee_zcl_ke_macv;
14966 /* Initialize the subtree pointers */
14967 static int ett_zbee_zcl_ke;
14968 static int ett_zbee_zcl_ke_cert;
14969 static int ett_zbee_zcl_ke_key_usage;
14971 /*************************/
14972 /* Function Bodies */
14973 /*************************/
14976 *This function dissects the Suite 1 Certificate
14978 *@param tvb pointer to buffer containing raw packet.
14979 *@param tree pointer to data tree Wireshark uses to display packet.
14980 *@param offset pointer to offset from caller
14982 static void
14983 dissect_zcl_ke_suite1_certificate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
14985 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_reconstr, tvb, *offset, 22, ENC_NA);
14986 *offset += 22;
14988 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_subject, tvb, *offset, 8, ENC_NA);
14989 *offset += 8;
14991 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_issuer, tvb, *offset, 8, ENC_NA);
14992 *offset += 8;
14994 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_profile_attr, tvb, *offset, 10, ENC_NA);
14995 *offset += 10;
14997 } /*dissect_zcl_ke_suite1_certificate*/
15000 *This function dissects the Suite 2 Certificate
15002 *@param tvb pointer to buffer containing raw packet.
15003 *@param tree pointer to data tree Wireshark uses to display packet.
15004 *@param offset pointer to offset from caller
15006 static void
15007 dissect_zcl_ke_suite2_certificate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15009 nstime_t valid_from_time;
15010 nstime_t valid_to_time;
15011 uint32_t valid_to;
15012 uint8_t key_usage;
15013 proto_tree *usage_tree;
15015 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_type, tvb, *offset, 1, ENC_NA);
15016 *offset += 1;
15018 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_serialno, tvb, *offset, 8, ENC_NA);
15019 *offset += 8;
15021 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_curve, tvb, *offset, 1, ENC_NA);
15022 *offset += 1;
15024 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_hash, tvb, *offset, 1, ENC_NA);
15025 *offset += 1;
15027 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_issuer, tvb, *offset, 8, ENC_NA);
15028 *offset += 8;
15030 valid_from_time.secs = (time_t)tvb_get_ntoh40(tvb, *offset);
15031 valid_from_time.nsecs = 0;
15032 proto_tree_add_time(tree, hf_zbee_zcl_ke_cert_valid_from, tvb, *offset, 5, &valid_from_time);
15033 *offset += 5;
15035 valid_to = tvb_get_ntohl(tvb, *offset);
15036 if (valid_to == 0xFFFFFFFF) {
15037 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)");
15039 else {
15040 valid_to_time.secs = valid_from_time.secs + valid_to;
15041 valid_to_time.nsecs = 0;
15042 proto_tree_add_time(tree, hf_zbee_zcl_ke_cert_valid_to, tvb, *offset, 4, &valid_to_time);
15044 *offset += 4;
15046 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_subject, tvb, *offset, 8, ENC_NA);
15047 *offset += 8;
15049 key_usage = tvb_get_uint8(tvb, *offset);
15050 usage_tree = proto_tree_add_subtree_format(tree, tvb, *offset, 1, ett_zbee_zcl_ke_key_usage, NULL, "Key Usage (0x%02x)", key_usage);
15052 proto_tree_add_item(usage_tree, hf_zbee_zcl_ke_cert_key_usage_agreement, tvb, *offset, 1, ENC_NA);
15053 proto_tree_add_item(usage_tree, hf_zbee_zcl_ke_cert_key_usage_signature, tvb, *offset, 1, ENC_NA);
15054 *offset += 1;
15056 proto_tree_add_item(tree, hf_zbee_zcl_ke_cert_reconstr, tvb, *offset, 37, ENC_NA);
15057 *offset += 37;
15059 } /*dissect_zcl_ke_suite2_certificate*/
15062 *This function manages the Initiate Key Establishment message
15064 *@param tvb pointer to buffer containing raw packet.
15065 *@param tree pointer to data tree Wireshark uses to display packet.
15066 *@param offset pointer to offset from caller
15068 static void
15069 dissect_zcl_ke_initiate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15071 int rem_len;
15072 proto_tree *subtree;
15073 uint16_t suite;
15075 suite = tvb_get_letohs(tvb, *offset);
15077 proto_tree_add_item(tree, hf_zbee_zcl_ke_suite, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
15078 *offset += 2;
15080 proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_time, tvb, *offset, 1, ENC_NA);
15081 *offset += 1;
15083 proto_tree_add_item(tree, hf_zbee_zcl_ke_confirm_time, tvb, *offset, 1, ENC_NA);
15084 *offset += 1;
15086 rem_len = tvb_reported_length_remaining(tvb, *offset);
15087 subtree = proto_tree_add_subtree(tree, tvb, *offset, rem_len, ett_zbee_zcl_ke_cert, NULL, "Implicit Certificate");
15089 switch (suite) {
15090 case ZBEE_ZCL_KE_SUITE_1:
15091 dissect_zcl_ke_suite1_certificate(tvb, subtree, offset);
15092 break;
15094 case ZBEE_ZCL_KE_SUITE_2:
15095 dissect_zcl_ke_suite2_certificate(tvb, subtree, offset);
15096 break;
15098 default:
15099 break;
15101 } /* dissect_zcl_ke_initiate */
15104 *This function dissects the Ephemeral Data QEU
15106 *@param tvb pointer to buffer containing raw packet.
15107 *@param tree pointer to data tree Wireshark uses to display packet.
15108 *@param offset pointer to offset from caller
15110 static int
15111 dissect_zcl_ke_ephemeral_qeu(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15113 int length;
15115 /* size depends on suite but without a session we don't know that here */
15116 /* so just report what we have */
15117 length = tvb_reported_length_remaining(tvb, *offset);
15118 proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_qeu, tvb, *offset, length, ENC_NA);
15119 *offset += length;
15120 return tvb_captured_length(tvb);
15124 *This function dissects the Ephemeral Data QEV
15126 *@param tvb pointer to buffer containing raw packet.
15127 *@param tree pointer to data tree Wireshark uses to display packet.
15128 *@param offset pointer to offset from caller
15130 static int
15131 dissect_zcl_ke_ephemeral_qev(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15133 int length;
15135 /* size depends on suite but without a session we don't know that here */
15136 /* so just report what we have */
15137 length = tvb_reported_length_remaining(tvb, *offset);
15138 proto_tree_add_item(tree, hf_zbee_zcl_ke_ephemeral_qev, tvb, *offset, length, ENC_NA);
15139 *offset += length;
15140 return tvb_captured_length(tvb);
15144 *This function dissects the Confirm MACU
15146 *@param tvb pointer to buffer containing raw packet.
15147 *@param tree pointer to data tree Wireshark uses to display packet.
15148 *@param offset pointer to offset from caller
15150 static int
15151 dissect_zcl_ke_confirm_macu(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15153 proto_tree_add_item(tree, hf_zbee_zcl_ke_macu, tvb, *offset, ZBEE_SEC_CONST_BLOCKSIZE, ENC_NA);
15154 *offset += ZBEE_SEC_CONST_BLOCKSIZE;
15155 return tvb_captured_length(tvb);
15159 *This function dissects the Confirm MACV
15161 *@param tvb pointer to buffer containing raw packet.
15162 *@param tree pointer to data tree Wireshark uses to display packet.
15163 *@param offset pointer to offset from caller
15165 static int
15166 dissect_zcl_ke_confirm_macv(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15168 proto_tree_add_item(tree, hf_zbee_zcl_ke_macv, tvb, *offset, ZBEE_SEC_CONST_BLOCKSIZE, ENC_NA);
15169 *offset += ZBEE_SEC_CONST_BLOCKSIZE;
15170 return tvb_captured_length(tvb);
15174 *This function dissects the Terminate Key Establishment message
15176 *@param tvb pointer to buffer containing raw packet.
15177 *@param tree pointer to data tree Wireshark uses to display packet.
15178 *@param offset pointer to offset from caller
15180 static void
15181 dissect_zcl_ke_terminate(tvbuff_t *tvb, proto_tree *tree, unsigned *offset)
15183 proto_tree_add_item(tree, hf_zbee_zcl_ke_status, tvb, *offset, 1, ENC_NA);
15184 *offset += 1;
15186 proto_tree_add_item(tree, hf_zbee_zcl_ke_wait_time, tvb, *offset, 1, ENC_NA);
15187 *offset += 1;
15189 proto_tree_add_item(tree, hf_zbee_zcl_ke_suite, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
15190 *offset += 2;
15194 *ZigBee ZCL Key Establishment cluster dissector for wireshark.
15196 *@param tvb pointer to buffer containing raw packet.
15197 *@param pinfo pointer to packet information fields
15198 *@param tree pointer to data tree Wireshark uses to display packet.
15200 static int
15201 dissect_zbee_zcl_ke(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
15203 zbee_zcl_packet *zcl;
15204 unsigned offset = 0;
15205 uint8_t cmd_id;
15206 int rem_len;
15208 /* Reject the packet if data is NULL */
15209 if (data == NULL)
15210 return 0;
15211 zcl = (zbee_zcl_packet *)data;
15212 cmd_id = zcl->cmd_id;
15214 /* Create a subtree for the ZCL Command frame, and add the command ID to it. */
15215 if (zcl->direction == ZBEE_ZCL_FCF_TO_SERVER) {
15216 /* Append the command name to the info column. */
15217 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
15218 val_to_str_const(cmd_id, zbee_zcl_ke_srv_rx_cmd_names, "Unknown Command"),
15219 zcl->tran_seqno);
15221 /* Add the command ID. */
15222 proto_tree_add_uint(tree, hf_zbee_zcl_ke_srv_rx_cmd_id, tvb, offset, 1, cmd_id);
15224 /* Check is this command has a payload, than add the payload tree */
15225 rem_len = tvb_reported_length_remaining(tvb, offset);
15226 offset += 1; /* delay from last add_item */
15227 if (rem_len > 0) {
15229 /* Call the appropriate command dissector */
15230 switch (cmd_id) {
15231 case ZBEE_ZCL_CMD_ID_KE_INITIATE_REQ:
15232 dissect_zcl_ke_initiate(tvb, tree, &offset);
15233 break;
15235 case ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_REQ:
15236 return dissect_zcl_ke_ephemeral_qeu(tvb, tree, &offset);
15238 case ZBEE_ZCL_CMD_ID_KE_CONFIRM_REQ:
15239 return dissect_zcl_ke_confirm_macu(tvb, tree, &offset);
15241 case ZBEE_ZCL_CMD_ID_KE_CLNT_TERMINATE:
15242 dissect_zcl_ke_terminate(tvb, tree, &offset);
15243 break;
15245 default:
15246 break;
15250 else { /* ZBEE_ZCL_FCF_TO_CLIENT */
15251 /* Append the command name to the info column. */
15252 col_append_fstr(pinfo->cinfo, COL_INFO, "%s, Seq: %u",
15253 val_to_str_const(cmd_id, zbee_zcl_ke_srv_tx_cmd_names, "Unknown Command"),
15254 zcl->tran_seqno);
15256 /* Add the command ID. */
15257 proto_tree_add_uint(tree, hf_zbee_zcl_ke_srv_tx_cmd_id, tvb, offset, 1, cmd_id);
15259 /* Check is this command has a payload, than add the payload tree */
15260 rem_len = tvb_reported_length_remaining(tvb, ++offset);
15261 if (rem_len > 0) {
15262 /* Call the appropriate command dissector */
15263 switch (cmd_id) {
15264 case ZBEE_ZCL_CMD_ID_KE_INITIATE_RSP:
15265 dissect_zcl_ke_initiate(tvb, tree, &offset);
15266 break;
15268 case ZBEE_ZCL_CMD_ID_KE_EPHEMERAL_RSP:
15269 return dissect_zcl_ke_ephemeral_qev(tvb, tree, &offset);
15271 case ZBEE_ZCL_CMD_ID_KE_CONFIRM_RSP:
15272 return dissect_zcl_ke_confirm_macv(tvb, tree, &offset);
15274 case ZBEE_ZCL_CMD_ID_KE_SRV_TERMINATE:
15275 dissect_zcl_ke_terminate(tvb, tree, &offset);
15276 break;
15278 default:
15279 break;
15284 return tvb_captured_length(tvb);
15285 } /*dissect_zbee_zcl_ke*/
15289 *This function registers the ZCL Key Establishment dissector
15292 void
15293 proto_register_zbee_zcl_ke(void)
15295 static hf_register_info hf[] = {
15297 { &hf_zbee_zcl_ke_attr_id,
15298 { "Attribute", "zbee_zcl_se.ke.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_attr_names),
15299 0x00, NULL, HFILL } },
15301 /* Server and client attributes are the same but should of cause be put in the correct field */
15302 { &hf_zbee_zcl_ke_attr_client_id,
15303 { "Attribute", "zbee_zcl_se.ke.attr_client_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_attr_names),
15304 0x00, NULL, HFILL } },
15306 { &hf_zbee_zcl_ke_srv_tx_cmd_id,
15307 { "Command", "zbee_zcl_se.ke.cmd.srv_tx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_srv_tx_cmd_names),
15308 0x00, NULL, HFILL } },
15310 { &hf_zbee_zcl_ke_srv_rx_cmd_id,
15311 { "Command", "zbee_zcl_se.ke.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_srv_rx_cmd_names),
15312 0x00, NULL, HFILL } },
15314 { &hf_zbee_zcl_ke_suite,
15315 { "Key Establishment Suite", "zbee_zcl_se.ke.attr.suite", FT_UINT16, BASE_HEX, VALS(zbee_zcl_ke_suite_names),
15316 0x00, NULL, HFILL } },
15318 { &hf_zbee_zcl_ke_ephemeral_time,
15319 { "Ephemeral Data Generate Time", "zbee_zcl_se.ke.init.ephemeral.time", FT_UINT8, BASE_DEC, NULL,
15320 0, NULL, HFILL } },
15322 { &hf_zbee_zcl_ke_confirm_time,
15323 { "Confirm Key Generate Time", "zbee_zcl_se.ke.init.confirm.time", FT_UINT8, BASE_DEC, NULL,
15324 0, NULL, HFILL } },
15326 { &hf_zbee_zcl_ke_status,
15327 { "Status", "zbee_zcl_se.ke.terminate.status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_status_names),
15328 0x00, NULL, HFILL } },
15330 { &hf_zbee_zcl_ke_wait_time,
15331 { "Wait Time", "zbee_zcl_se.ke.terminate.wait.time", FT_UINT8, BASE_DEC, NULL,
15332 0, NULL, HFILL } },
15334 { &hf_zbee_zcl_ke_cert_reconstr,
15335 { "Public Key", "zbee_zcl_se.ke.cert.reconst", FT_BYTES, BASE_NONE, NULL,
15336 0, NULL, HFILL } },
15338 { &hf_zbee_zcl_ke_cert_subject,
15339 { "Subject", "zbee_zcl_se.ke.cert.subject", FT_BYTES, BASE_NONE, NULL,
15340 0, NULL, HFILL } },
15342 { &hf_zbee_zcl_ke_cert_issuer,
15343 { "Issuer", "zbee_zcl_se.ke.cert.issuer", FT_BYTES, BASE_NONE, NULL,
15344 0, NULL, HFILL } },
15346 { &hf_zbee_zcl_ke_cert_profile_attr,
15347 { "Profile Attribute Data", "zbee_zcl_se.ke.cert.profile", FT_BYTES, BASE_NONE, NULL,
15348 0, NULL, HFILL } },
15350 { &hf_zbee_zcl_ke_cert_type,
15351 { "Type", "zbee_zcl_se.ke.cert.type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_type_names),
15352 0, NULL, HFILL } },
15354 { &hf_zbee_zcl_ke_cert_serialno,
15355 { "Serial No", "zbee_zcl_se.ke.cert.serialno", FT_UINT64, BASE_HEX, NULL,
15356 0, NULL, HFILL } },
15358 { &hf_zbee_zcl_ke_cert_curve,
15359 { "Curve", "zbee_zcl_se.ke.cert.curve", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_curve_names),
15360 0, NULL, HFILL } },
15362 { &hf_zbee_zcl_ke_cert_hash,
15363 { "Hash", "zbee_zcl_se.ke.cert.hash", FT_UINT8, BASE_HEX, VALS(zbee_zcl_ke_hash_names),
15364 0, NULL, HFILL } },
15366 { &hf_zbee_zcl_ke_cert_valid_from,
15367 { "Valid From", "zbee_zcl_se.ke.cert.valid.from", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
15368 0, NULL, HFILL } },
15370 { &hf_zbee_zcl_ke_cert_valid_to,
15371 { "Valid To", "zbee_zcl_se.ke.cert.valid.to", FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL,
15372 0, NULL, HFILL } },
15374 { &hf_zbee_zcl_ke_cert_key_usage_agreement,
15375 { "Key Agreement", "zbee_zcl_se.ke.cert.key.usage.agreement", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled),
15376 ZBEE_ZCL_KE_USAGE_KEY_AGREEMENT, NULL, HFILL }},
15378 { &hf_zbee_zcl_ke_cert_key_usage_signature,
15379 { "Digital Signature", "zbee_zcl_se.ke.cert.key.usage.signature", FT_BOOLEAN, 8, TFS(&tfs_enabled_disabled),
15380 ZBEE_ZCL_KE_USAGE_DIGITAL_SIGNATURE, NULL, HFILL }},
15382 { &hf_zbee_zcl_ke_ephemeral_qeu,
15383 { "Ephemeral Data (QEU)", "zbee_zcl_se.ke.qeu", FT_BYTES, BASE_NONE, NULL,
15384 0, NULL, HFILL } },
15386 { &hf_zbee_zcl_ke_ephemeral_qev,
15387 { "Ephemeral Data (QEV)", "zbee_zcl_se.ke.qev", FT_BYTES, BASE_NONE, NULL,
15388 0, NULL, HFILL } },
15390 { &hf_zbee_zcl_ke_macu,
15391 { "Message Authentication Code (MACU)", "zbee_zcl_se.ke.macu", FT_BYTES, BASE_NONE, NULL,
15392 0, NULL, HFILL } },
15394 { &hf_zbee_zcl_ke_macv,
15395 { "Message Authentication Code (MACV)", "zbee_zcl_se.ke.macv", FT_BYTES, BASE_NONE, NULL,
15396 0, NULL, HFILL } },
15399 /* subtrees */
15400 int *ett[] = {
15401 &ett_zbee_zcl_ke,
15402 &ett_zbee_zcl_ke_cert,
15403 &ett_zbee_zcl_ke_key_usage,
15406 /* Register the ZigBee ZCL Key Establishment cluster protocol name and description */
15407 proto_zbee_zcl_ke = proto_register_protocol("ZigBee ZCL Key Establishment", "ZCL Key Establishment", ZBEE_PROTOABBREV_ZCL_KE);
15408 proto_register_field_array(proto_zbee_zcl_ke, hf, array_length(hf));
15409 proto_register_subtree_array(ett, array_length(ett));
15411 /* Register the ZigBee ZCL Key Establishment dissector. */
15412 register_dissector(ZBEE_PROTOABBREV_ZCL_KE, dissect_zbee_zcl_ke, proto_zbee_zcl_ke);
15413 } /*proto_register_zbee_zcl_ke*/
15416 *Hands off the ZCL Key Establishment dissector.
15419 void
15420 proto_reg_handoff_zbee_zcl_ke(void)
15422 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_KE,
15423 proto_zbee_zcl_ke,
15424 ett_zbee_zcl_ke,
15425 ZBEE_ZCL_CID_KE,
15426 ZBEE_MFG_CODE_NONE,
15427 hf_zbee_zcl_ke_attr_id,
15428 hf_zbee_zcl_ke_attr_client_id,
15429 hf_zbee_zcl_ke_srv_rx_cmd_id,
15430 hf_zbee_zcl_ke_srv_tx_cmd_id,
15431 NULL
15433 } /*proto_reg_handoff_zbee_zcl_ke*/
15436 * Editor modelines - https://www.wireshark.org/tools/modelines.html
15438 * Local variables:
15439 * c-basic-offset: 4
15440 * tab-width: 8
15441 * indent-tabs-mode: nil
15442 * End:
15444 * vi: set shiftwidth=4 tabstop=8 expandtab:
15445 * :indentSize=4:tabSize=8:noTabs=true: