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