From 147e182cee0bd8b40d67538049af3555366bd610 Mon Sep 17 00:00:00 2001 From: xuxiaoqing Date: Thu, 13 Jul 2023 04:05:33 +0000 Subject: [PATCH] fix: resolve ConnectDriverExtension failed in the boot process Signed-off-by: xuxiaoqing --- .../src/device_manager/BUILD.gn | 1 + .../src/device_manager/device.cpp | 17 ++++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/services/native/driver_extension_manager/src/device_manager/BUILD.gn b/services/native/driver_extension_manager/src/device_manager/BUILD.gn index 6dc848c..2f0423b 100644 --- a/services/native/driver_extension_manager/src/device_manager/BUILD.gn +++ b/services/native/driver_extension_manager/src/device_manager/BUILD.gn @@ -52,6 +52,7 @@ ohos_shared_library("driver_extension_device_manager") { "${ext_mgr_path}/services/native/driver_extension_manager/src/drivers_pkg_manager:drivers_pkg_manager", ] external_deps = [ + "ability_runtime:ability_manager", "bundle_framework:appexecfwk_core", "c_utils:utils", "hilog:libhilog", diff --git a/services/native/driver_extension_manager/src/device_manager/device.cpp b/services/native/driver_extension_manager/src/device_manager/device.cpp index 780ff61..dfd7085 100644 --- a/services/native/driver_extension_manager/src/device_manager/device.cpp +++ b/services/native/driver_extension_manager/src/device_manager/device.cpp @@ -13,8 +13,11 @@ * limitations under the License. */ -#include "device.h" +#include + +#include "ability_manager_errors.h" #include "hilog_wrapper.h" +#include "device.h" namespace OHOS { namespace ExternalDeviceManager { @@ -51,6 +54,18 @@ int32_t Device::Connect() AddDrvExtConnNotify(); int32_t ret = DriverExtensionController::GetInstance().ConnectDriverExtension( bundleName, abilityName, connectNofitier_, busDevId); + // RESOLVE_ABILITY_ERR maybe due to bms is not ready in the boot process, sleep 100ms and try again + if (ret == AAFwk::RESOLVE_ABILITY_ERR) { + EDM_LOGW(MODULE_DEV_MGR, "%{public}s sleep 100ms to reconnect %{public}s %{public}s", __func__, + bundleName.c_str(), abilityName.c_str()); + const int waitTimeMs = 100; + const int msToUs = 1000; + usleep(waitTimeMs * msToUs); + drvExtRemote_ = nullptr; + connectNofitier_->ClearDrvExtConnectionInfo(); + ret = DriverExtensionController::GetInstance().ConnectDriverExtension( + bundleName, abilityName, connectNofitier_, busDevId); + } if (ret != UsbErrCode::EDM_OK) { EDM_LOGE(MODULE_DEV_MGR, "failed to connect driver extension"); return ret; -- Gitee