From: Wootak Jung Date: Thu, 9 Feb 2023 08:08:59 +0000 (+0900) Subject: Fix gatt connection state changed cb not coming issue X-Git-Tag: accepted/tizen/7.0/unified/20231228.060551^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=958891f29eb74adee75f380776ad1164af3acd88;p=platform%2Fcore%2Fapi%2Fbluetooth.git Fix gatt connection state changed cb not coming issue Regardless of registering new callback, the callback from previous one should be come Change-Id: Id37cf39734d4cd8762d1db58733ab94deade601d Signed-off-by: Wootak Jung --- diff --git a/src/bluetooth-common.c b/src/bluetooth-common.c index ad74928..4c632be 100644 --- a/src/bluetooth-common.c +++ b/src/bluetooth-common.c @@ -2549,31 +2549,28 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us case BLUETOOTH_EVENT_GATT_SERVER_CONNECTED: { const GSList *server_list = NULL; bt_gatt_server_s *server = NULL; - bt_gatt_connection_state_changed_cb cb = NULL; - server_list = _bt_gatt_get_server_list(); - if (!server_list) - break; - - server = (bt_gatt_server_s *)server_list->data; - BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_CONNECTED"); _bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data)); + /* This callback is from bt_gatt_set_connection_state_changed_cb */ + if (event_index >= 0) + cb = bt_event_slot_container[event_index].callback; + if (cb) + cb(_bt_get_error_code(param->result), TRUE, device_addr, + bt_event_slot_container[event_index].user_data); + + /* This callback is from bt_gatt_server_set_connection_state_changed_cb */ + server_list = _bt_gatt_get_server_list(); + if (!server_list) + break; + server = (bt_gatt_server_s *)server_list->data; if (server && server->server_connection_change_cb) server->server_connection_change_cb(_bt_get_error_code(param->result), TRUE, device_addr, server->connection_change_user_data); - else { - if (event_index >= 0) - cb = bt_event_slot_container[event_index].callback; - if (cb) - cb(_bt_get_error_code(param->result), TRUE, device_addr, - bt_event_slot_container[event_index].user_data); - } - g_free(device_addr); device_addr = NULL; break; @@ -2581,29 +2578,27 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us case BLUETOOTH_EVENT_GATT_SERVER_DISCONNECTED: { const GSList *server_list = NULL; bt_gatt_server_s *server = NULL; - bt_gatt_connection_state_changed_cb cb = NULL; - server_list = _bt_gatt_get_server_list(); - if (!server_list) - break; - - server = (bt_gatt_server_s *)server_list->data; - BT_INFO("BLUETOOTH_EVENT_GATT_SERVER_DISCONNECTED"); _bt_convert_address_to_string(&device_addr, (bluetooth_device_address_t *)(param->param_data)); + /* This callback is from bt_gatt_set_connection_state_changed_cb */ + if (event_index >= 0) + cb = bt_event_slot_container[event_index].callback; + if (cb) + cb(_bt_get_error_code(param->result), FALSE, device_addr, + bt_event_slot_container[event_index].user_data); + + /* This callback is from bt_gatt_server_set_connection_state_changed_cb */ + server_list = _bt_gatt_get_server_list(); + if (!server_list) + break; + server = (bt_gatt_server_s *)server_list->data; if (server && server->server_connection_change_cb) server->server_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr, server->connection_change_user_data); - else { - if (event_index >= 0) - cb = bt_event_slot_container[event_index].callback; - if (cb) - cb(_bt_get_error_code(param->result), FALSE, device_addr, - bt_event_slot_container[event_index].user_data); - } g_free(device_addr); device_addr = NULL; @@ -2636,16 +2631,18 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us /* TDS Seeker */ _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, TRUE); + /* This callback is from bt_gatt_set_connection_state_changed_cb */ + if (event_index >= 0) + cb = bt_event_slot_container[event_index].callback; + if (cb) + cb(_bt_get_error_code(param->result), TRUE, device_addr, + bt_event_slot_container[event_index].user_data); + + /* This callback is from bt_gatt_client_connect */ if (client_s && client_s->client_connection_change_cb) client_s->client_connection_change_cb(_bt_get_error_code(param->result), TRUE, device_addr, client_s->connection_change_user_data); - else { - if (event_index >= 0) - cb = bt_event_slot_container[event_index].callback; - if (cb) - cb(_bt_get_error_code(param->result), TRUE, device_addr, - bt_event_slot_container[event_index].user_data); - } + g_free(device_addr); device_addr = NULL; break; @@ -2675,31 +2672,32 @@ static void __bt_event_proxy(int event, bluetooth_event_param_t *param, void *us client_s->services_discovered = false; } - /*HRP Server*/ __bt_hrp_le_connection_state_changed_cb(param->result, device_addr, FALSE); /* TDS Seeker */ _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, FALSE); + // TOOD: now this logic is required. but in the future, we need to remove /* Handle Client disconnection event in case of Server */ if (server && server->server_connection_change_cb) server->server_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr, server->connection_change_user_data); + /* This callback is from bt_gatt_set_connection_state_changed_cb */ + if (event_index >= 0) + cb = bt_event_slot_container[event_index].callback; + if (cb) + cb(_bt_get_error_code(param->result), FALSE, device_addr, + bt_event_slot_container[event_index].user_data); + + /* This callback is from bt_gatt_client_connect */ if (client_s && client_s->client_connection_change_cb) { client_s->client_connection_change_cb(_bt_get_error_code(param->result), FALSE, device_addr, client_s->connection_change_user_data); client_s->client_connection_change_cb = NULL; client_s->connection_change_user_data = NULL; } - else { - if (event_index >= 0) - cb = bt_event_slot_container[event_index].callback; - if (cb) - cb(_bt_get_error_code(param->result), FALSE, device_addr, - bt_event_slot_container[event_index].user_data); - } g_free(device_addr); device_addr = NULL;