1 /* packet-zbee-zcl-hvac.c
2 * Dissector routines for the ZigBee ZCL HVAC clusters
3 * By Aditya Jain <aditya.jain@samsung.com>
5 * Wireshark - Network traffic analyzer
6 * By Gerald Combs <gerald@wireshark.org>
7 * Copyright 1998 Gerald Combs
9 * SPDX-License-Identifier: GPL-2.0-or-later
15 #include <epan/packet.h>
16 #include <epan/to_str.h>
18 #include "packet-zbee.h"
19 #include "packet-zbee-aps.h"
20 #include "packet-zbee-zcl.h"
22 /* ########################################################################## */
23 /* #### (0x0200) PUMP CONFIGURATION AND CONTROL CLUSTER ##################### */
24 /* ########################################################################## */
26 /*************************/
28 /*************************/
30 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_NUM_ETT 3
33 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_PRESSURE 0x0000 /* Maximum Pressure */
34 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_SPEED 0x0001 /* Maximum Speed */
35 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_FLOW 0x0002 /* Maximum Flow */
36 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_PRESSURE 0x0003 /* Minimum Constant Pressure */
37 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_PRESSURE 0x0004 /* Maximum Constant Pressure */
38 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_COMP_PRESSURE 0x0005 /* Minimum Compensated Pressure */
39 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER_MAX_COMP_PRESSURE 0x0006 /* Maximum Compensated Pressure */
40 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_SPEED 0x0007 /* Minimum Constant Speed */
41 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_SPEED 0x0008 /* Maximum Constant Speed */
42 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_FLOW 0x0009 /* Minimum Constant Flow */
43 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_FLOW 0x000a /* Maximum Constant Flow */
44 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_TEMP 0x000b /* Minimum Constant Temperature */
45 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_TEMP 0x000c /* Maximum Constant Temperature */
46 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_PUMP_STATUS 0x0010 /* Pump Status */
47 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_OPR_MODE 0x0011 /* Effective Operation Mode */
48 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_CTRL_MODE 0x0012 /* Effective Control Mode */
49 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CAPACITY 0x0013 /* Capacity */
50 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_SPEED 0x0014 /* Speed */
51 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_RUNNING_HOURS 0x0015 /* Lifetime Running Hours */
52 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER 0x0016 /* Power */
53 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_ENERGY_CONS 0x0017 /* Lifetime Energy Consumed */
54 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_OPR_MODE 0x0020 /* Operation Mode */
55 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CTRL_MODE 0x0021 /* Control Mode */
56 #define ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_ALARM_MASK 0x0022 /* Alarm Mask */
58 /*Server commands received - none*/
60 /*Server commands generated - none*/
62 /*Pump Status Mask Values*/
63 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_DEVICE_FAULT 0x0001 /* Device Fault */
64 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SUPPLY_FAULT 0x0002 /* Supply Fault */
65 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SPEED_LOW 0x0004 /* Speed Low */
66 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SPEED_HIGH 0x0008 /* Speed High */
67 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_LOCAL_OVERRIDE 0x0010 /* Local Override */
68 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_RUNNING 0x0020 /* Running */
69 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_PRESSURE 0x0040 /* Remote Pressure */
70 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_FLOW 0x0080 /* Remote Flow */
71 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_TEMP 0x0100 /* Remote Temperature */
74 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_VOLTAGE_TOO_LOW 0x0001 /* Supply voltage too low */
75 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_VOLTAGE_TOO_HIGH 0x0002 /* Supply voltage too high */
76 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PWR_MISSING_PHASE 0x0004 /* Power missing phase */
77 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PRESSURE_TOO_LOW 0x0008 /* System pressure too low */
78 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PRESSURE_TOO_HIGH 0x0010 /* System pressure too high */
79 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_DRY_RUNNING 0x0020 /* Dry running */
80 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_MTR_TEMP_TOO_HIGH 0x0040 /* Motor temperature too high */
81 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PUMP_MTR_FATAL_FAILURE 0x0080 /* Pump motor has fatal failure */
82 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_TEMP_TOO_HIGH 0x0100 /* Electronic temperature too high */
83 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PUMP_BLOCK 0x0200 /* Pump blocked */
84 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_SENSOR_FAILURE 0x0400 /* Sensor failure */
85 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_NON_FATAL_FAILURE 0x0800 /* Electronic non-fatal failure */
86 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_FATAL_FAILURE 0x1000 /* Electronic fatal failure */
87 #define ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_GENERAL_FAULT 0x2000 /* Genral fault */
89 /*************************/
90 /* Function Declarations */
91 /*************************/
93 void proto_register_zbee_zcl_pump_config_control(void);
94 void proto_reg_handoff_zbee_zcl_pump_config_control(void);
96 /* Command Dissector Helpers */
97 static void dissect_zcl_pump_config_control_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
99 /* Private functions prototype */
101 /*************************/
102 /* Global Variables */
103 /*************************/
104 /* Initialize the protocol and registered fields */
105 static int proto_zbee_zcl_pump_config_control = -1;
107 static int hf_zbee_zcl_pump_config_control_attr_id = -1;
108 static int hf_zbee_zcl_pump_config_control_attr_eff_opr_mode = -1;
109 static int hf_zbee_zcl_pump_config_control_attr_opr_mode = -1;
110 static int hf_zbee_zcl_pump_config_control_attr_eff_ctrl_mode = -1;
111 static int hf_zbee_zcl_pump_config_control_attr_ctrl_mode = -1;
112 static int hf_zbee_zcl_pump_config_control_status = -1;
113 static int hf_zbee_zcl_pump_config_control_status_device_fault = -1;
114 static int hf_zbee_zcl_pump_config_control_status_supply_fault = -1;
115 static int hf_zbee_zcl_pump_config_control_status_speed_low = -1;
116 static int hf_zbee_zcl_pump_config_control_status_speed_high = -1;
117 static int hf_zbee_zcl_pump_config_control_status_local_override = -1;
118 static int hf_zbee_zcl_pump_config_control_status_running = -1;
119 static int hf_zbee_zcl_pump_config_control_status_rem_pressure = -1;
120 static int hf_zbee_zcl_pump_config_control_status_rem_flow = -1;
121 static int hf_zbee_zcl_pump_config_control_status_rem_temp = -1;
122 static int hf_zbee_zcl_pump_config_control_alarm = -1;
123 static int hf_zbee_zcl_pump_config_control_alarm_volt_too_low = -1;
124 static int hf_zbee_zcl_pump_config_control_alarm_volt_too_high = -1;
125 static int hf_zbee_zcl_pump_config_control_alarm_pwr_missing_phase = -1;
126 static int hf_zbee_zcl_pump_config_control_alarm_press_too_low = -1;
127 static int hf_zbee_zcl_pump_config_control_alarm_press_too_high = -1;
128 static int hf_zbee_zcl_pump_config_control_alarm_dry_running = -1;
129 static int hf_zbee_zcl_pump_config_control_alarm_mtr_temp_too_high = -1;
130 static int hf_zbee_zcl_pump_config_control_alarm_pump_mtr_fatal_fail = -1;
131 static int hf_zbee_zcl_pump_config_control_alarm_elec_temp_too_high = -1;
132 static int hf_zbee_zcl_pump_config_control_alarm_pump_block = -1;
133 static int hf_zbee_zcl_pump_config_control_alarm_sensor_fail = -1;
134 static int hf_zbee_zcl_pump_config_control_alarm_elec_non_fatal_fail = -1;
135 static int hf_zbee_zcl_pump_config_control_alarm_fatal_fail = -1;
136 static int hf_zbee_zcl_pump_config_control_alarm_gen_fault = -1;
138 /* Initialize the subtree pointers */
139 static gint ett_zbee_zcl_pump_config_control = -1;
140 static gint ett_zbee_zcl_pump_config_control_status = -1;
141 static gint ett_zbee_zcl_pump_config_control_alarm = -1;
144 static const value_string zbee_zcl_pump_config_control_attr_names[] = {
145 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_PRESSURE, "Maximum Pressure" },
146 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_SPEED, "Maximum Speed" },
147 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_FLOW, "Maximum Flow" },
148 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_PRESSURE, "Minimum Constant Pressure" },
149 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_PRESSURE, "Maximum Constant Pressure" },
150 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_COMP_PRESSURE, "Minimum Compensated Pressure" },
151 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER_MAX_COMP_PRESSURE, "Maximum Compensated Pressure" },
152 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_SPEED, "Minimum Constant Speed" },
153 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_SPEED, "Maximum Constant Speed" },
154 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_FLOW, "Minimum Constant Flow" },
155 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_FLOW, "Maximum Constant Flow" },
156 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_TEMP, "Minimum Constant Temperature" },
157 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_TEMP, "Maximum Constant Temperature" },
158 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_PUMP_STATUS, "Pump Status" },
159 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_OPR_MODE, "Effective Operation Mode" },
160 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_CTRL_MODE, "Effective Control Mode" },
161 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CAPACITY, "Capacity" },
162 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_SPEED, "Speed" },
163 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_RUNNING_HOURS, "Lifetime Running Hours" },
164 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER, "Power" },
165 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_ENERGY_CONS, "Lifetime Energy Consumed" },
166 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_OPR_MODE, "Operation Mode" },
167 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CTRL_MODE, "Control Mode" },
168 { ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_ALARM_MASK, "Alarm Mask" },
172 /*Operation Mode Values*/
173 static const value_string zbee_zcl_pump_config_control_operation_mode_names[] = {
181 /*Control Mode Values*/
182 static const value_string zbee_zcl_pump_config_control_control_mode_names[] = {
183 {0, "Constant Speed"},
184 {1, "Constant Pressure"},
185 {2, "proportional Pressure"},
186 {3, "Constant Flow"},
188 {5, "Constat Temperature"},
194 /*************************/
195 /* Function Bodies */
196 /*************************/
199 *ZigBee ZCL Pump Configuration and Control cluster dissector for wireshark.
201 *@param tvb pointer to buffer containing raw packet.
202 *@param pinfo pointer to packet information fields
203 *@param tree pointer to data tree Wireshark uses to display packet.
207 dissect_zbee_zcl_pump_config_control(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
209 return tvb_captured_length(tvb);
210 } /*dissect_zbee_zcl_pump_config_control*/
214 *This function is called by ZCL foundation dissector in order to decode
216 *@param tree pointer to data tree Wireshark uses to display packet.
217 *@param tvb pointer to buffer containing raw packet.
218 *@param offset pointer to buffer offset
219 *@param attr_id attribute identifier
220 *@param data_type attribute data type
221 *@param client_attr ZCL client
224 dissect_zcl_pump_config_control_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr)
226 static const int * pump_status[] = {
227 &hf_zbee_zcl_pump_config_control_status_device_fault,
228 &hf_zbee_zcl_pump_config_control_status_supply_fault,
229 &hf_zbee_zcl_pump_config_control_status_speed_low,
230 &hf_zbee_zcl_pump_config_control_status_speed_high,
231 &hf_zbee_zcl_pump_config_control_status_local_override,
232 &hf_zbee_zcl_pump_config_control_status_running,
233 &hf_zbee_zcl_pump_config_control_status_rem_pressure,
234 &hf_zbee_zcl_pump_config_control_status_rem_flow,
235 &hf_zbee_zcl_pump_config_control_status_rem_temp,
239 static const int * alarm_mask[] = {
240 &hf_zbee_zcl_pump_config_control_alarm_volt_too_low,
241 &hf_zbee_zcl_pump_config_control_alarm_volt_too_high,
242 &hf_zbee_zcl_pump_config_control_alarm_pwr_missing_phase,
243 &hf_zbee_zcl_pump_config_control_alarm_press_too_low,
244 &hf_zbee_zcl_pump_config_control_alarm_press_too_high,
245 &hf_zbee_zcl_pump_config_control_alarm_dry_running,
246 &hf_zbee_zcl_pump_config_control_alarm_mtr_temp_too_high,
247 &hf_zbee_zcl_pump_config_control_alarm_pump_mtr_fatal_fail,
248 &hf_zbee_zcl_pump_config_control_alarm_elec_temp_too_high,
249 &hf_zbee_zcl_pump_config_control_alarm_pump_block,
250 &hf_zbee_zcl_pump_config_control_alarm_sensor_fail,
251 &hf_zbee_zcl_pump_config_control_alarm_elec_non_fatal_fail,
252 &hf_zbee_zcl_pump_config_control_alarm_fatal_fail,
253 &hf_zbee_zcl_pump_config_control_alarm_gen_fault,
257 /* Dissect attribute data type and data */
260 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_OPR_MODE:
261 proto_tree_add_item(tree, hf_zbee_zcl_pump_config_control_attr_eff_opr_mode, tvb, *offset, 1, ENC_NA);
265 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_OPR_MODE:
266 proto_tree_add_item(tree, hf_zbee_zcl_pump_config_control_attr_opr_mode, tvb, *offset, 1, ENC_NA);
270 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_EFFECTIVE_CTRL_MODE:
271 proto_tree_add_item(tree, hf_zbee_zcl_pump_config_control_attr_eff_ctrl_mode, tvb, *offset, 1, ENC_NA);
275 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CTRL_MODE:
276 proto_tree_add_item(tree, hf_zbee_zcl_pump_config_control_attr_ctrl_mode, tvb, *offset, 1, ENC_NA);
280 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_PUMP_STATUS:
281 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pump_config_control_status, ett_zbee_zcl_pump_config_control_status, pump_status, ENC_LITTLE_ENDIAN);
285 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_ALARM_MASK:
286 proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_pump_config_control_alarm, ett_zbee_zcl_pump_config_control_alarm, alarm_mask, ENC_LITTLE_ENDIAN);
290 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_PRESSURE:
291 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_SPEED:
292 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_FLOW:
293 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_PRESSURE:
294 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_PRESSURE:
295 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_COMP_PRESSURE:
296 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER_MAX_COMP_PRESSURE:
297 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_SPEED:
298 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_SPEED:
299 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_FLOW:
300 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_FLOW:
301 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MIN_CONST_TEMP:
302 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_MAX_CONST_TEMP:
303 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_CAPACITY:
304 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_SPEED:
305 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_RUNNING_HOURS:
306 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_POWER:
307 case ZBEE_ZCL_ATTR_ID_PUMP_CONFIG_CONTROL_LIFETIME_ENERGY_CONS:
309 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
313 } /*dissect_zcl_pump_config_control_attr_data*/
317 *ZigBee ZCL Pump Configuration and Control cluster protocol registration routine.
321 proto_register_zbee_zcl_pump_config_control(void)
323 /* Setup list of header fields */
324 static hf_register_info hf[] = {
326 { &hf_zbee_zcl_pump_config_control_attr_id,
327 { "Attribute", "zbee_zcl_hvac.pump_config_control.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_pump_config_control_attr_names),
328 0x00, NULL, HFILL } },
330 { &hf_zbee_zcl_pump_config_control_attr_eff_opr_mode,
331 { "Effective Operation Mode", "zbee_zcl_hvac.pump_config_control.attr.effective_opr_mode", FT_UINT8, BASE_DEC, VALS(zbee_zcl_pump_config_control_operation_mode_names),
332 0x00, NULL, HFILL } },
334 { &hf_zbee_zcl_pump_config_control_attr_opr_mode,
335 { "Operation Mode", "zbee_zcl_hvac.pump_config_control.attr.opr_mode", FT_UINT8, BASE_DEC, VALS(zbee_zcl_pump_config_control_operation_mode_names),
336 0x00, NULL, HFILL } },
338 { &hf_zbee_zcl_pump_config_control_attr_eff_ctrl_mode,
339 { "Effective Control Mode", "zbee_zcl_hvac.pump_config_control.attr.ctrl_mode", FT_UINT8, BASE_DEC, VALS(zbee_zcl_pump_config_control_control_mode_names),
340 0x00, NULL, HFILL } },
342 { &hf_zbee_zcl_pump_config_control_attr_ctrl_mode,
343 { "Control Mode", "zbee_zcl_hvac.pump_config_control.attr.ctrl_mode", FT_UINT8, BASE_DEC, VALS(zbee_zcl_pump_config_control_control_mode_names),
344 0x00, NULL, HFILL } },
346 /* start Pump Status fields */
347 { &hf_zbee_zcl_pump_config_control_status,
348 { "Pump Status", "zbee_zcl_hvac.pump_config_control.attr.status", FT_UINT16, BASE_HEX, NULL,
349 0x00, NULL, HFILL } },
351 { &hf_zbee_zcl_pump_config_control_status_device_fault,
352 { "Device Fault", "zbee_zcl_hvac.pump_config_control.attr.status.device_fault", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
353 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_DEVICE_FAULT, NULL, HFILL } },
355 { &hf_zbee_zcl_pump_config_control_status_supply_fault,
356 { "Supply Fault", "zbee_zcl_hvac.pump_config_control.attr.status.supply_fault", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
357 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SUPPLY_FAULT, NULL, HFILL } },
359 { &hf_zbee_zcl_pump_config_control_status_speed_low,
360 { "Speed Low", "zbee_zcl_hvac.pump_config_control.attr.status.speed_low", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
361 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SPEED_LOW, NULL, HFILL } },
363 { &hf_zbee_zcl_pump_config_control_status_speed_high,
364 { "Speed High", "zbee_zcl_hvac.pump_config_control.attr.status.speed_high", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
365 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_SPEED_HIGH, NULL, HFILL } },
367 { &hf_zbee_zcl_pump_config_control_status_local_override,
368 { "Local Override", "zbee_zcl_hvac.pump_config_control.attr.status.local_override", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
369 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_LOCAL_OVERRIDE, NULL, HFILL } },
371 { &hf_zbee_zcl_pump_config_control_status_running,
372 { "Running", "zbee_zcl_hvac.pump_config_control.attr.status.running", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
373 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_RUNNING, NULL, HFILL } },
375 { &hf_zbee_zcl_pump_config_control_status_rem_pressure,
376 { "Remote Pressure", "zbee_zcl_hvac.pump_config_control.attr.status.rem_pressure", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
377 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_PRESSURE, NULL, HFILL } },
379 { &hf_zbee_zcl_pump_config_control_status_rem_flow,
380 { "Remote Flow", "zbee_zcl_hvac.pump_config_control.attr.status.rem_flow", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
381 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_FLOW, NULL, HFILL } },
383 { &hf_zbee_zcl_pump_config_control_status_rem_temp,
384 { "Remote Temperature", "zbee_zcl_hvac.pump_config_control.attr.status.rem_temp", FT_BOOLEAN, 8, TFS(&tfs_no_yes),
385 ZBEE_ZCL_PUMP_CONFIG_CONTROL_STATUS_REMOTE_TEMP, NULL, HFILL } },
386 /* end Pump Status fields */
388 /*start Alarm Mask fields*/
389 { &hf_zbee_zcl_pump_config_control_alarm,
390 { "Alarm Mask", "zbee_zcl_hvac.pump_config_control.attr.alarm", FT_UINT16, BASE_HEX, NULL,
391 0x00, NULL, HFILL } },
393 { &hf_zbee_zcl_pump_config_control_alarm_volt_too_low,
394 { "Supply voltage too low", "zbee_zcl_hvac.pump_config_control.attr.alarm.volt_too_low", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
395 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_VOLTAGE_TOO_LOW, NULL, HFILL } },
397 { &hf_zbee_zcl_pump_config_control_alarm_volt_too_high,
398 { "Supply voltage too high", "zbee_zcl_hvac.pump_config_control.attr.alarm.volt_too_high", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
399 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_VOLTAGE_TOO_HIGH, NULL, HFILL } },
401 { &hf_zbee_zcl_pump_config_control_alarm_pwr_missing_phase,
402 { "Power missing phase", "zbee_zcl_hvac.pump_config_control.attr.alarm.pwr_missing_phase", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
403 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PWR_MISSING_PHASE, NULL, HFILL } },
405 { &hf_zbee_zcl_pump_config_control_alarm_press_too_low,
406 { "System pressure too low", "zbee_zcl_hvac.pump_config_control.attr.alarm.press_too_low", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
407 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PRESSURE_TOO_LOW, NULL, HFILL } },
409 { &hf_zbee_zcl_pump_config_control_alarm_press_too_high,
410 { "System pressure too high", "zbee_zcl_hvac.pump_config_control.attr.alarm.press_too_high", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
411 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PRESSURE_TOO_HIGH, NULL, HFILL } },
413 { &hf_zbee_zcl_pump_config_control_alarm_dry_running,
414 { "Dry running", "zbee_zcl_hvac.pump_config_control.attr.alarm.dry_running", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
415 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_DRY_RUNNING, NULL, HFILL } },
417 { &hf_zbee_zcl_pump_config_control_alarm_mtr_temp_too_high,
418 { "Motor temperature too high", "zbee_zcl_hvac.pump_config_control.attr.alarm.mtr_temp_too_high", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
419 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_MTR_TEMP_TOO_HIGH, NULL, HFILL } },
421 { &hf_zbee_zcl_pump_config_control_alarm_pump_mtr_fatal_fail,
422 { "Pump motor has fatal failure", "zbee_zcl_hvac.pump_config_control.attr.alarm.mtr_fatal_fail", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
423 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PUMP_MTR_FATAL_FAILURE, NULL, HFILL } },
425 { &hf_zbee_zcl_pump_config_control_alarm_elec_temp_too_high,
426 { "Electronic temperature too high", "zbee_zcl_hvac.pump_config_control.attr.alarm.elec_temp_too_high", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
427 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_TEMP_TOO_HIGH, NULL, HFILL } },
429 { &hf_zbee_zcl_pump_config_control_alarm_pump_block,
430 { "Pump blocked", "zbee_zcl_hvac.pump_config_control.attr.alarm.pump_block", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
431 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_PUMP_BLOCK, NULL, HFILL } },
433 { &hf_zbee_zcl_pump_config_control_alarm_sensor_fail,
434 { "Sensor failure", "zbee_zcl_hvac.pump_config_control.attr.alarm.sensor_fail", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
435 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_SENSOR_FAILURE, NULL, HFILL } },
437 { &hf_zbee_zcl_pump_config_control_alarm_elec_non_fatal_fail,
438 { "Electronic non-fatal failure", "zbee_zcl_hvac.pump_config_control.attr.alarm.elec_non_fatal_fail", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
439 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_NON_FATAL_FAILURE, NULL, HFILL } },
441 { &hf_zbee_zcl_pump_config_control_alarm_fatal_fail,
442 { "Electronic fatal failure", "zbee_zcl_hvac.pump_config_control.attr.alarm.elec_fatal_fail", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
443 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_ELEC_FATAL_FAILURE, NULL, HFILL } },
445 { &hf_zbee_zcl_pump_config_control_alarm_gen_fault,
446 { "Genral fault", "zbee_zcl_hvac.pump_config_control.attr.alarm.gen_fault", FT_BOOLEAN, 8, TFS(&tfs_disabled_enabled),
447 ZBEE_ZCL_PUMP_CONFIG_CONTROL_ALARM_GENERAL_FAULT, NULL, HFILL } }
448 /* end Alarm Mask fields */
451 /* ZCL Pump Configuration and Control subtrees */
452 static gint *ett[ZBEE_ZCL_PUMP_CONFIG_CONTROL_NUM_ETT];
454 ett[0] = &ett_zbee_zcl_pump_config_control;
455 ett[1] = &ett_zbee_zcl_pump_config_control_status;
456 ett[2] = &ett_zbee_zcl_pump_config_control_alarm;
458 /* Register the ZigBee ZCL Pump Configuration and Control cluster protocol name and description */
459 proto_zbee_zcl_pump_config_control = proto_register_protocol("ZigBee ZCL Pump Configuration and Control", "ZCL Pump Configuration and Control", ZBEE_PROTOABBREV_ZCL_PUMP_CONFIG_CTRL);
460 proto_register_field_array(proto_zbee_zcl_pump_config_control, hf, array_length(hf));
461 proto_register_subtree_array(ett, array_length(ett));
463 /* Register the ZigBee ZCL Pump Configuration and Control dissector. */
464 register_dissector(ZBEE_PROTOABBREV_ZCL_PUMP_CONFIG_CTRL, dissect_zbee_zcl_pump_config_control, proto_zbee_zcl_pump_config_control);
465 } /*proto_register_zbee_zcl_pump_config_control*/
468 *Hands off the ZCL Pump Configuration and Control dissector.
472 proto_reg_handoff_zbee_zcl_pump_config_control(void)
474 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_PUMP_CONFIG_CTRL,
475 proto_zbee_zcl_pump_config_control,
476 ett_zbee_zcl_pump_config_control,
477 ZBEE_ZCL_CID_PUMP_CONFIG_CONTROL,
479 hf_zbee_zcl_pump_config_control_attr_id,
480 hf_zbee_zcl_pump_config_control_attr_id,
482 (zbee_zcl_fn_attr_data)dissect_zcl_pump_config_control_attr_data
484 } /*proto_reg_handoff_zbee_zcl_pump_config_control*/
487 /* ########################################################################## */
488 /* #### (0x0202) FAN CONTROL CLUSTER ######################################## */
489 /* ########################################################################## */
491 /*************************/
493 /*************************/
495 #define ZBEE_ZCL_FAN_CONTROL_NUM_ETT 1
498 #define ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE 0x0000 /* Fan Mode */
499 #define ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE_SEQUENCE 0x0001 /* Fan Mode Sequence */
501 /*Server commands received - none*/
503 /*Server commands generated - none*/
505 /*************************/
506 /* Function Declarations */
507 /*************************/
509 void proto_register_zbee_zcl_fan_control(void);
510 void proto_reg_handoff_zbee_zcl_fan_control(void);
512 /* Command Dissector Helpers */
513 static void dissect_zcl_fan_control_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
515 /* Private functions prototype */
517 /*************************/
518 /* Global Variables */
519 /*************************/
520 /* Initialize the protocol and registered fields */
521 static int proto_zbee_zcl_fan_control = -1;
523 static int hf_zbee_zcl_fan_control_attr_id = -1;
524 static int hf_zbee_zcl_fan_control_attr_fan_mode = -1;
525 static int hf_zbee_zcl_fan_control_attr_fan_mode_seq = -1;
527 /* Initialize the subtree pointers */
528 static gint ett_zbee_zcl_fan_control = -1;
531 static const value_string zbee_zcl_fan_control_attr_names[] = {
532 { ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE, "Fan Mode" },
533 { ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE_SEQUENCE, "Fan Mode Sequence" },
537 /*Fan Mode Sequence Values*/
538 static const value_string zbee_zcl_fan_control_fan_mode_seq_names[] = {
539 { 0x00, "Low/Med/High" },
540 { 0x01, "Low/High" },
541 { 0x02, "Low/Med/High/Auto" },
542 { 0x03, "Low/High/Auto" },
548 static const value_string zbee_zcl_fan_control_fan_mode_names[] = {
559 /*************************/
560 /* Function Bodies */
561 /*************************/
564 *ZigBee ZCL Fan Control cluster dissector for wireshark.
566 *@param tvb pointer to buffer containing raw packet.
567 *@param pinfo pointer to packet information fields
568 *@param tree pointer to data tree Wireshark uses to display packet.
572 dissect_zbee_zcl_fan_control(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
574 return tvb_captured_length(tvb);
575 } /*dissect_zbee_zcl_fan_control*/
579 *This function is called by ZCL foundation dissector in order to decode
581 *@param tree pointer to data tree Wireshark uses to display packet.
582 *@param tvb pointer to buffer containing raw packet.
583 *@param offset pointer to buffer offset
584 *@param attr_id attribute identifier
585 *@param data_type attribute data type
586 *@param client_attr ZCL client
589 dissect_zcl_fan_control_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr)
591 /* Dissect attribute data type and data */
594 case ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE:
595 proto_tree_add_item(tree, hf_zbee_zcl_fan_control_attr_fan_mode, tvb, *offset, 1, ENC_NA);
599 case ZBEE_ZCL_ATTR_ID_FAN_CONTROL_FAN_MODE_SEQUENCE:
600 proto_tree_add_item(tree, hf_zbee_zcl_fan_control_attr_fan_mode_seq, tvb, *offset, 1, ENC_NA);
605 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
609 } /*dissect_zcl_fan_control_attr_data*/
613 *ZigBee ZCL Fan Control cluster protocol registration routine.
617 proto_register_zbee_zcl_fan_control(void)
619 /* Setup list of header fields */
620 static hf_register_info hf[] = {
622 { &hf_zbee_zcl_fan_control_attr_id,
623 { "Attribute", "zbee_zcl_hvac.fan_control.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_fan_control_attr_names),
624 0x00, NULL, HFILL } },
626 { &hf_zbee_zcl_fan_control_attr_fan_mode,
627 { "Fan Mode", "zbee_zcl_hvac.fan_control.attr.fan_mode", FT_UINT8, BASE_HEX, VALS(zbee_zcl_fan_control_fan_mode_names),
628 0x00, NULL, HFILL } },
630 { &hf_zbee_zcl_fan_control_attr_fan_mode_seq,
631 { "Fan Mode Sequence", "zbee_zcl_hvac.fan_control.attr.fan_mode_seq", FT_UINT8, BASE_HEX, VALS(zbee_zcl_fan_control_fan_mode_seq_names),
632 0x00, NULL, HFILL } }
635 /* ZCL Fan Control subtrees */
636 static gint *ett[ZBEE_ZCL_FAN_CONTROL_NUM_ETT];
638 ett[0] = &ett_zbee_zcl_fan_control;
640 /* Register the ZigBee ZCL Fan Control cluster protocol name and description */
641 proto_zbee_zcl_fan_control = proto_register_protocol("ZigBee ZCL Fan Control", "ZCL Fan Control", ZBEE_PROTOABBREV_ZCL_FAN_CONTROL);
642 proto_register_field_array(proto_zbee_zcl_fan_control, hf, array_length(hf));
643 proto_register_subtree_array(ett, array_length(ett));
645 /* Register the ZigBee ZCL Fan Control dissector. */
646 register_dissector(ZBEE_PROTOABBREV_ZCL_FAN_CONTROL, dissect_zbee_zcl_fan_control, proto_zbee_zcl_fan_control);
647 } /*proto_register_zbee_zcl_fan_control*/
650 *Hands off the ZCL Fan Control dissector.
654 proto_reg_handoff_zbee_zcl_fan_control(void)
656 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_FAN_CONTROL,
657 proto_zbee_zcl_fan_control,
658 ett_zbee_zcl_fan_control,
659 ZBEE_ZCL_CID_FAN_CONTROL,
661 hf_zbee_zcl_fan_control_attr_id,
662 hf_zbee_zcl_fan_control_attr_id,
664 (zbee_zcl_fn_attr_data)dissect_zcl_fan_control_attr_data
666 } /*proto_reg_handoff_zbee_zcl_fan_control*/
669 /* ########################################################################## */
670 /* #### (0x0203) DEHUMIDIFICATION CONTROL CLUSTER ########################### */
671 /* ########################################################################## */
673 /*************************/
675 /*************************/
677 #define ZBEE_ZCL_DEHUMIDIFICATION_CONTROL_NUM_ETT 1
680 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY 0x0000 /* Relative Humidity */
681 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_COOLING 0x0001 /* Dehumidification Cooling */
682 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RH_DEHUM_SETPOINT 0x0010 /* Relative Humidity Dehumidification Setpoint */
683 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_MODE 0x0011 /* Relative Humidity Mode */
684 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_LOCKOUT 0x0012 /* Dehumidification Lockout */
685 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_HYSTERESIS 0x0013 /* Dehumidification Hysteresis */
686 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_MAX_COOL 0x0014 /* Dehumidification Max Cool */
687 #define ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_DISPLAY 0x0015 /* Relative Humidity Display */
689 /*Server commands received - none*/
691 /*Server commands generated - none*/
693 /*************************/
694 /* Function Declarations */
695 /*************************/
697 void proto_register_zbee_zcl_dehumidification_control(void);
698 void proto_reg_handoff_zbee_zcl_dehumidification_control(void);
700 /* Command Dissector Helpers */
701 static void dissect_zcl_dehumidification_control_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
703 /* Private functions prototype */
705 /*************************/
706 /* Global Variables */
707 /*************************/
708 /* Initialize the protocol and registered fields */
709 static int proto_zbee_zcl_dehumidification_control = -1;
711 static int hf_zbee_zcl_dehumidification_control_attr_id = -1;
712 static int hf_zbee_zcl_dehumidification_control_attr_rel_hum_mode = -1;
713 static int hf_zbee_zcl_dehumidification_control_attr_dehum_lockout = -1;
714 static int hf_zbee_zcl_dehumidification_control_attr_rel_hum_display = -1;
716 /* Initialize the subtree pointers */
717 static gint ett_zbee_zcl_dehumidification_control = -1;
720 static const value_string zbee_zcl_dehumidification_control_attr_names[] = {
721 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY, "Relative Humidity" },
722 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_COOLING, "Dehumidification Cooling" },
723 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RH_DEHUM_SETPOINT, "Relative Humidity Dehumidification Setpoint" },
724 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_MODE, "Relative Humidity Mode" },
725 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_LOCKOUT, "Dehumidification Lockout" },
726 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_HYSTERESIS, "Dehumidification Hysteresis" },
727 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_MAX_COOL, "Dehumidification Max Cool" },
728 { ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_DISPLAY, "Relative Humidity Display" },
732 /*Relative Humidity Mode Values*/
733 static const value_string zbee_zcl_dehumidification_control_rel_hum_mode_names[] = {
734 { 0x00, "Relative Humidity measured locally" },
735 { 0x01, "Relative Humidity updated over network" },
739 /*Dehumidification Lockout Values*/
740 static const value_string zbee_zcl_dehumidification_control_dehum_lockout_names[] = {
741 { 0x00, "Dehumidification is not allowed" },
742 { 0x01, "Dehumidification is allowed" },
746 /*Relative Humidity Display Values*/
747 static const value_string zbee_zcl_dehumidification_control_rel_hum_display_names[] = {
748 { 0x00, "Relative Humidity is not displayed" },
749 { 0x01, "Relative Humidity is displayed" },
753 /*************************/
754 /* Function Bodies */
755 /*************************/
758 *ZigBee ZCL Dehumidification Control cluster dissector for wireshark.
760 *@param tvb pointer to buffer containing raw packet.
761 *@param pinfo pointer to packet information fields
762 *@param tree pointer to data tree Wireshark uses to display packet.
766 dissect_zbee_zcl_dehumidification_control(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
768 return tvb_captured_length(tvb);;
769 } /*dissect_zbee_zcl_dehumidification_control*/
773 *This function is called by ZCL foundation dissector in order to decode
775 *@param tree pointer to data tree Wireshark uses to display packet.
776 *@param tvb pointer to buffer containing raw packet.
777 *@param offset pointer to buffer offset
778 *@param attr_id attribute identifier
779 *@param data_type attribute data type
780 *@param client_attr ZCL client
783 dissect_zcl_dehumidification_control_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr)
785 /* Dissect attribute data type and data */
788 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_MODE:
789 proto_tree_add_item(tree, hf_zbee_zcl_dehumidification_control_attr_rel_hum_mode, tvb, *offset, 1, ENC_NA);
793 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_LOCKOUT:
794 proto_tree_add_item(tree, hf_zbee_zcl_dehumidification_control_attr_dehum_lockout, tvb, *offset, 1, ENC_NA);
798 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY_DISPLAY:
799 proto_tree_add_item(tree, hf_zbee_zcl_dehumidification_control_attr_rel_hum_display, tvb, *offset, 1, ENC_NA);
803 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RELATIVE_HUMIDITY:
804 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_COOLING:
805 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_RH_DEHUM_SETPOINT:
806 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_HYSTERESIS:
807 case ZBEE_ZCL_ATTR_ID_DEHUMIDIFICATION_CONTROL_DEHUM_MAX_COOL:
809 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
813 } /*dissect_zcl_dehumidification_control_attr_data*/
817 *ZigBee ZCL Dehumidification Control cluster protocol registration routine.
821 proto_register_zbee_zcl_dehumidification_control(void)
823 /* Setup list of header fields */
824 static hf_register_info hf[] = {
826 { &hf_zbee_zcl_dehumidification_control_attr_id,
827 { "Attribute", "zbee_zcl_hvac.dehumidification_control.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_dehumidification_control_attr_names),
828 0x00, NULL, HFILL } },
830 { &hf_zbee_zcl_dehumidification_control_attr_rel_hum_mode,
831 { "Relative Humidity Mode", "zbee_zcl_hvac.dehumidification_control.attr.rel_humidity_mode", FT_UINT8, BASE_HEX, VALS(zbee_zcl_dehumidification_control_rel_hum_mode_names),
832 0x00, NULL, HFILL } },
834 { &hf_zbee_zcl_dehumidification_control_attr_dehum_lockout,
835 { "Dehumidification Lockout", "zbee_zcl_hvac.dehumidification_control.attr.dehumidification_lockout", FT_UINT8, BASE_HEX, VALS(zbee_zcl_dehumidification_control_dehum_lockout_names),
836 0x00, NULL, HFILL } },
838 { &hf_zbee_zcl_dehumidification_control_attr_rel_hum_display,
839 { "Relative Humidity Display", "zbee_zcl_hvac.dehumidification_control.attr.rel_humidity_display", FT_UINT8, BASE_HEX, VALS(zbee_zcl_dehumidification_control_rel_hum_display_names),
840 0x00, NULL, HFILL } }
843 /* ZCL Dehumidification Control subtrees */
844 static gint *ett[ZBEE_ZCL_DEHUMIDIFICATION_CONTROL_NUM_ETT];
846 ett[0] = &ett_zbee_zcl_dehumidification_control;
848 /* Register the ZigBee ZCL Dehumidification Control cluster protocol name and description */
849 proto_zbee_zcl_dehumidification_control = proto_register_protocol("ZigBee ZCL Dehumidification Control", "ZCL Dehumidification Control", ZBEE_PROTOABBREV_ZCL_DEHUMIDIFICATION_CONTROL);
850 proto_register_field_array(proto_zbee_zcl_dehumidification_control, hf, array_length(hf));
851 proto_register_subtree_array(ett, array_length(ett));
853 /* Register the ZigBee ZCL Dehumidification Control dissector. */
854 register_dissector(ZBEE_PROTOABBREV_ZCL_DEHUMIDIFICATION_CONTROL, dissect_zbee_zcl_dehumidification_control, proto_zbee_zcl_dehumidification_control);
855 } /*proto_register_zbee_zcl_dehumidification_control*/
858 *Hands off the ZCL Dehumidification Control dissector.
862 proto_reg_handoff_zbee_zcl_dehumidification_control(void)
864 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_DEHUMIDIFICATION_CONTROL,
865 proto_zbee_zcl_dehumidification_control,
866 ett_zbee_zcl_dehumidification_control,
867 ZBEE_ZCL_CID_DEHUMIDIFICATION_CONTROL,
869 hf_zbee_zcl_dehumidification_control_attr_id,
870 hf_zbee_zcl_dehumidification_control_attr_id,
872 (zbee_zcl_fn_attr_data)dissect_zcl_dehumidification_control_attr_data
874 } /*proto_reg_handoff_zbee_zcl_dehumidification_control*/
877 /* ########################################################################## */
878 /* #### (0x0204) THERMOSTAT USER INTERFACE CONFIGURATION CLUSTER ############ */
879 /* ########################################################################## */
881 /*************************/
883 /*************************/
885 #define ZBEE_ZCL_THERMOSTAT_UI_CONFIG_NUM_ETT 1
888 #define ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_TEMP_DISP_MODE 0x0000 /* Temperature Display Mode */
889 #define ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_KEYPAD_LOCKOUT 0x0001 /* Keypad Lockout */
891 /*Server commands received - none*/
893 /*Server commands generated - none*/
895 /*************************/
896 /* Function Declarations */
897 /*************************/
899 void proto_register_zbee_zcl_thermostat_ui_config(void);
900 void proto_reg_handoff_zbee_zcl_thermostat_ui_config(void);
902 /* Command Dissector Helpers */
903 static void dissect_zcl_thermostat_ui_config_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
905 /* Private functions prototype */
907 /*************************/
908 /* Global Variables */
909 /*************************/
910 /* Initialize the protocol and registered fields */
911 static int proto_zbee_zcl_thermostat_ui_config = -1;
913 static int hf_zbee_zcl_thermostat_ui_config_attr_id = -1;
914 static int hf_zbee_zcl_thermostat_ui_config_attr_temp_disp_mode = -1;
915 static int hf_zbee_zcl_thermostat_ui_config_attr_keypad_lockout = -1;
917 /* Initialize the subtree pointers */
918 static gint ett_zbee_zcl_thermostat_ui_config = -1;
921 static const value_string zbee_zcl_thermostat_ui_config_attr_names[] = {
922 { ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_TEMP_DISP_MODE, "Temperature Display Mode" },
923 { ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_KEYPAD_LOCKOUT, "Keypad Lockout" },
927 /*Temp Display Mode Values*/
928 static const value_string zbee_zcl_thermostat_ui_config_temp_disp_mode_names[] = {
929 { 0x00, "Temperature in degree Celsius" },
930 { 0x01, "Temperature in degree Fahrenheit" },
934 /*Keypad Lockout Values*/
935 static const value_string zbee_zcl_thermostat_ui_config_keypad_lockout_names[] = {
936 { 0x00, "No lockout" },
937 { 0x01, "Level 1 lockout" },
938 { 0x02, "Level 2 lockout" },
939 { 0x03, "Level 3 lockout" },
940 { 0x04, "Level 4 lockout" },
941 { 0x05, "Level 5 lockout" },
945 /*************************/
946 /* Function Bodies */
947 /*************************/
950 *ZigBee ZCL Thermostat User Interface Configuration cluster dissector for wireshark.
952 *@param tvb pointer to buffer containing raw packet.
953 *@param pinfo pointer to packet information fields
954 *@param tree pointer to data tree Wireshark uses to display packet.
958 dissect_zbee_zcl_thermostat_ui_config(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
960 return tvb_captured_length(tvb);
961 } /*dissect_zbee_zcl_thermostat_ui_config*/
965 *This function is called by ZCL foundation dissector in order to decode
967 *@param tree pointer to data tree Wireshark uses to display packet.
968 *@param tvb pointer to buffer containing raw packet.
969 *@param offset pointer to buffer offset
970 *@param attr_id attribute identifier
971 *@param data_type attribute data type
972 *@param client_attr ZCL client
975 dissect_zcl_thermostat_ui_config_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr)
977 /* Dissect attribute data type and data */
980 case ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_TEMP_DISP_MODE:
981 proto_tree_add_item(tree, hf_zbee_zcl_thermostat_ui_config_attr_temp_disp_mode, tvb, *offset, 1, ENC_NA);
985 case ZBEE_ZCL_ATTR_ID_THERMOSTAT_UI_CONFIG_KEYPAD_LOCKOUT:
986 proto_tree_add_item(tree, hf_zbee_zcl_thermostat_ui_config_attr_keypad_lockout, tvb, *offset, 1, ENC_NA);
991 dissect_zcl_attr_data(tvb, tree, offset, data_type, client_attr);
995 } /*dissect_zcl_thermostat_ui_config_attr_data*/
999 *ZigBee ZCL Thermostat User Interface Configuration cluster protocol registration routine.
1003 proto_register_zbee_zcl_thermostat_ui_config(void)
1005 /* Setup list of header fields */
1006 static hf_register_info hf[] = {
1008 { &hf_zbee_zcl_thermostat_ui_config_attr_id,
1009 { "Attribute", "zbee_zcl_hvac.thermostat_ui_config.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_thermostat_ui_config_attr_names),
1010 0x00, NULL, HFILL } },
1012 { &hf_zbee_zcl_thermostat_ui_config_attr_temp_disp_mode,
1013 { "Temperature Display Mode", "zbee_zcl_hvac.thermostat_ui_config.attr.temp_disp_mode", FT_UINT8, BASE_HEX, VALS(zbee_zcl_thermostat_ui_config_temp_disp_mode_names),
1014 0x00, NULL, HFILL } },
1016 { &hf_zbee_zcl_thermostat_ui_config_attr_keypad_lockout,
1017 { "Keypad Lockout", "zbee_zcl_hvac.thermostat_ui_config.attr.keypad_lockout", FT_UINT8, BASE_HEX, VALS(zbee_zcl_thermostat_ui_config_keypad_lockout_names),
1018 0x00, NULL, HFILL } }
1021 /* ZCL Thermostat User Interface Configuration subtrees */
1022 static gint *ett[ZBEE_ZCL_THERMOSTAT_UI_CONFIG_NUM_ETT];
1023 ett[0] = &ett_zbee_zcl_thermostat_ui_config;
1025 /* Register the ZigBee ZCL Thermostat User Interface Configuration cluster protocol name and description */
1026 proto_zbee_zcl_thermostat_ui_config = proto_register_protocol("ZigBee ZCL Thermostat User Interface Configuration", "ZCL Thermostat User Interface Configuration", ZBEE_PROTOABBREV_ZCL_THERMOSTAT_UI_CONFIG);
1027 proto_register_field_array(proto_zbee_zcl_thermostat_ui_config, hf, array_length(hf));
1028 proto_register_subtree_array(ett, array_length(ett));
1030 /* Register the ZigBee ZCL Thermostat User Interface Configuration dissector. */
1031 register_dissector(ZBEE_PROTOABBREV_ZCL_THERMOSTAT_UI_CONFIG, dissect_zbee_zcl_thermostat_ui_config, proto_zbee_zcl_thermostat_ui_config);
1032 } /*proto_register_zbee_zcl_thermostat_ui_config*/
1035 *Hands off the ZCL Thermostat User Interface Configuration dissector.
1039 proto_reg_handoff_zbee_zcl_thermostat_ui_config(void)
1041 zbee_zcl_init_cluster( ZBEE_PROTOABBREV_ZCL_THERMOSTAT_UI_CONFIG,
1042 proto_zbee_zcl_thermostat_ui_config,
1043 ett_zbee_zcl_thermostat_ui_config,
1044 ZBEE_ZCL_CID_THERMOSTAT_UI_CONFIG,
1046 hf_zbee_zcl_thermostat_ui_config_attr_id,
1047 hf_zbee_zcl_thermostat_ui_config_attr_id,
1049 (zbee_zcl_fn_attr_data)dissect_zcl_thermostat_ui_config_attr_data
1051 } /*proto_reg_handoff_zbee_zcl_thermostat_ui_config*/
1054 * Editor modelines - https://www.wireshark.org/tools/modelines.html
1059 * indent-tabs-mode: nil
1062 * vi: set shiftwidth=4 tabstop=8 expandtab:
1063 * :indentSize=4:tabSize=8:noTabs=true: