• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2018 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #pragma once
18 
19 #include <vector>
20 
21 // AVRCP packets pulled from wireshark
22 namespace {
23 
24 // AVRCP Get Capabilities Request packet
25 std::vector<uint8_t> get_capabilities_request = {
26     0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x03};
27 
28 // AVRCP Get Capabilities Request packet with Company ID
29 std::vector<uint8_t> get_capabilities_request_company_id = {
30     0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x02};
31 
32 // AVRCP Get Capabilities Request packet with Unknown
33 std::vector<uint8_t> get_capabilities_request_unknown = {
34     0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00, 0x01, 0x7f};
35 
36 // AVRCP Get Capabilities Response to Company ID request
37 std::vector<uint8_t> get_capabilities_response_company_id = {
38     0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00, 0x00,
39     0x08, 0x02, 0x02, 0x00, 0x19, 0x58, 0x00, 0x23, 0x45};
40 
41 // AVRCP Get Capabilities Response to Events Supported request
42 std::vector<uint8_t> get_capabilities_response_events_supported = {
43     0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x10, 0x00,
44     0x00, 0x05, 0x03, 0x03, 0x01, 0x02, 0x05};
45 
46 // AVRCP Get Element Attributes request for current playing song and attribute
47 // Title
48 std::vector<uint8_t> get_element_attributes_request_partial = {
49     0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x0d, 0x00, 0x00,
50     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01};
51 
52 // AVRCP Get Element Attributes request for current playing song and attributes
53 // Title, Artist, Album, Media Number, Playing Time, Total Number of Media, and
54 // Genre
55 std::vector<uint8_t> get_element_attributes_request_full = {
56     0x01, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x25, 0x00, 0x00,
57     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00,
58     0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00,
59     0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06};
60 
61 // AVRCP Get Element Attributes response with attribute values as follows
62 // Title: "Test Song"
63 // Artist: "Test Artist"
64 // Album: "Test Album"
65 // Track Number: "1"
66 // Number of Tracks: "2"
67 // Genre: "Test Genre"
68 // Duration: "1000"
69 std::vector<uint8_t> get_elements_attributes_response_full = {
70     0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x20, 0x00, 0x00, 0x67, 0x07, 0x00,
71     0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x09, 0x54, 0x65, 0x73, 0x74, 0x20,
72     0x53, 0x6f, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x02, 0x00, 0x6a, 0x00, 0x0b,
73     0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x72, 0x74, 0x69, 0x73, 0x74, 0x00,
74     0x00, 0x00, 0x03, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20,
75     0x41, 0x6c, 0x62, 0x75, 0x6d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x6a, 0x00,
76     0x01, 0x31, 0x00, 0x00, 0x00, 0x05, 0x00, 0x6a, 0x00, 0x01, 0x32, 0x00,
77     0x00, 0x00, 0x06, 0x00, 0x6a, 0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20,
78     0x47, 0x65, 0x6e, 0x72, 0x65, 0x00, 0x00, 0x00, 0x07, 0x00, 0x6a, 0x00,
79     0x04, 0x31, 0x30, 0x30, 0x30};
80 
81 // AVRCP Get Play Status Request
82 std::vector<uint8_t> get_play_status_request = {0x01, 0x48, 0x00, 0x00, 0x19,
83                                                 0x58, 0x30, 0x00, 0x00, 0x00};
84 
85 // AVRCP Get Play Status Response
86 std::vector<uint8_t> get_play_status_response = {
87     0x0c, 0x48, 0x00, 0x00, 0x19, 0x58, 0x30, 0x00, 0x00, 0x09,
88     0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00};
89 
90 // AVRCP Pass Through Command Play Pushed Request
91 std::vector<uint8_t> pass_through_command_play_pushed = {0x00, 0x48, 0x7c, 0x44,
92                                                          0x00};
93 
94 // AVRCP Pass Through Command Play Pushed Response
95 std::vector<uint8_t> pass_through_command_play_released = {0x09, 0x48, 0x7c,
96                                                            0xc4, 0x00};
97 
98 // AVRCP Register Playback Status Notification
99 std::vector<uint8_t> register_play_status_notification = {
100     0x03, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00,
101     0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x05};
102 
103 // AVRCP Register Volume Changed Notification
104 std::vector<uint8_t> register_volume_changed_notification = {
105     0x03, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00,
106     0x00, 0x05, 0x0d, 0x00, 0x00, 0x00, 0x00};
107 
108 // AVRCP Interim Playback Status Notification
109 std::vector<uint8_t> interim_play_status_notification = {
110     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x01, 0x00};
111 
112 // AVRCP Interim Track Changed Notification
113 std::vector<uint8_t> interim_track_changed_notification = {
114     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x09,
115     0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
116 
117 // AVRCP Changed Playback Position Notification
118 std::vector<uint8_t> changed_play_pos_notification = {
119     0x0d, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00,
120     0x00, 0x05, 0x05, 0x00, 0x00, 0x00, 0x00};
121 
122 // AVRCP Interim Now Playing Changed Notification
123 std::vector<uint8_t> interim_now_playing_notification = {
124     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x01, 0x09};
125 
126 // AVRCP Interim Available Players Changed Notification
127 std::vector<uint8_t> interim_available_players_notification = {
128     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x01, 0x0a};
129 
130 // AVRCP Interim Addressed Player Changed Notification with active
131 // player ID 1
132 std::vector<uint8_t> interim_addressed_player_notification = {
133     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00,
134     0x00, 0x05, 0x0b, 0x00, 0x01, 0x00, 0x00};
135 
136 // AVRCP Interim UIDs Changed Notification
137 std::vector<uint8_t> interim_uids_notificaiton = {0x0f, 0x48, 0x00, 0x00, 0x19,
138                                                   0x58, 0x31, 0x00, 0x00, 0x03,
139                                                   0x0c, 0x00, 0x00};
140 
141 // AVRCP Interim Volume Changed Notification with volume at 55% (0x47)
142 std::vector<uint8_t> interim_volume_changed_notification = {
143     0x0f, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x47};
144 
145 // AVRCP Rejected Volume Changed Notification with volume at 0%
146 std::vector<uint8_t> rejected_volume_changed_notification = {
147     0x0a, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x00};
148 
149 // AVRCP Changed Volume Changed Notification with volume at 55% (0x47)
150 std::vector<uint8_t> changed_volume_changed_notification = {
151     0x0d, 0x48, 0x00, 0x00, 0x19, 0x58, 0x31, 0x00, 0x00, 0x02, 0x0d, 0x47};
152 
153 // AVRCP Reject List Player Application Settings Response
154 std::vector<uint8_t> reject_player_app_settings_response = {
155     0x0a, 0x48, 0x00, 0x00, 0x19, 0x58, 0x11, 0x00, 0x00, 0x01, 0x00};
156 
157 // AVRCP Browse General Reject packet for invalid PDU ID
158 std::vector<uint8_t> general_reject_invalid_command_packet = {0xa0, 0x00, 0x01,
159                                                               0x00};
160 
161 // AVRCP Browse Get Folder Items Request packet for media players with
162 // the following data:
163 //    scope = 0x00 (Media Player List)
164 //    start_item = 0x00
165 //    end_item = 0x03
166 //    attributes_requested: all
167 std::vector<uint8_t> get_folder_items_request = {0x71, 0x00, 0x0a, 0x00, 0x00,
168                                                  0x00, 0x00, 0x00, 0x00, 0x00,
169                                                  0x00, 0x03, 0x00};
170 
171 // AVRCP Browse Get Folder Items Request packet for media players with
172 // the following data:
173 //    scope = 0x01 (VFS)
174 //    start_item = 0x00
175 //    end_item = 0x09
176 //    attributes_requested: none
177 std::vector<uint8_t> get_folder_items_request_no_attrs = {
178     0x71, 0x00, 0x0a, 0x01, 0x00, 0x00, 0x00,
179     0x00, 0x00, 0x00, 0x00, 0x09, 0xff};
180 
181 // AVRCP Browse Get Folder Items Request packet for media players with
182 // the following data:
183 //    scope = 0x01 (VFS)
184 //    start_item = 0x00
185 //    end_item = 0x09
186 //    attributes_requested: Title
187 std::vector<uint8_t> get_folder_items_request_title = {
188     0x71, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
189     0x00, 0x00, 0x09, 0x01, 0x00, 0x00, 0x00, 0x1};
190 
191 // AVRCP Browse Get Folder Items Request packet for vfs with
192 // the following data:
193 //    scope = 0x01 (VFS)
194 //    start_item = 0x00
195 //    end_item = 0x05
196 //    attributes_requested: TITLE
197 std::vector<uint8_t> get_folder_items_request_vfs = {
198     0x71, 0x00, 0x0e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
199     0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x00, 0x01};
200 
201 // AVRCP Browse Get Folder Items Request packet for now playing with
202 // the following data:
203 //    scope = 0x03 (Now Playing)
204 //    start_item = 0x00
205 //    end_item = 0x05
206 //    attributes_requested: All Items
207 std::vector<uint8_t> get_folder_items_request_now_playing = {
208     0x71, 0x00, 0x0e, 0x03, 0x00, 0x00, 0x00,
209     0x00, 0x00, 0x00, 0x00, 0x05, 0x00};
210 
211 // AVRCP Browse Get Folder Items Response packet with range out of bounds error
212 std::vector<uint8_t> get_folder_items_error_response = {0x71, 0x00, 0x01, 0x0b};
213 
214 // AVRCP Browse Get Folder Items Response packet for media players
215 // Contains one media player with the following fields:
216 //    id = 0x0001
217 //    name = "com.google.android.music"
218 //    browsing_supported = true
219 std::vector<uint8_t> get_folder_items_media_player_response = {
220     0x71, 0x00, 0x3c, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x34,
221     0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
222     0x00, 0x00, 0xb7, 0x01, 0x0c, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
223     0x00, 0x00, 0x00, 0x6a, 0x00, 0x18, 0x63, 0x6f, 0x6d, 0x2e, 0x67,
224     0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x61, 0x6e, 0x64, 0x72, 0x6f,
225     0x69, 0x64, 0x2e, 0x6d, 0x75, 0x73, 0x69, 0x63};
226 
227 // AVRCP Browse Get Folder Items Response packet with one folder
228 // with the following fields:
229 //    uid = 0x0000000000000001
230 //    type = 0x00 (Mixed);
231 //    name = "Test Folder"
232 //    is_playable = true
233 std::vector<uint8_t> get_folder_items_folder_response = {
234     0x71, 0x00, 0x21, 0x04, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x19, 0x00,
235     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x6a, 0x00,
236     0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72};
237 
238 // AVRCP Browse Get Folder Items Response packet with one song
239 // with the following fields:
240 //    uid = 0x0000000000000002
241 //    name = "Test Title"
242 //    attribute[TITLE] = "Test Title"
243 std::vector<uint8_t> get_folder_items_song_response = {
244     0x71, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x2a,
245     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x6a,
246     0x00, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x74, 0x6c,
247     0x65, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00, 0x0a, 0x54,
248     0x65, 0x73, 0x74, 0x20, 0x54, 0x69, 0x74, 0x6c, 0x65};
249 
250 // AVRCP Browse Change Path Request down to folder with UID 0x0000000000000002
251 std::vector<uint8_t> change_path_request = {0x72, 0x00, 0x0b, 0x00, 0x00,
252                                             0x01, 0x00, 0x00, 0x00, 0x00,
253                                             0x00, 0x00, 0x00, 0x02};
254 
255 // AVRCP Browse Change Path Request up
256 std::vector<uint8_t> change_path_up_request = {0x72, 0x00, 0x0b, 0x00, 0x00,
257                                                0x00, 0xFF, 0xFF, 0xFF, 0xFF,
258                                                0xFF, 0xFF, 0xFF, 0xFF};
259 
260 // AVRCP Browse Change Path Response with two items in current folder
261 std::vector<uint8_t> change_path_response = {0x72, 0x00, 0x05, 0x04,
262                                              0x00, 0x00, 0x00, 0x02};
263 
264 // AVRCP Browse Change Path Response with an error of invalid direction
265 std::vector<uint8_t> change_path_error_response = {0x72, 0x00, 0x01, 0x07};
266 
267 // AVRCP Get Item Attributes request with all attributes requested
268 // with the following fields:
269 //    scope = 0x03 (Now Playing List)
270 //    uid_counter = 0x0000
271 //    uid = 0x0000000000000001
272 std::vector<uint8_t> get_item_attributes_request_all_attributes = {
273     0x73, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
274     0x01, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
275     0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
276     0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07};
277 
278 // AVRCP Get Item Attributes request with all attributes requested
279 // with the following fields:
280 //    scope = 0x03 (Now Playing List)
281 //    uid_counter = 0x0001
282 //    uid = 0x0000000000000001
283 std::vector<uint8_t> get_item_attributes_request_all_attributes_invalid = {
284     0x73, 0x00, 0x28, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
285     0x01, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
286     0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
287     0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07};
288 
289 // AVRCP Get Item Attributes Response with the following attributes:
290 //    title = "Test Song"
291 //    artist = "Test Artist"
292 //    album = "Test Album"
293 std::vector<uint8_t> get_item_attributes_song_response = {
294     0x73, 0x00, 0x38, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x6a, 0x00,
295     0x09, 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x6f, 0x6e, 0x67, 0x00, 0x00,
296     0x00, 0x02, 0x00, 0x6a, 0x00, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41,
297     0x72, 0x74, 0x69, 0x73, 0x74, 0x00, 0x00, 0x00, 0x03, 0x00, 0x6a, 0x00,
298     0x0a, 0x54, 0x65, 0x73, 0x74, 0x20, 0x41, 0x6c, 0x62, 0x75, 0x6d};
299 
300 // AVRCP Set Addressed Player Request with player_id = 1
301 std::vector<uint8_t> set_addressed_player_request = {
302     0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x02, 0x00, 0x01};
303 
304 // AVRCP Set Addressed Player Response with status success
305 std::vector<uint8_t> set_addressed_player_response = {
306     0x09, 0x48, 0x00, 0x00, 0x19, 0x58, 0x60, 0x00, 0x00, 0x01, 0x04};
307 
308 // AVRCP Set Browsed Player Request with player_id = 2
309 std::vector<uint8_t> set_browsed_player_request = {0x70, 0x00, 0x02, 0x00,
310                                                    0x02};
311 
312 // AVRCP Set Browsed Player Response with num items = 4 and depth = 0
313 std::vector<uint8_t> set_browsed_player_response = {
314     0x70, 0x00, 0x0a, 0x04, 0x00, 0x00, 0x00,
315     0x00, 0x00, 0x04, 0x00, 0x6a, 0x00};
316 
317 // AVRCP Get Total Number of Items Request with Scope = Media Player List
318 std::vector<uint8_t> get_total_number_of_items_request_media_players = {
319     0x75, 0x00, 0x01, 0x00};
320 
321 // AVRCP Get Total Number of Items Request with Scope = VFS
322 std::vector<uint8_t> get_total_number_of_items_request_vfs = {0x75, 0x00, 0x01,
323                                                               0x01};
324 
325 // AVRCP Get Total Number of Items Request with Scope = Now Playing List
326 std::vector<uint8_t> get_total_number_of_items_request_now_playing = {
327     0x75, 0x00, 0x01, 0x03};
328 
329 // AVRCP Get Total number of Items Response with 5 items in folder
330 std::vector<uint8_t> get_total_number_of_items_response = {
331     0x75, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05};
332 
333 // AVRCP Play Item Request with scope = Now Playing and
334 // UID = 0x0000000000000003
335 std::vector<uint8_t> play_item_request = {
336     0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x74, 0x00, 0x00, 0x0b, 0x03,
337     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00};
338 
339 // AVRCP Play Item Response
340 std::vector<uint8_t> play_item_response = {0x09, 0x48, 0x00, 0x00, 0x19, 0x58,
341                                            0x74, 0x00, 0x00, 0x01, 0x04};
342 
343 // AVRCP Set Absolute Volume Request with volume at 56% (0x48)
344 std::vector<uint8_t> set_absolute_volume_request = {
345     0x00, 0x48, 0x00, 0x00, 0x19, 0x58, 0x50, 0x00, 0x00, 0x01, 0x48};
346 
347 // AVRCP Set Absolute Volume Response with voume at 52% (0x43)
348 std::vector<uint8_t> set_absolute_volume_response = {
349     0x09, 0x48, 0x00, 0x00, 0x19, 0x58, 0x50, 0x00, 0x00, 0x01, 0x43};
350 
351 }  // namespace
352