blob: d6ff8a0b59db6c8d7310178f205d93a887f0e1eb [file] [log] [blame]
The Android Open Source Project5738f832012-12-12 16:00:35 -08001/******************************************************************************
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 */
249typedef 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
287typedef 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 */
312typedef 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
346typedef 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
399typedef 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/*
755This structure contains the header parameters of an AV/C message.
756*/
757typedef 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. */
768typedef 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. */
777typedef 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. */
790typedef 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 */
799typedef 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 */
817typedef 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. */
828typedef 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)) || \
Mike J. Chend6750ef2014-01-31 15:06:22 -0800845 (a >= AVRC_PLAYER_SETTING_LOW_MENU_EXT)) ? TRUE : FALSE)
The Android Open Source Project5738f832012-12-12 16:00:35 -0800846
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
872typedef struct {
873 UINT16 charset_id;
874 UINT16 str_len;
875 UINT8 *p_str;
876} tAVRC_FULL_NAME;
877
878typedef 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
892typedef 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
898typedef struct
899{
900 UINT8 attr_id;
901 UINT8 attr_val;
902} tAVRC_APP_SETTING;
903
904typedef struct
905{
906 UINT8 attr_id;
907 UINT16 charset_id;
908 UINT8 str_len;
909 UINT8 *p_str;
910} tAVRC_APP_SETTING_TEXT;
911
912typedef UINT8 tAVRC_FEATURE_MASK[AVRC_FEATURE_MASK_SIZE];
913
914typedef 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
925typedef 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
935typedef 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
943typedef 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
952typedef 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 */
964typedef 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 */
973typedef 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 */
982typedef 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 */
992typedef 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 */
1002typedef 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 */
1012typedef 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 */
1023typedef 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 */
1033typedef 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 */
1042typedef 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 */
1052typedef 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 */
1062typedef 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 */
1071typedef 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 */
1080typedef 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 */
1089typedef 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 */
1102typedef 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 */
1113typedef 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 */
1126typedef 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 */
1135typedef 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 */
1146typedef 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
1156typedef 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 */
1164typedef 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
1172typedef 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 */
1203typedef 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 */
1214typedef 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 */
1224typedef 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 */
1234typedef 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 */
1244typedef 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 */
1254typedef 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 */
1264typedef 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 */
1275typedef 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 */
1286typedef 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
1293typedef 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 */
1307typedef 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 */
1317typedef 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 */
1326typedef 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 */
1339typedef 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 */
1350typedef 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 */
1359typedef 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 */
1369typedef 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
1379typedef 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
1386typedef 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