allow to test UCD against PTS

This commit is contained in:
matthias.ringwald@gmail.com 2015-02-20 14:21:56 +00:00
parent 462e630d76
commit 32a39397ce

View File

@ -67,7 +67,8 @@
void show_usage();
// static bd_addr_t remote = {0x04,0x0C,0xCE,0xE4,0x85,0xD3};
static bd_addr_t remote = {0x84, 0x38, 0x35, 0x65, 0xD1, 0x15};
// static bd_addr_t remote = {0x84, 0x38, 0x35, 0x65, 0xD1, 0x15};
static bd_addr_t remote = {0x00, 0x1b, 0xdc, 0x07, 0x32, 0xef};
static bd_addr_t remote_rfcomm = {0x00, 0x00, 0x91, 0xE0, 0xD4, 0xC7};
static uint8_t rfcomm_channel_nr = 1;
@ -265,6 +266,10 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
uint16_t psm;
uint32_t passkey;
if (packet_type == UCD_DATA_PACKET){
printf("UCD Data for PSM %04x received, size %u\n", READ_BT_16(packet, 0), size - 2);
}
if (packet_type != HCI_EVENT_PACKET) return;
switch (packet[0]) {
@ -291,6 +296,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
if (!packet[2]){
handle = READ_BT_16(packet, 3);
bt_flip_addr(remote, &packet[5]);
printf("HCI_EVENT_CONNECTION_COMPLETE: handle 0x%04x\n", handle);
}
break;
@ -410,6 +416,18 @@ void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
}
}
void send_ucd_packet(){
l2cap_reserve_packet_buffer();
int ucd_size = 50;
uint8_t * ucd_buffer = l2cap_get_outgoing_buffer();
bt_store_16(ucd_buffer, 0, 0x2211);
int i;
for (i=2; i< ucd_size ; i++){
ucd_buffer[i] = i;
}
l2cap_send_prepared_connectionless(handle, L2CAP_CID_CONNECTIONLESS_CHANNEL, ucd_size);
}
void heartbeat_handler(struct timer *ts){
if (rfcomm_channel_id){
static int counter = 0;
@ -458,10 +476,12 @@ void show_usage(){
printf("w - query RFCOMM Remote Port Negotiation\n");
printf("o - close RFCOMM connection\n");
printf("---\n");
printf("p - create L2CAP channel to SDP at addr %s\n", bd_addr_to_str(remote));
// printf("u - create L2CAP channel to PSM #3 (RFCOMM) at addr %s\n", bd_addr_to_str(remote));
// printf("p - create L2CAP channel to SDP at addr %s\n", bd_addr_to_str(remote));
printf("p - create HCI connection to addr %s\n", bd_addr_to_str(remote));
printf("Q - close HCI connection\n");
printf("q - send L2CAP data\n");
printf("r - send L2CAP ECHO request\n");
printf("U - send UCD data\n");
printf("s - close L2CAP channel\n");
printf("x - require SSP for outgoing SDP L2CAP channel\n");
printf("+ - initate SSP on current connection\n");
@ -607,9 +627,12 @@ int stdin_process(struct data_source *ds){
break;
case 'p':
printf("Creating L2CAP Connection to %s, PSM SDP\n", bd_addr_to_str(remote));
l2cap_create_channel_internal(NULL, packet_handler, remote, PSM_SDP, 100);
printf("Creating HCI Connection to %s\n", bd_addr_to_str(remote));
hci_send_cmd(&hci_create_connection, remote, hci_usable_acl_packet_types(), 0, 0, 0, 1);
break;
// printf("Creating L2CAP Connection to %s, PSM SDP\n", bd_addr_to_str(remote));
// l2cap_create_channel_internal(NULL, packet_handler, remote, PSM_SDP, 100);
// break;
// case 'u':
// printf("Creating L2CAP Connection to %s, PSM 3\n", bd_addr_to_str(remote));
// l2cap_create_channel_internal(NULL, packet_handler, remote, 3, 100);
@ -672,6 +695,16 @@ int stdin_process(struct data_source *ds){
hci_drop_link_key_for_bd_addr(&remote);
break;
case 'U':
printf("Sending UCD data on handle 0x%04x\n", handle);
send_ucd_packet();
break;
case 'Q':
printf("Closing HCI Connection to handle 0x%04x\n", handle);
gap_disconnect(handle);
break;
default:
show_usage();
break;
@ -778,6 +811,7 @@ int btstack_main(int argc, const char * argv[]){
l2cap_init();
l2cap_register_packet_handler(&packet_handler2);
l2cap_register_fixed_channel(&packet_handler, L2CAP_CID_CONNECTIONLESS_CHANNEL);
rfcomm_init();
rfcomm_register_packet_handler(packet_handler2);
@ -815,3 +849,8 @@ int btstack_main(int argc, const char * argv[]){
run_loop_execute();
return 0;
}
// Notes:
// UCD Test 1: C
// UCD Test 2: p, U, Q
// UCD Test 3: =, p, +, *, U, Q