195489c19Sopenharmony_ci/* 295489c19Sopenharmony_ci * Copyright (C) 2021 Huawei Device Co., Ltd. 395489c19Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 495489c19Sopenharmony_ci * you may not use this file except in compliance with the License. 595489c19Sopenharmony_ci * You may obtain a copy of the License at 695489c19Sopenharmony_ci * 795489c19Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 895489c19Sopenharmony_ci * 995489c19Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1095489c19Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1195489c19Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1295489c19Sopenharmony_ci * See the License for the specific language governing permissions and 1395489c19Sopenharmony_ci * limitations under the License. 1495489c19Sopenharmony_ci */ 1595489c19Sopenharmony_ci 1695489c19Sopenharmony_ci/** 1795489c19Sopenharmony_ci * @file bluetooth_avrcp_tg.h 1895489c19Sopenharmony_ci * 1995489c19Sopenharmony_ci * @brief Declares the class of the AVRCP target framework, including attributes and methods. 2095489c19Sopenharmony_ci * 2195489c19Sopenharmony_ci * @since 6 2295489c19Sopenharmony_ci */ 2395489c19Sopenharmony_ci 2495489c19Sopenharmony_ci#ifndef BLUETOOTH_AVRCP_TG_H 2595489c19Sopenharmony_ci#define BLUETOOTH_AVRCP_TG_H 2695489c19Sopenharmony_ci 2795489c19Sopenharmony_ci#include <vector> 2895489c19Sopenharmony_ci 2995489c19Sopenharmony_ci#include "bluetooth_def.h" 3095489c19Sopenharmony_ci#include "bluetooth_types.h" 3195489c19Sopenharmony_ci#include "bluetooth_remote_device.h" 3295489c19Sopenharmony_ci#include "bluetooth_no_destructor.h" 3395489c19Sopenharmony_ci 3495489c19Sopenharmony_cinamespace OHOS { 3595489c19Sopenharmony_cinamespace Bluetooth { 3695489c19Sopenharmony_ci/** 3795489c19Sopenharmony_ci * @brief This class provides a set of methods for operating the AVRCP target. 3895489c19Sopenharmony_ci * 3995489c19Sopenharmony_ci * @since 6 4095489c19Sopenharmony_ci */ 4195489c19Sopenharmony_ciclass BLUETOOTH_API AvrcpTarget { 4295489c19Sopenharmony_cipublic: 4395489c19Sopenharmony_ci /** 4495489c19Sopenharmony_ci * @brief This abstract class declares a set of methods for observing the <b>AvrcpTarget::IObserver</b> class. 4595489c19Sopenharmony_ci * 4695489c19Sopenharmony_ci * @since 6 4795489c19Sopenharmony_ci */ 4895489c19Sopenharmony_ci class IObserver { 4995489c19Sopenharmony_ci public: 5095489c19Sopenharmony_ci /** 5195489c19Sopenharmony_ci * @brief A constructor used to create an <b>AvrcpController::IObserver</b> instance. 5295489c19Sopenharmony_ci * 5395489c19Sopenharmony_ci * @since 6 5495489c19Sopenharmony_ci */ 5595489c19Sopenharmony_ci IObserver() = default; 5695489c19Sopenharmony_ci 5795489c19Sopenharmony_ci /** 5895489c19Sopenharmony_ci * @brief A destructor used to delete the <b>AvrcpController::IObserver</b> instance. 5995489c19Sopenharmony_ci * 6095489c19Sopenharmony_ci * @since 6 6195489c19Sopenharmony_ci */ 6295489c19Sopenharmony_ci virtual ~IObserver() = default; 6395489c19Sopenharmony_ci 6495489c19Sopenharmony_ci /** 6595489c19Sopenharmony_ci * @brief Observes the state of the connection. 6695489c19Sopenharmony_ci * 6795489c19Sopenharmony_ci * @param[in] device The bluetooth device. 6895489c19Sopenharmony_ci * @param[in] state The connection state. Refer to <b>BTConnectState</b>. 6995489c19Sopenharmony_ci * @param[in] cause The connection change cause. 7095489c19Sopenharmony_ci * 7195489c19Sopenharmony_ci * @since 12 7295489c19Sopenharmony_ci */ 7395489c19Sopenharmony_ci virtual void OnConnectionStateChanged(const BluetoothRemoteDevice &device, int state, int cause) = 0; 7495489c19Sopenharmony_ci }; 7595489c19Sopenharmony_ci 7695489c19Sopenharmony_ci /** 7795489c19Sopenharmony_ci * @brief Gets the static instance of the <b>AvrcpTarget</b> class. 7895489c19Sopenharmony_ci * 7995489c19Sopenharmony_ci * @return The static instance. 8095489c19Sopenharmony_ci * 8195489c19Sopenharmony_ci * @since 6 8295489c19Sopenharmony_ci */ 8395489c19Sopenharmony_ci static AvrcpTarget *GetProfile(void); 8495489c19Sopenharmony_ci 8595489c19Sopenharmony_ci /****************************************************************** 8695489c19Sopenharmony_ci * REGISTER / UNREGISTER OBSERVER * 8795489c19Sopenharmony_ci ******************************************************************/ 8895489c19Sopenharmony_ci 8995489c19Sopenharmony_ci /** 9095489c19Sopenharmony_ci * @brief Registers the observer. 9195489c19Sopenharmony_ci * 9295489c19Sopenharmony_ci * @param[in] observer The pointer to the <b>AvrcpTarget::IObserver</b>. 9395489c19Sopenharmony_ci * @since 6 9495489c19Sopenharmony_ci */ 9595489c19Sopenharmony_ci void RegisterObserver(std::shared_ptr<AvrcpTarget::IObserver> observer); 9695489c19Sopenharmony_ci 9795489c19Sopenharmony_ci /** 9895489c19Sopenharmony_ci * @brief Unregisters the observer. 9995489c19Sopenharmony_ci * 10095489c19Sopenharmony_ci * @param[in] observer The pointer to the <b>AvrcpTarget::IObserver</b>. 10195489c19Sopenharmony_ci * @since 6 10295489c19Sopenharmony_ci */ 10395489c19Sopenharmony_ci void UnregisterObserver(std::shared_ptr<AvrcpTarget::IObserver> observer); 10495489c19Sopenharmony_ci 10595489c19Sopenharmony_ci /****************************************************************** 10695489c19Sopenharmony_ci * CONNECTION * 10795489c19Sopenharmony_ci ******************************************************************/ 10895489c19Sopenharmony_ci 10995489c19Sopenharmony_ci /** 11095489c19Sopenharmony_ci * @brief Sets the active device. 11195489c19Sopenharmony_ci * 11295489c19Sopenharmony_ci * @detail Only one CT can interact witch TG. 11395489c19Sopenharmony_ci * 11495489c19Sopenharmony_ci * @since 6 11595489c19Sopenharmony_ci */ 11695489c19Sopenharmony_ci void SetActiveDevice(const BluetoothRemoteDevice &device); 11795489c19Sopenharmony_ci 11895489c19Sopenharmony_ci /** 11995489c19Sopenharmony_ci * @brief Gets the connected devices. 12095489c19Sopenharmony_ci * 12195489c19Sopenharmony_ci * @return The list of the instance of the <b>BluetoothRemoteDevice</b> class. 12295489c19Sopenharmony_ci * 12395489c19Sopenharmony_ci * @since 6 12495489c19Sopenharmony_ci */ 12595489c19Sopenharmony_ci std::vector<BluetoothRemoteDevice> GetConnectedDevices(void); 12695489c19Sopenharmony_ci 12795489c19Sopenharmony_ci /** 12895489c19Sopenharmony_ci * @brief Gets the devices of the specified states. 12995489c19Sopenharmony_ci * 13095489c19Sopenharmony_ci * @param[in] states The connection states. Refer to <b>BTConnectState</b>. 13195489c19Sopenharmony_ci * @return The list of the instance of the <b>BluetoothRemoteDevice</b> class. 13295489c19Sopenharmony_ci * 13395489c19Sopenharmony_ci * @since 6 13495489c19Sopenharmony_ci */ 13595489c19Sopenharmony_ci std::vector<BluetoothRemoteDevice> GetDevicesByStates(std::vector<int> states); 13695489c19Sopenharmony_ci 13795489c19Sopenharmony_ci /** 13895489c19Sopenharmony_ci * @brief Gets the connection state of the specified bluetooth device. 13995489c19Sopenharmony_ci * 14095489c19Sopenharmony_ci * @param[in] rawAddr The address of the bluetooth device. 14195489c19Sopenharmony_ci * @return The connection state. Refer to <b>BTConnectState</b>. 14295489c19Sopenharmony_ci * 14395489c19Sopenharmony_ci * @since 6 14495489c19Sopenharmony_ci */ 14595489c19Sopenharmony_ci int GetDeviceState(const BluetoothRemoteDevice &device); 14695489c19Sopenharmony_ci 14795489c19Sopenharmony_ci /** 14895489c19Sopenharmony_ci * @brief Connects to the AVRCP CT service. 14995489c19Sopenharmony_ci * 15095489c19Sopenharmony_ci * @param[in] device The bluetooth device. 15195489c19Sopenharmony_ci * @return The result of the method execution. 15295489c19Sopenharmony_ci * @retval true command send success. 15395489c19Sopenharmony_ci * @retval false command seend failed. 15495489c19Sopenharmony_ci * 15595489c19Sopenharmony_ci * @since 6 15695489c19Sopenharmony_ci */ 15795489c19Sopenharmony_ci bool Connect(const BluetoothRemoteDevice &device); 15895489c19Sopenharmony_ci 15995489c19Sopenharmony_ci /** 16095489c19Sopenharmony_ci * @brief Disconnects from the AVRCP CT service. 16195489c19Sopenharmony_ci * 16295489c19Sopenharmony_ci * @param[in] device The bluetooth device. 16395489c19Sopenharmony_ci * @return The result of the method execution. 16495489c19Sopenharmony_ci * @retval true command send success. 16595489c19Sopenharmony_ci * @retval false command seend failed. 16695489c19Sopenharmony_ci * 16795489c19Sopenharmony_ci * @since 6 16895489c19Sopenharmony_ci */ 16995489c19Sopenharmony_ci bool Disconnect(const BluetoothRemoteDevice &device); 17095489c19Sopenharmony_ci /****************************************************************** 17195489c19Sopenharmony_ci * NOTIFICATION * 17295489c19Sopenharmony_ci ******************************************************************/ 17395489c19Sopenharmony_ci 17495489c19Sopenharmony_ci /** 17595489c19Sopenharmony_ci * @brief Notifies the playback status is changed. 17695489c19Sopenharmony_ci * 17795489c19Sopenharmony_ci * @param[in] uid The unique ID of media item. 17895489c19Sopenharmony_ci * @param[in] playbackPos Current playback position in millisecond. 17995489c19Sopenharmony_ci * 18095489c19Sopenharmony_ci * @since 6 18195489c19Sopenharmony_ci */ 18295489c19Sopenharmony_ci void NotifyPlaybackStatusChanged(uint8_t playStatus, uint32_t playbackPos); 18395489c19Sopenharmony_ci 18495489c19Sopenharmony_ci /** 18595489c19Sopenharmony_ci * @brief Notifies the track is changed. 18695489c19Sopenharmony_ci * 18795489c19Sopenharmony_ci * @param[in] uid The unique ID of media item. 18895489c19Sopenharmony_ci * @param[in] playbackPos Current playback position in millisecond. 18995489c19Sopenharmony_ci * 19095489c19Sopenharmony_ci * @since 6 19195489c19Sopenharmony_ci */ 19295489c19Sopenharmony_ci void NotifyTrackChanged(uint64_t uid, uint32_t playbackPos); 19395489c19Sopenharmony_ci 19495489c19Sopenharmony_ci /** 19595489c19Sopenharmony_ci * @brief Notifies the track reached end is changed. 19695489c19Sopenharmony_ci * 19795489c19Sopenharmony_ci * @param[in] playbackPos Current playback position in millisecond. 19895489c19Sopenharmony_ci * 19995489c19Sopenharmony_ci * @since 6 20095489c19Sopenharmony_ci */ 20195489c19Sopenharmony_ci void NotifyTrackReachedEnd(uint32_t playbackPos); 20295489c19Sopenharmony_ci 20395489c19Sopenharmony_ci /** 20495489c19Sopenharmony_ci * @brief Notifies the track reached start is changed. 20595489c19Sopenharmony_ci * 20695489c19Sopenharmony_ci * @param[in] playbackPos Current playback position in millisecond. 20795489c19Sopenharmony_ci * 20895489c19Sopenharmony_ci * @since 6 20995489c19Sopenharmony_ci */ 21095489c19Sopenharmony_ci void NotifyTrackReachedStart(uint32_t playbackPos); 21195489c19Sopenharmony_ci 21295489c19Sopenharmony_ci /** 21395489c19Sopenharmony_ci * @brief Notifies the player application setting is changed. 21495489c19Sopenharmony_ci * 21595489c19Sopenharmony_ci * @param[in] playbackPos Current playback position in millisecond. 21695489c19Sopenharmony_ci * 21795489c19Sopenharmony_ci * @since 6 21895489c19Sopenharmony_ci */ 21995489c19Sopenharmony_ci void NotifyPlaybackPosChanged(uint32_t playbackPos); 22095489c19Sopenharmony_ci 22195489c19Sopenharmony_ci /** 22295489c19Sopenharmony_ci * @brief Notifies the player application setting is changed. 22395489c19Sopenharmony_ci * 22495489c19Sopenharmony_ci * @since 6 22595489c19Sopenharmony_ci */ 22695489c19Sopenharmony_ci void NotifyPlayerAppSettingChanged(const std::vector<uint8_t> &attributes, const std::vector<uint8_t> &values); 22795489c19Sopenharmony_ci 22895489c19Sopenharmony_ci /** 22995489c19Sopenharmony_ci * @brief Notifies the addressed player is changed. 23095489c19Sopenharmony_ci * 23195489c19Sopenharmony_ci * @since 6 23295489c19Sopenharmony_ci */ 23395489c19Sopenharmony_ci void NotifyNowPlayingContentChanged(void); 23495489c19Sopenharmony_ci 23595489c19Sopenharmony_ci /** 23695489c19Sopenharmony_ci * @brief Notifies that has the available player. 23795489c19Sopenharmony_ci * 23895489c19Sopenharmony_ci * @since 6 23995489c19Sopenharmony_ci */ 24095489c19Sopenharmony_ci void NotifyAvailablePlayersChanged(void); 24195489c19Sopenharmony_ci 24295489c19Sopenharmony_ci /** 24395489c19Sopenharmony_ci * @brief Notifies the addressed player is changed. 24495489c19Sopenharmony_ci * 24595489c19Sopenharmony_ci * @param[in] playerId The unique media player id. 24695489c19Sopenharmony_ci * @param[in] uidCounter The UID counter shall be incremented every time the TG makes an update. 24795489c19Sopenharmony_ci * 24895489c19Sopenharmony_ci * @since 6 24995489c19Sopenharmony_ci */ 25095489c19Sopenharmony_ci void NotifyAddressedPlayerChanged(uint16_t playerId, uint16_t uidCounter); 25195489c19Sopenharmony_ci 25295489c19Sopenharmony_ci /** 25395489c19Sopenharmony_ci * @brief Notifies the uids is changed. 25495489c19Sopenharmony_ci * 25595489c19Sopenharmony_ci * @param[in] uidCounter The UID counter shall be incremented every time the TG makes an update. 25695489c19Sopenharmony_ci * 25795489c19Sopenharmony_ci * @since 6 25895489c19Sopenharmony_ci */ 25995489c19Sopenharmony_ci void NotifyUidChanged(uint16_t uidCounter); 26095489c19Sopenharmony_ci 26195489c19Sopenharmony_ci /** 26295489c19Sopenharmony_ci * @brief Notifies the absolute volume is changed. 26395489c19Sopenharmony_ci * 26495489c19Sopenharmony_ci * @param[in] volume The percentage of the absolute volume. Refer to <b>AvrcAbsoluteVolume</b>. 26595489c19Sopenharmony_ci * 26695489c19Sopenharmony_ci * @since 6 26795489c19Sopenharmony_ci */ 26895489c19Sopenharmony_ci void NotifyVolumeChanged(uint8_t volume); 26995489c19Sopenharmony_ci 27095489c19Sopenharmony_ci /** 27195489c19Sopenharmony_ci * @brief The external process calls the A2dpsrc profile interface before the Bluetooth process starts. At this 27295489c19Sopenharmony_ci * time, it needs to monitor the start of the Bluetooth process, and then call this interface to initialize the 27395489c19Sopenharmony_ci * A2dpsrc proflie. 27495489c19Sopenharmony_ci */ 27595489c19Sopenharmony_ci void Init(); 27695489c19Sopenharmony_ci 27795489c19Sopenharmony_ci /** 27895489c19Sopenharmony_ci * @brief audio set device absolute volume. 27995489c19Sopenharmony_ci * 28095489c19Sopenharmony_ci * @param[in] device The remote device. 28195489c19Sopenharmony_ci * @param[in] volumeLevel device absolute volume. 28295489c19Sopenharmony_ci * @return error code 28395489c19Sopenharmony_ci * @since 6 28495489c19Sopenharmony_ci */ 28595489c19Sopenharmony_ci int32_t SetDeviceAbsoluteVolume(const BluetoothRemoteDevice &device, int32_t volumeLevel); 28695489c19Sopenharmony_ci 28795489c19Sopenharmony_ci /** 28895489c19Sopenharmony_ci * @brief set device absolute ability. 28995489c19Sopenharmony_ci * 29095489c19Sopenharmony_ci * @param[in] device The remote device. 29195489c19Sopenharmony_ci * @param[in] ability device absolute ability see {DeviceAbsVolumeAbility}. 29295489c19Sopenharmony_ci * @return error code 29395489c19Sopenharmony_ci * @since 6 29495489c19Sopenharmony_ci */ 29595489c19Sopenharmony_ci int32_t SetDeviceAbsVolumeAbility(const BluetoothRemoteDevice &device, int32_t ability); 29695489c19Sopenharmony_ci 29795489c19Sopenharmony_ci /** 29895489c19Sopenharmony_ci * @brief get device absolute volume ability. 29995489c19Sopenharmony_ci * 30095489c19Sopenharmony_ci * @param[in] device The remote device. 30195489c19Sopenharmony_ci * @param[out] ability device absolute ability see {DeviceAbsVolumeAbility}. 30295489c19Sopenharmony_ci * @return error code 30395489c19Sopenharmony_ci * @since 6 30495489c19Sopenharmony_ci */ 30595489c19Sopenharmony_ci int32_t GetDeviceAbsVolumeAbility(const BluetoothRemoteDevice &device, int32_t &ability); 30695489c19Sopenharmony_ci 30795489c19Sopenharmony_ciprivate: 30895489c19Sopenharmony_ci /** 30995489c19Sopenharmony_ci * @brief A constructor used to create an <b>AvrcpTarget</b> instance. 31095489c19Sopenharmony_ci * 31195489c19Sopenharmony_ci * @since 6 31295489c19Sopenharmony_ci */ 31395489c19Sopenharmony_ci AvrcpTarget(); 31495489c19Sopenharmony_ci 31595489c19Sopenharmony_ci /** 31695489c19Sopenharmony_ci * @brief A destructor used to delete the <b>AvrcpTarget</b> instance. 31795489c19Sopenharmony_ci * 31895489c19Sopenharmony_ci * @since 6 31995489c19Sopenharmony_ci */ 32095489c19Sopenharmony_ci ~AvrcpTarget(); 32195489c19Sopenharmony_ci 32295489c19Sopenharmony_ci BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(AvrcpTarget); 32395489c19Sopenharmony_ci BLUETOOTH_DECLARE_IMPL(); 32495489c19Sopenharmony_ci 32595489c19Sopenharmony_ci#ifdef DTFUZZ_TEST 32695489c19Sopenharmony_ci friend class BluetoothNoDestructor<AvrcpTarget>; 32795489c19Sopenharmony_ci#endif 32895489c19Sopenharmony_ci}; 32995489c19Sopenharmony_ci} // namespace Bluetooth 33095489c19Sopenharmony_ci} // namespace OHOS 33195489c19Sopenharmony_ci 33295489c19Sopenharmony_ci#endif // !BLUETOOTH_AVRCP_TG_H 333