summaryrefslogtreecommitdiff
path: root/include/physical_presence.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/physical_presence.h')
-rw-r--r--include/physical_presence.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/include/physical_presence.h b/include/physical_presence.h
new file mode 100644
index 0000000000..f2678993fc
--- /dev/null
+++ b/include/physical_presence.h
@@ -0,0 +1,64 @@
+/* Copyright 2017 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Physical presence detection
+ */
+#ifndef __CROS_EC_PHYSICAL_PRESENCE_H
+#define __CROS_EC_PHYSICAL_PRESENCE_H
+
+/**
+ * Start physical presence detect.
+ *
+ * If the physical presence sequence is successful, callback() will be called
+ * from the hook task context as a deferred function.
+ *
+ * On failure or abort, callback() will not be called.
+ *
+ * @param is_long Use long (!=0) or short (0) sequence)
+ * @param callback Function to call when successful
+ * @return EC_SUCCESS, EC_BUSY if detect already in progress, or other
+ * non-zero error code if error.
+ */
+int physical_detect_start(int is_long, void (*callback)(void));
+
+/**
+ * Check if a physical detect attempt is in progress
+ *
+ * @return non-zero if in progress
+ */
+int physical_detect_busy(void);
+
+/**
+ * Abort a currently-running physical presence detect.
+ *
+ * Note there is a race condition between stopping detect and a running
+ * detect finishing and calling its callback. The intent of this function
+ * is not to prevent that, but instead to avoid an aborted physical detect
+ * tying up the button for long periods when we no longer care.
+ */
+void physical_detect_abort(void);
+
+/**
+ * Handle a physical detect button press.
+ *
+ * This may be called from interrupt level.
+ *
+ * Returns EC_SUCCESS if the press was consumed, or EC_ERROR_NOT_HANDLED if
+ * physical detect was idle (so the press is for someone else).
+ */
+int physical_detect_press(void);
+
+/**
+ * Start/stop capturing the button for physical presence.
+ *
+ * When enabled, a debounced button press+release should call
+ * physical_detect_press().
+ *
+ * This should be implemented by the board.
+ *
+ * @param enable Enable (!=0) or disable (==0) capturing button.
+ */
+void board_physical_presence_enable(int enable);
+
+#endif /* __CROS_EC_PHYSICAL_PRESENCE_H */