diff --git a/example/avrcp_browsing_client.c b/example/avrcp_browsing_client.c index 0f4280735..fc05fea19 100644 --- a/example/avrcp_browsing_client.c +++ b/example/avrcp_browsing_client.c @@ -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) {