static int gap_accept(struct btd_service *service) { struct btd_device *device = btd_service_get_device(service); struct gatt_db *db = btd_device_get_gatt_db(device); struct bt_gatt_client *client = btd_device_get_gatt_client(device); struct gas *gas = btd_service_get_user_data(service); char addr[18]; bt_uuid_t gap_uuid; ba2str(device_get_address(device), addr); DBG("GAP profile accept (%s)", addr); if (!gas) { error("GAP service not handled by profile"); return -1; } gas->db = gatt_db_ref(db); gas->client = bt_gatt_client_ref(client); /* Handle the GAP services */ bt_uuid16_create(&gap_uuid, GAP_UUID16); gatt_db_foreach_service(db, &gap_uuid, foreach_gap_service, gas); if (!gas->attr) { error("GAP attribute not found"); gas_reset(gas); return -1; } btd_service_connecting_complete(service, 0); return 0; }
static void print_services_by_handle(struct client *cli, uint16_t handle) { printf("\n"); /* TODO: Filter by handle */ gatt_db_foreach_service(cli->db, NULL, print_service, cli); }
static int deviceinfo_driver_accept(struct btd_service *service) { struct btd_device *device = btd_service_get_device(service); struct gatt_db *db = btd_device_get_gatt_db(device); char addr[18]; bt_uuid_t deviceinfo_uuid; ba2str(device_get_address(device), addr); DBG("deviceinfo profile accept (%s)", addr); /* Handle the device info service */ bt_string_to_uuid(&deviceinfo_uuid, DEVICE_INFORMATION_UUID); gatt_db_foreach_service(db, &deviceinfo_uuid, foreach_deviceinfo_service, device); return 0; }
static int gap_driver_accept(struct btd_service *service) { struct btd_device *device = btd_service_get_device(service); struct gatt_db *db = btd_device_get_gatt_db(device); struct bt_gatt_client *client = btd_device_get_gatt_client(device); struct gas *gas; GSList *l; char addr[18]; bt_uuid_t gap_uuid; ba2str(device_get_address(device), addr); DBG("GAP profile accept (%s)", addr); l = g_slist_find_custom(devices, device, cmp_device); if (!l) { error("GAP service not handled by profile"); return -1; } gas = l->data; /* Clean-up any old client/db and acquire the new ones */ gas->attr = NULL; gatt_db_unregister(gas->db, gas->db_id); gatt_db_unref(gas->db); bt_gatt_client_unref(gas->client); gas->db = gatt_db_ref(db); gas->client = bt_gatt_client_ref(client); gas->db_id = gatt_db_register(db, service_added, service_removed, gas, NULL); /* Handle the GAP services */ bt_uuid16_create(&gap_uuid, GAP_UUID16); gatt_db_foreach_service(db, &gap_uuid, foreach_gap_service, gas); return 0; }
static void create_services(struct btd_gatt_client *client) { DBG("Exporting objects for GATT services: %s", client->devaddr); gatt_db_foreach_service(client->db, NULL, export_service, client); }
static void cmd_services(struct server *server, char *cmd_str) { gatt_db_foreach_service(server->db, NULL, print_service, server); }
static void print_services_by_uuid(struct client *cli, const bt_uuid_t *uuid) { printf("\n"); gatt_db_foreach_service(cli->db, uuid, print_service, cli); }
static void print_services(struct client *cli) { printf("\n"); gatt_db_foreach_service(cli->db, NULL, print_service, cli); }