case BLUETOOTH_EVENT_GATT_CLIENT_CONNECTED: {
bt_gatt_client_s *client_s;
bt_gatt_connection_state_changed_cb cb = NULL;
+ bool connected = TRUE;
+ int ret;
BT_INFO("BLUETOOTH_EVENT_GATT_CLIENT_CONNECTED");
_bt_convert_address_to_string(&device_addr,
(bluetooth_device_address_t *)(param->param_data));
BT_INFO("GATT Client Connected address[%s]", device_addr);
if (client_s)
client_s->connected = true;
- _bt_gatt_client_update_services(client_s);
+ ret = _bt_gatt_client_update_services(client_s);
+ if (ret != BT_ERROR_NONE && ret != BT_ERROR_ALREADY_DONE) {
+ BT_ERR("Update service requst failed. ret: %d", ret);
+ connected = FALSE;
+ }
}
}
/*HRP Server*/
- __bt_hrp_le_connection_state_changed_cb(param->result, device_addr, TRUE);
+ __bt_hrp_le_connection_state_changed_cb(param->result, device_addr, connected);
/* TDS Seeker */
- _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, TRUE);
+ _bt_tds_update_seeker_connection_state_changed(param->result, device_addr, connected);
/* 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,
+ cb(_bt_get_error_code(param->result), connected, device_addr,
bt_event_slot_container[event_index].user_data);
+ /* To prevent client_s from being freed while update service is in progress */
+ client_s = (bt_gatt_client_s *)_bt_gatt_get_client(device_addr);
+
/* 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->client_connection_change_cb(_bt_get_error_code(param->result), connected, device_addr,
client_s->connection_change_user_data);
g_free(device_addr);