pinebuds/services/bt_if_enhanced/inc/avrcp_api.h

1704 lines
58 KiB
C

/***************************************************************************
*
* Copyright 2015-2019 BES.
* All rights reserved. All unpublished rights reserved.
*
* No part of this work may be used or reproduced in any form or by any
* means, or stored in a database or retrieval system, without prior written
* permission of BES.
*
* Use of this work is governed by a license granted by BES.
* This work contains confidential and proprietary information of
* BES. which is protected by copyright, trade secret,
* trademark and other intellectual property rights.
*
****************************************************************************/
#ifndef _AVRCP_API_H
#define _AVRCP_API_H
#include "me_api.h"
#include "avctp_api.h"
#include "bluetooth.h"
#include "plat_types.h"
#include "cqueue.h"
#define BTIF_AVRCP_MAX_CHAR_SETS 10
#define BTIF_AVTP_HEADER_LEN 10
#define BTIF_AVRCP_RX_FRAG_BUFF_SIZE 672 //L2CAP_DEFAULT_MTU
typedef btif_avctp_event_t btif_avrcp_event_t;
typedef void *btif_avrcp_chnl_handle_t;
typedef void *btif_app_bt_device_t;
/** The transport layer is connected and commands/responses can now
* be exchanged.
*/
#define BTIF_AVRCP_EVENT_CONNECT BTIF_AVCTP_CONNECT_EVENT
/** The application will receive this event when a lower layer connection
* (L2CAP) has been disconnected. Both the target and controller of the
* connection are notified.
*
* During this callback, the 'p.remDev' parameter is valid.
*/
#define BTIF_AVRCP_EVENT_DISCONNECT BTIF_AVCTP_DISCONNECT_EVENT
/** A remote device is attempting to connect the transport layer.
* Only the acceptor of the connection is notified.
*/
#define BTIF_AVRCP_EVENT_CONNECT_IND BTIF_AVCTP_CONNECT_IND_EVENT
/* Group: Events for the exchange of basic AV/C commands that are not routed
* to the panel subunit.
*/
#define BTIF_AVRCP_EVENT_COMMAND BTIF_AVCTP_COMMAND_EVENT
/** A AV/C response was received from the remote device (target). This event
* is received for responses not routed to the panel subunit.
*/
#define BTIF_AVRCP_EVENT_RESPONSE BTIF_AVCTP_RESPONSE_EVENT
/** The remote device (target) rejected the AV/C command. This event is
* received for responses not routed to the panel subunit.
*/
#define BTIF_AVRCP_EVENT_REJECT BTIF_AVCTP_REJECT_EVENT
/** A command (see AVRCP_SendCommand) or response (see AVRCP_SendResponse)
* has been sent.
*/
#define BTIF_AVRCP_EVENT_TX_DONE BTIF_AVCTP_TX_DONE_EVENT
/** Additional operand data has been received for the previous
* AVRCP_EVENT_COMMAND or AVRCP_EVENT_RESPONSE.
*/
#define BTIF_AVRCP_EVENT_OPERANDS BTIF_AVCTP_OPERANDS_EVENT
/** An AV/C command has timed out.
*/
#define BTIF_AVRCP_EVENT_CMD_TIMEOUT ( BTIF_AVCTP_LAST_EVENT + 1)
/* Group: Events for the exchange of standard AV/C panel subunit commands.
*/
#define BTIF_AVRCP_EVENT_PANEL_PRESS ( BTIF_AVCTP_LAST_EVENT + 2)
/** The key corresponding to a panel operation has been held down on the
* remote controller device for at least AVRCP_PANEL_PRESSHOLD_TIME.
*/
#define BTIF_AVRCP_EVENT_PANEL_HOLD ( BTIF_AVCTP_LAST_EVENT + 3)
/** The key corresponding to a panel operation has been released on the
* remote controller device.
*/
#define BTIF_AVRCP_EVENT_PANEL_RELEASE ( BTIF_AVCTP_LAST_EVENT + 4)
/** A panel response has been received from the remote target device.
* All fields of "p.panelCnf" are valid.
*/
#define BTIF_AVRCP_EVENT_PANEL_CNF ( BTIF_AVCTP_LAST_EVENT + 5)
/* Group: Events for the exchange of Bluetooth specific advanced AV/C
* commands routed through the panel subunit.
*/
/** Advanced status information has been received from the controller.
*/
#define BTIF_AVRCP_EVENT_ADV_INFO ( BTIF_AVCTP_LAST_EVENT + 6)
/** An advanced request was received and requires a response by the
* application.
*/
#define BTIF_AVRCP_EVENT_ADV_REQ ( BTIF_AVCTP_LAST_EVENT + 7)
/** The notification of a registered event has been received.
*/
#define BTIF_AVRCP_EVENT_ADV_NOTIFY ( BTIF_AVCTP_LAST_EVENT + 8)
/** An Advanced command was sent successfully to the target and a response
* was received.
*/
#define BTIF_AVRCP_EVENT_ADV_RESPONSE ( BTIF_AVCTP_LAST_EVENT + 9)
/** No response was received for an Advanced command and it has timed out.
* This event is received for advanced commands routed to the panel subunit.
*/
#define BTIF_AVRCP_EVENT_ADV_CMD_TIMEOUT ( BTIF_AVCTP_LAST_EVENT + 10)
/** An Advanced PDU was sent successfully.
*/
#define BTIF_AVRCP_EVENT_ADV_TX_DONE ( BTIF_AVCTP_LAST_EVENT + 11)
/* Group: Connection events for establishing and releasing the AVRCP browsing
* channel. The browsing channel is used for the exchange of AVCTP-based
* commands/responses which contain Bluetooth specific media
* operations.
*/
#define BTIF_AVRCP_EVENT_BROWSE_CONNECT ( BTIF_AVCTP_LAST_EVENT + 12)
/** The application will receive this event when a lower layer connection
* (L2CAP) has been disconnected. Both the target and controller of the
* connection are notified.
*/
#define BTIF_AVRCP_EVENT_BROWSE_DISCONNECT ( BTIF_AVCTP_LAST_EVENT + 13)
/** remote device is attempting to connect the browsing channel.
*/
#define BTIF_AVRCP_EVENT_BROWSE_CONNECT_IND ( BTIF_AVCTP_LAST_EVENT + 14)
/* Group: Events for the exchange of browsing channel commands.
*/
#define BTIF_AVRCP_EVENT_BROWSE_REQ ( BTIF_AVCTP_LAST_EVENT + 15)
#define BTIF_AVRCP_EVENT_BROWSE_INFO ( BTIF_AVCTP_LAST_EVENT + 16)
#define BTIF_AVRCP_EVENT_BROWSE_RESPONSE ( BTIF_AVCTP_LAST_EVENT + 17)
#define BTIF_AVRCP_EVENT_BROWSE_CMD_TIMEOUT ( BTIF_AVCTP_LAST_EVENT + 18)
#define BTIF_AVRCP_EVENT_BROWSE_TX_DONE ( BTIF_AVCTP_LAST_EVENT + 19)
#define BTIF_AVRCP_EVENT_LAST ( BTIF_AVCTP_LAST_EVENT + 19)
typedef uint16_t avrcp_role_t;
/* Controller: Player/recorder features supported ("play" and "stop") */
#define BTIF_AVRCP_CT_CATEGORY_1 0x0001
/* Controller: Monitor/amplifier features supported ("volume up" and "volume down") */
#define BTIF_AVRCP_CT_CATEGORY_2 0x0002
/* Controller: Tuner features supported ("channel up" and "channel down") */
#define BTIF_AVRCP_CT_CATEGORY_3 0x0004
/* Controller: Menu features supported ("root menu", "up", "down", "left",
* "right", and "select")
*/
#define BTIF_AVRCP_CT_CATEGORY_4 0x0008
/* Target: Player/recorder features supported ("play" and "stop") */
#define BTIF_AVRCP_TG_CATEGORY_1 0x0100
/* Target: Monitor/amplifier features supported ("volume up" and "volume down") */
#define BTIF_AVRCP_TG_CATEGORY_2 0x0200
/* Target: Tuner features supported ("channel up" and "channel down") */
#define BTIF_AVRCP_TG_CATEGORY_3 0x0400
/* Target: Menu features supported ("root menu", "up", "down", "left",
* "right", and "select")
*/
#define BTIF_AVRCP_TG_CATEGORY_4 0x0800
/* Target: Player settings supported */
#define BTIF_AVRCP_TG_PLAYER_SETTINGS 0x1000
/* Target: Group navigation supported */
#define BTIF_AVRCP_TG_GROUP_NAV 0x2000
/* Target: Media browsing is supported */
#define BTIF_AVRCP_TG_BROWSING 0x4000
/* Target: Multiple media players */
#define BTIF_AVRCP_TG_MULTIPLE_PLAYERS 0x8000
typedef uint8_t avrcp_ctype_t;
#define BTIF_AVRCP_CTYPE_CONTROL BTIF_ AVCTP_CTYPE_CONTROL
#define BTIF_AVRCP_CTYPE_STATUS BTIF_AVCTP_CTYPE_STATUS
#define BTIF_AVRCP_CTYPE_SPECIFIC_INQUIRY BTIF_ AVCTP_CTYPE_SPECIFIC_INQUIRY
#define BTIF_AVRCP_CTYPE_NOTIFY BTIF_AVCTP_CTYPE_NOTIFY
#define BTIF_AVRCP_CTYPE_GENERAL_INQUIRY BTIF_AVCTP_CTYPE_GENERAL_INQUIRY
#define BTIF_AVRCP_CTYPE_BROWSING BTIF_AVCTP_CTYPE_BROWSING
typedef avctp_response_t avrcp_response_t;
#define BTIF_AVRCP_RESPONSE_NOT_IMPLEMENTED BTIF_AVCTP_RESPONSE_NOT_IMPLEMENTED
#define BTIF_AVRCP_RESPONSE_ACCEPTED AVCTP_RESPONSE_ACCEPTED
#define BTIF_AVRCP_RESPONSE_REJECTED AVCTP_RESPONSE_REJECTED
#define BTIF_AVRCP_RESPONSE_IN_TRANSITION AVCTP_RESPONSE_IN_TRANSITION
#define BTIF_AVRCP_RESPONSE_IMPLEMENTED_STABLE AVCTP_RESPONSE_IMPLEMENTED_STABLE
#define BTIF_AVRCP_RESPONSE_CHANGED AVRCP_RESP_CHANGED
#define BTIF_AVRCP_RESPONSE_INTERIM AVCTP_RESPONSE_INTERIM
#define BTIF_AVRCP_RESPONSE_BROWSING AVCTP_RESPONSE_BROWSING
#define BTIF_AVRCP_RESPONSE_SKIPPED 0xF0
#define BTIF_AVRCP_RESPONSE_TIMEOUT 0xF1
typedef uint8_t avrcp_opcode_t;
#define BTIF_AVRCP_OPCODE_VENDOR_DEPENDENT AVRCP_VENDOR_DEP_IND
#define BTIF_AVRCP_OPCODE_UNIT_INFO AVRCP_UINT_INFO_IND
#define BTIF_AVRCP_OPCODE_SUBUNIT_INFO AVRCP_SUBUNIT_INFO_IND
#define BTIF_AVRCP_OPCODE_PASS_THROUGH AVRCP_PASSTHROUGH_IND
typedef avctp_cmdframe_t avrcp_cmdframe_t;
typedef avctp_rspframe_t avrcp_rspframe_t;
typedef uint8_t avrcp_subunit_type_t;
#define BTIF_AVRCP_SUBUNIT_PANEL 0x09
#define BTIF_AVRCP_SUBUNIT_UNIT 0x1F
typedef U16 avrcp_panel_operation_t;
#define BTIF_AVRCP_POP_SELECT 0x0000
#define BTIF_AVRCP_POP_UP 0x0001
#define BTIF_AVRCP_POP_DOWN 0x0002
#define BTIF_AVRCP_POP_LEFT 0x0003
#define BTIF_AVRCP_POP_RIGHT 0x0004
#define BTIF_AVRCP_POP_RIGHT_UP 0x0005
#define BTIF_AVRCP_POP_RIGHT_DOWN 0x0006
#define BTIF_AVRCP_POP_LEFT_UP 0x0007
#define BTIF_AVRCP_POP_LEFT_DOWN 0x0008
#define BTIF_AVRCP_POP_ROOT_MENU 0x0009
#define BTIF_AVRCP_POP_SETUP_MENU 0x000A
#define BTIF_AVRCP_POP_CONTENTS_MENU 0x000B
#define BTIF_AVRCP_POP_FAVORITE_MENU 0x000C
#define BTIF_AVRCP_POP_EXIT 0x000D
#define BTIF_AVRCP_POP_0 0x0020
#define BTIF_AVRCP_POP_1 0x0021
#define BTIF_AVRCP_POP_2 0x0022
#define BTIF_AVRCP_POP_3 0x0023
#define BTIF_AVRCP_POP_4 0x0024
#define BTIF_AVRCP_POP_5 0x0025
#define BTIF_AVRCP_POP_6 0x0026
#define BTIF_AVRCP_POP_7 0x0027
#define BTIF_AVRCP_POP_8 0x0028
#define BTIF_AVRCP_POP_9 0x0029
#define BTIF_AVRCP_POP_DOT 0x002A
#define BTIF_AVRCP_POP_ENTER 0x002B
#define BTIF_AVRCP_POP_CLEAR 0x002C
#define BTIF_AVRCP_POP_CHANNEL_UP 0x0030
#define BTIF_AVRCP_POP_CHANNEL_DOWN 0x0031
#define BTIF_AVRCP_POP_PREVIOUS_CHANNEL 0x0032
#define BTIF_AVRCP_POP_SOUND_SELECT 0x0033
#define BTIF_AVRCP_POP_INPUT_SELECT 0x0034
#define BTIF_AVRCP_POP_DISPLAY_INFO 0x0035
#define BTIF_AVRCP_POP_HELP 0x0036
#define BTIF_AVRCP_POP_PAGE_UP 0x0037
#define BTIF_AVRCP_POP_PAGE_DOWN 0x0038
#define BTIF_AVRCP_POP_POWER 0x0040
#define BTIF_AVRCP_POP_VOLUME_UP 0x0041
#define BTIF_AVRCP_POP_VOLUME_DOWN 0x0042
#define BTIF_AVRCP_POP_MUTE 0x0043
#define BTIF_AVRCP_POP_PLAY 0x0044
#define BTIF_AVRCP_POP_STOP 0x0045
#define BTIF_AVRCP_POP_PAUSE 0x0046
#define BTIF_AVRCP_POP_RECORD 0x0047
#define BTIF_AVRCP_POP_REWIND 0x0048
#define BTIF_AVRCP_POP_FAST_FORWARD 0x0049
#define BTIF_AVRCP_POP_EJECT 0x004A
#define BTIF_AVRCP_POP_FORWARD 0x004B
#define BTIF_AVRCP_POP_BACKWARD 0x004C
#define BTIF_AVRCP_POP_ANGLE 0x0050
#define BTIF_AVRCP_POP_SUBPICTURE 0x0051
#define BTIF_AVRCP_POP_F1 0x0071
#define BTIF_AVRCP_POP_F2 0x0072
#define BTIF_AVRCP_POP_F3 0x0073
#define BTIF_AVRCP_POP_F4 0x0074
#define BTIF_AVRCP_POP_F5 0x0075
#define BTIF_AVRCP_POP_VENDOR_UNIQUE 0x007E
#define BTIF_AVRCP_POP_NEXT_GROUP 0x017E
#define BTIF_AVRCP_POP_PREV_GROUP 0x027E
#define BTIF_AVRCP_POP_RESERVED 0x007F
#define BTIF_AVRCP_NUM_EVENTS 13
#define BTIF_AVRCP_MAX_NOTIFICATIONS 15
#define BTIF_AVRCP_SUBUNIT_OP_QUEUE_MAX 15
/*---------------------------------------------------------------------------
* avrcp operation code
*/
typedef U8 btif_avrcp_operation_t;
#define BTIF_AVRCP_OP_GET_CAPABILITIES 0x10
#define BTIF_AVRCP_OP_LIST_PLAYER_SETTING_ATTRIBS 0x11
#define BTIF_AVRCP_OP_LIST_PLAYER_SETTING_VALUES 0x12
#define BTIF_AVRCP_OP_GET_PLAYER_SETTING_VALUE 0x13
#define BTIF_AVRCP_OP_SET_PLAYER_SETTING_VALUE 0x14
#define BTIF_AVRCP_OP_GET_PLAYER_SETTING_ATTR_TEXT 0x15
#define BTIF_AVRCP_OP_GET_PLAYER_SETTING_VALUE_TEXT 0x16
#define BTIF_AVRCP_OP_INFORM_DISP_CHAR_SET 0x17
#define BTIF_AVRCP_OP_INFORM_BATT_STATUS 0x18
#define BTIF_AVRCP_OP_GET_MEDIA_INFO 0x20
#define BTIF_AVRCP_OP_GET_PLAY_STATUS 0x30
#define BTIF_AVRCP_OP_REGISTER_NOTIFY 0x31
#define BTIF_AVRCP_OP_REQUEST_CONT_RESP 0x40
#define BTIF_AVRCP_OP_ABORT_CONT_RESP 0x41
#define BTIF_AVRCP_OP_SET_ABSOLUTE_VOLUME 0x50
#define BTIF_AVRCP_OP_SET_ADDRESSED_PLAYER 0x60
#define BTIF_AVRCP_OP_SET_BROWSED_PLAYER 0x70
#define BTIF_AVRCP_OP_GET_FOLDER_ITEMS 0x71
#define BTIF_AVRCP_OP_CHANGE_PATH 0x72
#define BTIF_AVRCP_OP_GET_ITEM_ATTRIBUTES 0x73
#define BTIF_AVRCP_OP_PLAY_ITEM 0x74
#define BTIF_AVRCP_OP_SEARCH 0x80
#define BTIF_AVRCP_OP_ADD_TO_NOW_PLAYING 0x90
#define BTIF_AVRCP_OP_GENERAL_REJECT 0xA0
#define BTIF_AVRCP_OP_CUSTOM_CMD 0xF0
typedef uint8_t avrcp_error_code_t;
#define BTIF_AVRCP_INVALID_CMD_ERR 0x00
#define BTIF_AVRCP_INVALID_PARM_ERR 0x01
#define BTIF_AVRCP_PARM_NOT_FOUND_ERR 0x02
#define BTIF_AVRCP_INTERNAL_ERROR_ERR 0x03
#define BTIF_AVRCP_NO_ERROR_ERR 0x04
#define BTIF_AVRCP_UIDS_CHANGED_ERR 0x05
#define BTIF_AVRCP_ERR_UNKNOWN_ERROR 0x06
#define BTIF_AVRCP_ERR_INVALID_DIRECTION 0x07
#define BTIF_AVRCP_ERR_NON_DIRECTORY 0x08
#define BTIF_AVRCP_ERR_DOES_NOT_EXIST 0x09
#define BTIF_AVRCP_ERR_INVALID_SCOPE 0x0A
#define BTIF_AVRCP_ERR_OUT_OF_BOUNDS 0x0B
#define BTIF_AVRCP_ERR_IS_DIRECTORY 0x0C
#define BTIF_AVRCP_ERR_MEDIA_IN_USE 0x0D
#define BTIF_AVRCP_ERR_NOW_PLAYING_FULL 0x0E
#define BTIF_AVRCP_ERR_NO_SEARCH_SUPPORT 0x0F
#define BTIF_AVRCP_ERR_SEARCH_IN_PROGRESS 0x10
#define BTIF_AVRCP_ERR_INVALID_PLAYER_ID 0x11
#define BTIF_AVRCP_ERR_NOT_BROWSABLE 0x12
#define BTIF_AVRCP_ERR_NOT_ADDRESSED 0x13
#define BTIF_AVRCP_ERR_NO_SEARCH_RESULTS 0x14
#define BTIF_AVRCP_ERR_NO_AVAIL_PLAYERS 0x15
#define BTIF_AVRCP_ERR_ADDR_PLAYER_CHANGED 0x16
/*---------------------------------------------------------------------------
* event Id
*/
typedef uint8_t avrcp_event_Id_t;
#define BTIF_AVRCP_EID_MEDIA_STATUS_CHANGED 0x01 /* Change in media status */
#define BTIF_AVRCP_EID_TRACK_CHANGED 0x02 /* Current track changed */
#define BTIF_AVRCP_EID_TRACK_END 0x03 /* Reached end of track */
#define BTIF_AVRCP_EID_TRACK_START 0x04 /* Reached track start */
#define BTIF_AVRCP_EID_PLAY_POS_CHANGED 0x05 /* Change in playback position.
* Returned after the specified
* playback notification change
* notification interval.
*/
#define BTIF_AVRCP_EID_BATT_STATUS_CHANGED 0x06 /* Change in battery status */
#define BTIF_AVRCP_EID_SYS_STATUS_CHANGED 0x07 /* Change in system status */
#define BTIF_AVRCP_EID_APP_SETTING_CHANGED 0x08 /* Change in player
* application setting
*/
#define BTIF_AVRCP_EID_NOW_PLAYING_CONTENT_CHANGED 0x09 /* Contents of the now playing
* list have changed
*/
#define BTIF_AVRCP_EID_AVAILABLE_PLAYERS_CHANGED 0x0A /* The available players have
* changed
*/
#define BTIF_AVRCP_EID_ADDRESSED_PLAYER_CHANGED 0x0B /* The addressed player has
* changed
*/
#define BTIF_AVRCP_EID_UIDS_CHANGED 0x0C /* The UIDS have changed */
#define BTIF_AVRCP_EID_VOLUME_CHANGED 0x0D /* The volume was changed */
#define BTIF_AVRCP_EID_FLAG_INTERIM 0x80 /* Used Internally */
/*---------------------------------------------------------------------------
* even mask
*/
typedef uint16_t avrcp_event_mask_t;
#define BTIF_AVRCP_ENABLE_PLAY_STATUS_CHANGED 0x0001 /* Change in playback
* status
*/
#define BTIF_AVRCP_ENABLE_MEDIA_STATUS_CHANGED 0x0001 /* Alias */
#define BTIF_AVRCP_ENABLE_TRACK_CHANGED 0x0002 /* Current track changed */
#define BTIF_AVRCP_ENABLE_TRACK_END 0x0004 /* Reached end of track */
#define BTIF_AVRCP_ENABLE_TRACK_START 0x0008 /* Reached track start */
#define BTIF_AVRCP_ENABLE_PLAY_POS_CHANGED 0x0010 /* Change in playback
* position
*/
#define BTIF_AVRCP_ENABLE_BATT_STATUS_CHANGED 0x0020 /* Change in battery
* status
*/
#define BTIF_AVRCP_ENABLE_SYS_STATUS_CHANGED 0x0040 /* Change in system status */
#define BTIF_AVRCP_ENABLE_APP_SETTING_CHANGED 0x0080 /* Change in player
* application setting
*/
#define BTIF_AVRCP_ENABLE_NOW_PLAYING_CHANGED 0x0100 /* Change in the now
* playing list
*/
#define BTIF_AVRCP_ENABLE_AVAIL_PLAYERS_CHANGED 0x0200 /* Available players
* changed
*/
#define BTIF_AVRCP_ENABLE_ADDRESSED_PLAYER_CHANGED 0x0400 /* Addressed player changed */
#define BTIF_AVRCP_ENABLE_UIDS_CHANGED 0x0800 /* UIDS changed */
#define BTIF_AVRCP_ENABLE_VOLUME_CHANGED 0x1000 /* Volume Changed */
typedef uint8_t btif_avrcp_capabilityId;
#define BTIF_AVRCP_CAPABILITY_COMPANY_ID 2
#define BTIF_AVRCP_CAPABILITY_EVENTS_SUPPORTED 3
/*---------------------------------------------------------------------------
* player attrId type
*/
typedef uint8_t avrcp_playerAttrId;
#define BTIF_AVRCP_PLAYER_EQ_STATUS 1 /* Player equalizer status */
#define BTIF_AVRCP_PLAYER_REPEAT_STATUS 2 /* Player repeat status */
#define BTIF_AVRCP_PLAYER_SHUFFLE_STATUS 3 /* Player Shuffle status */
#define BTIF_AVRCP_PLAYER_SCAN_STATUS 4 /* Player scan status */
/*---------------------------------------------------------------------------
* playerattrId mask type
*/
typedef uint16_t avrcp_player_attrId_mask_t;
#define BTIF_AVRCP_ENABLE_PLAYER_EQ_STATUS 0x0001
#define BTIF_AVRCP_ENABLE_PLAYER_REPEAT_STATUS 0x0002
#define BTIF_AVRCP_ENABLE_PLAYER_SHUFFLE_STATUS 0x0004
#define BTIF_AVRCP_ENABLE_PLAYER_SCAN_STATUS 0x0008
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_5 0x0010
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_6 0x0020
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_7 0x0040
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_8 0x0080
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_9 0x0100
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_10 0x0200
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_11 0x0400
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_12 0x0800
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_13 0x1000
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_14 0x2000
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_15 0x4000
#define BTIF_AVRCP_ENABLE_PLAYER_EXTENSION_ID_16 0x8000
#ifndef BTIF_AVRCP_MAX_FOLDER_DEPTH
#define BTIF_AVRCP_MAX_FOLDER_DEPTH 10
#endif
typedef uint8_t avrcp_eq_value_t;
#define BTIF_AVRCP_EQ_OFF 1
#define BTIF_AVRCP_EQ_ON 2
typedef uint8_t avrcp_repeat_value_t;
#define BTIF_AVRCP_REPEAT_OFF 1
#define BTIF_AVRCP_REPEAT_SINGLE 2
#define BTIF_AVRCP_REPEAT_ALL 3
#define BTIF_AVRCP_REPEAT_GROUP 4
typedef uint8_t avrcp_shuffle_value_t;
#define BTIF_AVRCP_SHUFFLE_OFF 1
#define BTIF_AVRCP_SHUFFLE_ALL 2
#define BTIF_AVRCP_SHUFFLE_GROUP 3
typedef uint8_t avrcp_scan_value_t;
#define BTIF_AVRCP_SCAN_OFF 1
#define BTIF_AVRCP_SCAN_ALL 2
#define BTIF_AVRCP_SCAN_GROUP 3
typedef uint8_t avrcp_ext_value_t;
typedef uint8_t avrcp_battery_status_t;
#define BTIF_AVRCP_BATT_STATUS_NORMAL 0
#define BTIF_AVRCP_BATT_STATUS_WARNING 1
#define BTIF_AVRCP_BATT_STATUS_CRITICAL 2
#define BTIF_AVRCP_BATT_STATUS_EXTERNAL 3
#define BTIF_AVRCP_BATT_STATUS_FULL_CHARGE 4
typedef uint8_t avrcp_system_status_t;
#define BTIF_AVRCP_SYS_POWER_ON 0
#define BTIF_AVRCP_SYS_POWER_OFF 1
#define BTIF_AVRCP_SYS_UNPLUGGED 2
typedef uint32_t avrcp_media_attrId_t;
#define BTIF_AVRCP_MEDIA_ATTR_TITLE 0x00000001
#define BTIF_AVRCP_MEDIA_ATTR_ARTIST 0x00000002
#define BTIF_AVRCP_MEDIA_ATTR_ALBUM 0x00000003
#define BTIF_AVRCP_MEDIA_ATTR_TRACK 0x00000004
#define BTIF_AVRCP_MEDIA_ATTR_NUM_TRACKS 0x00000005
#define BTIF_AVRCP_MEDIA_ATTR_GENRE 0x00000006
#define BTIF_AVRCP_MEDIA_ATTR_DURATION 0x00000007
typedef uint32_t avrcp_media_attrId_mask_t;
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_TITLE 0x01
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_ARTIST 0x02
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_ALBUM 0x04
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_TRACK 0x08
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_NUM_TRACKS 0x10
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_GENRE 0x20
#define BTIF_AVRCP_ENABLE_MEDIA_ATTR_DURATION 0x40
typedef uint8_t avrcp_media_status_t;
#define BTIF_AVRCP_MEDIA_STOPPED 0x00
#define BTIF_AVRCP_MEDIA_PLAYING 0x01
#define BTIF_AVRCP_MEDIA_PAUSED 0x02
#define BTIF_AVRCP_MEDIA_FWD_SEEK 0x03
#define BTIF_AVRCP_MEDIA_REV_SEEK 0x04
#define BTIF_AVRCP_MEDIA_ERROR 0xFF
typedef uint16_t avrcp_version_t;
/* Unable to determine the Hands Free Profile version that is supported */
#define BTIF_AVRCP_VERSION_UNKNOWN 0x0000
/* Supports Version 1.0 of the AVRCP Profile */
#define BTIF_AVRCP_VERSION_1_0 0x0100
/* Supports Version 1.3 of the AVRCP Profile */
#define BTIF_AVRCP_VERSION_1_3 0x0103
/* Supports Version 1.4 of the AVRCP Profile */
#define BTIF_AVRCP_VERSION_1_4 0x0104
typedef uint16_t avrcp_features_t;
/* Player/recorder features supported ("play" and "stop") */
#define BTIF_AVRCP_FEATURES_CATEGORY_1 0x0001
/* Monitor/amplifier features supported ("volume up" and "volume down") */
#define BTIF_AVRCP_FEATURES_CATEGORY_2 0x0002
/* Tuner features supported ("channel up" and "channel down") */
#define BTIF_AVRCP_FEATURES_CATEGORY_3 0x0004
/* Menu features supported ("root menu", "up", "down", "left", "right", and
* "select")
*/
#define BTIF_AVRCP_FEATURES_CATEGORY_4 0x0008
/* Player settings supported */
#define BTIF_AVRCP_FEATURES_PLAYER_SETTINGS 0x0010
/* Group navigation supported */
#define BTIF_AVRCP_FEATURES_GROUP_NAV 0x0020
#define BTIF_AVRCP_FEATURES_BROWSING 0x0040
#define BTIF_AVRCP_FEATURES_MULTIPLE_PLAYERS 0x0080
typedef uint8_t avrcp_maj_player_type_t;
#define BTIF_AVRCP_MAJ_PLAYER_AUDIO 0x01
#define BTIF_AVRCP_MAJ_PLAYER_VIDEO 0x02
#define BTIF_AVRCP_MAJ_PLAYER_AUD_BCAST 0x04
#define BTIF_AVRCP_MAJ_PLAYER_VID_BCAST 0x08
typedef uint32_t avrcp_player_sub_type_t;
#define BTIF_AVRCP_PLAYER_SUB_AUDIO_BOOK 0x00000001
#define BTIF_AVRCP_PLAYER_SUB_PODCAST 0x00000002
typedef uint8_t avrcp_scope_t;
#define BTIF_AVRCP_SCOPE_MEDIA_PLAYER_LIST 0x00
#define BTIF_AVRCP_SCOPE_VIRTUAL_FILESYS 0x01
#define BTIF_AVRCP_SCOPE_SEARCH 0x02
#define BTIF_AVRCP_SCOPE_NOW_PLAYING 0x03
typedef uint8_t avrcp_chg_path_direction_t;
#define BTIF_AVRCP_DIR_UP 0x00
#define BTIF_AVRCP_DIR_DOWN 0x01
typedef uint8_t avrcp_plyr_featr_byte_t;
/* Byte 0 */
#define BTIF_AVRCP_BRWS_0_FEAT_SELECT 0x01
#define BTIF_AVRCP_BRWS_0_FEAT_UP 0x02
#define BTIF_AVRCP_BRWS_0_FEAT_DOWN 0x04
#define BTIF_AVRCP_BRWS_0_FEAT_LEFT 0x08
#define BTIF_AVRCP_BRWS_0_FEAT_RIGHT 0x10
#define BTIF_AVRCP_BRWS_0_FEAT_RIGHT_UP 0x20
#define BTIF_AVRCP_BRWS_0_FEAT_RIGHT_DOWN 0x40
#define BTIF_AVRCP_BRWS_0_FEAT_LEFT_UP 0x80
/* Byte 1 */
#define BTIF_AVRCP_BRWS_1_FEAT_LEFT_DOWN 0x01
#define BTIF_AVRCP_BRWS_1_FEAT_ROOT_MENU 0x02
#define BTIF_AVRCP_BRWS_1_FEAT_SETUP_MENU 0x04
#define BTIF_AVRCP_BRWS_1_FEAT_CONTENTS_MENU 0x08
#define BTIF_AVRCP_BRWS_1_FEAT_FAVORITE_MENU 0x10
#define BTIF_AVRCP_BRWS_1_FEAT_EXIT 0x20
#define BTIF_AVRCP_BRWS_1_FEAT_0 0x40
#define BTIF_AVRCP_BRWS_1_FEAT_1 0x80
/* Byte 2 */
#define BTIF_AVRCP_BRWS_2_FEAT_2 0x01
#define BTIF_AVRCP_BRWS_2_FEAT_3 0x02
#define BTIF_AVRCP_BRWS_2_FEAT_4 0x04
#define BTIF_AVRCP_BRWS_2_FEAT_5 0x08
#define BTIF_AVRCP_BRWS_2_FEAT_6 0x10
#define BTIF_AVRCP_BRWS_2_FEAT_7 0x20
#define BTIF_AVRCP_BRWS_2_FEAT_8 0x40
#define BTIF_AVRCP_BRWS_2_FEAT_9 0x80
/* Byte 3 */
#define BTIF_AVRCP_BRWS_3_FEAT_DOT 0x01
#define BTIF_AVRCP_BRWS_3_FEAT_ENTER 0x02
#define BTIF_AVRCP_BRWS_3_FEAT_CLEAR 0x04
#define BTIF_AVRCP_BRWS_3_FEAT_CHNL_UP 0x08
#define BTIF_AVRCP_BRWS_3_FEAT_CHNL_DOWN 0x10
#define BTIF_AVRCP_BRWS_3_FEAT_PREV_CHNL 0x20
#define BTIF_AVRCP_BRWS_3_FEAT_SOUND_SEL 0x40
#define BTIF_AVRCP_BRWS_3_FEAT_INPUT_SEL 0x80
/* Byte 4 */
#define BTIF_AVRCP_BRWS_3_FEAT_DISPLAY_INFO 0x01
#define BTIF_AVRCP_BRWS_4_FEAT_HELP 0x02
#define BTIF_AVRCP_BRWS_4_FEAT_PG_UP 0x04
#define BTIF_AVRCP_BRWS_4_FEAT_PG_DOWN 0x08
#define BTIF_AVRCP_BRWS_4_FEAT_POWER 0x10
#define BTIF_AVRCP_BRWS_4_FEAT_VOL_UP 0x20
#define BTIF_AVRCP_BRWS_4_FEAT_VOL_DOWN 0x40
#define BTIF_AVRCP_BRWS_4_FEAT_MUTE 0x80
/* Byte 5 */
#define BTIF_AVRCP_BRWS_5_FEAT_PLAY 0x01
#define BTIF_AVRCP_BRWS_5_FEAT_STOP 0x02
#define BTIF_AVRCP_BRWS_5_FEAT_PAUSE 0x04
#define BTIF_AVRCP_BRWS_5_FEAT_RECORD 0x08
#define BTIF_AVRCP_BRWS_5_FEAT_REWIND 0x10
#define BTIF_AVRCP_BRWS_5_FEAT_FF 0x20
#define BTIF_AVRCP_BRWS_5_FEAT_EJECT 0x40
#define BTIF_AVRCP_BRWS_5_FEAT_FORWARD 0x80
/* Byte 6 */
#define BTIF_AVRCP_BRWS_6_FEAT_BACKWARD 0x01
#define BTIF_AVRCP_BRWS_6_FEAT_ANGLE 0x02
#define BTIF_AVRCP_BRWS_6_FEAT_SUBPIC 0x04
#define BTIF_AVRCP_BRWS_6_FEAT_F1 0x08
#define BTIF_AVRCP_BRWS_6_FEAT_F2 0x10
#define BTIF_AVRCP_BRWS_6_FEAT_F3 0x20
#define BTIF_AVRCP_BRWS_6_FEAT_F4 0x40
#define BTIF_AVRCP_BRWS_6_FEAT_F5 0x80
/* Byte 7 */
#define BTIF_AVRCP_BRWS_7_FEAT_VENDOR_UNIQUE 0x01
#define BTIF_AVRCP_BRWS_7_FEAT_GROUP_NAV 0x02
#define BTIF_AVRCP_BRWS_7_FEAT_ADVANCED_CTRL 0x04
#define BTIF_AVRCP_BRWS_7_FEAT_BROWSING 0x08
#define BTIF_AVRCP_BRWS_7_FEAT_SEARCHING 0x10
#define BTIF_AVRCP_BRWS_7_FEAT_ADD_TO_PLAYING 0x20
#define BTIF_AVRCP_BRWS_7_FEAT_UIDS_UNIQUE 0x40
#define BTIF_AVRCP_BRWS_7_FEAT_BRWS_WHEN_ADDRESSED 0x80
/* Byte 8 */
#define BTIF_AVRCP_BRWS_8_SEARCH_WHEN_ADDRESSED 0x01
#define BTIF_AVRCP_BRWS_8_NOW_PLAYING 0x02
#define BTIF_AVRCP_BRWS_8_UID_PERSISTENT 0x04
typedef uint8_t avrcp_item_type_t;
#define BTIF_AVRCP_ITEM_MEDIA_PLAYER 0x01
#define BTIF_AVRCP_ITEM_FOLDER 0x02
#define BTIF_AVRCP_ITEM_MEDIA_ELEMENT 0x03
typedef uint8_t avrcp_folder_type_t;
#define BTIF_AVRCP_FOLDER_TYPE_MIXED 0x00
#define BTIF_AVRCP_FOLDER_TYPE_TITLES 0x01
#define BTIF_AVRCP_FOLDER_TYPE_ALBUMS 0x02
#define BTIF_AVRCP_FOLDER_TYPE_ARTISTS 0x03
#define BTIF_AVRCP_FOLDER_TYPE_GENRES 0x04
#define BTIF_AVRCP_FOLDER_TYPE_PLAYLISTS 0x05
#define BTIF_AVRCP_FOLDER_TYPE_YEARS 0x06
typedef uint8_t avrcp_is_playable_t;
typedef uint16_t avrcp_capabilityId_t;
typedef void avrcp_advanced_pdu_t;
#define BTIF_AVRCP_IS_NOT_PLAYABLE 0x00
#define BTIF_AVRCP_IS_PLAYABLE 0x01
typedef uint8_t avrcp_media_type_t;
#define BTIF_AVRCP_MEDIA_TYPE_AUDIO 0x00
#define BTIF_AVRCP_MEIDA_TYPE_VIDEO 0x01
#define BTIF_AVCTP_RESPONSE_INTERIM 0x0F
typedef struct {
/* Index 0 == Off, Index 1 == On */
const char *string[2];
uint8_t len[2];
} avrcp_eq_string_t;
typedef struct {
/* Index 0 == Off, Index 1 == Single, Index 2 == All, Index 3 == Group */
const char *string[4];
uint8_t len[4];
} avrcp_repeat_string_t;
typedef struct {
/* Index 0 == Off, Index 1 == All, Index 2 == Group */
const char *string[3];
uint8_t len[3];
} avrcp_shuffle_string_t;
typedef struct {
/* Index 0 == Off, Index 1 == All, Index 2 == Group */
const char *string[3];
uint8_t len[3];
} avrcp_scan_string_t;
#ifndef BTIF_AVRCP_MAX_PLAYER_STRINGS
#define BTIF_AVRCP_MAX_PLAYER_STRINGS 5
#endif
/*--------------------------------------------------------------------------
* NUM PLAYER SETTINGS constant
*/
#define BTIF_AVRCP_PANEL_STATE_NONE 0
#define BTIF_AVRCP_PANEL_STATE_C_IDLE 1
#define BTIF_AVRCP_PANEL_STATE_C_PRESS 2
#define BTIF_AVRCP_PANEL_STATE_C_PRESS_R 3
#define BTIF_AVRCP_PANEL_STATE_C_RELEASE 4
#define BTIF_AVRCP_PANEL_STATE_C_SKIP 5
#define BTIF_AVRCP_PANEL_STATE_T_IDLE 101
#define BTIF_AVRCP_PANEL_STATE_T_PRESS 102
#define BTIF_AVRCP_PANEL_STATE_T_HOLD 103
typedef struct {
/* Number of extended player settings */
uint8_t numStrings;
const char *string[BTIF_AVRCP_MAX_PLAYER_STRINGS]; /* The player setting string */
uint8_t len[BTIF_AVRCP_MAX_PLAYER_STRINGS]; /* The player setting string length */
} avrcp_ext_string_t;
typedef uint8_t avrcp_player_attrId_t;
typedef struct {
avrcp_player_attrId_t attrId; /* Media Player Attribute ID */
union {
avrcp_eq_value_t eq;
avrcp_repeat_value_t repeat;
avrcp_shuffle_value_t shuffle;
avrcp_scan_value_t scan;
avrcp_ext_value_t extValue;
uint8_t value; /* Used Internally */
} setting;
} avrcp_player_setting_t;
typedef struct {
const char *attrString; /* Media Player Attribute Text */
uint8_t attrLen; /* Length of the Attribute Text */
union {
avrcp_eq_string_t eq; /* Equalizer status */
avrcp_repeat_string_t repeat; /* Repeat mode status */
avrcp_shuffle_string_t shuffle; /* Shuffle mode status */
avrcp_scan_string_t scan; /* Scan mode status */
avrcp_ext_string_t ext; /* Extended settings status */
} setting;
} avrcp_player_strings_t;
typedef struct {
avrcp_media_attrId_t attrId; /* Media element attribute ID */
const char *string; /* The media element */
uint16_t length; /* Length of the media element */
} avrcp_media_info_t;
typedef struct {
uint8_t numCharSets;
uint16_t charSets[BTIF_AVRCP_MAX_CHAR_SETS];
} avrcp_char_sets_t;
typedef struct {
uint32_t length;
uint32_t position;
avrcp_media_status_t mediaStatus;
} avrcp_media_play_status_t;
typedef struct {
uint16_t nameLen;
const char *name;
} avrcp_folder_t;
typedef struct {
/* Used Internally */
list_entry_t node;
/* Used Internally */
uint16_t playerId;
/* Major Player Type */
avrcp_maj_player_type_t majorType;
/* Player Sub Type */
avrcp_player_sub_type_t subType;
/* Current media play status */
avrcp_media_status_t mediaStatus;
/* Player feature bitmask */
avrcp_plyr_featr_byte_t features[16];
/* Displayable character set */
uint16_t charSet;
/* Player name length */
uint16_t nameLen;
/* Player name */
const char *name;
/* Folder depth */
uint16_t folderDepth;
/* Current folder */
avrcp_folder_t folder[BTIF_AVRCP_MAX_FOLDER_DEPTH];
/* Number of items in the current folder */
uint32_t numItems;
} avrcp_media_player_item_t;
typedef uint16_t avrcp_event_mask_t;
typedef uint8_t avrcp_operation_t;
typedef struct _AvrcpFolderItem {
/* The UID of this media element */
uint8_t uid[8];
/* Folder Type */
avrcp_folder_type_t folderType;
/* Is Playable Flag */
avrcp_is_playable_t isPlayable;
/* Character Set */
uint16_t charSet;
/* The name length of this media element */
uint16_t nameLen;
/* The name of this media element */
uint8_t *name;
} avrcp_folder_item_t;
typedef struct {
/* Attribute ID */
avrcp_media_attrId_t attrId;
/* Character Set */
uint16_t charSet;
/* Attribute Length */
uint16_t valueLen;
/* Attribute Name */
uint8_t *value;
} avrcp_media_attribute_t;
typedef struct {
/* The UID of this media element */
uint8_t uid[8];
/* Media type (audio or video) */
avrcp_media_type_t mediaType;
/* Character Set */
uint16_t charSet;
/* The name length of this media element */
uint16_t nameLen;
/* The name of this media element */
uint8_t *name;
/* Number of media attributes */
uint8_t numAttrs;
/* Media Attributes */
avrcp_media_attribute_t attrs[BTIF_AVRCP_NUM_MEDIA_ATTRIBUTES];
} avrcp_media_element_item_t;
typedef uint8_t avrcp_Item_type_t;
typedef struct {
/* Media Item Type */
avrcp_Item_type_t itemType;
/* The Media Item */
union {
avrcp_media_player_item_t player;
avrcp_folder_item_t folder;
avrcp_media_element_item_t element;
} item;
} avrcp_media_item_t;
typedef struct {
/* The most significant 32 bits of the track index information. */
uint32_t msU32;
/* The least significant 32 bits of the track index information. */
uint32_t lsU32;
} avrcp_track_struct_t;
typedef struct {
/* Transaction ID of the request */
uint32_t transId;
union {
/* Contains an item to be played on the addressed media player. This
* is valid when "advOp" is set to AVRCP_OP_PLAY_ITEM or
* AVRCP_OP_ADD_TO_NOW_PLAYING.
*/
struct {
avrcp_scope_t scope;
uint8_t uid[8];
uint16_t uidCounter;
} item;
} p;
} avrcp_adv_req_parms_t;
typedef union {
/* The value of each player setting. This is valid when "advOp" is set
* to AVRCP_OP_SET_PLAYER_SETTING_VALUE.
*/
avrcp_player_setting_t playerSetting;
struct {
/* Bitmask that describes which
* attributes are being reported
*/
avrcp_player_attrId_mask_t attrMask;
/* The equalizer setting. */
avrcp_eq_value_t eq;
/* The repeat setting. */
avrcp_repeat_value_t repeat;
/* The shuffle setting. */
avrcp_shuffle_value_t shuffle;
/* The scan setting. */
avrcp_scan_value_t scan;
#if BTIF_AVRCP_NUM_PLAYER_SETTINGS > 4
/* Extended player setting. */
avrcp_ext_value_t extValue[BTIF_AVRCP_NUM_PLAYER_SETTINGS - 4];
#endif /* */
} setting;
/* The list of character sets displayable on the controller.
* This is valid when "advOp" is set to AVRCP_OP_INFORM_DISP_CHAR_SET. The
* default is 106 (UTF-8).
*/
avrcp_char_sets_t charSet;
/* The battery status of the controller.
* This is valid when "advOp" is set to AVRCP_OP_INFORM_BATT_STATUS.
*/
avrcp_battery_status_t battStatus;
#if BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED
/* The Absolute Volume
* This is valid when "advOp" is set to AVRCP_OP_SET_ABSOLUTE_VOLUME.
*/
uint8_t volume;
/* The addressed player
* This is valid when "advOp" is set to AVRCP_OP_SET_ADDRESSED_PLAYER.
*/
avrcp_media_player_item_t *addrPlayer;
#endif /* BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED */
} avrcp_adv_inf_parms_t;
typedef struct {
avrcp_player_attrId_t attrId;
uint16_t charSet;
uint8_t length;
const char *string;
} avrcp_player_attrib_t;
typedef struct {
uint8_t valueId;
uint16_t charSet;
uint8_t length;
const char *string;
} avrcp_player_settings_t;
typedef struct {
U32 attrId;
uint16_t charSet;
uint16_t length;
const char *string;
} avrcp_media_attr_t;
typedef uint16_t avrcp_player_attrId_mask_t;
typedef struct {
uint32_t length;
uint32_t position;
uint8_t mediaStatus;
} adv_play_status_t;
typedef union {
/* The capabilities of the target.
* This is valid when "advOp" is set to AVRCP_OP_GET_CAPABILITIES.
*/
struct {
/* The type of capability. */
uint8_t type;
/* The capability info. */
union {
/* The list of company IDs.
* (type == AVRCP_CAPABILITY_COMPANY_ID)
*/
struct {
/* The number of supported company IDs. */
uint8_t numIds;
/* An array of company IDs (3 bytes each). */
uint8_t *ids;
} companyId;
/* A bitmask of the supported events.
* (type == AVRCP_CAPABILITY_EVENTS_SUPPORTED)
*/
uint16_t eventMask;
} info;
} capability;
/* A bitmask that indicates the player settings supported by
* the target device.
* This is valid when "advOp" is set to
* AVRCP_OP_LIST_PLAYER_SETTING_ATTRIBS.
*/
uint16_t attrMask;
/* The list of values for the requested attribute on the target
* device.
* This is valid when "advOp" is set to AVRCP_OP_LIST_PLAYER_SETTING_VALUES.
*/
struct {
/* The number of supported value IDs. */
uint8_t numIds;
/* An array of value ID (1 byte each). */
uint8_t *ids;
} attrValues;
/* The text of each player setting attribute.
* This is valid when "advOp" is set to
* AVRCP_OP_GET_PLAYER_SETTING_ATTR_TEXT
*/
struct {
/* The number of attribute IDs returned. */
uint8_t numIds;
/* An array of attribute text information */
avrcp_player_attrib_t txt[BTIF_AVRCP_NUM_PLAYER_SETTINGS];
} attrStrings;
/* The value of each player setting.
* This is valid when "advOp" is set to AVRCP_OP_GET_PLAYER_SETTING_VALUE.
*/
struct {
/* Bitmask that describes which
* attributes are being reported
*/
avrcp_player_attrId_mask_t attrMask;
/* The equalizer setting. */
avrcp_eq_value_t eq;
/* The repeat setting. */
avrcp_repeat_value_t repeat;
/* The shuffle setting. */
avrcp_shuffle_value_t shuffle;
/* The scan setting. */
avrcp_scan_value_t scan;
#if BTIF_AVRCP_NUM_PLAYER_SETTINGS > 4
/* Extended player setting. */
avrcp_ext_value_t extValue[BTIF_AVRCP_NUM_PLAYER_SETTINGS - 4];
#endif /* */
} setting;
/* The list of setting values for the requested attribute on the target.
* This is valid when "advOp" is set to
* AVRCP_OP_GET_PLAYER_SETTING_VALUE_TEXT.
*/
struct {
/* The number of settings returned */
uint8_t numSettings;
/* An array of value text information */
avrcp_player_settings_t txt[BTIF_AVRCP_NUM_PLAYER_SETTINGS];
} settingStrings;
/* The list of element values for the current track on the
* target. This is valid when "advOp" is set to AVRCP_OP_GET_MEDIA_INFO.
*/
struct {
/* The number of elements returned */
uint8_t numIds;
/* An array of element value text information */
avrcp_media_attr_t txt[BTIF_AVRCP_NUM_MEDIA_ATTRIBUTES];
} element;
adv_play_status_t playStatus;
#if BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED
/* The Absolute Volume
* This is valid when "advOp" is set to AVRCP_OP_SET_ABSOLUTE_VOLUME.
*/
uint8_t volume;
#endif /* BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED */
} avrcp_adv_rsp_parms_t;
/*---------------------------------------------------------------------------
* AvrcpNotifyParms structure
*
* Defines the callback parameters for AVRCP_EVENT_ADV_RESPONSE when "advOp" is
* set to AVRCP_OP_REGISTER_NOTIFY, and for the AVRCP_EVENT_ADV_NOTIFY event.
*/
typedef struct {
/* Defines the event ID that was received */
avrcp_event_Id_t event;
union {
/* Play status of the media. Valid when the event ID is
* AVRCP_EID_MEDIA_STATUS_CHANGED.
*/
avrcp_media_status_t mediaStatus;
/* The current track. Valid when the event ID is
* AVRCP_EID_TRACK_CHANGED.
*/
avrcp_track_struct_t track;
/* The position (ms) of the current track. Valid when the event
* ID is AVRCP_EID_PLAY_POS_CHANGED.
*/
uint32_t position;
/* The battery status of the target. Valid when the event ID is
* AVRCP_EID_BATT_STATUS_CHANGED.
*/
avrcp_battery_status_t battStatus;
/* The system status of the target. Valid when the event ID is
* AVRCP_EID_SYS_STATUS_CHANGED.
*/
avrcp_system_status_t sysStatus;
/* The player settings. Valid when the event ID is
* AVRCP_EID_APP_SETTING_CHANGED
*/
struct {
/* Bitmask that describes which
* attributes are being reported
*/
avrcp_player_attrId_mask_t attrMask;
/* The equalizer setting. */
avrcp_eq_value_t eq;
/* The repeat setting. */
avrcp_repeat_value_t repeat;
/* The shuffle setting. */
avrcp_shuffle_value_t shuffle;
/* The scan setting. */
avrcp_scan_value_t scan;
#if BTIF_AVRCP_NUM_PLAYER_SETTINGS > 4
/* Extended player setting. */
avrcp_ext_value_t extValue[BTIF_AVRCP_NUM_PLAYER_SETTINGS - 4];
#endif /* */
} setting;
#if BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED
/* Absolute volume. Valid when the event ID is
* AVRCP_EID_VOLUME_CHANGED.
*/
uint8_t volume;
/* The addressed player. Valid when the event ID is
* AVRCP_EID_ADDRESSED_PLAYER_CHANGED.
*/
struct {
uint16_t playerId;
uint16_t uidCounter;
} addrPlayer;
/* The UID counter. Valid when the event ID is
* AVRCP_EID_UIDS_CHANGED.
*/
uint16_t uidCounter;
#endif /* BTIF_AVRCP_VERSION_1_3_ONLY == BTIF_DISABLED */
} p;
} avrcp_adv_notify_parms_t;
typedef struct {
uint8_t transId;
union {
/* Folder Item. Valid when "advOp" is AVRCP_OP_GET_FOLDER_ITEMS */
struct {
avrcp_scope_t scope; /* The requested scope */
uint32_t start; /* The starting item */
uint32_t end; /* The ending item */
uint8_t numAttrs; /* Number of attributes requested */
uint8_t *attrList; /* List of attributes requested */
} folder;
/* Path. Valid when "advOp" is AVRCP_OP_CHANGE_PATH */
struct {
uint16_t uidCounter; /* Current UID counter */
uint8_t direction; /* Direction to change in the path (up or down) */
uint8_t *uid; /* UID of folder to change to (down) */
} chPath;
/* Item Attributes. Valid when "advOp" is AVRCP_OP_GET_ITEM_ATTRIBUTES */
struct {
avrcp_scope_t scope; /* The requested scope */
uint8_t *uid; /* UID of the requested item */
uint16_t uidCounter; /* Current UID counter */
uint8_t numAttrs; /* Number of attributes requested */
uint8_t *attrList; /* List of attributes requested */
} attr;
/* Search. Valid when "advOp" is AVRCP_OP_SEARCH */
struct {
uint16_t charSet; /* Character set of the search string */
uint16_t len; /* Length of the search string */
uint8_t *str; /* Search string */
} search;
} p;
} avrcp_browse_req_parms_t;
typedef union {
/* The browsed player. Valid when "advOp" is AVRCP_OP_SET_BROWSED_PLAYER
*/
avrcp_media_player_item_t *brwsPlayer;
} avrcp_browse_inf_parms_t;
typedef union {
/* Browsed Player. Valid when "advOp" is AVRCP_OP_SET_BROWSED_PLAYER */
struct {
uint16_t uidCounter; /* Current UID counter */
uint32_t numItems; /* Number of items in the current path */
uint16_t charSet; /* Character set used by the player */
uint8_t fDepth; /* Number of folder length/name pairs to follow */
uint8_t *list; /* List of folder names */
} brwsPlayer;
/* Folder Items. Valid when "advOp" is AVRCP_OP_GET_FOLDER_ITEMS */
struct {
uint16_t uidCounter; /* Current UID counter */
uint32_t numItems; /* Number of items in the current path */
uint8_t *list; /* List of items returned */
} fldrItems;
/* Change Path. Valid when "advOp" is AVRCP_OP_CHANGE_PATH */
struct {
uint32_t numItems; /* Number of items in the current path */
} chPath;
/* Item Attributes. Valid when "advOp" is AVRCP_OP_GET_ITEM_ATTRIBUTES */
struct {
uint8_t numAttrs; /* Number of attributes returned */
uint8_t *list; /* List of attributes returned */
} itemAttrs;
/* Search. Valid when "advOp" is AVRCP_OP_SEARCH */
struct {
uint16_t uidCounter; /* Current UID counter */
uint32_t numItems; /* Number of items found in the search */
} search;
} avrcp_browse_rsp_parms_t;
typedef struct {
/* Operation to which the remote target responded */
uint16_t operation;
/* The press state of the key in the command to which
* the target responded.
*/
BOOL press;
/* Response from the target. May indicate
* an "extended" response code such as
* AVRCP_RESPONSE_SKIPPED or AVRCP_RESPONSE_TIMEOUT.
*/
uint8_t response;
} avrcp_panel_cnf_t;
typedef struct {
/* Operation corresponding to the key pressed, held, or
* released. AVRCP will only indicate a new operation
* when the previous one has been _RELEASE'd.
*/
uint16_t operation;
} avrcp_panel_ind_t;
/* Channel Packet */
typedef struct {
list_entry_t node;
U8 transId;
U8 msgType;
U8 msgHdrLen;
U8 msgHdr[BTIF_AVTP_HEADER_LEN];
U8 txIdSize;
U16 txId;
U16 txDataLen;
U8 *txData;
U32 context;
} avtp_packet_t;
typedef struct {
list_entry_t node; /* Used internally by AVCTP. */
uint8_t transId; /* Transaction ID */
uint8_t ctype; /* 4 bits */
uint8_t subunitType; /* 5 bits */
uint8_t subunitId; /* 3 bits */
uint8_t opcode; /* 8 bits */
uint8_t headerLen; /* Header length */
uint8_t header[6]; /* Header information */
uint16_t operandLen; /* Length of buffer in "operands" */
uint8_t *operands; /* Buffer containing the command data */
BOOL more; /* Indicates whether to expect additional
* frames containing more operand data. */
avtp_packet_t avtpPacket; /* For sending over AVTP */
// EvmTimer timer; /* Timer for the command */
} avctp_cmd_frame_t;
enum {
BTIF_AVRCP_STATE_DISCONNECTED,
BTIF_AVRCP_STATE_CONNECTED
};
typedef void avrcp_callback_parms_t;
typedef void (*btif_avrcp_callback)(btif_avrcp_chnl_handle_t chnl, const avrcp_callback_parms_t *parms);
static POSSIBLY_UNUSED inline btif_avctp_event_t btif_convert_avrcp_event(btif_avrcp_event_t event)
{
return (btif_avctp_event_t) event;
}
#define BTIF_AVRCP_EVENT(stack_avrcp_event) btif_convert_avrcp_event(stack_avrcp_event)
#define BTIF_AVRCP_ERROR_CODE(statck_error_code) statck_error_code
typedef struct
{
list_entry_t node;
U8 op;
U16 parm_len;
U8 *parms;
U8 trans_id;
BOOL more;
U16 cur_len;
U16 bytes_to_send;
U8 cont_op;
BOOL abort;
BOOL internal;
U8 response;
U8 error;
BOOL is_cmd;
U8 ctype; /* 4 bits */
} btif_avrcp_advanced_cmd_pdu_t ;
typedef struct
{
bool free;
uint8_t state;
list_entry_t tx_cmd_list;
CQueue tx_op_queue;
uint8_t tx_op_queue_buff[BTIF_AVRCP_SUBUNIT_OP_QUEUE_MAX*3]; // 3 bytes per operation
avctp_cmd_frame_t rx_cmd_frame;
uint8_t rx_frag_buff[BTIF_AVRCP_RX_FRAG_BUFF_SIZE];
uint32_t rx_frag_buff_offset;
struct
{
avrcp_event_mask_t rem_eventMask;
btif_avrcp_advanced_cmd_pdu_t *tx_cmd;
} adv;
btif_avrcp_callback cb;
btif_avrcp_chnl_handle_t avrcp_channel_handle;
} btif_avrcp_channel_t;
typedef struct
{
btif_avrcp_advanced_cmd_pdu_t *tx_cmd;
avrcp_adv_rsp_parms_t rsp;
avrcp_adv_notify_parms_t notify;
} btif_avrcp_rsp_adv;
typedef struct
{
btif_avrcp_event_t event;
btif_avrcp_channel_t *channel;
bt_status_t status;
uint8_t error_code;
btif_avrcp_operation_t adv_op;
union
{
avctp_cmd_frame_t *cmdFrame;
btif_avrcp_rsp_adv adv;
avrcp_panel_cnf_t panel_cnf;
avrcp_panel_ind_t panel_ind;
} p;
} btif_avrcp_callback_parms_t;
#ifdef __cplusplus
extern "C" {
#endif
void btif_avrcp_init(btif_app_bt_device_t btif_app_bt_device);
bt_status_t btif_avrcp_register(btif_avrcp_channel_t *channel, btif_avrcp_callback cb, avrcp_features_t feat);
btif_avrcp_channel_t *btif_alloc_avrcp_channel(void);
btif_avrcp_channel_t *btif_get_avrcp_channel(btif_avrcp_chnl_handle_t handle);
btif_avctp_event_t btif_avrcp_get_callback_event(const avrcp_callback_parms_t * parms);
bool btif_avrcp_state_connected(btif_avrcp_channel_t * channel);
void btif_avrcp_set_volume_cmd(void *cmd, uint8_t transid, int8_t volume);
void btif_avrcp_register_read_remote_sdp_callback(void (*cb)(btif_avrcp_chnl_handle_t chnl, uint16_t version, uint16_t features));
void btif_avrcp_send_custom_cmd_generic(btif_avrcp_channel_t * chnl, uint8_t * ptrData,
uint32_t len);
bt_status_t btif_avrcp_ct_accept_custom_cmd_rsp(btif_avrcp_channel_t * chnl, void *cmd_res,
uint8_t isAccept);
bt_status_t btif_avrcp_connect(btif_avrcp_channel_t * channel, bt_bdaddr_t * addr);
bt_status_t btif_avrcp_connect_rsp(btif_avrcp_channel_t * chnl, BOOL accept);
bt_status_t btif_avrcp_disconnect(btif_avrcp_chnl_handle_t channel);
bt_status_t btif_avrcp_ct_get_play_status(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * cmd);
avrcp_version_t btif_get_avrcp_version(btif_avrcp_channel_t * channel);
bt_status_t btif_avrcp_ct_get_capabilities(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * pdu,
btif_avrcp_capabilityId capabilityId);
void btif_set_avrcp_state(btif_avrcp_channel_t * channel, uint8_t avrcp_state);
uint8_t btif_get_avrcp_state(btif_avrcp_channel_t * channel);
bool btif_avrcp_is_control_channel_connected(btif_avrcp_channel_t * channel);
btif_remote_device_t *btif_avrcp_get_remote_device(btif_avrcp_chnl_handle_t handle);
uint8_t btif_avrcp_get_channel_panel_int_state(btif_avrcp_chnl_handle_t handle);
uint8_t btif_avrcp_get_channel_avrcp_state(btif_avrcp_chnl_handle_t handle);
void btif_avrcp_set_register_notify_check_callback(bool (*cb)(uint8_t event), void (*resp_cb)(uint8_t event));
bt_status_t btif_avrcp_ct_register_notification(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * pdu,
btif_avrcp_event_t eventId, uint32_t interval);
void btif_avrcp_ct_register_notify_response_check(btif_avrcp_channel_t * channel, uint8_t event);
bt_status_t btif_get_avrcp_cb_channel_state(const avrcp_callback_parms_t * parms);
avrcp_error_code_t btif_get_avrcp_cb_channel_error_code(const avrcp_callback_parms_t * parms);
btif_avrcp_operation_t btif_get_avrcp_cb_channel_advOp(const avrcp_callback_parms_t * parms);
void *btif_get_avrcp_cb_txPdu(const avrcp_callback_parms_t * parms);
btif_avrcp_operation_t btif_get_avrcp_cb_txPdu_Op(const avrcp_callback_parms_t * parms);
uint8_t btif_get_avrcp_pdu_ctype(void * adv_pdu);
uint8_t btif_get_avrcp_cb_txPdu_transId(const avrcp_callback_parms_t * parms);
avrcp_role_t btif_get_avrcp_cb_channel_role(btif_avrcp_channel_t * channel);
avrcp_panel_cnf_t *btif_get_panel_cnf(const avrcp_callback_parms_t * parms);
avrcp_role_t btif_get_avrcp_channel_role(btif_avrcp_channel_t * channel);
adv_play_status_t *btif_get_avrcp_adv_rsp_play_status(const avrcp_callback_parms_t * parms);
avrcp_adv_rsp_parms_t *btif_get_avrcp_adv_rsp(const avrcp_callback_parms_t * parms);
avrcp_adv_notify_parms_t *btif_get_avrcp_adv_notify(const avrcp_callback_parms_t * parms);
avrcp_event_mask_t btif_get_avrcp_adv_rem_event_mask(btif_avrcp_channel_t * channel);
void btif_set_avrcp_adv_rem_event_mask(btif_avrcp_channel_t * channel, uint16_t mask);
void btif_set_app_bt_device_avrcp_notify_rsp_ctype(avrcp_advanced_pdu_t * cmd, uint8_t type);
uint8_t btif_get_app_bt_device_avrcp_notify_rsp_transid(avrcp_advanced_pdu_t * cmd);
bt_status_t btif_avrcp_ct_get_media_Info(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * cmd,
avrcp_media_attrId_mask_t mediaMask);
avctp_cmd_frame_t *btif_get_avrcp_cmd_frame(const avrcp_callback_parms_t * parms);
void btif_avrcp_set_capabilities_rsp_cmd(avrcp_advanced_pdu_t * cmd_pdu, uint8_t transId,
uint8_t type);
void btif_avrcp_set_control_rsp_cmd(avrcp_advanced_pdu_t * cmd_pdu, uint8_t transId,
uint8_t type);
void btif_avrcp_set_control_rsp_cmd_witherror(avrcp_advanced_pdu_t * cmd_pdu, uint8_t transId, uint8_t type, uint8_t error);
bt_status_t btif_avrcp_ct_get_capabilities_rsp(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * cmd_pdu,
avrcp_capabilityId_t capid, uint16_t mask);
bt_status_t btif_avrcp_ct_get_capabilities_company_id_rsp(btif_avrcp_channel_t * channel, avrcp_advanced_pdu_t * cmd_pdu);
bt_status_t btif_avrcp_ct_accept_absolute_volume_rsp(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * cmd_pdu,
uint8_t volume);
void btif_avrcp_set_notify_rsp_cmd(avrcp_advanced_pdu_t * cmd_pdu, uint8_t transId,
uint8_t type);
void btif_avrcp_set_notify_rsp_cmd_witherror(avrcp_advanced_pdu_t * cmd_pdu, uint8_t transId, uint8_t type, uint8_t error);
void btif_avrcp_recheck_vol_ctrl_flag(uint8_t * flag);
bt_status_t btif_avrcp_ct_get_absolute_volume_rsp(btif_avrcp_channel_t * channel,
avrcp_advanced_pdu_t * cmd_pdu,
uint8_t volume);
bt_status_t btif_avrcp_tg_absolute_volume_notify(btif_avrcp_channel_t * channel, avrcp_advanced_pdu_t * cmd_pdu, uint8_t volume);
uint16_t btif_avrcp_get_cmgrhandler_remDev_hciHandle(btif_avrcp_channel_t * channel);
avrcp_panel_cnf_t *btif_get_avrcp_panel_cnf(const avrcp_callback_parms_t * parms);
avrcp_panel_ind_t *btif_get_avrcp_panel_ind(const avrcp_callback_parms_t * parms);
bt_status_t btif_avrcp_set_panel_key(btif_avrcp_channel_t * channel, avrcp_panel_operation_t op,
bool press);
uint8_t btif_avrcp_get_ctl_trans_id(btif_avrcp_channel_t * channel);
void btif_avrcp_set_ctl_trans_id(btif_avrcp_channel_t * channel, uint8_t trans_id);
bt_status_t btif_avrcp_ct_set_absolute_volume(btif_avrcp_channel_t *channel, avrcp_advanced_pdu_t *_pdu, uint8_t volume);
void btif_avrcp_set_channel_adv_event_mask(btif_avrcp_chnl_handle_t handle, uint16_t mask);
bt_status_t btif_avrcp_tg_send_general_rsp(btif_avrcp_channel_t * channel, avrcp_advanced_pdu_t * cmd_pdu, uint8_t op, uint8_t error_code);
bt_status_t btif_avrcp_ct_invalid_volume_rsp(btif_avrcp_channel_t * channel, avrcp_advanced_pdu_t * cmd_pdu);
#if defined(IBRT)
uint32_t btif_avrcp_profile_save_ctxs(btif_remote_device_t *rem_dev, uint8_t *buf, uint32_t buf_len);
uint32_t btif_avrcp_profile_restore_ctxs(uint8_t *buf, uint32_t buf_len);
#endif
#ifdef __cplusplus
}
#endif
#endif