195489c19Sopenharmony_ci/*
295489c19Sopenharmony_ci * Copyright (C) 2022 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 * @addtogroup Bluetooth
1895489c19Sopenharmony_ci * @{
1995489c19Sopenharmony_ci *
2095489c19Sopenharmony_ci * @brief Defines a bluetooth system that provides basic bluetooth connection and profile functions,
2195489c19Sopenharmony_ci *        including A2DP, AVRCP, BLE, GATT, HFP, MAP, PBAP, and SPP, etc.
2295489c19Sopenharmony_ci *
2395489c19Sopenharmony_ci */
2495489c19Sopenharmony_ci
2595489c19Sopenharmony_ci/**
2695489c19Sopenharmony_ci * @file bluetooth_opp.h
2795489c19Sopenharmony_ci *
2895489c19Sopenharmony_ci * @brief Declares OPP role framework functions, including basic and observer functions.
2995489c19Sopenharmony_ci *
3095489c19Sopenharmony_ci */
3195489c19Sopenharmony_ci#ifndef BLUETOOTH_OPP_H
3295489c19Sopenharmony_ci#define BLUETOOTH_OPP_H
3395489c19Sopenharmony_ci
3495489c19Sopenharmony_ci#include <string>
3595489c19Sopenharmony_ci#include <vector>
3695489c19Sopenharmony_ci#include <memory>
3795489c19Sopenharmony_ci
3895489c19Sopenharmony_ci#include "bluetooth_def.h"
3995489c19Sopenharmony_ci#include "bluetooth_remote_device.h"
4095489c19Sopenharmony_ci#include "bluetooth_types.h"
4195489c19Sopenharmony_ci#include "bluetooth_no_destructor.h"
4295489c19Sopenharmony_cinamespace OHOS {
4395489c19Sopenharmony_cinamespace Bluetooth {
4495489c19Sopenharmony_ci/**
4595489c19Sopenharmony_ci * @brief Bluetooth Opp Transfer Information.
4695489c19Sopenharmony_ci *
4795489c19Sopenharmony_ci * @since 9
4895489c19Sopenharmony_ci */
4995489c19Sopenharmony_ciclass BLUETOOTH_API BluetoothOppTransferInformation {
5095489c19Sopenharmony_cipublic:
5195489c19Sopenharmony_ci    /**
5295489c19Sopenharmony_ci     * @brief A constructor used to create a <b>BluetoothOppTransferInformation</b> instance.
5395489c19Sopenharmony_ci     *
5495489c19Sopenharmony_ci     * @since 6
5595489c19Sopenharmony_ci     */
5695489c19Sopenharmony_ci    BluetoothOppTransferInformation();
5795489c19Sopenharmony_ci
5895489c19Sopenharmony_ci    /**
5995489c19Sopenharmony_ci     * @brief A destructor used to delete the <b>BluetoothOppTransferInformation</b> instance.
6095489c19Sopenharmony_ci     *
6195489c19Sopenharmony_ci     * @since 6
6295489c19Sopenharmony_ci     */
6395489c19Sopenharmony_ci    ~BluetoothOppTransferInformation();
6495489c19Sopenharmony_ci
6595489c19Sopenharmony_ci    /**
6695489c19Sopenharmony_ci     * @brief Get Id.
6795489c19Sopenharmony_ci     *
6895489c19Sopenharmony_ci     * @return Returns Id.
6995489c19Sopenharmony_ci     * @since 6
7095489c19Sopenharmony_ci     */
7195489c19Sopenharmony_ci    int GetId() const;
7295489c19Sopenharmony_ci
7395489c19Sopenharmony_ci    /**
7495489c19Sopenharmony_ci     * @brief Get File Name.
7595489c19Sopenharmony_ci     *
7695489c19Sopenharmony_ci     * @return File Name.
7795489c19Sopenharmony_ci     * @since 6
7895489c19Sopenharmony_ci     */
7995489c19Sopenharmony_ci    std::string GetFileName() const;
8095489c19Sopenharmony_ci
8195489c19Sopenharmony_ci    /**
8295489c19Sopenharmony_ci     * @brief Get File Path.
8395489c19Sopenharmony_ci     *
8495489c19Sopenharmony_ci     * @return Returns File Path.
8595489c19Sopenharmony_ci     * @since 6
8695489c19Sopenharmony_ci     */
8795489c19Sopenharmony_ci    std::string GetFilePath() const;
8895489c19Sopenharmony_ci
8995489c19Sopenharmony_ci    /**
9095489c19Sopenharmony_ci     * @brief Get Mime Type.
9195489c19Sopenharmony_ci     *
9295489c19Sopenharmony_ci     * @since 6
9395489c19Sopenharmony_ci     */
9495489c19Sopenharmony_ci    std::string GetMimeType() const;
9595489c19Sopenharmony_ci
9695489c19Sopenharmony_ci    /**
9795489c19Sopenharmony_ci     * @brief Get Device Name.
9895489c19Sopenharmony_ci     *
9995489c19Sopenharmony_ci     * @return Returns Device Name.
10095489c19Sopenharmony_ci     * @since 6
10195489c19Sopenharmony_ci     */
10295489c19Sopenharmony_ci    std::string GetDeviceName() const;
10395489c19Sopenharmony_ci
10495489c19Sopenharmony_ci    /**
10595489c19Sopenharmony_ci     * @brief Get Device Address.
10695489c19Sopenharmony_ci     *
10795489c19Sopenharmony_ci     * @return Returns Device Address.
10895489c19Sopenharmony_ci     * @since 6
10995489c19Sopenharmony_ci     */
11095489c19Sopenharmony_ci    std::string GetDeviceAddress() const;
11195489c19Sopenharmony_ci
11295489c19Sopenharmony_ci    /**
11395489c19Sopenharmony_ci     * @brief Get Direction.
11495489c19Sopenharmony_ci     *
11595489c19Sopenharmony_ci     * @return Returns Direction.
11695489c19Sopenharmony_ci     * @since 6
11795489c19Sopenharmony_ci     */
11895489c19Sopenharmony_ci    int GetDirection() const;
11995489c19Sopenharmony_ci
12095489c19Sopenharmony_ci    /**
12195489c19Sopenharmony_ci     * @brief Get Status.
12295489c19Sopenharmony_ci     *
12395489c19Sopenharmony_ci     * @return Returns Status.
12495489c19Sopenharmony_ci     * @since 6
12595489c19Sopenharmony_ci     */
12695489c19Sopenharmony_ci    int GetStatus() const;
12795489c19Sopenharmony_ci
12895489c19Sopenharmony_ci    /**
12995489c19Sopenharmony_ci     * @brief Get Failed Reason.
13095489c19Sopenharmony_ci     *
13195489c19Sopenharmony_ci     * @return Returns Failed Reason.
13295489c19Sopenharmony_ci     * @since 6
13395489c19Sopenharmony_ci     */
13495489c19Sopenharmony_ci    int GetFailedReason() const;
13595489c19Sopenharmony_ci
13695489c19Sopenharmony_ci    /**
13795489c19Sopenharmony_ci     * @brief Get Time Stamp.
13895489c19Sopenharmony_ci     *
13995489c19Sopenharmony_ci     * @return TimeStamp.
14095489c19Sopenharmony_ci     * @since 6
14195489c19Sopenharmony_ci     */
14295489c19Sopenharmony_ci    uint64_t GetTimeStamp() const;
14395489c19Sopenharmony_ci
14495489c19Sopenharmony_ci    /**
14595489c19Sopenharmony_ci     * @brief Get Current Bytes.
14695489c19Sopenharmony_ci     *
14795489c19Sopenharmony_ci     * @return Returns Current Bytes.
14895489c19Sopenharmony_ci     * @since 6
14995489c19Sopenharmony_ci     */
15095489c19Sopenharmony_ci    uint64_t GetCurrentBytes() const;
15195489c19Sopenharmony_ci
15295489c19Sopenharmony_ci    /**
15395489c19Sopenharmony_ci     * @brief Get Total Bytes.
15495489c19Sopenharmony_ci     *
15595489c19Sopenharmony_ci     * @return Returns TotalBytes.
15695489c19Sopenharmony_ci     * @since 6
15795489c19Sopenharmony_ci     */
15895489c19Sopenharmony_ci    uint64_t GetTotalBytes() const;
15995489c19Sopenharmony_ci
16095489c19Sopenharmony_ci    /**
16195489c19Sopenharmony_ci     * @brief Set Id.
16295489c19Sopenharmony_ci     *
16395489c19Sopenharmony_ci     * @param interval Id.
16495489c19Sopenharmony_ci     * @since 6
16595489c19Sopenharmony_ci     */
16695489c19Sopenharmony_ci    void SetId(int id);
16795489c19Sopenharmony_ci
16895489c19Sopenharmony_ci    /**
16995489c19Sopenharmony_ci     * @brief Set File Name.
17095489c19Sopenharmony_ci     *
17195489c19Sopenharmony_ci     * @param interval File Name.
17295489c19Sopenharmony_ci     * @since 6
17395489c19Sopenharmony_ci     */
17495489c19Sopenharmony_ci    void SetFileName(std::string fileName);
17595489c19Sopenharmony_ci
17695489c19Sopenharmony_ci    /**
17795489c19Sopenharmony_ci     * @brief Set File Path.
17895489c19Sopenharmony_ci     *
17995489c19Sopenharmony_ci     * @param interval File Path.
18095489c19Sopenharmony_ci     * @since 6
18195489c19Sopenharmony_ci     */
18295489c19Sopenharmony_ci    void SetFilePath(std::string filePath);
18395489c19Sopenharmony_ci
18495489c19Sopenharmony_ci    /**
18595489c19Sopenharmony_ci     * @brief Set Mime Type.
18695489c19Sopenharmony_ci     *
18795489c19Sopenharmony_ci     * @param interval Mime Type.
18895489c19Sopenharmony_ci     * @since 6
18995489c19Sopenharmony_ci     */
19095489c19Sopenharmony_ci    void SetMimeType(std::string mimeType);
19195489c19Sopenharmony_ci
19295489c19Sopenharmony_ci    /**
19395489c19Sopenharmony_ci     * @brief Set Device Name.
19495489c19Sopenharmony_ci     *
19595489c19Sopenharmony_ci     * @param interval Device Name.
19695489c19Sopenharmony_ci     * @since 6
19795489c19Sopenharmony_ci     */
19895489c19Sopenharmony_ci    void SetDeviceName(std::string deviceName);
19995489c19Sopenharmony_ci
20095489c19Sopenharmony_ci    /**
20195489c19Sopenharmony_ci     * @brief Set Device Address.
20295489c19Sopenharmony_ci     *
20395489c19Sopenharmony_ci     * @param interval Device Address.
20495489c19Sopenharmony_ci     * @since 6
20595489c19Sopenharmony_ci     */
20695489c19Sopenharmony_ci    void SetDeviceAddress(std::string deviceAddress);
20795489c19Sopenharmony_ci
20895489c19Sopenharmony_ci    /**
20995489c19Sopenharmony_ci     * @brief Set Direction.
21095489c19Sopenharmony_ci     *
21195489c19Sopenharmony_ci     * @param interval Direction.
21295489c19Sopenharmony_ci     * @since 6
21395489c19Sopenharmony_ci     */
21495489c19Sopenharmony_ci    void SetDirection(int direction);
21595489c19Sopenharmony_ci
21695489c19Sopenharmony_ci    /**
21795489c19Sopenharmony_ci     * @brief Set Status.
21895489c19Sopenharmony_ci     *
21995489c19Sopenharmony_ci     * @param interval Status.
22095489c19Sopenharmony_ci     * @since 6
22195489c19Sopenharmony_ci     */
22295489c19Sopenharmony_ci    void SetStatus(int status);
22395489c19Sopenharmony_ci
22495489c19Sopenharmony_ci    /**
22595489c19Sopenharmony_ci     * @brief Set Failed Reason.
22695489c19Sopenharmony_ci     *
22795489c19Sopenharmony_ci     * @param interval Failed Reason.
22895489c19Sopenharmony_ci     * @since 6
22995489c19Sopenharmony_ci     */
23095489c19Sopenharmony_ci    void SetFailedReason(int failedReason);
23195489c19Sopenharmony_ci
23295489c19Sopenharmony_ci    /**
23395489c19Sopenharmony_ci     * @brief Set Time Stamp.
23495489c19Sopenharmony_ci     *
23595489c19Sopenharmony_ci     * @param interval Time Stamp.
23695489c19Sopenharmony_ci     * @since 6
23795489c19Sopenharmony_ci     */
23895489c19Sopenharmony_ci    void SetTimeStamp(uint64_t timeStamp);
23995489c19Sopenharmony_ci
24095489c19Sopenharmony_ci    /**
24195489c19Sopenharmony_ci     * @brief Set Current Bytes.
24295489c19Sopenharmony_ci     *
24395489c19Sopenharmony_ci     * @param interval Current Bytes.
24495489c19Sopenharmony_ci     * @since 6
24595489c19Sopenharmony_ci     */
24695489c19Sopenharmony_ci    void SetCurrentBytes(uint64_t currentBytes);
24795489c19Sopenharmony_ci
24895489c19Sopenharmony_ci    /**
24995489c19Sopenharmony_ci     * @brief Set Total Bytes.
25095489c19Sopenharmony_ci     *
25195489c19Sopenharmony_ci     * @param interval Total Bytes.
25295489c19Sopenharmony_ci     * @since 6
25395489c19Sopenharmony_ci     */
25495489c19Sopenharmony_ci    void SetTotalBytes(uint64_t totalBytes);
25595489c19Sopenharmony_ci
25695489c19Sopenharmony_ciprivate:
25795489c19Sopenharmony_ci    int id_ = -1;
25895489c19Sopenharmony_ci    std::string fileName_;
25995489c19Sopenharmony_ci    std::string filePath_;
26095489c19Sopenharmony_ci    std::string mimeType_;
26195489c19Sopenharmony_ci    std::string deviceName_;
26295489c19Sopenharmony_ci    std::string deviceAddress_;
26395489c19Sopenharmony_ci    int direction_ = 0;
26495489c19Sopenharmony_ci    int status_ = 0;
26595489c19Sopenharmony_ci    int failedReason_ = 0;
26695489c19Sopenharmony_ci    uint64_t timeStamp_ = 0;
26795489c19Sopenharmony_ci    uint64_t currentBytes_ = 0;
26895489c19Sopenharmony_ci    uint64_t totalBytes_ = 0;
26995489c19Sopenharmony_ci};
27095489c19Sopenharmony_ci
27195489c19Sopenharmony_ci/**
27295489c19Sopenharmony_ci * @brief Class for Opp Host observer functions.
27395489c19Sopenharmony_ci *
27495489c19Sopenharmony_ci */
27595489c19Sopenharmony_ciclass OppObserver {
27695489c19Sopenharmony_cipublic:
27795489c19Sopenharmony_ci    /**
27895489c19Sopenharmony_ci     * @brief The observer function to notify receive incoming file changed.
27995489c19Sopenharmony_ci     *
28095489c19Sopenharmony_ci     * @param transferInformation transfer Information.
28195489c19Sopenharmony_ci     */
28295489c19Sopenharmony_ci    virtual void OnReceiveIncomingFileChanged(const BluetoothOppTransferInformation &transferInformation)
28395489c19Sopenharmony_ci    {}
28495489c19Sopenharmony_ci
28595489c19Sopenharmony_ci   /**
28695489c19Sopenharmony_ci     * @brief The observer function to notify transfer state changed.
28795489c19Sopenharmony_ci     *
28895489c19Sopenharmony_ci     * @param transferInformation transfer Information.
28995489c19Sopenharmony_ci     */
29095489c19Sopenharmony_ci    virtual void OnTransferStateChanged(const BluetoothOppTransferInformation &transferInformation)
29195489c19Sopenharmony_ci    {}
29295489c19Sopenharmony_ci
29395489c19Sopenharmony_ci    /**
29495489c19Sopenharmony_ci     * @brief Destroy the OppObserver object.
29595489c19Sopenharmony_ci     *
29695489c19Sopenharmony_ci     */
29795489c19Sopenharmony_ci    virtual ~OppObserver()
29895489c19Sopenharmony_ci    {}
29995489c19Sopenharmony_ci};
30095489c19Sopenharmony_ci
30195489c19Sopenharmony_ci/**
30295489c19Sopenharmony_ci * @brief Class for Opp API.
30395489c19Sopenharmony_ci *
30495489c19Sopenharmony_ci */
30595489c19Sopenharmony_ciclass BLUETOOTH_API Opp {
30695489c19Sopenharmony_cipublic:
30795489c19Sopenharmony_ci    /**
30895489c19Sopenharmony_ci     * @brief Get the instance of Opp object.
30995489c19Sopenharmony_ci     *
31095489c19Sopenharmony_ci     * @return Returns the pointer to the Opp instance.
31195489c19Sopenharmony_ci     */
31295489c19Sopenharmony_ci    static Opp *GetProfile();
31395489c19Sopenharmony_ci
31495489c19Sopenharmony_ci    /**
31595489c19Sopenharmony_ci     * @brief Send File.
31695489c19Sopenharmony_ci     *
31795489c19Sopenharmony_ci     * @return Return operate result to confirm whether the file is successfully sent.
31895489c19Sopenharmony_ci     */
31995489c19Sopenharmony_ci    int32_t SendFile(std::string device, std::vector<std::string> filePaths,
32095489c19Sopenharmony_ci        std::vector<std::string> mimeTypes, bool& result);
32195489c19Sopenharmony_ci
32295489c19Sopenharmony_ci    /**
32395489c19Sopenharmony_ci     * @brief Set Incoming File Confirmation.
32495489c19Sopenharmony_ci     *
32595489c19Sopenharmony_ci     * @return Return operate result to confirm whether the setting is successful.
32695489c19Sopenharmony_ci     */
32795489c19Sopenharmony_ci    int32_t SetIncomingFileConfirmation(bool accept);
32895489c19Sopenharmony_ci
32995489c19Sopenharmony_ci    /**
33095489c19Sopenharmony_ci     * @brief Get Current Transfer Information.
33195489c19Sopenharmony_ci     *
33295489c19Sopenharmony_ci     * @return Return operate result to getCurrentTransferInformation.
33395489c19Sopenharmony_ci     */
33495489c19Sopenharmony_ci    int32_t GetCurrentTransferInformation(BluetoothOppTransferInformation &transferInformation);
33595489c19Sopenharmony_ci
33695489c19Sopenharmony_ci     /**
33795489c19Sopenharmony_ci     * @brief Cancel Transfer.
33895489c19Sopenharmony_ci     *
33995489c19Sopenharmony_ci     * @return Return operate result to confirm whether the cancellation is set successfully.
34095489c19Sopenharmony_ci     */
34195489c19Sopenharmony_ci    int32_t CancelTransfer(bool& result);
34295489c19Sopenharmony_ci
34395489c19Sopenharmony_ci    /**
34495489c19Sopenharmony_ci     * @brief Get remote opp device list which are in the specified states.
34595489c19Sopenharmony_ci     *
34695489c19Sopenharmony_ci     * @param states List of remote device states.
34795489c19Sopenharmony_ci     * @param result the list of devices
34895489c19Sopenharmony_ci     * @return Returns operate result.
34995489c19Sopenharmony_ci     */
35095489c19Sopenharmony_ci    int32_t GetDevicesByStates(const std::vector<int32_t> &states, std::vector<BluetoothRemoteDevice> &result) const;
35195489c19Sopenharmony_ci
35295489c19Sopenharmony_ci    /**
35395489c19Sopenharmony_ci     * @brief Get the connection state of the specified remote opp device.
35495489c19Sopenharmony_ci     *
35595489c19Sopenharmony_ci     * @param device Remote device object.
35695489c19Sopenharmony_ci     * @param result the connection state of the remote device
35795489c19Sopenharmony_ci     * @return Returns operate result.
35895489c19Sopenharmony_ci     */
35995489c19Sopenharmony_ci    int32_t GetDeviceState(const BluetoothRemoteDevice &device, int32_t &result) const;
36095489c19Sopenharmony_ci
36195489c19Sopenharmony_ci    /**
36295489c19Sopenharmony_ci     * @brief Register Opp observer instance.
36395489c19Sopenharmony_ci     *
36495489c19Sopenharmony_ci     * @param observer Opp observer instance.
36595489c19Sopenharmony_ci     */
36695489c19Sopenharmony_ci    void RegisterObserver(std::shared_ptr<OppObserver> observer);
36795489c19Sopenharmony_ci
36895489c19Sopenharmony_ci    /**
36995489c19Sopenharmony_ci     * @brief Deregister Opp observer instance.
37095489c19Sopenharmony_ci     *
37195489c19Sopenharmony_ci     * @param observer Opp observer instance.
37295489c19Sopenharmony_ci     */
37395489c19Sopenharmony_ci    void DeregisterObserver(std::shared_ptr<OppObserver> observer);
37495489c19Sopenharmony_ci
37595489c19Sopenharmony_ci    /**
37695489c19Sopenharmony_ci     * @brief The external process calls the Opp profile interface before the Bluetooth process starts. At this
37795489c19Sopenharmony_ci     * time, it needs to monitor the start of the Bluetooth process, and then call this interface to initialize the
37895489c19Sopenharmony_ci     * Opp proflie.
37995489c19Sopenharmony_ci     */
38095489c19Sopenharmony_ci    void Init();
38195489c19Sopenharmony_ci
38295489c19Sopenharmony_ci    /**
38395489c19Sopenharmony_ci     * @brief Static Opp observer instance.
38495489c19Sopenharmony_ci     *
38595489c19Sopenharmony_ci     */
38695489c19Sopenharmony_ci    static OppObserver *instance_;
38795489c19Sopenharmony_ci
38895489c19Sopenharmony_ciprivate:
38995489c19Sopenharmony_ci    Opp();
39095489c19Sopenharmony_ci    ~Opp();
39195489c19Sopenharmony_ci    BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(Opp);
39295489c19Sopenharmony_ci    BLUETOOTH_DECLARE_IMPL();
39395489c19Sopenharmony_ci
39495489c19Sopenharmony_ci#ifdef DTFUZZ_TEST
39595489c19Sopenharmony_ci    friend class BluetoothNoDestructor<Opp>;
39695489c19Sopenharmony_ci#endif
39795489c19Sopenharmony_ci};
39895489c19Sopenharmony_ci}  // namespace Bluetooth
39995489c19Sopenharmony_ci}  // namespace OHOS
40095489c19Sopenharmony_ci#endif  // BLUETOOTH_OPP_H