• 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)) ? TRUE : FALSE)
846  
847  #define AVRC_IS_VALID_MEDIA_ATTRIBUTE(a)    ((a >= AVRC_MEDIA_ATTR_ID_TITLE) && \
848                                               (a <= AVRC_MEDIA_ATTR_ID_PLAYING_TIME) ? TRUE : FALSE)
849  
850  #define AVRC_IS_VALID_BATTERY_STATUS(a)    ((a <= AVRC_BATTERY_STATUS_FULL_CHARGE) ? TRUE : FALSE)
851  
852  #define AVRC_IS_VALID_SYSTEM_STATUS(a)    ((a <= AVRC_SYSTEMSTATE_PWR_UNPLUGGED) ? TRUE : FALSE)
853  
854  #define AVRC_IS_VALID_GROUP(a)    ((a <= AVRC_PDU_PREV_GROUP) ? TRUE : FALSE)
855  
856  /* Company ID is 24-bit integer We can not use the macros in bt_types.h */
857  #define AVRC_CO_ID_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
858  #define AVRC_BE_STREAM_TO_CO_ID(u32, p) {u32 = (((UINT32)(*((p) + 2))) + (((UINT32)(*((p) + 1))) << 8) + (((UINT32)(*(p))) << 16)); (p) += 3;}
859  
860  /*****************************************************************************
861  **  data type definitions
862  *****************************************************************************/
863  #define AVRC_MAX_APP_ATTR_SIZE      16
864  #define AVRC_MAX_CHARSET_SIZE       16
865  #define AVRC_MAX_ELEM_ATTR_SIZE     8
866  
867  
868  /*****************************************************************************
869  **  Metadata transfer Building/Parsing definitions
870  *****************************************************************************/
871  
872  typedef struct {
873      UINT16              charset_id;
874      UINT16              str_len;
875      UINT8               *p_str;
876  } tAVRC_FULL_NAME;
877  
878  typedef struct {
879      UINT16              str_len;
880      UINT8               *p_str;
881  } tAVRC_NAME;
882  
883  
884  #ifndef AVRC_CAP_MAX_NUM_COMP_ID
885  #define AVRC_CAP_MAX_NUM_COMP_ID    4
886  #endif
887  
888  #ifndef AVRC_CAP_MAX_NUM_EVT_ID
889  #define AVRC_CAP_MAX_NUM_EVT_ID     16
890  #endif
891  
892  typedef union
893  {
894      UINT32  company_id[AVRC_CAP_MAX_NUM_COMP_ID];
895      UINT8   event_id[AVRC_CAP_MAX_NUM_EVT_ID];
896  } tAVRC_CAPS_PARAM;
897  
898  typedef struct
899  {
900      UINT8   attr_id;
901      UINT8   attr_val;
902  } tAVRC_APP_SETTING;
903  
904  typedef struct
905  {
906      UINT8   attr_id;
907      UINT16  charset_id;
908      UINT8   str_len;
909      UINT8   *p_str;
910  } tAVRC_APP_SETTING_TEXT;
911  
912  typedef UINT8 tAVRC_FEATURE_MASK[AVRC_FEATURE_MASK_SIZE];
913  
914  typedef struct
915  {
916      UINT16              player_id;      /* A unique identifier for this media player.*/
917      UINT8               major_type;     /* Use AVRC_MJ_TYPE_AUDIO, AVRC_MJ_TYPE_VIDEO, AVRC_MJ_TYPE_BC_AUDIO, or AVRC_MJ_TYPE_BC_VIDEO.*/
918      UINT32              sub_type;       /* Use AVRC_SUB_TYPE_NONE, AVRC_SUB_TYPE_AUDIO_BOOK, or AVRC_SUB_TYPE_PODCAST*/
919      UINT8               play_status;    /* Use AVRC_PLAYSTATE_STOPPED, AVRC_PLAYSTATE_PLAYING, AVRC_PLAYSTATE_PAUSED, AVRC_PLAYSTATE_FWD_SEEK,
920                                              AVRC_PLAYSTATE_REV_SEEK, or AVRC_PLAYSTATE_ERROR*/
921      tAVRC_FEATURE_MASK  features;       /* Supported feature bit mask*/
922      tAVRC_FULL_NAME     name;           /* The player name, name length and character set id.*/
923  } tAVRC_ITEM_PLAYER;
924  
925  typedef struct
926  {
927      tAVRC_UID           uid;            /* The uid of this folder */
928      UINT8               type;           /* Use AVRC_FOLDER_TYPE_MIXED, AVRC_FOLDER_TYPE_TITLES,
929                                             AVRC_FOLDER_TYPE_ALNUMS, AVRC_FOLDER_TYPE_ARTISTS, AVRC_FOLDER_TYPE_GENRES,
930                                             AVRC_FOLDER_TYPE_PLAYLISTS, or AVRC_FOLDER_TYPE_YEARS.*/
931      BOOLEAN             playable;       /* TRUE, if the folder can be played. */
932      tAVRC_FULL_NAME     name;           /* The folder name, name length and character set id. */
933  } tAVRC_ITEM_FOLDER;
934  
935  typedef struct
936  {
937      UINT32              attr_id;        /* Use AVRC_MEDIA_ATTR_ID_TITLE, AVRC_MEDIA_ATTR_ID_ARTIST, AVRC_MEDIA_ATTR_ID_ALBUM,
938                                             AVRC_MEDIA_ATTR_ID_TRACK_NUM, AVRC_MEDIA_ATTR_ID_NUM_TRACKS,
939                                             AVRC_MEDIA_ATTR_ID_GENRE, AVRC_MEDIA_ATTR_ID_PLAYING_TIME */
940      tAVRC_FULL_NAME     name;           /* The attribute value, value length and character set id. */
941  } tAVRC_ATTR_ENTRY;
942  
943  typedef struct
944  {
945      tAVRC_UID           uid;            /* The uid of this media element item */
946      UINT8               type;           /* Use AVRC_MEDIA_TYPE_AUDIO or AVRC_MEDIA_TYPE_VIDEO. */
947      tAVRC_FULL_NAME     name;           /* The media name, name length and character set id. */
948      UINT8               attr_count;     /* The number of attributes in p_attr_list */
949      tAVRC_ATTR_ENTRY*   p_attr_list;    /* Attribute entry list. */
950  } tAVRC_ITEM_MEDIA;
951  
952  typedef struct
953  {
954      UINT8                   item_type;  /* AVRC_ITEM_PLAYER, AVRC_ITEM_FOLDER, or AVRC_ITEM_MEDIA */
955      union
956      {
957          tAVRC_ITEM_PLAYER   player;     /* The properties of a media player item.*/
958          tAVRC_ITEM_FOLDER   folder;     /* The properties of a folder item.*/
959          tAVRC_ITEM_MEDIA    media;      /* The properties of a media item.*/
960      } u;
961  } tAVRC_ITEM;
962  
963  /* GetCapability */
964  typedef struct
965  {
966      UINT8       pdu;
967      tAVRC_STS   status;
968      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
969      UINT8       capability_id;
970  } tAVRC_GET_CAPS_CMD;
971  
972  /* ListPlayerAppValues */
973  typedef struct
974  {
975      UINT8       pdu;
976      tAVRC_STS   status;
977      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
978      UINT8       attr_id;
979  } tAVRC_LIST_APP_VALUES_CMD;
980  
981  /* GetCurAppValue */
982  typedef struct
983  {
984      UINT8       pdu;
985      tAVRC_STS   status;
986      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
987      UINT8       num_attr;
988      UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
989  } tAVRC_GET_CUR_APP_VALUE_CMD;
990  
991  /* SetAppValue */
992  typedef struct
993  {
994      UINT8       pdu;
995      tAVRC_STS   status;
996      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
997      UINT8       num_val;
998      tAVRC_APP_SETTING   *p_vals;
999  } tAVRC_SET_APP_VALUE_CMD;
1000  
1001  /* GetAppAttrTxt */
1002  typedef struct
1003  {
1004      UINT8       pdu;
1005      tAVRC_STS   status;
1006      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1007      UINT8       num_attr;
1008      UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
1009  } tAVRC_GET_APP_ATTR_TXT_CMD;
1010  
1011  /* GetAppValueTxt */
1012  typedef struct
1013  {
1014      UINT8       pdu;
1015      tAVRC_STS   status;
1016      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1017      UINT8       attr_id;
1018      UINT8       num_val;
1019      UINT8       vals[AVRC_MAX_APP_ATTR_SIZE];
1020  } tAVRC_GET_APP_VAL_TXT_CMD;
1021  
1022  /* InformCharset */
1023  typedef struct
1024  {
1025      UINT8       pdu;
1026      tAVRC_STS   status;
1027      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1028      UINT8       num_id;
1029      UINT16      charsets[AVRC_MAX_CHARSET_SIZE];
1030  } tAVRC_INFORM_CHARSET_CMD;
1031  
1032  /* InformBatteryStatus */
1033  typedef struct
1034  {
1035      UINT8       pdu;
1036      tAVRC_STS   status;
1037      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1038      UINT8       battery_status;
1039  } tAVRC_BATTERY_STATUS_CMD;
1040  
1041  /* GetElemAttrs */
1042  typedef struct
1043  {
1044      UINT8       pdu;
1045      tAVRC_STS   status;
1046      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1047      UINT8       num_attr;
1048      UINT32      attrs[AVRC_MAX_ELEM_ATTR_SIZE];
1049  } tAVRC_GET_ELEM_ATTRS_CMD;
1050  
1051  /* RegNotify */
1052  typedef struct
1053  {
1054      UINT8       pdu;
1055      tAVRC_STS   status;
1056      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1057      UINT8       event_id;
1058      UINT32      param;
1059  } tAVRC_REG_NOTIF_CMD;
1060  
1061  /* SetAddrPlayer */
1062  typedef struct
1063  {
1064      UINT8       pdu;
1065      tAVRC_STS   status;
1066      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1067      UINT16      player_id;
1068  } tAVRC_SET_ADDR_PLAYER_CMD;
1069  
1070  /* SetBrowsedPlayer */
1071  typedef struct
1072  {
1073      UINT8       pdu;
1074      tAVRC_STS   status;
1075      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1076      UINT16      player_id;
1077  } tAVRC_SET_BR_PLAYER_CMD;
1078  
1079  /* SetAbsVolume */
1080  typedef struct
1081  {
1082      UINT8       pdu;
1083      tAVRC_STS   status;
1084      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1085      UINT8       volume;
1086  } tAVRC_SET_VOLUME_CMD;
1087  
1088  /* GetFolderItems */
1089  typedef struct
1090  {
1091      UINT8       pdu;
1092      tAVRC_STS   status;
1093      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1094      UINT8       scope;
1095      UINT32      start_item;
1096      UINT32      end_item;
1097      UINT8       attr_count;
1098      UINT32      *p_attr_list;
1099  } tAVRC_GET_ITEMS_CMD;
1100  
1101  /* ChangePath */
1102  typedef struct
1103  {
1104      UINT8       pdu;
1105      tAVRC_STS   status;
1106      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1107      UINT16      uid_counter;
1108      UINT8       direction;
1109      tAVRC_UID   folder_uid;
1110  } tAVRC_CHG_PATH_CMD;
1111  
1112  /* GetItemAttrs */
1113  typedef struct
1114  {
1115      UINT8       pdu;
1116      tAVRC_STS   status;
1117      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1118      UINT8       scope;
1119      tAVRC_UID   uid;
1120      UINT16      uid_counter;
1121      UINT8       attr_count;
1122      UINT32      *p_attr_list;
1123  } tAVRC_GET_ATTRS_CMD;
1124  
1125  /* Search */
1126  typedef struct
1127  {
1128      UINT8           pdu;
1129      tAVRC_STS       status;
1130      UINT8           opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1131      tAVRC_FULL_NAME string;
1132  } tAVRC_SEARCH_CMD;
1133  
1134  /* PlayItem */
1135  typedef struct
1136  {
1137      UINT8       pdu;
1138      tAVRC_STS   status;
1139      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1140      UINT8       scope;
1141      tAVRC_UID   uid;
1142      UINT16      uid_counter;
1143  } tAVRC_PLAY_ITEM_CMD;
1144  
1145  /* AddToNowPlaying */
1146  typedef struct
1147  {
1148      UINT8       pdu;
1149      tAVRC_STS   status;
1150      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1151      UINT8       scope;
1152      tAVRC_UID   uid;
1153      UINT16      uid_counter;
1154  } tAVRC_ADD_TO_PLAY_CMD;
1155  
1156  typedef struct
1157  {
1158      UINT8       pdu;
1159      tAVRC_STS   status;
1160      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1161  } tAVRC_CMD;
1162  
1163  /* Continue and Abort */
1164  typedef struct
1165  {
1166      UINT8       pdu;
1167      tAVRC_STS   status;
1168      UINT8       opcode;         /* Op Code (assigned by AVRC_BldCommand according to pdu) */
1169      UINT8       target_pdu;
1170  } tAVRC_NEXT_CMD;
1171  
1172  typedef union
1173  {
1174      UINT8                       pdu;
1175      tAVRC_CMD                   cmd;
1176      tAVRC_GET_CAPS_CMD          get_caps;               /* GetCapability */
1177      tAVRC_CMD                   list_app_attr;          /* ListPlayerAppAttr */
1178      tAVRC_LIST_APP_VALUES_CMD   list_app_values;        /* ListPlayerAppValues */
1179      tAVRC_GET_CUR_APP_VALUE_CMD get_cur_app_val;        /* GetCurAppValue */
1180      tAVRC_SET_APP_VALUE_CMD     set_app_val;            /* SetAppValue */
1181      tAVRC_GET_APP_ATTR_TXT_CMD  get_app_attr_txt;       /* GetAppAttrTxt */
1182      tAVRC_GET_APP_VAL_TXT_CMD   get_app_val_txt;        /* GetAppValueTxt */
1183      tAVRC_INFORM_CHARSET_CMD    inform_charset;         /* InformCharset */
1184      tAVRC_BATTERY_STATUS_CMD    inform_battery_status;  /* InformBatteryStatus */
1185      tAVRC_GET_ELEM_ATTRS_CMD    get_elem_attrs;         /* GetElemAttrs */
1186      tAVRC_CMD                   get_play_status;        /* GetPlayStatus */
1187      tAVRC_REG_NOTIF_CMD         reg_notif;              /* RegNotify */
1188      tAVRC_NEXT_CMD              continu;                /* Continue */
1189      tAVRC_NEXT_CMD              abort;                  /* Abort */
1190  
1191      tAVRC_SET_ADDR_PLAYER_CMD   addr_player;            /* SetAddrPlayer */
1192      tAVRC_SET_VOLUME_CMD        volume;                 /* SetAbsVolume */
1193      tAVRC_SET_BR_PLAYER_CMD     br_player;              /* SetBrowsedPlayer */
1194      tAVRC_GET_ITEMS_CMD         get_items;              /* GetFolderItems */
1195      tAVRC_CHG_PATH_CMD          chg_path;               /* ChangePath */
1196      tAVRC_GET_ATTRS_CMD         get_attrs;              /* GetItemAttrs */
1197      tAVRC_SEARCH_CMD            search;                 /* Search */
1198      tAVRC_PLAY_ITEM_CMD         play_item;              /* PlayItem */
1199      tAVRC_ADD_TO_PLAY_CMD       add_to_play;            /* AddToNowPlaying */
1200  } tAVRC_COMMAND;
1201  
1202  /* GetCapability */
1203  typedef struct
1204  {
1205      UINT8       pdu;
1206      tAVRC_STS   status;
1207      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1208      UINT8       capability_id;
1209      UINT8       count;
1210      tAVRC_CAPS_PARAM param;
1211  } tAVRC_GET_CAPS_RSP;
1212  
1213  /* ListPlayerAppAttr */
1214  typedef struct
1215  {
1216      UINT8       pdu;
1217      tAVRC_STS   status;
1218      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1219      UINT8       num_attr;
1220      UINT8       attrs[AVRC_MAX_APP_ATTR_SIZE];
1221  } tAVRC_LIST_APP_ATTR_RSP;
1222  
1223  /* ListPlayerAppValues */
1224  typedef struct
1225  {
1226      UINT8       pdu;
1227      tAVRC_STS   status;
1228      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1229      UINT8       num_val;
1230      UINT8       vals[AVRC_MAX_APP_ATTR_SIZE];
1231  } tAVRC_LIST_APP_VALUES_RSP;
1232  
1233  /* GetCurAppValue */
1234  typedef struct
1235  {
1236      UINT8       pdu;
1237      tAVRC_STS   status;
1238      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1239      UINT8       num_val;
1240      tAVRC_APP_SETTING   *p_vals;
1241  } tAVRC_GET_CUR_APP_VALUE_RSP;
1242  
1243  /* GetAppAttrTxt */
1244  typedef struct
1245  {
1246      UINT8       pdu;
1247      tAVRC_STS   status;
1248      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1249      UINT8       num_attr;
1250      tAVRC_APP_SETTING_TEXT   *p_attrs;
1251  } tAVRC_GET_APP_ATTR_TXT_RSP;
1252  
1253  /* GetElemAttrs */
1254  typedef struct
1255  {
1256      UINT8       pdu;
1257      tAVRC_STS   status;
1258      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1259      UINT8       num_attr;
1260      tAVRC_ATTR_ENTRY   *p_attrs;
1261  } tAVRC_GET_ELEM_ATTRS_RSP;
1262  
1263  /* GetPlayStatus */
1264  typedef struct
1265  {
1266      UINT8       pdu;
1267      tAVRC_STS   status;
1268      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1269      UINT32      song_len;
1270      UINT32      song_pos;
1271      UINT8       play_status;
1272  } tAVRC_GET_PLAY_STATUS_RSP;
1273  
1274  /* notification event parameter for AddressedPlayer change */
1275  typedef struct
1276  {
1277      UINT16              player_id;
1278      UINT16              uid_counter;
1279  } tAVRC_ADDR_PLAYER_PARAM;
1280  
1281  #ifndef AVRC_MAX_APP_SETTINGS
1282  #define AVRC_MAX_APP_SETTINGS    8
1283  #endif
1284  
1285  /* notification event parameter for Player Application setting change */
1286  typedef struct
1287  {
1288      UINT8               num_attr;
1289      UINT8               attr_id[AVRC_MAX_APP_SETTINGS];
1290      UINT8               attr_value[AVRC_MAX_APP_SETTINGS];
1291  } tAVRC_PLAYER_APP_PARAM;
1292  
1293  typedef union
1294  {
1295      tAVRC_PLAYSTATE         play_status;
1296      tAVRC_UID               track;
1297      UINT32                  play_pos;
1298      tAVRC_BATTERY_STATUS    battery_status;
1299      tAVRC_SYSTEMSTATE       system_status;
1300      tAVRC_PLAYER_APP_PARAM  player_setting;
1301      tAVRC_ADDR_PLAYER_PARAM addr_player;
1302      UINT16                  uid_counter;
1303      UINT8                   volume;
1304  } tAVRC_NOTIF_RSP_PARAM;
1305  
1306  /* RegNotify */
1307  typedef struct
1308  {
1309      UINT8                   pdu;
1310      tAVRC_STS               status;
1311      UINT8                   opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1312      UINT8                   event_id;
1313      tAVRC_NOTIF_RSP_PARAM   param;
1314  } tAVRC_REG_NOTIF_RSP;
1315  
1316  /* SetAbsVolume */
1317  typedef struct
1318  {
1319      UINT8               pdu;
1320      tAVRC_STS           status;
1321      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1322      UINT8               volume;
1323  } tAVRC_SET_VOLUME_RSP;
1324  
1325  /* SetBrowsedPlayer */
1326  typedef struct
1327  {
1328      UINT8               pdu;
1329      tAVRC_STS           status;
1330      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1331      UINT16              uid_counter;
1332      UINT32              num_items;
1333      UINT16              charset_id;
1334      UINT8               folder_depth;
1335      tAVRC_NAME          *p_folders;
1336  } tAVRC_SET_BR_PLAYER_RSP;
1337  
1338  /* GetFolderItems */
1339  typedef struct
1340  {
1341      UINT8               pdu;
1342      tAVRC_STS           status;
1343      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1344      UINT16              uid_counter;
1345      UINT16              item_count;
1346      tAVRC_ITEM          *p_item_list;
1347  } tAVRC_GET_ITEMS_RSP;
1348  
1349  /* ChangePath */
1350  typedef struct
1351  {
1352      UINT8               pdu;
1353      tAVRC_STS           status;
1354      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1355      UINT32              num_items;
1356  } tAVRC_CHG_PATH_RSP;
1357  
1358  /* GetItemAttrs */
1359  typedef struct
1360  {
1361      UINT8               pdu;
1362      tAVRC_STS           status;
1363      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1364      UINT8               attr_count;
1365      tAVRC_ATTR_ENTRY    *p_attr_list;
1366  } tAVRC_GET_ATTRS_RSP;
1367  
1368  /* Search */
1369  typedef struct
1370  {
1371      UINT8               pdu;
1372      tAVRC_STS           status;
1373      UINT8               opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1374      UINT16              uid_counter;
1375      UINT32              num_items;
1376  } tAVRC_SEARCH_RSP;
1377  
1378  
1379  typedef struct
1380  {
1381      UINT8       pdu;
1382      tAVRC_STS   status;
1383      UINT8       opcode;         /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse user. invalid one to generate according to pdu) */
1384  } tAVRC_RSP;
1385  
1386  typedef union
1387  {
1388      UINT8                           pdu;
1389      tAVRC_RSP                       rsp;
1390      tAVRC_GET_CAPS_RSP              get_caps;               /* GetCapability */
1391      tAVRC_LIST_APP_ATTR_RSP         list_app_attr;          /* ListPlayerAppAttr */
1392      tAVRC_LIST_APP_VALUES_RSP       list_app_values;        /* ListPlayerAppValues */
1393      tAVRC_GET_CUR_APP_VALUE_RSP     get_cur_app_val;        /* GetCurAppValue */
1394      tAVRC_RSP                       set_app_val;            /* SetAppValue */
1395      tAVRC_GET_APP_ATTR_TXT_RSP      get_app_attr_txt;       /* GetAppAttrTxt */
1396      tAVRC_GET_APP_ATTR_TXT_RSP      get_app_val_txt;        /* GetAppValueTxt */
1397      tAVRC_RSP                       inform_charset;         /* InformCharset */
1398      tAVRC_RSP                       inform_battery_status;  /* InformBatteryStatus */
1399      tAVRC_GET_ELEM_ATTRS_RSP        get_elem_attrs;         /* GetElemAttrs */
1400      tAVRC_GET_PLAY_STATUS_RSP       get_play_status;        /* GetPlayStatus */
1401      tAVRC_REG_NOTIF_RSP             reg_notif;              /* RegNotify */
1402      tAVRC_RSP                       continu;                /* Continue */
1403      tAVRC_RSP                       abort;                  /* Abort */
1404  
1405      tAVRC_RSP                       addr_player;            /* SetAddrPlayer */
1406      tAVRC_SET_VOLUME_RSP            volume;                 /* SetAbsVolume */
1407      tAVRC_SET_BR_PLAYER_RSP         br_player;              /* SetBrowsedPlayer */
1408      tAVRC_GET_ITEMS_RSP             get_items;              /* GetFolderItems */
1409      tAVRC_CHG_PATH_RSP              chg_path;               /* ChangePath */
1410      tAVRC_GET_ATTRS_RSP             get_attrs;              /* GetItemAttrs */
1411      tAVRC_SEARCH_RSP                search;                 /* Search */
1412      tAVRC_RSP                       play_item;              /* PlayItem */
1413      tAVRC_RSP                       add_to_play;            /* AddToNowPlaying */
1414  } tAVRC_RESPONSE;
1415  
1416  
1417  #endif
1418