Handle GATT client app's termination
[platform/core/connectivity/bluetooth-frwk.git] / bt-oal / oal-gatt.c
index 400f662..90c9e62 100644 (file)
@@ -213,7 +213,7 @@ static void cb_gattc_write_descriptor(int conn_id, int status, btgatt_write_para
 static void cb_gattc_register_for_notification(int conn_id, int registered, int status,
                        btgatt_srvc_id_t *srvc_id, btgatt_gatt_id_t *char_id);
 static void cb_gattc_notify(int conn_id, btgatt_notify_params_t *p_data);
-static void cb_gattc_service_changed(bt_bdaddr_t *bd_addr, int change_type, uint8_t *uuid);
+static void cb_gattc_service_changed(bt_bdaddr_t *bd_addr, int change_type, uint8_t *uuid, int conn_id, int inst_id);
 static void cb_gattc_configure_mtu_cmpl(int conn_id, int status, int mtu);
 
 /*TODO GATT CLient callbacks will be implemented in subsequent patches */
@@ -620,19 +620,8 @@ oal_status_t gatts_multi_adv_set_inst_data(int instance_id,
        adv_setup.timeout_s = adv_param_setup->timeout_s;
 
        adv_setup.server_if = gatt_servers[instance_id - 1].server_id;
-       if (adv_setup.manufacturer_data_len > 0 && adv_setup.manufacturer_data != NULL) {
-               BT_INFO("Manufacture data.....\n");
-               PRINT_ADV_DATA(adv_setup.manufacturer_data_len, (unsigned char *)adv_setup.manufacturer_data, adv_setup.set_scan_rsp);
-       }
-
-       if (adv_setup.service_uuid_len > 0 && adv_setup.service_uuid != NULL) {
-               BT_INFO("Service uuid.....\n");
-               PRINT_ADV_DATA(adv_setup.service_uuid_len, (unsigned char*)adv_setup.service_uuid, FALSE);
-       }
-
 
        ret = gatt_api->server->multi_adv_set_inst_data(adv_setup);
-
        if (ret != BT_STATUS_SUCCESS) {
                BT_ERR("GATT Set Multi advertising data failed: %s", status2string(ret));
                gatt_servers[instance_id - 1].state = GATT_INS_DISABLED;
@@ -1409,13 +1398,10 @@ static void cb_gattc_register_app(int status, int clientIf, bt_uuid_t *app_uuid)
        char uuid_str[BT_UUID_STRING_MAX];
        event_gattc_register_t *event;
 
-       BT_INFO("+");
-
        /* Check if GATT client registered for Default GATT client UUID */
        uuid_to_string((service_uuid_t *)app_uuid, uuid_str);
-       BT_INFO("UUID:%s", uuid_str);
 
-       BT_INFO("BTGATT CLIENT REGISTER APP CB, status:%d, clientIf:%d", status, clientIf);
+       BT_INFO("GATT CLIENT REGISTER APP CB, status:%d, clientIf:%d, %s", status, clientIf, uuid_str);
        event = g_new0(event_gattc_register_t, 1);
        event->client_if = clientIf;
        event->status = (status == 0 ? OAL_STATUS_SUCCESS : OAL_STATUS_INTERNAL_ERROR);
@@ -1479,7 +1465,7 @@ static void cb_gattc_search_result(int conn_id, btgatt_srvc_id_t *srvc_id)
        BT_INFO("BTGATT Client Service Search Result cb, conn_id:%d", conn_id);
 
        uuid_to_stringname((oal_uuid_t *)&(srvc_id->id.uuid), uuid_str);
-       BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]",
+       BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]",
                uuid_str, srvc_id->id.inst_id, srvc_id->is_primary ? "Primary" : "Secondary");
 
        event_gattc_service_result_t *event = g_new0(event_gattc_service_result_t, 1);
@@ -1509,9 +1495,10 @@ static void cb_gattc_get_characteristics(int conn_id, int status, btgatt_srvc_id
        char uuid_str1[2*BT_UUID_STRING_MAX];
        char uuid_str2[2*BT_UUID_STRING_MAX];
        char str[50];
+
        BT_INFO("BTGATT Client Get Characteristic Callback, conn_id:%d, status:%d", conn_id, status);
        uuid_to_stringname((oal_uuid_t *)&(srvc_id->id.uuid), uuid_str1);
-       BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]",
+       BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]",
                uuid_str1, srvc_id->id.inst_id, srvc_id->is_primary ? "Primary" : "Secondary");
 
        event_gattc_characteristic_result_t *event = g_new0(event_gattc_characteristic_result_t, 1);
@@ -1521,7 +1508,7 @@ static void cb_gattc_get_characteristics(int conn_id, int status, btgatt_srvc_id
 
        if (status == 0) {
                uuid_to_stringname((oal_uuid_t *)&(char_id->uuid), uuid_str2);
-               BT_INFO("Charac=> UUID: [%s], Inst_id: [%u], Prop: [%s]",
+               BT_INFO("Charac => [%s], Inst_id [%u], Prop [%s]",
                        uuid_str2, char_id->inst_id, char_prop_to_string(char_prop, str));
                event->char_prop = char_prop;
                memcpy(&(event->char_id), char_id, sizeof(oal_gatt_id_t));
@@ -1539,9 +1526,9 @@ static void cb_gattc_get_descriptor(int conn_id, int status, btgatt_srvc_id_t *s
        BT_INFO("BTGATT Client Get Descriptor Callback, conn_id:%d, status:%d", conn_id, status);
        uuid_to_stringname((oal_uuid_t *)&(srvc_id->id.uuid), uuid_str1);
        uuid_to_stringname((oal_uuid_t *)&(char_id->uuid), uuid_str2);
-       BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]",
+       BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]",
                uuid_str1, srvc_id->id.inst_id, srvc_id->is_primary ? "Primary" : "Secondary");
-       BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, char_id->inst_id);
+       BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, char_id->inst_id);
 
        event_gattc_descriptor_result_t *event = g_new0(event_gattc_descriptor_result_t, 1);
        event->conn_status.conn_id = conn_id;
@@ -1551,7 +1538,7 @@ static void cb_gattc_get_descriptor(int conn_id, int status, btgatt_srvc_id_t *s
 
        if (status == 0) {
                uuid_to_stringname((oal_uuid_t *)&(descr_id->uuid), uuid_str3);
-               BT_INFO("Desc=> UUID: [%s], Inst_id: [%u]", uuid_str3, descr_id->inst_id);
+               BT_INFO("Desc   => [%s], Inst_id [%u]", uuid_str3, descr_id->inst_id);
                memcpy(&(event->descr_id), descr_id, sizeof(oal_gatt_id_t));
        }
        send_event(OAL_EVENT_GATTC_DESC_SERACH_RESULT, event, sizeof(*event));
@@ -1565,8 +1552,8 @@ static void cb_gattc_register_for_notification(int client_if, int registered, in
                client_if, status, registered == 1 ? "REGISTERED" : "DEREGISTERED");
        uuid_to_stringname((oal_uuid_t *)&(srvc_id->id.uuid), uuid_str1);
        uuid_to_stringname((oal_uuid_t *)&(char_id->uuid), uuid_str2);
-       BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]", uuid_str1, srvc_id->id.inst_id, srvc_id->is_primary ? "Primary" : "Secondary");
-       BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, char_id->inst_id);
+       BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]", uuid_str1, srvc_id->id.inst_id, srvc_id->is_primary ? "Primary" : "Secondary");
+       BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, char_id->inst_id);
 
        event_gattc_regdereg_notify_t *event = g_new0(event_gattc_regdereg_notify_t, 1);
        oal_event_t event_type = (registered == 1 ? OAL_EVENT_GATTC_NOTIFICATION_REGISTERED : OAL_EVENT_GATTC_NOTIFICATION_DEREGISTERED);
@@ -1591,9 +1578,9 @@ static void cb_gattc_notify(int conn_id, btgatt_notify_params_t *p_data)
        uuid_to_stringname((oal_uuid_t *)&(p_data->srvc_id.id.uuid), uuid_str1);
        uuid_to_stringname((oal_uuid_t *)&(p_data->char_id.uuid), uuid_str2);
 
-       BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]",
+       BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]",
                uuid_str1, p_data->srvc_id.id.inst_id, p_data->srvc_id.is_primary ? "Primary" : "Secondary");
-       BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, p_data->char_id.inst_id);
+       BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, p_data->char_id.inst_id);
 
        if (p_data->len > 0) {
                char *data = NULL;
@@ -1619,13 +1606,15 @@ static void cb_gattc_notify(int conn_id, btgatt_notify_params_t *p_data)
        }
 }
 
-static void cb_gattc_service_changed(bt_bdaddr_t *bd_addr, int change_type, uint8_t *uuid)
+static void cb_gattc_service_changed(bt_bdaddr_t *bd_addr, int change_type, uint8_t *uuid, int conn_id, int inst_id)
 {
        event_gattc_service_changed_data *event = g_new0(event_gattc_service_changed_data, 1);
 
        memcpy(event->address.addr, bd_addr->address, 6);
        event->change_type = change_type;
        memcpy(event->uuid.uuid, uuid, sizeof(event->uuid.uuid));
+       event->conn_id = conn_id;
+       event->inst_id = inst_id;
 
        send_event_bda_trace(OAL_EVENT_GATTC_SERVICE_CHANGED_IND, event, sizeof(*event), (bt_address_t *)bd_addr);
 }
@@ -1645,10 +1634,10 @@ static void cb_gattc_read_characteristic(int conn_id, int status, btgatt_read_pa
        if (status == 0) {
                uuid_to_stringname((oal_uuid_t *)&(p_data->srvc_id.id.uuid), uuid_str1);
                uuid_to_stringname((oal_uuid_t *)&(p_data->char_id.uuid), uuid_str2);
-               BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]", uuid_str1,
+               BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]", uuid_str1,
                        p_data->srvc_id.id.inst_id, p_data->srvc_id.is_primary ? "Primary" : "Secondary");
-               BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, p_data->char_id.inst_id);
-               BT_INFO("Len: %u, value_type: %u", p_data->value.len, p_data->value_type);
+               BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, p_data->char_id.inst_id);
+               BT_DBG("Len: %u, value_type: %u", p_data->value.len, p_data->value_type);
                if (p_data->value.len > 0 && event->value_type == GATTC_READ_VALUE_TYPE_VALUE) {
                        char *data = NULL;
                        data = g_malloc(3*p_data->value.len+1);
@@ -1658,7 +1647,7 @@ static void cb_gattc_read_characteristic(int conn_id, int status, btgatt_read_pa
                                return;
                        }
                        convert_hex_2_str((unsigned char *)p_data->value.value, p_data->value.len, data);
-                       BT_INFO("Read Data: [%s]", data);
+                       BT_DBG("Read Data: [%s]", data);
                        event->data_len = p_data->value.len;
                        memcpy(&(event->data), &(p_data->value.value), event->data_len);
                        g_free(data);
@@ -1681,9 +1670,9 @@ static void cb_gattc_write_characteristic(int conn_id, int status, btgatt_write_
        if (status == 0) {
                uuid_to_stringname((oal_uuid_t *)&(p_data->srvc_id.id.uuid), uuid_str1);
                uuid_to_stringname((oal_uuid_t *)&(p_data->char_id.uuid), uuid_str2);
-               BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]", uuid_str1,
+               BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]", uuid_str1,
                        p_data->srvc_id.id.inst_id, p_data->srvc_id.is_primary ? "Primary" : "Secondary");
-               BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, p_data->char_id.inst_id);
+               BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, p_data->char_id.inst_id);
        }
        send_event(OAL_EVENT_GATTC_WRITE_CHARAC, event, sizeof(*event));
 }
@@ -1705,10 +1694,10 @@ static void cb_gattc_write_descriptor(int conn_id, int status, btgatt_write_para
                uuid_to_stringname((oal_uuid_t *)&(p_data->srvc_id.id.uuid), uuid_str1);
                uuid_to_stringname((oal_uuid_t *)&(p_data->char_id.uuid), uuid_str2);
                uuid_to_stringname((oal_uuid_t *)&(p_data->descr_id.uuid), uuid_str3);
-               BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]", uuid_str1,
+               BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]", uuid_str1,
                        p_data->srvc_id.id.inst_id, p_data->srvc_id.is_primary ? "Primary" : "Secondary");
-               BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, p_data->char_id.inst_id);
-               BT_INFO("Desc=> UUID: [%s], Inst_id: [%u]", uuid_str3, p_data->descr_id.inst_id);
+               BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, p_data->char_id.inst_id);
+               BT_INFO("Desc   => [%s], Inst_id [%u]", uuid_str3, p_data->descr_id.inst_id);
        }
        send_event(OAL_EVENT_GATTC_WRITE_DESCR, event, sizeof(*event));
 }
@@ -1734,11 +1723,11 @@ static void cb_gattc_read_descriptor(int conn_id, int status, btgatt_read_params
                uuid_to_stringname((oal_uuid_t *)&(p_data->srvc_id.id.uuid), uuid_str1);
                uuid_to_stringname((oal_uuid_t *)&(p_data->char_id.uuid), uuid_str2);
                uuid_to_stringname((oal_uuid_t *)&(p_data->descr_id.uuid), uuid_str3);
-               BT_INFO("Service=> UUID: [%s], Inst_id: [%u], Type: [%s]", uuid_str1,
+               BT_INFO("Service=> [%s], Inst_id [%u], Type [%s]", uuid_str1,
                        p_data->srvc_id.id.inst_id, p_data->srvc_id.is_primary ? "Primary" : "Secondary");
-               BT_INFO("Charac=> UUID: [%s], Inst_id: [%u]", uuid_str2, p_data->char_id.inst_id);
-               BT_INFO("Desc=> UUID: [%s], Inst_id: [%u]", uuid_str3, p_data->descr_id.inst_id);
-               BT_INFO("Len: %u, value_type: %u", p_data->value.len, p_data->value_type);
+               BT_INFO("Charac => [%s], Inst_id [%u]", uuid_str2, p_data->char_id.inst_id);
+               BT_INFO("Desc   => [%s], Inst_id [%u]", uuid_str3, p_data->descr_id.inst_id);
+               BT_DBG("Len: %u, value_type: %u", p_data->value.len, p_data->value_type);
                if (p_data->value.len > 0 && event->value_type == GATTC_READ_VALUE_TYPE_VALUE) {
                        char *data = NULL;
                        data = g_malloc(3*p_data->value.len+1);
@@ -1748,7 +1737,7 @@ static void cb_gattc_read_descriptor(int conn_id, int status, btgatt_read_params
                                return;
                        }
                        convert_hex_2_str((unsigned char *)p_data->value.value, p_data->value.len, data);
-                       BT_INFO("Read Data: [%s]", data);
+                       BT_DBG("Read Data: [%s]", data);
                        event->data_len = p_data->value.len;
                        memcpy(&(event->data), &(p_data->value.value), event->data_len);
                        g_free(data);