Update for hidlized service manager.
Test: end to end (runs on device, nfc registers with it and runs)
Test: hidl_test
Bug: 32313592
Change-Id: I8a98e8f46c2f2216a097018599c7ac81701b008b
diff --git a/ServiceManager.h b/ServiceManager.h
new file mode 100644
index 0000000..185425e
--- /dev/null
+++ b/ServiceManager.h
@@ -0,0 +1,83 @@
+#ifndef HIDL_GENERATED_android_hardware_manager_V1_0_ServiceManager_H_
+#define HIDL_GENERATED_android_hardware_manager_V1_0_ServiceManager_H_
+
+#include <android/hidl/manager/1.0/IServiceManager.h>
+#include <hidl/Status.h>
+#include <hidl/MQDescriptor.h>
+#include <map>
+
+namespace android {
+namespace hidl {
+namespace manager {
+namespace V1_0 {
+namespace implementation {
+
+using ::android::hardware::hidl_vec;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_version;
+using ::android::hardware::IBinder;
+using ::android::hardware::Return;
+using ::android::hardware::Void;
+using ::android::hidl::manager::V1_0::IServiceManager;
+using ::android::sp;
+
+using Version = ::android::hidl::manager::V1_0::IServiceManager::Version;
+
+struct HidlService {
+ HidlService(const std::string &name,
+ const sp<IBinder>& service,
+ const Version& version,
+ const std::string &metaVersion)
+ : mName(name),
+ mVersion(version.major, version.minor),
+ mMetaVersion(metaVersion),
+ mService(service) {}
+
+ sp<IBinder> getService() const {
+ return mService;
+ }
+
+ void setService(const sp<IBinder>& service) {
+ mService = service;
+ }
+
+ const hidl_version& getVersion() const {
+ return mVersion;
+ }
+
+ bool supportsVersion(hidl_version version) {
+ if (version.get_major() == mVersion.get_major() &&
+ version.get_minor() <= mVersion.get_minor()) {
+ return true;
+ }
+ // TODO remove log
+ ALOGE("Service doesn't support version %u.%u", version.get_major(), version.get_minor());
+ return false;
+ }
+
+private:
+ const std::string mName;
+ const hidl_version mVersion;
+ const std::string mMetaVersion;
+ sp<IBinder> mService;
+};
+
+struct ServiceManager : public IServiceManager {
+ // Methods from ::android::hidl::manager::V1_0::IServiceManager follow.
+ Return<void> get(const hidl_string& name, const Version& version, get_cb _hidl_cb) override;
+ Return<bool> add(const hidl_string& name, const sp<IBinder>& service, const Version& version) override;
+
+private:
+
+ // Access to this map doesn't need to be locked, since hwservicemanager
+ // is single-threaded.
+ std::multimap<std::string, std::unique_ptr<HidlService>> mServiceMap;
+};
+
+} // namespace implementation
+} // namespace V1_0
+} // namespace manager
+} // namespace hidl
+} // namespace android
+
+#endif // HIDL_GENERATED_android_hardware_manager_V1_0_ServiceManager_H_