1*be32e7f1SMilanka Ringwald /* 2*be32e7f1SMilanka Ringwald * Copyright (C) 2016 BlueKitchen GmbH 3*be32e7f1SMilanka Ringwald * 4*be32e7f1SMilanka Ringwald * Redistribution and use in source and binary forms, with or without 5*be32e7f1SMilanka Ringwald * modification, are permitted provided that the following conditions 6*be32e7f1SMilanka Ringwald * are met: 7*be32e7f1SMilanka Ringwald * 8*be32e7f1SMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 9*be32e7f1SMilanka Ringwald * notice, this list of conditions and the following disclaimer. 10*be32e7f1SMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11*be32e7f1SMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 12*be32e7f1SMilanka Ringwald * documentation and/or other materials provided with the distribution. 13*be32e7f1SMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 14*be32e7f1SMilanka Ringwald * contributors may be used to endorse or promote products derived 15*be32e7f1SMilanka Ringwald * from this software without specific prior written permission. 16*be32e7f1SMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 17*be32e7f1SMilanka Ringwald * personal benefit and not for any commercial purpose or for 18*be32e7f1SMilanka Ringwald * monetary gain. 19*be32e7f1SMilanka Ringwald * 20*be32e7f1SMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21*be32e7f1SMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*be32e7f1SMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23*be32e7f1SMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24*be32e7f1SMilanka Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25*be32e7f1SMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26*be32e7f1SMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27*be32e7f1SMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28*be32e7f1SMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29*be32e7f1SMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30*be32e7f1SMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*be32e7f1SMilanka Ringwald * SUCH DAMAGE. 32*be32e7f1SMilanka Ringwald * 33*be32e7f1SMilanka Ringwald * Please inquire about commercial licensing options at 34*be32e7f1SMilanka Ringwald * [email protected] 35*be32e7f1SMilanka Ringwald * 36*be32e7f1SMilanka Ringwald */ 37*be32e7f1SMilanka Ringwald 38*be32e7f1SMilanka Ringwald /* 39*be32e7f1SMilanka Ringwald * avrcp.h 40*be32e7f1SMilanka Ringwald * 41*be32e7f1SMilanka Ringwald * Audio/Video Remote Control Profile 42*be32e7f1SMilanka Ringwald * 43*be32e7f1SMilanka Ringwald */ 44*be32e7f1SMilanka Ringwald 45*be32e7f1SMilanka Ringwald #ifndef __AVRCP_H 46*be32e7f1SMilanka Ringwald #define __AVRCP_H 47*be32e7f1SMilanka Ringwald 48*be32e7f1SMilanka Ringwald #include <stdint.h> 49*be32e7f1SMilanka Ringwald 50*be32e7f1SMilanka Ringwald #if defined __cplusplus 51*be32e7f1SMilanka Ringwald extern "C" { 52*be32e7f1SMilanka Ringwald #endif 53*be32e7f1SMilanka Ringwald 54*be32e7f1SMilanka Ringwald #define BT_SIG_COMPANY_ID 0x001958 55*be32e7f1SMilanka Ringwald /* API_START */ 56*be32e7f1SMilanka Ringwald 57*be32e7f1SMilanka Ringwald typedef enum { 58*be32e7f1SMilanka Ringwald AVRCP_CAPABILITY_ID_COMPANY = 0x02, 59*be32e7f1SMilanka Ringwald AVRCP_CAPABILITY_ID_EVENT = 0x03 60*be32e7f1SMilanka Ringwald } avrcp_capability_id_t; 61*be32e7f1SMilanka Ringwald 62*be32e7f1SMilanka Ringwald typedef enum { 63*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_TITLE = 1, 64*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_ARTIST, 65*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_ALBUM, 66*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_TRACK, 67*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_TOTAL_TRACKS, 68*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_GENRE, 69*be32e7f1SMilanka Ringwald AVRCP_MEDIA_ATTR_SONG_LENGTH 70*be32e7f1SMilanka Ringwald } avrcp_media_attribute_id_t; 71*be32e7f1SMilanka Ringwald 72*be32e7f1SMilanka Ringwald #define AVRCP_MEDIA_ATTR_COUNT 7 73*be32e7f1SMilanka Ringwald 74*be32e7f1SMilanka Ringwald typedef enum { 75*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_GET_CAPABILITIES = 0x10, 76*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_GetCurrentPlayerApplicationSettingValue = 0x13, 77*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_SetPlayerApplicationSettingValue = 0x14, 78*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_GET_ELEMENT_ATTRIBUTES = 0x20, 79*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_GET_PLAY_STATUS = 0x30, 80*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_REGISTER_NOTIFICATION = 0x31, 81*be32e7f1SMilanka Ringwald AVRCP_PDU_ID_SET_ABSOLUTE_VOLUME = 0x50 82*be32e7f1SMilanka Ringwald } avrcp_pdu_id_t; 83*be32e7f1SMilanka Ringwald 84*be32e7f1SMilanka Ringwald typedef enum { 85*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_PLAYBACK_STATUS_CHANGED = 0x01, // Change in playback status of the current track. 86*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_TRACK_CHANGED = 0x02, // Change of current track 87*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_TRACK_REACHED_END = 0x03, // Reached end of a track 88*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_TRACK_REACHED_START = 0x04, // Reached start of a track 89*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_PLAYBACK_POS_CHANGED = 0x05, // Change in playback position. Returned after the specified playback notification change notification interval 90*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_BATT_STATUS_CHANGED = 0x06, // Change in battery status 91*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_SYSTEM_STATUS_CHANGED = 0x07, // Change in system status 92*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_PLAYER_APPLICATION_SETTING_CHANGED = 0x08, // Change in player application setting 93*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_NOW_PLAYING_CONTENT_CHANGED = 0x09, // The content of the Now Playing list has changed, see 6.9.5. 94*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_AVAILABLE_PLAYERS_CHANGED = 0x0a, // The available players have changed, see 6.9.4. 95*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_ADDRESSED_PLAYER_CHANGED = 0x0b, // The Addressed Player has been changed, see 6.9.2. 96*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_UIDS_CHANGED = 0x0c, // The UIDs have changed, see 6.10.3.3. 97*be32e7f1SMilanka Ringwald AVRCP_NOTIFICATION_EVENT_VOLUME_CHANGED = 0x0d // The volume has been changed locally on the TG, see 6.13.3. 98*be32e7f1SMilanka Ringwald } avrcp_notification_event_id_t; 99*be32e7f1SMilanka Ringwald 100*be32e7f1SMilanka Ringwald typedef enum { 101*be32e7f1SMilanka Ringwald AVRCP_CTYPE_CONTROL = 0, 102*be32e7f1SMilanka Ringwald AVRCP_CTYPE_STATUS, 103*be32e7f1SMilanka Ringwald AVRCP_CTYPE_SPECIFIC_INQUIRY, 104*be32e7f1SMilanka Ringwald AVRCP_CTYPE_NOTIFY, 105*be32e7f1SMilanka Ringwald AVRCP_CTYPE_GENERAL_INQUIRY, 106*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESERVED5, 107*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESERVED6, 108*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESERVED7, 109*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_NOT_IMPLEMENTED = 8, 110*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_ACCEPTED, 111*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_REJECTED, 112*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_IN_TRANSITION, // target state is in transition. A subsequent STATUS command, may result in the return of a STABLE status 113*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_IMPLEMENTED_STABLE, 114*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_CHANGED_STABLE, 115*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_RESERVED, 116*be32e7f1SMilanka Ringwald AVRCP_CTYPE_RESPONSE_INTERIM // target is unable to respond with either ACCEPTED or REJECTED within 100 millisecond 117*be32e7f1SMilanka Ringwald } avrcp_command_type_t; 118*be32e7f1SMilanka Ringwald 119*be32e7f1SMilanka Ringwald // control command response: accepted, rejected, interim 120*be32e7f1SMilanka Ringwald // status command response: not implemented, rejected, in transiiton, stable 121*be32e7f1SMilanka Ringwald // notify command response: not implemented, rejected, changed 122*be32e7f1SMilanka Ringwald typedef enum { 123*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_MONITOR = 0, 124*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_AUDIO = 1, 125*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_PRINTER, 126*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_DISC, 127*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_TAPE_RECORDER_PLAYER, 128*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_TUNER, 129*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_CA, 130*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_CAMERA, 131*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_RESERVED, 132*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_PANEL = 9, 133*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_BULLETIN_BOARD, 134*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_CAMERA_STORAGE, 135*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_VENDOR_UNIQUE = 0x1C, 136*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_RESERVED_FOR_ALL_SUBUNIT_TYPES, 137*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_EXTENDED_TO_NEXT_BYTE, // The unit_type field may take value 1E16, which means that the field is extended to the following byte. In that case, an additional byte for extended_unit_type will be added immediately following operand[1]. 138*be32e7f1SMilanka Ringwald // Further extension is possible when the value of extended_unit_type is FF16, in which case another byte will be added. 139*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_TYPE_UNIT = 0x1F 140*be32e7f1SMilanka Ringwald } avrcp_subunit_type_t; 141*be32e7f1SMilanka Ringwald 142*be32e7f1SMilanka Ringwald typedef enum { 143*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_ID = 0, 144*be32e7f1SMilanka Ringwald AVRCP_SUBUNIT_ID_IGNORE = 7 145*be32e7f1SMilanka Ringwald } avrcp_subunit_id_t; 146*be32e7f1SMilanka Ringwald 147*be32e7f1SMilanka Ringwald typedef enum { 148*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_VENDOR_DEPENDENT = 0x00, 149*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_RESERVE = 0x01, 150*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_UNIT_INFO = 0x30, 151*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_SUBUNIT_INFO = 0x31, 152*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_PASS_THROUGH = 0x7C, 153*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_VERSION = 0xB0, 154*be32e7f1SMilanka Ringwald AVRCP_CMD_OPCODE_POWER = 0xB2 155*be32e7f1SMilanka Ringwald } avrcp_command_opcode_t; 156*be32e7f1SMilanka Ringwald 157*be32e7f1SMilanka Ringwald typedef enum { 158*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_SKIP = 0x3C, 159*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_VOLUME_UP = 0x41, 160*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_VOLUME_DOWN = 0x42, 161*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_MUTE = 0x43, 162*be32e7f1SMilanka Ringwald 163*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_PLAY = 0x44, 164*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_STOP = 0x45, 165*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_PAUSE = 0x46, 166*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_REWIND = 0x48, 167*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_FAST_FORWARD = 0x49, 168*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_FORWARD = 0x4B, 169*be32e7f1SMilanka Ringwald AVRCP_OPERATION_ID_BACKWARD = 0x4C 170*be32e7f1SMilanka Ringwald } avrcp_operation_id_t; 171*be32e7f1SMilanka Ringwald 172*be32e7f1SMilanka Ringwald typedef enum { 173*be32e7f1SMilanka Ringwald AVCTP_CONNECTION_IDLE, 174*be32e7f1SMilanka Ringwald AVCTP_CONNECTION_W4_L2CAP_CONNECTED, 175*be32e7f1SMilanka Ringwald AVCTP_CONNECTION_OPENED, 176*be32e7f1SMilanka Ringwald AVCTP_W2_SEND_PRESS_COMMAND, 177*be32e7f1SMilanka Ringwald AVCTP_W2_SEND_RELEASE_COMMAND, 178*be32e7f1SMilanka Ringwald AVCTP_W4_STOP, 179*be32e7f1SMilanka Ringwald AVCTP_W2_SEND_COMMAND, 180*be32e7f1SMilanka Ringwald AVCTP_W2_RECEIVE_PRESS_RESPONSE, 181*be32e7f1SMilanka Ringwald AVCTP_W2_RECEIVE_RESPONSE, 182*be32e7f1SMilanka Ringwald AVCTP_CONNECTION_W4_L2CAP_DISCONNECTED 183*be32e7f1SMilanka Ringwald } avctp_connection_state_t; 184*be32e7f1SMilanka Ringwald 185*be32e7f1SMilanka Ringwald typedef struct { 186*be32e7f1SMilanka Ringwald btstack_linked_item_t item; 187*be32e7f1SMilanka Ringwald bd_addr_t remote_addr; 188*be32e7f1SMilanka Ringwald hci_con_handle_t con_handle; 189*be32e7f1SMilanka Ringwald uint16_t l2cap_signaling_cid; 190*be32e7f1SMilanka Ringwald 191*be32e7f1SMilanka Ringwald avctp_connection_state_t state; 192*be32e7f1SMilanka Ringwald uint8_t wait_to_send; 193*be32e7f1SMilanka Ringwald 194*be32e7f1SMilanka Ringwald // command 195*be32e7f1SMilanka Ringwald uint8_t transaction_label; 196*be32e7f1SMilanka Ringwald avrcp_command_opcode_t cmd_to_send; 197*be32e7f1SMilanka Ringwald avrcp_command_type_t command_type; 198*be32e7f1SMilanka Ringwald avrcp_subunit_type_t subunit_type; 199*be32e7f1SMilanka Ringwald avrcp_subunit_id_t subunit_id; 200*be32e7f1SMilanka Ringwald uint8_t cmd_operands[20]; 201*be32e7f1SMilanka Ringwald uint8_t cmd_operands_lenght; 202*be32e7f1SMilanka Ringwald btstack_timer_source_t press_and_hold_cmd_timer; 203*be32e7f1SMilanka Ringwald 204*be32e7f1SMilanka Ringwald uint16_t notifications_enabled; 205*be32e7f1SMilanka Ringwald uint16_t notifications_to_register; 206*be32e7f1SMilanka Ringwald uint16_t notifications_to_deregister; 207*be32e7f1SMilanka Ringwald 208*be32e7f1SMilanka Ringwald uint8_t disconnect; 209*be32e7f1SMilanka Ringwald } avrcp_connection_t; 210*be32e7f1SMilanka Ringwald 211*be32e7f1SMilanka Ringwald typedef enum { 212*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_STOPPED = 0x00, 213*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_PLAYING, 214*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_PAUSED, 215*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_FWD_SEEK, 216*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_REV_SEEK, 217*be32e7f1SMilanka Ringwald AVRCP_PLAY_STATUS_ERROR = 0xFF 218*be32e7f1SMilanka Ringwald } avrcp_play_status_t; 219*be32e7f1SMilanka Ringwald 220*be32e7f1SMilanka Ringwald typedef enum { 221*be32e7f1SMilanka Ringwald AVRCP_SHUFFLE_MODE_OFF = 0x01, 222*be32e7f1SMilanka Ringwald AVRCP_SHUFFLE_MODE_ALL_TRACKS, 223*be32e7f1SMilanka Ringwald AVRCP_SHUFFLE_MODE_GROUP 224*be32e7f1SMilanka Ringwald } avrcp_shuffle_mode_t; 225*be32e7f1SMilanka Ringwald 226*be32e7f1SMilanka Ringwald typedef enum { 227*be32e7f1SMilanka Ringwald AVRCP_REPEAT_MODE_OFF = 0x01, 228*be32e7f1SMilanka Ringwald AVRCP_REPEAT_MODE_SINGLE_TRACK, 229*be32e7f1SMilanka Ringwald AVRCP_REPEAT_MODE_ALL_TRACKS, 230*be32e7f1SMilanka Ringwald AVRCP_REPEAT_MODE_GROUP 231*be32e7f1SMilanka Ringwald } avrcp_repeat_mode_t; 232*be32e7f1SMilanka Ringwald 233*be32e7f1SMilanka Ringwald /** 234*be32e7f1SMilanka Ringwald * @brief AVDTP Sink service record. 235*be32e7f1SMilanka Ringwald * @param service 236*be32e7f1SMilanka Ringwald * @param service_record_handle 237*be32e7f1SMilanka Ringwald * @param browsing 1 - supported, 0 - not supported 238*be32e7f1SMilanka Ringwald * @param supported_features 16-bit bitmap, see AVDTP_SINK_SF_* values in avdtp.h 239*be32e7f1SMilanka Ringwald * @param service_name 240*be32e7f1SMilanka Ringwald * @param service_provider_name 241*be32e7f1SMilanka Ringwald */ 242*be32e7f1SMilanka Ringwald void avrcp_controller_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name); 243*be32e7f1SMilanka Ringwald 244*be32e7f1SMilanka Ringwald /** 245*be32e7f1SMilanka Ringwald * @brief AVDTP Sink service record. 246*be32e7f1SMilanka Ringwald * @param service 247*be32e7f1SMilanka Ringwald * @param service_record_handle 248*be32e7f1SMilanka Ringwald * @param browsing 1 - supported, 0 - not supported 249*be32e7f1SMilanka Ringwald * @param supported_features 16-bit bitmap, see AVDTP_SINK_SF_* values in avdtp.h 250*be32e7f1SMilanka Ringwald * @param service_name 251*be32e7f1SMilanka Ringwald * @param service_provider_name 252*be32e7f1SMilanka Ringwald */ 253*be32e7f1SMilanka Ringwald void avrcp_target_create_sdp_record(uint8_t * service, uint32_t service_record_handle, uint8_t browsing, uint16_t supported_features, const char * service_name, const char * service_provider_name); 254*be32e7f1SMilanka Ringwald 255*be32e7f1SMilanka Ringwald 256*be32e7f1SMilanka Ringwald /** 257*be32e7f1SMilanka Ringwald * @brief Set up AVDTP Sink device. 258*be32e7f1SMilanka Ringwald */ 259*be32e7f1SMilanka Ringwald void avrcp_init(void); 260*be32e7f1SMilanka Ringwald 261*be32e7f1SMilanka Ringwald /** 262*be32e7f1SMilanka Ringwald * @brief Register callback for the AVDTP Sink client. 263*be32e7f1SMilanka Ringwald * @param callback 264*be32e7f1SMilanka Ringwald */ 265*be32e7f1SMilanka Ringwald void avrcp_register_packet_handler(btstack_packet_handler_t callback); 266*be32e7f1SMilanka Ringwald 267*be32e7f1SMilanka Ringwald /** 268*be32e7f1SMilanka Ringwald * @brief Connect to device with a bluetooth address. 269*be32e7f1SMilanka Ringwald * @param bd_addr 270*be32e7f1SMilanka Ringwald */ 271*be32e7f1SMilanka Ringwald void avrcp_connect(bd_addr_t bd_addr); 272*be32e7f1SMilanka Ringwald void avrcp_disconnect(uint16_t con_handle); 273*be32e7f1SMilanka Ringwald /** 274*be32e7f1SMilanka Ringwald * @brief Unit info. 275*be32e7f1SMilanka Ringwald * @param con_handle 276*be32e7f1SMilanka Ringwald */ 277*be32e7f1SMilanka Ringwald void avrcp_unit_info(uint16_t con_handle); 278*be32e7f1SMilanka Ringwald 279*be32e7f1SMilanka Ringwald /** 280*be32e7f1SMilanka Ringwald * @brief Get capabilities. 281*be32e7f1SMilanka Ringwald * @param con_handle 282*be32e7f1SMilanka Ringwald */ 283*be32e7f1SMilanka Ringwald void avrcp_get_supported_company_ids(uint16_t con_handle); 284*be32e7f1SMilanka Ringwald void avrcp_get_supported_events(uint16_t con_handle); 285*be32e7f1SMilanka Ringwald 286*be32e7f1SMilanka Ringwald 287*be32e7f1SMilanka Ringwald /** 288*be32e7f1SMilanka Ringwald * @brief Play. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 289*be32e7f1SMilanka Ringwald * @param con_handle 290*be32e7f1SMilanka Ringwald */ 291*be32e7f1SMilanka Ringwald void avrcp_play(uint16_t con_handle); 292*be32e7f1SMilanka Ringwald 293*be32e7f1SMilanka Ringwald /** 294*be32e7f1SMilanka Ringwald * @brief Stop. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 295*be32e7f1SMilanka Ringwald * @param con_handle 296*be32e7f1SMilanka Ringwald */ 297*be32e7f1SMilanka Ringwald void avrcp_stop(uint16_t con_handle); 298*be32e7f1SMilanka Ringwald 299*be32e7f1SMilanka Ringwald /** 300*be32e7f1SMilanka Ringwald * @brief Pause. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 301*be32e7f1SMilanka Ringwald * @param con_handle 302*be32e7f1SMilanka Ringwald */ 303*be32e7f1SMilanka Ringwald void avrcp_pause(uint16_t con_handle); 304*be32e7f1SMilanka Ringwald 305*be32e7f1SMilanka Ringwald /** 306*be32e7f1SMilanka Ringwald * @brief Fast forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 307*be32e7f1SMilanka Ringwald * @param con_handle 308*be32e7f1SMilanka Ringwald */ 309*be32e7f1SMilanka Ringwald void avrcp_start_fast_forward(uint16_t con_handle); 310*be32e7f1SMilanka Ringwald void avrcp_stop_fast_forward(uint16_t con_handle); 311*be32e7f1SMilanka Ringwald 312*be32e7f1SMilanka Ringwald /** 313*be32e7f1SMilanka Ringwald * @brief Rewind. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 314*be32e7f1SMilanka Ringwald * @param con_handle 315*be32e7f1SMilanka Ringwald */ 316*be32e7f1SMilanka Ringwald void avrcp_start_rewind(uint16_t con_handle); 317*be32e7f1SMilanka Ringwald void avrcp_stop_rewind(uint16_t con_handle); 318*be32e7f1SMilanka Ringwald 319*be32e7f1SMilanka Ringwald /** 320*be32e7f1SMilanka Ringwald * @brief Forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 321*be32e7f1SMilanka Ringwald * @param con_handle 322*be32e7f1SMilanka Ringwald */ 323*be32e7f1SMilanka Ringwald void avrcp_forward(uint16_t con_handle); 324*be32e7f1SMilanka Ringwald 325*be32e7f1SMilanka Ringwald /** 326*be32e7f1SMilanka Ringwald * @brief Backward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 327*be32e7f1SMilanka Ringwald * @param con_handle 328*be32e7f1SMilanka Ringwald */ 329*be32e7f1SMilanka Ringwald void avrcp_backward(uint16_t con_handle); 330*be32e7f1SMilanka Ringwald 331*be32e7f1SMilanka Ringwald 332*be32e7f1SMilanka Ringwald /** 333*be32e7f1SMilanka Ringwald * @brief Get play status. Returns event of type AVRCP_SUBEVENT_PLAY_STATUS (length, position, play_status). 334*be32e7f1SMilanka Ringwald * If TG does not support SongLength And SongPosition on TG, then TG shall return 0xFFFFFFFF. 335*be32e7f1SMilanka Ringwald * @param con_handle 336*be32e7f1SMilanka Ringwald */ 337*be32e7f1SMilanka Ringwald void avrcp_get_play_status(uint16_t con_handle); 338*be32e7f1SMilanka Ringwald 339*be32e7f1SMilanka Ringwald /** 340*be32e7f1SMilanka Ringwald * @brief Register notification. Response via AVRCP_SUBEVENT_ENABLE_NOTIFICATION_COMPLETE. 341*be32e7f1SMilanka Ringwald * @param con_handle 342*be32e7f1SMilanka Ringwald * @param event_id 343*be32e7f1SMilanka Ringwald */ 344*be32e7f1SMilanka Ringwald void avrcp_enable_notification(uint16_t con_handle, avrcp_notification_event_id_t event_id); 345*be32e7f1SMilanka Ringwald void avrcp_disable_notification(uint16_t con_handle, avrcp_notification_event_id_t event_id); 346*be32e7f1SMilanka Ringwald 347*be32e7f1SMilanka Ringwald /** 348*be32e7f1SMilanka Ringwald * @brief Get info on now playing media. 349*be32e7f1SMilanka Ringwald * @param con_handle 350*be32e7f1SMilanka Ringwald */ 351*be32e7f1SMilanka Ringwald void avrcp_get_now_playing_info(uint16_t con_handle); 352*be32e7f1SMilanka Ringwald 353*be32e7f1SMilanka Ringwald /** 354*be32e7f1SMilanka Ringwald * @brief Set absolute volume 0-127 (corresponds to 0-100%). Response via AVRCP_SUBEVENT_SET_ABSOLUTE_VOLUME_RESPONSE 355*be32e7f1SMilanka Ringwald * @param con_handle 356*be32e7f1SMilanka Ringwald */ 357*be32e7f1SMilanka Ringwald void avrcp_set_absolute_volume(uint16_t con_handle, uint8_t volume); 358*be32e7f1SMilanka Ringwald 359*be32e7f1SMilanka Ringwald /** 360*be32e7f1SMilanka Ringwald * @brief Turns the volume to high. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 361*be32e7f1SMilanka Ringwald * @param con_handle 362*be32e7f1SMilanka Ringwald */ 363*be32e7f1SMilanka Ringwald void avrcp_volume_up(uint16_t con_handle); 364*be32e7f1SMilanka Ringwald 365*be32e7f1SMilanka Ringwald /** 366*be32e7f1SMilanka Ringwald * @brief Turns the volume to low. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 367*be32e7f1SMilanka Ringwald * @param con_handle 368*be32e7f1SMilanka Ringwald */ 369*be32e7f1SMilanka Ringwald void avrcp_volume_down(uint16_t con_handle); 370*be32e7f1SMilanka Ringwald 371*be32e7f1SMilanka Ringwald /** 372*be32e7f1SMilanka Ringwald * @brief Puts the sound out. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 373*be32e7f1SMilanka Ringwald * @param con_handle 374*be32e7f1SMilanka Ringwald */ 375*be32e7f1SMilanka Ringwald void avrcp_mute(uint16_t con_handle); 376*be32e7f1SMilanka Ringwald 377*be32e7f1SMilanka Ringwald /** 378*be32e7f1SMilanka Ringwald * @brief Skip to next playing media. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 379*be32e7f1SMilanka Ringwald * @param con_handle 380*be32e7f1SMilanka Ringwald */ 381*be32e7f1SMilanka Ringwald void avrcp_skip(uint16_t con_handle); 382*be32e7f1SMilanka Ringwald 383*be32e7f1SMilanka Ringwald /** 384*be32e7f1SMilanka Ringwald * @brief Query repeat and shuffle mode. Response via AVRCP_SUBEVENT_SHUFFLE_AND_REPEAT_MODE. 385*be32e7f1SMilanka Ringwald * @param con_handle 386*be32e7f1SMilanka Ringwald */ 387*be32e7f1SMilanka Ringwald void avrcp_query_shuffle_and_repeat_modes(uint16_t con_handle); 388*be32e7f1SMilanka Ringwald 389*be32e7f1SMilanka Ringwald /** 390*be32e7f1SMilanka Ringwald * @brief Set shuffle mode. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 391*be32e7f1SMilanka Ringwald * @param con_handle 392*be32e7f1SMilanka Ringwald */ 393*be32e7f1SMilanka Ringwald void avrcp_set_shuffle_mode(uint16_t con_handle, avrcp_shuffle_mode_t mode); 394*be32e7f1SMilanka Ringwald 395*be32e7f1SMilanka Ringwald /** 396*be32e7f1SMilanka Ringwald * @brief Set repeat mode. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 397*be32e7f1SMilanka Ringwald * @param con_handle 398*be32e7f1SMilanka Ringwald */ 399*be32e7f1SMilanka Ringwald void avrcp_set_repeat_mode(uint16_t con_handle, avrcp_repeat_mode_t mode); 400*be32e7f1SMilanka Ringwald 401*be32e7f1SMilanka Ringwald const char * avrcp_subunit2str(uint16_t index); 402*be32e7f1SMilanka Ringwald const char * avrcp_event2str(uint16_t index); 403*be32e7f1SMilanka Ringwald const char * avrcp_operation2str(uint8_t index); 404*be32e7f1SMilanka Ringwald const char * avrcp_attribute2str(uint8_t index); 405*be32e7f1SMilanka Ringwald const char * avrcp_play_status2str(uint8_t index); 406*be32e7f1SMilanka Ringwald const char * avrcp_ctype2str(uint8_t index); 407*be32e7f1SMilanka Ringwald const char * avrcp_repeat2str(uint8_t index); 408*be32e7f1SMilanka Ringwald const char * avrcp_shuffle2str(uint8_t index); 409*be32e7f1SMilanka Ringwald 410*be32e7f1SMilanka Ringwald /* API_END */ 411*be32e7f1SMilanka Ringwald #if defined __cplusplus 412*be32e7f1SMilanka Ringwald } 413*be32e7f1SMilanka Ringwald #endif 414*be32e7f1SMilanka Ringwald 415*be32e7f1SMilanka Ringwald #endif // __AVRCP_H