avrcp_browsing_client: use browsing cid

This commit is contained in:
Milanka Ringwald 2018-10-22 22:09:05 +02:00
parent a796c06fe4
commit 143efbe87c

View File

@ -77,7 +77,10 @@
// static const char * device_addr_string = "84:38:35:65:d1:15";
// iPhone 5S: static const char * device_addr_string = "54:E4:3A:26:A2:39";
// phone 2013:
static const char * device_addr_string = "D8:BB:2C:DF:F1:08";
// static const char * device_addr_string = "B0:34:95:CB:97:C4";
static const char * device_addr_string = "B0:34:95:CB:97:C4";
static bd_addr_t device_addr;
#endif
@ -111,6 +114,7 @@ static avrcp_browsing_folders_t folders[AVRCP_BROWSING_MAX_FOLDERS];
static int folder_index = -1;
static uint16_t players[AVRCP_BROWSING_MAX_PLAYERS];
static int player_index = -1;
static uint16_t browsing_uid_counter = 0;
static btstack_packet_callback_registration_t hci_event_callback_registration;
@ -177,7 +181,7 @@ int btstack_main(int argc, const char * argv[]){
// Initialize AVRCP Browsing Controller, HCI events will be sent to the AVRCP Controller callback.
avrcp_browsing_controller_init();
// // Register AVRCP for HCI events.
// avrcp_browsing_controller_register_packet_handler(&avrcp_browsing_controller_packet_handler);
avrcp_browsing_controller_register_packet_handler(&avrcp_browsing_controller_packet_handler);
// Initialize SDP.
sdp_init();
@ -320,19 +324,22 @@ static void avrcp_browsing_controller_packet_handler(uint8_t packet_type, uint16
uint16_t local_cid;
uint8_t status = 0xFF;
bd_addr_t address;
if (packet[0] != HCI_EVENT_AVRCP_META) break;
switch (packet[2]){
case AVRCP_SUBEVENT_CONNECTION_ESTABLISHED: {
local_cid = avrcp_subevent_connection_established_get_avrcp_cid(packet);
if (browsing_cid != 0 && browsing_cid != local_cid) {
printf("AVRCP Controller connection failed, expected 0x%02X l2cap cid, received 0x%02X\n", browsing_cid, local_cid);
printf("AVRCP_SUBEVENT_CONNECTION_ESTABLISHED cid 0x%02x\n", local_cid);
if (avrcp_cid != 0 && avrcp_cid != local_cid) {
printf("AVRCP Controller connection failed, expected 0x%02X l2cap cid, received 0x%02X\n", avrcp_cid, local_cid);
return;
}
status = avrcp_subevent_connection_established_get_status(packet);
if (status != ERROR_CODE_SUCCESS){
printf("AVRCP Controller connection failed: status 0x%02x\n", status);
browsing_cid = 0;
avrcp_cid = 0;
return;
}
@ -343,14 +350,29 @@ static void avrcp_browsing_controller_packet_handler(uint8_t packet_type, uint16
return;
}
case AVRCP_SUBEVENT_CONNECTION_RELEASED:
printf("AVRCP Browsing Client released.\n");
browsing_cid = 0;
printf("AVRCP Controller Client released.\n");
avrcp_cid = 0;
avrcp_browsing_connected = 0;
folder_index = 0;
memset(folders, 0, sizeof(folders));
return;
case AVRCP_SUBEVENT_INCOMING_BROWSING_CONNECTION:
local_cid = avrcp_subevent_incoming_browsing_connection_get_browsing_cid(packet);
printf("AVRCP_SUBEVENT_INCOMING_BROWSING_CONNECTION cid 0x%02x\n", local_cid);
if (browsing_cid != 0 && browsing_cid != local_cid) {
printf("AVRCP Browsing Client connection failed, expected 0x%02X l2cap cid, received 0x%02X\n", browsing_cid, local_cid);
avrcp_browsing_controller_decline_incoming_connection(browsing_cid);
return;
}
browsing_cid = local_cid;
printf("AVRCP Browsing Client configure incoming connection, browsing cid 0x%02x\n", browsing_cid);
avrcp_browsing_controller_configure_incoming_connection(browsing_cid, ertm_buffer, sizeof(ertm_buffer), &ertm_config);
break;
case AVRCP_SUBEVENT_BROWSING_CONNECTION_ESTABLISHED: {
local_cid = avrcp_subevent_browsing_connection_established_get_browsing_cid(packet);
printf("AVRCP_SUBEVENT_BROWSING_CONNECTION_ESTABLISHED cid 0x%02x\n", local_cid);
if (browsing_cid != 0 && browsing_cid != local_cid) {
printf("AVRCP Browsing Client connection failed, expected 0x%02X l2cap cid, received 0x%02X\n", browsing_cid, local_cid);
return;
@ -370,22 +392,25 @@ static void avrcp_browsing_controller_packet_handler(uint8_t packet_type, uint16
return;
}
case AVRCP_SUBEVENT_BROWSING_CONNECTION_RELEASED:
printf("AVRCP Browsing Client released\n");
printf("AVRCP Browsing Controller released\n");
browsing_cid = 0;
avrcp_browsing_connected = 0;
return;
case AVRCP_SUBEVENT_BROWSING_MEDIA_ITEM_DONE:
case AVRCP_SUBEVENT_BROWSING_DONE:
browsing_query_active = 0;
if (avrcp_subevent_browsing_media_item_done_get_browsing_status(packet) != AVRCP_BROWSING_ERROR_CODE_SUCCESS){
browsing_uid_counter = 0;
if (avrcp_subevent_browsing_done_get_browsing_status(packet) != AVRCP_BROWSING_ERROR_CODE_SUCCESS){
printf("AVRCP Browsing query done with browsing status 0x%02x, bluetooth status 0x%02x.\n",
avrcp_subevent_browsing_media_item_done_get_browsing_status(packet),
avrcp_subevent_browsing_media_item_done_get_bluetooth_status(packet));
avrcp_subevent_browsing_done_get_browsing_status(packet),
avrcp_subevent_browsing_done_get_bluetooth_status(packet));
break;
}
printf("AVRCP Browsing cmd: DONE.\n");
browsing_uid_counter = avrcp_subevent_browsing_done_get_uid_counter(packet);
printf("DONE, browsing_uid_counter %d.\n", browsing_uid_counter);
break;
default:
printf("AVRCP Browsing Client: event is not parsed\n");
break;
}
break;
@ -478,7 +503,7 @@ static void stdin_process(char cmd){
break;
}
printf("Set addressed player\n");
status = avrcp_browsing_controller_set_addressed_player(browsing_cid, players[0]);
status = avrcp_controller_set_addressed_player(avrcp_cid, players[0]);
break;
case 'O':
if (player_index < 0) {