// Copyright 2022 QMK // SPDX-License-Identifier: GPL-2.0-or-later #pragma once /** * \file * * \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. * * \{ */ #include #include /** \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); /** \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); /** \} */