avrc_defs.h revision d6750ef014c13bbfebc88a7b6789579b919e1bec
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/******************************************************************************
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  Copyright (C) 2006-2012 Broadcom Corporation
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  Licensed under the Apache License, Version 2.0 (the "License");
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  you may not use this file except in compliance with the License.
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  You may obtain a copy of the License at:
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  http://www.apache.org/licenses/LICENSE-2.0
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  Unless required by applicable law or agreed to in writing, software
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  distributed under the License is distributed on an "AS IS" BASIS,
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  See the License for the specific language governing permissions and
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *  limitations under the License.
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ******************************************************************************/
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/******************************************************************************
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch *
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *  AVRCP definition and data types
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ******************************************************************************/
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef _AVRC_DEFS_H
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define _AVRC_DEFS_H
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*****************************************************************************
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)**  constants
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*****************************************************************************/
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Profile revision numbers */
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_REV_1_0        0x0100
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_REV_1_3        0x0103
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_REV_1_4        0x0104
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PACKET_LEN             512 /* Per the spec, you must support 512 byte RC packets */
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_MIN_CONTROL_MTU        48  /* Per the spec, minimum MTU for the control channel */
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_MIN_BROWSE_MTU         335 /* Per the spec, minimum MTU for the browsing channel */
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_META_PDU_OFFSET        4
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_TYPE_LEN           4
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_UID_SIZE               8
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_FEATURE_MASK_SIZE      16
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* command type codes */
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CMD_CTRL       0   /* Instruct a target to perform an operation */
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CMD_STATUS     1   /* Check a device�s current status */
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CMD_SPEC_INQ   2   /* Check whether a target supports a particular
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   control command; all operands are included */
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CMD_NOTIF      3   /* Used for receiving notification of a change in a device�s state */
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CMD_GEN_INQ    4   /* Check whether a target supports a particular
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   control command; operands are not included */
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* response type codes */
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_NOT_IMPL   8   /* The target does not implement the command specified
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   by the opcode and operand,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   or doesn�t implement the specified subunit */
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_ACCEPT     9   /* The target executed or is executing the command */
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_REJ        10  /* The target implements the command specified by the
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   opcode but cannot respond because the current state
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   of the target doesn�t allow it */
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_IN_TRANS   11  /* The target implements the status command but it is
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   in a state of transition; the status command may
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   be retried at a future time */
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_IMPL_STBL  12  /* For specific inquiry or general inquiy commands,
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                   the target implements the command; for status
684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                                   commands, the target returns stable and includes
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   the status results */
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_CHANGED    13  /* The response frame contains a notification that the
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   target device�s state has changed */
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_RSP_INTERIM    15  /* For control commands, the target has accepted the
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   request but cannot return information within 100
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   milliseconds; for notify commands, the target accepted
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   the command, and will notify the controller of a change
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   of target state at a future time */
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* subunit type */
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_MONITOR    0x00    /* Monitor */
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define AVRC_SUB_AUDIO      0x01    /* Audio */
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_PRINTER    0x02    /* Printer */
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_DISC       0x03    /* Disc */
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_TAPE       0x04    /* Tape recorder/player */
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_TUNER      0x05    /* Tuner */
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_CA         0x06    /* CA */
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_CAMERA     0x07    /* Camera */
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_PANEL      0x09    /* Panel */
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_BB         0x0A    /* Bulletin Board */
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_CAM_STOR   0x0B    /* Camera Storage */
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_VENDOR     0x1C    /* Vendor unique */
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_EXT        0x1E    /* Subunit type extended to next byte */
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_SUB_UNIT       0x1F    /* Unit */
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* opcodes - defined by 1394ta */
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_UNIT_INFO   0x30    /* Report unit information */
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_SUB_INFO    0x31    /* Report subunit information */
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_VENDOR      0x00    /* Vendor-dependent commands */
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_PASS_THRU   0x7C    /* panel subunit opcode */
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* opcodes 80-9F and E0-FF are not used by 1394ta.Sneak one for the browsing channel */
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_BROWSE      0xFF    /* Browsing */
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_OP_INVALID     0xFE    /* invalid one */
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Company ID's
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_CO_BLUETOOTH_SIG   0x00FFFFFF
1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_CO_WIDCOMM         0x00000361
1075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_CO_BROADCOM        0x00001018
1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_CO_METADATA        0x00001958  /* Unique COMPANY ID for Metadata messages */
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* State flag for Passthrough commands
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_STATE_PRESS    0
1135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_STATE_RELEASE  1
1145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Operation ID list for Passthrough commands
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
1175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_ID_SELECT      0x00    /* select */
1185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_ID_UP          0x01    /* up */
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_DOWN        0x02    /* down */
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_LEFT        0x03    /* left */
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_RIGHT       0x04    /* right */
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_RIGHT_UP    0x05    /* right-up */
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_ID_RIGHT_DOWN  0x06    /* right-down */
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_LEFT_UP     0x07    /* left-up */
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_LEFT_DOWN   0x08    /* left-down */
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_ROOT_MENU   0x09    /* root menu */
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_SETUP_MENU  0x0A    /* setup menu */
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_CONT_MENU   0x0B    /* contents menu */
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_FAV_MENU    0x0C    /* favorite menu */
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_EXIT        0x0D    /* exit */
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_0           0x20    /* 0 */
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_1           0x21    /* 1 */
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_2           0x22    /* 2 */
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_3           0x23    /* 3 */
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_4           0x24    /* 4 */
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_5           0x25    /* 5 */
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_6           0x26    /* 6 */
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_7           0x27    /* 7 */
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_8           0x28    /* 8 */
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_9           0x29    /* 9 */
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_DOT         0x2A    /* dot */
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_ENTER       0x2B    /* enter */
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_CLEAR       0x2C    /* clear */
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_CHAN_UP     0x30    /* channel up */
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_CHAN_DOWN   0x31    /* channel down */
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_PREV_CHAN   0x32    /* previous channel */
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_SOUND_SEL   0x33    /* sound select */
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_INPUT_SEL   0x34    /* input select */
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_DISP_INFO   0x35    /* display information */
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_HELP        0x36    /* help */
151ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define AVRC_ID_PAGE_UP     0x37    /* page up */
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_PAGE_DOWN   0x38    /* page down */
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_POWER       0x40    /* power */
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_VOL_UP      0x41    /* volume up */
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_VOL_DOWN    0x42    /* volume down */
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_MUTE        0x43    /* mute */
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_PLAY        0x44    /* play */
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_STOP        0x45    /* stop */
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_PAUSE       0x46    /* pause */
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_RECORD      0x47    /* record */
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_REWIND      0x48    /* rewind */
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_FAST_FOR    0x49    /* fast forward */
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_EJECT       0x4A    /* eject */
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_FORWARD     0x4B    /* forward */
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_BACKWARD    0x4C    /* backward */
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_ANGLE       0x50    /* angle */
1675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_ID_SUBPICT     0x51    /* subpicture */
1685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_ID_F1          0x71    /* F1 */
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_F2          0x72    /* F2 */
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_F3          0x73    /* F3 */
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_F4          0x74    /* F4 */
172ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define AVRC_ID_F5          0x75    /* F5 */
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_ID_VENDOR      0x7E    /* vendor unique */
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_KEYPRESSED_RELEASE 0x80
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/*****************************************************************************
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)**  Metadata transfer definitions
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*****************************************************************************/
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Define the Metadata Packet types
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PKT_SINGLE           0
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PKT_START            1
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PKT_CONTINUE         2
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PKT_END              3
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PKT_TYPE_MASK        3
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Define the PDUs carried in the vendor dependant data
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)*/
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_CAPABILITIES               0x10
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_LIST_PLAYER_APP_ATTR           0x11
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_LIST_PLAYER_APP_VALUES         0x12
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_CUR_PLAYER_APP_VALUE       0x13
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_SET_PLAYER_APP_VALUE           0x14
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT       0x15
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT      0x16
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_INFORM_DISPLAY_CHARSET         0x17
1985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_INFORM_BATTERY_STAT_OF_CT      0x18
1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_ELEMENT_ATTR               0x20
2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_PLAY_STATUS                0x30
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_REGISTER_NOTIFICATION          0x31
2025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_REQUEST_CONTINUATION_RSP       0x40
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_ABORT_CONTINUATION_RSP         0x41
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* added in 1.4 */
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_SET_ABSOLUTE_VOLUME            0x50
2065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_SET_ADDRESSED_PLAYER           0x60
2075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_SET_BROWSED_PLAYER             0x70
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_FOLDER_ITEMS               0x71
2095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_CHANGE_PATH                    0x72
2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GET_ITEM_ATTRIBUTES            0x73
2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_PLAY_ITEM                      0x74
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_SEARCH                         0x80
2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_ADD_TO_NOW_PLAYING             0x90
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_GENERAL_REJECT                 0xA0
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* Define the vendor unique id carried in the pass through data
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)*/
2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_NEXT_GROUP                     0x00
2195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_PREV_GROUP                     0x01
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* the only pass through vendor unique commands defined by AVRC is the group navigation commands
2215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * The len for vendor unique data is 5 */
2225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PASS_THRU_GROUP_LEN                5
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_PDU_INVALID                        0xff
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* 6.15.3 error status code for general reject */
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_BAD_CMD        0x00    /* Invalid command, sent if TG received a PDU that it did not understand. */
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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. */
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NOT_FOUND      0x02    /* Specified parameter not found., sent if the parameter ID is understood, but content is wrong or corrupted. */
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_INTERNAL_ERR   0x03    /* Internal Error, sent if there are error conditions not covered by a more specific error code. */
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NO_ERROR       0x04    /* Operation completed without error.  This is the status that should be returned if the operation was successful. */
2315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_UID_CHANGED    0x05    /* UID Changed - The UIDs on the device have changed */
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)/* #define AVRC_STS_GEN_ERROR      0x06    Unknown Error - this is changed to "reserved" */
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_BAD_DIR        0x07    /* Invalid Direction - The Direction parameter is invalid - Change Path*/
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NOT_DIR        0x08    /* Not a Directory - The UID provided does not refer to a folder item  Change Path*/
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NOT_EXIST      0x09    /* Does Not Exist - The UID provided does not refer to any item    Change Path, PlayItem, AddToNowPlaying, GetItemAttributes*/
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_BAD_SCOPE      0x0a    /* Invalid Scope - The scope parameter is invalid  GetFolderItems, PlayItem, AddToNowPlayer, GetItemAttributes, */
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_BAD_RANGE      0x0b    /* Range Out of Bounds - The start of range provided is not valid  GetFolderItems*/
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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 */
2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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 */
2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NOW_LIST_FULL  0x0e    /* Now Playing List Full - No more items can be added to the Now Playing List  AddToNowPlaying*/
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_SEARCH_NOT_SUP 0x0f    /* Search Not Supported - The Browsed Media Player does not support search Search */
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_SEARCH_BUSY    0x10    /* Search in Progress - A search operation is already in progress  Search*/
2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_BAD_PLAYER_ID  0x11    /* Invalid Player Id - The specified Player Id does not refer to a valid player    SetAddressedPlayer, SetBrowsedPlayer*/
2445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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 */
2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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*/
2465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#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 */
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_NO_AVAL_PLAYER 0x15    /* No available players ALL */
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define AVRC_STS_ADDR_PLAYER_CHG 0x16   /* Addressed Player Changed - Register Notification */
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef UINT8 tAVRC_STS;
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define the Capability IDs
2535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu*/
2545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_CAP_COMPANY_ID                     0x02
2555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_CAP_EVENTS_SUPPORTED               0x03
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_COMPANY_ID_LEN                     3
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CAPABILITY_OFFSET                  2
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define the Player Application Settings IDs
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_EQUALIZER           0x01
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_REPEAT              0x02
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_SHUFFLE             0x03
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_SCAN                0x04
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_LOW_MENU_EXT        0x80
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_SETTING_HIGH_MENU_EXT       0xff
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define the possible values of the Player Application Settings
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_OFF                     0x01
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_ON                      0x02
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_SINGLE_REPEAT           0x02
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_ALL_REPEAT              0x03
2745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define AVRC_PLAYER_VAL_GROUP_REPEAT            0x04
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_ALL_SHUFFLE             0x02
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_GROUP_SHUFFLE           0x03
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_ALL_SCAN                0x02
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_PLAYER_VAL_GROUP_SCAN              0x03
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define the possible values of Battery Status PDU
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_BATTERY_STATUS_NORMAL              0x00
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_BATTERY_STATUS_WARNING             0x01
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_BATTERY_STATUS_CRITICAL            0x02
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_BATTERY_STATUS_EXTERNAL            0x03
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_BATTERY_STATUS_FULL_CHARGE         0x04
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef UINT8 tAVRC_BATTERY_STATUS;
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define character set */
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_CHAR_SET_SIZE                      2
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* Define the Media Attribute IDs
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)*/
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_MEDIA_ATTR_ID_TITLE                 0x00000001
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define AVRC_MEDIA_ATTR_ID_ARTIST                0x00000002
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#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)) || \
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
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
1418