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