aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-zbee-zcl-general.c
diff options
context:
space:
mode:
authorDarshan Nevgi <darshan.sn@samsung.com>2016-01-12 12:42:06 +0530
committerAnders Broman <a.broman58@gmail.com>2016-01-12 15:35:18 +0000
commit62374b5d4f25ed2944550ce7d5a4d6562245a16e (patch)
tree986daf133ae212ec9e792d33bb90d5c53f7b854b /epan/dissectors/packet-zbee-zcl-general.c
parent4802325ea6d7bc4e3436f1ac1f10d1f1789a7c0e (diff)
Adding Analog Input Basic,Analog Output Basic,Analog Value Basic Clusters for Zigbee
Change-Id: I17cc19d1309670ac5d30ea8a190575ca77e476cb Reviewed-on: https://code.wireshark.org/review/13211 Petri-Dish: Anders Broman <a.broman58@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-zbee-zcl-general.c')
-rw-r--r--epan/dissectors/packet-zbee-zcl-general.c822
1 files changed, 822 insertions, 0 deletions
diff --git a/epan/dissectors/packet-zbee-zcl-general.c b/epan/dissectors/packet-zbee-zcl-general.c
index a3b4548170..242ce89857 100644
--- a/epan/dissectors/packet-zbee-zcl-general.c
+++ b/epan/dissectors/packet-zbee-zcl-general.c
@@ -4929,6 +4929,828 @@ static const value_string zbee_zcl_status_values[] = {
};
/* ########################################################################## */
+/* #### (0x000C) ANALOG INPUT (BASIC) CLUSTER ############################### */
+/* ########################################################################## */
+
+/*************************/
+/* Defines */
+/*************************/
+
+/*Attributes*/
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_DESCRIPTION 0x001C /* Description */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MAX_PRESENT_VALUE 0x0041 /* Max Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MIN_PRESENT_VALUE 0x0045 /* Min Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_OUT_OF_SERVICE 0x0051 /* Out of Service */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_PRESENT_VALUE 0x0055 /* Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RELIABILITY 0x0067 /* Reliability */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RESOLUTION 0x006A /* Resolution */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_STATUS_FLAGS 0x006F /* Status Flags */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_ENGINEERING_UNITS 0x0075 /* Engineering Units */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_APPLICATION_TYPE 0x0100 /* Application Type */
+
+/*Server commands received - none*/
+
+/*Server commands generated - none*/
+
+/*************************/
+/* Function Declarations */
+/*************************/
+
+void proto_register_zbee_zcl_analog_input_basic(void);
+void proto_reg_handoff_zbee_zcl_analog_input_basic(void);
+
+/* Command Dissector Helpers */
+static void dissect_zcl_analog_input_basic_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type);
+
+/* Private functions prototype */
+
+/*************************/
+/* Global Variables */
+/*************************/
+/* Initialize the protocol and registered fields */
+static int proto_zbee_zcl_analog_input_basic = -1;
+
+static int hf_zbee_zcl_analog_input_basic_attr_id = -1;
+static int hf_zbee_zcl_analog_input_basic_reliability = -1;
+static int hf_zbee_zcl_analog_input_basic_status_flags = -1;
+static int hf_zbee_zcl_analog_input_basic_status_in_alarm = -1;
+static int hf_zbee_zcl_analog_input_basic_status_fault = -1;
+static int hf_zbee_zcl_analog_input_basic_status_overridden = -1;
+static int hf_zbee_zcl_analog_input_basic_status_out_of_service = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_zbee_zcl_analog_input_basic = -1;
+static gint ett_zbee_zcl_analog_input_basic_status_flags = -1;
+
+/* Attributes */
+static const value_string zbee_zcl_analog_input_basic_attr_names[] = {
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_DESCRIPTION, "Description" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MAX_PRESENT_VALUE, "Max Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MIN_PRESENT_VALUE, "Min Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_OUT_OF_SERVICE, "Out of Service" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_PRESENT_VALUE, "Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RELIABILITY, "Reliability" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RESOLUTION, "Resolution" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_STATUS_FLAGS, "Status Flags" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_ENGINEERING_UNITS, "Engineering Units" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_APPLICATION_TYPE, "Application Type" },
+ { 0, NULL }
+};
+
+/*************************/
+/* Function Bodies */
+/*************************/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zbee_zcl_analog_input_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Input Basic cluster dissector for wireshark.
+ * PARAMETERS
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * packet_info *pinfo - pointer to packet information fields
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * RETURNS
+ * int - length of parsed data.
+ *---------------------------------------------------------------
+ */
+
+static int
+dissect_zbee_zcl_analog_input_basic(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
+{
+ return tvb_captured_length(tvb);
+} /*dissect_zbee_zcl_analog_input_basic*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zcl_analog_input_basic_attr_data
+ * DESCRIPTION
+ * this function is called by ZCL foundation dissector in order to decode
+ * specific cluster attributes data.
+ * PARAMETERS
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * guint *offset - pointer to buffer offset
+ * guint16 attr_id - attribute identifier
+ * guint data_type - attribute data type
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+dissect_zcl_analog_input_basic_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type)
+{
+ static const int * status_flags[] = {
+ &hf_zbee_zcl_analog_input_basic_status_in_alarm,
+ &hf_zbee_zcl_analog_input_basic_status_fault,
+ &hf_zbee_zcl_analog_input_basic_status_overridden,
+ &hf_zbee_zcl_analog_input_basic_status_out_of_service,
+ NULL
+ };
+
+ /* Dissect attribute data type and data */
+ switch (attr_id) {
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RELIABILITY:
+ proto_tree_add_item(tree, hf_zbee_zcl_analog_input_basic_reliability, tvb, *offset, 1, ENC_NA);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_STATUS_FLAGS:
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_analog_input_basic_status_flags, ett_zbee_zcl_analog_input_basic_status_flags, status_flags, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_DESCRIPTION:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MAX_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_MIN_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_OUT_OF_SERVICE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_RESOLUTION:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_ENGINEERING_UNITS:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_INPUT_BASIC_APPLICATION_TYPE:
+ default:
+ dissect_zcl_attr_data(tvb, tree, offset, data_type);
+ break;
+ }
+
+} /*dissect_zcl_analog_input_basic_attr_data*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_register_zbee_zcl_analog_input_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Input Basic cluster protocol registration routine.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_register_zbee_zcl_analog_input_basic(void)
+{
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+
+ { &hf_zbee_zcl_analog_input_basic_attr_id,
+ { "Attribute", "zbee_zcl_general.analog_input_basic.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_analog_input_basic_attr_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_input_basic_reliability,
+ { "Reliability", "zbee_zcl_general.analog_input_basic.attr.reliability", FT_UINT8, BASE_HEX, VALS(zbee_zcl_reliability_names),
+ 0x00, NULL, HFILL } },
+
+ /* start Status Flags fields */
+ { &hf_zbee_zcl_analog_input_basic_status_flags,
+ { "Status Flags", "zbee_zcl_general.analog_input_basic.attr.status", FT_UINT8, BASE_HEX, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_input_basic_status_in_alarm,
+ { "In Alarm Status", "zbee_zcl_general.analog_input_basic.attr.status.in_alarm", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_IN_ALARM, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_input_basic_status_fault,
+ { "Fault Status", "zbee_zcl_general.analog_input_basic.attr.status.fault", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_FAULT, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_input_basic_status_overridden,
+ { "Overridden Status", "zbee_zcl_general.analog_input_basic.attr.status.overridden", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OVERRIDDEN, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_input_basic_status_out_of_service,
+ { "Out of Service Status", "zbee_zcl_general.analog_input_basic.attr.status.out_of_service", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OUT_OF_SERVICE, NULL, HFILL } }
+ /* end Status Flags fields */
+ };
+
+ /* ZCL Analog Input Basic subtrees */
+ static gint *ett[]={
+ &ett_zbee_zcl_analog_input_basic,
+ &ett_zbee_zcl_analog_input_basic_status_flags
+ };
+
+
+
+ /* Register the ZigBee ZCL Analog Input Basic cluster protocol name and description */
+ proto_zbee_zcl_analog_input_basic = proto_register_protocol("ZigBee ZCL Analog Input Basic", "ZCL Analog Input Basic", ZBEE_PROTOABBREV_ZCL_ANALOG_INPUT_BASIC);
+ proto_register_field_array(proto_zbee_zcl_analog_input_basic, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ /* Register the ZigBee ZCL Analog Input Basic dissector. */
+ register_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_INPUT_BASIC, dissect_zbee_zcl_analog_input_basic, proto_zbee_zcl_analog_input_basic);
+} /*proto_register_zbee_zcl_analog_input_basic*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_reg_handoff_zbee_zcl_analog_input_basic
+ * DESCRIPTION
+ * Hands off the ZCL Analog Input Basic dissector.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_reg_handoff_zbee_zcl_analog_input_basic(void)
+{
+ dissector_handle_t analog_input_basic_handle;
+
+ /* Register our dissector with the ZigBee application dissectors. */
+ analog_input_basic_handle = find_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_INPUT_BASIC);
+ dissector_add_uint("zbee.zcl.cluster", ZBEE_ZCL_CID_ANALOG_INPUT_BASIC, analog_input_basic_handle);
+
+ zbee_zcl_init_cluster( proto_zbee_zcl_analog_input_basic,
+ ett_zbee_zcl_analog_input_basic,
+ ZBEE_ZCL_CID_ANALOG_INPUT_BASIC,
+ hf_zbee_zcl_analog_input_basic_attr_id,
+ -1, -1,
+ (zbee_zcl_fn_attr_data)dissect_zcl_analog_input_basic_attr_data
+ );
+} /*proto_reg_handoff_zbee_zcl_analog_input_basic*/
+
+
+/* ########################################################################## */
+/* #### (0x000D) ANALOG OUTPUT (BASIC) CLUSTER ############################## */
+/* ########################################################################## */
+
+/*************************/
+/* Defines */
+/*************************/
+
+/*Attributes*/
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_DESCRIPTION 0x001C /* Description */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MAX_PRESENT_VALUE 0x0041 /* Max Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MIN_PRESENT_VALUE 0x0045 /* Min Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_OUT_OF_SERVICE 0x0051 /* Out of Service */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRESENT_VALUE 0x0055 /* Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRIORITY_ARRAY 0x0057 /* Priority Array */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELIABILITY 0x0067 /* Reliability */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELINQUISH_DEFAULT 0x0068 /* Relinquish Default */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RESOLUTION 0x006A /* Resolution */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_STATUS_FLAGS 0x006F /* Status Flags */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_ENGINEERING_UNITS 0x0075 /* Engineering Units */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_APPLICATION_TYPE 0x0100 /* Application Type */
+
+/*Server commands received - none*/
+
+/*Server commands generated - none*/
+
+/*************************/
+/* Function Declarations */
+/*************************/
+
+void proto_register_zbee_zcl_analog_output_basic(void);
+void proto_reg_handoff_zbee_zcl_analog_output_basic(void);
+
+/* Command Dissector Helpers */
+static void dissect_zcl_analog_output_basic_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type);
+
+/* Private functions prototype */
+
+/*************************/
+/* Global Variables */
+/*************************/
+/* Initialize the protocol and registered fields */
+static int proto_zbee_zcl_analog_output_basic = -1;
+
+static int hf_zbee_zcl_analog_output_basic_attr_id = -1;
+static int hf_zbee_zcl_analog_output_basic_reliability = -1;
+static int hf_zbee_zcl_analog_output_basic_status_flags = -1;
+static int hf_zbee_zcl_analog_output_basic_status_in_alarm = -1;
+static int hf_zbee_zcl_analog_output_basic_status_fault = -1;
+static int hf_zbee_zcl_analog_output_basic_status_overridden = -1;
+static int hf_zbee_zcl_analog_output_basic_status_out_of_service = -1;
+static int hf_zbee_zcl_analog_output_basic_priority_array_bool = -1;
+static int hf_zbee_zcl_analog_output_basic_priority_array_sing_prec = -1;
+static int hf_zbee_zcl_analog_output_basic_priority_array = -1;
+static int hf_zbee_zcl_analog_output_basic_structure = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_zbee_zcl_analog_output_basic = -1;
+static gint ett_zbee_zcl_analog_output_basic_status_flags = -1;
+static gint ett_zbee_zcl_analog_output_basic_priority_array = -1;
+static gint ett_zbee_zcl_analog_output_basic_priority_array_structure = -1;
+
+/* Attributes */
+static const value_string zbee_zcl_analog_output_basic_attr_names[] = {
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_DESCRIPTION, "Description" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MAX_PRESENT_VALUE, "Max Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MIN_PRESENT_VALUE, "Min Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_OUT_OF_SERVICE, "Out of Service" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRESENT_VALUE, "Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRIORITY_ARRAY, "Priority Array" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELIABILITY, "Reliability" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELINQUISH_DEFAULT, "Relinquish Default" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RESOLUTION, "Resolution" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_STATUS_FLAGS, "Status Flags" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_ENGINEERING_UNITS, "Engineering Units" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_APPLICATION_TYPE, "Application Type" },
+ { 0, NULL }
+};
+
+/*************************/
+/* Function Bodies */
+/*************************/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zbee_zcl_analog_output_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Output Basic cluster dissector for wireshark.
+ * PARAMETERS
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * packet_info *pinfo - pointer to packet information fields
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * RETURNS
+ * int - length of parsed data.
+ *---------------------------------------------------------------
+ */
+
+static int
+dissect_zbee_zcl_analog_output_basic(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
+{
+ return tvb_captured_length(tvb);
+} /*dissect_zbee_zcl_analog_output_basic*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zcl_analog_output_basic_attr_data
+ * DESCRIPTION
+ * this function is called by ZCL foundation dissector in order to decode
+ * specific cluster attributes data.
+ * PARAMETERS
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * guint *offset - pointer to buffer offset
+ * guint16 attr_id - attribute identifier
+ * guint data_type - attribute data type
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+dissect_zcl_analog_output_basic_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type)
+{
+ proto_item *ti = NULL, *tj = NULL;
+ proto_tree *sub_tree = NULL, *sub = NULL;
+ int i;
+
+ static const int * status_flags[] = {
+ &hf_zbee_zcl_analog_output_basic_status_in_alarm,
+ &hf_zbee_zcl_analog_output_basic_status_fault,
+ &hf_zbee_zcl_analog_output_basic_status_overridden,
+ &hf_zbee_zcl_analog_output_basic_status_out_of_service,
+ NULL
+ };
+
+ /* Dissect attribute data type and data */
+ switch (attr_id) {
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRIORITY_ARRAY:
+ ti = proto_tree_add_item(tree,hf_zbee_zcl_analog_output_basic_priority_array, tvb, *offset, 80, ENC_NA);
+ sub_tree = proto_item_add_subtree(ti, ett_zbee_zcl_analog_output_basic_priority_array);
+
+ for(i = 1; i <= 16; i++)
+ {
+ tj = proto_tree_add_item(sub_tree, hf_zbee_zcl_analog_output_basic_structure, tvb, *offset, 5, ENC_NA);
+ proto_item_append_text(tj," %d",i);
+ sub = proto_item_add_subtree(tj, ett_zbee_zcl_analog_output_basic_priority_array_structure);
+ proto_tree_add_item(sub, hf_zbee_zcl_analog_output_basic_priority_array_bool, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ proto_tree_add_item(sub, hf_zbee_zcl_analog_output_basic_priority_array_sing_prec, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
+ *offset += 4;
+ }
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELIABILITY:
+ proto_tree_add_item(tree, hf_zbee_zcl_analog_output_basic_reliability, tvb, *offset, 1, ENC_NA);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_STATUS_FLAGS:
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_analog_output_basic_status_flags, ett_zbee_zcl_analog_output_basic_status_flags, status_flags, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_DESCRIPTION:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MAX_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_MIN_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_OUT_OF_SERVICE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RELINQUISH_DEFAULT:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_RESOLUTION:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_ENGINEERING_UNITS:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_OUTPUT_BASIC_APPLICATION_TYPE:
+ default:
+ dissect_zcl_attr_data(tvb, tree, offset, data_type);
+ break;
+ }
+
+} /*dissect_zcl_analog_output_basic_attr_data*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_register_zbee_zcl_analog_output_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Output Basic cluster protocol registration routine.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_register_zbee_zcl_analog_output_basic(void)
+{
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+
+ { &hf_zbee_zcl_analog_output_basic_attr_id,
+ { "Attribute", "zbee_zcl_general.analog_output_basic.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_analog_output_basic_attr_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_reliability,
+ { "Reliability", "zbee_zcl_general.analog_output_basic.attr.reliability", FT_UINT8, BASE_HEX, VALS(zbee_zcl_reliability_names),
+ 0x00, NULL, HFILL } },
+
+ /* start Status Flags fields */
+ { &hf_zbee_zcl_analog_output_basic_status_flags,
+ { "Status Flags", "zbee_zcl_general.analog_output_basic.attr.status", FT_UINT8, BASE_HEX, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_status_in_alarm,
+ { "In Alarm Status", "zbee_zcl_general.analog_output_basic.attr.status.in_alarm", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_IN_ALARM, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_status_fault,
+ { "Fault Status", "zbee_zcl_general.analog_output_basic.attr.status.falut", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_FAULT, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_status_overridden,
+ { "Overridden Status", "zbee_zcl_general.analog_output_basic.attr.status.overridden", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OVERRIDDEN, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_status_out_of_service,
+ { "Out of Service Status", "zbee_zcl_general.analog_output_basic.attr.status.out_of_service", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OUT_OF_SERVICE, NULL, HFILL } },
+ /* end Status Flags fields */
+
+ { &hf_zbee_zcl_analog_output_basic_priority_array_bool,
+ { "Valid/Invalid", "zbee_zcl_general.analog_output_basic.attr.priority_array.bool", FT_BOOLEAN, 8, TFS(&tfs_invalid_valid),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_priority_array_sing_prec,
+ { "Priority Value", "zbee_zcl_general.analog_output_basic.attr.priority_array.sing_prec", FT_UINT16, BASE_HEX, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_priority_array,
+ { "Priority Array", "zbee_zcl_general.analog_output_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_output_basic_structure,
+ { "Structure", "zbee_zcl_general.analog_output_basic.structure.", FT_NONE, BASE_NONE, NULL,
+ 0x00, NULL, HFILL } }
+ };
+
+ /* ZCL Analog Output Basic subtrees */
+ static gint *ett[]={
+ &ett_zbee_zcl_analog_output_basic,
+ &ett_zbee_zcl_analog_output_basic_status_flags,
+ &ett_zbee_zcl_analog_output_basic_priority_array,
+ &ett_zbee_zcl_analog_output_basic_priority_array_structure
+ };
+
+
+
+ /* Register the ZigBee ZCL Analog Output Basic cluster protocol name and description */
+ proto_zbee_zcl_analog_output_basic = proto_register_protocol("ZigBee ZCL Analog Output Basic", "ZCL Analog Output Basic", ZBEE_PROTOABBREV_ZCL_ANALOG_OUTPUT_BASIC);
+ proto_register_field_array(proto_zbee_zcl_analog_output_basic, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ /* Register the ZigBee ZCL Analog Output Basic dissector. */
+ register_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_OUTPUT_BASIC, dissect_zbee_zcl_analog_output_basic, proto_zbee_zcl_analog_output_basic);
+} /*proto_register_zbee_zcl_analog_output_basic*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_reg_handoff_zbee_zcl_analog_output_basic
+ * DESCRIPTION
+ * Hands off the ZCL Analog Output Basic dissector.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_reg_handoff_zbee_zcl_analog_output_basic(void)
+{
+ dissector_handle_t analog_output_basic_handle;
+
+ /* Register our dissector with the ZigBee application dissectors. */
+ analog_output_basic_handle = find_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_OUTPUT_BASIC);
+ dissector_add_uint("zbee.zcl.cluster", ZBEE_ZCL_CID_ANALOG_OUTPUT_BASIC, analog_output_basic_handle);
+
+ zbee_zcl_init_cluster( proto_zbee_zcl_analog_output_basic,
+ ett_zbee_zcl_analog_output_basic,
+ ZBEE_ZCL_CID_ANALOG_OUTPUT_BASIC,
+ hf_zbee_zcl_analog_output_basic_attr_id,
+ -1, -1,
+ (zbee_zcl_fn_attr_data)dissect_zcl_analog_output_basic_attr_data
+ );
+} /*proto_reg_handoff_zbee_zcl_analog_output_basic*/
+
+
+/* ########################################################################## */
+/* #### (0x000E) ANALOG VALUE (BASIC) CLUSTER ############################### */
+/* ########################################################################## */
+
+/*************************/
+/* Defines */
+/*************************/
+
+/*Attributes*/
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_DESCRIPTION 0x001C /* Description */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_OUT_OF_SERVICE 0x0051 /* Out of Service */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRESENT_VALUE 0x0055 /* Present Value */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRIORITY_ARRAY 0x0057 /* Priority Array */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELIABILITY 0x0067 /* Reliability */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELINQUISH_DEFAULT 0x0068 /* Relinquish Default */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_STATUS_FLAGS 0x006F /* Status Flags */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_ENGINEERING_UNITS 0x0075 /* Engineering Units */
+#define ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_APPLICATION_TYPE 0x0100 /* Application Type */
+
+/*Server commands received - none*/
+
+/*Server commands generated - none*/
+
+/*************************/
+/* Function Declarations */
+/*************************/
+
+void proto_register_zbee_zcl_analog_value_basic(void);
+void proto_reg_handoff_zbee_zcl_analog_value_basic(void);
+
+/* Command Dissector Helpers */
+static void dissect_zcl_analog_value_basic_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type);
+
+/* Private functions prototype */
+
+/*************************/
+/* Global Variables */
+/*************************/
+/* Initialize the protocol and registered fields */
+static int proto_zbee_zcl_analog_value_basic = -1;
+
+static int hf_zbee_zcl_analog_value_basic_attr_id = -1;
+static int hf_zbee_zcl_analog_value_basic_reliability = -1;
+static int hf_zbee_zcl_analog_value_basic_status_flags = -1;
+static int hf_zbee_zcl_analog_value_basic_status_in_alarm = -1;
+static int hf_zbee_zcl_analog_value_basic_status_fault = -1;
+static int hf_zbee_zcl_analog_value_basic_status_overridden = -1;
+static int hf_zbee_zcl_analog_value_basic_status_out_of_service = -1;
+static int hf_zbee_zcl_analog_value_basic_priority_array_bool = -1;
+static int hf_zbee_zcl_analog_value_basic_priority_array_sing_prec = -1;
+static int hf_zbee_zcl_analog_value_basic_priority_array = -1;
+static int hf_zbee_zcl_analog_value_basic_structure = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_zbee_zcl_analog_value_basic = -1;
+static gint ett_zbee_zcl_analog_value_basic_status_flags = -1;
+static gint ett_zbee_zcl_analog_value_basic_priority_array = -1;
+static gint ett_zbee_zcl_analog_value_basic_priority_array_structure = -1;
+
+/* Attributes */
+static const value_string zbee_zcl_analog_value_basic_attr_names[] = {
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_DESCRIPTION, "Description" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_OUT_OF_SERVICE, "Out of Service" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRESENT_VALUE, "Present Value" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRIORITY_ARRAY, "Priority Array" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELIABILITY, "Reliability" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELINQUISH_DEFAULT, "Relinquish Default" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_STATUS_FLAGS, "Status Flags" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_ENGINEERING_UNITS, "Engineering Units" },
+ { ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_APPLICATION_TYPE, "Application Type" },
+ { 0, NULL }
+};
+
+/*************************/
+/* Function Bodies */
+/*************************/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zbee_zcl_analog_value_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Value Basic cluster dissector for wireshark.
+ * PARAMETERS
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * packet_info *pinfo - pointer to packet information fields
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * RETURNS
+ * int - length of parsed data.
+ *---------------------------------------------------------------
+ */
+
+static int
+dissect_zbee_zcl_analog_value_basic(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
+{
+ return tvb_captured_length(tvb);
+} /*dissect_zbee_zcl_analog_value_basic*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zcl_analog_value_basic_attr_data
+ * DESCRIPTION
+ * this function is called by ZCL foundation dissector in order to decode
+ * specific cluster attributes data.
+ * PARAMETERS
+ * proto_tree *tree - pointer to data tree Wireshark uses to display packet.
+ * tvbuff_t *tvb - pointer to buffer containing raw packet.
+ * guint *offset - pointer to buffer offset
+ * guint16 attr_id - attribute identifier
+ * guint data_type - attribute data type
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+dissect_zcl_analog_value_basic_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type)
+{
+ proto_item *ti = NULL, *tj = NULL;
+ proto_tree *sub_tree = NULL, *sub = NULL;
+ int i;
+
+ static const int * status_flags[] = {
+ &hf_zbee_zcl_analog_value_basic_status_in_alarm,
+ &hf_zbee_zcl_analog_value_basic_status_fault,
+ &hf_zbee_zcl_analog_value_basic_status_overridden,
+ &hf_zbee_zcl_analog_value_basic_status_out_of_service,
+ NULL
+ };
+
+ /* Dissect attribute data type and data */
+ switch (attr_id) {
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRIORITY_ARRAY:
+ ti = proto_tree_add_item(tree,hf_zbee_zcl_analog_value_basic_priority_array, tvb, *offset, 80, ENC_NA);
+ sub_tree = proto_item_add_subtree(ti, ett_zbee_zcl_analog_value_basic_priority_array);
+
+ for( i = 1; i <= 16; i++)
+ {
+ tj = proto_tree_add_item(sub_tree, hf_zbee_zcl_analog_value_basic_structure, tvb, *offset, 5, ENC_NA);
+ proto_item_append_text(tj," %d",i);
+ sub = proto_item_add_subtree(tj, ett_zbee_zcl_analog_value_basic_priority_array_structure);
+ proto_tree_add_item(sub, hf_zbee_zcl_analog_value_basic_priority_array_bool, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ proto_tree_add_item(sub, hf_zbee_zcl_analog_value_basic_priority_array_sing_prec, tvb, *offset, 4, ENC_LITTLE_ENDIAN);
+ *offset += 4;
+ }
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELIABILITY:
+ proto_tree_add_item(tree, hf_zbee_zcl_analog_value_basic_reliability, tvb, *offset, 1, ENC_NA);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_STATUS_FLAGS:
+ proto_tree_add_bitmask(tree, tvb, *offset, hf_zbee_zcl_analog_value_basic_status_flags, ett_zbee_zcl_analog_value_basic_status_flags, status_flags, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_DESCRIPTION:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_OUT_OF_SERVICE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_PRESENT_VALUE:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_RELINQUISH_DEFAULT:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_ENGINEERING_UNITS:
+ case ZBEE_ZCL_ATTR_ID_ANALOG_VALUE_BASIC_APPLICATION_TYPE:
+ default:
+ dissect_zcl_attr_data(tvb, tree, offset, data_type);
+ break;
+ }
+
+} /*dissect_zcl_analog_value_basic_attr_data*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_register_zbee_zcl_analog_value_basic
+ * DESCRIPTION
+ * ZigBee ZCL Analog Value Basic cluster protocol registration routine.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_register_zbee_zcl_analog_value_basic(void)
+{
+ /* Setup list of header fields */
+ static hf_register_info hf[] = {
+
+ { &hf_zbee_zcl_analog_value_basic_attr_id,
+ { "Attribute", "zbee_zcl_general.analog_value_basic.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_analog_value_basic_attr_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_reliability,
+ { "Reliability", "zbee_zcl_general.analog_value_basic.attr.reliability", FT_UINT8, BASE_HEX, VALS(zbee_zcl_reliability_names),
+ 0x00, NULL, HFILL } },
+
+ /* start Status Flags fields */
+ { &hf_zbee_zcl_analog_value_basic_status_flags,
+ { "Status Flags", "zbee_zcl_general.analog_value_basic.attr.status", FT_UINT8, BASE_HEX, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_status_in_alarm,
+ { "In Alarm Status", "zbee_zcl_general.analog_value_basic.attr.status.in_alarm", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_IN_ALARM, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_status_fault,
+ { "Fault Status", "zbee_zcl_general.analog_value_basic.attr.status.fault", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_FAULT, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_status_overridden,
+ { "Overridden Status", "zbee_zcl_general.analog_value_basic.attr.status.overridden", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OVERRIDDEN, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_status_out_of_service,
+ { "Out of Service Status", "zbee_zcl_general.analog_value_basic.attr.status.out_of_service", FT_UINT8, BASE_DEC, VALS(zbee_zcl_status_values),
+ ZBEE_ZCL_STATUS_OUT_OF_SERVICE, NULL, HFILL } },
+ /* end Status Flags fields */
+
+ { &hf_zbee_zcl_analog_value_basic_priority_array_bool,
+ { "Valid/Invalid", "zbee_zcl_general.analog_value_basic.attr.priority_array.bool", FT_BOOLEAN, 8, TFS(&tfs_invalid_valid),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_priority_array_sing_prec,
+ { "Priority Value", "zbee_zcl_general.analog_value_basic.attr.priority_array.sing_prec", FT_UINT16, BASE_HEX, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_priority_array,
+ { "Priority Array", "zbee_zcl_general.analog_value_basic.priority_array.", FT_NONE, BASE_NONE, NULL,
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_analog_value_basic_structure,
+ { "Structure", "zbee_zcl_general.analog_value_basic.structure.", FT_NONE, BASE_NONE, NULL,
+ 0x00, NULL, HFILL } }
+ };
+
+ /* ZCL Analog Value Basic subtrees */
+ static gint *ett[]={
+ &ett_zbee_zcl_analog_value_basic,
+ &ett_zbee_zcl_analog_value_basic_status_flags,
+ &ett_zbee_zcl_analog_value_basic_priority_array,
+ &ett_zbee_zcl_analog_value_basic_priority_array_structure
+ };
+
+ /* Register the ZigBee ZCL Analog Value Basic cluster protocol name and description */
+ proto_zbee_zcl_analog_value_basic = proto_register_protocol("ZigBee ZCL Analog Value Basic", "ZCL Analog Value Basic", ZBEE_PROTOABBREV_ZCL_ANALOG_VALUE_BASIC);
+ proto_register_field_array(proto_zbee_zcl_analog_value_basic, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
+
+ /* Register the ZigBee ZCL Analog Value Basic dissector. */
+ register_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_VALUE_BASIC, dissect_zbee_zcl_analog_value_basic, proto_zbee_zcl_analog_value_basic);
+} /*proto_register_zbee_zcl_analog_value_basic*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_reg_handoff_zbee_zcl_analog_value_basic
+ * DESCRIPTION
+ * Hands off the ZCL Analog Value Basic dissector.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_reg_handoff_zbee_zcl_analog_value_basic(void)
+{
+ dissector_handle_t analog_value_basic_handle;
+
+ /* Register our dissector with the ZigBee application dissectors. */
+ analog_value_basic_handle = find_dissector(ZBEE_PROTOABBREV_ZCL_ANALOG_VALUE_BASIC);
+ dissector_add_uint("zbee.zcl.cluster", ZBEE_ZCL_CID_ANALOG_VALUE_BASIC, analog_value_basic_handle);
+
+ zbee_zcl_init_cluster( proto_zbee_zcl_analog_value_basic,
+ ett_zbee_zcl_analog_value_basic,
+ ZBEE_ZCL_CID_ANALOG_VALUE_BASIC,
+ hf_zbee_zcl_analog_value_basic_attr_id,
+ -1, -1,
+ (zbee_zcl_fn_attr_data)dissect_zcl_analog_value_basic_attr_data
+ );
+} /*proto_reg_handoff_zbee_zcl_analog_value_basic*/
+
+
+/* ########################################################################## */
/* #### (0x000F) BINARY INPUT (BASIC) CLUSTER ############################### */
/* ########################################################################## */