aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-zbee-zcl-se.c
diff options
context:
space:
mode:
authorNikita Ryaskin <nikita.ryaskin@dsr-corporation.com>2019-03-01 16:41:39 +0300
committerAnders Broman <a.broman58@gmail.com>2019-03-04 13:01:15 +0000
commit94e676d5789f3c642ea70206d961a14ff00eab34 (patch)
treee020642a86c2bd1692c548c085f879cbf808572f /epan/dissectors/packet-zbee-zcl-se.c
parentb2d93718ec82b9d4f68f7e9fcb6fc707f41a0f16 (diff)
ZBEE ZCL: updated Energy Management Cluster dissection.
Implemented commands payload dissectors. Change-Id: Ic1141cacf60754c97cb8e455d85e63239ecc7c79 Reviewed-on: https://code.wireshark.org/review/32307 Reviewed-by: Kenneth Soerensen <knnthsrnsn@gmail.com> Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-zbee-zcl-se.c')
-rw-r--r--epan/dissectors/packet-zbee-zcl-se.c326
1 files changed, 323 insertions, 3 deletions
diff --git a/epan/dissectors/packet-zbee-zcl-se.c b/epan/dissectors/packet-zbee-zcl-se.c
index 9bd53492f5..8724295a19 100644
--- a/epan/dissectors/packet-zbee-zcl-se.c
+++ b/epan/dissectors/packet-zbee-zcl-se.c
@@ -10472,8 +10472,11 @@ VALUE_STRING_ARRAY(zbee_zcl_energy_management_srv_tx_cmd_names);
void proto_register_zbee_zcl_energy_management(void);
void proto_reg_handoff_zbee_zcl_energy_management(void);
+static void dissect_zbee_zcl_energy_management_manage_event (tvbuff_t *tvb, proto_tree *tree, guint *offset);
+static void dissect_zbee_zcl_energy_management_report_event_status (tvbuff_t *tvb, proto_tree *tree, guint *offset);
+
/* Attribute Dissector Helpers */
-static void dissect_zcl_energy_management_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
+static void dissect_zcl_energy_management_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type, gboolean client_attr);
/*************************/
/* Global Variables */
@@ -10486,9 +10489,97 @@ static int hf_zbee_zcl_energy_management_srv_tx_cmd_id = -1;
static int hf_zbee_zcl_energy_management_srv_rx_cmd_id = -1;
static int hf_zbee_zcl_energy_management_attr_id = -1;
static int hf_zbee_zcl_energy_management_attr_reporting_status = -1;
+static int hf_zbee_zcl_energy_management_issuer_event_id = -1;
+static int hf_zbee_zcl_energy_management_device_class = -1;
+static int hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace = -1;
+static int hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters = -1;
+static int hf_zbee_zcl_energy_management_device_class_water_heater = -1;
+static int hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi = -1;
+static int hf_zbee_zcl_energy_management_device_class_smart_appliances = -1;
+static int hf_zbee_zcl_energy_management_device_class_irrigation_pump = -1;
+static int hf_zbee_zcl_energy_management_device_class_managed_c_i_loads= -1;
+static int hf_zbee_zcl_energy_management_device_class_simple_misc_loads = -1;
+static int hf_zbee_zcl_energy_management_device_class_exterior_lighting = -1;
+static int hf_zbee_zcl_energy_management_device_class_interior_lighting = -1;
+static int hf_zbee_zcl_energy_management_device_class_electric_vehicle = -1;
+static int hf_zbee_zcl_energy_management_device_class_generation_systems = -1;
+static int hf_zbee_zcl_energy_management_device_class_reserved = -1;
+static int hf_zbee_zcl_energy_management_utility_enrollment_group = -1;
+static int hf_zbee_zcl_energy_management_action_required = -1;
+static int hf_zbee_zcl_energy_management_action_required_opt_out_of_event = -1;
+static int hf_zbee_zcl_energy_management_action_required_opt_into_event = -1;
+static int hf_zbee_zcl_energy_management_action_required_disable_duty_cycling = -1;
+static int hf_zbee_zcl_energy_management_action_required_enable_duty_cycling = -1;
+static int hf_zbee_zcl_energy_management_action_required_reserved = -1;
+
+static int hf_zbee_zcl_energy_management_report_event_issuer_event_id = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_status = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_status_time = -1;
+static int hf_zbee_zcl_energy_management_report_event_criticality_level_applied = -1;
+static int hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied = -1;
+static int hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied = -1;
+static int hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage = -1;
+static int hf_zbee_zcl_energy_management_report_event_duty_cycle = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_control = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time = -1;
+static int hf_zbee_zcl_energy_management_report_event_event_control_reserved = -1;
+
+
+static const int* zbee_zcl_energy_management_device_classes[] = {
+ &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
+ &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
+ &hf_zbee_zcl_energy_management_device_class_water_heater,
+ &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
+ &hf_zbee_zcl_energy_management_device_class_smart_appliances,
+ &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
+ &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
+ &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
+ &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
+ &hf_zbee_zcl_energy_management_device_class_interior_lighting,
+ &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
+ &hf_zbee_zcl_energy_management_device_class_generation_systems,
+ &hf_zbee_zcl_energy_management_device_class_reserved,
+ NULL
+};
+
+static const int* zbee_zcl_energy_management_action_required[] = {
+ &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
+ &hf_zbee_zcl_energy_management_action_required_opt_into_event,
+ &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
+ &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
+ &hf_zbee_zcl_energy_management_action_required_reserved,
+ NULL
+};
+
+static const int* hf_zbee_zcl_energy_management_event_control_flags[] = {
+ &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
+ &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
+ &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
+ NULL
+};
/* Initialize the subtree pointers */
static gint ett_zbee_zcl_energy_management = -1;
+static gint ett_zbee_zcl_energy_management_device_class = -1;
+static gint ett_zbee_zcl_energy_management_actions_required = -1;
+static gint ett_zbee_zcl_energy_management_report_event_event_control = -1;
+
+static const range_string zbee_zcl_energy_management_load_control_event_criticality_level[] = {
+ { 0x0, 0x0, "Reserved" },
+ { 0x1, 0x1, "Green" },
+ { 0x2, 0x2, "1" },
+ { 0x3, 0x3, "2" },
+ { 0x4, 0x4, "3" },
+ { 0x5, 0x5, "4" },
+ { 0x6, 0x6, "5" },
+ { 0x7, 0x7, "Emergency" },
+ { 0x8, 0x8, "Planned Outage" },
+ { 0x9, 0x9, "Service Disconnect" },
+ { 0x0A, 0x0F, "Utility Defined" },
+ { 0x10, 0xFF, "Reserved" },
+ { 0, 0, NULL }
+};
/*************************/
/* Function Bodies */
@@ -10527,6 +10618,97 @@ dissect_zcl_energy_management_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *
*@param pinfo pointer to packet information fields
*@param tree pointer to data tree Wireshark uses to display packet.
*/
+static void
+dissect_zbee_zcl_energy_management_manage_event(tvbuff_t *tvb, proto_tree *tree, guint *offset)
+{
+ /* Issuer Event ID */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_issuer_event_id, tvb,
+ *offset, 4, ENC_LITTLE_ENDIAN);
+ *offset += 4;
+
+ /* Device Class */
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_device_class, ett_zbee_zcl_energy_management_device_class,
+ zbee_zcl_energy_management_device_classes, ENC_LITTLE_ENDIAN);
+ *offset += 2;
+
+ /* Utility Enrollment Group */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_utility_enrollment_group, tvb,
+ *offset, 1, ENC_NA);
+ *offset += 1;
+
+ /* Action(s) Required */
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_energy_management_action_required, ett_zbee_zcl_energy_management_actions_required,
+ zbee_zcl_energy_management_action_required, ENC_NA);
+ *offset += 1;
+}
+
+/**
+ *ZigBee ZCL Energy Management cluster dissector for wireshark.
+ *
+ *@param tvb pointer to buffer containing raw packet.
+ *@param pinfo pointer to packet information fields
+ *@param tree pointer to data tree Wireshark uses to display packet.
+*/
+static void
+dissect_zbee_zcl_energy_management_report_event_status(tvbuff_t *tvb, proto_tree *tree, guint *offset)
+{
+ /* Event Control */
+ nstime_t event_status_time;
+
+ /* Issuer Event ID */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_issuer_event_id, tvb,
+ *offset, 4, ENC_LITTLE_ENDIAN);
+ *offset += 4;
+
+ /* Event Status */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_event_status, tvb, *offset, 1, ENC_NA);
+ *offset += 1;
+
+ /* Event Status Time */
+ event_status_time.secs = (time_t)tvb_get_letohl(tvb, *offset) + ZBEE_ZCL_NSTIME_UTC_OFFSET;
+ event_status_time.nsecs = 0;
+ proto_tree_add_time(tree, hf_zbee_zcl_energy_management_report_event_event_status_time, tvb, *offset, 4, &event_status_time);
+ *offset += 4;
+
+ /* Criticality Level Applied */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_criticality_level_applied, tvb,
+ *offset, 1, ENC_NA);
+ *offset += 1;
+
+ /* Cooling Temperature Set Point Applied */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied, tvb,
+ *offset, 2, ENC_LITTLE_ENDIAN);
+ *offset += 2;
+
+ /* Heating Temperature Set Point Applied */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied, tvb,
+ *offset, 2, ENC_LITTLE_ENDIAN);
+ *offset += 2;
+
+ /* Average Load Adjustment Percentage Applied */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage, tvb,
+ *offset, 1, ENC_NA);
+ *offset += 1;
+
+ /* Duty Cycle Applied */
+ proto_tree_add_item(tree, hf_zbee_zcl_energy_management_report_event_duty_cycle, tvb,
+ *offset, 1, ENC_NA);
+ *offset += 1;
+
+ /* Event Control */
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_drlc_report_event_event_control, ett_zbee_zcl_energy_management_report_event_event_control,
+ hf_zbee_zcl_energy_management_event_control_flags, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+
+} /*dissect_zbee_zcl_energy_management_report_event_status*/
+
+/**
+ *ZigBee ZCL Energy Management cluster dissector for wireshark.
+ *
+ *@param tvb pointer to buffer containing raw packet.
+ *@param pinfo pointer to packet information fields
+ *@param tree pointer to data tree Wireshark uses to display packet.
+*/
static int
dissect_zbee_zcl_energy_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
{
@@ -10560,7 +10742,7 @@ dissect_zbee_zcl_energy_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree
switch (cmd_id) {
case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_MANAGE_EVENT:
- /* Add function to dissect payload */
+ dissect_zbee_zcl_energy_management_manage_event(tvb, tree, &offset);
break;
default:
@@ -10586,7 +10768,7 @@ dissect_zbee_zcl_energy_management(tvbuff_t *tvb, packet_info *pinfo, proto_tree
switch (cmd_id) {
case ZBEE_ZCL_CMD_ID_ENERGY_MANAGEMENT_REPORT_EVENT_STATUS:
- /* Add function to dissect payload */
+ dissect_zbee_zcl_energy_management_report_event_status(tvb, tree, &offset);
break;
default:
@@ -10623,11 +10805,149 @@ proto_register_zbee_zcl_energy_management(void)
{ "Command", "zbee_zcl_se.energy_management.cmd.srv_rx.id", FT_UINT8, BASE_HEX, VALS(zbee_zcl_energy_management_srv_rx_cmd_names),
0x00, NULL, HFILL } },
+ { &hf_zbee_zcl_energy_management_issuer_event_id,
+ { "Issuer Event ID", "zbee_zcl_se.energy_management.issuer_id",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class,
+ { "Device Class", "zbee_zcl_se.energy_management.device_class",
+ FT_UINT16, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_hvac_compressor_or_furnace,
+ { "HVAC Compressor or Furnace", "zbee_zcl_se.energy_management.device_class.hvac_compressor_or_furnace",
+ FT_BOOLEAN, 16, NULL, 0x0001, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_strip_heaters_baseboard_heaters,
+ { "Strip Heaters/Baseboard Heaters", "zbee_zcl_se.energy_management.device_class.strip_heaters_baseboard_heaters",
+ FT_BOOLEAN, 16, NULL, 0x0002, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_water_heater,
+ { "Water Heater", "zbee_zcl_se.energy_management.device_class.water_heater",
+ FT_BOOLEAN, 16, NULL, 0x0004, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_pool_pump_spa_jacuzzi,
+ { "Pool Pump/Spa/Jacuzzi", "zbee_zcl_se.energy_management.device_class.pool_pump_spa_jacuzzi",
+ FT_BOOLEAN, 16, NULL, 0x0008, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_smart_appliances,
+ { "Smart Appliances", "zbee_zcl_se.energy_management.device_class.smart_appliances",
+ FT_BOOLEAN, 16, NULL, 0x0010, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_irrigation_pump,
+ { "Irrigation Pump", "zbee_zcl_se.energy_management.device_class.irrigation_pump",
+ FT_BOOLEAN, 16, NULL, 0x0020, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_managed_c_i_loads,
+ { "Managed Commercial & Industrial (C&I) loads", "zbee_zcl_se.energy_management.device_class.managed_c_i_loads",
+ FT_BOOLEAN, 16, NULL, 0x0040, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_simple_misc_loads,
+ { "Simple misc. (Residential On/Off) loads", "zbee_zcl_se.energy_management.device_class.simple_misc_loads",
+ FT_BOOLEAN, 16, NULL, 0x0080, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_exterior_lighting,
+ { "Exterior Lighting", "zbee_zcl_se.energy_management.device_class.exterior_lighting",
+ FT_BOOLEAN, 16, NULL, 0x0100, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_interior_lighting,
+ { "Interior Lighting", "zbee_zcl_se.energy_management.device_class.interior_lighting",
+ FT_BOOLEAN, 16, NULL, 0x0200, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_electric_vehicle,
+ { "Electric Vehicle", "zbee_zcl_se.energy_management.device_class.electric_vehicle",
+ FT_BOOLEAN, 16, NULL, 0x0400, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_generation_systems,
+ { "Generation Systems", "zbee_zcl_se.energy_management.device_class.generation_systems",
+ FT_BOOLEAN, 16, NULL, 0x0800, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_device_class_reserved ,
+ { "Reserved", "zbee_zcl_se.energy_management.device_class.reserved",
+ FT_UINT16, BASE_HEX, NULL, 0xF000, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_utility_enrollment_group,
+ { "Utility Enrollment Group", "zbee_zcl_se.energy_management.utility_enrollment_group",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required,
+ { "Action(s) Required", "zbee_zcl_se.energy_management.action_required",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required_opt_out_of_event,
+ { "Opt Out of Event", "zbee_zcl_se.energy_management.action_required.opt_out_of_event",
+ FT_BOOLEAN, 8, NULL, 0x01, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required_opt_into_event,
+ { "Opt Into Event", "zbee_zcl_se.energy_management.action_required.opt_into_event",
+ FT_BOOLEAN, 8, NULL, 0x02, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required_disable_duty_cycling,
+ { "Disable Duty Cycling", "zbee_zcl_se.energy_management.action_required.disable_duty_cycling",
+ FT_BOOLEAN, 8, NULL, 0x04, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required_enable_duty_cycling,
+ { "Enable Duty Cycling", "zbee_zcl_se.energy_management.action_required.enable_duty_cycling",
+ FT_BOOLEAN, 8, NULL, 0x08, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_action_required_reserved,
+ { "Reserved", "zbee_zcl_se.energy_management.action_required.reserved",
+ FT_UINT8, BASE_HEX, NULL, 0xF0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_issuer_event_id,
+ { "Issuer Event ID", "zbee_zcl_se.energy_management.report_event.issuer_id",
+ FT_UINT32, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_status,
+ { "Event Status", "zbee_zcl_se.energy_management.report_event.event_status",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_status_time,
+ { "Event Status Time", "zbee_zcl_se.energy_management.report_event.event_status_time",
+ FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_criticality_level_applied ,
+ { "Criticality Level Applied", "zbee_zcl_se.energy_management.report_event.criticality_level_applied",
+ FT_UINT8, BASE_HEX | BASE_RANGE_STRING, RVALS(zbee_zcl_energy_management_load_control_event_criticality_level), 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_cooling_temp_set_point_applied,
+ { "Cooling Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.cooling_temperature_set_point_applied",
+ FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_heating_temp_set_point_applied,
+ { "Heating Temperature Set Point Applied", "zbee_zcl_se.energy_management.report_event.heating_temperature_set_point_applied",
+ FT_INT16, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_temp_set_point), 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_average_load_adjustment_percentage ,
+ { "Average Load Adjustment Percentage Applied", "zbee_zcl_se.energy_management.report_event.average_load_adjustment_percentage_applied",
+ FT_INT8, BASE_CUSTOM, CF_FUNC(decode_zcl_drlc_average_load_adjustment_percentage), 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_duty_cycle,
+ { "Duty Cycle Applied", "zbee_zcl_se.energy_management.report_event.duty_cycle_applied",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_control,
+ { "Event Control", "zbee_zcl_se.energy_management.report_event.event_control",
+ FT_UINT8, BASE_HEX, NULL, 0x0, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_start_time,
+ { "Randomize Start time", "zbee_zcl_se.energy_management.report_event.randomize_start_time",
+ FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_start_tfs), 0x01, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_control_randomize_duration_time,
+ { "Randomize Duration time", "zbee_zcl_se.energy_management.report_event.randomize_duration_time",
+ FT_BOOLEAN, 8, TFS(&zbee_zcl_drlc_randomize_duration_tfs), 0x02, NULL, HFILL } },
+
+ { &hf_zbee_zcl_energy_management_report_event_event_control_reserved,
+ { "Reserved", "zbee_zcl_se.energy_management.reserved",
+ FT_UINT8, BASE_HEX, NULL, 0xFC, NULL, HFILL } },
};
/* ZCL Energy_Management subtrees */
gint *ett[] = {
&ett_zbee_zcl_energy_management,
+ &ett_zbee_zcl_energy_management_device_class,
+ &ett_zbee_zcl_energy_management_actions_required,
+ &ett_zbee_zcl_energy_management_report_event_event_control,
};
/* Register the ZigBee ZCL Energy Management cluster protocol name and description */