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 #include <uv.h>
16 #include "bluetooth_log.h"
17 #include "napi_async_work.h"
18 #include "napi_bluetooth_event.h"
19 #include "napi_bluetooth_gatt_client.h"
20 #include "napi_bluetooth_gatt_client_callback.h"
21 #include "napi_event_subscribe_module.h"
22 #include "bluetooth_errorcode.h"
23
24 namespace OHOS {
25 namespace Bluetooth {
NapiGattClientCallback()26 NapiGattClientCallback::NapiGattClientCallback()
27 : eventSubscribe_({STR_BT_GATT_CLIENT_CALLBACK_BLE_CHARACTERISTIC_CHANGE,
28 STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE,
29 STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE},
30 BT_MODULE_NAME)
31 {}
32
OnCharacteristicChanged(const GattCharacteristic & characteristic)33 void NapiGattClientCallback::OnCharacteristicChanged(const GattCharacteristic &characteristic)
34 {
35 auto nativeObject = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
36 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CHARACTERISTIC_CHANGE, nativeObject);
37 }
38
OnCharacteristicReadResult(const GattCharacteristic & characteristic,int ret)39 void NapiGattClientCallback::OnCharacteristicReadResult(const GattCharacteristic &characteristic, int ret)
40 {
41 HILOGI("UUID: %{public}s, ret: %{public}d", characteristic.GetUuid().ToString().c_str(), ret);
42 auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
43 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_CHARACTER, napiCharacter, ret);
44 }
45
OnDescriptorReadResult(const GattDescriptor & descriptor,int ret)46 void NapiGattClientCallback::OnDescriptorReadResult(const GattDescriptor &descriptor, int ret)
47 {
48 HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
49 auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
50 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_DESCRIPTOR, napiDescriptor, ret);
51 }
52
OnConnectionStateChanged(int connectionState,int ret)53 void NapiGattClientCallback::OnConnectionStateChanged(int connectionState, int ret)
54 {
55 HILOGI("connectionState:%{public}d, ret:%{public}d", connectionState, ret);
56 auto nativeObject = std::make_shared<NapiNativeBleConnectionStateChangeParam>(deviceAddr_, connectionState);
57 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE, nativeObject);
58 }
59
OnServicesDiscovered(int status)60 void NapiGattClientCallback::OnServicesDiscovered(int status)
61 {
62 HILOGI("status:%{public}d", status);
63 }
64
OnReadRemoteRssiValueResult(int rssi,int ret)65 void NapiGattClientCallback::OnReadRemoteRssiValueResult(int rssi, int ret)
66 {
67 HILOGI("rssi: %{public}d, ret: %{public}d", rssi, ret);
68 auto napiRssi = std::make_shared<NapiNativeInt>(rssi);
69 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_REMOTE_RSSI_VALUE, napiRssi, ret);
70 }
71
OnCharacteristicWriteResult(const GattCharacteristic & characteristic,int ret)72 void NapiGattClientCallback::OnCharacteristicWriteResult(const GattCharacteristic &characteristic, int ret)
73 {
74 #ifdef BLUETOOTH_API_SINCE_10
75 HILOGI("UUID: %{public}s, ret: %{public}d", characteristic.GetUuid().ToString().c_str(), ret);
76 auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
77 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_CHARACTER, napiCharacter, ret);
78 #endif
79 }
80
OnDescriptorWriteResult(const GattDescriptor & descriptor,int ret)81 void NapiGattClientCallback::OnDescriptorWriteResult(const GattDescriptor &descriptor, int ret)
82 {
83 #ifdef BLUETOOTH_API_SINCE_10
84 HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
85 auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
86 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_DESCRIPTOR, napiDescriptor, ret);
87 #endif
88 }
89
OnSetNotifyCharacteristic(const GattCharacteristic & characteristic,int status)90 void NapiGattClientCallback::OnSetNotifyCharacteristic(const GattCharacteristic &characteristic, int status)
91 {
92 #ifdef BLUETOOTH_API_SINCE_10
93 HILOGI("UUID: %{public}s, status: %{public}d", characteristic.GetUuid().ToString().c_str(), status);
94 AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_ENABLE_CHARACTER_CHANGED, nullptr, status);
95 #endif
96 }
97
OnMtuUpdate(int mtu,int ret)98 void NapiGattClientCallback::OnMtuUpdate(int mtu, int ret)
99 {
100 #ifdef BLUETOOTH_API_SINCE_10
101 HILOGI("ret: %{public}d, mtu: %{public}d", ret, mtu);
102 auto nativeObject = std::make_shared<NapiNativeInt>(mtu);
103 eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE, nativeObject);
104 #endif
105 }
106
107 } // namespace Bluetooth
108 } // namespace OHOS
109