esp_gatt_status_t btc_ble_gattc_get_descr_by_uuid(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, esp_bt_uuid_t char_uuid, esp_bt_uuid_t descr_uuid, esp_gattc_descr_elem_t *result, uint16_t *count) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int descr_num = 0; tBT_UUID bta_char_uuid = {0}; tBT_UUID bta_descr_uuid = {0}; btc_to_bta_uuid(&bta_char_uuid, &char_uuid); btc_to_bta_uuid(&bta_descr_uuid, &descr_uuid); BTA_GATTC_GetDescrByUUID(conn_id, start_handle, end_handle, bta_char_uuid, bta_descr_uuid, &db, &descr_num); if ((status = btc_gattc_check_valid_param(descr_num, 0)) != ESP_GATT_OK) { if (db) { osi_free(db); } return status; } else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)descr_num, ESP_GATT_DB_DESCRIPTOR, 0, (void *)result, db); } *count = descr_num; //don't forget to free the db buffer after used. if (db) { osi_free(db); } return ESP_GATT_OK; }
esp_gatt_status_t btc_ble_gattc_get_include_service(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, esp_bt_uuid_t *incl_uuid, esp_gattc_incl_svc_elem_t *result, uint16_t *count) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int incl_num = 0; tBT_UUID bta_uuid = {0}; if (incl_uuid != NULL) { btc_to_bta_uuid(&bta_uuid, incl_uuid); BTA_GATTC_GetIncludeService(conn_id, start_handle, end_handle, &bta_uuid, &db, &incl_num); } else { BTA_GATTC_GetIncludeService(conn_id, start_handle, end_handle, NULL, &db, &incl_num); } if ((status = btc_gattc_check_valid_param(incl_num, 0)) != ESP_GATT_OK) { if (db) { osi_free(db); } return status; }else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)incl_num, ESP_GATT_DB_INCLUDED_SERVICE, 0, (void *)result, db); } *count = incl_num; //don't forget to free the db buffer after used. if (db) { osi_free(db); } return ESP_GATT_OK; }
static void btc_gattc_search_service(btc_ble_gattc_args_t *arg) { tBT_UUID srvc_uuid; if (arg->search_srvc.filter_uuid_enable) { btc_to_bta_uuid(&srvc_uuid, &arg->search_srvc.filter_uuid); BTA_GATTC_ServiceSearchRequest(arg->search_srvc.conn_id, &srvc_uuid); } else { BTA_GATTC_ServiceSearchRequest(arg->search_srvc.conn_id, NULL); } }
esp_gatt_status_t btc_ble_gattc_get_service(uint16_t conn_id, esp_bt_uuid_t *svc_uuid, esp_gattc_service_elem_t *result, uint16_t *count, uint16_t offset) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int svc_num = 0; tBT_UUID *bta_uuid = NULL; if (svc_uuid) { bta_uuid = osi_malloc(sizeof(tBT_UUID)); btc_to_bta_uuid(bta_uuid, svc_uuid); } BTA_GATTC_GetServiceWithUUID(conn_id, bta_uuid, &db, &svc_num); if ((status = btc_gattc_check_valid_param(svc_num, offset)) != ESP_GATT_OK) { if (db) { osi_free(db); } if (bta_uuid) { osi_free(bta_uuid); } *count = 0; return status; } else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)svc_num, ESP_GATT_DB_PRIMARY_SERVICE, offset, (void *)result, db); } *count = svc_num; //don't forget to free the db buffer after used. if (db) { osi_free(db); } if (bta_uuid) { osi_free(bta_uuid); } return ESP_GATT_OK; }
void btc_to_bta_gatt_id(tBTA_GATT_ID *p_dest, esp_gatt_id_t *p_src) { p_dest->inst_id = p_src->inst_id; btc_to_bta_uuid(&p_dest->uuid, &p_src->uuid); }