From dfb0e36ebf619af0496697e4fc999eef9c5e5281 Mon Sep 17 00:00:00 2001 From: Amit Purwar Date: Mon, 18 Jun 2018 12:40:35 +0530 Subject: [PATCH] Fixed gatt char read value when length of value is zero Change-Id: I5515f6a02c728b9e1eeff038654d067dc01b3773 Signed-off-by: Amit Purwar --- bt-api/bt-event-handler.c | 9 ++- .../services/gatt/bt-service-gatt.c | 74 ++++++++++++---------- 2 files changed, 47 insertions(+), 36 deletions(-) diff --git a/bt-api/bt-event-handler.c b/bt-api/bt-event-handler.c index a997b44..d1d52d5 100644 --- a/bt-api/bt-event-handler.c +++ b/bt-api/bt-event-handler.c @@ -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); diff --git a/bt-service-adaptation/services/gatt/bt-service-gatt.c b/bt-service-adaptation/services/gatt/bt-service-gatt.c index 21dc216..18f5ddf 100644 --- a/bt-service-adaptation/services/gatt/bt-service-gatt.c +++ b/bt-service-adaptation/services/gatt/bt-service-gatt.c @@ -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, -- 2.7.4