2022-04-16 19:13:05 +01:00
|
|
|
// Copyright 2022 QMK
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2023-03-22 14:32:49 +11:00
|
|
|
/**
|
|
|
|
* \file
|
2022-04-16 19:13:05 +01:00
|
|
|
*
|
2023-03-22 14:32:49 +11:00
|
|
|
* \defgroup secure Secure API
|
|
|
|
*
|
|
|
|
* \brief Exposes a set of functionality to act as a virtual padlock for your device
|
|
|
|
* ...as long as that padlock is made of paper and it's currently raining.
|
|
|
|
*
|
|
|
|
* \{
|
2022-04-16 19:13:05 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
/** \brief Available secure states
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
SECURE_LOCKED,
|
|
|
|
SECURE_PENDING,
|
|
|
|
SECURE_UNLOCKED,
|
|
|
|
} secure_status_t;
|
|
|
|
|
|
|
|
/** \brief Query current secure state
|
|
|
|
*/
|
|
|
|
secure_status_t secure_get_status(void);
|
|
|
|
|
|
|
|
/** \brief Helper to check if unlocking is currently locked
|
|
|
|
*/
|
|
|
|
#define secure_is_locked() (secure_get_status() == SECURE_LOCKED)
|
|
|
|
|
|
|
|
/** \brief Helper to check if unlocking is currently in progress
|
|
|
|
*/
|
|
|
|
#define secure_is_unlocking() (secure_get_status() == SECURE_PENDING)
|
|
|
|
|
|
|
|
/** \brief Helper to check if unlocking is currently unlocked
|
|
|
|
*/
|
|
|
|
#define secure_is_unlocked() (secure_get_status() == SECURE_UNLOCKED)
|
|
|
|
|
|
|
|
/** \brief Lock down the device
|
|
|
|
*/
|
|
|
|
void secure_lock(void);
|
|
|
|
|
|
|
|
/** \brief Force unlock the device
|
|
|
|
*
|
|
|
|
* \warning bypasses user unlock sequence
|
|
|
|
*/
|
|
|
|
void secure_unlock(void);
|
|
|
|
|
|
|
|
/** \brief Begin listening for an unlock sequence
|
|
|
|
*/
|
|
|
|
void secure_request_unlock(void);
|
|
|
|
|
|
|
|
/** \brief Flag to the secure subsystem that user activity has happened
|
|
|
|
*
|
|
|
|
* Call when some user activity has happened and the device should remain unlocked
|
|
|
|
*/
|
|
|
|
void secure_activity_event(void);
|
|
|
|
|
|
|
|
/** \brief Flag to the secure subsystem that user has triggered a keypress
|
|
|
|
*
|
|
|
|
* Call to trigger processing of the unlock sequence
|
|
|
|
*/
|
|
|
|
void secure_keypress_event(uint8_t row, uint8_t col);
|
|
|
|
|
|
|
|
/** \brief Handle various secure subsystem background tasks
|
|
|
|
*/
|
|
|
|
void secure_task(void);
|
2022-05-14 15:07:08 -07:00
|
|
|
|
|
|
|
/** \brief quantum hook called when changing secure status device
|
|
|
|
*/
|
|
|
|
void secure_hook_quantum(secure_status_t secure_status);
|
|
|
|
|
|
|
|
/** \brief user hook called when changing secure status device
|
|
|
|
*/
|
|
|
|
bool secure_hook_user(secure_status_t secure_status);
|
|
|
|
|
|
|
|
/** \brief keyboard hook called when changing secure status device
|
|
|
|
*/
|
|
|
|
bool secure_hook_kb(secure_status_t secure_status);
|
2023-03-22 14:32:49 +11:00
|
|
|
|
|
|
|
/** \} */
|