From a28433681946abaaca2c83878fed0f03a2aba07d Mon Sep 17 00:00:00 2001 From: Ilya Zhuravlev Date: Thu, 8 Jul 2021 18:12:13 -0400 Subject: [PATCH] qmk_settings: wrap tap/hold settings --- common_features.mk | 2 +- quantum/qmk_settings.c | 25 +++++++++++++++++++++++++ quantum/qmk_settings.h | 5 +++-- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/common_features.mk b/common_features.mk index 17321c37df..fe349018e6 100644 --- a/common_features.mk +++ b/common_features.mk @@ -482,7 +482,7 @@ endif ifeq ($(strip $(QMK_SETTINGS)), yes) AUTO_SHIFT_ENABLE := yes SRC += $(QUANTUM_DIR)/qmk_settings.c - OPT_DEFS += -DQMK_SETTINGS -DAUTO_SHIFT_NO_SETUP + OPT_DEFS += -DQMK_SETTINGS -DAUTO_SHIFT_NO_SETUP -DTAPPING_TERM_PER_KEY -DPERMISSIVE_HOLD_PER_KEY -DIGNORE_MOD_TAP_INTERRUPT_PER_KEY -DTAPPING_FORCE_HOLD_PER_KEY -DRETRO_TAPPING_PER_KEY endif ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes) diff --git a/quantum/qmk_settings.c b/quantum/qmk_settings.c index a258a05822..6199e8420c 100644 --- a/quantum/qmk_settings.c +++ b/quantum/qmk_settings.c @@ -8,6 +8,7 @@ #include "process_auto_shift.h" #include "mousekey.h" #include "process_combo.h" +#include "action_tapping.h" qmk_settings_t QS; @@ -36,6 +37,8 @@ static const qmk_settings_proto_t protos[] PROGMEM = { DECLARE_SETTING_CB(4, auto_shift_timeout, auto_shift_timeout_apply), DECLARE_SETTING(5, osk_tap_toggle), DECLARE_SETTING(6, osk_timeout), + DECLARE_SETTING(7, tapping_term), + DECLARE_SETTING(8, tapping), DECLARE_SETTING_CB(9, mousekey_delay, mousekey_apply), DECLARE_SETTING_CB(10, mousekey_interval, mousekey_apply), DECLARE_SETTING_CB(11, mousekey_move_delta, mousekey_apply), @@ -101,6 +104,8 @@ void qmk_settings_reset(void) { QS.mousekey_wheel_time_to_max = MOUSEKEY_WHEEL_TIME_TO_MAX; QS.combo_term = COMBO_TERM; + QS.tapping_term = TAPPING_TERM; + QS.tapping = 0; save_settings(); /* to trigger all callbacks */ @@ -146,3 +151,23 @@ int qmk_settings_set(uint16_t qsid, const void *setting, size_t maxsz) { cb(); return 0; } + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + return QS.tapping_term; +} + +bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) { + return QS.tapping & 1; +} + +bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { + return QS.tapping & 2; +} + +bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) { + return QS.tapping & 4; +} + +bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) { + return QS.tapping & 8; +} diff --git a/quantum/qmk_settings.h b/quantum/qmk_settings.h index 1dfcca50a4..8b24827f9f 100644 --- a/quantum/qmk_settings.h +++ b/quantum/qmk_settings.h @@ -106,12 +106,13 @@ typedef struct { uint16_t mousekey_wheel_max_speed; uint16_t mousekey_wheel_time_to_max; uint16_t combo_term; + uint16_t tapping_term; uint8_t grave_esc_override; uint8_t auto_shift; uint8_t osk_tap_toggle; - uint8_t padding0; + uint8_t tapping; } qmk_settings_t; -_Static_assert(sizeof(qmk_settings_t) == 28, "unexpected size of the qmk_settings_t structure"); +_Static_assert(sizeof(qmk_settings_t) == 30, "unexpected size of the qmk_settings_t structure"); typedef void (*qmk_setting_callback_t)(void);