You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.4 KiB
72 lines
2.4 KiB
#ifndef ANDROID_HARDWARE_MANAGER_HIDLSERVICE_H |
|
#define ANDROID_HARDWARE_MANAGER_HIDLSERVICE_H |
|
|
|
#include <set> |
|
|
|
#include <android/hidl/manager/1.1/IServiceManager.h> |
|
#include <hidl/Status.h> |
|
#include <hidl/MQDescriptor.h> |
|
|
|
namespace android { |
|
namespace hidl { |
|
namespace manager { |
|
namespace implementation { |
|
|
|
using ::android::hardware::hidl_vec; |
|
using ::android::hardware::hidl_string; |
|
using ::android::hardware::Return; |
|
using ::android::hardware::Void; |
|
using ::android::hidl::base::V1_0::IBase; |
|
using ::android::hidl::manager::V1_0::IServiceNotification; |
|
using ::android::hidl::manager::V1_1::IServiceManager; |
|
using ::android::sp; |
|
|
|
struct HidlService { |
|
HidlService(const std::string &interfaceName, |
|
const std::string &instanceName, |
|
const sp<IBase> &service, |
|
const pid_t pid); |
|
HidlService(const std::string &interfaceName, |
|
const std::string &instanceName) |
|
: HidlService( |
|
interfaceName, |
|
instanceName, |
|
nullptr, |
|
static_cast<pid_t>(IServiceManager::PidConstant::NO_PID)) |
|
{} |
|
|
|
/** |
|
* Note, getService() can be nullptr. This is because you can have a HidlService |
|
* with registered IServiceNotification objects but no service registered yet. |
|
*/ |
|
sp<IBase> getService() const; |
|
void setService(sp<IBase> service, pid_t pid); |
|
pid_t getPid() const; |
|
const std::string &getInterfaceName() const; |
|
const std::string &getInstanceName() const; |
|
|
|
void addListener(const sp<IServiceNotification> &listener); |
|
bool removeListener(const wp<IBase> &listener); |
|
void registerPassthroughClient(pid_t pid); |
|
|
|
std::string string() const; // e.x. "android.hidl.manager@1.0::IServiceManager/manager" |
|
const std::set<pid_t> &getPassthroughClients() const; |
|
|
|
private: |
|
void sendRegistrationNotifications(); |
|
|
|
const std::string mInterfaceName; // e.x. "android.hidl.manager@1.0::IServiceManager" |
|
const std::string mInstanceName; // e.x. "manager" |
|
sp<IBase> mService; |
|
|
|
std::vector<sp<IServiceNotification>> mListeners{}; |
|
std::set<pid_t> mPassthroughClients{}; |
|
pid_t mPid = static_cast<pid_t>(IServiceManager::PidConstant::NO_PID); |
|
}; |
|
|
|
} // namespace implementation |
|
} // namespace manager |
|
} // namespace hidl |
|
} // namespace android |
|
|
|
#endif // ANDROID_HARDWARE_MANAGER_HIDLSERVICE_H
|
|
|