| /* 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); |
| |
| /** |
| * An API to report physical presence FSM state to an external entity. Of |
| * interest are states when key press is currently required or is expected |
| * soon. |
| */ |
| enum pp_fsm_state { |
| PP_OTHER = 0, |
| PP_AWAITING_PRESS = 1, |
| PP_BETWEEN_PRESSES = 2, |
| }; |
| enum pp_fsm_state physical_presense_fsm_state(void); |
| |
| #endif /* __CROS_EC_PHYSICAL_PRESENCE_H */ |