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