2023-02-13 00:19:02 +08:00
|
|
|
// Copyright 2023 QMK
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
|
|
|
|
/**
|
2023-03-22 11:32:49 +08:00
|
|
|
* \file
|
2023-02-13 00:19:02 +08:00
|
|
|
*
|
2023-03-22 11:32:49 +08:00
|
|
|
* \defgroup leader Leader Key
|
2023-02-13 00:19:02 +08:00
|
|
|
* \{
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief User callback, invoked when the leader sequence begins.
|
|
|
|
*/
|
|
|
|
void leader_start_user(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief User callback, invoked when the leader sequence ends.
|
|
|
|
*/
|
|
|
|
void leader_end_user(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Begin the leader sequence, resetting the buffer and timer.
|
|
|
|
*/
|
|
|
|
void leader_start(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* End the leader sequence.
|
|
|
|
*/
|
|
|
|
void leader_end(void);
|
|
|
|
|
|
|
|
void leader_task(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether the leader sequence is active.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_active(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Add the given keycode to the sequence buffer.
|
|
|
|
*
|
|
|
|
* If `LEADER_NO_TIMEOUT` is defined, the timer is reset if the buffer is empty.
|
|
|
|
*
|
|
|
|
* \param keycode The keycode to add.
|
|
|
|
*
|
|
|
|
* \return `true` if the keycode was added, `false` if the buffer is full.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_add(uint16_t keycode);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether the leader sequence has reached the timeout.
|
|
|
|
*
|
|
|
|
* If `LEADER_NO_TIMEOUT` is defined, the buffer must also contain at least one key.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_timed_out(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reset the leader sequence timer.
|
|
|
|
*/
|
|
|
|
void leader_reset_timer(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the sequence buffer for the given keycode.
|
|
|
|
*
|
|
|
|
* \param kc The keycode to check.
|
|
|
|
*
|
|
|
|
* \return `true` if the sequence buffer matches.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_one_key(uint16_t kc);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the sequence buffer for the given keycodes.
|
|
|
|
*
|
|
|
|
* \param kc1 The first keycode to check.
|
|
|
|
* \param kc2 The second keycode to check.
|
|
|
|
*
|
|
|
|
* \return `true` if the sequence buffer matches.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_two_keys(uint16_t kc1, uint16_t kc2);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the sequence buffer for the given keycodes.
|
|
|
|
*
|
|
|
|
* \param kc1 The first keycode to check.
|
|
|
|
* \param kc2 The second keycode to check.
|
|
|
|
* \param kc3 The third keycode to check.
|
|
|
|
*
|
|
|
|
* \return `true` if the sequence buffer matches.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_three_keys(uint16_t kc1, uint16_t kc2, uint16_t kc3);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the sequence buffer for the given keycodes.
|
|
|
|
*
|
|
|
|
* \param kc1 The first keycode to check.
|
|
|
|
* \param kc2 The second keycode to check.
|
|
|
|
* \param kc3 The third keycode to check.
|
|
|
|
* \param kc4 The fourth keycode to check.
|
|
|
|
*
|
|
|
|
* \return `true` if the sequence buffer matches.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_four_keys(uint16_t kc1, uint16_t kc2, uint16_t kc3, uint16_t kc4);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check the sequence buffer for the given keycodes.
|
|
|
|
*
|
|
|
|
* \param kc1 The first keycode to check.
|
|
|
|
* \param kc2 The second keycode to check.
|
|
|
|
* \param kc3 The third keycode to check.
|
|
|
|
* \param kc4 The fourth keycode to check.
|
|
|
|
* \param kc5 The fifth keycode to check.
|
|
|
|
*
|
|
|
|
* \return `true` if the sequence buffer matches.
|
|
|
|
*/
|
|
|
|
bool leader_sequence_five_keys(uint16_t kc1, uint16_t kc2, uint16_t kc3, uint16_t kc4, uint16_t kc5);
|
|
|
|
|
|
|
|
/** \} */
|