mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-10 15:44:32 +00:00
gatt-service/aics: initialize con_handle when notification is enabled
This commit is contained in:
parent
ea31566a96
commit
19ceea51d9
@ -76,7 +76,6 @@ static uint16_t aics_read_callback(hci_con_handle_t con_handle, uint16_t attribu
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_state_value_handle){
|
||||
aics->con_handle = con_handle;
|
||||
uint8_t value[4];
|
||||
value[0] = (uint8_t)aics->info.audio_input_state.gain_setting_db;
|
||||
value[1] = aics->info.audio_input_state.mute_mode;
|
||||
@ -87,7 +86,6 @@ static uint16_t aics_read_callback(hci_con_handle_t con_handle, uint16_t attribu
|
||||
|
||||
|
||||
if (attribute_handle == aics->gain_settings_properties_value_handle){
|
||||
aics->con_handle = con_handle;
|
||||
uint8_t value[3];
|
||||
|
||||
value[0] = aics->info.gain_settings_properties.gain_settings_units;
|
||||
@ -97,33 +95,27 @@ static uint16_t aics_read_callback(hci_con_handle_t con_handle, uint16_t attribu
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_type_value_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_byte((uint8_t)aics->info.audio_input_type, offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_status_value_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_byte((uint8_t)aics->audio_input_status, offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_description_value_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_blob((uint8_t *)aics->info.audio_input_description, strlen(aics->info.audio_input_description), offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
|
||||
if (attribute_handle == aics->audio_input_state_client_configuration_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_little_endian_16(aics->audio_input_state_client_configuration, offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_status_client_configuration_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_little_endian_16(aics->audio_input_status_client_configuration, offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_description_client_configuration_handle){
|
||||
aics->con_handle = con_handle;
|
||||
return att_read_callback_handle_little_endian_16(aics->audio_input_description_client_configuration, offset, buffer, buffer_size);
|
||||
}
|
||||
|
||||
@ -226,7 +218,7 @@ static void audio_input_control_service_can_send_now(void * context){
|
||||
}
|
||||
|
||||
static void audio_input_control_service_server_set_callback(audio_input_control_service_server_t * aics, uint8_t task){
|
||||
if (aics->con_handle == 0){
|
||||
if (aics->con_handle == HCI_CON_HANDLE_INVALID){
|
||||
aics->scheduled_tasks &= ~task;
|
||||
return;
|
||||
}
|
||||
@ -240,6 +232,10 @@ static void audio_input_control_service_server_set_callback(audio_input_control_
|
||||
}
|
||||
}
|
||||
|
||||
static void aics_set_con_handle(audio_input_control_service_server_t * aics, hci_con_handle_t con_handle, uint16_t configuration){
|
||||
aics->con_handle = (configuration == 0) ? HCI_CON_HANDLE_INVALID : con_handle;
|
||||
}
|
||||
|
||||
static int aics_write_callback(hci_con_handle_t con_handle, uint16_t attribute_handle, uint16_t transaction_mode, uint16_t offset, uint8_t *buffer, uint16_t buffer_size){
|
||||
UNUSED(con_handle);
|
||||
UNUSED(transaction_mode);
|
||||
@ -345,14 +341,17 @@ static int aics_write_callback(hci_con_handle_t con_handle, uint16_t attribute_h
|
||||
|
||||
if (attribute_handle == aics->audio_input_state_client_configuration_handle){
|
||||
aics->audio_input_state_client_configuration = little_endian_read_16(buffer, 0);
|
||||
aics_set_con_handle(aics, con_handle, aics->audio_input_state_client_configuration);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_status_client_configuration_handle){
|
||||
aics->audio_input_status_client_configuration = little_endian_read_16(buffer, 0);
|
||||
aics_set_con_handle(aics, con_handle, aics->audio_input_status_client_configuration);
|
||||
}
|
||||
|
||||
if (attribute_handle == aics->audio_input_description_client_configuration_handle){
|
||||
aics->audio_input_description_client_configuration = little_endian_read_16(buffer, 0);
|
||||
aics_set_con_handle(aics, con_handle, aics->audio_input_description_client_configuration);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -365,6 +364,7 @@ void audio_input_control_service_server_init(audio_input_control_service_server_
|
||||
btstack_linked_list_add(&aics_services, (btstack_linked_item_t *)aics);
|
||||
|
||||
aics->scheduled_tasks = 0;
|
||||
aics->con_handle = HCI_CON_HANDLE_INVALID;
|
||||
|
||||
// get characteristic value handle and client configuration handle
|
||||
aics->audio_input_state_value_handle = gatt_server_get_value_handle_for_characteristic_with_uuid16(aics->start_handle, aics->end_handle, ORG_BLUETOOTH_CHARACTERISTIC_AUDIO_INPUT_STATE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user