• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2006-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  AVRCP definition and data types
22  *
23  ******************************************************************************/
24 #ifndef _AVRC_DEFS_H
25 #define _AVRC_DEFS_H
26 
27 /*****************************************************************************
28 **  constants
29 *****************************************************************************/
30 
31 /* Profile revision numbers */
32 #define AVRC_REV_1_0        0x0100
33 #define AVRC_REV_1_3        0x0103
34 #define AVRC_REV_1_4        0x0104
35 
36 #define AVRC_PACKET_LEN             512 /* Per the spec, you must support 512 byte RC packets */
37 
38 #define AVRC_MIN_CONTROL_MTU        48  /* Per the spec, minimum MTU for the control channel */
39 #define AVRC_MIN_BROWSE_MTU         335 /* Per the spec, minimum MTU for the browsing channel */
40 
41 #define AVRC_META_PDU_OFFSET        4
42 #define AVRC_SUB_TYPE_LEN           4
43 #define AVRC_UID_SIZE               8
44 #define AVRC_FEATURE_MASK_SIZE      16
45 
46 /* command type codes */
47 #define AVRC_CMD_CTRL       0   /* Instruct a target to perform an operation */
48 #define AVRC_CMD_STATUS     1   /* Check a device�s current status */
49 #define AVRC_CMD_SPEC_INQ   2   /* Check whether a target supports a particular
50                                    control command; all operands are included */
51 #define AVRC_CMD_NOTIF      3   /* Used for receiving notification of a change in a device�s state */
52 #define AVRC_CMD_GEN_INQ    4   /* Check whether a target supports a particular
53                                    control command; operands are not included */
54 
55 /* response type codes */
56 #define AVRC_RSP_NOT_IMPL   8   /* The target does not implement the command specified
57                                    by the opcode and operand,
58                                    or doesn�t implement the specified subunit */
59 #define AVRC_RSP_ACCEPT     9   /* The target executed or is executing the command */
60 #define AVRC_RSP_REJ        10  /* The target implements the command specified by the
61                                    opcode but cannot respond because the current state
62                                    of the target doesn�t allow it */
63 #define AVRC_RSP_IN_TRANS   11  /* The target implements the status command but it is
64                                    in a state of transition; the status command may
65                                    be retried at a future time */
66 #define AVRC_RSP_IMPL_STBL  12  /* For specific inquiry or general inquiy commands,
67                                    the target implements the command; for status
68                                    commands, the target returns stable and includes
69                                    the status results */
70 #define AVRC_RSP_CHANGED    13  /* The response frame contains a notification that the
71                                    target device�s state has changed */
72 #define AVRC_RSP_INTERIM    15  /* For control commands, the target has accepted the
73                                    request but cannot return information within 100
74                                    milliseconds; for notify commands, the target accepted
75                                    the command, and will notify the controller of a change
76                                    of target state at a future time */
77 
78 /* subunit type */
79 #define AVRC_SUB_MONITOR    0x00    /* Monitor */
80 #define AVRC_SUB_AUDIO      0x01    /* Audio */
81 #define AVRC_SUB_PRINTER    0x02    /* Printer */
82 #define AVRC_SUB_DISC       0x03    /* Disc */
83 #define AVRC_SUB_TAPE       0x04    /* Tape recorder/player */
84 #define AVRC_SUB_TUNER      0x05    /* Tuner */
85 #define AVRC_SUB_CA         0x06    /* CA */
86 #define AVRC_SUB_CAMERA     0x07    /* Camera */
87 #define AVRC_SUB_PANEL      0x09    /* Panel */
88 #define AVRC_SUB_BB         0x0A    /* Bulletin Board */
89 #define AVRC_SUB_CAM_STOR   0x0B    /* Camera Storage */
90 #define AVRC_SUB_VENDOR     0x1C    /* Vendor unique */
91 #define AVRC_SUB_EXT        0x1E    /* Subunit type extended to next byte */
92 #define AVRC_SUB_UNIT       0x1F    /* Unit */
93 
94 /* opcodes - defined by 1394ta */
95 #define AVRC_OP_UNIT_INFO   0x30    /* Report unit information */
96 #define AVRC_OP_SUB_INFO    0x31    /* Report subunit information */
97 #define AVRC_OP_VENDOR      0x00    /* Vendor-dependent commands */
98 #define AVRC_OP_PASS_THRU   0x7C    /* panel subunit opcode */
99 /* opcodes 80-9F and E0-FF are not used by 1394ta.Sneak one for the browsing channel */
100 #define AVRC_OP_BROWSE      0xFF    /* Browsing */
101 #define AVRC_OP_INVALID     0xFE    /* invalid one */
102 
103 /* Company ID's
104 */
105 #define AVRC_CO_BLUETOOTH_SIG   0x00FFFFFF
106 #define AVRC_CO_WIDCOMM         0x00000361
107 #define AVRC_CO_BROADCOM        0x00001018
108 #define AVRC_CO_METADATA        0x00001958  /* Unique COMPANY ID for Metadata messages */
109 
110 /* State flag for Passthrough commands
111 */
112 #define AVRC_STATE_PRESS    0
113 #define AVRC_STATE_RELEASE  1
114 
115 /* Operation ID list for Passthrough commands
116 */
117 #define AVRC_ID_SELECT      0x00    /* select */
118 #define AVRC_ID_UP          0x01    /* up */
119 #define AVRC_ID_DOWN        0x02    /* down */
120 #define AVRC_ID_LEFT        0x03    /* left */
121 #define AVRC_ID_RIGHT       0x04    /* right */
122 #define AVRC_ID_RIGHT_UP    0x05    /* right-up */
123 #define AVRC_ID_RIGHT_DOWN  0x06    /* right-down */
124 #define AVRC_ID_LEFT_UP     0x07    /* left-up */
125 #define AVRC_ID_LEFT_DOWN   0x08    /* left-down */
126 #define AVRC_ID_ROOT_MENU   0x09    /* root menu */
127 #define AVRC_ID_SETUP_MENU  0x0A    /* setup menu */
128 #define AVRC_ID_CONT_MENU   0x0B    /* contents menu */
129 #define AVRC_ID_FAV_MENU    0x0C    /* favorite menu */
130 #define AVRC_ID_EXIT        0x0D    /* exit */
131 #define AVRC_ID_0           0x20    /* 0 */
132 #define AVRC_ID_1           0x21    /* 1 */
133 #define AVRC_ID_2           0x22    /* 2 */
134 #define AVRC_ID_3           0x23    /* 3 */
135 #define AVRC_ID_4           0x24    /* 4 */
136 #define AVRC_ID_5           0x25    /* 5 */
137 #define AVRC_ID_6           0x26    /* 6 */
138 #define AVRC_ID_7           0x27    /* 7 */
139 #define AVRC_ID_8           0x28    /* 8 */
140 #define AVRC_ID_9           0x29    /* 9 */
141 #define AVRC_ID_DOT         0x2A    /* dot */
142 #define AVRC_ID_ENTER       0x2B    /* enter */
143 #define AVRC_ID_CLEAR       0x2C    /* clear */
144 #define AVRC_ID_CHAN_UP     0x30    /* channel up */
145 #define AVRC_ID_CHAN_DOWN   0x31    /* channel down */
146 #define AVRC_ID_PREV_CHAN   0x32    /* previous channel */
147 #define AVRC_ID_SOUND_SEL   0x33    /* sound select */
148 #define AVRC_ID_INPUT_SEL   0x34    /* input select */
149 #define AVRC_ID_DISP_INFO   0x35    /* display information */
150 #define AVRC_ID_HELP        0x36    /* help */
151 #define AVRC_ID_PAGE_UP     0x37    /* page up */
152 #define AVRC_ID_PAGE_DOWN   0x38    /* page down */
153 #define AVRC_ID_POWER       0x40    /* power */
154 #define AVRC_ID_VOL_UP      0x41    /* volume up */
155 #define AVRC_ID_VOL_DOWN    0x42    /* volume down */
156 #define AVRC_ID_MUTE        0x43    /* mute */
157 #define AVRC_ID_PLAY        0x44    /* play */
158 #define AVRC_ID_STOP        0x45    /* stop */
159 #define AVRC_ID_PAUSE       0x46    /* pause */
160 #define AVRC_ID_RECORD      0x47    /* record */
161 #define AVRC_ID_REWIND      0x48    /* rewind */
162 #define AVRC_ID_FAST_FOR    0x49    /* fast forward */
163 #define AVRC_ID_EJECT       0x4A    /* eject */
164 #define AVRC_ID_FORWARD     0x4B    /* forward */
165 #define AVRC_ID_BACKWARD    0x4C    /* backward */
166 #define AVRC_ID_ANGLE       0x50    /* angle */
167 #define AVRC_ID_SUBPICT     0x51    /* subpicture */
168 #define AVRC_ID_F1          0x71    /* F1 */
169 #define AVRC_ID_F2          0x72    /* F2 */
170 #define AVRC_ID_F3          0x73    /* F3 */
171 #define AVRC_ID_F4          0x74    /* F4 */
172 #define AVRC_ID_F5          0x75    /* F5 */
173 #define AVRC_ID_VENDOR      0x7E    /* vendor unique */
174 #define AVRC_KEYPRESSED_RELEASE 0x80
175 
176 /*****************************************************************************
177 **  Metadata transfer definitions
178 *****************************************************************************/
179 
180 /* Define the Metadata Packet types
181 */
182 #define AVRC_PKT_SINGLE           0
183 #define AVRC_PKT_START            1
184 #define AVRC_PKT_CONTINUE         2
185 #define AVRC_PKT_END              3
186 #define AVRC_PKT_TYPE_MASK        3
187 
188 /* Define the PDUs carried in the vendor dependant data
189 */
190 #define AVRC_PDU_GET_CAPABILITIES               0x10
191 #define AVRC_PDU_LIST_PLAYER_APP_ATTR           0x11
192 #define AVRC_PDU_LIST_PLAYER_APP_VALUES         0x12
193 #define AVRC_PDU_GET_CUR_PLAYER_APP_VALUE       0x13
194 #define AVRC_PDU_SET_PLAYER_APP_VALUE           0x14
195 #define AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT       0x15
196 #define AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT      0x16
197 #define AVRC_PDU_INFORM_DISPLAY_CHARSET         0x17
198 #define AVRC_PDU_INFORM_BATTERY_STAT_OF_CT      0x18
199 #define AVRC_PDU_GET_ELEMENT_ATTR               0x20
200 #define AVRC_PDU_GET_PLAY_STATUS                0x30
201 #define AVRC_PDU_REGISTER_NOTIFICATION          0x31
202 #define AVRC_PDU_REQUEST_CONTINUATION_RSP       0x40
203 #define AVRC_PDU_ABORT_CONTINUATION_RSP         0x41
204 /* added in 1.4 */
205 #define AVRC_PDU_SET_ABSOLUTE_VOLUME            0x50
206 #define AVRC_PDU_SET_ADDRESSED_PLAYER           0x60
207 #define AVRC_PDU_SET_BROWSED_PLAYER             0x70
208 #define AVRC_PDU_GET_FOLDER_ITEMS               0x71
209 #define AVRC_PDU_CHANGE_PATH                    0x72
210 #define AVRC_PDU_GET_ITEM_ATTRIBUTES            0x73
211 #define AVRC_PDU_PLAY_ITEM                      0x74
212 #define AVRC_PDU_SEARCH                         0x80
213 #define AVRC_PDU_ADD_TO_NOW_PLAYING             0x90
214 #define AVRC_PDU_GENERAL_REJECT                 0xA0
215 
216 /* Define the vendor unique id carried in the pass through data
217 */
218 #define AVRC_PDU_NEXT_GROUP                     0x00
219 #define AVRC_PDU_PREV_GROUP                     0x01
220 /* the only pass through vendor unique commands defined by AVRC is the group navigation commands
221  * The len for vendor unique data is 5 */
222 #define AVRC_PASS_THRU_GROUP_LEN                5
223 
224 #define AVRC_PDU_INVALID                        0xff
225 /* 6.15.3 error status code for general reject */
226 #define AVRC_STS_BAD_CMD        0x00    /* Invalid command, sent if TG received a PDU that it did not understand. */
227 #define AVRC_STS_BAD_PARAM      0x01    /* Invalid parameter, sent if the TG received a PDU with a parameter ID that it did not understand. Sent if there is only one parameter ID in the PDU. */
228 #define AVRC_STS_NOT_FOUND      0x02    /* Specified parameter not found., sent if the parameter ID is understood, but content is wrong or corrupted. */
229 #define AVRC_STS_INTERNAL_ERR   0x03    /* Internal Error, sent if there are error conditions not covered by a more specific error code. */
230 #define AVRC_STS_NO_ERROR       0x04    /* Operation completed without error.  This is the status that should be returned if the operation was successful. */
231 #define AVRC_STS_UID_CHANGED    0x05    /* UID Changed - The UIDs on the device have changed */
232 /* #define AVRC_STS_GEN_ERROR      0x06    Unknown Error - this is changed to "reserved" */
233 #define AVRC_STS_BAD_DIR        0x07    /* Invalid Direction - The Direction parameter is invalid - Change Path*/
234 #define AVRC_STS_NOT_DIR        0x08    /* Not a Directory - The UID provided does not refer to a folder item  Change Path*/
235 #define AVRC_STS_NOT_EXIST      0x09    /* Does Not Exist - The UID provided does not refer to any item    Change Path, PlayItem, AddToNowPlaying, GetItemAttributes*/
236 #define AVRC_STS_BAD_SCOPE      0x0a    /* Invalid Scope - The scope parameter is invalid  GetFolderItems, PlayItem, AddToNowPlayer, GetItemAttributes, */
237 #define AVRC_STS_BAD_RANGE      0x0b    /* Range Out of Bounds - The start of range provided is not valid  GetFolderItems*/
238 #define AVRC_STS_UID_IS_DIR     0x0c    /* UID is a Directory - The UID provided refers to a directory, which cannot be handled by this media player   PlayItem, AddToNowPlaying */
239 #define AVRC_STS_IN_USE         0x0d    /* Media in Use - The media is not able to be used for this operation at this time PlayItem, AddToNowPlaying */
240 #define AVRC_STS_NOW_LIST_FULL  0x0e    /* Now Playing List Full - No more items can be added to the Now Playing List  AddToNowPlaying*/
241 #define AVRC_STS_SEARCH_NOT_SUP 0x0f    /* Search Not Supported - The Browsed Media Player does not support search Search */
242 #define AVRC_STS_SEARCH_BUSY    0x10    /* Search in Progress - A search operation is already in progress  Search*/
243 #define AVRC_STS_BAD_PLAYER_ID  0x11    /* Invalid Player Id - The specified Player Id does not refer to a valid player    SetAddressedPlayer, SetBrowsedPlayer*/
244 #define AVRC_STS_PLAYER_N_BR    0x12    /* Player Not Browsable - The Player Id supplied refers to a Media Player which does not support browsing. SetBrowsedPlayer */
245 #define AVRC_STS_PLAYER_N_ADDR  0x13    /* Player Not Addressed.  The Player Id supplied refers to a player which is not currently addressed, and the command is not able to be performed if the player is not set as addressed.   Search, SetBrowsedPlayer*/
246 #define AVRC_STS_BAD_SEARCH_RES 0x14    /* No valid Search Results - The Search result list does not contain valid entries, e.g. after being invalidated due to change of browsed player   GetFolderItems */
247 #define AVRC_STS_NO_AVAL_PLAYER 0x15    /* No available players ALL */
248 #define AVRC_STS_ADDR_PLAYER_CHG 0x16   /* Addressed Player Changed - Register Notification */
249 typedef UINT8 tAVRC_STS;
250 
251 
252 /* Define the Capability IDs
253 */
254 #define AVRC_CAP_COMPANY_ID                     0x02
255 #define AVRC_CAP_EVENTS_SUPPORTED               0x03
256 #define AVRC_COMPANY_ID_LEN                     3
257 #define AVRC_CAPABILITY_OFFSET                  2
258 
259 /* Define the Player Application Settings IDs
260 */
261 #define AVRC_PLAYER_SETTING_EQUALIZER           0x01
262 #define AVRC_PLAYER_SETTING_REPEAT              0x02
263 #define AVRC_PLAYER_SETTING_SHUFFLE             0x03
264 #define AVRC_PLAYER_SETTING_SCAN                0x04
265 #define AVRC_PLAYER_SETTING_LOW_MENU_EXT        0x80
266 #define AVRC_PLAYER_SETTING_HIGH_MENU_EXT       0xff
267 
268 /* Define the possible values of the Player Application Settings
269 */
270 #define AVRC_PLAYER_VAL_OFF                     0x01
271 #define AVRC_PLAYER_VAL_ON                      0x02
272 #define AVRC_PLAYER_VAL_SINGLE_REPEAT           0x02
273 #define AVRC_PLAYER_VAL_ALL_REPEAT              0x03
274 #define AVRC_PLAYER_VAL_GROUP_REPEAT            0x04
275 #define AVRC_PLAYER_VAL_ALL_SHUFFLE             0x02
276 #define AVRC_PLAYER_VAL_GROUP_SHUFFLE           0x03
277 #define AVRC_PLAYER_VAL_ALL_SCAN                0x02
278 #define AVRC_PLAYER_VAL_GROUP_SCAN              0x03
279 
280 /* Define the possible values of Battery Status PDU
281 */
282 #define AVRC_BATTERY_STATUS_NORMAL              0x00
283 #define AVRC_BATTERY_STATUS_WARNING             0x01
284 #define AVRC_BATTERY_STATUS_CRITICAL            0x02
285 #define AVRC_BATTERY_STATUS_EXTERNAL            0x03
286 #define AVRC_BATTERY_STATUS_FULL_CHARGE         0x04
287 typedef UINT8 tAVRC_BATTERY_STATUS;
288 
289 /* Define character set */
290 #define AVRC_CHAR_SET_SIZE                      2
291 
292 /* Define the Media Attribute IDs
293 */
294 #define AVRC_MEDIA_ATTR_ID_TITLE                 0x00000001
295 #define AVRC_MEDIA_ATTR_ID_ARTIST                0x00000002
296 #define AVRC_MEDIA_ATTR_ID_ALBUM                 0x00000003
297 #define AVRC_MEDIA_ATTR_ID_TRACK_NUM             0x00000004
298 #define AVRC_MEDIA_ATTR_ID_NUM_TRACKS            0x00000005
299 #define AVRC_MEDIA_ATTR_ID_GENRE                 0x00000006
300 #define AVRC_MEDIA_ATTR_ID_PLAYING_TIME          0x00000007        /* in miliseconds */
301 #define AVRC_MAX_NUM_MEDIA_ATTR_ID               7
302 
303 /* Define the possible values of play state
304 */
305 #define AVRC_PLAYSTATE_RESP_MSG_SIZE            9
306 #define AVRC_PLAYSTATE_STOPPED                  0x00    /* Stopped */
307 #define AVRC_PLAYSTATE_PLAYING                  0x01    /* Playing */
308 #define AVRC_PLAYSTATE_PAUSED                   0x02    /* Paused  */
309 #define AVRC_PLAYSTATE_FWD_SEEK                 0x03    /* Fwd Seek*/
310 #define AVRC_PLAYSTATE_REV_SEEK                 0x04    /* Rev Seek*/
311 #define AVRC_PLAYSTATE_ERROR                    0xFF    /* Error   */
312 typedef UINT8 tAVRC_PLAYSTATE;
313 
314 /* Define the events that can be registered for notifications
315 */
316 #define AVRC_EVT_PLAY_STATUS_CHANGE             0x01
317 #define AVRC_EVT_TRACK_CHANGE                   0x02
318 #define AVRC_EVT_TRACK_REACHED_END              0x03
319 #define AVRC_EVT_TRACK_REACHED_START            0x04
320 #define AVRC_EVT_PLAY_POS_CHANGED               0x05
321 #define AVRC_EVT_BATTERY_STATUS_CHANGE          0x06
322 #define AVRC_EVT_SYSTEM_STATUS_CHANGE           0x07
323 #define AVRC_EVT_APP_SETTING_CHANGE             0x08
324 /* added in AVRCP 1.4 */
325 #define AVRC_EVT_NOW_PLAYING_CHANGE             0x09
326 #define AVRC_EVT_AVAL_PLAYERS_CHANGE            0x0a
327 #define AVRC_EVT_ADDR_PLAYER_CHANGE             0x0b
328 #define AVRC_EVT_UIDS_CHANGE                    0x0c
329 #define AVRC_EVT_VOLUME_CHANGE                  0x0d
330 
331 /* the number of events that can be registered for notifications */
332 #define AVRC_NUM_NOTIF_EVENTS                   0x0d
333 
334 #define AVRC_EVT_MSG_LEN_1                      0x01
335 #define AVRC_EVT_MSG_LEN_2                      0x02
336 #define AVRC_EVT_MSG_LEN_5                      0x05
337 #define AVRC_EVT_MSG_LEN_9                      0x09
338 
339 #define AVRC_MAX_VOLUME                         0x7F
340 
341 /* Define the possible values of system status
342 */
343 #define AVRC_SYSTEMSTATE_PWR_ON                 0x00
344 #define AVRC_SYSTEMSTATE_PWR_OFF                0x01
345 #define AVRC_SYSTEMSTATE_PWR_UNPLUGGED          0x02
346 typedef UINT8 tAVRC_SYSTEMSTATE;
347 
348 /* the frequently used character set ids */
349 #define AVRC_CHARSET_ID_ASCII                  ((UINT16) 0x0003) /* ASCII */
350 #define AVRC_CHARSET_ID_UTF8                   ((UINT16) 0x006a) /* UTF-8 */
351 #define AVRC_CHARSET_ID_UTF16                  ((UINT16) 0x03f7) /* 1015 */
352 #define AVRC_CHARSET_ID_UTF32                  ((UINT16) 0x03f9) /* 1017 */
353 
354 /*****************************************************************************
355 **  Advanced Control
356 *****************************************************************************/
357 #define AVRC_ITEM_PLAYER            0x01
358 #define AVRC_ITEM_FOLDER            0x02
359 #define AVRC_ITEM_MEDIA             0x03
360 
361 #define AVRC_SCOPE_PLAYER_LIST      0x00  /* Media Player Item - Contains all available media players */
362 #define AVRC_SCOPE_FILE_SYSTEM      0x01  /* Folder Item, Media Element Item
363                                              - The virtual filesystem containing the media content of the browsed player */
364 #define AVRC_SCOPE_SEARCH           0x02  /* Media Element Item  The results of a search operation on the browsed player */
365 #define AVRC_SCOPE_NOW_PLAYING      0x03  /* Media Element Item  The Now Playing list (or queue) of the addressed player */
366 
367 #define AVRC_FOLDER_ITEM_COUNT_NONE 0xFF
368 
369 /* folder type */
370 #define AVRC_FOLDER_TYPE_MIXED      0x00
371 #define AVRC_FOLDER_TYPE_TITLES     0x01
372 #define AVRC_FOLDER_TYPE_ALNUMS     0x02
373 #define AVRC_FOLDER_TYPE_ARTISTS    0x03
374 #define AVRC_FOLDER_TYPE_GENRES     0x04
375 #define AVRC_FOLDER_TYPE_PLAYLISTS  0x05
376 #define AVRC_FOLDER_TYPE_YEARS      0x06
377 
378 /* major player type */
379 #define AVRC_MJ_TYPE_AUDIO          0x01  /* Audio */
380 #define AVRC_MJ_TYPE_VIDEO          0x02  /* Video */
381 #define AVRC_MJ_TYPE_BC_AUDIO       0x04  /* Broadcasting Audio */
382 #define AVRC_MJ_TYPE_BC_VIDEO       0x08  /* Broadcasting Video */
383 #define AVRC_MJ_TYPE_INVALID        0xF0
384 
385 /* player sub type */
386 #define AVRC_SUB_TYPE_NONE          0x00
387 #define AVRC_SUB_TYPE_AUDIO_BOOK    0x01  /* Audio Book */
388 #define AVRC_SUB_TYPE_PODCAST       0x02  /* Podcast */
389 #define AVRC_SUB_TYPE_INVALID       0xFC
390 
391 /* media item - media type */
392 #define AVRC_MEDIA_TYPE_AUDIO       0x00
393 #define AVRC_MEDIA_TYPE_VIDEO       0x01
394 
395 #define AVRC_DIR_UP                 0x00  /* Folder Up */
396 #define AVRC_DIR_DOWN               0x01  /* Folder Down */
397 
398 #define AVRC_UID_SIZE               8
399 typedef UINT8 tAVRC_UID[AVRC_UID_SIZE];
400 
401 /*****************************************************************************
402 **  player attribute - supported features
403 *****************************************************************************/
404 #define AVRC_PF_SELECT_BIT_NO           0
405 #define AVRC_PF_SELECT_MASK             0x01
406 #define AVRC_PF_SELECT_OFF              0
407 #define AVRC_PF_SELECT_SUPPORTED(x)     ((x)[AVRC_PF_SELECT_OFF] & AVRC_PF_SELECT_MASK)
408 
409 #define AVRC_PF_UP_BIT_NO               1
410 #define AVRC_PF_UP_MASK                 0x02
411 #define AVRC_PF_UP_OFF                  0
412 #define AVRC_PF_UP_SUPPORTED(x)         ((x)[AVRC_PF_UP_OFF] & AVRC_PF_UP_MASK)
413 
414 #define AVRC_PF_DOWN_BIT_NO             2
415 #define AVRC_PF_DOWN_MASK               0x04
416 #define AVRC_PF_DOWN_OFF                0
417 #define AVRC_PF_DOWN_SUPPORTED(x)       ((x)[AVRC_PF_DOWN_OFF] & AVRC_PF_DOWN_MASK)
418 
419 #define AVRC_PF_LEFT_BIT_NO             3
420 #define AVRC_PF_LEFT_MASK               0x08
421 #define AVRC_PF_LEFT_OFF                0
422 #define AVRC_PF_LEFT_SUPPORTED(x)       ((x)[AVRC_PF_LEFT_OFF] & AVRC_PF_LEFT_MASK)
423 
424 #define AVRC_PF_RIGHT_BIT_NO            4
425 #define AVRC_PF_RIGHT_MASK              0x10
426 #define AVRC_PF_RIGHT_OFF               0
427 #define AVRC_PF_RIGHT_SUPPORTED(x)      ((x)[AVRC_PF_RIGHT_OFF] & AVRC_PF_RIGHT_MASK)
428 
429 #define AVRC_PF_RIGHTUP_BIT_NO          5
430 #define AVRC_PF_RIGHTUP_MASK            0x20
431 #define AVRC_PF_RIGHTUP_OFF             0
432 #define AVRC_PF_RIGHTUP_SUPPORTED(x)    ((x)[AVRC_PF_RIGHTUP_OFF] & AVRC_PF_RIGHTUP_MASK)
433 
434 #define AVRC_PF_RIGHTDOWN_BIT_NO        6
435 #define AVRC_PF_RIGHTDOWN_MASK          0x40
436 #define AVRC_PF_RIGHTDOWN_OFF           0
437 #define AVRC_PF_RIGHTDOWN_SUPPORTED(x)  ((x)[AVRC_PF_RIGHTDOWN_OFF] & AVRC_PF_RIGHTDOWN_MASK)
438 
439 #define AVRC_PF_LEFTUP_BIT_NO           7
440 #define AVRC_PF_LEFTUP_MASK             0x80
441 #define AVRC_PF_LEFTUP_OFF              0
442 #define AVRC_PF_LEFTUP_SUPPORTED(x)     ((x)[AVRC_PF_LEFTUP_OFF] & AVRC_PF_LEFTUP_MASK)
443 
444 #define AVRC_PF_LEFTDOWN_BIT_NO         8
445 #define AVRC_PF_LEFTDOWN_MASK           0x01
446 #define AVRC_PF_LEFTDOWN_OFF            1
447 #define AVRC_PF_LEFTDOWN_SUPPORTED(x)   ((x)[AVRC_PF_LEFTDOWN_OFF] & AVRC_PF_LEFTDOWN_MASK)
448 
449 #define AVRC_PF_ROOT_MENU_BIT_NO        9
450 #define AVRC_PF_ROOT_MENU_MASK          0x02
451 #define AVRC_PF_ROOT_MENU_OFF           1
452 #define AVRC_PF_ROOT_MENU_SUPPORTED(x)  ((x)[AVRC_PF_ROOT_MENU_OFF] & AVRC_PF_ROOT_MENU_MASK)
453 
454 #define AVRC_PF_SETUP_MENU_BIT_NO       10
455 #define AVRC_PF_SETUP_MENU_MASK         0x04
456 #define AVRC_PF_SETUP_MENU_OFF          1
457 #define AVRC_PF_SETUP_MENU_SUPPORTED(x) ((x)[AVRC_PF_SETUP_MENU_OFF] & AVRC_PF_SETUP_MENU_MASK)
458 
459 #define AVRC_PF_CONTENTS_MENU_BIT_NO    11
460 #define AVRC_PF_CONTENTS_MENU_MASK      0x08
461 #define AVRC_PF_CONTENTS_MENU_OFF       1
462 #define AVRC_PF_CONTENTS_MENU_SUPPORTED(x)  ((x)[AVRC_PF_CONTENTS_MENU_OFF] & AVRC_PF_CONTENTS_MENU_MASK)
463 
464 #define AVRC_PF_FAVORITE_MENU_BIT_NO    12
465 #define AVRC_PF_FAVORITE_MENU_MASK      0x10
466 #define AVRC_PF_FAVORITE_MENU_OFF       1
467 #define AVRC_PF_FAVORITE_MENU_SUPPORTED(x)  ((x)[AVRC_PF_FAVORITE_MENU_OFF] & AVRC_PF_FAVORITE_MENU_MASK)
468 
469 #define AVRC_PF_EXIT_BIT_NO             13
470 #define AVRC_PF_EXIT_MASK               0x20
471 #define AVRC_PF_EXIT_OFF                1
472 #define AVRC_PF_EXIT_SUPPORTED(x)       ((x)[AVRC_PF_EXIT_OFF] & AVRC_PF_EXIT_MASK)
473 
474 #define AVRC_PF_0_BIT_NO                14
475 #define AVRC_PF_0_MASK                  0x40
476 #define AVRC_PF_0_OFF                   1
477 #define AVRC_PF_0_SUPPORTED(x)          ((x)[AVRC_PF_0_OFF] & AVRC_PF_0_MASK)
478 
479 #define AVRC_PF_1_BIT_NO                15
480 #define AVRC_PF_1_MASK                  0x80
481 #define AVRC_PF_1_OFF                   1
482 #define AVRC_PF_1_SUPPORTED(x)          ((x)[AVRC_PF_1_OFF] & AVRC_PF_1_MASK)
483 
484 #define AVRC_PF_2_BIT_NO                16
485 #define AVRC_PF_2_MASK                  0x01
486 #define AVRC_PF_2_OFF                   2
487 #define AVRC_PF_2_SUPPORTED(x)          ((x)[AVRC_PF_2_OFF] & AVRC_PF_2_MASK)
488 
489 #define AVRC_PF_3_BIT_NO                17
490 #define AVRC_PF_3_MASK                  0x02
491 #define AVRC_PF_3_OFF                   2
492 #define AVRC_PF_3_SUPPORTED(x)          ((x)[AVRC_PF_3_OFF] & AVRC_PF_3_MASK)
493 
494 #define AVRC_PF_4_BIT_NO                18
495 #define AVRC_PF_4_MASK                  0x04
496 #define AVRC_PF_4_OFF                   2
497 #define AVRC_PF_4_SUPPORTED(x)          ((x)[AVRC_PF_4_OFF] & AVRC_PF_4_MASK)
498 
499 #define AVRC_PF_5_BIT_NO                19
500 #define AVRC_PF_5_MASK                  0x08
501 #define AVRC_PF_5_OFF                   2
502 #define AVRC_PF_5_SUPPORTED(x)          ((x)[AVRC_PF_5_OFF] & AVRC_PF_5_MASK)
503 
504 #define AVRC_PF_6_BIT_NO                20
505 #define AVRC_PF_6_MASK                  0x10
506 #define AVRC_PF_6_OFF                   2
507 #define AVRC_PF_6_SUPPORTED(x)          ((x)[AVRC_PF_6_OFF] & AVRC_PF_6_MASK)
508 
509 #define AVRC_PF_7_BIT_NO                21
510 #define AVRC_PF_7_MASK                  0x20
511 #define AVRC_PF_7_OFF                   2
512 #define AVRC_PF_7_SUPPORTED(x)          ((x)[AVRC_PF_7_OFF] & AVRC_PF_7_MASK)
513 
514 #define AVRC_PF_8_BIT_NO                22
515 #define AVRC_PF_8_MASK                  0x40
516 #define AVRC_PF_8_OFF                   2
517 #define AVRC_PF_8_SUPPORTED(x)          ((x)[AVRC_PF_8_OFF] & AVRC_PF_8_MASK)
518 
519 #define AVRC_PF_9_BIT_NO                23
520 #define AVRC_PF_9_MASK                  0x80
521 #define AVRC_PF_9_OFF                   2
522 #define AVRC_PF_9_SUPPORTED(x)          ((x)[AVRC_PF_9_OFF] & AVRC_PF_9_MASK)
523 
524 #define AVRC_PF_DOT_BIT_NO              24
525 #define AVRC_PF_DOT_MASK                0x01
526 #define AVRC_PF_DOT_OFF                 3
527 #define AVRC_PF_DOT_SUPPORTED(x)        ((x)[AVRC_PF_DOT_OFF] & AVRC_PF_DOT_MASK)
528 
529 #define AVRC_PF_ENTER_BIT_NO            25
530 #define AVRC_PF_ENTER_MASK              0x02
531 #define AVRC_PF_ENTER_OFF               3
532 #define AVRC_PF_ENTER_SUPPORTED(x)      ((x)[AVRC_PF_ENTER_OFF] & AVRC_PF_ENTER_MASK)
533 
534 #define AVRC_PF_CLEAR_BIT_NO            26
535 #define AVRC_PF_CLEAR_MASK              0x04
536 #define AVRC_PF_CLEAR_OFF               3
537 #define AVRC_PF_CLEAR_SUPPORTED(x)      ((x)[AVRC_PF_CLEAR_OFF] & AVRC_PF_CLEAR_MASK)
538 
539 #define AVRC_PF_CHNL_UP_BIT_NO          27
540 #define AVRC_PF_CHNL_UP_MASK            0x08
541 #define AVRC_PF_CHNL_UP_OFF             3
542 #define AVRC_PF_CHNL_UP_SUPPORTED(x)    ((x)[AVRC_PF_CHNL_UP_OFF] & AVRC_PF_CHNL_UP_MASK)
543 
544 #define AVRC_PF_CHNL_DOWN_BIT_NO        28
545 #define AVRC_PF_CHNL_DOWN_MASK          0x10
546 #define AVRC_PF_CHNL_DOWN_OFF           3
547 #define AVRC_PF_CHNL_DOWN_SUPPORTED(x)  ((x)[AVRC_PF_CHNL_DOWN_OFF] & AVRC_PF_CHNL_DOWN_MASK)
548 
549 #define AVRC_PF_PREV_CHNL_BIT_NO        29
550 #define AVRC_PF_PREV_CHNL_MASK          0x20
551 #define AVRC_PF_PREV_CHNL_OFF           3
552 #define AVRC_PF_PREV_CHNL_SUPPORTED(x)  ((x)[AVRC_PF_PREV_CHNL_OFF] & AVRC_PF_PREV_CHNL_MASK)
553 
554 #define AVRC_PF_SOUND_SEL_BIT_NO        30
555 #define AVRC_PF_SOUND_SEL_MASK          0x40
556 #define AVRC_PF_SOUND_SEL_OFF           3
557 #define AVRC_PF_SOUND_SEL_SUPPORTED(x)  ((x)[AVRC_PF_SOUND_SEL_OFF] & AVRC_PF_SOUND_SEL_MASK)
558 
559 #define AVRC_PF_INPUT_SEL_BIT_NO        31
560 #define AVRC_PF_INPUT_SEL_MASK          0x80
561 #define AVRC_PF_INPUT_SEL_OFF           3
562 #define AVRC_PF_INPUT_SEL_SUPPORTED(x)  ((x)[AVRC_PF_INPUT_SEL_OFF] & AVRC_PF_INPUT_SEL_MASK)
563 
564 #define AVRC_PF_DISP_INFO_BIT_NO        32
565 #define AVRC_PF_DISP_INFO_MASK          0x01
566 #define AVRC_PF_DISP_INFO_OFF           4
567 #define AVRC_PF_DISP_INFO_SUPPORTED(x)  ((x)[AVRC_PF_DISP_INFO_OFF] & AVRC_PF_DISP_INFO_MASK)
568 
569 #define AVRC_PF_HELP_BIT_NO             33
570 #define AVRC_PF_HELP_MASK               0x02
571 #define AVRC_PF_HELP_OFF                4
572 #define AVRC_PF_HELP_SUPPORTED(x)       ((x)[AVRC_PF_HELP_OFF] & AVRC_PF_HELP_MASK)
573 
574 #define AVRC_PF_PAGE_UP_BIT_NO          34
575 #define AVRC_PF_PAGE_UP_MASK            0x04
576 #define AVRC_PF_PAGE_UP_OFF             4
577 #define AVRC_PF_PAGE_UP_SUPPORTED(x)    ((x)[AVRC_PF_PAGE_UP_OFF] & AVRC_PF_PAGE_UP_MASK)
578 
579 #define AVRC_PF_PAGE_DOWN_BIT_NO        35
580 #define AVRC_PF_PAGE_DOWN_MASK          0x08
581 #define AVRC_PF_PAGE_DOWN_OFF           4
582 #define AVRC_PF_PAGE_DOWN_SUPPORTED(x)  ((x)[AVRC_PF_PAGE_DOWN_OFF] & AVRC_PF_PAGE_DOWN_MASK)
583 
584 #define AVRC_PF_POWER_BIT_NO            36
585 #define AVRC_PF_POWER_MASK              0x10
586 #define AVRC_PF_POWER_OFF               4
587 #define AVRC_PF_POWER_SUPPORTED(x)      ((x)[AVRC_PF_POWER_OFF] & AVRC_PF_POWER_MASK)
588 
589 #define AVRC_PF_VOL_UP_BIT_NO           37
590 #define AVRC_PF_VOL_UP_MASK             0x20
591 #define AVRC_PF_VOL_UP_OFF              4
592 #define AVRC_PF_VOL_UP_SUPPORTED(x)     ((x)[AVRC_PF_VOL_UP_OFF] & AVRC_PF_VOL_UP_MASK)
593 
594 #define AVRC_PF_VOL_DOWN_BIT_NO         38
595 #define AVRC_PF_VOL_DOWN_MASK           0x40
596 #define AVRC_PF_VOL_DOWN_OFF            4
597 #define AVRC_PF_VOL_DOWN_SUPPORTED(x)   ((x)[AVRC_PF_VOL_DOWN_OFF] & AVRC_PF_VOL_DOWN_MASK)
598 
599 #define AVRC_PF_MUTE_BIT_NO             39
600 #define AVRC_PF_MUTE_MASK               0x80
601 #define AVRC_PF_MUTE_OFF                4
602 #define AVRC_PF_MUTE_SUPPORTED(x)       ((x)[AVRC_PF_MUTE_OFF] & AVRC_PF_MUTE_MASK)
603 
604 #define AVRC_PF_PLAY_BIT_NO             40
605 #define AVRC_PF_PLAY_MASK               0x01
606 #define AVRC_PF_PLAY_OFF                5
607 #define AVRC_PF_PLAY_SUPPORTED(x)       ((x)[AVRC_PF_PLAY_OFF] & AVRC_PF_PLAY_MASK)
608 
609 #define AVRC_PF_STOP_BIT_NO             41
610 #define AVRC_PF_STOP_MASK               0x02
611 #define AVRC_PF_STOP_OFF                5
612 #define AVRC_PF_STOP_SUPPORTED(x)       ((x)[AVRC_PF_STOP_OFF] & AVRC_PF_STOP_MASK)
613 
614 #define AVRC_PF_PAUSE_BIT_NO            42
615 #define AVRC_PF_PAUSE_MASK              0x04
616 #define AVRC_PF_PAUSE_OFF               5
617 #define AVRC_PF_PAUSE_SUPPORTED(x)      ((x)[AVRC_PF_PAUSE_OFF] & AVRC_PF_PAUSE_MASK)
618 
619 #define AVRC_PF_RECORD_BIT_NO           43
620 #define AVRC_PF_RECORD_MASK             0x08
621 #define AVRC_PF_RECORD_OFF              5
622 #define AVRC_PF_RECORD_SUPPORTED(x)     ((x)[AVRC_PF_RECORD_OFF] & AVRC_PF_RECORD_MASK)
623 
624 #define AVRC_PF_REWIND_BIT_NO           44
625 #define AVRC_PF_REWIND_MASK             0x10
626 #define AVRC_PF_REWIND_OFF              5
627 #define AVRC_PF_REWIND_SUPPORTED(x)     ((x)[AVRC_PF_REWIND_OFF] & AVRC_PF_REWIND_MASK)
628 
629 #define AVRC_PF_FAST_FWD_BIT_NO         45
630 #define AVRC_PF_FAST_FWD_MASK           0x20
631 #define AVRC_PF_FAST_FWD_OFF            5
632 #define AVRC_PF_FAST_FWD_SUPPORTED(x)   ((x)[AVRC_PF_FAST_FWD_OFF] & AVRC_PF_FAST_FWD_MASK)
633 
634 #define AVRC_PF_EJECT_BIT_NO            46
635 #define AVRC_PF_EJECT_MASK              0x40
636 #define AVRC_PF_EJECT_OFF               5
637 #define AVRC_PF_EJECT_SUPPORTED(x)      ((x)[AVRC_PF_EJECT_OFF] & AVRC_PF_EJECT_MASK)
638 
639 #define AVRC_PF_FORWARD_BIT_NO          47
640 #define AVRC_PF_FORWARD_MASK            0x80
641 #define AVRC_PF_FORWARD_OFF             5
642 #define AVRC_PF_FORWARD_SUPPORTED(x)    ((x)[AVRC_PF_FORWARD_OFF] & AVRC_PF_FORWARD_MASK)
643 
644 #define AVRC_PF_BACKWARD_BIT_NO         48
645 #define AVRC_PF_BACKWARD_MASK           0x01
646 #define AVRC_PF_BACKWARD_OFF            6
647 #define AVRC_PF_BACKWARD_SUPPORTED(x)   ((x)[AVRC_PF_BACKWARD_OFF] & AVRC_PF_BACKWARD_MASK)
648 
649 #define AVRC_PF_ANGLE_BIT_NO            49
650 #define AVRC_PF_ANGLE_MASK              0x02
651 #define AVRC_PF_ANGLE_OFF               6
652 #define AVRC_PF_ANGLE_SUPPORTED(x)      ((x)[AVRC_PF_ANGLE_OFF] & AVRC_PF_ANGLE_MASK)
653 
654 #define AVRC_PF_SUBPICTURE_BIT_NO       50
655 #define AVRC_PF_SUBPICTURE_MASK         0x04
656 #define AVRC_PF_SUBPICTURE_OFF          6
657 #define AVRC_PF_SUBPICTURE_SUPPORTED(x) ((x)[AVRC_PF_SUBPICTURE_OFF] & AVRC_PF_SUBPICTURE_MASK)
658 
659 #define AVRC_PF_F1_BIT_NO               51
660 #define AVRC_PF_F1_MASK                 0x08
661 #define AVRC_PF_F1_OFF                  6
662 #define AVRC_PF_F1_SUPPORTED(x)         ((x)[AVRC_PF_F1_OFF] & AVRC_PF_F1_MASK)
663 
664 #define AVRC_PF_F2_BIT_NO               52
665 #define AVRC_PF_F2_MASK                 0x10
666 #define AVRC_PF_F2_OFF                  6
667 #define AVRC_PF_F2_SUPPORTED(x)         ((x)[AVRC_PF_F2_OFF] & AVRC_PF_F2_MASK)
668 
669 #define AVRC_PF_F3_BIT_NO               53
670 #define AVRC_PF_F3_MASK                 0x20
671 #define AVRC_PF_F3_OFF                  6
672 #define AVRC_PF_F3_SUPPORTED(x)         ((x)[AVRC_PF_F3_OFF] & AVRC_PF_F3_MASK)
673 
674 #define AVRC_PF_F4_BIT_NO               54
675 #define AVRC_PF_F4_MASK                 0x40
676 #define AVRC_PF_F4_OFF                  6
677 #define AVRC_PF_F4_SUPPORTED(x)         ((x)[AVRC_PF_F4_OFF] & AVRC_PF_F4_MASK)
678 
679 #define AVRC_PF_F5_BIT_NO               55
680 #define AVRC_PF_F5_MASK                 0x80
681 #define AVRC_PF_F5_OFF                  6
682 #define AVRC_PF_F5_SUPPORTED(x)         ((x)[AVRC_PF_F5_OFF] & AVRC_PF_F5_MASK)
683 
684 /* Vendor unique. This PASSTHROUGH command is supported. */
685 #define AVRC_PF_VENDOR_BIT_NO           56
686 #define AVRC_PF_VENDOR_MASK             0x01
687 #define AVRC_PF_VENDOR_OFF              7
688 #define AVRC_PF_VENDOR_SUPPORTED(x)     ((x)[AVRC_PF_VENDOR_OFF] & AVRC_PF_VENDOR_MASK)
689 
690 /* Basic Group Navigation.  This overrules the SDP entry as it is set per player.7 */
691 #define AVRC_PF_GROUP_NAVI_BIT_NO       57
692 #define AVRC_PF_GROUP_NAVI_MASK         0x02
693 #define AVRC_PF_GROUP_NAVI_OFF          7
694 #define AVRC_PF_GROUP_NAVI_SUPPORTED(x) ((x)[AVRC_PF_GROUP_NAVI_OFF] & AVRC_PF_GROUP_NAVI_MASK)
695 
696 /* Advanced Control Player.  This bit is set if the player supports at least AVRCP 1.4. */
697 #define AVRC_PF_ADV_CTRL_BIT_NO         58
698 #define AVRC_PF_ADV_CTRL_MASK           0x04
699 #define AVRC_PF_ADV_CTRL_OFF            7
700 #define AVRC_PF_ADV_CTRL_SUPPORTED(x)   ((x)[AVRC_PF_ADV_CTRL_OFF] & AVRC_PF_ADV_CTRL_MASK)
701 
702 /* Browsing.  This bit is set if the player supports browsing. */
703 #define AVRC_PF_BROWSE_BIT_NO           59
704 #define AVRC_PF_BROWSE_MASK             0x08
705 #define AVRC_PF_BROWSE_OFF              7
706 #define AVRC_PF_BROWSE_SUPPORTED(x)     ((x)[AVRC_PF_BROWSE_OFF] & AVRC_PF_BROWSE_MASK)
707 
708 /* Searching. This bit is set if the player supports searching. */
709 #define AVRC_PF_SEARCH_BIT_NO           60
710 #define AVRC_PF_SEARCH_MASK             0x10
711 #define AVRC_PF_SEARCH_OFF              7
712 #define AVRC_PF_SEARCH_SUPPORTED(x)     ((x)[AVRC_PF_SEARCH_OFF] & AVRC_PF_SEARCH_MASK)
713 
714 /* AddToNowPlaying.  This bit is set if the player supports the AddToNowPlaying command. */
715 #define AVRC_PF_ADD2NOWPLAY_BIT_NO      61
716 #define AVRC_PF_ADD2NOWPLAY_MASK        0x20
717 #define AVRC_PF_ADD2NOWPLAY_OFF         7
718 #define AVRC_PF_ADD2NOWPLAY_SUPPORTED(x) ((x)[AVRC_PF_ADD2NOWPLAY_OFF] & AVRC_PF_ADD2NOWPLAY_MASK)
719 
720 /* UIDs unique in player browse tree.  This bit is set if the player is able to maintain unique UIDs across the player browse tree. */
721 #define AVRC_PF_UID_UNIQUE_BIT_NO       62
722 #define AVRC_PF_UID_UNIQUE_MASK         0x40
723 #define AVRC_PF_UID_UNIQUE_OFF          7
724 #define AVRC_PF_UID_UNIQUE_SUPPORTED(x) ((x)[AVRC_PF_UID_UNIQUE_OFF] & AVRC_PF_UID_UNIQUE_MASK)
725 
726 /* OnlyBrowsableWhenAddressed.  This bit is set if the player is only able to be browsed when it is set as the Addressed Player. */
727 #define AVRC_PF_BR_WH_ADDR_BIT_NO       63
728 #define AVRC_PF_BR_WH_ADDR_MASK         0x80
729 #define AVRC_PF_BR_WH_ADDR_OFF          7
730 #define AVRC_PF_BR_WH_ADDR_SUPPORTED(x) ((x)[AVRC_PF_BR_WH_ADDR_OFF] & AVRC_PF_BR_WH_ADDR_MASK)
731 
732 /* OnlySearchableWhenAddressed.  This bit is set if the player is only able to be searched when it is set as the Addressed player. */
733 #define AVRC_PF_SEARCH_WH_ADDR_BIT_NO   64
734 #define AVRC_PF_SEARCH_WH_ADDR_MASK     0x01
735 #define AVRC_PF_SEARCH_WH_ADDR_OFF      8
736 #define AVRC_PF_SEARCH_WH_ADDR_SUPPORTED(x) ((x)[AVRC_PF_SEARCH_WH_ADDR_OFF] & AVRC_PF_SEARCH_WH_ADDR_MASK)
737 
738 /* NowPlaying.  This bit is set if the player supports the NowPlaying folder.  Note that for all players that support browsing this bit shall be set */
739 #define AVRC_PF_NOW_PLAY_BIT_NO         65
740 #define AVRC_PF_NOW_PLAY_MASK           0x02
741 #define AVRC_PF_NOW_PLAY_OFF            8
742 #define AVRC_PF_NOW_PLAY_SUPPORTED(x)   ((x)[AVRC_PF_NOW_PLAY_OFF] & AVRC_PF_NOW_PLAY_MASK)
743 
744 /* UIDPersistency.  This bit is set if the Player is able to persist UID values between AVRCP Browse Reconnect */
745 #define AVRC_PF_UID_PERSIST_BIT_NO      66
746 #define AVRC_PF_UID_PERSIST_MASK        0x04
747 #define AVRC_PF_UID_PERSIST_OFF         8
748 #define AVRC_PF_UID_PERSIST_SUPPORTED(x) ((x)[AVRC_PF_UID_PERSIST_OFF] & AVRC_PF_UID_PERSIST_MASK)
749 
750 /*****************************************************************************
751 **  data type definitions
752 *****************************************************************************/
753 
754 /*
755 This structure contains the header parameters of an AV/C message.
756 */
757 typedef struct
758 {
759     UINT8   ctype;          /* Command type.  */
760     UINT8   subunit_type;   /* Subunit type. */
761     UINT8   subunit_id;     /* Subunit ID.  This value is typically ignored in AVRCP,
762                              * except for VENDOR DEPENDENT messages when the value is
763                              * vendor-dependent.  Value range is 0-7. */
764     UINT8   opcode;         /* Op Code (passthrough, vendor, etc) */
765 } tAVRC_HDR;
766 
767 /* This structure contains a UNIT INFO message. */
768 typedef struct
769 {
770     tAVRC_HDR   hdr;        /* Message header. */
771     UINT32      company_id; /* Company identifier. */
772     UINT8       unit_type;  /* Unit type.  Uses the same values as subunit type. */
773     UINT8       unit;       /* This value is vendor dependent and typically zero.  */
774 } tAVRC_MSG_UNIT;
775 
776 /* This structure contains a SUBUNIT INFO message. */
777 typedef struct
778 {
779     tAVRC_HDR   hdr;        /* Message header. */
780     UINT8       subunit_type[AVRC_SUB_TYPE_LEN];
781                             /* Array containing subunit type values.  */
782     BOOLEAN     panel;      /* TRUE if the panel subunit type is in the
783                              * subunit_type array, FALSE otherwise. */
784     UINT8       page;       /* Specifies which part of the subunit type table is
785                              * returned.  For AVRCP it is typically zero.
786                              * Value range is 0-7. */
787 } tAVRC_MSG_SUB;
788 
789 /* This structure contains a VENDOR DEPENDENT message. */
790 typedef struct
791 {
792     tAVRC_HDR   hdr;        /* Message header. */
793     UINT32      company_id; /* Company identifier. */
794     UINT8      *p_vendor_data;/* Pointer to vendor dependent data. */
795     UINT16      vendor_len; /* Length in bytes of vendor dependent data. */
796 } tAVRC_MSG_VENDOR;
797 
798 /* PASS THROUGH message structure */
799 typedef struct
800 {
801     tAVRC_HDR   hdr;        /* hdr.ctype Unused.
802                              * hdr.subunit_type Unused.
803                              * hdr.subunit_id Unused. */
804     UINT8       op_id;      /* Operation ID.  */
805     UINT8       state;      /* Keypress state.  */
806     UINT8      *p_pass_data;/* Pointer to data.  This parameter is only valid
807                              * when the op_id is AVRC_ID_VENDOR.*/
808     UINT8       pass_len;   /* Length in bytes of data. This parameter is only
809                              * valid when the op_id is AVRC_ID_VENDOR.*/
810 } tAVRC_MSG_PASS;
811 
812 /* Command/Response indicator. */
813 #define AVRC_CMD            AVCT_CMD    /* Command message */
814 #define AVRC_RSP            AVCT_RSP    /* Response message */
815 
816 /* Browsing channel message structure */
817 typedef struct
818 {
819     tAVRC_HDR   hdr;            /* hdr.ctype AVRC_CMD or AVRC_RSP.
820                                  * hdr.subunit_type Unused.
821                                  * hdr.subunit_id Unused. */
822     UINT8      *p_browse_data;  /* Pointer to data.  */
823     UINT16      browse_len;     /* Length in bytes of data. */
824     BT_HDR     *p_browse_pkt;   /* The GKI buffer received. Set to NULL, if the callback function wants to keep the buffer */
825 } tAVRC_MSG_BROWSE;
826 
827 /* This is a union of all message type structures. */
828 typedef union
829 {
830     tAVRC_HDR           hdr;    /* Message header. */
831     tAVRC_MSG_UNIT      unit;   /* UNIT INFO message. */
832     tAVRC_MSG_SUB       sub;    /* SUBUNIT INFO message. */
833     tAVRC_MSG_VENDOR    vendor; /* VENDOR DEPENDENT message. */
834     tAVRC_MSG_PASS      pass;   /* PASS THROUGH message. */
835     tAVRC_MSG_BROWSE    browse; /* messages thru browsing channel */
836 } tAVRC_MSG;
837 
838 /* macros */
839 #define AVRC_IS_VALID_CAP_ID(a)           (((a == AVRC_CAP_COMPANY_ID) || (a == AVRC_CAP_EVENTS_SUPPORTED)) ? TRUE : FALSE)
840 
841 #define AVRC_IS_VALID_EVENT_ID(a)           (((a >= AVRC_EVT_PLAY_STATUS_CHANGE) && \
842                                               (a <= AVRC_EVT_APP_SETTING_CHANGE)) ? TRUE : FALSE)
843 
844 #define AVRC_IS_VALID_ATTRIBUTE(a)          (((((a > 0) && a <= AVRC_PLAYER_SETTING_SCAN)) || \
845                                                ((a >= AVRC_PLAYER_SETTING_LOW_MENU_EXT) && \
846                                                 (a <= AVRC_PLAYER_SETTING_HIGH_MENU_EXT))) ? TRUE : FALSE)
847 
848 
849 #define AVRC_IS_VALID_MEDIA_ATTRIBUTE(a)    ((a >= AVRC_MEDIA_ATTR_ID_TITLE) && \
850                                              (a <= AVRC_MEDIA_ATTR_ID_PLAYING_TIME) ? TRUE : FALSE)
851 
852 #define AVRC_IS_VALID_BATTERY_STATUS(a)    ((a <= AVRC_BATTERY_STATUS_FULL_CHARGE) ? TRUE : FALSE)
853 
854 #define AVRC_IS_VALID_SYSTEM_STATUS(a)    ((a <= AVRC_SYSTEMSTATE_PWR_UNPLUGGED) ? TRUE : FALSE)
855 
856 #define AVRC_IS_VALID_GROUP(a)    ((a <= AVRC_PDU_PREV_GROUP) ? TRUE : FALSE)
857 
858 /* Company ID is 24-bit integer We can not use the macros in bt_types.h */
859 #define AVRC_CO_ID_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
860 #define AVRC_BE_STREAM_TO_CO_ID(u32, p) {u32 = (((UINT32)(*((p) + 2))) + (((UINT32)(*((p) + 1))) << 8) + (((UINT32)(*(p))) << 16)); (p) += 3;}
861 
862 /*****************************************************************************
863 **  data type definitions
864 *****************************************************************************/
865 #define AVRC_MAX_APP_ATTR_SIZE      16
866 #define AVRC_MAX_CHARSET_SIZE       16
867 #define AVRC_MAX_ELEM_ATTR_SIZE     8
868 
869 
870 /*****************************************************************************
871 **  Metadata transfer Building/Parsing definitions
872 *****************************************************************************/
873 
874 typedef struct {
875     UINT16              charset_id;
876     UINT16              str_len;
877     UINT8               *p_str;
878 } tAVRC_FULL_NAME;
879 
880 typedef struct {
881     UINT16              str_len;
882     UINT8               *p_str;
883 } tAVRC_NAME;
884 
885 
886 #ifndef AVRC_CAP_MAX_NUM_COMP_ID
887 #define AVRC_CAP_MAX_NUM_COMP_ID    4
888 #endif
889 
890 #ifndef AVRC_CAP_MAX_NUM_EVT_ID
891 #define AVRC_CAP_MAX_NUM_EVT_ID     16
892 #endif
893 
894 typedef union
895 {
896     UINT32  company_id[AVRC_CAP_MAX_NUM_COMP_ID];
897     UINT8   event_id[AVRC_CAP_MAX_NUM_EVT_ID];
898 } tAVRC_CAPS_PARAM;
899 
900 typedef struct
901 {
902     UINT8   attr_id;
903     UINT8   attr_val;
904 } tAVRC_APP_SETTING;
905 
906 typedef struct
907 {
908     UINT8   attr_id;
909     UINT16  charset_id;
910     UINT8   str_len;
911     UINT8   *p_str;
912 } tAVRC_APP_SETTING_TEXT;
913 
914 typedef UINT8 tAVRC_FEATURE_MASK[AVRC_FEATURE_MASK_SIZE];
915 
916 typedef struct
917 {
918     UINT16              player_id;      /* A unique identifier for this media player.*/
919     UINT8               major_type;     /* Use AVRC_MJ_TYPE_AUDIO, AVRC_MJ_TYPE_VIDEO, AVRC_MJ_TYPE_BC_AUDIO, or AVRC_MJ_TYPE_BC_VIDEO.*/
920     UINT32              sub_type;       /* Use AVRC_SUB_TYPE_NONE, AVRC_SUB_TYPE_AUDIO_BOOK, or AVRC_SUB_TYPE_PODCAST*/
921     UINT8               play_status;    /* Use AVRC_PLAYSTATE_STOPPED, AVRC_PLAYSTATE_PLAYING, AVRC_PLAYSTATE_PAUSED, AVRC_PLAYSTATE_FWD_SEEK,
922                                             AVRC_PLAYSTATE_REV_SEEK, or AVRC_PLAYSTATE_ERROR*/
923     tAVRC_FEATURE_MASK  features;       /* Supported feature bit mask*/
924     tAVRC_FULL_NAME     name;           /* The player name, name length and character set id.*/
925 } tAVRC_ITEM_PLAYER;
926 
927 typedef struct
928 {
929     tAVRC_UID           uid;            /* The uid of this folder */
930     UINT8               type;           /* Use AVRC_FOLDER_TYPE_MIXED, AVRC_FOLDER_TYPE_TITLES,
931                                            AVRC_FOLDER_TYPE_ALNUMS, AVRC_FOLDER_TYPE_ARTISTS, AVRC_FOLDER_TYPE_GENRES,
932                                            AVRC_FOLDER_TYPE_PLAYLISTS, or AVRC_FOLDER_TYPE_YEARS.*/
933     BOOLEAN             playable;       /* TRUE, if the folder can be played. */
934     tAVRC_FULL_NAME     name;           /* The folder name, name length and character set id. */
935 } tAVRC_ITEM_FOLDER;
936 
937 typedef struct
938 {
939     UINT32              attr_id;        /* Use AVRC_MEDIA_ATTR_ID_TITLE, AVRC_MEDIA_ATTR_ID_ARTIST, AVRC_MEDIA_ATTR_ID_ALBUM,
940                                            AVRC_MEDIA_ATTR_ID_TRACK_NUM, AVRC_MEDIA_ATTR_ID_NUM_TRACKS,
941                                            AVRC_MEDIA_ATTR_ID_GENRE, AVRC_MEDIA_ATTR_ID_PLAYING_TIME */
942     tAVRC_FULL_NAME     name;           /* The attribute value, value length and character set id. */
943 } tAVRC_ATTR_ENTRY;
944 
945 typedef struct
946 {
947     tAVRC_UID           uid;            /* The uid of this media element item */
948     UINT8               type;           /* Use AVRC_MEDIA_TYPE_AUDIO or AVRC_MEDIA_TYPE_VIDEO. */
949     tAVRC_FULL_NAME     name;           /* The media name, name length and character set id. */
950     UINT8               attr_count;     /* The number of attributes in p_attr_list */
951     tAVRC_ATTR_ENTRY*   p_attr_list;    /* Attribute entry list. */
952 } tAVRC_ITEM_MEDIA;
953 
954 typedef struct
955 {
956     UINT8                   item_type;  /* AVRC_ITEM_PLAYER, AVRC_ITEM_FOLDER, or AVRC_ITEM_MEDIA */
957     union
958     {
959         tAVRC_ITEM_PLAYER   player;     /* The properties of a media player item.*/
960         tAVRC_ITEM_FOLDER   folder;     /* The properties of a folder item.*/
961         tAVRC_ITEM_MEDIA    media;      /* The properties of a media item.*/
962     } u;
963 } tAVRC_ITEM;
964 
965 /* GetCapability */
966 typedef struct
967 {
968     UINT8       pdu;
969     tAVRC_STS   status;
970     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
971     UINT8       capability_id;
972 } tAVRC_GET_CAPS_CMD;
973 
974 /* ListPlayerAppValues */
975 typedef struct
976 {
977     UINT8       pdu;
978     tAVRC_STS   status;
979     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
980     UINT8       attr_id;
981 } tAVRC_LIST_APP_VALUES_CMD;
982 
983 /* GetCurAppValue */
984 typedef struct
985 {
986     UINT8       pdu;
987     tAVRC_STS   status;
988     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
989     UINT8       num_attr;
990     UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
991 } tAVRC_GET_CUR_APP_VALUE_CMD;
992 
993 /* SetAppValue */
994 typedef struct
995 {
996     UINT8       pdu;
997     tAVRC_STS   status;
998     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
999     UINT8       num_val;
1000     tAVRC_APP_SETTING   *p_vals;
1001 } tAVRC_SET_APP_VALUE_CMD;
1002 
1003 /* GetAppAttrTxt */
1004 typedef struct
1005 {
1006     UINT8       pdu;
1007     tAVRC_STS   status;
1008     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1009     UINT8       num_attr;
1010     UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
1011 } tAVRC_GET_APP_ATTR_TXT_CMD;
1012 
1013 /* GetAppValueTxt */
1014 typedef struct
1015 {
1016     UINT8       pdu;
1017     tAVRC_STS   status;
1018     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1019     UINT8       attr_id;
1020     UINT8       num_val;
1021     UINT8       vals[AVRC_MAX_APP_ATTR_SIZE];
1022 } tAVRC_GET_APP_VAL_TXT_CMD;
1023 
1024 /* InformCharset */
1025 typedef struct
1026 {
1027     UINT8       pdu;
1028     tAVRC_STS   status;
1029     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1030     UINT8       num_id;
1031     UINT16      charsets[AVRC_MAX_CHARSET_SIZE];
1032 } tAVRC_INFORM_CHARSET_CMD;
1033 
1034 /* InformBatteryStatus */
1035 typedef struct
1036 {
1037     UINT8       pdu;
1038     tAVRC_STS   status;
1039     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1040     UINT8       battery_status;
1041 } tAVRC_BATTERY_STATUS_CMD;
1042 
1043 /* GetElemAttrs */
1044 typedef struct
1045 {
1046     UINT8       pdu;
1047     tAVRC_STS   status;
1048     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1049     UINT8       num_attr;
1050     UINT32      attrs[AVRC_MAX_ELEM_ATTR_SIZE];
1051 } tAVRC_GET_ELEM_ATTRS_CMD;
1052 
1053 /* RegNotify */
1054 typedef struct
1055 {
1056     UINT8       pdu;
1057     tAVRC_STS   status;
1058     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1059     UINT8       event_id;
1060     UINT32      param;
1061 } tAVRC_REG_NOTIF_CMD;
1062 
1063 /* SetAddrPlayer */
1064 typedef struct
1065 {
1066     UINT8       pdu;
1067     tAVRC_STS   status;
1068     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1069     UINT16      player_id;
1070 } tAVRC_SET_ADDR_PLAYER_CMD;
1071 
1072 /* SetBrowsedPlayer */
1073 typedef struct
1074 {
1075     UINT8       pdu;
1076     tAVRC_STS   status;
1077     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1078     UINT16      player_id;
1079 } tAVRC_SET_BR_PLAYER_CMD;
1080 
1081 /* SetAbsVolume */
1082 typedef struct
1083 {
1084     UINT8       pdu;
1085     tAVRC_STS   status;
1086     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1087     UINT8       volume;
1088 } tAVRC_SET_VOLUME_CMD;
1089 
1090 /* GetFolderItems */
1091 typedef struct
1092 {
1093     UINT8       pdu;
1094     tAVRC_STS   status;
1095     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1096     UINT8       scope;
1097     UINT32      start_item;
1098     UINT32      end_item;
1099     UINT8       attr_count;
1100     UINT32      *p_attr_list;
1101 } tAVRC_GET_ITEMS_CMD;
1102 
1103 /* ChangePath */
1104 typedef struct
1105 {
1106     UINT8       pdu;
1107     tAVRC_STS   status;
1108     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1109     UINT16      uid_counter;
1110     UINT8       direction;
1111     tAVRC_UID   folder_uid;
1112 } tAVRC_CHG_PATH_CMD;
1113 
1114 /* GetItemAttrs */
1115 typedef struct
1116 {
1117     UINT8       pdu;
1118     tAVRC_STS   status;
1119     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1120     UINT8       scope;
1121     tAVRC_UID   uid;
1122     UINT16      uid_counter;
1123     UINT8       attr_count;
1124     UINT32      *p_attr_list;
1125 } tAVRC_GET_ATTRS_CMD;
1126 
1127 /* Search */
1128 typedef struct
1129 {
1130     UINT8           pdu;
1131     tAVRC_STS       status;
1132     UINT8           opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1133     tAVRC_FULL_NAME string;
1134 } tAVRC_SEARCH_CMD;
1135 
1136 /* PlayItem */
1137 typedef struct
1138 {
1139     UINT8       pdu;
1140     tAVRC_STS   status;
1141     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1142     UINT8       scope;
1143     tAVRC_UID   uid;
1144     UINT16      uid_counter;
1145 } tAVRC_PLAY_ITEM_CMD;
1146 
1147 /* AddToNowPlaying */
1148 typedef struct
1149 {
1150     UINT8       pdu;
1151     tAVRC_STS   status;
1152     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1153     UINT8       scope;
1154     tAVRC_UID   uid;
1155     UINT16      uid_counter;
1156 } tAVRC_ADD_TO_PLAY_CMD;
1157 
1158 typedef struct
1159 {
1160     UINT8       pdu;
1161     tAVRC_STS   status;
1162     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1163 } tAVRC_CMD;
1164 
1165 /* Continue and Abort */
1166 typedef struct
1167 {
1168     UINT8       pdu;
1169     tAVRC_STS   status;
1170     UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1171     UINT8       target_pdu;
1172 } tAVRC_NEXT_CMD;
1173 
1174 typedef union
1175 {
1176     UINT8                       pdu;
1177     tAVRC_CMD                   cmd;
1178     tAVRC_GET_CAPS_CMD          get_caps;               /* GetCapability */
1179     tAVRC_CMD                   list_app_attr;          /* ListPlayerAppAttr */
1180     tAVRC_LIST_APP_VALUES_CMD   list_app_values;        /* ListPlayerAppValues */
1181     tAVRC_GET_CUR_APP_VALUE_CMD get_cur_app_val;        /* GetCurAppValue */
1182     tAVRC_SET_APP_VALUE_CMD     set_app_val;            /* SetAppValue */
1183     tAVRC_GET_APP_ATTR_TXT_CMD  get_app_attr_txt;       /* GetAppAttrTxt */
1184     tAVRC_GET_APP_VAL_TXT_CMD   get_app_val_txt;        /* GetAppValueTxt */
1185     tAVRC_INFORM_CHARSET_CMD    inform_charset;         /* InformCharset */
1186     tAVRC_BATTERY_STATUS_CMD    inform_battery_status;  /* InformBatteryStatus */
1187     tAVRC_GET_ELEM_ATTRS_CMD    get_elem_attrs;         /* GetElemAttrs */
1188     tAVRC_CMD                   get_play_status;        /* GetPlayStatus */
1189     tAVRC_REG_NOTIF_CMD         reg_notif;              /* RegNotify */
1190     tAVRC_NEXT_CMD              continu;                /* Continue */
1191     tAVRC_NEXT_CMD              abort;                  /* Abort */
1192 
1193     tAVRC_SET_ADDR_PLAYER_CMD   addr_player;            /* SetAddrPlayer */
1194     tAVRC_SET_VOLUME_CMD        volume;                 /* SetAbsVolume */
1195     tAVRC_SET_BR_PLAYER_CMD     br_player;              /* SetBrowsedPlayer */
1196     tAVRC_GET_ITEMS_CMD         get_items;              /* GetFolderItems */
1197     tAVRC_CHG_PATH_CMD          chg_path;               /* ChangePath */
1198     tAVRC_GET_ATTRS_CMD         get_attrs;              /* GetItemAttrs */
1199     tAVRC_SEARCH_CMD            search;                 /* Search */
1200     tAVRC_PLAY_ITEM_CMD         play_item;              /* PlayItem */
1201     tAVRC_ADD_TO_PLAY_CMD       add_to_play;            /* AddToNowPlaying */
1202 } tAVRC_COMMAND;
1203 
1204 /* GetCapability */
1205 typedef struct
1206 {
1207     UINT8       pdu;
1208     tAVRC_STS   status;
1209     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1210     UINT8       capability_id;
1211     UINT8       count;
1212     tAVRC_CAPS_PARAM param;
1213 } tAVRC_GET_CAPS_RSP;
1214 
1215 /* ListPlayerAppAttr */
1216 typedef struct
1217 {
1218     UINT8       pdu;
1219     tAVRC_STS   status;
1220     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1221     UINT8       num_attr;
1222     UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
1223 } tAVRC_LIST_APP_ATTR_RSP;
1224 
1225 /* ListPlayerAppValues */
1226 typedef struct
1227 {
1228     UINT8       pdu;
1229     tAVRC_STS   status;
1230     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1231     UINT8       num_val;
1232     UINT8       vals[AVRC_MAX_APP_ATTR_SIZE];
1233 } tAVRC_LIST_APP_VALUES_RSP;
1234 
1235 /* GetCurAppValue */
1236 typedef struct
1237 {
1238     UINT8       pdu;
1239     tAVRC_STS   status;
1240     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1241     UINT8       num_val;
1242     tAVRC_APP_SETTING   *p_vals;
1243 } tAVRC_GET_CUR_APP_VALUE_RSP;
1244 
1245 /* GetAppAttrTxt */
1246 typedef struct
1247 {
1248     UINT8       pdu;
1249     tAVRC_STS   status;
1250     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1251     UINT8       num_attr;
1252     tAVRC_APP_SETTING_TEXT   *p_attrs;
1253 } tAVRC_GET_APP_ATTR_TXT_RSP;
1254 
1255 /* GetElemAttrs */
1256 typedef struct
1257 {
1258     UINT8       pdu;
1259     tAVRC_STS   status;
1260     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1261     UINT8       num_attr;
1262     tAVRC_ATTR_ENTRY   *p_attrs;
1263 } tAVRC_GET_ELEM_ATTRS_RSP;
1264 
1265 /* GetPlayStatus */
1266 typedef struct
1267 {
1268     UINT8       pdu;
1269     tAVRC_STS   status;
1270     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1271     UINT32      song_len;
1272     UINT32      song_pos;
1273     UINT8       play_status;
1274 } tAVRC_GET_PLAY_STATUS_RSP;
1275 
1276 /* notification event parameter for AddressedPlayer change */
1277 typedef struct
1278 {
1279     UINT16              player_id;
1280     UINT16              uid_counter;
1281 } tAVRC_ADDR_PLAYER_PARAM;
1282 
1283 #ifndef AVRC_MAX_APP_SETTINGS
1284 #define AVRC_MAX_APP_SETTINGS    8
1285 #endif
1286 
1287 /* notification event parameter for Player Application setting change */
1288 typedef struct
1289 {
1290     UINT8               num_attr;
1291     UINT8               attr_id[AVRC_MAX_APP_SETTINGS];
1292     UINT8               attr_value[AVRC_MAX_APP_SETTINGS];
1293 } tAVRC_PLAYER_APP_PARAM;
1294 
1295 typedef union
1296 {
1297     tAVRC_PLAYSTATE         play_status;
1298     tAVRC_UID               track;
1299     UINT32                  play_pos;
1300     tAVRC_BATTERY_STATUS    battery_status;
1301     tAVRC_SYSTEMSTATE       system_status;
1302     tAVRC_PLAYER_APP_PARAM  player_setting;
1303     tAVRC_ADDR_PLAYER_PARAM addr_player;
1304     UINT16                  uid_counter;
1305     UINT8                   volume;
1306 } tAVRC_NOTIF_RSP_PARAM;
1307 
1308 /* RegNotify */
1309 typedef struct
1310 {
1311     UINT8                   pdu;
1312     tAVRC_STS               status;
1313     UINT8                   opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1314     UINT8                   event_id;
1315     tAVRC_NOTIF_RSP_PARAM   param;
1316 } tAVRC_REG_NOTIF_RSP;
1317 
1318 /* SetAbsVolume */
1319 typedef struct
1320 {
1321     UINT8               pdu;
1322     tAVRC_STS           status;
1323     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1324     UINT8               volume;
1325 } tAVRC_SET_VOLUME_RSP;
1326 
1327 /* SetBrowsedPlayer */
1328 typedef struct
1329 {
1330     UINT8               pdu;
1331     tAVRC_STS           status;
1332     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1333     UINT16              uid_counter;
1334     UINT32              num_items;
1335     UINT16              charset_id;
1336     UINT8               folder_depth;
1337     tAVRC_NAME          *p_folders;
1338 } tAVRC_SET_BR_PLAYER_RSP;
1339 
1340 /* GetFolderItems */
1341 typedef struct
1342 {
1343     UINT8               pdu;
1344     tAVRC_STS           status;
1345     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1346     UINT16              uid_counter;
1347     UINT16              item_count;
1348     tAVRC_ITEM          *p_item_list;
1349 } tAVRC_GET_ITEMS_RSP;
1350 
1351 /* ChangePath */
1352 typedef struct
1353 {
1354     UINT8               pdu;
1355     tAVRC_STS           status;
1356     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1357     UINT32              num_items;
1358 } tAVRC_CHG_PATH_RSP;
1359 
1360 /* GetItemAttrs */
1361 typedef struct
1362 {
1363     UINT8               pdu;
1364     tAVRC_STS           status;
1365     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1366     UINT8               attr_count;
1367     tAVRC_ATTR_ENTRY    *p_attr_list;
1368 } tAVRC_GET_ATTRS_RSP;
1369 
1370 /* Search */
1371 typedef struct
1372 {
1373     UINT8               pdu;
1374     tAVRC_STS           status;
1375     UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1376     UINT16              uid_counter;
1377     UINT32              num_items;
1378 } tAVRC_SEARCH_RSP;
1379 
1380 
1381 typedef struct
1382 {
1383     UINT8       pdu;
1384     tAVRC_STS   status;
1385     UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1386 } tAVRC_RSP;
1387 
1388 typedef union
1389 {
1390     UINT8                           pdu;
1391     tAVRC_RSP                       rsp;
1392     tAVRC_GET_CAPS_RSP              get_caps;               /* GetCapability */
1393     tAVRC_LIST_APP_ATTR_RSP         list_app_attr;          /* ListPlayerAppAttr */
1394     tAVRC_LIST_APP_VALUES_RSP       list_app_values;        /* ListPlayerAppValues */
1395     tAVRC_GET_CUR_APP_VALUE_RSP     get_cur_app_val;        /* GetCurAppValue */
1396     tAVRC_RSP                       set_app_val;            /* SetAppValue */
1397     tAVRC_GET_APP_ATTR_TXT_RSP      get_app_attr_txt;       /* GetAppAttrTxt */
1398     tAVRC_GET_APP_ATTR_TXT_RSP      get_app_val_txt;        /* GetAppValueTxt */
1399     tAVRC_RSP                       inform_charset;         /* InformCharset */
1400     tAVRC_RSP                       inform_battery_status;  /* InformBatteryStatus */
1401     tAVRC_GET_ELEM_ATTRS_RSP        get_elem_attrs;         /* GetElemAttrs */
1402     tAVRC_GET_PLAY_STATUS_RSP       get_play_status;        /* GetPlayStatus */
1403     tAVRC_REG_NOTIF_RSP             reg_notif;              /* RegNotify */
1404     tAVRC_RSP                       continu;                /* Continue */
1405     tAVRC_RSP                       abort;                  /* Abort */
1406 
1407     tAVRC_RSP                       addr_player;            /* SetAddrPlayer */
1408     tAVRC_SET_VOLUME_RSP            volume;                 /* SetAbsVolume */
1409     tAVRC_SET_BR_PLAYER_RSP         br_player;              /* SetBrowsedPlayer */
1410     tAVRC_GET_ITEMS_RSP             get_items;              /* GetFolderItems */
1411     tAVRC_CHG_PATH_RSP              chg_path;               /* ChangePath */
1412     tAVRC_GET_ATTRS_RSP             get_attrs;              /* GetItemAttrs */
1413     tAVRC_SEARCH_RSP                search;                 /* Search */
1414     tAVRC_RSP                       play_item;              /* PlayItem */
1415     tAVRC_RSP                       add_to_play;            /* AddToNowPlaying */
1416 } tAVRC_RESPONSE;
1417 
1418 
1419 #endif
1420