Fix net_test_bluetooth
* net_test_bluetooth should try to load Bluetooth library from
system/lib/hw or system/lib64/hw if it cannot find it from default
path
* Also replaced legacy logging macro with libbase logging statements
Bug: 67059247
Test: net_test_bluetooth
Change-Id: I6c45f66aedf675397f377ca56203bec9708324e1
diff --git a/btcore/src/hal_util.cc b/btcore/src/hal_util.cc
index f3ae741..58c97ec 100644
--- a/btcore/src/hal_util.cc
+++ b/btcore/src/hal_util.cc
@@ -16,6 +16,8 @@
#define LOG_TAG "hal_util"
+#include <base/logging.h>
+#include <base/strings/stringprintf.h>
#include <hardware/bluetooth.h>
#include <hardware/hardware.h>
@@ -26,15 +28,14 @@
#include "btcore/include/hal_util.h"
#include "osi/include/log.h"
-// TODO(armansito): All logging macros should include __func__ by default (see
-// Bug: 22671731)
-#define HULOGERR(fmt, args...) \
- LOG_ERROR(LOG_TAG, "[%s] failed to load the Bluetooth library: " fmt, \
- __func__, ##args)
+using base::StringPrintf;
-// TODO(armansito): It might be better to pass the library name in a more
-// generic manner as opposed to hard-coding it here.
-static const char kBluetoothLibraryName[] = "bluetooth.default.so";
+#define BLUETOOTH_LIBRARY_NAME "bluetooth.default.so"
+#if defined(__LP64__)
+#define BACKUP_PATH "/system/lib64/hw/" BLUETOOTH_LIBRARY_NAME
+#else
+#define BACKUP_PATH "/system/lib/hw/" BLUETOOTH_LIBRARY_NAME
+#endif
int hal_util_load_bt_library(const struct hw_module_t** module) {
const char* id = BT_STACK_MODULE_ID;
@@ -42,31 +43,43 @@
struct hw_module_t* hmi = nullptr;
// Always try to load the default Bluetooth stack on GN builds.
- void* handle = dlopen(kBluetoothLibraryName, RTLD_NOW);
+ const char* path = BLUETOOTH_LIBRARY_NAME;
+ void* handle = dlopen(path, RTLD_NOW);
if (!handle) {
- char const* err_str = dlerror();
- HULOGERR("%s", err_str ? err_str : "error unknown");
- goto error;
+ const char* err_str = dlerror();
+ LOG(WARNING) << __func__ << ": failed to load Bluetooth library " << path
+ << ", error=" << (err_str ? err_str : "error unknown");
+ path = BACKUP_PATH;
+ LOG(WARNING) << __func__ << ": loading backup path " << path;
+ handle = dlopen(path, RTLD_NOW);
+ if (!handle) {
+ err_str = dlerror();
+ LOG(ERROR) << __func__ << ": failed to load Bluetooth library " << path
+ << ", error=" << (err_str ? err_str : "error unknown");
+ goto error;
+ }
}
// Get the address of the struct hal_module_info.
hmi = (struct hw_module_t*)dlsym(handle, sym);
if (!hmi) {
- HULOGERR("%s", sym);
+ LOG(ERROR) << __func__ << ": failed to load symbol from Bluetooth library "
+ << sym;
goto error;
}
// Check that the id matches.
if (strcmp(id, hmi->id) != 0) {
- HULOGERR("id=%s does not match HAL module ID: %s", id, hmi->id);
+ LOG(ERROR) << StringPrintf("%s: id=%s does not match HAL module ID: %s",
+ __func__, id, hmi->id);
goto error;
}
hmi->dso = handle;
// Success.
- LOG_INFO(LOG_TAG, "[%s] loaded HAL id=%s path=%s hmi=%p handle=%p", __func__,
- id, kBluetoothLibraryName, hmi, handle);
+ LOG(INFO) << StringPrintf("%s: loaded HAL id=%s path=%s hmi=%p handle=%p",
+ __func__, id, path, hmi, handle);
*module = hmi;
return 0;