12173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#ifndef ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H 22173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#define ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H 32173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 4ee531a829e99f427dac47383f70d6a1c0fd1ca84Yifan Hong#include <set> 5ee531a829e99f427dac47383f70d6a1c0fd1ca84Yifan Hong 62173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <android/hidl/manager/1.0/IServiceManager.h> 72173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <hidl/Status.h> 82173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <hidl/MQDescriptor.h> 92173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 102173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandnamespace android { 112173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandnamespace hidl { 122173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandnamespace manager { 132173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandnamespace V1_0 { 142173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandnamespace implementation { 152173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 162173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::hardware::hidl_vec; 172173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::hardware::hidl_string; 182173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::hardware::Return; 192173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::hardware::Void; 20b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hongusing ::android::hidl::base::V1_0::IBase; 212173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::hidl::manager::V1_0::IServiceManager; 222173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandusing ::android::sp; 232173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 242173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandstruct HidlService { 25d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland HidlService(const std::string &interfaceName, 26d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland const std::string &instanceName, 27cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland const sp<IBase> &service, 28cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland const pid_t pid); 29cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland HidlService(const std::string &interfaceName, 30cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland const std::string &instanceName) 31cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland : HidlService( 32cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland interfaceName, 33cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland instanceName, 34cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland nullptr, 35cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland static_cast<pid_t>(IServiceManager::PidConstant::NO_PID)) 36cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland {} 372173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 382173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland /** 392173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland * Note, getService() can be nullptr. This is because you can have a HidlService 402173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland * with registered IServiceNotification objects but no service registered yet. 412173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland */ 42b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong sp<IBase> getService() const; 43cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland void setService(sp<IBase> service, pid_t pid); 44cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland pid_t getPid() const; 45d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland const std::string &getInterfaceName() const; 46d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland const std::string &getInstanceName() const; 472173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 482173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland void addListener(const sp<IServiceNotification> &listener); 497fafc144d14c9acfd9152a51dfb5ca3d87b995d4Martijn Coenen bool removeListener(const wp<IBase> &listener); 50ee531a829e99f427dac47383f70d6a1c0fd1ca84Yifan Hong void registerPassthroughClient(pid_t pid); 512173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 522173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland std::string string() const; // e.x. "android.hidl.manager@1.0::IServiceManager/manager" 53ee531a829e99f427dac47383f70d6a1c0fd1ca84Yifan Hong const std::set<pid_t> &getPassthroughClients() const; 542173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 552173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandprivate: 5672103a0ad5abf7ec79f0ca7558330b131810e6d3Martijn Coenen void sendRegistrationNotifications(); 572173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 58d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland const std::string mInterfaceName; // e.x. "android.hardware.manager@1.0::IServiceManager" 59d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland const std::string mInstanceName; // e.x. "manager" 60b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong sp<IBase> mService; 612173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 622173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland std::vector<sp<IServiceNotification>> mListeners{}; 63ee531a829e99f427dac47383f70d6a1c0fd1ca84Yifan Hong std::set<pid_t> mPassthroughClients{}; 64cdf9472ffbd015938a99e3658b21bfb9758dca97Steven Moreland pid_t mPid = static_cast<pid_t>(IServiceManager::PidConstant::NO_PID); 652173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}; 662173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 672173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland} // namespace implementation 682173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland} // namespace V1_0 692173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland} // namespace manager 702173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland} // namespace hidl 712173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland} // namespace android 722173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland 73b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong#endif // ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H 74