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 * @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 * @since 6 2495489c19Sopenharmony_ci * 2595489c19Sopenharmony_ci */ 2695489c19Sopenharmony_ci 2795489c19Sopenharmony_ci/** 2895489c19Sopenharmony_ci * @file bluetooth_gatt_client.h 2995489c19Sopenharmony_ci * 3095489c19Sopenharmony_ci * @brief Bluetooth gatt client interface. 3195489c19Sopenharmony_ci * 3295489c19Sopenharmony_ci * @since 6 3395489c19Sopenharmony_ci * 3495489c19Sopenharmony_ci */ 3595489c19Sopenharmony_ci 3695489c19Sopenharmony_ci#ifndef BLUETOOTH_GATT_CLIENT_H 3795489c19Sopenharmony_ci#define BLUETOOTH_GATT_CLIENT_H 3895489c19Sopenharmony_ci 3995489c19Sopenharmony_ci#include "bluetooth_def.h" 4095489c19Sopenharmony_ci#include "bluetooth_gatt_service.h" 4195489c19Sopenharmony_ci#include "bluetooth_remote_device.h" 4295489c19Sopenharmony_ci#include <memory> 4395489c19Sopenharmony_ci 4495489c19Sopenharmony_cinamespace OHOS { 4595489c19Sopenharmony_cinamespace Bluetooth { 4695489c19Sopenharmony_ci 4795489c19Sopenharmony_ci/** 4895489c19Sopenharmony_ci * @brief Class for GattClientCallback functions. 4995489c19Sopenharmony_ci * 5095489c19Sopenharmony_ci * @since 6 5195489c19Sopenharmony_ci * 5295489c19Sopenharmony_ci */ 5395489c19Sopenharmony_ciclass GattClientCallback { 5495489c19Sopenharmony_cipublic: 5595489c19Sopenharmony_ci /** 5695489c19Sopenharmony_ci * @brief The function to OnConnectionStateChanged. 5795489c19Sopenharmony_ci * 5895489c19Sopenharmony_ci * @param connectionState callback of gattClientCallback. 5995489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 6095489c19Sopenharmony_ci * @since 6 6195489c19Sopenharmony_ci * 6295489c19Sopenharmony_ci */ 6395489c19Sopenharmony_ci virtual void OnConnectionStateChanged(int connectionState, int ret) = 0; 6495489c19Sopenharmony_ci 6595489c19Sopenharmony_ci /** 6695489c19Sopenharmony_ci * @brief The function to OnCharacteristicChanged. 6795489c19Sopenharmony_ci * 6895489c19Sopenharmony_ci * @param characteristic Characteristic object to changed. 6995489c19Sopenharmony_ci * @since 6 7095489c19Sopenharmony_ci * 7195489c19Sopenharmony_ci */ 7295489c19Sopenharmony_ci virtual void OnCharacteristicChanged(const GattCharacteristic &characteristic) 7395489c19Sopenharmony_ci {} 7495489c19Sopenharmony_ci 7595489c19Sopenharmony_ci /** 7695489c19Sopenharmony_ci * @brief The function to OnCharacteristicReadResult. 7795489c19Sopenharmony_ci * 7895489c19Sopenharmony_ci * @param characteristic Characteristic object. 7995489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 8095489c19Sopenharmony_ci * @since 6 8195489c19Sopenharmony_ci * 8295489c19Sopenharmony_ci */ 8395489c19Sopenharmony_ci virtual void OnCharacteristicReadResult(const GattCharacteristic &characteristic, int ret) 8495489c19Sopenharmony_ci {} 8595489c19Sopenharmony_ci 8695489c19Sopenharmony_ci virtual void OnReadRemoteRssiValueResult(int rssi, int status) 8795489c19Sopenharmony_ci {} 8895489c19Sopenharmony_ci /** 8995489c19Sopenharmony_ci * @brief The function to OnCharacteristicWriteResult. 9095489c19Sopenharmony_ci * 9195489c19Sopenharmony_ci * @param characteristic Characteristic object. 9295489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 9395489c19Sopenharmony_ci * @since 6 9495489c19Sopenharmony_ci * 9595489c19Sopenharmony_ci */ 9695489c19Sopenharmony_ci virtual void OnCharacteristicWriteResult(const GattCharacteristic &characteristic, int ret) 9795489c19Sopenharmony_ci {} 9895489c19Sopenharmony_ci 9995489c19Sopenharmony_ci /** 10095489c19Sopenharmony_ci * @brief The function to OnDescriptorReadResult. 10195489c19Sopenharmony_ci * 10295489c19Sopenharmony_ci * @param descriptor descriptor object. 10395489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 10495489c19Sopenharmony_ci * @since 6 10595489c19Sopenharmony_ci * 10695489c19Sopenharmony_ci */ 10795489c19Sopenharmony_ci virtual void OnDescriptorReadResult(const GattDescriptor &descriptor, int ret) 10895489c19Sopenharmony_ci {} 10995489c19Sopenharmony_ci 11095489c19Sopenharmony_ci /** 11195489c19Sopenharmony_ci * @brief The function to OnDescriptorWriteResult. 11295489c19Sopenharmony_ci * 11395489c19Sopenharmony_ci * @param descriptor descriptor object. 11495489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 11595489c19Sopenharmony_ci * @since 6 11695489c19Sopenharmony_ci * 11795489c19Sopenharmony_ci */ 11895489c19Sopenharmony_ci virtual void OnDescriptorWriteResult(const GattDescriptor &descriptor, int ret) 11995489c19Sopenharmony_ci {} 12095489c19Sopenharmony_ci 12195489c19Sopenharmony_ci /** 12295489c19Sopenharmony_ci * @brief The function to OnMtuUpdate. 12395489c19Sopenharmony_ci * 12495489c19Sopenharmony_ci * @param mtu mtu to update. 12595489c19Sopenharmony_ci * @param ret ret of GattClientCallback. 12695489c19Sopenharmony_ci * @since 6 12795489c19Sopenharmony_ci * 12895489c19Sopenharmony_ci */ 12995489c19Sopenharmony_ci virtual void OnMtuUpdate(int mtu, int ret) 13095489c19Sopenharmony_ci {} 13195489c19Sopenharmony_ci 13295489c19Sopenharmony_ci /** 13395489c19Sopenharmony_ci * @brief The function to OnServicesDiscovered. 13495489c19Sopenharmony_ci * 13595489c19Sopenharmony_ci * @param status Status object. 13695489c19Sopenharmony_ci * @since 6 13795489c19Sopenharmony_ci * 13895489c19Sopenharmony_ci */ 13995489c19Sopenharmony_ci virtual void OnServicesDiscovered(int status) 14095489c19Sopenharmony_ci {} 14195489c19Sopenharmony_ci 14295489c19Sopenharmony_ci /** 14395489c19Sopenharmony_ci * @brief The function to OnConnectionParameterChanged. 14495489c19Sopenharmony_ci * 14595489c19Sopenharmony_ci * @param interval interval object. 14695489c19Sopenharmony_ci * @param latency latency object. 14795489c19Sopenharmony_ci * @param timeout timeout object. 14895489c19Sopenharmony_ci * @param status status object. 14995489c19Sopenharmony_ci * @since 6 15095489c19Sopenharmony_ci * 15195489c19Sopenharmony_ci */ 15295489c19Sopenharmony_ci virtual void OnConnectionParameterChanged(int interval, int latency, int timeout, int status) 15395489c19Sopenharmony_ci {} 15495489c19Sopenharmony_ci 15595489c19Sopenharmony_ci /** 15695489c19Sopenharmony_ci * @brief The function to OnSetNotifyCharacteristic. 15795489c19Sopenharmony_ci * 15895489c19Sopenharmony_ci * @param status status object. 15995489c19Sopenharmony_ci * @since 6 16095489c19Sopenharmony_ci * 16195489c19Sopenharmony_ci */ 16295489c19Sopenharmony_ci virtual void OnSetNotifyCharacteristic(const GattCharacteristic &characteristic, int status) 16395489c19Sopenharmony_ci {} 16495489c19Sopenharmony_ci 16595489c19Sopenharmony_ci /** 16695489c19Sopenharmony_ci * @brief A destructor of GattClientCallback. 16795489c19Sopenharmony_ci * 16895489c19Sopenharmony_ci * @since 6 16995489c19Sopenharmony_ci * 17095489c19Sopenharmony_ci */ 17195489c19Sopenharmony_ci virtual ~GattClientCallback() 17295489c19Sopenharmony_ci {} 17395489c19Sopenharmony_ci}; 17495489c19Sopenharmony_ci 17595489c19Sopenharmony_ci/** 17695489c19Sopenharmony_ci * @brief Class for GattClient functions. 17795489c19Sopenharmony_ci * 17895489c19Sopenharmony_ci * @since 6 17995489c19Sopenharmony_ci * 18095489c19Sopenharmony_ci */ 18195489c19Sopenharmony_ciclass BLUETOOTH_API GattClient : public std::enable_shared_from_this<GattClient> { 18295489c19Sopenharmony_cipublic: 18395489c19Sopenharmony_ci 18495489c19Sopenharmony_ci /** 18595489c19Sopenharmony_ci * @brief init gattClient. 18695489c19Sopenharmony_ci * 18795489c19Sopenharmony_ci * @return init api init result. 18895489c19Sopenharmony_ci * @since 6 18995489c19Sopenharmony_ci * 19095489c19Sopenharmony_ci */ 19195489c19Sopenharmony_ci bool Init(); 19295489c19Sopenharmony_ci 19395489c19Sopenharmony_ci /** 19495489c19Sopenharmony_ci * @brief The function to Connect. 19595489c19Sopenharmony_ci * 19695489c19Sopenharmony_ci * @param callback callback of gattClientCallback. 19795489c19Sopenharmony_ci * @param isAutoConnect isAutoConnect of GattClient. 19895489c19Sopenharmony_ci * @param transport transport of GattClient. 19995489c19Sopenharmony_ci * @return int api accept status. 20095489c19Sopenharmony_ci * @since 6 20195489c19Sopenharmony_ci * 20295489c19Sopenharmony_ci */ 20395489c19Sopenharmony_ci int Connect(std::weak_ptr<GattClientCallback> callback, bool isAutoConnect, int transport); 20495489c19Sopenharmony_ci 20595489c19Sopenharmony_ci /** 20695489c19Sopenharmony_ci * @brief The function to request connection priority. 20795489c19Sopenharmony_ci * 20895489c19Sopenharmony_ci * @param connPriority connPriority of GattClient. 20995489c19Sopenharmony_ci * @return int api accept status. 21095489c19Sopenharmony_ci * @since 6 21195489c19Sopenharmony_ci * 21295489c19Sopenharmony_ci */ 21395489c19Sopenharmony_ci int RequestConnectionPriority(int connPriority); 21495489c19Sopenharmony_ci 21595489c19Sopenharmony_ci /** 21695489c19Sopenharmony_ci * @brief The function to request fastest connection. 21795489c19Sopenharmony_ci * 21895489c19Sopenharmony_ci * @return int api accept status. 21995489c19Sopenharmony_ci */ 22095489c19Sopenharmony_ci int RequestFastestConn(); 22195489c19Sopenharmony_ci 22295489c19Sopenharmony_ci /** 22395489c19Sopenharmony_ci * @brief The function to disconnect. 22495489c19Sopenharmony_ci * 22595489c19Sopenharmony_ci * @return int api accept status. 22695489c19Sopenharmony_ci * @since 6 22795489c19Sopenharmony_ci * 22895489c19Sopenharmony_ci */ 22995489c19Sopenharmony_ci int Disconnect(); 23095489c19Sopenharmony_ci 23195489c19Sopenharmony_ci /** 23295489c19Sopenharmony_ci * @brief The function to close. 23395489c19Sopenharmony_ci * 23495489c19Sopenharmony_ci * @return int. 23595489c19Sopenharmony_ci * @since 6 23695489c19Sopenharmony_ci * 23795489c19Sopenharmony_ci */ 23895489c19Sopenharmony_ci int Close(); 23995489c19Sopenharmony_ci 24095489c19Sopenharmony_ci /** 24195489c19Sopenharmony_ci * @brief The function to discover services. 24295489c19Sopenharmony_ci * 24395489c19Sopenharmony_ci * @return int api accept status. 24495489c19Sopenharmony_ci * @since 6 24595489c19Sopenharmony_ci * 24695489c19Sopenharmony_ci */ 24795489c19Sopenharmony_ci int DiscoverServices(); 24895489c19Sopenharmony_ci 24995489c19Sopenharmony_ci /** 25095489c19Sopenharmony_ci * @brief The function to get service. 25195489c19Sopenharmony_ci * 25295489c19Sopenharmony_ci * @param uuid uuid of GattClient. 25395489c19Sopenharmony_ci * @return service. 25495489c19Sopenharmony_ci * @since 6 25595489c19Sopenharmony_ci * 25695489c19Sopenharmony_ci */ 25795489c19Sopenharmony_ci std::optional<std::reference_wrapper<GattService>> GetService(const UUID &uuid); 25895489c19Sopenharmony_ci 25995489c19Sopenharmony_ci /** 26095489c19Sopenharmony_ci * @brief The function to get service. 26195489c19Sopenharmony_ci * 26295489c19Sopenharmony_ci * @return list of services. 26395489c19Sopenharmony_ci * @since 6 26495489c19Sopenharmony_ci * 26595489c19Sopenharmony_ci */ 26695489c19Sopenharmony_ci std::vector<GattService> &GetService(); 26795489c19Sopenharmony_ci 26895489c19Sopenharmony_ci /** 26995489c19Sopenharmony_ci * @brief The function to read characteristic. 27095489c19Sopenharmony_ci * 27195489c19Sopenharmony_ci * @param characteristic Characteristic object. 27295489c19Sopenharmony_ci * @return int read characteristic. 27395489c19Sopenharmony_ci * @since 6 27495489c19Sopenharmony_ci * 27595489c19Sopenharmony_ci */ 27695489c19Sopenharmony_ci int ReadCharacteristic(GattCharacteristic &characteristic); 27795489c19Sopenharmony_ci 27895489c19Sopenharmony_ci /** 27995489c19Sopenharmony_ci * @brief The function to read descriptor. 28095489c19Sopenharmony_ci * 28195489c19Sopenharmony_ci * @param descriptor descriptor object. 28295489c19Sopenharmony_ci * @return int read descriptor. 28395489c19Sopenharmony_ci * @since 6 28495489c19Sopenharmony_ci * 28595489c19Sopenharmony_ci */ 28695489c19Sopenharmony_ci int ReadDescriptor(GattDescriptor &descriptor); 28795489c19Sopenharmony_ci 28895489c19Sopenharmony_ci /** 28995489c19Sopenharmony_ci * @brief The function to RequestBleMtuSize. 29095489c19Sopenharmony_ci * 29195489c19Sopenharmony_ci * @param mtu mtu of GattClient. 29295489c19Sopenharmony_ci * @return int request ble mtu size. 29395489c19Sopenharmony_ci * @since 6 29495489c19Sopenharmony_ci * 29595489c19Sopenharmony_ci */ 29695489c19Sopenharmony_ci int RequestBleMtuSize(int mtu); 29795489c19Sopenharmony_ci 29895489c19Sopenharmony_ci /** 29995489c19Sopenharmony_ci * @brief The function to SetNotifyCharacteristic. 30095489c19Sopenharmony_ci * 30195489c19Sopenharmony_ci * @param characteristic characteristic object. 30295489c19Sopenharmony_ci * @param enable enable of GattClient. 30395489c19Sopenharmony_ci * @return result of #GATT_STATUS. 30495489c19Sopenharmony_ci * @since 6 30595489c19Sopenharmony_ci * 30695489c19Sopenharmony_ci */ 30795489c19Sopenharmony_ci int SetNotifyCharacteristic(GattCharacteristic &characteristic, bool enable); 30895489c19Sopenharmony_ci 30995489c19Sopenharmony_ci /** 31095489c19Sopenharmony_ci * @brief The function to SetIndicateCharacteristic. 31195489c19Sopenharmony_ci * 31295489c19Sopenharmony_ci * @param characteristic characteristic object. 31395489c19Sopenharmony_ci * @param enable enable of GattClient. 31495489c19Sopenharmony_ci * @return result of #GATT_STATUS. 31595489c19Sopenharmony_ci * @since 6 31695489c19Sopenharmony_ci * 31795489c19Sopenharmony_ci */ 31895489c19Sopenharmony_ci int SetIndicateCharacteristic(GattCharacteristic &characteristic, bool enable); 31995489c19Sopenharmony_ci 32095489c19Sopenharmony_ci /** 32195489c19Sopenharmony_ci * @brief The function to write characteristic. 32295489c19Sopenharmony_ci * 32395489c19Sopenharmony_ci * @param characteristic characteristic object. 32495489c19Sopenharmony_ci * @return int write characteristic. 32595489c19Sopenharmony_ci * @since 6 32695489c19Sopenharmony_ci * 32795489c19Sopenharmony_ci */ 32895489c19Sopenharmony_ci int WriteCharacteristic(GattCharacteristic &characteristic); 32995489c19Sopenharmony_ci 33095489c19Sopenharmony_ci /** 33195489c19Sopenharmony_ci * @brief The function to write characteristic. 33295489c19Sopenharmony_ci * 33395489c19Sopenharmony_ci * @param characteristic characteristic object. 33495489c19Sopenharmony_ci * @param value characteristic value. 33595489c19Sopenharmony_ci * @return int write characteristic. 33695489c19Sopenharmony_ci * @since 6 33795489c19Sopenharmony_ci * 33895489c19Sopenharmony_ci */ 33995489c19Sopenharmony_ci int WriteCharacteristic(GattCharacteristic &characteristic, std::vector<uint8_t> value); 34095489c19Sopenharmony_ci 34195489c19Sopenharmony_ci /** 34295489c19Sopenharmony_ci * @brief The function to write characteristic. 34395489c19Sopenharmony_ci * 34495489c19Sopenharmony_ci * @param descriptor descriptor object. 34595489c19Sopenharmony_ci * @return int write descriptor. 34695489c19Sopenharmony_ci * @since 6 34795489c19Sopenharmony_ci * 34895489c19Sopenharmony_ci */ 34995489c19Sopenharmony_ci int WriteDescriptor(GattDescriptor &descriptor); 35095489c19Sopenharmony_ci 35195489c19Sopenharmony_ci int ReadRemoteRssiValue(); 35295489c19Sopenharmony_ci /** 35395489c19Sopenharmony_ci * @brief A constructor of GattClient. 35495489c19Sopenharmony_ci * 35595489c19Sopenharmony_ci * @param device Remote device object. 35695489c19Sopenharmony_ci * @since 6 35795489c19Sopenharmony_ci * 35895489c19Sopenharmony_ci */ 35995489c19Sopenharmony_ci explicit GattClient(const BluetoothRemoteDevice &device); 36095489c19Sopenharmony_ci 36195489c19Sopenharmony_ci /** 36295489c19Sopenharmony_ci * @brief A destructor of GattClient. 36395489c19Sopenharmony_ci * 36495489c19Sopenharmony_ci * @since 6 36595489c19Sopenharmony_ci * 36695489c19Sopenharmony_ci */ 36795489c19Sopenharmony_ci ~GattClient(); 36895489c19Sopenharmony_ci 36995489c19Sopenharmony_ci BLUETOOTH_DISALLOW_COPY_AND_ASSIGN(GattClient); 37095489c19Sopenharmony_ci 37195489c19Sopenharmony_ciprivate: 37295489c19Sopenharmony_ci BLUETOOTH_DECLARE_IMPL(); 37395489c19Sopenharmony_ci 37495489c19Sopenharmony_ci int SetNotifyCharacteristicInner(GattCharacteristic &characteristic, bool enable, 37595489c19Sopenharmony_ci const std::vector<uint8_t> &descriptorValue); 37695489c19Sopenharmony_ci}; 37795489c19Sopenharmony_ci} // namespace Bluetooth 37895489c19Sopenharmony_ci} // namespace OHOS 37995489c19Sopenharmony_ci#endif // BLUETOOTH_GATT_CLIENT_H 380