Fixed gatt char read value when length of value is zero 71/181771/3
authorAmit Purwar <amit.purwar@samsung.com>
Mon, 18 Jun 2018 07:10:35 +0000 (12:40 +0530)
committerAmit Purwar <amit.purwar@samsung.com>
Mon, 18 Jun 2018 12:03:06 +0000 (17:33 +0530)
Change-Id: I5515f6a02c728b9e1eeff038654d067dc01b3773
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
bt-api/bt-event-handler.c
bt-service-adaptation/services/gatt/bt-service-gatt.c

index a997b44..d1d52d5 100644 (file)
@@ -3550,8 +3550,12 @@ static void __bt_gatt_client_event_filter(GDBusConnection *connection,
                BT_INFO("GATT Client Read Callback from [%s] svc inst [%d] char val len [%d] char inst [%d]",
                                address, svc_inst, char_prop.val_len, char_prop.prop.instance_id);
 
-               /* Copy Data */
-               memcpy(&char_prop.value, g_variant_get_data(data_var), char_prop.val_len);
+               if (char_prop.val_len > 0) {
+                       BT_INFO("Get the read data");
+                       /* Copy Data */
+                       memcpy(&char_prop.value, g_variant_get_data(data_var), char_prop.val_len);
+               }
+
                memcpy(&char_prop.prop.uuid, g_variant_get_data(char_uuid_var), 16);
 
                /* Copy Svc Data */
@@ -3562,7 +3566,6 @@ static void __bt_gatt_client_event_filter(GDBusConnection *connection,
                for (i = 0; i < char_prop.val_len; i++)
                        BT_INFO("Data[%d] = [0x%x]", i, char_prop.value[i]);
 
-
                _bt_gatt_client_event_cb(BLUETOOTH_EVENT_GATT_READ_CHAR,
                                result, &char_prop,
                                event_info->cb, event_info->user_data);
index 21dc216..18f5ddf 100644 (file)
@@ -3348,6 +3348,7 @@ Note: Even in case of failure, address, handles and result code should be return
        if (event_data->uuid_status.conn_status.status != OAL_STATUS_SUCCESS)
                result = BLUETOOTH_ERROR_INTERNAL;
        else {
+               BT_ERR("read data len is [%d]", event_data->data_len);
                if (event_data->data_len > 0) {
                        /* DEBUG */
                        for (i = 0; i < event_data->data_len; i++)
@@ -3361,42 +3362,49 @@ Note: Even in case of failure, address, handles and result code should be return
                                        read_val,
                                        event_data->data_len,
                                        TRUE, NULL, NULL);
-                       /* SVC uuid */
-                       svc_uuid = g_memdup(&event_data->uuid_status.srvc_id.id.uuid.uuid[0], uuid_len);
-
-                       data_svc_uuid = g_variant_new_from_data(
-                                       G_VARIANT_TYPE_BYTESTRING,
-                                       svc_uuid,
-                                       16,
-                                       TRUE, NULL, NULL);
-
-                       /* Char uuid */
-                       char_uuid = g_memdup(&event_data->uuid_status.char_id.uuid.uuid[0], uuid_len);
-
-                       data_char_uuid = g_variant_new_from_data(
-                                       G_VARIANT_TYPE_BYTESTRING,
-                                       char_uuid,
-                                       16,
-                                       TRUE, NULL, NULL);
-                       param = g_variant_new("(isn@ayin@ayin@ay)", result,
-                                       conn_info->addr,
-                                       16,
-                                       data_svc_uuid,
-                                       event_data->uuid_status.srvc_id.id.inst_id,
-                                       16,
-                                       data_char_uuid,
-                                       event_data->uuid_status.char_id.inst_id,
-                                       event_data->data_len,
-                                       data);
-
-                       /* Send Event */
-                       _bt_send_event(BT_GATT_CLIENT_EVENT,
-                                       BLUETOOTH_EVENT_GATT_READ_CHAR,
-                                       param);
                } else {
                        BT_ERR("Characteristic Read success, but no data!!!");
-                       result = BLUETOOTH_ERROR_INTERNAL;
+
+                       data = g_variant_new_from_data(
+                                       G_VARIANT_TYPE_BYTESTRING,
+                                       NULL,
+                                       0,
+                                       FALSE, NULL, NULL);
                }
+
+               /* SVC uuid */
+               svc_uuid = g_memdup(&event_data->uuid_status.srvc_id.id.uuid.uuid[0], uuid_len);
+
+               data_svc_uuid = g_variant_new_from_data(
+                               G_VARIANT_TYPE_BYTESTRING,
+                               svc_uuid,
+                               16,
+                               TRUE, NULL, NULL);
+
+               /* Char uuid */
+               char_uuid = g_memdup(&event_data->uuid_status.char_id.uuid.uuid[0], uuid_len);
+
+               data_char_uuid = g_variant_new_from_data(
+                               G_VARIANT_TYPE_BYTESTRING,
+                               char_uuid,
+                               16,
+                               TRUE, NULL, NULL);
+
+               param = g_variant_new("(isn@ayin@ayin@ay)", result,
+                               conn_info->addr,
+                               16,
+                               data_svc_uuid,
+                               event_data->uuid_status.srvc_id.id.inst_id,
+                               16,
+                               data_char_uuid,
+                               event_data->uuid_status.char_id.inst_id,
+                               event_data->data_len,
+                               data);
+
+               /* Send Event */
+               _bt_send_event(BT_GATT_CLIENT_EVENT,
+                               BLUETOOTH_EVENT_GATT_READ_CHAR,
+                               param);
        }
        /* Send DBUS return */
        __bt_gatt_handle_pending_request_info(result,