sdp client: extracted method can_send_now

This commit is contained in:
mila@ringwald.ch 2014-10-23 09:07:02 +00:00
parent 84e56682a4
commit c81dbccfbb
3 changed files with 18 additions and 11 deletions

View File

@ -66,6 +66,9 @@ SM_MINIMAL = \
SDP_DES = \
${BTSTACK_ROOT}/test/des_iterator/des_iterator.c \
PAN = \
${BTSTACK_ROOT}/src/pan.c \
CORE_OBJ = $(CORE:.c=.o)
COMMON_OBJ = $(COMMON:.c=.o)
CC2564_OBJ = $(CC2564:.c=.o)
@ -75,6 +78,7 @@ SM_MINIMAL_OBJ = $(SM_MINIMAL:.c=.o)
ATT_OBJ = $(ATT:.c=.o)
GATT_CLIENT_OBJ = $(GATT_CLIENT:.c=.o)
GATT_SERVER_OBJ = $(GATT_SERVER:.c=.o)
PAN_OBJ = $(PAN:.c=.o)
# 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}/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 $@
sdp_general_query: ${CORE_OBJ} ${COMMON_OBJ} sdp_general_query.c

View File

@ -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 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;
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:
ce = (sdp_query_complete_event_t*) event;
printf("General query done with status %d.\n\n", ce->status);
exit(0);
break;
}
}

View File

@ -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());
}
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){
if (sdp_client_state != W2_SEND) return;
if (!l2cap_can_send_packet_now(channel)) return;
static void send_request(uint16_t channel){
l2cap_reserve_packet_buffer();
uint8_t * data = l2cap_get_outgoing_buffer();
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);
break;
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;
}
@ -221,7 +222,7 @@ void sdp_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t *packet,
}
// prepare next request and send
sdp_client_state = W2_SEND;
try_to_send(sdp_cid);
if (can_send_now(sdp_cid)) send_request(sdp_cid);
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);
sdp_client_state = W2_SEND;
try_to_send(sdp_cid);
if (can_send_now(sdp_cid)) send_request(sdp_cid);
break;
case L2CAP_EVENT_CREDITS:
case DAEMON_EVENT_HCI_PACKET_SENT:
try_to_send(sdp_cid);
if (can_send_now(sdp_cid)) send_request(sdp_cid);
break;
case L2CAP_EVENT_CHANNEL_CLOSED: {
if (sdp_cid != READ_BT_16(packet, 2)) {