已合并
add SetBleMtu #1977
Kingys创建于 7月6日
add SetBleMtu #1977
已合并
共 4 个文件变更+42-0
| @@ -49,6 +49,7 @@ enum NapiAsyncType : int { | |||
| 49 | BLE_DISABLE_ADVERTISING, | 49 | BLE_DISABLE_ADVERTISING, |
| 50 | GENERATE_LOCAL_OOB_DATA, | 50 | GENERATE_LOCAL_OOB_DATA, |
| 51 | BAS_GET_BATTERY_LEVEL, | 51 | BAS_GET_BATTERY_LEVEL, |
| 52 | + GATT_CLIENT_MTU_CHANGED, | ||
| 52 | }; | 53 | }; |
| 53 | 54 | ||
| 54 | static constexpr bool ASYNC_WORK_NEED_CALLBACK = true; | 55 | static constexpr bool ASYNC_WORK_NEED_CALLBACK = true; |
| @@ -67,6 +67,7 @@ public: | |||
| 67 | 67 | ||
| 68 | 68 | ||
| 69 | static napi_value SetBLEMtuSize(napi_env env, napi_callback_info info); | 69 | static napi_value SetBLEMtuSize(napi_env env, napi_callback_info info); |
| 70 | + static napi_value SetBLEMtu(napi_env env, napi_callback_info info); | ||
| 70 | static napi_value GetRssiValue(napi_env env, napi_callback_info info); | 71 | static napi_value GetRssiValue(napi_env env, napi_callback_info info); |
| 71 | static napi_value GetDeviceName(napi_env env, napi_callback_info info); | 72 | static napi_value GetDeviceName(napi_env env, napi_callback_info info); |
| 72 | static int GattStatusFromService(int status); | 73 | static int GattStatusFromService(int status); |
| @@ -32,6 +32,10 @@ | |||
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | 34 | ||
| 35 | + | ||
| 36 | + | ||
| 37 | + | ||
| 38 | + | ||
| 35 | 39 | ||
| 36 | namespace OHOS { | 40 | namespace OHOS { |
| 37 | namespace Bluetooth { | 41 | namespace Bluetooth { |
| @@ -149,6 +153,7 @@ void NapiGattClient::DefineGattClientJSClass(napi_env env) | |||
| 149 | DECLARE_NAPI_FUNCTION("readDescriptorValue", ReadDescriptorValue), | 153 | DECLARE_NAPI_FUNCTION("readDescriptorValue", ReadDescriptorValue), |
| 150 | DECLARE_NAPI_FUNCTION("getRssiValue", GetRssiValue), | 154 | DECLARE_NAPI_FUNCTION("getRssiValue", GetRssiValue), |
| 151 | DECLARE_NAPI_FUNCTION("setBLEMtuSize", SetBLEMtuSize), | 155 | DECLARE_NAPI_FUNCTION("setBLEMtuSize", SetBLEMtuSize), |
| 156 | + DECLARE_NAPI_FUNCTION("setBLEMtu", SetBLEMtu), | ||
| 152 | DECLARE_NAPI_FUNCTION("on", On), | 157 | DECLARE_NAPI_FUNCTION("on", On), |
| 153 | DECLARE_NAPI_FUNCTION("off", Off), | 158 | DECLARE_NAPI_FUNCTION("off", Off), |
| 154 | DECLARE_NAPI_FUNCTION("onBlePhyUpdate", OnBlePhyUpdate), | 159 | DECLARE_NAPI_FUNCTION("onBlePhyUpdate", OnBlePhyUpdate), |
| @@ -693,6 +698,40 @@ napi_value NapiGattClient::SetBLEMtuSize(napi_env env, napi_callback_info info) | |||
| 693 | return NapiGetBooleanTrue(env); | 698 | return NapiGetBooleanTrue(env); |
| 694 | } | 699 | } |
| 695 | 700 | ||
| 701 | +napi_value NapiGattClient::SetBLEMtu(napi_env env, napi_callback_info info) | ||
| 702 | +{ | ||
| 703 | + std::vector<int32_t> validErrCodes = { | ||
| 704 | + BT_ERR_PERMISSION_FAILED, BT_ERR_INVALID_PARAM, BT_ERR_API_NOT_SUPPORT, | ||
| 705 | + BT_ERR_OPERATION_BUSY, BT_ERR_INTERNAL_ERROR, BT_ERR_GATT_CONNECTION_NOT_ESTABILISHED, | ||
| 706 | + }; | ||
| 707 | + NAPI_BT_CONTEXT(env, "ble.GattClientDevice.SetBLEMtu", validErrCodes); | ||
| 708 | + | ||
| 709 | + NapiGattClient* gattClient = nullptr; | ||
| 710 | + int32_t mtuSize = 0; | ||
| 711 | + | ||
| 712 | + auto status = CheckSetBLEMtuSize(env, info, mtuSize, &gattClient); | ||
| 713 | + NAPI_BT_ASSERT_ERR_NUM_RETURN_VERIFY(env, status == napi_ok, BT_ERR_INVALID_PARAM); | ||
| 714 | + | ||
| 715 | + std::shared_ptr<GattClient> client = gattClient->GetClient(); | ||
| 716 | + NAPI_BT_ASSERT_ERR_NUM_RETURN_VERIFY(env, client != nullptr, BT_ERR_INTERNAL_ERROR); | ||
| 717 | + NAPI_BT_ASSERT_ERR_NUM_RETURN_VERIFY(env, | ||
| 718 | + ((mtuSize >= GATT_DEF_BLE_MTU_SIZE) && (mtuSize <= GATT_MAX_MTU_SIZE)), BT_ERR_INVALID_PARAM); | ||
| 719 | + | ||
| 720 | + NapiAsyncType asyncType = GATT_CLIENT_MTU_CHANGED; | ||
| 721 | + auto func = [client, mtuSize] { | ||
| 722 | + int ret = client->RequestBleMtuSize(mtuSize); | ||
| 723 | + HILOGI("ret: %{public}d", ret); | ||
| 724 | + ret = GetSDKAdaptedStatusCode(GattStatusFromService(ret)); | ||
| 725 | + return NapiAsyncWorkRet(ret); | ||
| 726 | + }; | ||
| 727 | + auto asyncWork = CREATE_ASYNC_WORK_WITH_CONTEXT(env, info, func, ASYNC_WORK_NEED_CALLBACK); | ||
| 728 | + NAPI_BT_ASSERT_ERR_NUM_RETURN_VERIFY(env, asyncWork, BT_ERR_INTERNAL_ERROR); | ||
| 729 | + bool success = gattClient->GetCallback()->asyncWorkMap_.TryPush(asyncType, asyncWork); | ||
| 730 | + NAPI_BT_ASSERT_ERR_NUM_RETURN_VERIFY(env, success, BT_ERR_INTERNAL_ERROR); | ||
| 731 | + asyncWork->Run(); | ||
| 732 | + return asyncWork->GetRet(); | ||
| 733 | +} | ||
| 734 | + | ||
| 696 | static napi_status ParseGattClientReadRssiValue(napi_env env, napi_callback_info info, NapiGattClient **outGattClient) | 735 | static napi_status ParseGattClientReadRssiValue(napi_env env, napi_callback_info info, NapiGattClient **outGattClient) |
| 697 | { | 736 | { |
| 698 | size_t expectedArgsCount = ARGS_SIZE_ONE; | 737 | size_t expectedArgsCount = ARGS_SIZE_ONE; |
| @@ -150,6 +150,7 @@ void NapiGattClientCallback::OnMtuUpdate(int mtu, int ret) | |||
| 150 | HILOGI("ret: %{public}d, mtu: %{public}d", ret, mtu); | 150 | HILOGI("ret: %{public}d, mtu: %{public}d", ret, mtu); |
| 151 | auto nativeObject = std::make_shared<NapiNativeInt>(mtu); | 151 | auto nativeObject = std::make_shared<NapiNativeInt>(mtu); |
| 152 | eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE, nativeObject); | 152 | eventSubscribe_.PublishEvent(STR_BT_GATT_CLIENT_CALLBACK_BLE_MTU_CHANGE, nativeObject); |
| 153 | + AsyncWorkCallFunction(asyncWorkMap_, NapiAsyncType::GATT_CLIENT_MTU_CHANGED, nativeObject, ret); | ||
| 153 | 154 | ||
| 154 | } | 155 | } |
| 155 | 156 | ||