summaryrefslogtreecommitdiff
path: root/drmeventlistener.h
diff options
context:
space:
mode:
authorSean Paul <seanpaul@chromium.org>2015-07-28 14:15:42 -0400
committerSean Paul <seanpaul@chromium.org>2016-03-24 16:36:44 -0400
commit047b9b2484b4e68741df2cb522915f968c013373 (patch)
treeb4a63f62b16646fe87bd73c6bee5efca4c17d2e2 /drmeventlistener.h
parent538a375097b7df59f8852997f9dada0bde86b328 (diff)
drm_hwcomposer: Add DrmEventListener worker
This patch adds a worker which listens to drm events. If the drm event has a handler associated with it, the listener will call the handler. BUG=chrome-os-partner:41682 TEST=Tested on ryu with DP Change-Id: I5d691d191425604766a00be3e72111095d025d06 Signed-off-by: Sean Paul <seanpaul@chromium.org>
Diffstat (limited to 'drmeventlistener.h')
-rw-r--r--drmeventlistener.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/drmeventlistener.h b/drmeventlistener.h
new file mode 100644
index 0000000..61eefe8
--- /dev/null
+++ b/drmeventlistener.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_DRM_EVENT_LISTENER_H_
+#define ANDROID_DRM_EVENT_LISTENER_H_
+
+#include "autofd.h"
+#include "worker.h"
+
+namespace android {
+
+class DrmResources;
+
+class DrmEventHandler {
+ public:
+ DrmEventHandler() {
+ }
+ virtual ~DrmEventHandler() {
+ }
+
+ virtual void HandleEvent(uint64_t timestamp_us) = 0;
+};
+
+class DrmEventListener : public Worker {
+ public:
+ DrmEventListener(DrmResources *drm);
+ virtual ~DrmEventListener() {
+ }
+
+ int Init();
+
+ void RegisterHotplugHandler(DrmEventHandler *handler);
+
+ static void FlipHandler(int fd, unsigned int sequence, unsigned int tv_sec,
+ unsigned int tv_usec, void *user_data);
+
+ protected:
+ virtual void Routine();
+
+ private:
+ void UEventHandler();
+
+ fd_set fds_;
+ UniqueFd uevent_fd_;
+ int max_fd_ = -1;
+
+ DrmResources *drm_;
+ DrmEventHandler *hotplug_handler_ = NULL;
+};
+}
+
+#endif