mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 13:20:50 +00:00
sdp client: extracted method can_send_now
This commit is contained in:
parent
84e56682a4
commit
c81dbccfbb
@ -66,6 +66,9 @@ SM_MINIMAL = \
|
|||||||
SDP_DES = \
|
SDP_DES = \
|
||||||
${BTSTACK_ROOT}/test/des_iterator/des_iterator.c \
|
${BTSTACK_ROOT}/test/des_iterator/des_iterator.c \
|
||||||
|
|
||||||
|
PAN = \
|
||||||
|
${BTSTACK_ROOT}/src/pan.c \
|
||||||
|
|
||||||
CORE_OBJ = $(CORE:.c=.o)
|
CORE_OBJ = $(CORE:.c=.o)
|
||||||
COMMON_OBJ = $(COMMON:.c=.o)
|
COMMON_OBJ = $(COMMON:.c=.o)
|
||||||
CC2564_OBJ = $(CC2564:.c=.o)
|
CC2564_OBJ = $(CC2564:.c=.o)
|
||||||
@ -75,6 +78,7 @@ SM_MINIMAL_OBJ = $(SM_MINIMAL:.c=.o)
|
|||||||
ATT_OBJ = $(ATT:.c=.o)
|
ATT_OBJ = $(ATT:.c=.o)
|
||||||
GATT_CLIENT_OBJ = $(GATT_CLIENT:.c=.o)
|
GATT_CLIENT_OBJ = $(GATT_CLIENT:.c=.o)
|
||||||
GATT_SERVER_OBJ = $(GATT_SERVER:.c=.o)
|
GATT_SERVER_OBJ = $(GATT_SERVER:.c=.o)
|
||||||
|
PAN_OBJ = $(PAN:.c=.o)
|
||||||
|
|
||||||
# create firmware image from common objects and example source file
|
# create firmware image from common objects and example source file
|
||||||
|
|
||||||
@ -87,7 +91,7 @@ all: ${BTSTACK_ROOT}/include/btstack/version.h gatt_browser gatt_battery_query s
|
|||||||
${BTSTACK_ROOT}/include/btstack/version.h:
|
${BTSTACK_ROOT}/include/btstack/version.h:
|
||||||
${BTSTACK_ROOT}/tools/get_version.sh
|
${BTSTACK_ROOT}/tools/get_version.sh
|
||||||
|
|
||||||
sdp_rfcomm_query: ${CORE_OBJ} ${COMMON_OBJ} sdp_rfcomm_query.c
|
sdp_rfcomm_query: ${CORE_OBJ} ${COMMON_OBJ} ${PAN_OBJ} sdp_rfcomm_query.c
|
||||||
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
|
${CC} $^ ${CFLAGS} ${LDFLAGS} -o $@
|
||||||
|
|
||||||
sdp_general_query: ${CORE_OBJ} ${COMMON_OBJ} sdp_general_query.c
|
sdp_general_query: ${CORE_OBJ} ${COMMON_OBJ} sdp_general_query.c
|
||||||
|
@ -36,7 +36,7 @@ static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3};
|
|||||||
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
static void handle_sdp_client_query_result(sdp_query_event_t * event);
|
||||||
|
|
||||||
static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){
|
||||||
printf("packet_handler type %u, packet[0] %x\n", packet_type, packet[0]);
|
// printf("packet_handler type %u, packet[0] %x\n", packet_type, packet[0]);
|
||||||
|
|
||||||
if (packet_type != HCI_EVENT_PACKET) return;
|
if (packet_type != HCI_EVENT_PACKET) return;
|
||||||
uint8_t event = packet[0];
|
uint8_t event = packet[0];
|
||||||
@ -107,6 +107,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
|
|||||||
case SDP_QUERY_COMPLETE:
|
case SDP_QUERY_COMPLETE:
|
||||||
ce = (sdp_query_complete_event_t*) event;
|
ce = (sdp_query_complete_event_t*) event;
|
||||||
printf("General query done with status %d.\n\n", ce->status);
|
printf("General query done with status %d.\n\n", ce->status);
|
||||||
|
exit(0);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,12 +95,13 @@ void sdp_client_query(bd_addr_t remote, uint8_t * des_serviceSearchPattern, uint
|
|||||||
l2cap_create_channel_internal(NULL, sdp_packet_handler, remote, PSM_SDP, l2cap_max_mtu());
|
l2cap_create_channel_internal(NULL, sdp_packet_handler, remote, PSM_SDP, l2cap_max_mtu());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int can_send_now(uint16_t channel){
|
||||||
|
if (sdp_client_state != W2_SEND) return 0;
|
||||||
|
if (!l2cap_can_send_packet_now(channel)) return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void try_to_send(uint16_t channel){
|
static void send_request(uint16_t channel){
|
||||||
if (sdp_client_state != W2_SEND) return;
|
|
||||||
|
|
||||||
if (!l2cap_can_send_packet_now(channel)) return;
|
|
||||||
|
|
||||||
l2cap_reserve_packet_buffer();
|
l2cap_reserve_packet_buffer();
|
||||||
uint8_t * data = l2cap_get_outgoing_buffer();
|
uint8_t * data = l2cap_get_outgoing_buffer();
|
||||||
uint16_t request_len = 0;
|
uint16_t request_len = 0;
|
||||||
@ -118,7 +119,7 @@ static void try_to_send(uint16_t channel){
|
|||||||
request_len = setup_service_search_attribute_request(data);
|
request_len = setup_service_search_attribute_request(data);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
log_error("SDP Client try_to_send :: PDU ID invalid. %u", PDU_ID);
|
log_error("SDP Client send_request :: PDU ID invalid. %u", PDU_ID);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -221,7 +222,7 @@ void sdp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet,
|
|||||||
}
|
}
|
||||||
// prepare next request and send
|
// prepare next request and send
|
||||||
sdp_client_state = W2_SEND;
|
sdp_client_state = W2_SEND;
|
||||||
try_to_send(sdp_cid);
|
if (can_send_now(sdp_cid)) send_request(sdp_cid);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,11 +246,12 @@ void sdp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet,
|
|||||||
log_info("SDP Client Connected, cid %x, mtu %u.", sdp_cid, mtu);
|
log_info("SDP Client Connected, cid %x, mtu %u.", sdp_cid, mtu);
|
||||||
|
|
||||||
sdp_client_state = W2_SEND;
|
sdp_client_state = W2_SEND;
|
||||||
try_to_send(sdp_cid);
|
if (can_send_now(sdp_cid)) send_request(sdp_cid);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case L2CAP_EVENT_CREDITS:
|
case L2CAP_EVENT_CREDITS:
|
||||||
case DAEMON_EVENT_HCI_PACKET_SENT:
|
case DAEMON_EVENT_HCI_PACKET_SENT:
|
||||||
try_to_send(sdp_cid);
|
if (can_send_now(sdp_cid)) send_request(sdp_cid);
|
||||||
break;
|
break;
|
||||||
case L2CAP_EVENT_CHANNEL_CLOSED: {
|
case L2CAP_EVENT_CHANNEL_CLOSED: {
|
||||||
if (sdp_cid != READ_BT_16(packet, 2)) {
|
if (sdp_cid != READ_BT_16(packet, 2)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user