1*6983e65eSMilanka Ringwald /* 2*6983e65eSMilanka Ringwald * Copyright (C) 2016 BlueKitchen GmbH 3*6983e65eSMilanka Ringwald * 4*6983e65eSMilanka Ringwald * Redistribution and use in source and binary forms, with or without 5*6983e65eSMilanka Ringwald * modification, are permitted provided that the following conditions 6*6983e65eSMilanka Ringwald * are met: 7*6983e65eSMilanka Ringwald * 8*6983e65eSMilanka Ringwald * 1. Redistributions of source code must retain the above copyright 9*6983e65eSMilanka Ringwald * notice, this list of conditions and the following disclaimer. 10*6983e65eSMilanka Ringwald * 2. Redistributions in binary form must reproduce the above copyright 11*6983e65eSMilanka Ringwald * notice, this list of conditions and the following disclaimer in the 12*6983e65eSMilanka Ringwald * documentation and/or other materials provided with the distribution. 13*6983e65eSMilanka Ringwald * 3. Neither the name of the copyright holders nor the names of 14*6983e65eSMilanka Ringwald * contributors may be used to endorse or promote products derived 15*6983e65eSMilanka Ringwald * from this software without specific prior written permission. 16*6983e65eSMilanka Ringwald * 4. Any redistribution, use, or modification is done solely for 17*6983e65eSMilanka Ringwald * personal benefit and not for any commercial purpose or for 18*6983e65eSMilanka Ringwald * monetary gain. 19*6983e65eSMilanka Ringwald * 20*6983e65eSMilanka Ringwald * THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH AND CONTRIBUTORS 21*6983e65eSMilanka Ringwald * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 22*6983e65eSMilanka Ringwald * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 23*6983e65eSMilanka Ringwald * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS 24*6983e65eSMilanka Ringwald * RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 25*6983e65eSMilanka Ringwald * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 26*6983e65eSMilanka Ringwald * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 27*6983e65eSMilanka Ringwald * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 28*6983e65eSMilanka Ringwald * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 29*6983e65eSMilanka Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 30*6983e65eSMilanka Ringwald * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31*6983e65eSMilanka Ringwald * SUCH DAMAGE. 32*6983e65eSMilanka Ringwald * 33*6983e65eSMilanka Ringwald * Please inquire about commercial licensing options at 34*6983e65eSMilanka Ringwald * [email protected] 35*6983e65eSMilanka Ringwald * 36*6983e65eSMilanka Ringwald */ 37*6983e65eSMilanka Ringwald 38*6983e65eSMilanka Ringwald /* 39*6983e65eSMilanka Ringwald * avrcp.h 40*6983e65eSMilanka Ringwald * 41*6983e65eSMilanka Ringwald * Audio/Video Remote Control Profile 42*6983e65eSMilanka Ringwald * 43*6983e65eSMilanka Ringwald */ 44*6983e65eSMilanka Ringwald 45*6983e65eSMilanka Ringwald #ifndef __AVRCP_CONTROLLER_H 46*6983e65eSMilanka Ringwald #define __AVRCP_CONTROLLER_H 47*6983e65eSMilanka Ringwald 48*6983e65eSMilanka Ringwald #include <stdint.h> 49*6983e65eSMilanka Ringwald #include "btstack_run_loop.h" 50*6983e65eSMilanka Ringwald #include "btstack_linked_list.h" 51*6983e65eSMilanka Ringwald #include "avrcp.h" 52*6983e65eSMilanka Ringwald 53*6983e65eSMilanka Ringwald #if defined __cplusplus 54*6983e65eSMilanka Ringwald extern "C" { 55*6983e65eSMilanka Ringwald #endif 56*6983e65eSMilanka Ringwald 57*6983e65eSMilanka Ringwald /* API_START */ 58*6983e65eSMilanka Ringwald 59*6983e65eSMilanka Ringwald /** 60*6983e65eSMilanka Ringwald * @brief AVDTP Sink service record. 61*6983e65eSMilanka Ringwald * @param service 62*6983e65eSMilanka Ringwald * @param service_record_handle 63*6983e65eSMilanka Ringwald * @param browsing 1 - supported, 0 - not supported 64*6983e65eSMilanka Ringwald * @param supported_features 16-bit bitmap, see AVDTP_SINK_SF_* values in avdtp.h 65*6983e65eSMilanka Ringwald * @param service_name 66*6983e65eSMilanka Ringwald * @param service_provider_name 67*6983e65eSMilanka Ringwald */ 68*6983e65eSMilanka 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); 69*6983e65eSMilanka Ringwald 70*6983e65eSMilanka Ringwald /** 71*6983e65eSMilanka Ringwald * @brief Set up AVDTP Sink device. 72*6983e65eSMilanka Ringwald */ 73*6983e65eSMilanka Ringwald void avrcp_controller_init(void); 74*6983e65eSMilanka Ringwald 75*6983e65eSMilanka Ringwald /** 76*6983e65eSMilanka Ringwald * @brief Register callback for the AVRCP Sink client. 77*6983e65eSMilanka Ringwald * @param callback 78*6983e65eSMilanka Ringwald */ 79*6983e65eSMilanka Ringwald void avrcp_controller_register_packet_handler(btstack_packet_handler_t callback); 80*6983e65eSMilanka Ringwald 81*6983e65eSMilanka Ringwald /** 82*6983e65eSMilanka Ringwald * @brief Connect to device with a Bluetooth address. 83*6983e65eSMilanka Ringwald * @param bd_addr 84*6983e65eSMilanka Ringwald * @param avrcp_cid 85*6983e65eSMilanka Ringwald * @returns status 86*6983e65eSMilanka Ringwald */ 87*6983e65eSMilanka Ringwald uint8_t avrcp_controller_connect(bd_addr_t bd_addr, uint16_t * avrcp_cid); 88*6983e65eSMilanka Ringwald 89*6983e65eSMilanka Ringwald /** 90*6983e65eSMilanka Ringwald * @brief Disconnect from AVRCP target 91*6983e65eSMilanka Ringwald * @param avrcp_cid 92*6983e65eSMilanka Ringwald * @returns status 93*6983e65eSMilanka Ringwald */ 94*6983e65eSMilanka Ringwald uint8_t avrcp_controller_disconnect(uint16_t avrcp_cid); 95*6983e65eSMilanka Ringwald 96*6983e65eSMilanka Ringwald /** 97*6983e65eSMilanka Ringwald * @brief Unit info. 98*6983e65eSMilanka Ringwald * @param avrcp_cid 99*6983e65eSMilanka Ringwald * @returns status 100*6983e65eSMilanka Ringwald */ 101*6983e65eSMilanka Ringwald uint8_t avrcp_controller_unit_info(uint16_t avrcp_cid); 102*6983e65eSMilanka Ringwald 103*6983e65eSMilanka Ringwald /** 104*6983e65eSMilanka Ringwald * @brief Get capabilities. 105*6983e65eSMilanka Ringwald * @param avrcp_cid 106*6983e65eSMilanka Ringwald * @returns status 107*6983e65eSMilanka Ringwald */ 108*6983e65eSMilanka Ringwald uint8_t avrcp_controller_get_supported_company_ids(uint16_t avrcp_cid); 109*6983e65eSMilanka Ringwald 110*6983e65eSMilanka Ringwald /** 111*6983e65eSMilanka Ringwald * @brief Get supported Events. 112*6983e65eSMilanka Ringwald * @param avrcp_cid 113*6983e65eSMilanka Ringwald * @returns status 114*6983e65eSMilanka Ringwald */ 115*6983e65eSMilanka Ringwald uint8_t avrcp_controller_get_supported_events(uint16_t avrcp_cid); 116*6983e65eSMilanka Ringwald 117*6983e65eSMilanka Ringwald /** 118*6983e65eSMilanka Ringwald * @brief Play. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 119*6983e65eSMilanka Ringwald * @param avrcp_cid 120*6983e65eSMilanka Ringwald * @returns status 121*6983e65eSMilanka Ringwald */ 122*6983e65eSMilanka Ringwald uint8_t avrcp_controller_play(uint16_t avrcp_cid); 123*6983e65eSMilanka Ringwald 124*6983e65eSMilanka Ringwald /** 125*6983e65eSMilanka Ringwald * @brief Stop. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 126*6983e65eSMilanka Ringwald * @param avrcp_cid 127*6983e65eSMilanka Ringwald * @returns status 128*6983e65eSMilanka Ringwald */ 129*6983e65eSMilanka Ringwald uint8_t avrcp_controller_stop(uint16_t avrcp_cid); 130*6983e65eSMilanka Ringwald 131*6983e65eSMilanka Ringwald /** 132*6983e65eSMilanka Ringwald * @brief Pause. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 133*6983e65eSMilanka Ringwald * @param avrcp_cid 134*6983e65eSMilanka Ringwald * @returns status 135*6983e65eSMilanka Ringwald */ 136*6983e65eSMilanka Ringwald uint8_t avrcp_controller_pause(uint16_t avrcp_cid); 137*6983e65eSMilanka Ringwald 138*6983e65eSMilanka Ringwald /** 139*6983e65eSMilanka Ringwald * @brief Start Fast Forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 140*6983e65eSMilanka Ringwald * @param avrcp_cid 141*6983e65eSMilanka Ringwald * @returns status 142*6983e65eSMilanka Ringwald */ 143*6983e65eSMilanka Ringwald uint8_t avrcp_controller_start_fast_forward(uint16_t avrcp_cid); 144*6983e65eSMilanka Ringwald 145*6983e65eSMilanka Ringwald /** 146*6983e65eSMilanka Ringwald * @brief Stop Fast Forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 147*6983e65eSMilanka Ringwald * @param avrcp_cid 148*6983e65eSMilanka Ringwald * @returns status 149*6983e65eSMilanka Ringwald */ 150*6983e65eSMilanka Ringwald uint8_t avrcp_controller_stop_fast_forward(uint16_t avrcp_cid); 151*6983e65eSMilanka Ringwald 152*6983e65eSMilanka Ringwald /** 153*6983e65eSMilanka Ringwald * @brief Single step - fast forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 154*6983e65eSMilanka Ringwald * @param avrcp_cid 155*6983e65eSMilanka Ringwald * @returns status 156*6983e65eSMilanka Ringwald */ 157*6983e65eSMilanka Ringwald uint8_t avrcp_controller_fast_forward(uint16_t avrcp_cid); 158*6983e65eSMilanka Ringwald 159*6983e65eSMilanka Ringwald /** 160*6983e65eSMilanka Ringwald * @brief Stop Rewind. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 161*6983e65eSMilanka Ringwald * @param avrcp_cid 162*6983e65eSMilanka Ringwald * @returns status 163*6983e65eSMilanka Ringwald */ 164*6983e65eSMilanka Ringwald uint8_t avrcp_controller_start_rewind(uint16_t avrcp_cid); 165*6983e65eSMilanka Ringwald 166*6983e65eSMilanka Ringwald /** 167*6983e65eSMilanka Ringwald * @brief Stop Rewind. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 168*6983e65eSMilanka Ringwald * @param avrcp_cid 169*6983e65eSMilanka Ringwald * @returns status 170*6983e65eSMilanka Ringwald */ 171*6983e65eSMilanka Ringwald uint8_t avrcp_controller_stop_rewind(uint16_t avrcp_cid); 172*6983e65eSMilanka Ringwald 173*6983e65eSMilanka Ringwald /** 174*6983e65eSMilanka Ringwald * @brief Single step rewind. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 175*6983e65eSMilanka Ringwald * @param avrcp_cid 176*6983e65eSMilanka Ringwald * @returns status 177*6983e65eSMilanka Ringwald */ 178*6983e65eSMilanka Ringwald uint8_t avrcp_controller_rewind(uint16_t avrcp_cid); 179*6983e65eSMilanka Ringwald 180*6983e65eSMilanka Ringwald /** 181*6983e65eSMilanka Ringwald * @brief Forward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 182*6983e65eSMilanka Ringwald * @param avrcp_cid 183*6983e65eSMilanka Ringwald * @returns status 184*6983e65eSMilanka Ringwald */ 185*6983e65eSMilanka Ringwald uint8_t avrcp_controller_forward(uint16_t avrcp_cid); 186*6983e65eSMilanka Ringwald 187*6983e65eSMilanka Ringwald /** 188*6983e65eSMilanka Ringwald * @brief Backward. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 189*6983e65eSMilanka Ringwald * @param avrcp_cid 190*6983e65eSMilanka Ringwald * @returns status 191*6983e65eSMilanka Ringwald */ 192*6983e65eSMilanka Ringwald uint8_t avrcp_controller_backward(uint16_t avrcp_cid); 193*6983e65eSMilanka Ringwald 194*6983e65eSMilanka Ringwald 195*6983e65eSMilanka Ringwald /** 196*6983e65eSMilanka Ringwald * @brief Get play status. Returns event of type AVRCP_SUBEVENT_PLAY_STATUS (length, position, play_status). 197*6983e65eSMilanka Ringwald * If TG does not support SongLength And SongPosition on TG, then TG shall return 0xFFFFFFFF. 198*6983e65eSMilanka Ringwald * @param avrcp_cid 199*6983e65eSMilanka Ringwald * @returns status 200*6983e65eSMilanka Ringwald */ 201*6983e65eSMilanka Ringwald uint8_t avrcp_controller_get_play_status(uint16_t avrcp_cid); 202*6983e65eSMilanka Ringwald 203*6983e65eSMilanka Ringwald /** 204*6983e65eSMilanka Ringwald * @brief Enable notification. Response via AVRCP_SUBEVENT_ENABLE_NOTIFICATION_COMPLETE. 205*6983e65eSMilanka Ringwald * @param avrcp_cid 206*6983e65eSMilanka Ringwald * @param event_id 207*6983e65eSMilanka Ringwald * @returns status 208*6983e65eSMilanka Ringwald */ 209*6983e65eSMilanka Ringwald uint8_t avrcp_controller_enable_notification(uint16_t avrcp_cid, avrcp_notification_event_id_t event_id); 210*6983e65eSMilanka Ringwald 211*6983e65eSMilanka Ringwald /** 212*6983e65eSMilanka Ringwald * @brief Disable notification. Response via AVRCP_SUBEVENT_ENABLE_NOTIFICATION_COMPLETE. 213*6983e65eSMilanka Ringwald * @param avrcp_cid 214*6983e65eSMilanka Ringwald * @param event_id 215*6983e65eSMilanka Ringwald * @returns status 216*6983e65eSMilanka Ringwald */ 217*6983e65eSMilanka Ringwald uint8_t avrcp_controller_disable_notification(uint16_t avrcp_cid, avrcp_notification_event_id_t event_id); 218*6983e65eSMilanka Ringwald 219*6983e65eSMilanka Ringwald /** 220*6983e65eSMilanka Ringwald * @brief Get info on now playing media. 221*6983e65eSMilanka Ringwald * @param avrcp_cid 222*6983e65eSMilanka Ringwald * @returns status 223*6983e65eSMilanka Ringwald */ 224*6983e65eSMilanka Ringwald uint8_t avrcp_controller_get_now_playing_info(uint16_t avrcp_cid); 225*6983e65eSMilanka Ringwald 226*6983e65eSMilanka Ringwald /** 227*6983e65eSMilanka Ringwald * @brief Set absolute volume 0-127 (corresponds to 0-100%). Response via AVRCP_SUBEVENT_SET_ABSOLUTE_VOLUME_RESPONSE 228*6983e65eSMilanka Ringwald * @param avrcp_cid 229*6983e65eSMilanka Ringwald * @returns status 230*6983e65eSMilanka Ringwald */ 231*6983e65eSMilanka Ringwald uint8_t avrcp_controller_set_absolute_volume(uint16_t avrcp_cid, uint8_t volume); 232*6983e65eSMilanka Ringwald 233*6983e65eSMilanka Ringwald /** 234*6983e65eSMilanka Ringwald * @brief Turns the volume to high. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 235*6983e65eSMilanka Ringwald * @param avrcp_cid 236*6983e65eSMilanka Ringwald * @returns status 237*6983e65eSMilanka Ringwald */ 238*6983e65eSMilanka Ringwald uint8_t avrcp_controller_volume_up(uint16_t avrcp_cid); 239*6983e65eSMilanka Ringwald 240*6983e65eSMilanka Ringwald /** 241*6983e65eSMilanka Ringwald * @brief Turns the volume to low. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 242*6983e65eSMilanka Ringwald * @param avrcp_cid 243*6983e65eSMilanka Ringwald * @returns status 244*6983e65eSMilanka Ringwald */ 245*6983e65eSMilanka Ringwald uint8_t avrcp_controller_volume_down(uint16_t avrcp_cid); 246*6983e65eSMilanka Ringwald 247*6983e65eSMilanka Ringwald /** 248*6983e65eSMilanka Ringwald * @brief Puts the sound out. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 249*6983e65eSMilanka Ringwald * @param avrcp_cid 250*6983e65eSMilanka Ringwald * @returns status 251*6983e65eSMilanka Ringwald */ 252*6983e65eSMilanka Ringwald uint8_t avrcp_controller_mute(uint16_t avrcp_cid); 253*6983e65eSMilanka Ringwald 254*6983e65eSMilanka Ringwald /** 255*6983e65eSMilanka Ringwald * @brief Skip to next playing media. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 256*6983e65eSMilanka Ringwald * @param avrcp_cid 257*6983e65eSMilanka Ringwald * @returns status 258*6983e65eSMilanka Ringwald */ 259*6983e65eSMilanka Ringwald uint8_t avrcp_controller_skip(uint16_t avrcp_cid); 260*6983e65eSMilanka Ringwald 261*6983e65eSMilanka Ringwald /** 262*6983e65eSMilanka Ringwald * @brief Query repeat and shuffle mode. Response via AVRCP_SUBEVENT_SHUFFLE_AND_REPEAT_MODE. 263*6983e65eSMilanka Ringwald * @param avrcp_cid 264*6983e65eSMilanka Ringwald * @returns status 265*6983e65eSMilanka Ringwald */ 266*6983e65eSMilanka Ringwald uint8_t avrcp_controller_query_shuffle_and_repeat_modes(uint16_t avrcp_cid); 267*6983e65eSMilanka Ringwald 268*6983e65eSMilanka Ringwald /** 269*6983e65eSMilanka Ringwald * @brief Set shuffle mode. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 270*6983e65eSMilanka Ringwald * @param avrcp_cid 271*6983e65eSMilanka Ringwald * @returns status 272*6983e65eSMilanka Ringwald */ 273*6983e65eSMilanka Ringwald uint8_t avrcp_controller_set_shuffle_mode(uint16_t avrcp_cid, avrcp_shuffle_mode_t mode); 274*6983e65eSMilanka Ringwald 275*6983e65eSMilanka Ringwald /** 276*6983e65eSMilanka Ringwald * @brief Set repeat mode. Event AVRCP_SUBEVENT_OPERATION_COMPLETE returns operation id and status. 277*6983e65eSMilanka Ringwald * @param avrcp_cid 278*6983e65eSMilanka Ringwald * @returns status 279*6983e65eSMilanka Ringwald */ 280*6983e65eSMilanka Ringwald uint8_t avrcp_controller_set_repeat_mode(uint16_t avrcp_cid, avrcp_repeat_mode_t mode); 281*6983e65eSMilanka Ringwald 282*6983e65eSMilanka Ringwald /* API_END */ 283*6983e65eSMilanka Ringwald #if defined __cplusplus 284*6983e65eSMilanka Ringwald } 285*6983e65eSMilanka Ringwald #endif 286*6983e65eSMilanka Ringwald 287*6983e65eSMilanka Ringwald #endif // __AVRCP_CONTROLLER_H