summaryrefslogtreecommitdiff
path: root/base/HidlSupport.cpp
diff options
context:
space:
mode:
authorYifan Hong <elsk@google.com>2017-03-01 03:02:30 +0000
committerandroid-build-merger <android-build-merger@google.com>2017-03-01 03:02:30 +0000
commit4367031f037aaae61d2a908a66ca827a4d778b73 (patch)
treef91cdeedd5de24211fd78552004a40fed4c86fc1 /base/HidlSupport.cpp
parent49b64dd503153f9a2923fd7d159f83d8394cdbac (diff)
parenta4547bdb4b367ec3c8d396b4e93858138f731197 (diff)
downloadlibhidl-4367031f037aaae61d2a908a66ca827a4d778b73.tar.gz
getTransport respects system/manifest.xml am: 64a41d5877 am: dfdf0a76b8
am: a4547bdb4b Change-Id: I3660f9ec960d776033c7ee7abd2e349691984b90
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 7add055..ba98b44 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() {