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 11 namespace android { 12 namespace hardware { 13 14 vintf::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 25 vintf::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