Fix problems related to global commands
authorsaerome.kim <saerome.kim@samsung.com>
Thu, 9 Feb 2017 06:01:54 +0000 (15:01 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:07:20 +0000 (18:07 +0900)
 - discover_genereated / discover_received
 - read attributes

Change-Id: Id885df5778d567f96f791df91a50238188b6113b
Signed-off-by: saerome.kim <saerome.kim@samsung.com>
lib/zbl-dbus.c
test/zcl-global-cmd.c

index 0b8edcfcaa7cf00890922497e08a9e237b0b8295..c8e3b94f55405977e2095b42dc800c4349b9a53a 100644 (file)
@@ -2361,7 +2361,9 @@ GLOBAL_CONFIGURE_REPORTING_REQ_OUT:
                cb(0, 0, 0, NULL, 0, container->userdata);
        }
        break;
-       case ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_RECEIVED_REQ: {
+       /* GLOBAL_DISCOVER_COMMAND_RECEIVED and GLOBAL_DISCOVER_COMMAND_GENERATED should be handled as same way */
+       case ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_RECEIVED_REQ:
+       case ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_GENERATED_REQ: {
                zb_zcl_global_discover_cmds_rsp cb = container->cb;
 
                nwk_addr addr16;
@@ -2398,11 +2400,6 @@ GLOBAL_CONFIGURE_REPORTING_REQ_OUT:
                free(cmd_data);
        }
        break;
-       case ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_GENERATED_REQ: {
-               zb_zcl_global_discover_cmds_rsp cb = container->cb;
-               cb(0, 0, 0, 0, NULL, 0, container->userdata);
-       }
-       break;
        case ZBL_ZCL_GLOBAL_DISCOVER_ATTRIBUTE_EXTENDED_REQ: {
                zb_zcl_global_discover_attr_extended_rsp cb = container->cb;
                nwk_addr addr16;
@@ -5851,7 +5848,7 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
 
        to = zbl_dbus_get_timeout(zcl_global_proxy);
        sub_id = g_dbus_connection_signal_subscribe(gdbus_conn, NULL,
-               ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, "discover_commands_received_rsp",
+               ZIGBEE_ZCL_GLOBAL_CONTROL_INTERFACE, "discover_commands_generated_rsp",
                ZIGBEE_CONTROL_OBJECT_PATH, NULL, 0, _zbl_response_cb, container,
                _zbl_request_cleanup);
 
@@ -5863,7 +5860,7 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
 
        container->cb = cb;
        container->sid = sub_id;
-       container->cid = ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_RECEIVED_REQ;
+       container->cid = ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_GENERATED_REQ;
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
@@ -5887,7 +5884,7 @@ int zbl_discover_cmds_gen(zigbee_h handle, nwk_addr addr16, unsigned char src_ep
        _zbl_register_global_req(handle, container);
 #endif
 
-       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
+       variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_generated",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
                start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
@@ -5941,7 +5938,7 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
 
        container->cb = cb;
        container->sid = sub_id;
-       container->cid = ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_GENERATED_REQ;
+       container->cid = ZBL_ZCL_GLOBAL_DISCOVER_COMMAND_RECEIVED_REQ;
        container->tid = g_timeout_add_seconds(to, _zbl_timeout_cb, container);
        container->userdata = user_data;
 #ifdef ZB_FEATURE_GLOBAL_RSP_SYNC
@@ -5967,7 +5964,7 @@ int zbl_discover_cmds_recv(zigbee_h handle, nwk_addr addr16, unsigned char src_e
 
        variant = g_dbus_proxy_call_sync(zcl_global_proxy, "discover_commands_received",
                g_variant_new("(qyyqqy)", addr16, dst_ep, zcl_frame_ctl, cluster_id,
-               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, -1, NULL, &dbus_err);
+               start_command_id, max_command_ids), G_DBUS_CALL_FLAGS_NONE, to, NULL, &dbus_err);
 
        if (!variant) {
                ERR("Failed to get 'discover_commands_received' [%s]", dbus_err->message);
index eb0f214d73499333e5152e289e97ed7a4ae92a20..f86ff1ad5164dbe464789ab2be7e93b302b096ec 100644 (file)
@@ -53,8 +53,11 @@ extern ieee_addr dest_addr64;
 
 extern simple_desc_s st_ep1, st_ep2, st_ep3, st_ep4, sj_ep1, simul_ep1;
 
-static char data_cluster_id[MENU_DATA_SIZE + 1] = "6";
-static char data_attr_id[MENU_DATA_SIZE + 1] = "0";
+static char r_data_cluster_id[MENU_DATA_SIZE + 1] = "6";
+static char r_data_attr_id[MENU_DATA_SIZE + 1] = "0";
+static char w_data_cluster_id[MENU_DATA_SIZE + 1] = "3";
+static char w_data_attr_id[MENU_DATA_SIZE + 1] = "0";
+static char w_data_attr_value[MENU_DATA_SIZE + 1] = "180";
 static char data_min_i[MENU_DATA_SIZE + 1] = "A";
 static char data_max_i[MENU_DATA_SIZE + 1] = "3C";
 static char data_timeout[MENU_DATA_SIZE + 1] = "10";
@@ -121,7 +124,7 @@ static void zigbee_zcl_global_write_attributes_rsp(nwk_addr addr16,
        unsigned char ep, unsigned short cluster_id, zb_global_record_data_s *records_info,
        int records_len, void *user_data)
 {
-       unsigned short id;
+       unsigned short id = 0;
        unsigned char status;
        zb_value_h value = NULL;
        write_attr_status_record_h *records;
@@ -143,8 +146,8 @@ static void zigbee_zcl_global_write_attributes_rsp(nwk_addr addr16,
        msg("  Msg length    %d", records_len);
 
        if (records) {
-               zb_get_id_from_write_attr_status(*records, &id);
-               msg("  AttributeId : 0x%04X", id);
+               if (ZIGBEE_ERROR_NONE == zb_get_id_from_write_attr_status(*records, &id))
+                       msg("  AttributeId : 0x%04X", id);
        }
        if (records) {
                zb_get_status_from_write_attr_status(*records, &status);
@@ -365,13 +368,13 @@ static int run_global_read_attr(MManager *mm, struct menu_data *menu)
        };
        int len_of_attr = sizeof(attribute_id) / sizeof(attribute_id[0]);
 
-       if (strlen(data_cluster_id))
-               cluster_id = (unsigned short)strtol(data_cluster_id, NULL, 16);
-       if (strlen(data_attr_id))
-               attribute_id[0] = (unsigned short)strtol(data_attr_id, NULL, 16);
+       if (strlen(r_data_cluster_id))
+               cluster_id = (unsigned short)strtol(r_data_cluster_id, NULL, 16);
+       if (strlen(r_data_attr_id))
+               attribute_id[0] = (unsigned short)strtol(r_data_attr_id, NULL, 16);
 
        ret = zb_zcl_global_read_attr(handle, dest_addr16, 1, 1,
-                       -1, cluster_id, attribute_id, len_of_attr,
+                       ZB_ZCL_FC_DEFAULT, cluster_id, attribute_id, len_of_attr,
                        zigbee_zcl_global_read_attributes_rsp, NULL);
 
        if (ZIGBEE_ERROR_NONE != ret) {
@@ -388,23 +391,28 @@ static int run_global_read_attr(MManager *mm, struct menu_data *menu)
 static int run_global_write_attr(MManager *mm, struct menu_data *menu)
 {
        int ret = ZIGBEE_ERROR_NONE;
-       unsigned char value[] = { 0x02, 0x01};
        /* Samjin Power Outlet */
        write_attr_record_h attr;
 
-       unsigned short cluster_id = ZB_ZCL_ON_OFF_CLUSTER_ID;
-       unsigned short attribute_id = ZB_ZCL_ON_OFF_ATTRIBUTE_ID;
-
-       if (strlen(data_cluster_id))
-               cluster_id = (unsigned short)strtol(data_cluster_id, NULL, 16);
-       if (strlen(data_attr_id))
-               attribute_id = (unsigned short)strtol(data_attr_id, NULL, 16);
+       unsigned short cluster_id = ZB_ZCL_IDENTIFY_CLUSTER_ID;
+       unsigned short attribute_id = ZB_ZCL_IDENTIFY_TIME_ATTRIBUTE_ID;
+       unsigned short temp;
+       unsigned char attribute_value[] = {0,};
+
+       if (strlen(w_data_cluster_id))
+               cluster_id = (unsigned short)strtol(w_data_cluster_id, NULL, 16);
+       if (strlen(w_data_attr_id))
+               attribute_id = (unsigned short)strtol(w_data_attr_id, NULL, 16);
+       if (strlen(w_data_attr_value)) {
+               temp = (unsigned short)strtol(w_data_attr_value, NULL, 16);
+               memcpy(attribute_value, &temp, sizeof(unsigned short));
+       }
 
        zb_create_write_attr_record(&attr);
        //zb_set_id_to_write_attr_record(attr, ZB_ZCL_IDENTIFY_TIME_ATTRIBUTE_ID);
        zb_set_id_to_write_attr_record(attr, attribute_id);
        zb_set_type_to_write_attr_record(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER);
-       zb_set_buf_to_write_attr_record(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, value,
+       zb_set_buf_to_write_attr_record(attr, ZB_ZCL_UNSIGNED_16_BIT_INTEGER, attribute_value,
                        zb_get_data_size(ZB_ZCL_UNSIGNED_16_BIT_INTEGER));
 
        ret = zb_zcl_global_write_attr(handle, dest_addr16, 1, sj_ep1.ep,
@@ -488,10 +496,10 @@ static int run_global_config_report(MManager *mm, struct menu_data *menu)
        unsigned short max_i;
        unsigned short timeout;
 
-       if (strlen(data_cluster_id))
-               cluster_id = (unsigned short)strtol(data_cluster_id, NULL, 16);
-       if (strlen(data_attr_id))
-               attribute_id = (unsigned short)strtol(data_attr_id, NULL, 16);
+       if (strlen(r_data_cluster_id))
+               cluster_id = (unsigned short)strtol(r_data_cluster_id, NULL, 16);
+       if (strlen(r_data_attr_id))
+               attribute_id = (unsigned short)strtol(r_data_attr_id, NULL, 16);
 
        if (strlen(data_min_i))
                min_i = (unsigned short)strtol(data_min_i, NULL, 16);
@@ -648,22 +656,23 @@ static int run_global_discover_attr_extended(MManager *mm, struct menu_data *men
 }
 
 struct menu_data menu_zcl_global_read_attr[] = {
-       { "1", "Cluster ID (Hex)", NULL, NULL, data_cluster_id },
-       { "2", "Attribute ID (Hex)", NULL, NULL, data_attr_id },
+       { "1", "Cluster ID (Hex)", NULL, NULL, r_data_cluster_id },
+       { "2", "Attribute ID (Hex)", NULL, NULL, r_data_attr_id },
        { "3", "run", NULL, run_global_read_attr, NULL },
        { NULL, NULL, },
 };
 
 struct menu_data menu_zcl_global_write_attr[] = {
-       { "1", "Cluster ID (Hex)", NULL, NULL, data_cluster_id },
-       { "2", "Attribute ID (Hex)", NULL, NULL, data_attr_id },
-       { "3", "run", NULL, run_global_write_attr, NULL },
+       { "1", "Cluster ID (Hex)", NULL, NULL, w_data_cluster_id },
+       { "2", "Attribute ID (Hex)", NULL, NULL, w_data_attr_id },
+       { "3", "Attribute Value (Hex)", NULL, NULL, w_data_attr_value },
+       { "4", "run", NULL, run_global_write_attr, NULL },
        { NULL, NULL, },
 };
 
 struct menu_data menu_zcl_global_config_report[] = {
-       { "1", "Cluster ID (Hex)", NULL, NULL, data_cluster_id },
-       { "2", "Attribute ID (Hex)", NULL, NULL, data_attr_id },
+       { "1", "Cluster ID (Hex)", NULL, NULL, r_data_cluster_id },
+       { "2", "Attribute ID (Hex)", NULL, NULL, r_data_attr_id },
        { "3", "Min interval (Hex)", NULL, NULL, data_min_i },
        { "4", "Max interval (Hex)", NULL, NULL, data_max_i },
        { "5", "Timeout", NULL, NULL, data_timeout },