mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-26 02:37:41 +00:00
sdp_query: emit SDP_EVENT_QUERY_COMPLETE with error SDP_QUERY_BUSY
This commit is contained in:
parent
6c927b22a9
commit
e505764193
@ -55,6 +55,7 @@
|
||||
#include "btstack_run_loop.h"
|
||||
#include "classic/sdp_client.h"
|
||||
#include "classic/sdp_query_util.h"
|
||||
#include "classic/sdp_util.h"
|
||||
#include "hci.h"
|
||||
#include "hci_cmd.h"
|
||||
#include "hci_dump.h"
|
||||
|
@ -129,7 +129,8 @@ typedef uint8_t sm_key_t[16];
|
||||
#define SDP_QUERY_INCOMPLETE 0x81
|
||||
#define SDP_SERVICE_NOT_FOUND 0x82
|
||||
#define SDP_HANDLE_INVALID 0x83
|
||||
|
||||
#define SDP_QUERY_BUSY 0x84
|
||||
|
||||
#define ATT_HANDLE_VALUE_INDICATION_IN_PORGRESS 0x90
|
||||
#define ATT_HANDLE_VALUE_INDICATION_TIMEOUT 0x91
|
||||
|
||||
|
@ -46,6 +46,7 @@
|
||||
|
||||
#include "l2cap.h"
|
||||
#include "classic/sdp_server.h"
|
||||
#include "classic/sdp_util.h"
|
||||
#include "btstack_debug.h"
|
||||
|
||||
// Types SDP Parser - Data Element stream helper
|
||||
@ -306,6 +307,11 @@ void sdp_parser_handle_done(uint8_t status){
|
||||
(*sdp_parser_callback)(HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
static void sdp_client_emit_busy(btstack_packet_handler_t callback){
|
||||
log_error("sdp_client query initiated when not ready");
|
||||
uint8_t event[] = { SDP_EVENT_QUERY_COMPLETE, 1, SDP_QUERY_BUSY};
|
||||
(*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
// SDP Client
|
||||
|
||||
@ -688,7 +694,7 @@ int sdp_client_ready(void){
|
||||
|
||||
void sdp_client_query(btstack_packet_handler_t callback, bd_addr_t remote, const uint8_t * des_service_search_pattern, const uint8_t * des_attribute_id_list){
|
||||
if (!sdp_client_ready()) {
|
||||
log_error("sdp_client_query called when not ready");
|
||||
sdp_client_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
sdp_parser_init(callback);
|
||||
@ -704,7 +710,7 @@ void sdp_client_query(btstack_packet_handler_t callback, bd_addr_t remote, const
|
||||
#ifdef ENABLE_SDP_EXTRA_QUERIES
|
||||
void sdp_client_service_attribute_search(btstack_packet_handler_t callback, bd_addr_t remote, uint32_t search_service_record_handle, uint8_t * des_attribute_id_list){
|
||||
if (!sdp_client_ready()) {
|
||||
log_error("sdp_client_query called when not ready");
|
||||
sdp_client_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
sdp_parser_init(callback);
|
||||
@ -719,7 +725,7 @@ void sdp_client_service_attribute_search(btstack_packet_handler_t callback, bd_a
|
||||
|
||||
void sdp_client_service_search(btstack_packet_handler_t callback, bd_addr_t remote, uint8_t * des_service_search_pattern){
|
||||
if (!sdp_client_ready()) {
|
||||
log_error("sdp_client_query called when not ready");
|
||||
sdp_client_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
sdp_parser_init(callback);
|
||||
|
@ -87,7 +87,7 @@ static de_state_t sn_de_header_state;
|
||||
static btstack_packet_handler_t sdp_app_callback;
|
||||
//
|
||||
|
||||
static void emit_service(void){
|
||||
static void sdp_rfcomm_query_emit_service(void){
|
||||
uint8_t event[3+SDP_SERVICE_NAME_LEN+1];
|
||||
event[0] = SDP_EVENT_QUERY_RFCOMM_SERVICE;
|
||||
event[1] = sdp_service_name_len + 1;
|
||||
@ -98,6 +98,12 @@ static void emit_service(void){
|
||||
sdp_rfcomm_channel_nr = 0;
|
||||
}
|
||||
|
||||
static void sdp_query_rfcomm_emit_busy(btstack_packet_handler_t callback){
|
||||
log_error("sdp_query_rfcomm initiated when not ready");
|
||||
uint8_t event[] = { SDP_EVENT_QUERY_COMPLETE, 1, SDP_QUERY_BUSY};
|
||||
(*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
static void handleProtocolDescriptorListData(uint32_t attribute_value_length, uint32_t data_offset, uint8_t data){
|
||||
// init state on first byte
|
||||
if (data_offset == 0){
|
||||
@ -235,7 +241,7 @@ static void handleServiceNameData(uint32_t attribute_value_length, uint32_t data
|
||||
|
||||
// notify on last char
|
||||
if (data_offset == attribute_value_length - 1 && sdp_rfcomm_channel_nr!=0){
|
||||
emit_service();
|
||||
sdp_rfcomm_query_emit_service();
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,7 +250,7 @@ static void handle_sdp_parser_event(uint8_t packet_type, uint16_t channel, uint8
|
||||
case SDP_EVENT_QUERY_SERVICE_RECORD_HANDLE:
|
||||
// handle service without a name
|
||||
if (sdp_rfcomm_channel_nr){
|
||||
emit_service();
|
||||
sdp_rfcomm_query_emit_service();
|
||||
}
|
||||
|
||||
// prepare for new record
|
||||
@ -276,7 +282,7 @@ static void handle_sdp_parser_event(uint8_t packet_type, uint16_t channel, uint8
|
||||
case SDP_EVENT_QUERY_COMPLETE:
|
||||
// handle service without a name
|
||||
if (sdp_rfcomm_channel_nr){
|
||||
emit_service();
|
||||
sdp_rfcomm_query_emit_service();
|
||||
}
|
||||
(*sdp_app_callback)(HCI_EVENT_PACKET, 0, packet, size);
|
||||
break;
|
||||
@ -302,7 +308,7 @@ int sdp_query_rfcomm_ready(void){
|
||||
|
||||
void sdp_query_rfcomm_channel_and_name_for_search_pattern(btstack_packet_handler_t callback, bd_addr_t remote, uint8_t * serviceSearchPattern){
|
||||
if (!sdp_query_rfcomm_ready()){
|
||||
log_error("sdp_query_rfcomm_channel_and_name_for_search_pattern called when not readdy");
|
||||
sdp_query_rfcomm_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
sdp_app_callback = callback;
|
||||
@ -312,7 +318,7 @@ void sdp_query_rfcomm_channel_and_name_for_search_pattern(btstack_packet_handler
|
||||
|
||||
void sdp_query_rfcomm_channel_and_name_for_uuid(btstack_packet_handler_t callback, bd_addr_t remote, uint16_t uuid){
|
||||
if (!sdp_query_rfcomm_ready()){
|
||||
log_error("sdp_query_rfcomm_channel_and_name_for_uuid called when not readdy");
|
||||
sdp_query_rfcomm_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
big_endian_store_16(des_serviceSearchPattern, 3, uuid);
|
||||
|
@ -54,6 +54,12 @@ static uint8_t* create_service_search_pattern_for_uuid128(uint8_t* uuid){
|
||||
return (uint8_t*)des_serviceSearchPatternUUID128;
|
||||
}
|
||||
|
||||
static void sdp_general_query_emit_busy(btstack_packet_handler_t callback){
|
||||
log_error("sdp_general_query initiated when not ready");
|
||||
uint8_t event[] = { SDP_EVENT_QUERY_COMPLETE, 1, SDP_QUERY_BUSY};
|
||||
(*callback)(HCI_EVENT_PACKET, 0, event, sizeof(event));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks if the SDP Client is ready
|
||||
* @return 1 when no query is active
|
||||
@ -67,9 +73,10 @@ uint8_t* create_service_search_pattern_for_uuid(uint16_t uuid){
|
||||
return (uint8_t*)des_serviceSearchPattern;
|
||||
}
|
||||
|
||||
|
||||
void sdp_general_query_for_uuid(btstack_packet_handler_t callback, bd_addr_t remote, uint16_t uuid){
|
||||
if (!sdp_client_ready()){
|
||||
log_error("sdp_general_query_for_uuid called when not readdy");
|
||||
sdp_general_query_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
create_service_search_pattern_for_uuid(uuid);
|
||||
@ -78,7 +85,7 @@ void sdp_general_query_for_uuid(btstack_packet_handler_t callback, bd_addr_t rem
|
||||
|
||||
void sdp_general_query_for_uuid128(btstack_packet_handler_t callback, bd_addr_t remote, uint8_t* uuid){
|
||||
if (!sdp_client_ready()){
|
||||
log_error("sdp_general_query_for_uuid called when not readdy");
|
||||
sdp_general_query_emit_busy(callback);
|
||||
return;
|
||||
}
|
||||
create_service_search_pattern_for_uuid128(uuid);
|
||||
|
Loading…
x
Reference in New Issue
Block a user