aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-zbee-zcl-meas-sensing.c
diff options
context:
space:
mode:
authorAditya Jain <aditya.jain@samsung.com>2015-12-15 15:13:44 +0530
committerAnders Broman <a.broman58@gmail.com>2015-12-17 05:59:44 +0000
commita3f97a5b5b29adcbb01def5cf0e6abc4d183e808 (patch)
tree9e91c8bd1cbf4ac4a99706bb9d8f06f163441daf /epan/dissectors/packet-zbee-zcl-meas-sensing.c
parentf7c125b30b4d2ae3af5c933477daebf6b0d8c00d (diff)
Adding Illuminance Level Sensing Cluster for zigbee
Change-Id: I1c1b476f9f604e76ad9b71eee90b44143e4b7f71 Reviewed-on: https://code.wireshark.org/review/12648 Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-zbee-zcl-meas-sensing.c')
-rw-r--r--epan/dissectors/packet-zbee-zcl-meas-sensing.c240
1 files changed, 240 insertions, 0 deletions
diff --git a/epan/dissectors/packet-zbee-zcl-meas-sensing.c b/epan/dissectors/packet-zbee-zcl-meas-sensing.c
index 0136f2d4e9..6a5870839d 100644
--- a/epan/dissectors/packet-zbee-zcl-meas-sensing.c
+++ b/epan/dissectors/packet-zbee-zcl-meas-sensing.c
@@ -373,6 +373,246 @@ proto_reg_handoff_zbee_zcl_illum_meas(void)
/* ########################################################################## */
+/* #### (0x0401) ILLUMINANCE LEVEL SENSING CLUSTER ########################## */
+/* ########################################################################## */
+
+/*************************/
+/* Defines */
+/*************************/
+
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_NUM_GENERIC_ETT 1
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_NUM_ETT ZBEE_ZCL_ILLUM_LEVEL_SEN_NUM_GENERIC_ETT
+
+/* Attributes */
+#define ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LEVEL_STATUS 0x0000 /* Level Status */
+#define ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LIGHT_SENSOR_TYPE 0x0001 /* Light Sensor Type */
+#define ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_ILLUM_TARGET_LEVEL 0x0010 /* Illuminance Target Level */
+
+/* Server Commands Received - None */
+
+/* Server Commands Generated - None */
+
+#define ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_TOO_LOW_VALUE 0x0000 /* Too Low Value */
+#define ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_INVALID_VALUE 0x8000 /* Invalid Value */
+
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_SENSOR_TYPE_PHOTODIODE 0x00 /* Photodiode */
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_SENSOR_TYPE_CMOS 0x01 /* CMOS */
+
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_ON_TARGET 0x00 /* Illuminance on Target */
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_BELOW_TARGET 0x01 /* Illuminance below Target */
+#define ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_ABOVE_TARGET 0x02 /* Illuminance above Target */
+
+/*************************/
+/* Function Declarations */
+/*************************/
+
+void proto_register_zbee_zcl_illum_level_sen(void);
+void proto_reg_handoff_zbee_zcl_illum_level_sen(void);
+
+/* Command Dissector Helpers */
+static void dissect_zcl_illum_level_sen_attr_data (proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type);
+
+/* Private functions prototype */
+static void decode_illum_level_sen_target_level (gchar *s, guint16 value);
+
+/*************************/
+/* Global Variables */
+/*************************/
+
+/* Initialize the protocol and registered fields */
+static int proto_zbee_zcl_illum_level_sen = -1;
+
+static int hf_zbee_zcl_illum_level_sen_attr_id = -1;
+static int hf_zbee_zcl_illum_level_sen_level_status = -1;
+static int hf_zbee_zcl_illum_level_sen_light_sensor_type = -1;
+static int hf_zbee_zcl_illum_level_sen_illum_target_level = -1;
+
+/* Initialize the subtree pointers */
+static gint ett_zbee_zcl_illum_level_sen = -1;
+
+/* Attributes */
+static const value_string zbee_zcl_illum_level_sen_attr_names[] = {
+ { ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LEVEL_STATUS, "Level Status" },
+ { ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LIGHT_SENSOR_TYPE, "Light Sensor Type" },
+ { ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_ILLUM_TARGET_LEVEL, "Illuminance Target Level" },
+ { 0, NULL }
+};
+
+static const value_string zbee_zcl_illum_level_sen_sensor_type_names[] = {
+ { ZBEE_ZCL_ILLUM_LEVEL_SEN_SENSOR_TYPE_PHOTODIODE, "Photodiode" },
+ { ZBEE_ZCL_ILLUM_LEVEL_SEN_SENSOR_TYPE_CMOS, "CMOS" },
+ { 0, NULL }
+};
+
+static const value_string zbee_zcl_illum_level_sen_level_status_names[] = {
+ { ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_ON_TARGET, "Illuminance on Target" },
+ { ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_BELOW_TARGET, "Illuminance below Target" },
+ { ZBEE_ZCL_ILLUM_LEVEL_SEN_ILLUM_ABOVE_TARGET, "Illuminance above Target" },
+ { 0, NULL }
+};
+
+/*************************/
+/* Function Bodies */
+/*************************/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zbee_zcl_illum_level_sen
+ * DESCRIPTION
+ * ZigBee ZCL Illuminance Level Sensing 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
+ * none
+ *---------------------------------------------------------------
+ */
+static int
+dissect_zbee_zcl_illum_level_sen(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tree *tree _U_, void* data _U_)
+{
+ return tvb_captured_length(tvb);
+} /*dissect_zbee_zcl_illum_level_sen*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * dissect_zcl_illum_level_sen_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
+ *---------------------------------------------------------------
+ */
+static void
+dissect_zcl_illum_level_sen_attr_data(proto_tree *tree, tvbuff_t *tvb, guint *offset, guint16 attr_id, guint data_type)
+{
+ /* Dissect attribute data type and data */
+ switch ( attr_id ) {
+
+ case ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LEVEL_STATUS:
+ proto_tree_add_item(tree, hf_zbee_zcl_illum_level_sen_level_status, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_LIGHT_SENSOR_TYPE:
+ proto_tree_add_item(tree, hf_zbee_zcl_illum_level_sen_light_sensor_type, tvb, *offset, 1, ENC_LITTLE_ENDIAN);
+ *offset += 1;
+ break;
+
+ case ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_ILLUM_TARGET_LEVEL:
+ proto_tree_add_item(tree, hf_zbee_zcl_illum_level_sen_illum_target_level, tvb, *offset, 2, ENC_LITTLE_ENDIAN);
+ *offset += 2;
+ break;
+
+ default:
+ dissect_zcl_attr_data(tvb, tree, offset, data_type);
+ break;
+ }
+} /*dissect_zcl_illum_level_sen_attr_data*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * decode_illum_level_sen_target_level
+ * DESCRIPTION
+ * this function decodes illuminance value
+ * PARAMETERS
+ * guint *s - string to display
+ * guint16 value - value to decode
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+static void
+decode_illum_level_sen_target_level(gchar *s, guint16 value)
+{
+ if (value == ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_TOO_LOW_VALUE)
+ g_snprintf(s, ITEM_LABEL_LENGTH, "Value too low to be measured");
+ else if (value == ZBEE_ZCL_ATTR_ID_ILLUM_LEVEL_SEN_INVALID_VALUE)
+ g_snprintf(s, ITEM_LABEL_LENGTH, "Invalid value");
+ else
+ /* calculate lux value from measured value according to doc 07-5123-04 */
+ g_snprintf(s, ITEM_LABEL_LENGTH, "%d (=%f [lx])", value, pow(10,value/10000.0)-1);
+
+ return;
+} /*decode_illum_level_sen_value*/
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_register_zbee_zcl_illum_level_sen
+ * DESCRIPTION
+ * this function registers the ZCL Illuminance Level Sensing dissector
+ * and all its information.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_register_zbee_zcl_illum_level_sen(void)
+{
+ static hf_register_info hf[] = {
+
+ { &hf_zbee_zcl_illum_level_sen_attr_id,
+ { "Attribute", "zbee_zcl_meas_sensing.illumlevelsen.attr_id", FT_UINT16, BASE_HEX, VALS(zbee_zcl_illum_level_sen_attr_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_illum_level_sen_level_status,
+ { "Level Status", "zbee_zcl_meas_sensing.illumlevelsen.attr.level_status", FT_UINT8, BASE_HEX, VALS(zbee_zcl_illum_level_sen_level_status_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_illum_level_sen_light_sensor_type,
+ { "Light Sensor Type", "zbee_zcl_meas_sensing.illumlevelsen.attr.light_sensor_type", FT_UINT8, BASE_HEX, VALS(zbee_zcl_illum_level_sen_sensor_type_names),
+ 0x00, NULL, HFILL } },
+
+ { &hf_zbee_zcl_illum_level_sen_illum_target_level,
+ { "Target Level", "zbee_zcl_meas_sensing.illumlevelsen.attr.target_level", FT_UINT16, BASE_CUSTOM, CF_FUNC(decode_illum_level_sen_target_level),
+ 0x00, NULL, HFILL } }
+ };
+
+ /* Register the ZigBee ZCL Illuminance Level Sensing cluster protocol name and description */
+ proto_zbee_zcl_illum_level_sen = proto_register_protocol("ZigBee ZCL Illuminance Level Sensing", "ZCL Illuminance Level Sensing", ZBEE_PROTOABBREV_ZCL_ILLUMLEVELSEN);
+ proto_register_field_array(proto_zbee_zcl_illum_level_sen, hf, array_length(hf));
+
+ /* Register the ZigBee ZCL Illuminance Level Sensing dissector. */
+ register_dissector(ZBEE_PROTOABBREV_ZCL_ILLUMLEVELSEN, dissect_zbee_zcl_illum_level_sen, proto_zbee_zcl_illum_level_sen);
+
+} /*proto_register_zbee_zcl_illum_level_sen*/
+
+
+/*FUNCTION:------------------------------------------------------
+ * NAME
+ * proto_reg_handoff_zbee_zcl_illum_level_sen
+ * DESCRIPTION
+ * Hands off the ZCL Illuminance Level Sensing dissector.
+ * PARAMETERS
+ * none
+ * RETURNS
+ * none
+ *---------------------------------------------------------------
+ */
+void
+proto_reg_handoff_zbee_zcl_illum_level_sen(void)
+{
+ zbee_zcl_init_cluster( proto_zbee_zcl_illum_level_sen,
+ ett_zbee_zcl_illum_level_sen,
+ ZBEE_ZCL_CID_ILLUMINANCE_LEVEL_SENSING,
+ hf_zbee_zcl_illum_level_sen_attr_id,
+ -1, -1,
+ (zbee_zcl_fn_attr_data)dissect_zcl_illum_level_sen_attr_data
+ );
+} /*proto_reg_handoff_zbee_zcl_illum_level_sen*/
+
+
+
+/* ########################################################################## */
/* #### (0x0402) TEMPERATURE MEASUREMENT CLUSTER ############################ */
/* ########################################################################## */