Fix GVariant match on service method
authorJiwan Kim <ji-wan.kim@samsung.com>
Wed, 1 Feb 2017 04:44:59 +0000 (13:44 +0900)
committersaerome.kim <saerome.kim@samsung.com>
Thu, 11 May 2017 09:10:25 +0000 (18:10 +0900)
- Fix unchanged 'ay' into 'a(y)'
- Fix bugs on getting eui64
- Implementation for some notifications
- Fix bug on request creation logic

Change-Id: I5399dd91d47d3449bef22f37146305cf7ed0ef54
Signed-off-by: Jiwan Kim <ji-wan.kim@samsung.com>
zigbee-daemon/zigbee-interface/introspection/service.xml
zigbee-daemon/zigbee-interface/src/zigbee_service_dbus_interface_service.c
zigbee-daemon/zigbee-interface/src/zigbee_service_interface_common.c

index d8e4f71..bdbb7bd 100644 (file)
@@ -37,7 +37,7 @@
                        <arg type='i' name='result' direction='out'/>
                </method>
                <method name='leave_request'>
-                       <arg type='ay' name='eui64' direction='in'/>
+                       <arg type='a(y)' name='eui64' direction='in'/>
                        <arg type='y' name='remove_child' direction='in'/>
                        <arg type='y' name='rejoin' direction='in'/>
                        <arg type='i' name='result' direction='out'/>
                        <arg type='a(qyayyay)' name='device_list' direction='out'/>
                </method>
                <method name='get_endpoint_list'>
-                       <arg type='ay' name='eui64' direction='in'/>
+                       <arg type='a(y)' name='eui64' direction='in'/>
                        <arg type='i' name='result' direction='out'/>
                        <arg type='a(y)' name='endpoint_list' direction='out'/>
                </method>
                <method name='get_cluster_list'>
-                       <arg type='ay' name='eui64' direction='in'/>
+                       <arg type='a(y)' name='eui64' direction='in'/>
                        <arg type='y' name='endpoint' direction='in'/>
                        <arg type='i' name='result' direction='out'/>
                        <arg type='aq' name='cluster_list' direction='out'/>
                </method>
                <method name='get_node_type'>
-                       <arg type='ay' name='eui64' direction='in'/>
+                       <arg type='a(y)' name='eui64' direction='in'/>
                        <arg type='i' name='result' direction='out'/>
                        <arg type='y' name='node_type' direction='out'/>
                </method>
                        <arg type='q' name='nodeId'/>
                </signal>
                <signal name='child_rejoined'>
-                       <arg type='ay' name='child_addr'/>
+                       <arg type='a(y)' name='child_addr'/>
                </signal>
                <signal name='child_left'>
-                       <arg type='ay' name='child_addr'/>
+                       <arg type='a(y)' name='child_addr'/>
                        <arg type='y' name='status'/>
                </signal>
                <signal name='leave_network_done'>
index 4f4ab7f..03406f1 100644 (file)
@@ -768,8 +768,8 @@ static gboolean on_service_leave_request(ZigbeeService *service_object,
        memset(&req, 0x0, sizeof(ZigbeeServiceLeaveRequest_t));
 
        /* Update request structure */
-       g_variant_get(eui64, "ay", &iter);
-       while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
+       g_variant_get(eui64, "a(y)", &iter);
+       while (g_variant_iter_loop(iter, "(y)", &(req.eui64[i]))) {
                i++;
                if (i >= ZIGBEE_EUI64_SIZE)
                        break;
@@ -777,6 +777,12 @@ static gboolean on_service_leave_request(ZigbeeService *service_object,
        req.remove_child = remove_child;
        req.rejoin = rejoin;
 
+       Z_LOGD("IEEE Address = %X:%X:%X:%X:%X:%X:%X:%X",
+               req.eui64[0], req.eui64[1], req.eui64[2], req.eui64[3],
+               req.eui64[4], req.eui64[5], req.eui64[6], req.eui64[7]);
+       Z_LOGD("remove_child [%d]", remove_child);
+       Z_LOGD("rejoin [%d]", rejoin);
+
        /* Allocate response callback data */
        resp_cb_data =
                zigbee_service_dbus_interface_create_resp_cb_data(service_object,
@@ -1119,8 +1125,8 @@ static gboolean on_service_get_endpoint_list(ZigbeeService *service_object,
        memset(&req, 0x0, sizeof(ZigbeeServiceGetEndpointList_t));
 
        /* Update request structure */
-       g_variant_get(eui64, "ay", &iter);
-       while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
+       g_variant_get(eui64, "a(y)", &iter);
+       while (g_variant_iter_loop(iter, "(y)", &(req.eui64[i]))) {
                i++;
                if (i >= ZIGBEE_EUI64_SIZE)
                        break;
@@ -1214,8 +1220,8 @@ static gboolean on_service_get_cluster_list(ZigbeeService *service_object,
        memset(&req, 0x0, sizeof(ZigbeeServiceGetClusterList_t));
 
        /* Update request structure */
-       g_variant_get(eui64, "ay", &iter);
-       while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
+       g_variant_get(eui64, "a(y)", &iter);
+       while (g_variant_iter_loop(iter, "(y)", &(req.eui64[i]))) {
                i++;
                if (i >= ZIGBEE_EUI64_SIZE)
                        break;
@@ -1305,8 +1311,8 @@ static gboolean on_service_get_node_type(ZigbeeService *service_object,
        memset(&req, 0x0, sizeof(ZigbeeServiceGetNodeType_t));
 
        /* Update request structure */
-       g_variant_get(eui64, "ay", &iter);
-       while (g_variant_iter_loop(iter, "y", req.eui64[i])) {
+       g_variant_get(eui64, "a(y)", &iter);
+       while (g_variant_iter_loop(iter, "(y)", req.eui64[i])) {
                i++;
                if (i >= ZIGBEE_EUI64_SIZE)
                        break;
@@ -1397,15 +1403,30 @@ void zigbee_service_dbus_interface_service_notification(ZigBeeServiceInterface *
        }
        break;
        case ZBLIB_SERVICE_NOTI_CHILD_REJOINED: {
-               ZigbeeServiceServiceChildRejoined_t ieee_addr_t;
-               memcpy(&ieee_addr_t, noti_data, noti_data_len);
-               zigbee_service_emit_child_rejoined(service_object, ieee_addr_t.eui64);
+               ZigbeeServiceServiceChildRejoined_t *child_t =
+                       (ZigbeeServiceServiceChildRejoined_t*)noti_data;
+
+               GVariant *v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+                       child_t->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
+               if (NULL == v_eui64) {
+                       Z_LOGE("Failed to create variant!");
+               } else {
+                       zigbee_service_emit_child_rejoined(service_object, v_eui64);
+               }
        }
        break;
        case ZBLIB_SERVICE_NOTI_CHILD_LEFT: {
-               ZigbeeServiceServiceChildLeft_t child_left_t;
-               memcpy(&child_left_t, noti_data, noti_data_len);
-               zigbee_service_emit_child_left(service_object, child_left_t.eui64, child_left_t.status);
+               ZigbeeServiceServiceChildLeft_t *child_left_t =
+                       (ZigbeeServiceServiceChildLeft_t*)noti_data;
+
+               GVariant *v_eui64 = g_variant_new_from_data(G_VARIANT_TYPE("a(y)"),
+                       child_left_t->eui64, ZIGBEE_EUI64_SIZE, TRUE, NULL, NULL);
+               if (NULL == v_eui64) {
+                       Z_LOGE("Failed to create variant!");
+               } else {
+                       zigbee_service_emit_child_left(service_object,
+                               v_eui64, child_left_t->status);
+               }
        }
        break;
        case ZBLIB_SERVICE_NOTI_LEAVE_NETWORK_DONE: {
index e967880..ce4fe8f 100644 (file)
@@ -95,7 +95,7 @@ gboolean zigbee_service_dbus_interface_dispatch_request(ZigBeeServiceInterface *
        request_id = zblib_service_interface_new_request(service_interface,
                driver_type,
                ops_id,
-               &request_data, request_data_len,
+               request_data, request_data_len,
                resp_cb, resp_cb_data);
        if (ZIGBEE_SERVICE_INTERFACE_INVALID_REQUEST_ID == request_id) {
                Z_LOGE("zigbee_service_dbus_interface_create_resp_cb_data failed!");