/* * Copyright 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once #include // AVRCP packets pulled from wireshark namespace { // AVRCP Get Capabilities Request packet std::vector get_capabilities_request = { 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x03}; // AVRCP Get Capabilities Request packet with Company ID std::vector get_capabilities_request_company_id = { 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x02}; // AVRCP Get Capabilities Request packet with Unknown std::vector get_capabilities_request_unknown = { 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x7f}; // AVRCP Get Capabilities Response to Company ID request std::vector get_capabilities_response_company_id = { 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x08, 0x02, 0x02, 0x00, 0x19, 0x58, 0x00, 0x23, 0x45}; // AVRCP Get Capabilities Response to Events Supported request std::vector get_capabilities_response_events_supported = { 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x05, 0x03, 0x03, 0x01, 0x02, 0x05}; // AVRCP Get Element Attributes request for current playing song and attribute // Title std::vector get_element_attributes_request_partial = { 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}; // AVRCP Get Element Attributes request for current playing song and attributes // Title, Artist, Album, Media Number, Playing Time, Total Number of Media, and // Genre std::vector get_element_attributes_request_full = { 0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06}; // AVRCP Get Element Attributes response with attribute values as follows // Title: "Test Song" // Artist: "Test Artist" // Album: "Test Album" // Track Number: "1" // Number of Tracks: "2" // Genre: "Test Genre" // Duration: "1000" std::vector get_elements_attributes_response_full = { 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x67, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x09, 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x6f, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6a, 0x00, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x6c, 0x62, 0x75, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x01, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x6a, 0x00, 0x01, 0x32, 0x00, 0x00, 0x00, 0x06, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x47, 0x65, 0x6e, 0x72, 0x65, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6a, 0x00, 0x04, 0x31, 0x30, 0x30, 0x30}; // AVRCP Get Play Status Request std::vector get_play_status_request = {0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x30, 0x00, 0x00, 0x00}; // AVRCP Get Play Status Response std::vector get_play_status_response = { 0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x30, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00}; // AVRCP Pass Through Command Play Pushed Request std::vector pass_through_command_play_pushed = {0x00, 0x48, 0x7c, 0x44, 0x00}; // AVRCP Pass Through Command Play Pushed Response std::vector pass_through_command_play_released = {0x09, 0x48, 0x7c, 0xc4, 0x00}; // AVRCP Register Playback Status Notification std::vector register_play_status_notification = { 0x03, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x05}; // AVRCP Register Volume Changed Notification std::vector register_volume_changed_notification = { 0x03, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x05, 0x0d, 0x00, 0x00, 0x00, 0x00}; // AVRCP Register Notification without any parameter std::vector register_notification_invalid = {0x03, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00}; // AVRCP Interim Playback Status Notification std::vector interim_play_status_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x01, 0x00}; // AVRCP Interim Track Changed Notification std::vector interim_track_changed_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x09, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // AVRCP Changed Playback Position Notification std::vector changed_play_pos_notification = { 0x0d, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00}; // AVRCP Interim Now Playing Changed Notification std::vector interim_now_playing_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x01, 0x09}; // AVRCP Interim Available Players Changed Notification std::vector interim_available_players_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x01, 0x0a}; // AVRCP Interim Addressed Player Changed Notification with active // player ID 1 std::vector interim_addressed_player_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x05, 0x0b, 0x00, 0x01, 0x00, 0x00}; // AVRCP Interim UIDs Changed Notification std::vector interim_uids_notificaiton = {0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00}; // AVRCP Interim Volume Changed Notification with volume at 55% (0x47) std::vector interim_volume_changed_notification = { 0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x47}; // AVRCP Rejected Volume Changed Notification with volume at 0% std::vector rejected_volume_changed_notification = { 0x0a, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x00}; // AVRCP Changed Volume Changed Notification with volume at 55% (0x47) std::vector changed_volume_changed_notification = { 0x0d, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x47}; // AVRCP Reject List Player Application Settings Response std::vector reject_player_app_settings_response = { 0x0a, 0x48, 0x00, 0x00, 0x19, 0x58, 0x11, 0x00, 0x00, 0x01, 0x00}; // AVRCP Browse General Reject packet for invalid PDU ID std::vector general_reject_invalid_command_packet = {0xa0, 0x00, 0x01, 0x00}; // AVRCP Browse Get Folder Items Request packet for media players with // the following data: // scope = 0x00 (Media Player List) // start_item = 0x00 // end_item = 0x03 // attributes_requested: all std::vector get_folder_items_request = {0x71, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00}; // AVRCP Browse Get Folder Items Request packet for media players with // the following data: // scope = 0x01 (VFS) // start_item = 0x00 // end_item = 0x09 // attributes_requested: none std::vector get_folder_items_request_no_attrs = { 0x71, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff}; // AVRCP Browse Get Folder Items Request packet for media players with // the following data: // scope = 0x01 (VFS) // start_item = 0x00 // end_item = 0x09 // attributes_requested: Title std::vector get_folder_items_request_title = { 0x71, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x1}; // AVRCP Browse Get Folder Items Request packet for vfs with // the following data: // scope = 0x01 (VFS) // start_item = 0x00 // end_item = 0x05 // attributes_requested: TITLE std::vector get_folder_items_request_vfs = { 0x71, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01}; // AVRCP Browse Get Folder Items Request packet for now playing with // the following data: // scope = 0x03 (Now Playing) // start_item = 0x00 // end_item = 0x05 // attributes_requested: All Items std::vector get_folder_items_request_now_playing = {0x71, 0x00, 0x0a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00}; // AVRCP Browse Get Folder Items Response packet with range out of bounds error std::vector get_folder_items_error_response = {0x71, 0x00, 0x01, 0x0b}; // AVRCP Browse Get Folder Items Response packet for media players // Contains one media player with the following fields: // id = 0x0001 // name = "com.google.android.music" // browsing_supported = true std::vector get_folder_items_media_player_response = { 0x71, 0x00, 0x3c, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x34, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x01, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f, 0x69, 0x64, 0x2e, 0x6d, 0x75, 0x73, 0x69, 0x63}; // AVRCP Browse Get Folder Items Response packet with one folder // with the following fields: // uid = 0x0000000000000001 // type = 0x00 (Mixed); // name = "Test Folder" // is_playable = true std::vector get_folder_items_folder_response = { 0x71, 0x00, 0x21, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72}; // AVRCP Browse Get Folder Items Response packet with one song // with the following fields: // uid = 0x0000000000000002 // name = "Test Title" // attribute[TITLE] = "Test Title" std::vector get_folder_items_song_response = { 0x71, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x74, 0x6c, 0x65, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x74, 0x6c, 0x65}; // AVRCP Browse Change Path Request down to folder with UID 0x0000000000000002 std::vector change_path_request = {0x72, 0x00, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}; // AVRCP Browse Change Path Request up std::vector change_path_up_request = {0x72, 0x00, 0x0b, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // AVRCP Browse Change Path Response with two items in current folder std::vector change_path_response = {0x72, 0x00, 0x05, 0x04, 0x00, 0x00, 0x00, 0x02}; // AVRCP Browse Change Path Response with an error of invalid direction std::vector change_path_error_response = {0x72, 0x00, 0x01, 0x07}; // AVRCP Get Item Attributes request with all attributes requested // with the following fields: // scope = 0x03 (Now Playing List) // uid_counter = 0x0000 // uid = 0x0000000000000001 std::vector get_item_attributes_request_all_attributes = { 0x73, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07}; // AVRCP Get Item Attributes request with all attributes requested // with the following fields: // scope = 0x03 (Now Playing List) // uid_counter = 0x0001 // uid = 0x0000000000000001 std::vector get_item_attributes_request_all_attributes_invalid = { 0x73, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07}; // AVRCP Get Item Attributes Response with the following attributes: // title = "Test Song" // artist = "Test Artist" // album = "Test Album" std::vector get_item_attributes_song_response = { 0x73, 0x00, 0x38, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x09, 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x6f, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6a, 0x00, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x6c, 0x62, 0x75, 0x6d}; // AVRCP Set Addressed Player Request with player_id = 0 std::vector set_addressed_player_request = { 0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x02, 0x00, 0x00}; // AVRCP Set Addressed Player Request with player_id = 1 std::vector set_addressed_player_id_1_request = { 0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x02, 0x00, 0x01}; // AVRCP Set Addressed Player Response with status success std::vector set_addressed_player_response = { 0x09, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x01, 0x04}; // AVRCP Set Browsed Player Request with player_id = 2 std::vector set_browsed_player_request = {0x70, 0x00, 0x02, 0x00, 0x02}; // AVRCP Set Browsed Player Request with player_id = 0 std::vector set_browsed_player_id_0_request = {0x70, 0x00, 0x02, 0x00, 0x00}; // AVRCP Set Browsed Player Response with num items = 4 and depth = 0 std::vector set_browsed_player_response = { 0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6a, 0x00}; // AVRCP Get Total Number of Items Request with Scope = Media Player List std::vector get_total_number_of_items_request_media_players = { 0x75, 0x00, 0x01, 0x00}; // AVRCP Get Total Number of Items Request with Scope = VFS std::vector get_total_number_of_items_request_vfs = {0x75, 0x00, 0x01, 0x01}; // AVRCP Get Total Number of Items Request with Scope = Now Playing List std::vector get_total_number_of_items_request_now_playing = { 0x75, 0x00, 0x01, 0x03}; // AVRCP Get Total number of Items Response with 5 items in folder std::vector get_total_number_of_items_response = { 0x75, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05}; // AVRCP Play Item Request with scope = Now Playing and // UID = 0x0000000000000003 std::vector play_item_request = { 0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x74, 0x00, 0x00, 0x0b, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00}; // AVRCP Play Item Response std::vector play_item_response = {0x09, 0x48, 0x00, 0x00, 0x19, 0x58, 0x74, 0x00, 0x00, 0x01, 0x04}; // AVRCP Set Absolute Volume Request with volume at 56% (0x48) std::vector set_absolute_volume_request = { 0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x50, 0x00, 0x00, 0x01, 0x48}; // AVRCP Set Absolute Volume Response with voume at 52% (0x43) std::vector set_absolute_volume_response = { 0x09, 0x48, 0x00, 0x00, 0x19, 0x58, 0x50, 0x00, 0x00, 0x01, 0x43}; // Invalid Packets // Short Vendor Packet std::vector short_vendor_packet = {0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01}; // Short Get Capabilities Request Packet std::vector short_get_capabilities_request = {0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x00}; // Short Get Element Attributes Request Packet std::vector short_get_element_attributes_request = {0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x00}; // Short Play Item Request Packet std::vector short_play_item_request = {0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x74, 0x00, 0x00, 0x00}; // Short Set Addressed Player Request Packet std::vector short_set_addressed_player_request = {0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x00}; // Short Browse Packet std::vector short_browse_packet = {0x71, 0x00, 0x0a}; // Short Get Folder Items Request Packet std::vector short_get_folder_items_request = {0x71, 0x00, 0x00}; // Short Get Total Number of Items Request Packet std::vector short_get_total_number_of_items_request = {0x75, 0x00, 0x00}; // Short Change Path Request Packet std::vector short_change_path_request = {0x72, 0x00, 0x00}; // Short Get Item Attributes Request Packet std::vector short_get_item_attributes_request = {0x73, 0x00, 0x00}; } // namespace