gatt-service/sps-client: use error code instead of att status

This commit is contained in:
Matthias Ringwald 2024-09-25 13:04:22 +02:00
parent 31d175ff6d
commit fcf5cc990f
2 changed files with 35 additions and 16 deletions

View File

@ -57,6 +57,8 @@
#include "btstack_run_loop.h"
#include "gap.h"
#include "ble/gatt_service_client.h"
static btstack_packet_callback_registration_t hci_event_callback_registration;
static btstack_linked_list_t clients;
@ -65,7 +67,8 @@ static uint16_t scan_parameters_service_scan_window = 0;
static uint16_t scan_parameters_service_scan_interval = 0;
static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size);
static void scan_parameters_service_run_for_client(scan_parameters_service_client_t * client);
static void scan_parameters_service_send_next_query(void * context);
static btstack_context_callback_registration_t scan_parameters_service_handle_can_send_now;
static uint16_t scan_parameters_service_get_next_cid(void){
if (scan_parameters_service_cid_counter == 0xffff) {
@ -76,6 +79,17 @@ static uint16_t scan_parameters_service_get_next_cid(void){
return scan_parameters_service_cid_counter;
}
static uint8_t scan_parameters_client_request_send_gatt_query(scan_parameters_service_client_t * client){
scan_parameters_service_handle_can_send_now.context = (void *) (uintptr_t)client->cid;
uint8_t status = gatt_client_request_to_send_gatt_query(&scan_parameters_service_handle_can_send_now, client->con_handle);
if (status != ERROR_CODE_SUCCESS){
if (client->state >= SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE){
client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_IDLE;
}
}
return status;
}
static scan_parameters_service_client_t * scan_parameters_service_create_client(hci_con_handle_t con_handle, uint16_t cid){
scan_parameters_service_client_t * client = btstack_memory_scan_parameters_service_client_get();
if (!client){
@ -158,10 +172,16 @@ static void handle_notification_event(uint8_t packet_type, uint16_t channel, uin
scan_parameters_service_client_t * client = scan_parameters_service_get_client_for_con_handle(gatt_event_notification_get_handle(packet));
btstack_assert(client != NULL);
client->scan_interval_window_value_update = true;
scan_parameters_service_run_for_client(client);
scan_parameters_client_request_send_gatt_query(client);
}
static void scan_parameters_service_run_for_client(scan_parameters_service_client_t * client){
static void scan_parameters_service_send_next_query(void * context){
uint16_t cid = (uint16_t)(uintptr_t)context;
scan_parameters_service_client_t * client = scan_parameters_service_get_client_for_cid(cid);
if (client == NULL){
return;
}
uint8_t att_status;
gatt_client_service_t service;
@ -254,7 +274,7 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
scan_parameters_service_client_t * client = NULL;
gatt_client_service_t service;
gatt_client_characteristic_t characteristic;
uint8_t att_status;
uint8_t status;
#ifdef ENABLE_TESTING_SUPPORT
gatt_client_characteristic_descriptor_t characteristic_descriptor;
@ -339,12 +359,12 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
client = scan_parameters_service_get_client_for_con_handle(gatt_event_query_complete_get_handle(packet));
btstack_assert(client != NULL);
att_status = gatt_event_query_complete_get_att_status(packet);
status = gatt_service_client_att_status_to_error_code(gatt_event_query_complete_get_att_status(packet));
switch (client->state){
case SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_SERVICE_RESULT:
if (att_status != ATT_ERROR_SUCCESS){
scan_parameters_service_emit_connection_established(client, att_status);
if (status != ERROR_CODE_SUCCESS){
scan_parameters_service_emit_connection_established(client, status);
scan_parameters_service_finalize_client(client);
return;
}
@ -359,8 +379,8 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
return;
case SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W4_CHARACTERISTIC_RESULT:
if (att_status != ATT_ERROR_SUCCESS){
scan_parameters_service_emit_connection_established(client, att_status);
if (status != ERROR_CODE_SUCCESS){
scan_parameters_service_emit_connection_established(client, status);
scan_parameters_service_finalize_client(client);
break;
}
@ -394,7 +414,7 @@ static void handle_gatt_client_event(uint8_t packet_type, uint16_t channel, uint
}
if (client != NULL){
scan_parameters_service_run_for_client(client);
scan_parameters_client_request_send_gatt_query(client);
}
}
@ -433,7 +453,7 @@ void scan_parameters_service_client_set(uint16_t scan_interval, uint16_t scan_wi
while (btstack_linked_list_iterator_has_next(&it)){
scan_parameters_service_client_t * client = (scan_parameters_service_client_t*) btstack_linked_list_iterator_next(&it);
client->scan_interval_window_value_update = true;
scan_parameters_service_run_for_client(client);
scan_parameters_client_request_send_gatt_query(client);
}
}
@ -449,8 +469,7 @@ uint8_t scan_parameters_service_client_enable_notifications(uint16_t scan_parame
}
client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_CONFIGURE_NOTIFICATIONS;
scan_parameters_service_run_for_client(client);
return ERROR_CODE_SUCCESS;
return scan_parameters_client_request_send_gatt_query(client);
}
uint8_t scan_parameters_service_client_connect(hci_con_handle_t con_handle, btstack_packet_handler_t packet_handler, uint16_t * scan_parameters_service_cid){
@ -473,8 +492,7 @@ uint8_t scan_parameters_service_client_connect(hci_con_handle_t con_handle, btst
client->client_handler = packet_handler;
client->state = SCAN_PARAMETERS_SERVICE_CLIENT_STATE_W2_QUERY_SERVICE;
scan_parameters_service_run_for_client(client);
return ERROR_CODE_SUCCESS;
return scan_parameters_client_request_send_gatt_query(client);
}
uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_service_cid){
@ -490,6 +508,7 @@ uint8_t scan_parameters_service_client_disconnect(uint16_t scan_parameters_servi
void scan_parameters_service_client_init(void){
hci_event_callback_registration.callback = &handle_hci_event;
hci_add_event_handler(&hci_event_callback_registration);
scan_parameters_service_handle_can_send_now.callback = &scan_parameters_service_send_next_query;
}
void scan_parameters_service_client_deinit(void){

View File

@ -4171,7 +4171,7 @@ typedef uint8_t sm_key_t[16];
* @format 1H1
* @param subevent_code
* @param con_handle
* @param att_status
* @param status
*/
#define GATTSERVICE_SUBEVENT_SCAN_PARAMETERS_SERVICE_CONNECTED 0x11u