mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 04:20:20 +00:00
gatt-service/sps-client: use error code instead of att status
This commit is contained in:
parent
31d175ff6d
commit
fcf5cc990f
@ -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){
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user