process_secure.c
1282 bytes
1// Copyright 2022 QMK
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "secure.h"
5#include "process_secure.h"
6#include "quantum_keycodes.h"
7
8bool preprocess_secure(uint16_t keycode, keyrecord_t *record) {
9 if (secure_is_unlocking()) {
10 // !pressed will trigger on any already held keys (such as layer keys),
11 // and cause the request secure check to prematurely fail.
12 if (record->event.pressed) {
13 secure_keypress_event(record->event.key.row, record->event.key.col);
14 }
15
16 // Normal keypresses should be disabled until the sequence is completed
17 return false;
18 }
19
20 return true;
21}
22
23bool process_secure(uint16_t keycode, keyrecord_t *record) {
24#ifndef SECURE_DISABLE_KEYCODES
25 if (!record->event.pressed) {
26 if (keycode == QK_SECURE_LOCK) {
27 secure_lock();
28 return false;
29 }
30 if (keycode == QK_SECURE_UNLOCK) {
31 secure_unlock();
32 return false;
33 }
34 if (keycode == QK_SECURE_TOGGLE) {
35 secure_is_locked() ? secure_unlock() : secure_lock();
36 return false;
37 }
38 if (keycode == QK_SECURE_REQUEST) {
39 secure_request_unlock();
40 return false;
41 }
42 }
43#endif
44 return true;
45}