1e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#ifndef ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 2e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#define ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 3e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 4e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include <android/dvr/BnVirtualTouchpadService.h> 5e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 6e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#include "VirtualTouchpad.h" 7e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 8e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace android { 9e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkonamespace dvr { 10e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 1143b5b06c8be24e465bd6a7b22a8d341db1ad50a2Kevin Schoedel// VirtualTouchpadService implements the service side of 1243b5b06c8be24e465bd6a7b22a8d341db1ad50a2Kevin Schoedel// the Binder interface defined in VirtualTouchpadService.aidl. 1343b5b06c8be24e465bd6a7b22a8d341db1ad50a2Kevin Schoedel// 14e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenkoclass VirtualTouchpadService : public BnVirtualTouchpadService { 15e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko public: 16de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel VirtualTouchpadService(std::unique_ptr<VirtualTouchpad> touchpad) 17de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel : touchpad_(std::move(touchpad)), client_pid_(0) {} 184b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel ~VirtualTouchpadService() override; 19e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 20e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko protected: 21e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko // Implements IVirtualTouchpadService. 224b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel binder::Status attach() override; 234b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel binder::Status detach() override; 243002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel binder::Status touch(int touchpad, float x, float y, float pressure) override; 253002b8a74431dd7c005269cf9306443a4b4963f1Kevin Schoedel binder::Status buttonState(int touchpad, int buttons) override; 26d8fccf0124b78230ae2071fecc6bc6aebe8c540cKevin Schoedel binder::Status scroll(int touchpad, float x, float y) override; 27e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 284b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Implements BBinder::dump(). 294b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel status_t dump(int fd, const Vector<String16>& args) override; 304b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 31e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko private: 324b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel bool CheckPermissions(); 334b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel bool CheckTouchPermission(pid_t* out_pid); 344b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 35de1cdaebc9b8fdbc5348e6c07f849b74bacc485dKevin Schoedel std::unique_ptr<VirtualTouchpad> touchpad_; 36e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 374b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel // Only one client at a time can use the virtual touchpad. 384b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel pid_t client_pid_; 394b64dd48b6896d6b963f0a3a0259d3d2a7076a9eKevin Schoedel 40e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko VirtualTouchpadService(const VirtualTouchpadService&) = delete; 41e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko void operator=(const VirtualTouchpadService&) = delete; 42e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko}; 43e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 44e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // namespace dvr 45e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko} // namespace android 46e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko 47e4eec20f6263f4a42ae462456f60ea6c4518bb0aAlex Vakulenko#endif // ANDROID_DVR_VIRTUAL_TOUCHPAD_SERVICE_H 48