1 /*
2 * Copyright (C) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #ifndef LOG_TAG
16 #define LOG_TAG "bt_napi_gatt_client_callback"
17 #endif
18
19 #include <uv.h>
20 #include "bluetooth_log.h"
21 #include "napi_async_work.h"
22 #include "napi_bluetooth_event.h"
23 #include "napi_bluetooth_gatt_client.h"
24 #include "napi_bluetooth_gatt_client_callback.h"
25 #include "napi_event_subscribe_module.h"
26 #include "bluetooth_errorcode.h"
27
28 namespace OHOS {
29 namespace Bluetooth {
NapiGattClientCallback()30 NapiGattClientCallback::NapiGattClientCallback()
31 : eventSubscribe_({STR_BT_GATT_CLIENT_CALLBACK_BLE_CHARACTERISTIC_CHANGE,
32 STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE,
33 STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE},
34 BT_MODULE_NAME)
35 {}
36
OnCharacteristicChanged(const GattCharacteristic & characteristic)37 void NapiGattClientCallback::OnCharacteristicChanged(const GattCharacteristic &characteristic)
38 {
39 auto nativeObject = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
40 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CHARACTERISTIC_CHANGE, nativeObject);
41 }
42
OnCharacteristicReadResult(const GattCharacteristic & characteristic,int ret)43 void NapiGattClientCallback::OnCharacteristicReadResult(const GattCharacteristic &characteristic, int ret)
44 {
45 HILOGI("UUID: %{public}s, ret: %{public}d", characteristic.GetUuid().ToString().c_str(), ret);
46 auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
47 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_CHARACTER, napiCharacter, ret);
48 }
49
OnDescriptorReadResult(const GattDescriptor & descriptor,int ret)50 void NapiGattClientCallback::OnDescriptorReadResult(const GattDescriptor &descriptor, int ret)
51 {
52 HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
53 auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
54 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_DESCRIPTOR, napiDescriptor, ret);
55 }
56
OnConnectionStateChanged(int connectionState,int ret)57 void NapiGattClientCallback::OnConnectionStateChanged(int connectionState, int ret)
58 {
59 HILOGI("connectionState:%{public}d, ret:%{public}d", connectionState, ret);
60 auto nativeObject = std::make_shared<NapiNativeBleConnectionStateChangeParam>(deviceAddr_, connectionState);
61 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE, nativeObject);
62 }
63
OnServicesDiscovered(int status)64 void NapiGattClientCallback::OnServicesDiscovered(int status)
65 {
66 HILOGI("status:%{public}d", status);
67 }
68
OnReadRemoteRssiValueResult(int rssi,int ret)69 void NapiGattClientCallback::OnReadRemoteRssiValueResult(int rssi, int ret)
70 {
71 HILOGI("rssi: %{public}d, ret: %{public}d", rssi, ret);
72 auto napiRssi = std::make_shared<NapiNativeInt>(rssi);
73 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_REMOTE_RSSI_VALUE, napiRssi, ret);
74 }
75
OnCharacteristicWriteResult(const GattCharacteristic & characteristic,int ret)76 void NapiGattClientCallback::OnCharacteristicWriteResult(const GattCharacteristic &characteristic, int ret)
77 {
78 #ifdef BLUETOOTH_API_SINCE_10
79 HILOGI("UUID: %{public}s, ret: %{public}d", characteristic.GetUuid().ToString().c_str(), ret);
80 auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
81 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_CHARACTER, napiCharacter, ret);
82 #endif
83 }
84
OnDescriptorWriteResult(const GattDescriptor & descriptor,int ret)85 void NapiGattClientCallback::OnDescriptorWriteResult(const GattDescriptor &descriptor, int ret)
86 {
87 #ifdef BLUETOOTH_API_SINCE_10
88 HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
89 auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
90 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_DESCRIPTOR, napiDescriptor, ret);
91 #endif
92 }
93
OnSetNotifyCharacteristic(const GattCharacteristic & characteristic,int status)94 void NapiGattClientCallback::OnSetNotifyCharacteristic(const GattCharacteristic &characteristic, int status)
95 {
96 #ifdef BLUETOOTH_API_SINCE_10
97 HILOGI("UUID: %{public}s, status: %{public}d", characteristic.GetUuid().ToString().c_str(), status);
98 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_ENABLE_CHARACTER_CHANGED, nullptr, status);
99 #endif
100 }
101
OnMtuUpdate(int mtu,int ret)102 void NapiGattClientCallback::OnMtuUpdate(int mtu, int ret)
103 {
104 #ifdef BLUETOOTH_API_SINCE_10
105 HILOGI("ret: %{public}d, mtu: %{public}d", ret, mtu);
106 auto nativeObject = std::make_shared<NapiNativeInt>(mtu);
107 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE, nativeObject);
108 #endif
109 }
110
111 } // namespace Bluetooth
112 } // namespace OHOS
113