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