• 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 #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     ret = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(ret)); // Adaptation for old sdk
47     auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
48     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_CHARACTER, napiCharacter, ret);
49 }
50 
OnDescriptorReadResult(const GattDescriptor & descriptor,int ret)51 void NapiGattClientCallback::OnDescriptorReadResult(const GattDescriptor &descriptor, int ret)
52 {
53     HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
54     ret = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(ret)); // Adaptation for old sdk
55     auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
56     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_DESCRIPTOR, napiDescriptor, ret);
57 }
58 
OnConnectionStateChangedWithReason(int connectionState,int ret,int disconnectReason)59 void NapiGattClientCallback::OnConnectionStateChangedWithReason(int connectionState, int ret, int disconnectReason)
60 {
61     HILOGI("connectionState:%{public}d, disconnectReason:%{public}d, ret:%{public}d",
62         connectionState, disconnectReason, ret);
63     if (connectionState == static_cast<int>(BTConnectState::DISCONNECTED)) {
64         auto nativeObject = std::make_shared<NapiNativeBleConnectionStateChangeParam>(
65             deviceAddr_, connectionState, 0, true, disconnectReason);
66         eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE, nativeObject);
67         return;
68     }
69     auto nativeObject = std::make_shared<NapiNativeBleConnectionStateChangeParam>(deviceAddr_, connectionState);
70     eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_CONNECTIION_STATE_CHANGE, nativeObject);
71 }
72 
OnServicesDiscovered(int status)73 void NapiGattClientCallback::OnServicesDiscovered(int status)
74 {
75     HILOGI("status:%{public}d", status);
76 }
77 
OnReadRemoteRssiValueResult(int rssi,int ret)78 void NapiGattClientCallback::OnReadRemoteRssiValueResult(int rssi, int ret)
79 {
80     HILOGI("rssi: %{public}d, ret: %{public}d", rssi, ret);
81     ret = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(ret)); // Adaptation for old sdk
82     auto napiRssi = std::make_shared<NapiNativeInt>(rssi);
83     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_READ_REMOTE_RSSI_VALUE, napiRssi, ret);
84 }
85 
OnCharacteristicWriteResult(const GattCharacteristic & characteristic,int ret)86 void NapiGattClientCallback::OnCharacteristicWriteResult(const GattCharacteristic &characteristic, int ret)
87 {
88 #ifdef BLUETOOTH_API_SINCE_10
89     HILOGI("UUID: %{public}s, ret: %{public}d", characteristic.GetUuid().ToString().c_str(), ret);
90     ret = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(ret)); // Adaptation for old sdk
91     auto napiCharacter = std::make_shared<NapiNativeBleCharacteristic>(characteristic);
92     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_CHARACTER, napiCharacter, ret);
93 #endif
94 }
95 
OnDescriptorWriteResult(const GattDescriptor & descriptor,int ret)96 void NapiGattClientCallback::OnDescriptorWriteResult(const GattDescriptor &descriptor, int ret)
97 {
98 #ifdef BLUETOOTH_API_SINCE_10
99     HILOGI("UUID: %{public}s, ret: %{public}d", descriptor.GetUuid().ToString().c_str(), ret);
100     ret = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(ret)); // Adaptation for old sdk
101     auto napiDescriptor = std::make_shared<NapiNativeBleDescriptor>(descriptor);
102     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_WRITE_DESCRIPTOR, napiDescriptor, ret);
103 #endif
104 }
105 
OnSetNotifyCharacteristic(const GattCharacteristic & characteristic,int status)106 void NapiGattClientCallback::OnSetNotifyCharacteristic(const GattCharacteristic &characteristic, int status)
107 {
108 #ifdef BLUETOOTH_API_SINCE_10
109     HILOGI("UUID: %{public}s, status: %{public}d", characteristic.GetUuid().ToString().c_str(), status);
110     status = GetSDKAdaptedStatusCode(NapiGattClient::GattStatusFromService(status)); // Adaptation for old sdk
111     AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_ENABLE_CHARACTER_CHANGED, nullptr, status);
112 #endif
113 }
114 
OnMtuUpdate(int mtu,int ret)115 void NapiGattClientCallback::OnMtuUpdate(int mtu, int ret)
116 {
117 #ifdef BLUETOOTH_API_SINCE_10
118     HILOGI("ret: %{public}d, mtu: %{public}d", ret, mtu);
119     auto nativeObject = std::make_shared<NapiNativeInt>(mtu);
120     eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE, nativeObject);
121 #endif
122 }
123 
124 } // namespace Bluetooth
125 } // namespace OHOS
126