1#define LOG_TAG "hwservicemanager"
2//#define LOG_NDEBUG 0
3
4#include "Vintf.h"
5
6#include <android-base/logging.h>
7#include <hidl-util/FQName.h>
8#include <vintf/parse_string.h>
9#include <vintf/VintfObject.h>
10
11namespace android {
12namespace hardware {
13
14vintf::Transport getTransportFromManifest(
15        const FQName &fqName, const std::string &instanceName,
16        const vintf::HalManifest *vm) {
17    if (vm == nullptr) {
18        return vintf::Transport::EMPTY;
19    }
20    return vm->getTransport(fqName.package(),
21            vintf::Version{fqName.getPackageMajorVersion(), fqName.getPackageMinorVersion()},
22            fqName.name(), instanceName);
23}
24
25vintf::Transport getTransport(const std::string &interfaceName, const std::string &instanceName) {
26    FQName fqName(interfaceName);
27    if (!fqName.isValid()) {
28        LOG(ERROR) << __FUNCTION__ << ": " << interfaceName
29                   << " is not a valid fully-qualified name ";
30        return vintf::Transport::EMPTY;
31    }
32    if (!fqName.hasVersion()) {
33        LOG(ERROR) << __FUNCTION__ << ": " << fqName.string()
34                   << " does not specify a version.";
35        return vintf::Transport::EMPTY;
36    }
37    if (fqName.name().empty()) {
38        LOG(ERROR) << __FUNCTION__ << ": " << fqName.string()
39                   << " does not specify an interface name.";
40        return vintf::Transport::EMPTY;
41    }
42
43    vintf::Transport tr = getTransportFromManifest(fqName, instanceName,
44            vintf::VintfObject::GetFrameworkHalManifest());
45    if (tr != vintf::Transport::EMPTY) {
46        return tr;
47    }
48    tr = getTransportFromManifest(fqName, instanceName,
49            vintf::VintfObject::GetDeviceHalManifest());
50    if (tr != vintf::Transport::EMPTY) {
51        return tr;
52    }
53
54    LOG(WARNING) << __FUNCTION__ << ": Cannot find entry "
55                 << fqName.string() << "/" << instanceName
56                 << " in either framework or device manifest.";
57    return vintf::Transport::EMPTY;
58}
59
60}  // hardware
61}  // android
62