getTransport respects system/manifest.xml
Use VintfObject::GetDeviceHalManifest()
instead of HalManifest::Get(), because we have two HAL manifests
on the device now: one under system/ and one under vendor/. Removed the
hard-coded list of transport modes for framework HALs and consult
system/manifest.xml instead.
Test: marlin boots, NFC and Wi-Fi works
Test: hidl_test (IServiceManager->getService("manager") successful)
Bug: 34772739
Change-Id: Ie402d51f0942f7891b3f4bd3bbae92b8fd0808f1
diff --git a/base/HidlSupport.cpp b/base/HidlSupport.cpp
index 6f04838..2abdf1b 100644
--- a/base/HidlSupport.cpp
+++ b/base/HidlSupport.cpp
@@ -22,48 +22,30 @@
#include <android-base/logging.h>
#include <android-base/parseint.h>
#include <hidl-util/FQName.h>
-#include <vintf/HalManifest.h>
+#include <vintf/VintfObject.h>
#include <vintf/parse_string.h>
namespace android {
namespace hardware {
-vintf::Transport getTransportForFrameworkPackages(const std::string &name) {
- // TODO(b/34772739): move to framework vintf
- const static std::unordered_map<std::string, vintf::Transport> sTransports {
- {"android.hidl.manager@1.0::IServiceManager", vintf::Transport::HWBINDER},
- {"android.hidl.allocator@1.0::IAllocator" , vintf::Transport::HWBINDER},
- {"android.hidl.memory@1.0::IMapper" , vintf::Transport::PASSTHROUGH},
- {"android.hidl.memory@1.0::IMemory" , vintf::Transport::PASSTHROUGH},
- };
- auto it = sTransports.find(name);
- if (it == sTransports.end()) {
- LOG(ERROR) << "getTransportForFrameworkPackages: Cannot find entry "
- << name << " in the static map. Using default transport.";
- return vintf::Transport::EMPTY;
- } else {
- LOG(INFO) << "getTransportForFrameworkPackages: " << name
- << " declares transport method " << to_string(it->second);
- }
- return it->second;
-}
-vintf::Transport getTransportForHals(const FQName &fqName) {
- const std::string package = fqName.package();
- const vintf::HalManifest *vm = vintf::HalManifest::Get();
+vintf::Transport getTransportFromManifest(
+ const FQName &fqName, const std::string &manifestName,
+ const vintf::HalManifest *vm) {
if (vm == nullptr) {
- LOG(WARNING) << "getTransportForHals: No VINTF defined, using default transport for "
- << fqName.string() << ".";
+ LOG(WARNING) << "getTransportFromManifest: No " << manifestName << " manifest defined, "
+ << "using default transport for " << fqName.string();
return vintf::Transport::EMPTY;
}
- vintf::Transport tr = vm->getTransport(package,
+ vintf::Transport tr = vm->getTransport(fqName.package(),
vintf::Version{fqName.getPackageMajorVersion(), fqName.getPackageMinorVersion()});
if (tr == vintf::Transport::EMPTY) {
- LOG(WARNING) << "getTransportForHals: Cannot find entry "
- << package << fqName.atVersion()
- << " in vendor interface manifest. Using default transport.";
+ LOG(WARNING) << "getTransportFromManifest: Cannot find entry "
+ << fqName.string()
+ << " in " << manifestName << " manifest, using default transport.";
} else {
- LOG(INFO) << "getTransportForHals: " << package << fqName.atVersion()
- << " declares transport method " << to_string(tr);
+ LOG(DEBUG) << "getTransportFromManifest: " << fqName.string()
+ << " declares transport method " << to_string(tr)
+ << " in " << manifestName << " manifest";
}
return tr;
}
@@ -79,10 +61,13 @@
<< " does not specify a version. Using default transport.";
return vintf::Transport::EMPTY;
}
+ // TODO(b/34772739): modify the list if other packages are added to system/manifest.xml
if (fqName.inPackage("android.hidl")) {
- return getTransportForFrameworkPackages(name);
+ return getTransportFromManifest(fqName, "framework",
+ vintf::VintfObject::GetFrameworkHalManifest());
}
- return getTransportForHals(fqName);
+ return getTransportFromManifest(fqName, "device",
+ vintf::VintfObject::GetDeviceHalManifest());
}
hidl_handle::hidl_handle() {