/* Copyright Statement: * * * * This software/firmware and related documentation ("MediaTek Software") are * * protected under relevant copyright laws. The information contained herein * * is confidential and proprietary to MediaTek Inc. and/or its licensors. * * Without the prior written permission of MediaTek inc. and/or its licensors, * * any reproduction, modification, use or disclosure of MediaTek Software, * * and information contained herein, in whole or in part, shall be strictly * * prohibited. * * * * MediaTek Inc. (C) 2016. All rights reserved. * * * * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES * * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") * * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER * * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL * * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED * * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR * * NONINFRINGEMENT. * * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE * * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR * * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO * * SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER * * EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN * * FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK SOFTWARE. * * MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES * * MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR * * OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND * * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED * * HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK * * SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE * * PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. * * * * The following software/firmware and/or related documentation ("MediaTek Software") * * have been modified by MediaTek Inc. All revisions are subject to any receiver's * * applicable license agreements with MediaTek Inc. * */ #if defined(MTK_BT_PROPRIETARY_HANDLING) && (MTK_BT_PROPRIETARY_HANDLING == TRUE) #pragma once #include #include #include #include "avrc_defs.h" #include "btif_common.h" #include "bta_av_api.h" #include "osi/include/alarm.h" namespace base { template struct DefaultSingletonTraits; } // namespace base namespace vendor { namespace mediatek { namespace bluetooth { namespace btif { #if defined(MTK_AVRCP_APP_SETTINGS) && (MTK_AVRCP_APP_SETTINGS == TRUE) using FillPduQueue = std::function; using SendRejectRsp = std::function; using OpcodeFromPdu = std::function; using CheckRcConnect = std::function; using SendMetaRsp = std::function; class BtAvrcSettingImpl; class BtAvrcSetting { public: static BtAvrcSetting* GetInstance(); /******************************************************************** ** ** Function SetAvrcSettingCB ** ** Description This method is called in set callback ** from aosp code ** ** Return bt_staus_t ** *******************************************************************/ static void SetAvrcSettingCB (FillPduQueue fill_pdu_queue, SendRejectRsp send_reject_response, OpcodeFromPdu opcode_from_pdu, CheckRcConnect check_rc_connected, SendMetaRsp send_meta_rsp); /******************************************************************** ** ** Function SetAppSettingsChange ** ** Description This method is called in register notification rsp ** from aosp code ** ** Return void ** *******************************************************************/ void SetAppSettingsChange(tAVRC_PLAYER_APP_PARAM* dest_player_setting, btrc_player_settings_t* src_player_setting); /******************************************************************************* * * Function BtifRcUpstreamsSettingEvt * * Description Executes AVRC UPSTREAMS events in btif context. * * Returns void * ******************************************************************************/ void BtifRcUpstreamsSettingEvt(btrc_callbacks_t* bt_rc_callbacks, uint16_t event, tAVRC_COMMAND* pavrc_cmd, uint8_t ctype, uint8_t label, void* p_dev, RawAddress* rc_addr, uint8_t rc_handle); /************************************************************************** ** ** Function ListPlayerAppAttrRsp ** ** Description ListPlayerApplicationSettingAttributes (PDU ID: 0x11) ** This method is callled in response to PDU 0x11 ** ** Returns bt_status_t ** ****************************************************************************/ static bt_status_t ListPlayerAppAttrRsp(RawAddress* bd_addr, int num_attr, btrc_player_attr_t *p_attrs); /********************************************************************** ** ** Function ListPlayerAppValueRsp ** ** Description ListPlayerApplicationSettingValues (PDU ID: 0x12) ** This method is called in response to PDU 0x12 ************************************************************************/ static bt_status_t ListPlayerAppValueRsp(RawAddress* bd_addr, int num_val, uint8_t *value); /********************************************************************** ** ** Function GetPlayerAppValueRsp ** ** Description This methos is called in response to PDU ID 0x13 ** ***********************************************************************/ static bt_status_t GetPlayerAppValueRsp(RawAddress* bd_addr, btrc_player_settings_t *p_vals); /******************************************************************** ** ** Function GetPlayerAppAttrTextRsp ** ** Description This method is called in response to get player ** applicaton attribute text response ** ** *******************************************************************/ static bt_status_t GetPlayerAppAttrTextRsp(RawAddress* bd_addr, int num_attr, btrc_player_setting_text_t *p_attrs); /******************************************************************** ** ** Function GetPlayerAppValueTextRsp ** ** Description This method is called in response to Player application ** value text ** ** Return bt_status_t ** *******************************************************************/ static bt_status_t GetPlayerAppValueTextRsp(RawAddress* bd_addr, int num_attr, btrc_player_setting_text_t *p_attrs); /******************************************************************** ** ** Function SetPlayerAppValueRsp ** ** Description This method is called in response to ** application value ** ** Return bt_staus_t ** *******************************************************************/ static bt_status_t SetPlayerAppValueRsp (RawAddress* bd_addr, btrc_status_t rsp_status); private: BtAvrcSetting(); friend struct base::DefaultSingletonTraits; std::unique_ptr setting_impl_; DISALLOW_COPY_AND_ASSIGN(BtAvrcSetting); }; #endif using RegisterNotificationRsp = std::function; class BtAvrcStatusHandling { private: /************************************** * * Internal var for inner status maintain. * **************************************/ static bool is_triggered; static long sco_disc_time; static bool ignore_play_key; static bool force_to_update; static bool ignore_avrcp_play_status; static alarm_t* fake_status_alarm; static RegisterNotificationRsp register_notification_rsp; static void sleep_ms(period_ms_t timeout_ms); static void StartFakeStatusTimer(); static void FakeStatusTimerTimeout(void* data); static void FakeStatusTimeoutHandler(UNUSED_ATTR uint16_t event, char *data); BtAvrcStatusHandling() {}; public: /******************************************************************** ** ** Function IsNeededIgnorePlay ** ** Description Called to check if the play key needed to be ignored. ** ** ** Return true/false ** *******************************************************************/ static bool IsNeededIgnorePlay(long disc_time, tBTA_AV_REMOTE_CMD* p_cmd, RegisterNotificationRsp call_back); static bool GetForceUpdateFlag(); static bool GetIgnoreAvrcpStatusFlag(); static void CancelTimer(); }; } // namespace btif } // namespace bluetooth } // namespace mediatek } // namespace vendor #endif