summaryrefslogtreecommitdiff
path: root/base/HidlSupport.cpp
diff options
context:
space:
mode:
authorYifan Hong <elsk@google.com>2017-02-27 18:52:44 -0800
committerYifan Hong <elsk@google.com>2017-02-28 16:33:53 -0800
commit64a41d5877f245b8f1ad4a6957a139a9c1588c21 (patch)
treeaae5dbdfc5ae866cdd27ece46e02415899f3b8cc /base/HidlSupport.cpp
parent12af8a6e3c2ad2b72acd2c07ed438237a071c8b2 (diff)
downloadlibhidl-64a41d5877f245b8f1ad4a6957a139a9c1588c21.tar.gz
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
Diffstat (limited to 'base/HidlSupport.cpp')
-rw-r--r--base/HidlSupport.cpp51
1 files changed, 18 insertions, 33 deletions
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 @@ vintf::Transport getTransport(const std::string &name) {
<< " 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() {