• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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