HidlService.h revision d544cf6502ff3a9958887b683f0500edcebd8cb8
12173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#ifndef ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H
22173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#define ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H
32173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
42173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <android/hidl/manager/1.0/IServiceManager.h>
52173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <hidl/Status.h>
62173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <hidl/MQDescriptor.h>
72173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <map>
82173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland#include <unordered_map>
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,
27b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong                const sp<IBase> &service);
282173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
292173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland    /**
302173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland     * Note, getService() can be nullptr. This is because you can have a HidlService
312173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland     * with registered IServiceNotification objects but no service registered yet.
322173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland     */
33b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong    sp<IBase> getService() const;
34b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong    void setService(sp<IBase> service);
35d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland    const std::string &getInterfaceName() const;
36d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland    const std::string &getInstanceName() const;
372173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
382173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland    void addListener(const sp<IServiceNotification> &listener);
392173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
402173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland    std::string string() const; // e.x. "android.hidl.manager@1.0::IServiceManager/manager"
412173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
422173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Morelandprivate:
432173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland    void sendRegistrationNotifications() const;
442173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
45d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland    const std::string                     mInterfaceName; // e.x. "android.hardware.manager@1.0::IServiceManager"
46d544cf6502ff3a9958887b683f0500edcebd8cb8Steven Moreland    const std::string                     mInstanceName;  // e.x. "manager"
47b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong    sp<IBase>                             mService;
482173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
492173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland    std::vector<sp<IServiceNotification>> mListeners{};
502173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland};
512173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
522173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}  // namespace implementation
532173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}  // namespace V1_0
542173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}  // namespace manager
552173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}  // namespace hidl
562173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland}  // namespace android
572173d3c8d6f5a5a78bd145063ac177d7f0657d33Steven Moreland
58b3a90f0de29292ec4288484c3e66b225d86bdc15Yifan Hong#endif // ANDROID_HARDWARE_MANAGER_V1_0_HIDLSERVICE_H
59