esp_gatt_status_t btc_ble_gattc_get_descr_by_char_handle(uint16_t conn_id, uint16_t char_handle, 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_descr_uuid = {0}; btc_to_bta_uuid(&bta_descr_uuid, &descr_uuid); BTA_GATTC_GetDescrByCharHandle(conn_id, char_handle, bta_descr_uuid, &db, &descr_num); if ((status = btc_gattc_check_valid_param(descr_num, 0)) != ESP_GATT_OK) { if (db) { osi_free(db); } *count = 0; 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_char_by_uuid(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, esp_bt_uuid_t char_uuid, esp_gattc_char_elem_t *result, uint16_t *count) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int char_num = 0; tBT_UUID bta_uuid = {0}; btc_to_bta_uuid(&bta_uuid, &char_uuid); BTA_GATTC_GetCharByUUID(conn_id, start_handle, end_handle, bta_uuid, &db, &char_num); if ((status = btc_gattc_check_valid_param(char_num, 0)) != ESP_GATT_OK) { if (db) { osi_free(db); } *count = 0; return status; } else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)char_num, ESP_GATT_DB_CHARACTERISTIC, 0, (void *)result, db); } *count = char_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_all_descr(uint16_t conn_id, uint16_t char_handle, esp_gattc_descr_elem_t *result, uint16_t *count, uint16_t offset) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int descr_num = 0; BTA_GATTC_GetAllDescriptor(conn_id, char_handle, &db, &descr_num); if ((status = btc_gattc_check_valid_param(descr_num, offset)) != ESP_GATT_OK) { if (db) { osi_free(db); } *count = 0; return status; } else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)descr_num, ESP_GATT_DB_DESCRIPTOR, offset, (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_all_char(uint16_t conn_id, uint16_t start_handle, uint16_t end_handle, esp_gattc_char_elem_t *result, uint16_t *count, uint16_t offset) { esp_gatt_status_t status; btgatt_db_element_t *db = NULL; int char_num = 0; BTA_GATTC_GetAllChar(conn_id, start_handle, end_handle, &db, &char_num); if ((status = btc_gattc_check_valid_param(char_num, offset)) != ESP_GATT_OK) { if (db) { osi_free(db); } *count = 0; return status; } else { btc_gattc_fill_gatt_db_conversion(*count, (uint16_t)char_num, ESP_GATT_DB_CHARACTERISTIC, offset, (void *)result, db); } *count = char_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; }
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; }