/*
* This file is part of the Trezor project, https://trezor.io/
*
* Copyright (c) SatoshiLabs
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef TREZORHAL_BUTTON_H
#define TREZORHAL_BUTTON_H
#include
// Button event is packed 32-bit value
//
// 31 24 23 0
// |--------|-------------------------|
// | event | button identifier |
// |--------|-------------------------|
//
//
// Button events
#define BTN_EVT_DOWN (1U << 24)
#define BTN_EVT_UP (1U << 25)
// Button identifiers
typedef enum {
BTN_LEFT = 0,
BTN_RIGHT = 1,
BTN_POWER = 2,
} button_t;
#ifdef KERNEL_MODE
// Initializes button driver
//
// Returns true in case of success, false otherwise
bool button_init(void);
#endif // KERNEL_MODE
// Get the last button event
//
// It's expected there's just one consumer of the button events,
// e.g. the main loop
//
// Returns 0 if no event is available
uint32_t button_get_event(void);
// Checks if the specified button is currently pressed
//
// The current implementation returns the state of the button at the time
// `button_get_event()` was called. In the future, we may fix this limitation.
// For now, `button_get_event()` must be called before `button_is_down()`.
bool button_is_down(button_t button);
#endif // TREZORHAL_BUTTON_H