| /****************************************************************************** |
| * |
| * Copyright (C) 2006-2016 Broadcom Corporation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at: |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| ******************************************************************************/ |
| |
| /****************************************************************************** |
| * |
| * AVRCP definition and data types |
| * |
| ******************************************************************************/ |
| #ifndef _AVRC_DEFS_H |
| #define _AVRC_DEFS_H |
| |
| #include "stack/include/bt_types.h" |
| |
| /***************************************************************************** |
| * constants |
| ****************************************************************************/ |
| |
| /* Profile revision numbers */ |
| #define AVRC_REV_1_0 0x0100 |
| #define AVRC_REV_1_3 0x0103 |
| #define AVRC_REV_1_4 0x0104 |
| #define AVRC_REV_1_5 0x0105 |
| #define AVRC_REV_1_6 0x0106 |
| |
| /* defines from the spec */ |
| #define AVRC_PACKET_LEN 512 /* You must support 512 byte RC packets */ |
| |
| #define AVRC_MIN_CONTROL_MTU 48 /* Minimum MTU for the control channel */ |
| #define AVRC_MIN_BROWSE_MTU 335 /* Minimum MTU for the browsing channel */ |
| |
| #define AVRC_META_PDU_OFFSET 4 |
| #define AVRC_SUB_TYPE_LEN 4 |
| #define AVRC_UID_SIZE 8 |
| #define AVRC_FEATURE_MASK_SIZE 16 |
| |
| /* command type codes */ |
| #define AVRC_CMD_CTRL 0 /* Instruct a target to perform an operation */ |
| #define AVRC_CMD_STATUS 1 /* Check a device's current status */ |
| #define AVRC_CMD_SPEC_INQ \ |
| 2 /* Check whether a target supports a particular \ |
| control command; all operands are included */ |
| #define AVRC_CMD_NOTIF 3 /* Notification of a change in a device's state */ |
| #define AVRC_CMD_GEN_INQ \ |
| 4 /* Check whether a target supports a particular \ |
| control command; operands are not included */ |
| |
| /* response type codes */ |
| #define AVRC_RSP_NOT_IMPL \ |
| 8 /* The target does not implement the command specified \ |
| by the opcode and operand, \ |
| or doesn't implement the specified subunit */ |
| #define AVRC_RSP_ACCEPT \ |
| 9 /* The target executed or is executing the command \ |
| */ |
| #define AVRC_RSP_REJ \ |
| 10 /* The target implements the command specified by the \ |
| opcode but cannot respond because the current state \ |
| of the target doesn't allow it */ |
| #define AVRC_RSP_IN_TRANS \ |
| 11 /* The target implements the status command but it is \ |
| in a state of transition; the status command may \ |
| be retried at a future time */ |
| #define AVRC_RSP_IMPL_STBL \ |
| 12 /* For specific inquiry or general inquiy commands, \ |
| the target implements the command; for status \ |
| commands, the target returns stable and includes \ |
| the status results */ |
| #define AVRC_RSP_CHANGED \ |
| 13 /* The response frame contains a notification that the \ |
| target device's state has changed */ |
| #define AVRC_RSP_INTERIM \ |
| 15 /* For control commands, the target has accepted the \ |
| request but cannot return information within 100 \ |
| milliseconds; for notify commands, the target accepted \ |
| the command, and will notify the controller of a change \ |
| of target state at a future time */ |
| |
| /* subunit type */ |
| #define AVRC_SUB_MONITOR 0x00 /* Monitor */ |
| #define AVRC_SUB_AUDIO 0x01 /* Audio */ |
| #define AVRC_SUB_PRINTER 0x02 /* Printer */ |
| #define AVRC_SUB_DISC 0x03 /* Disc */ |
| #define AVRC_SUB_TAPE 0x04 /* Tape recorder/player */ |
| #define AVRC_SUB_TUNER 0x05 /* Tuner */ |
| #define AVRC_SUB_CA 0x06 /* CA */ |
| #define AVRC_SUB_CAMERA 0x07 /* Camera */ |
| #define AVRC_SUB_PANEL 0x09 /* Panel */ |
| #define AVRC_SUB_BB 0x0A /* Bulletin Board */ |
| #define AVRC_SUB_CAM_STOR 0x0B /* Camera Storage */ |
| #define AVRC_SUB_VENDOR 0x1C /* Vendor unique */ |
| #define AVRC_SUB_EXT 0x1E /* Subunit type extended to next byte */ |
| #define AVRC_SUB_UNIT 0x1F /* Unit */ |
| |
| /* opcodes - defined by 1394ta */ |
| #define AVRC_OP_UNIT_INFO 0x30 /* Report unit information */ |
| #define AVRC_OP_SUB_INFO 0x31 /* Report subunit information */ |
| #define AVRC_OP_VENDOR 0x00 /* Vendor-dependent commands */ |
| #define AVRC_OP_PASS_THRU 0x7C /* panel subunit opcode */ |
| /* opcodes 80-9F and E0-FF are not used by 1394ta. Sneak one for browsing */ |
| #define AVRC_OP_BROWSE 0xFF /* Browsing */ |
| #define AVRC_OP_INVALID 0xFE /* invalid one */ |
| |
| /* Company ID's |
| */ |
| #define AVRC_CO_BLUETOOTH_SIG 0x00FFFFFF |
| #define AVRC_CO_WIDCOMM 0x00000361 |
| #define AVRC_CO_BROADCOM 0x00001018 |
| #define AVRC_CO_GOOGLE 0x00DAA119 |
| #define AVRC_CO_METADATA \ |
| 0x00001958 /* Unique COMPANY ID for Metadata messages */ |
| |
| /* State flag for Passthrough commands |
| */ |
| #define AVRC_STATE_PRESS 0 |
| #define AVRC_STATE_RELEASE 1 |
| |
| /* Operation ID list for Passthrough commands |
| */ |
| #define AVRC_ID_SELECT 0x00 /* select */ |
| #define AVRC_ID_UP 0x01 /* up */ |
| #define AVRC_ID_DOWN 0x02 /* down */ |
| #define AVRC_ID_LEFT 0x03 /* left */ |
| #define AVRC_ID_RIGHT 0x04 /* right */ |
| #define AVRC_ID_RIGHT_UP 0x05 /* right-up */ |
| #define AVRC_ID_RIGHT_DOWN 0x06 /* right-down */ |
| #define AVRC_ID_LEFT_UP 0x07 /* left-up */ |
| #define AVRC_ID_LEFT_DOWN 0x08 /* left-down */ |
| #define AVRC_ID_ROOT_MENU 0x09 /* root menu */ |
| #define AVRC_ID_SETUP_MENU 0x0A /* setup menu */ |
| #define AVRC_ID_CONT_MENU 0x0B /* contents menu */ |
| #define AVRC_ID_FAV_MENU 0x0C /* favorite menu */ |
| #define AVRC_ID_EXIT 0x0D /* exit */ |
| #define AVRC_ID_0 0x20 /* 0 */ |
| #define AVRC_ID_1 0x21 /* 1 */ |
| #define AVRC_ID_2 0x22 /* 2 */ |
| #define AVRC_ID_3 0x23 /* 3 */ |
| #define AVRC_ID_4 0x24 /* 4 */ |
| #define AVRC_ID_5 0x25 /* 5 */ |
| #define AVRC_ID_6 0x26 /* 6 */ |
| #define AVRC_ID_7 0x27 /* 7 */ |
| #define AVRC_ID_8 0x28 /* 8 */ |
| #define AVRC_ID_9 0x29 /* 9 */ |
| #define AVRC_ID_DOT 0x2A /* dot */ |
| #define AVRC_ID_ENTER 0x2B /* enter */ |
| #define AVRC_ID_CLEAR 0x2C /* clear */ |
| #define AVRC_ID_CHAN_UP 0x30 /* channel up */ |
| #define AVRC_ID_CHAN_DOWN 0x31 /* channel down */ |
| #define AVRC_ID_PREV_CHAN 0x32 /* previous channel */ |
| #define AVRC_ID_SOUND_SEL 0x33 /* sound select */ |
| #define AVRC_ID_INPUT_SEL 0x34 /* input select */ |
| #define AVRC_ID_DISP_INFO 0x35 /* display information */ |
| #define AVRC_ID_HELP 0x36 /* help */ |
| #define AVRC_ID_PAGE_UP 0x37 /* page up */ |
| #define AVRC_ID_PAGE_DOWN 0x38 /* page down */ |
| #define AVRC_ID_POWER 0x40 /* power */ |
| #define AVRC_ID_VOL_UP 0x41 /* volume up */ |
| #define AVRC_ID_VOL_DOWN 0x42 /* volume down */ |
| #define AVRC_ID_MUTE 0x43 /* mute */ |
| #define AVRC_ID_PLAY 0x44 /* play */ |
| #define AVRC_ID_STOP 0x45 /* stop */ |
| #define AVRC_ID_PAUSE 0x46 /* pause */ |
| #define AVRC_ID_RECORD 0x47 /* record */ |
| #define AVRC_ID_REWIND 0x48 /* rewind */ |
| #define AVRC_ID_FAST_FOR 0x49 /* fast forward */ |
| #define AVRC_ID_EJECT 0x4A /* eject */ |
| #define AVRC_ID_FORWARD 0x4B /* forward */ |
| #define AVRC_ID_BACKWARD 0x4C /* backward */ |
| #define AVRC_ID_ANGLE 0x50 /* angle */ |
| #define AVRC_ID_SUBPICT 0x51 /* subpicture */ |
| #define AVRC_ID_F1 0x71 /* F1 */ |
| #define AVRC_ID_F2 0x72 /* F2 */ |
| #define AVRC_ID_F3 0x73 /* F3 */ |
| #define AVRC_ID_F4 0x74 /* F4 */ |
| #define AVRC_ID_F5 0x75 /* F5 */ |
| #define AVRC_ID_VENDOR 0x7E /* vendor unique */ |
| #define AVRC_KEYPRESSED_RELEASE 0x80 |
| |
| /***************************************************************************** |
| * Metadata transfer definitions |
| ****************************************************************************/ |
| |
| /* Define the Metadata Packet types |
| */ |
| #define AVRC_PKT_SINGLE 0 |
| #define AVRC_PKT_START 1 |
| #define AVRC_PKT_CONTINUE 2 |
| #define AVRC_PKT_END 3 |
| #define AVRC_PKT_TYPE_MASK 3 |
| |
| /* Define the PDUs carried in the vendor dependant data |
| */ |
| #define AVRC_PDU_GET_CAPABILITIES 0x10 |
| #define AVRC_PDU_LIST_PLAYER_APP_ATTR 0x11 |
| #define AVRC_PDU_LIST_PLAYER_APP_VALUES 0x12 |
| #define AVRC_PDU_GET_CUR_PLAYER_APP_VALUE 0x13 |
| #define AVRC_PDU_SET_PLAYER_APP_VALUE 0x14 |
| #define AVRC_PDU_GET_PLAYER_APP_ATTR_TEXT 0x15 |
| #define AVRC_PDU_GET_PLAYER_APP_VALUE_TEXT 0x16 |
| #define AVRC_PDU_INFORM_DISPLAY_CHARSET 0x17 |
| #define AVRC_PDU_INFORM_BATTERY_STAT_OF_CT 0x18 |
| #define AVRC_PDU_GET_ELEMENT_ATTR 0x20 |
| #define AVRC_PDU_GET_PLAY_STATUS 0x30 |
| #define AVRC_PDU_REGISTER_NOTIFICATION 0x31 |
| #define AVRC_PDU_REQUEST_CONTINUATION_RSP 0x40 |
| #define AVRC_PDU_ABORT_CONTINUATION_RSP 0x41 |
| /* added in 1.4 */ |
| #define AVRC_PDU_SET_ABSOLUTE_VOLUME 0x50 |
| #define AVRC_PDU_SET_ADDRESSED_PLAYER 0x60 |
| #define AVRC_PDU_SET_BROWSED_PLAYER 0x70 |
| #define AVRC_PDU_GET_FOLDER_ITEMS 0x71 |
| #define AVRC_PDU_CHANGE_PATH 0x72 |
| #define AVRC_PDU_GET_ITEM_ATTRIBUTES 0x73 |
| #define AVRC_PDU_PLAY_ITEM 0x74 |
| /* Added in post 1.5 */ |
| #define AVRC_PDU_GET_TOTAL_NUM_OF_ITEMS 0x75 |
| #define AVRC_PDU_SEARCH 0x80 |
| #define AVRC_PDU_ADD_TO_NOW_PLAYING 0x90 |
| #define AVRC_PDU_GENERAL_REJECT 0xA0 |
| |
| /* Define the vendor unique id carried in the pass through data |
| */ |
| #define AVRC_PDU_NEXT_GROUP 0x00 |
| #define AVRC_PDU_PREV_GROUP 0x01 |
| /* The only pass through vendor unique commands defined by AVRC are the group |
| * navigation commands. |
| * The len for vendor unique data is 5 |
| */ |
| #define AVRC_PASS_THRU_GROUP_LEN 5 |
| |
| #define AVRC_PDU_INVALID 0xff |
| /* 6.15.3 error status code for general reject */ |
| /* Invalid command, sent if TG received a PDU that it did not understand. */ |
| #define AVRC_STS_BAD_CMD 0x00 |
| /* 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. */ |
| #define AVRC_STS_BAD_PARAM 0x01 |
| /* Specified parameter not found., sent if the parameter ID is understood, but |
| * content is wrong or corrupted. */ |
| #define AVRC_STS_NOT_FOUND 0x02 |
| /* Internal Error, sent if there are error conditions not covered by a more |
| * specific error code. */ |
| #define AVRC_STS_INTERNAL_ERR 0x03 |
| /* Operation completed without error. This is the status that should be |
| * returned if the operation was successful. */ |
| #define AVRC_STS_NO_ERROR 0x04 |
| /* UID Changed - The UIDs on the device have changed */ |
| #define AVRC_STS_UID_CHANGED 0x05 |
| /* #define AVRC_STS_GEN_ERROR 0x06 Unknown Error - now "reserved" */ |
| /* Invalid Direction - The Direction parameter is invalid - Change Path*/ |
| #define AVRC_STS_BAD_DIR 0x07 |
| /* Not a Directory - The UID provided does not refer to a folder item - |
| * Change Path */ |
| #define AVRC_STS_NOT_DIR 0x08 |
| /* Does Not Exist - The UID provided does not refer to any item - Change Path, |
| * PlayItem, AddToNowPlaying, GetItemAttributes */ |
| #define AVRC_STS_NOT_EXIST 0x09 |
| /* Invalid Scope - The scope parameter is invalid - GetFolderItems, PlayItem, |
| * AddToNowPlayer, GetItemAttributes */ |
| #define AVRC_STS_BAD_SCOPE 0x0a |
| /* Range Out of Bounds - The start of range provided is not valid |
| * GetFolderItems*/ |
| #define AVRC_STS_BAD_RANGE 0x0b |
| /* UID is a Directory - The UID provided refers to a directory, which cannot be |
| * handled by this media player - PlayItem, AddToNowPlaying */ |
| #define AVRC_STS_UID_IS_DIR 0x0c |
| /* Media in Use - The media is not able to be used for this operation at this |
| * time - PlayItem, AddToNowPlaying */ |
| #define AVRC_STS_IN_USE 0x0d |
| /* Now Playing List Full - No more items can be added to the Now Playing List - |
| * AddToNowPlaying*/ |
| #define AVRC_STS_NOW_LIST_FULL 0x0e |
| /* Search Not Supported - The Browsed Media Player does not support search - |
| * Search */ |
| #define AVRC_STS_SEARCH_NOT_SUP 0x0f |
| /* Search in Progress - A search operation is already in progress - Search*/ |
| #define AVRC_STS_SEARCH_BUSY 0x10 |
| /* Invalid Player Id - The specified Player Id does not refer to a valid player |
| * - SetAddressedPlayer, SetBrowsedPlayer*/ |
| #define AVRC_STS_BAD_PLAYER_ID 0x11 |
| /* Player Not Browsable - The Player Id supplied refers to a Media Player which |
| * does not support browsing - SetBrowsedPlayer */ |
| #define AVRC_STS_PLAYER_N_BR 0x12 |
| /* 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*/ |
| #define AVRC_STS_PLAYER_N_ADDR 0x13 |
| /* 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 */ |
| #define AVRC_STS_BAD_SEARCH_RES 0x14 |
| /* No available players ALL */ |
| #define AVRC_STS_NO_AVAL_PLAYER 0x15 |
| /* Addressed Player Changed - Register Notification */ |
| #define AVRC_STS_ADDR_PLAYER_CHG 0x16 |
| typedef uint8_t tAVRC_STS; |
| |
| /* Define the Capability IDs |
| */ |
| #define AVRC_CAP_COMPANY_ID 0x02 |
| #define AVRC_CAP_EVENTS_SUPPORTED 0x03 |
| #define AVRC_COMPANY_ID_LEN 3 |
| #define AVRC_CAPABILITY_OFFSET 2 |
| |
| /* Define the Player Application Settings IDs |
| */ |
| #define AVRC_PLAYER_SETTING_EQUALIZER 0x01 |
| #define AVRC_PLAYER_SETTING_REPEAT 0x02 |
| #define AVRC_PLAYER_SETTING_SHUFFLE 0x03 |
| #define AVRC_PLAYER_SETTING_SCAN 0x04 |
| #define AVRC_PLAYER_SETTING_LOW_MENU_EXT 0x80 |
| #define AVRC_PLAYER_SETTING_HIGH_MENU_EXT 0xff |
| |
| /* Define the possible values of the Player Application Settings |
| */ |
| #define AVRC_PLAYER_VAL_OFF 0x01 |
| #define AVRC_PLAYER_VAL_ON 0x02 |
| #define AVRC_PLAYER_VAL_SINGLE_REPEAT 0x02 |
| #define AVRC_PLAYER_VAL_ALL_REPEAT 0x03 |
| #define AVRC_PLAYER_VAL_GROUP_REPEAT 0x04 |
| #define AVRC_PLAYER_VAL_ALL_SHUFFLE 0x02 |
| #define AVRC_PLAYER_VAL_GROUP_SHUFFLE 0x03 |
| #define AVRC_PLAYER_VAL_ALL_SCAN 0x02 |
| #define AVRC_PLAYER_VAL_GROUP_SCAN 0x03 |
| |
| /* Define the possible values of Battery Status PDU |
| */ |
| #define AVRC_BATTERY_STATUS_NORMAL 0x00 |
| #define AVRC_BATTERY_STATUS_WARNING 0x01 |
| #define AVRC_BATTERY_STATUS_CRITICAL 0x02 |
| #define AVRC_BATTERY_STATUS_EXTERNAL 0x03 |
| #define AVRC_BATTERY_STATUS_FULL_CHARGE 0x04 |
| typedef uint8_t tAVRC_BATTERY_STATUS; |
| |
| /* Define character set */ |
| #define AVRC_CHAR_SET_SIZE 2 |
| |
| /* Define the Media Attribute IDs |
| */ |
| #define AVRC_MEDIA_ATTR_ID_TITLE 0x00000001 |
| #define AVRC_MEDIA_ATTR_ID_ARTIST 0x00000002 |
| #define AVRC_MEDIA_ATTR_ID_ALBUM 0x00000003 |
| #define AVRC_MEDIA_ATTR_ID_TRACK_NUM 0x00000004 |
| #define AVRC_MEDIA_ATTR_ID_NUM_TRACKS 0x00000005 |
| #define AVRC_MEDIA_ATTR_ID_GENRE 0x00000006 |
| #define AVRC_MEDIA_ATTR_ID_PLAYING_TIME 0x00000007 /* in miliseconds */ |
| #define AVRC_MAX_NUM_MEDIA_ATTR_ID 7 |
| |
| /* Define the possible values of play state |
| */ |
| #define AVRC_PLAYSTATE_RESP_MSG_SIZE 9 |
| #define AVRC_PLAYSTATE_STOPPED 0x00 /* Stopped */ |
| #define AVRC_PLAYSTATE_PLAYING 0x01 /* Playing */ |
| #define AVRC_PLAYSTATE_PAUSED 0x02 /* Paused */ |
| #define AVRC_PLAYSTATE_FWD_SEEK 0x03 /* Fwd Seek*/ |
| #define AVRC_PLAYSTATE_REV_SEEK 0x04 /* Rev Seek*/ |
| #define AVRC_PLAYSTATE_ERROR 0xFF /* Error */ |
| typedef uint8_t tAVRC_PLAYSTATE; |
| |
| /* Define the events that can be registered for notifications |
| */ |
| #define AVRC_EVT_PLAY_STATUS_CHANGE 0x01 |
| #define AVRC_EVT_TRACK_CHANGE 0x02 |
| #define AVRC_EVT_TRACK_REACHED_END 0x03 |
| #define AVRC_EVT_TRACK_REACHED_START 0x04 |
| #define AVRC_EVT_PLAY_POS_CHANGED 0x05 |
| #define AVRC_EVT_BATTERY_STATUS_CHANGE 0x06 |
| #define AVRC_EVT_SYSTEM_STATUS_CHANGE 0x07 |
| #define AVRC_EVT_APP_SETTING_CHANGE 0x08 |
| /* added in AVRCP 1.4 */ |
| #define AVRC_EVT_NOW_PLAYING_CHANGE 0x09 |
| #define AVRC_EVT_AVAL_PLAYERS_CHANGE 0x0a |
| #define AVRC_EVT_ADDR_PLAYER_CHANGE 0x0b |
| #define AVRC_EVT_UIDS_CHANGE 0x0c |
| #define AVRC_EVT_VOLUME_CHANGE 0x0d |
| |
| /* the number of events that can be registered for notifications */ |
| #define AVRC_NUM_NOTIF_EVENTS 0x0d |
| |
| #define AVRC_EVT_MSG_LEN_1 0x01 |
| #define AVRC_EVT_MSG_LEN_2 0x02 |
| #define AVRC_EVT_MSG_LEN_5 0x05 |
| #define AVRC_EVT_MSG_LEN_9 0x09 |
| |
| #define AVRC_MAX_VOLUME 0x7F |
| |
| /* Define the possible values of system status |
| */ |
| #define AVRC_SYSTEMSTATE_PWR_ON 0x00 |
| #define AVRC_SYSTEMSTATE_PWR_OFF 0x01 |
| #define AVRC_SYSTEMSTATE_PWR_UNPLUGGED 0x02 |
| typedef uint8_t tAVRC_SYSTEMSTATE; |
| |
| /* the frequently used character set ids */ |
| #define AVRC_CHARSET_ID_ASCII ((uint16_t)0x0003) /* ASCII */ |
| #define AVRC_CHARSET_ID_UTF8 ((uint16_t)0x006a) /* UTF-8 */ |
| #define AVRC_CHARSET_ID_UTF16 ((uint16_t)0x03f7) /* 1015 */ |
| #define AVRC_CHARSET_ID_UTF32 ((uint16_t)0x03f9) /* 1017 */ |
| |
| /***************************************************************************** |
| * Advanced Control |
| ****************************************************************************/ |
| #define AVRC_ITEM_PLAYER 0x01 |
| #define AVRC_ITEM_FOLDER 0x02 |
| #define AVRC_ITEM_MEDIA 0x03 |
| |
| /* Media Player Item - Contains all available media players */ |
| #define AVRC_SCOPE_PLAYER_LIST 0x00 |
| /* Folder Item, Media Element Item - The virtual filesystem containing the media |
| * content of the browsed player */ |
| #define AVRC_SCOPE_FILE_SYSTEM 0x01 |
| /* Media Element Item The results of a search operation on the browsed player |
| */ |
| #define AVRC_SCOPE_SEARCH 0x02 |
| /* Media Element Item The Now Playing list (or queue) of the addressed player |
| */ |
| #define AVRC_SCOPE_NOW_PLAYING 0x03 |
| |
| #define AVRC_FOLDER_ITEM_COUNT_NONE 0xFF |
| |
| /* folder type */ |
| #define AVRC_FOLDER_TYPE_MIXED 0x00 |
| #define AVRC_FOLDER_TYPE_TITLES 0x01 |
| #define AVRC_FOLDER_TYPE_ALNUMS 0x02 |
| #define AVRC_FOLDER_TYPE_ARTISTS 0x03 |
| #define AVRC_FOLDER_TYPE_GENRES 0x04 |
| #define AVRC_FOLDER_TYPE_PLAYLISTS 0x05 |
| #define AVRC_FOLDER_TYPE_YEARS 0x06 |
| |
| /* major player type */ |
| #define AVRC_MJ_TYPE_AUDIO 0x01 /* Audio */ |
| #define AVRC_MJ_TYPE_VIDEO 0x02 /* Video */ |
| #define AVRC_MJ_TYPE_BC_AUDIO 0x04 /* Broadcasting Audio */ |
| #define AVRC_MJ_TYPE_BC_VIDEO 0x08 /* Broadcasting Video */ |
| #define AVRC_MJ_TYPE_INVALID 0xF0 |
| |
| /* player sub type */ |
| #define AVRC_SUB_TYPE_NONE 0x00 |
| #define AVRC_SUB_TYPE_AUDIO_BOOK 0x01 /* Audio Book */ |
| #define AVRC_SUB_TYPE_PODCAST 0x02 /* Podcast */ |
| #define AVRC_SUB_TYPE_INVALID 0xFC |
| |
| /* media item - media type */ |
| #define AVRC_MEDIA_TYPE_AUDIO 0x00 |
| #define AVRC_MEDIA_TYPE_VIDEO 0x01 |
| |
| #define AVRC_DIR_UP 0x00 /* Folder Up */ |
| #define AVRC_DIR_DOWN 0x01 /* Folder Down */ |
| |
| #define AVRC_UID_SIZE 8 |
| typedef uint8_t tAVRC_UID[AVRC_UID_SIZE]; |
| |
| /***************************************************************************** |
| * player attribute - supported features |
| ****************************************************************************/ |
| #define AVRC_PF_SELECT_BIT_NO 0 |
| #define AVRC_PF_SELECT_MASK 0x01 |
| #define AVRC_PF_SELECT_OFF 0 |
| #define AVRC_PF_SELECT_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SELECT_OFF] & AVRC_PF_SELECT_MASK) |
| |
| #define AVRC_PF_UP_BIT_NO 1 |
| #define AVRC_PF_UP_MASK 0x02 |
| #define AVRC_PF_UP_OFF 0 |
| #define AVRC_PF_UP_SUPPORTED(x) ((x)[AVRC_PF_UP_OFF] & AVRC_PF_UP_MASK) |
| |
| #define AVRC_PF_DOWN_BIT_NO 2 |
| #define AVRC_PF_DOWN_MASK 0x04 |
| #define AVRC_PF_DOWN_OFF 0 |
| #define AVRC_PF_DOWN_SUPPORTED(x) ((x)[AVRC_PF_DOWN_OFF] & AVRC_PF_DOWN_MASK) |
| |
| #define AVRC_PF_LEFT_BIT_NO 3 |
| #define AVRC_PF_LEFT_MASK 0x08 |
| #define AVRC_PF_LEFT_OFF 0 |
| #define AVRC_PF_LEFT_SUPPORTED(x) ((x)[AVRC_PF_LEFT_OFF] & AVRC_PF_LEFT_MASK) |
| |
| #define AVRC_PF_RIGHT_BIT_NO 4 |
| #define AVRC_PF_RIGHT_MASK 0x10 |
| #define AVRC_PF_RIGHT_OFF 0 |
| #define AVRC_PF_RIGHT_SUPPORTED(x) ((x)[AVRC_PF_RIGHT_OFF] & AVRC_PF_RIGHT_MASK) |
| |
| #define AVRC_PF_RIGHTUP_BIT_NO 5 |
| #define AVRC_PF_RIGHTUP_MASK 0x20 |
| #define AVRC_PF_RIGHTUP_OFF 0 |
| #define AVRC_PF_RIGHTUP_SUPPORTED(x) \ |
| ((x)[AVRC_PF_RIGHTUP_OFF] & AVRC_PF_RIGHTUP_MASK) |
| |
| #define AVRC_PF_RIGHTDOWN_BIT_NO 6 |
| #define AVRC_PF_RIGHTDOWN_MASK 0x40 |
| #define AVRC_PF_RIGHTDOWN_OFF 0 |
| #define AVRC_PF_RIGHTDOWN_SUPPORTED(x) \ |
| ((x)[AVRC_PF_RIGHTDOWN_OFF] & AVRC_PF_RIGHTDOWN_MASK) |
| |
| #define AVRC_PF_LEFTUP_BIT_NO 7 |
| #define AVRC_PF_LEFTUP_MASK 0x80 |
| #define AVRC_PF_LEFTUP_OFF 0 |
| #define AVRC_PF_LEFTUP_SUPPORTED(x) \ |
| ((x)[AVRC_PF_LEFTUP_OFF] & AVRC_PF_LEFTUP_MASK) |
| |
| #define AVRC_PF_LEFTDOWN_BIT_NO 8 |
| #define AVRC_PF_LEFTDOWN_MASK 0x01 |
| #define AVRC_PF_LEFTDOWN_OFF 1 |
| #define AVRC_PF_LEFTDOWN_SUPPORTED(x) \ |
| ((x)[AVRC_PF_LEFTDOWN_OFF] & AVRC_PF_LEFTDOWN_MASK) |
| |
| #define AVRC_PF_ROOT_MENU_BIT_NO 9 |
| #define AVRC_PF_ROOT_MENU_MASK 0x02 |
| #define AVRC_PF_ROOT_MENU_OFF 1 |
| #define AVRC_PF_ROOT_MENU_SUPPORTED(x) \ |
| ((x)[AVRC_PF_ROOT_MENU_OFF] & AVRC_PF_ROOT_MENU_MASK) |
| |
| #define AVRC_PF_SETUP_MENU_BIT_NO 10 |
| #define AVRC_PF_SETUP_MENU_MASK 0x04 |
| #define AVRC_PF_SETUP_MENU_OFF 1 |
| #define AVRC_PF_SETUP_MENU_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SETUP_MENU_OFF] & AVRC_PF_SETUP_MENU_MASK) |
| |
| #define AVRC_PF_CONTENTS_MENU_BIT_NO 11 |
| #define AVRC_PF_CONTENTS_MENU_MASK 0x08 |
| #define AVRC_PF_CONTENTS_MENU_OFF 1 |
| #define AVRC_PF_CONTENTS_MENU_SUPPORTED(x) \ |
| ((x)[AVRC_PF_CONTENTS_MENU_OFF] & AVRC_PF_CONTENTS_MENU_MASK) |
| |
| #define AVRC_PF_FAVORITE_MENU_BIT_NO 12 |
| #define AVRC_PF_FAVORITE_MENU_MASK 0x10 |
| #define AVRC_PF_FAVORITE_MENU_OFF 1 |
| #define AVRC_PF_FAVORITE_MENU_SUPPORTED(x) \ |
| ((x)[AVRC_PF_FAVORITE_MENU_OFF] & AVRC_PF_FAVORITE_MENU_MASK) |
| |
| #define AVRC_PF_EXIT_BIT_NO 13 |
| #define AVRC_PF_EXIT_MASK 0x20 |
| #define AVRC_PF_EXIT_OFF 1 |
| #define AVRC_PF_EXIT_SUPPORTED(x) ((x)[AVRC_PF_EXIT_OFF] & AVRC_PF_EXIT_MASK) |
| |
| #define AVRC_PF_0_BIT_NO 14 |
| #define AVRC_PF_0_MASK 0x40 |
| #define AVRC_PF_0_OFF 1 |
| #define AVRC_PF_0_SUPPORTED(x) ((x)[AVRC_PF_0_OFF] & AVRC_PF_0_MASK) |
| |
| #define AVRC_PF_1_BIT_NO 15 |
| #define AVRC_PF_1_MASK 0x80 |
| #define AVRC_PF_1_OFF 1 |
| #define AVRC_PF_1_SUPPORTED(x) ((x)[AVRC_PF_1_OFF] & AVRC_PF_1_MASK) |
| |
| #define AVRC_PF_2_BIT_NO 16 |
| #define AVRC_PF_2_MASK 0x01 |
| #define AVRC_PF_2_OFF 2 |
| #define AVRC_PF_2_SUPPORTED(x) ((x)[AVRC_PF_2_OFF] & AVRC_PF_2_MASK) |
| |
| #define AVRC_PF_3_BIT_NO 17 |
| #define AVRC_PF_3_MASK 0x02 |
| #define AVRC_PF_3_OFF 2 |
| #define AVRC_PF_3_SUPPORTED(x) ((x)[AVRC_PF_3_OFF] & AVRC_PF_3_MASK) |
| |
| #define AVRC_PF_4_BIT_NO 18 |
| #define AVRC_PF_4_MASK 0x04 |
| #define AVRC_PF_4_OFF 2 |
| #define AVRC_PF_4_SUPPORTED(x) ((x)[AVRC_PF_4_OFF] & AVRC_PF_4_MASK) |
| |
| #define AVRC_PF_5_BIT_NO 19 |
| #define AVRC_PF_5_MASK 0x08 |
| #define AVRC_PF_5_OFF 2 |
| #define AVRC_PF_5_SUPPORTED(x) ((x)[AVRC_PF_5_OFF] & AVRC_PF_5_MASK) |
| |
| #define AVRC_PF_6_BIT_NO 20 |
| #define AVRC_PF_6_MASK 0x10 |
| #define AVRC_PF_6_OFF 2 |
| #define AVRC_PF_6_SUPPORTED(x) ((x)[AVRC_PF_6_OFF] & AVRC_PF_6_MASK) |
| |
| #define AVRC_PF_7_BIT_NO 21 |
| #define AVRC_PF_7_MASK 0x20 |
| #define AVRC_PF_7_OFF 2 |
| #define AVRC_PF_7_SUPPORTED(x) ((x)[AVRC_PF_7_OFF] & AVRC_PF_7_MASK) |
| |
| #define AVRC_PF_8_BIT_NO 22 |
| #define AVRC_PF_8_MASK 0x40 |
| #define AVRC_PF_8_OFF 2 |
| #define AVRC_PF_8_SUPPORTED(x) ((x)[AVRC_PF_8_OFF] & AVRC_PF_8_MASK) |
| |
| #define AVRC_PF_9_BIT_NO 23 |
| #define AVRC_PF_9_MASK 0x80 |
| #define AVRC_PF_9_OFF 2 |
| #define AVRC_PF_9_SUPPORTED(x) ((x)[AVRC_PF_9_OFF] & AVRC_PF_9_MASK) |
| |
| #define AVRC_PF_DOT_BIT_NO 24 |
| #define AVRC_PF_DOT_MASK 0x01 |
| #define AVRC_PF_DOT_OFF 3 |
| #define AVRC_PF_DOT_SUPPORTED(x) ((x)[AVRC_PF_DOT_OFF] & AVRC_PF_DOT_MASK) |
| |
| #define AVRC_PF_ENTER_BIT_NO 25 |
| #define AVRC_PF_ENTER_MASK 0x02 |
| #define AVRC_PF_ENTER_OFF 3 |
| #define AVRC_PF_ENTER_SUPPORTED(x) ((x)[AVRC_PF_ENTER_OFF] & AVRC_PF_ENTER_MASK) |
| |
| #define AVRC_PF_CLEAR_BIT_NO 26 |
| #define AVRC_PF_CLEAR_MASK 0x04 |
| #define AVRC_PF_CLEAR_OFF 3 |
| #define AVRC_PF_CLEAR_SUPPORTED(x) ((x)[AVRC_PF_CLEAR_OFF] & AVRC_PF_CLEAR_MASK) |
| |
| #define AVRC_PF_CHNL_UP_BIT_NO 27 |
| #define AVRC_PF_CHNL_UP_MASK 0x08 |
| #define AVRC_PF_CHNL_UP_OFF 3 |
| #define AVRC_PF_CHNL_UP_SUPPORTED(x) \ |
| ((x)[AVRC_PF_CHNL_UP_OFF] & AVRC_PF_CHNL_UP_MASK) |
| |
| #define AVRC_PF_CHNL_DOWN_BIT_NO 28 |
| #define AVRC_PF_CHNL_DOWN_MASK 0x10 |
| #define AVRC_PF_CHNL_DOWN_OFF 3 |
| #define AVRC_PF_CHNL_DOWN_SUPPORTED(x) \ |
| ((x)[AVRC_PF_CHNL_DOWN_OFF] & AVRC_PF_CHNL_DOWN_MASK) |
| |
| #define AVRC_PF_PREV_CHNL_BIT_NO 29 |
| #define AVRC_PF_PREV_CHNL_MASK 0x20 |
| #define AVRC_PF_PREV_CHNL_OFF 3 |
| #define AVRC_PF_PREV_CHNL_SUPPORTED(x) \ |
| ((x)[AVRC_PF_PREV_CHNL_OFF] & AVRC_PF_PREV_CHNL_MASK) |
| |
| #define AVRC_PF_SOUND_SEL_BIT_NO 30 |
| #define AVRC_PF_SOUND_SEL_MASK 0x40 |
| #define AVRC_PF_SOUND_SEL_OFF 3 |
| #define AVRC_PF_SOUND_SEL_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SOUND_SEL_OFF] & AVRC_PF_SOUND_SEL_MASK) |
| |
| #define AVRC_PF_INPUT_SEL_BIT_NO 31 |
| #define AVRC_PF_INPUT_SEL_MASK 0x80 |
| #define AVRC_PF_INPUT_SEL_OFF 3 |
| #define AVRC_PF_INPUT_SEL_SUPPORTED(x) \ |
| ((x)[AVRC_PF_INPUT_SEL_OFF] & AVRC_PF_INPUT_SEL_MASK) |
| |
| #define AVRC_PF_DISP_INFO_BIT_NO 32 |
| #define AVRC_PF_DISP_INFO_MASK 0x01 |
| #define AVRC_PF_DISP_INFO_OFF 4 |
| #define AVRC_PF_DISP_INFO_SUPPORTED(x) \ |
| ((x)[AVRC_PF_DISP_INFO_OFF] & AVRC_PF_DISP_INFO_MASK) |
| |
| #define AVRC_PF_HELP_BIT_NO 33 |
| #define AVRC_PF_HELP_MASK 0x02 |
| #define AVRC_PF_HELP_OFF 4 |
| #define AVRC_PF_HELP_SUPPORTED(x) ((x)[AVRC_PF_HELP_OFF] & AVRC_PF_HELP_MASK) |
| |
| #define AVRC_PF_PAGE_UP_BIT_NO 34 |
| #define AVRC_PF_PAGE_UP_MASK 0x04 |
| #define AVRC_PF_PAGE_UP_OFF 4 |
| #define AVRC_PF_PAGE_UP_SUPPORTED(x) \ |
| ((x)[AVRC_PF_PAGE_UP_OFF] & AVRC_PF_PAGE_UP_MASK) |
| |
| #define AVRC_PF_PAGE_DOWN_BIT_NO 35 |
| #define AVRC_PF_PAGE_DOWN_MASK 0x08 |
| #define AVRC_PF_PAGE_DOWN_OFF 4 |
| #define AVRC_PF_PAGE_DOWN_SUPPORTED(x) \ |
| ((x)[AVRC_PF_PAGE_DOWN_OFF] & AVRC_PF_PAGE_DOWN_MASK) |
| |
| #define AVRC_PF_POWER_BIT_NO 36 |
| #define AVRC_PF_POWER_MASK 0x10 |
| #define AVRC_PF_POWER_OFF 4 |
| #define AVRC_PF_POWER_SUPPORTED(x) ((x)[AVRC_PF_POWER_OFF] & AVRC_PF_POWER_MASK) |
| |
| #define AVRC_PF_VOL_UP_BIT_NO 37 |
| #define AVRC_PF_VOL_UP_MASK 0x20 |
| #define AVRC_PF_VOL_UP_OFF 4 |
| #define AVRC_PF_VOL_UP_SUPPORTED(x) \ |
| ((x)[AVRC_PF_VOL_UP_OFF] & AVRC_PF_VOL_UP_MASK) |
| |
| #define AVRC_PF_VOL_DOWN_BIT_NO 38 |
| #define AVRC_PF_VOL_DOWN_MASK 0x40 |
| #define AVRC_PF_VOL_DOWN_OFF 4 |
| #define AVRC_PF_VOL_DOWN_SUPPORTED(x) \ |
| ((x)[AVRC_PF_VOL_DOWN_OFF] & AVRC_PF_VOL_DOWN_MASK) |
| |
| #define AVRC_PF_MUTE_BIT_NO 39 |
| #define AVRC_PF_MUTE_MASK 0x80 |
| #define AVRC_PF_MUTE_OFF 4 |
| #define AVRC_PF_MUTE_SUPPORTED(x) ((x)[AVRC_PF_MUTE_OFF] & AVRC_PF_MUTE_MASK) |
| |
| #define AVRC_PF_PLAY_BIT_NO 40 |
| #define AVRC_PF_PLAY_MASK 0x01 |
| #define AVRC_PF_PLAY_OFF 5 |
| #define AVRC_PF_PLAY_SUPPORTED(x) ((x)[AVRC_PF_PLAY_OFF] & AVRC_PF_PLAY_MASK) |
| |
| #define AVRC_PF_STOP_BIT_NO 41 |
| #define AVRC_PF_STOP_MASK 0x02 |
| #define AVRC_PF_STOP_OFF 5 |
| #define AVRC_PF_STOP_SUPPORTED(x) ((x)[AVRC_PF_STOP_OFF] & AVRC_PF_STOP_MASK) |
| |
| #define AVRC_PF_PAUSE_BIT_NO 42 |
| #define AVRC_PF_PAUSE_MASK 0x04 |
| #define AVRC_PF_PAUSE_OFF 5 |
| #define AVRC_PF_PAUSE_SUPPORTED(x) ((x)[AVRC_PF_PAUSE_OFF] & AVRC_PF_PAUSE_MASK) |
| |
| #define AVRC_PF_RECORD_BIT_NO 43 |
| #define AVRC_PF_RECORD_MASK 0x08 |
| #define AVRC_PF_RECORD_OFF 5 |
| #define AVRC_PF_RECORD_SUPPORTED(x) \ |
| ((x)[AVRC_PF_RECORD_OFF] & AVRC_PF_RECORD_MASK) |
| |
| #define AVRC_PF_REWIND_BIT_NO 44 |
| #define AVRC_PF_REWIND_MASK 0x10 |
| #define AVRC_PF_REWIND_OFF 5 |
| #define AVRC_PF_REWIND_SUPPORTED(x) \ |
| ((x)[AVRC_PF_REWIND_OFF] & AVRC_PF_REWIND_MASK) |
| |
| #define AVRC_PF_FAST_FWD_BIT_NO 45 |
| #define AVRC_PF_FAST_FWD_MASK 0x20 |
| #define AVRC_PF_FAST_FWD_OFF 5 |
| #define AVRC_PF_FAST_FWD_SUPPORTED(x) \ |
| ((x)[AVRC_PF_FAST_FWD_OFF] & AVRC_PF_FAST_FWD_MASK) |
| |
| #define AVRC_PF_EJECT_BIT_NO 46 |
| #define AVRC_PF_EJECT_MASK 0x40 |
| #define AVRC_PF_EJECT_OFF 5 |
| #define AVRC_PF_EJECT_SUPPORTED(x) ((x)[AVRC_PF_EJECT_OFF] & AVRC_PF_EJECT_MASK) |
| |
| #define AVRC_PF_FORWARD_BIT_NO 47 |
| #define AVRC_PF_FORWARD_MASK 0x80 |
| #define AVRC_PF_FORWARD_OFF 5 |
| #define AVRC_PF_FORWARD_SUPPORTED(x) \ |
| ((x)[AVRC_PF_FORWARD_OFF] & AVRC_PF_FORWARD_MASK) |
| |
| #define AVRC_PF_BACKWARD_BIT_NO 48 |
| #define AVRC_PF_BACKWARD_MASK 0x01 |
| #define AVRC_PF_BACKWARD_OFF 6 |
| #define AVRC_PF_BACKWARD_SUPPORTED(x) \ |
| ((x)[AVRC_PF_BACKWARD_OFF] & AVRC_PF_BACKWARD_MASK) |
| |
| #define AVRC_PF_ANGLE_BIT_NO 49 |
| #define AVRC_PF_ANGLE_MASK 0x02 |
| #define AVRC_PF_ANGLE_OFF 6 |
| #define AVRC_PF_ANGLE_SUPPORTED(x) ((x)[AVRC_PF_ANGLE_OFF] & AVRC_PF_ANGLE_MASK) |
| |
| #define AVRC_PF_SUBPICTURE_BIT_NO 50 |
| #define AVRC_PF_SUBPICTURE_MASK 0x04 |
| #define AVRC_PF_SUBPICTURE_OFF 6 |
| #define AVRC_PF_SUBPICTURE_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SUBPICTURE_OFF] & AVRC_PF_SUBPICTURE_MASK) |
| |
| #define AVRC_PF_F1_BIT_NO 51 |
| #define AVRC_PF_F1_MASK 0x08 |
| #define AVRC_PF_F1_OFF 6 |
| #define AVRC_PF_F1_SUPPORTED(x) ((x)[AVRC_PF_F1_OFF] & AVRC_PF_F1_MASK) |
| |
| #define AVRC_PF_F2_BIT_NO 52 |
| #define AVRC_PF_F2_MASK 0x10 |
| #define AVRC_PF_F2_OFF 6 |
| #define AVRC_PF_F2_SUPPORTED(x) ((x)[AVRC_PF_F2_OFF] & AVRC_PF_F2_MASK) |
| |
| #define AVRC_PF_F3_BIT_NO 53 |
| #define AVRC_PF_F3_MASK 0x20 |
| #define AVRC_PF_F3_OFF 6 |
| #define AVRC_PF_F3_SUPPORTED(x) ((x)[AVRC_PF_F3_OFF] & AVRC_PF_F3_MASK) |
| |
| #define AVRC_PF_F4_BIT_NO 54 |
| #define AVRC_PF_F4_MASK 0x40 |
| #define AVRC_PF_F4_OFF 6 |
| #define AVRC_PF_F4_SUPPORTED(x) ((x)[AVRC_PF_F4_OFF] & AVRC_PF_F4_MASK) |
| |
| #define AVRC_PF_F5_BIT_NO 55 |
| #define AVRC_PF_F5_MASK 0x80 |
| #define AVRC_PF_F5_OFF 6 |
| #define AVRC_PF_F5_SUPPORTED(x) ((x)[AVRC_PF_F5_OFF] & AVRC_PF_F5_MASK) |
| |
| /* Vendor unique. This PASSTHROUGH command is supported. */ |
| #define AVRC_PF_VENDOR_BIT_NO 56 |
| #define AVRC_PF_VENDOR_MASK 0x01 |
| #define AVRC_PF_VENDOR_OFF 7 |
| #define AVRC_PF_VENDOR_SUPPORTED(x) \ |
| ((x)[AVRC_PF_VENDOR_OFF] & AVRC_PF_VENDOR_MASK) |
| |
| /* Basic Group Navigation. This overrules the SDP entry as it is set per |
| * player.7 */ |
| #define AVRC_PF_GROUP_NAVI_BIT_NO 57 |
| #define AVRC_PF_GROUP_NAVI_MASK 0x02 |
| #define AVRC_PF_GROUP_NAVI_OFF 7 |
| #define AVRC_PF_GROUP_NAVI_SUPPORTED(x) \ |
| ((x)[AVRC_PF_GROUP_NAVI_OFF] & AVRC_PF_GROUP_NAVI_MASK) |
| |
| /* Advanced Control Player. This bit is set if the player supports at least |
| * AVRCP 1.4. */ |
| #define AVRC_PF_ADV_CTRL_BIT_NO 58 |
| #define AVRC_PF_ADV_CTRL_MASK 0x04 |
| #define AVRC_PF_ADV_CTRL_OFF 7 |
| #define AVRC_PF_ADV_CTRL_SUPPORTED(x) \ |
| ((x)[AVRC_PF_ADV_CTRL_OFF] & AVRC_PF_ADV_CTRL_MASK) |
| |
| /* Browsing. This bit is set if the player supports browsing. */ |
| #define AVRC_PF_BROWSE_BIT_NO 59 |
| #define AVRC_PF_BROWSE_MASK 0x08 |
| #define AVRC_PF_BROWSE_OFF 7 |
| #define AVRC_PF_BROWSE_SUPPORTED(x) \ |
| ((x)[AVRC_PF_BROWSE_OFF] & AVRC_PF_BROWSE_MASK) |
| |
| /* Searching. This bit is set if the player supports searching. */ |
| #define AVRC_PF_SEARCH_BIT_NO 60 |
| #define AVRC_PF_SEARCH_MASK 0x10 |
| #define AVRC_PF_SEARCH_OFF 7 |
| #define AVRC_PF_SEARCH_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SEARCH_OFF] & AVRC_PF_SEARCH_MASK) |
| |
| /* AddToNowPlaying. This bit is set if the player supports the AddToNowPlaying |
| * command. */ |
| #define AVRC_PF_ADD2NOWPLAY_BIT_NO 61 |
| #define AVRC_PF_ADD2NOWPLAY_MASK 0x20 |
| #define AVRC_PF_ADD2NOWPLAY_OFF 7 |
| #define AVRC_PF_ADD2NOWPLAY_SUPPORTED(x) \ |
| ((x)[AVRC_PF_ADD2NOWPLAY_OFF] & AVRC_PF_ADD2NOWPLAY_MASK) |
| |
| /* UIDs unique in player browse tree. This bit is set if the player is able to |
| * maintain unique UIDs across the player browse tree. */ |
| #define AVRC_PF_UID_UNIQUE_BIT_NO 62 |
| #define AVRC_PF_UID_UNIQUE_MASK 0x40 |
| #define AVRC_PF_UID_UNIQUE_OFF 7 |
| #define AVRC_PF_UID_UNIQUE_SUPPORTED(x) \ |
| ((x)[AVRC_PF_UID_UNIQUE_OFF] & AVRC_PF_UID_UNIQUE_MASK) |
| |
| /* OnlyBrowsableWhenAddressed. This bit is set if the player is only able to be |
| * browsed when it is set as the Addressed Player. */ |
| #define AVRC_PF_BR_WH_ADDR_BIT_NO 63 |
| #define AVRC_PF_BR_WH_ADDR_MASK 0x80 |
| #define AVRC_PF_BR_WH_ADDR_OFF 7 |
| #define AVRC_PF_BR_WH_ADDR_SUPPORTED(x) \ |
| ((x)[AVRC_PF_BR_WH_ADDR_OFF] & AVRC_PF_BR_WH_ADDR_MASK) |
| |
| /* OnlySearchableWhenAddressed. This bit is set if the player is only able to |
| * be searched when it is set as the Addressed player. */ |
| #define AVRC_PF_SEARCH_WH_ADDR_BIT_NO 64 |
| #define AVRC_PF_SEARCH_WH_ADDR_MASK 0x01 |
| #define AVRC_PF_SEARCH_WH_ADDR_OFF 8 |
| #define AVRC_PF_SEARCH_WH_ADDR_SUPPORTED(x) \ |
| ((x)[AVRC_PF_SEARCH_WH_ADDR_OFF] & AVRC_PF_SEARCH_WH_ADDR_MASK) |
| |
| /* 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 */ |
| #define AVRC_PF_NOW_PLAY_BIT_NO 65 |
| #define AVRC_PF_NOW_PLAY_MASK 0x02 |
| #define AVRC_PF_NOW_PLAY_OFF 8 |
| #define AVRC_PF_NOW_PLAY_SUPPORTED(x) \ |
| ((x)[AVRC_PF_NOW_PLAY_OFF] & AVRC_PF_NOW_PLAY_MASK) |
| |
| /* UIDPersistency. This bit is set if the Player is able to persist UID values |
| * between AVRCP Browse Reconnect */ |
| #define AVRC_PF_UID_PERSIST_BIT_NO 66 |
| #define AVRC_PF_UID_PERSIST_MASK 0x04 |
| #define AVRC_PF_UID_PERSIST_OFF 8 |
| #define AVRC_PF_UID_PERSIST_SUPPORTED(x) \ |
| ((x)[AVRC_PF_UID_PERSIST_OFF] & AVRC_PF_UID_PERSIST_MASK) |
| |
| /* NumberOfItems. This bit is set if player supports the GetTotalNumberOfItems |
| * browsing command. */ |
| #define AVRC_PF_GET_NUM_OF_ITEMS_BIT_NO 67 |
| #define AVRC_PF_GET_NUM_OF_ITEMS_MASK 0x08 |
| #define AVRC_PF_GET_NUM_OF_ITEMS_OFF 8 |
| #define AVRC_PF_GET_NUM_OF_ITEMS_SUPPORTED(x) \ |
| ((x)[AVRC_PF_GET_NUM_OF_ITEMS_OFF] & AVRC_PF_GET_NUM_OF_ITEMS_MASK) |
| |
| /***************************************************************************** |
| * data type definitions |
| ****************************************************************************/ |
| |
| /* |
| This structure contains the header parameters of an AV/C message. |
| */ |
| typedef struct { |
| uint8_t ctype; /* Command type. */ |
| uint8_t subunit_type; /* Subunit type. */ |
| uint8_t subunit_id; /* Subunit ID. This value is typically ignored in AVRCP, |
| * except for VENDOR DEPENDENT messages when the value is |
| * vendor-dependent. Value range is 0-7. */ |
| uint8_t opcode; /* Op Code (passthrough, vendor, etc) */ |
| } tAVRC_HDR; |
| |
| /* This structure contains a UNIT INFO message. */ |
| typedef struct { |
| tAVRC_HDR hdr; /* Message header. */ |
| uint32_t company_id; /* Company identifier. */ |
| uint8_t unit_type; /* Unit type. Uses the same values as subunit type. */ |
| uint8_t unit; /* This value is vendor dependent and typically zero. */ |
| } tAVRC_MSG_UNIT; |
| |
| /* This structure contains a SUBUNIT INFO message. */ |
| typedef struct { |
| tAVRC_HDR hdr; /* Message header. */ |
| uint8_t subunit_type[AVRC_SUB_TYPE_LEN]; |
| /* Array containing subunit type values. */ |
| bool panel; /* true if the panel subunit type is in the |
| * subunit_type array, false otherwise. */ |
| uint8_t page; /* Specifies which part of the subunit type table is |
| * returned. For AVRCP it is typically zero. |
| * Value range is 0-7. */ |
| } tAVRC_MSG_SUB; |
| |
| /* This structure contains a VENDOR DEPENDENT message. */ |
| typedef struct { |
| tAVRC_HDR hdr; /* Message header. */ |
| uint32_t company_id; /* Company identifier. */ |
| uint8_t* p_vendor_data; /* Pointer to vendor dependent data. */ |
| uint16_t vendor_len; /* Length in bytes of vendor dependent data. */ |
| } tAVRC_MSG_VENDOR; |
| |
| /* PASS THROUGH message structure */ |
| typedef struct { |
| tAVRC_HDR hdr; /* hdr.ctype Unused. |
| * hdr.subunit_type Unused. |
| * hdr.subunit_id Unused. */ |
| uint8_t op_id; /* Operation ID. */ |
| uint8_t state; /* Keypress state. */ |
| uint8_t* p_pass_data; /* Pointer to data. This parameter is only valid |
| * when the op_id is AVRC_ID_VENDOR.*/ |
| uint8_t pass_len; /* Length in bytes of data. This parameter is only |
| * valid when the op_id is AVRC_ID_VENDOR.*/ |
| } tAVRC_MSG_PASS; |
| |
| /* Command/Response indicator. */ |
| #define AVRC_CMD AVCT_CMD /* Command message */ |
| #define AVRC_RSP AVCT_RSP /* Response message */ |
| |
| /* Browsing channel message structure */ |
| typedef struct { |
| tAVRC_HDR hdr; /* hdr.ctype AVRC_CMD or AVRC_RSP. |
| * hdr.subunit_type Unused. |
| * hdr.subunit_id Unused. */ |
| uint8_t* p_browse_data; /* Pointer to data. */ |
| uint16_t browse_len; /* Length in bytes of data. */ |
| BT_HDR* p_browse_pkt; /* The GKI buffer received. Set to NULL, if the callback |
| function wants to keep the buffer */ |
| } tAVRC_MSG_BROWSE; |
| |
| /* This is a union of all message type structures. */ |
| typedef union { |
| tAVRC_HDR hdr; /* Message header. */ |
| tAVRC_MSG_UNIT unit; /* UNIT INFO message. */ |
| tAVRC_MSG_SUB sub; /* SUBUNIT INFO message. */ |
| tAVRC_MSG_VENDOR vendor; /* VENDOR DEPENDENT message. */ |
| tAVRC_MSG_PASS pass; /* PASS THROUGH message. */ |
| tAVRC_MSG_BROWSE browse; /* messages thru browsing channel */ |
| } tAVRC_MSG; |
| |
| /* macros */ |
| #define AVRC_IS_VALID_CAP_ID(a) \ |
| ((((a) == AVRC_CAP_COMPANY_ID) || ((a) == AVRC_CAP_EVENTS_SUPPORTED)) \ |
| ? true \ |
| : false) |
| |
| #define AVRC_IS_VALID_EVENT_ID(a) \ |
| ((((a) >= AVRC_EVT_PLAY_STATUS_CHANGE) && ((a) <= AVRC_EVT_VOLUME_CHANGE)) \ |
| ? true \ |
| : false) |
| |
| #define AVRC_IS_VALID_ATTRIBUTE(a) \ |
| ((((((a) > 0) && (a) <= AVRC_PLAYER_SETTING_SCAN)) || \ |
| ((a) >= AVRC_PLAYER_SETTING_LOW_MENU_EXT)) \ |
| ? true \ |
| : false) |
| |
| #define AVRC_IS_VALID_MEDIA_ATTRIBUTE(a) \ |
| (((a) >= AVRC_MEDIA_ATTR_ID_TITLE) && \ |
| ((a) <= AVRC_MEDIA_ATTR_ID_PLAYING_TIME) \ |
| ? true \ |
| : false) |
| |
| #define AVRC_IS_VALID_BATTERY_STATUS(a) \ |
| (((a) <= AVRC_BATTERY_STATUS_FULL_CHARGE) ? true : false) |
| |
| #define AVRC_IS_VALID_SYSTEM_STATUS(a) \ |
| (((a) <= AVRC_SYSTEMSTATE_PWR_UNPLUGGED) ? true : false) |
| |
| #define AVRC_IS_VALID_GROUP(a) (((a) <= AVRC_PDU_PREV_GROUP) ? true : false) |
| |
| /* Company ID is 24-bit integer We can not use the macros in bt_types.h */ |
| #define AVRC_CO_ID_TO_BE_STREAM(p, u32) \ |
| { \ |
| *(p)++ = (uint8_t)((u32) >> 16); \ |
| *(p)++ = (uint8_t)((u32) >> 8); \ |
| *(p)++ = (uint8_t)(u32); \ |
| } |
| #define AVRC_BE_STREAM_TO_CO_ID(u32, p) \ |
| { \ |
| (u32) = (((uint32_t)(*((p) + 2))) + (((uint32_t)(*((p) + 1))) << 8) + \ |
| (((uint32_t)(*(p))) << 16)); \ |
| (p) += 3; \ |
| } |
| |
| /***************************************************************************** |
| * data type definitions |
| ****************************************************************************/ |
| #define AVRC_MAX_APP_ATTR_SIZE 16 |
| #define AVRC_MAX_CHARSET_SIZE 16 |
| #define AVRC_MAX_ELEM_ATTR_SIZE 8 |
| |
| /***************************************************************************** |
| * Metadata transfer Building/Parsing definitions |
| ****************************************************************************/ |
| |
| typedef struct { |
| uint16_t charset_id; |
| uint16_t str_len; |
| uint8_t* p_str; |
| } tAVRC_FULL_NAME; |
| |
| typedef struct { |
| uint16_t str_len; |
| uint8_t* p_str; |
| } tAVRC_NAME; |
| |
| #ifndef AVRC_CAP_MAX_NUM_COMP_ID |
| #define AVRC_CAP_MAX_NUM_COMP_ID 4 |
| #endif |
| |
| #ifndef AVRC_CAP_MAX_NUM_EVT_ID |
| #define AVRC_CAP_MAX_NUM_EVT_ID 16 |
| #endif |
| |
| typedef union { |
| uint32_t company_id[AVRC_CAP_MAX_NUM_COMP_ID]; |
| uint8_t event_id[AVRC_CAP_MAX_NUM_EVT_ID]; |
| } tAVRC_CAPS_PARAM; |
| |
| typedef struct { |
| uint8_t attr_id; |
| uint8_t attr_val; |
| } tAVRC_APP_SETTING; |
| |
| typedef struct { |
| uint8_t attr_id; |
| uint16_t charset_id; |
| uint8_t str_len; |
| uint8_t* p_str; |
| } tAVRC_APP_SETTING_TEXT; |
| |
| typedef uint8_t tAVRC_FEATURE_MASK[AVRC_FEATURE_MASK_SIZE]; |
| |
| typedef struct { |
| uint16_t player_id; /* A unique identifier for this media player.*/ |
| uint8_t major_type; /* Use AVRC_MJ_TYPE_AUDIO, AVRC_MJ_TYPE_VIDEO, |
| AVRC_MJ_TYPE_BC_AUDIO, or AVRC_MJ_TYPE_BC_VIDEO.*/ |
| uint32_t sub_type; /* Use AVRC_SUB_TYPE_NONE, AVRC_SUB_TYPE_AUDIO_BOOK, or |
| AVRC_SUB_TYPE_PODCAST*/ |
| uint8_t play_status; /* Use AVRC_PLAYSTATE_STOPPED, AVRC_PLAYSTATE_PLAYING, |
| AVRC_PLAYSTATE_PAUSED, AVRC_PLAYSTATE_FWD_SEEK, |
| AVRC_PLAYSTATE_REV_SEEK, or AVRC_PLAYSTATE_ERROR*/ |
| tAVRC_FEATURE_MASK features; /* Supported feature bit mask*/ |
| tAVRC_FULL_NAME name; /* The player name, name length and character set id.*/ |
| } tAVRC_ITEM_PLAYER; |
| |
| typedef struct { |
| tAVRC_UID uid; /* The uid of this folder */ |
| uint8_t type; /* Use AVRC_FOLDER_TYPE_MIXED, AVRC_FOLDER_TYPE_TITLES, |
| AVRC_FOLDER_TYPE_ALNUMS, AVRC_FOLDER_TYPE_ARTISTS, |
| AVRC_FOLDER_TYPE_GENRES, |
| AVRC_FOLDER_TYPE_PLAYLISTS, or AVRC_FOLDER_TYPE_YEARS.*/ |
| bool playable; /* true, if the folder can be played. */ |
| tAVRC_FULL_NAME name; /* The folder name, name length and character set id. */ |
| } tAVRC_ITEM_FOLDER; |
| |
| typedef struct { |
| uint32_t |
| attr_id; /* Use AVRC_MEDIA_ATTR_ID_TITLE, AVRC_MEDIA_ATTR_ID_ARTIST, |
| AVRC_MEDIA_ATTR_ID_ALBUM, |
| AVRC_MEDIA_ATTR_ID_TRACK_NUM, AVRC_MEDIA_ATTR_ID_NUM_TRACKS, |
| AVRC_MEDIA_ATTR_ID_GENRE, AVRC_MEDIA_ATTR_ID_PLAYING_TIME */ |
| tAVRC_FULL_NAME |
| name; /* The attribute value, value length and character set id. */ |
| } tAVRC_ATTR_ENTRY; |
| |
| typedef struct { |
| tAVRC_UID uid; /* The uid of this media element item */ |
| uint8_t type; /* Use AVRC_MEDIA_TYPE_AUDIO or AVRC_MEDIA_TYPE_VIDEO. */ |
| tAVRC_FULL_NAME name; /* The media name, name length and character set id. */ |
| uint8_t attr_count; /* The number of attributes in p_attr_list */ |
| tAVRC_ATTR_ENTRY* p_attr_list; /* Attribute entry list. */ |
| } tAVRC_ITEM_MEDIA; |
| |
| typedef struct { |
| uint8_t |
| item_type; /* AVRC_ITEM_PLAYER, AVRC_ITEM_FOLDER, or AVRC_ITEM_MEDIA */ |
| union { |
| tAVRC_ITEM_PLAYER player; /* The properties of a media player item.*/ |
| tAVRC_ITEM_FOLDER folder; /* The properties of a folder item.*/ |
| tAVRC_ITEM_MEDIA media; /* The properties of a media item.*/ |
| } u; |
| } tAVRC_ITEM; |
| |
| /* GetCapability */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t capability_id; |
| } tAVRC_GET_CAPS_CMD; |
| |
| /* ListPlayerAppValues */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t attr_id; |
| } tAVRC_LIST_APP_VALUES_CMD; |
| |
| /* GetCurAppValue */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t num_attr; |
| uint8_t attrs[AVRC_MAX_APP_ATTR_SIZE]; |
| } tAVRC_GET_CUR_APP_VALUE_CMD; |
| |
| /* SetAppValue */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t num_val; |
| tAVRC_APP_SETTING* p_vals; |
| } tAVRC_SET_APP_VALUE_CMD; |
| |
| /* GetAppAttrTxt */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t num_attr; |
| uint8_t attrs[AVRC_MAX_APP_ATTR_SIZE]; |
| } tAVRC_GET_APP_ATTR_TXT_CMD; |
| |
| /* GetAppValueTxt */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t attr_id; |
| uint8_t num_val; |
| uint8_t vals[AVRC_MAX_APP_ATTR_SIZE]; |
| } tAVRC_GET_APP_VAL_TXT_CMD; |
| |
| /* InformCharset */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t num_id; |
| uint16_t charsets[AVRC_MAX_CHARSET_SIZE]; |
| } tAVRC_INFORM_CHARSET_CMD; |
| |
| /* InformBatteryStatus */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t battery_status; |
| } tAVRC_BATTERY_STATUS_CMD; |
| |
| /* GetElemAttrs */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t num_attr; |
| uint32_t attrs[AVRC_MAX_ELEM_ATTR_SIZE]; |
| } tAVRC_GET_ELEM_ATTRS_CMD; |
| |
| /* RegNotify */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t event_id; |
| uint32_t param; |
| } tAVRC_REG_NOTIF_CMD; |
| |
| /* SetAddrPlayer */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint16_t player_id; |
| } tAVRC_SET_ADDR_PLAYER_CMD; |
| |
| /* SetBrowsedPlayer */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint16_t player_id; |
| } tAVRC_SET_BR_PLAYER_CMD; |
| |
| /* SetAbsVolume */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t volume; |
| } tAVRC_SET_VOLUME_CMD; |
| |
| /* GetFolderItems */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t scope; |
| uint32_t start_item; |
| uint32_t end_item; |
| uint8_t attr_count; |
| uint32_t* p_attr_list; |
| } tAVRC_GET_ITEMS_CMD; |
| |
| /* ChangePath */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint16_t uid_counter; |
| uint8_t direction; |
| tAVRC_UID folder_uid; |
| } tAVRC_CHG_PATH_CMD; |
| |
| /* GetItemAttrs */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t scope; |
| tAVRC_UID uid; |
| uint16_t uid_counter; |
| uint8_t attr_count; |
| uint32_t* p_attr_list; |
| } tAVRC_GET_ATTRS_CMD; |
| |
| /* Search */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| tAVRC_FULL_NAME string; |
| } tAVRC_SEARCH_CMD; |
| |
| /* PlayItem */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t scope; |
| tAVRC_UID uid; |
| uint16_t uid_counter; |
| } tAVRC_PLAY_ITEM_CMD; |
| |
| /* AddToNowPlaying */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t scope; |
| tAVRC_UID uid; |
| uint16_t uid_counter; |
| } tAVRC_ADD_TO_PLAY_CMD; |
| |
| /* GetTotalNumOfItems */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t scope; |
| } tAVRC_GET_NUM_OF_ITEMS_CMD; |
| |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| } tAVRC_CMD; |
| |
| /* Continue and Abort */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (assigned by AVRC_BldCommand according to pdu) */ |
| uint8_t target_pdu; |
| } tAVRC_NEXT_CMD; |
| |
| typedef union { |
| uint8_t pdu; |
| tAVRC_CMD cmd; |
| tAVRC_GET_CAPS_CMD get_caps; /* GetCapability */ |
| tAVRC_CMD list_app_attr; /* ListPlayerAppAttr */ |
| tAVRC_LIST_APP_VALUES_CMD list_app_values; /* ListPlayerAppValues */ |
| tAVRC_GET_CUR_APP_VALUE_CMD get_cur_app_val; /* GetCurAppValue */ |
| tAVRC_SET_APP_VALUE_CMD set_app_val; /* SetAppValue */ |
| tAVRC_GET_APP_ATTR_TXT_CMD get_app_attr_txt; /* GetAppAttrTxt */ |
| tAVRC_GET_APP_VAL_TXT_CMD get_app_val_txt; /* GetAppValueTxt */ |
| tAVRC_INFORM_CHARSET_CMD inform_charset; /* InformCharset */ |
| tAVRC_BATTERY_STATUS_CMD inform_battery_status; /* InformBatteryStatus */ |
| tAVRC_GET_ELEM_ATTRS_CMD get_elem_attrs; /* GetElemAttrs */ |
| tAVRC_CMD get_play_status; /* GetPlayStatus */ |
| tAVRC_REG_NOTIF_CMD reg_notif; /* RegNotify */ |
| tAVRC_NEXT_CMD continu; /* Continue */ |
| tAVRC_NEXT_CMD abort; /* Abort */ |
| |
| tAVRC_SET_ADDR_PLAYER_CMD addr_player; /* SetAddrPlayer */ |
| tAVRC_SET_VOLUME_CMD volume; /* SetAbsVolume */ |
| tAVRC_SET_BR_PLAYER_CMD br_player; /* SetBrowsedPlayer */ |
| tAVRC_GET_ITEMS_CMD get_items; /* GetFolderItems */ |
| tAVRC_CHG_PATH_CMD chg_path; /* ChangePath */ |
| tAVRC_GET_ATTRS_CMD get_attrs; /* GetItemAttrs */ |
| tAVRC_SEARCH_CMD search; /* Search */ |
| tAVRC_PLAY_ITEM_CMD play_item; /* PlayItem */ |
| tAVRC_ADD_TO_PLAY_CMD add_to_play; /* AddToNowPlaying */ |
| tAVRC_GET_NUM_OF_ITEMS_CMD get_num_of_items; /* GetTotalNumOfItems */ |
| } tAVRC_COMMAND; |
| |
| /* GetCapability */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t capability_id; |
| uint8_t count; |
| tAVRC_CAPS_PARAM param; |
| } tAVRC_GET_CAPS_RSP; |
| |
| /* ListPlayerAppAttr */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t num_attr; |
| uint8_t attrs[AVRC_MAX_APP_ATTR_SIZE]; |
| } tAVRC_LIST_APP_ATTR_RSP; |
| |
| /* ListPlayerAppValues */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t num_val; |
| uint8_t vals[AVRC_MAX_APP_ATTR_SIZE]; |
| } tAVRC_LIST_APP_VALUES_RSP; |
| |
| /* GetCurAppValue */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t num_val; |
| tAVRC_APP_SETTING* p_vals; |
| } tAVRC_GET_CUR_APP_VALUE_RSP; |
| |
| /* GetAppAttrTxt */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t num_attr; |
| tAVRC_APP_SETTING_TEXT* p_attrs; |
| } tAVRC_GET_APP_ATTR_TXT_RSP; |
| |
| /* GetPlayStatus */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint32_t song_len; |
| uint32_t song_pos; |
| uint8_t play_status; |
| } tAVRC_GET_PLAY_STATUS_RSP; |
| |
| /* notification event parameter for AddressedPlayer change */ |
| typedef struct { |
| uint16_t player_id; |
| uint16_t uid_counter; |
| } tAVRC_ADDR_PLAYER_PARAM; |
| |
| #ifndef AVRC_MAX_APP_SETTINGS |
| #define AVRC_MAX_APP_SETTINGS 8 |
| #endif |
| |
| /* notification event parameter for Player Application setting change */ |
| typedef struct { |
| uint8_t num_attr; |
| uint8_t attr_id[AVRC_MAX_APP_SETTINGS]; |
| uint8_t attr_value[AVRC_MAX_APP_SETTINGS]; |
| } tAVRC_PLAYER_APP_PARAM; |
| |
| typedef union { |
| tAVRC_PLAYSTATE play_status; |
| tAVRC_UID track; |
| uint32_t play_pos; |
| tAVRC_BATTERY_STATUS battery_status; |
| tAVRC_SYSTEMSTATE system_status; |
| tAVRC_PLAYER_APP_PARAM player_setting; |
| tAVRC_ADDR_PLAYER_PARAM addr_player; |
| uint16_t uid_counter; |
| uint8_t volume; |
| } tAVRC_NOTIF_RSP_PARAM; |
| |
| /* RegNotify */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t event_id; |
| tAVRC_NOTIF_RSP_PARAM param; |
| } tAVRC_REG_NOTIF_RSP; |
| |
| /* SetAbsVolume */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t volume; |
| } tAVRC_SET_VOLUME_RSP; |
| |
| /* SetBrowsedPlayer */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint16_t uid_counter; |
| uint32_t num_items; |
| uint16_t charset_id; |
| uint8_t folder_depth; |
| tAVRC_NAME* p_folders; |
| } tAVRC_SET_BR_PLAYER_RSP; |
| |
| /* GetFolderItems */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint16_t uid_counter; |
| uint16_t item_count; |
| tAVRC_ITEM* p_item_list; |
| } tAVRC_GET_ITEMS_RSP; |
| |
| /* ChangePath */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint32_t num_items; |
| } tAVRC_CHG_PATH_RSP; |
| |
| /* GetItemAttrs, GetElemAttrs */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t num_attrs; |
| tAVRC_ATTR_ENTRY* p_attrs; |
| } tAVRC_GET_ATTRS_RSP; |
| |
| /* Get Total Number of Items */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint16_t uid_counter; |
| uint32_t num_items; |
| } tAVRC_GET_NUM_OF_ITEMS_RSP; |
| |
| /* Search */ |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint16_t uid_counter; |
| uint32_t num_items; |
| } tAVRC_SEARCH_RSP; |
| |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| uint8_t target_pdu; |
| } tAVRC_NEXT_RSP; |
| |
| typedef struct { |
| uint8_t pdu; |
| tAVRC_STS status; |
| uint8_t opcode; /* Op Code (copied from avrc_cmd.opcode by AVRC_BldResponse |
| user. invalid one to generate according to pdu) */ |
| } tAVRC_RSP; |
| |
| typedef union { |
| uint8_t pdu; |
| tAVRC_RSP rsp; |
| tAVRC_GET_CAPS_RSP get_caps; /* GetCapability */ |
| tAVRC_LIST_APP_ATTR_RSP list_app_attr; /* ListPlayerAppAttr */ |
| tAVRC_LIST_APP_VALUES_RSP list_app_values; /* ListPlayerAppValues */ |
| tAVRC_GET_CUR_APP_VALUE_RSP get_cur_app_val; /* GetCurAppValue */ |
| tAVRC_RSP set_app_val; /* SetAppValue */ |
| tAVRC_GET_APP_ATTR_TXT_RSP get_app_attr_txt; /* GetAppAttrTxt */ |
| tAVRC_GET_APP_ATTR_TXT_RSP get_app_val_txt; /* GetAppValueTxt */ |
| tAVRC_RSP inform_charset; /* InformCharset */ |
| tAVRC_RSP inform_battery_status; /* InformBatteryStatus */ |
| tAVRC_GET_PLAY_STATUS_RSP get_play_status; /* GetPlayStatus */ |
| tAVRC_REG_NOTIF_RSP reg_notif; /* RegNotify */ |
| tAVRC_NEXT_RSP continu; /* Continue */ |
| tAVRC_NEXT_RSP abort; /* Abort */ |
| tAVRC_RSP addr_player; /* SetAddrPlayer */ |
| tAVRC_SET_VOLUME_RSP volume; /* SetAbsVolume */ |
| tAVRC_SET_BR_PLAYER_RSP br_player; /* SetBrowsedPlayer */ |
| tAVRC_GET_ITEMS_RSP get_items; /* GetFolderItems */ |
| tAVRC_CHG_PATH_RSP chg_path; /* ChangePath */ |
| tAVRC_GET_ATTRS_RSP get_attrs; /* GetItemAttrs, GetElemAttrs */ |
| tAVRC_GET_NUM_OF_ITEMS_RSP get_num_of_items; /* GetTotalNumberOfItems */ |
| tAVRC_SEARCH_RSP search; /* Search */ |
| tAVRC_RSP play_item; /* PlayItem */ |
| tAVRC_RSP add_to_play; /* AddToNowPlaying */ |
| } tAVRC_RESPONSE; |
| |
| #endif |