diff options
Diffstat (limited to 'jack')
-rw-r--r-- | jack/introspection.c | 33 | ||||
-rw-r--r-- | jack/jack.c | 65 | ||||
-rw-r--r-- | jack/jack.h | 15 | ||||
-rw-r--r-- | jack/oled.c | 1 | ||||
-rw-r--r-- | jack/post_rules.mk | 11 | ||||
-rw-r--r-- | jack/rules.mk | 24 |
6 files changed, 81 insertions, 68 deletions
diff --git a/jack/introspection.c b/jack/introspection.c new file mode 100644 index 0000000..86f453b --- /dev/null +++ b/jack/introspection.c @@ -0,0 +1,33 @@ +// Copyright 2025 [email protected] +// SPDX-License-Identifier: GPL-2.0-or-later +#include "jack.h" + +#ifdef TAP_DANCE_ENABLE +tap_dance_action_t tap_dance_actions[] = { + [EM_DASH_MINS] = ACTION_TAP_DANCE_FN(em_dash_mins), + [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(ply_nxt_prv), + [PASTE_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, raise_paste, td_reset), + [CBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), + [SBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), +}; +#endif + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [_BASE] = {{KC_VOLU, KC_VOLD}, {KC_MNXT, KC_MPRV}}, + [_LOWER] = {{XRGB_SAI, XRGB_SAD}, {XRGB_HUI, XRGB_HUD}}, + [_RAISE] = {{C(KC_LEFT), C(KC_RGHT)}, {C(S(KC_TAB)), C(KC_TAB)}}}; +#endif + +#ifdef COMBO_ENABLE +#define CMB(name, action, ...) \ + uint16_t const name##_combo[] PROGMEM = {__VA_ARGS__, COMBO_END}; +#include "combos.def" +#undef CMB + +#define CMB(name, action, ...) [name] = COMBO(name##_combo, action), +combo_t key_combos[] = { +#include "combos.def" +}; +#undef CMB +#endif diff --git a/jack/jack.c b/jack/jack.c index f2e9944..274a011 100644 --- a/jack/jack.c +++ b/jack/jack.c @@ -2,35 +2,6 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include "jack.h" -#ifdef TAP_DANCE_ENABLE -tap_dance_action_t tap_dance_actions[] = { - [EM_DASH_MINS] = ACTION_TAP_DANCE_FN(em_dash_mins), - [PLY_NXT_PRV] = ACTION_TAP_DANCE_FN(ply_nxt_prv), - [PASTE_RAISE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, raise_paste, td_reset), - [CBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_RCBR), - [SBRACKET] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_RBRC), -}; -#endif - -#ifdef COMBO_ENABLE -#define CMB(name, action, ...) name, -enum combos { -#include "combos.def" -}; -#undef CMB - -#define CMB(name, action, ...) \ - uint16_t const name##_combo[] PROGMEM = {__VA_ARGS__, COMBO_END}; -#include "combos.def" -#undef CMB - -#define CMB(name, action, ...) [name] = COMBO(name##_combo, action), -combo_t key_combos[] = { -#include "combos.def" -}; -#undef CMB -#endif - #if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE) #include "transactions.h" extern char keylog_str[KEYLOG_LEN + 1]; @@ -41,25 +12,31 @@ void keylogger_sync(uint8_t initiator2target_buffer_size, if (initiator2target_buffer_size == 5) memcpy(&keylog_str, initiator2target_buffer, initiator2target_buffer_size); } +#endif +__attribute__((weak)) void housekeeping_task_keymap(void) {} void housekeeping_task_user(void) { +#if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE) if (is_keyboard_master()) { static uint32_t last_sync; bool needs_sync = false; static char tmp_keylog[5] = {0}; - if (memcmp(&keylog_str, &tmp_keylog, 5)) { + if (memcmp(&keylog_str, &tmp_keylog, sizeof(tmp_keylog))) { needs_sync = true; - memcpy(&tmp_keylog, &keylog_str, 5); + memcpy(&tmp_keylog, &keylog_str, sizeof(tmp_keylog)); } if (timer_elapsed32(last_sync) > 250) needs_sync = true; if (needs_sync) - if (transaction_rpc_send(RPC_ID_USER_KEYLOG_STR, 5, &keylog_str)) + if (transaction_rpc_send(RPC_ID_USER_KEYLOG_STR, sizeof(tmp_keylog), + &keylog_str)) last_sync = timer_read32(); } -} #endif + housekeeping_task_keymap(); +} +__attribute__((weak)) void keyboard_post_init_keymap(void) {} void keyboard_post_init_user(void) { #if defined(SPLIT_KEYBOARD) && defined(OLED_ENABLE) transaction_register_rpc(RPC_ID_USER_KEYLOG_STR, keylogger_sync); @@ -71,7 +48,8 @@ void keyboard_post_init_user(void) { rgblight_enable_noeeprom(); rgblight_sethsv_noeeprom(HSV_CYAN); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); -#elif RGB_MATRIX_ENABLE +#endif +#ifdef RGB_MATRIX_ENABLE rgb_matrix_enable_noeeprom(); rgb_matrix_sethsv_noeeprom(HSV_CYAN); rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); @@ -89,32 +67,23 @@ void matrix_scan_user(void) { #endif } -#ifdef ENCODER_MAP_ENABLE -const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { - [_BASE] = {{KC_VOLU, KC_VOLD}, {KC_MNXT, KC_MPRV}}, - [_LOWER] = {{RGB_SAI, RGB_SAD}, {RGB_HUI, RGB_HUD}}, - [_RAISE] = {{C(KC_LEFT), C(KC_RGHT)}, {C(S(KC_TAB)), C(KC_TAB)}}}; -#endif - #ifndef MAGIC_ENABLE uint16_t keycode_config(uint16_t keycode) { return keycode; } -#endif - -#ifndef MAGIC_ENABLE uint8_t mod_config(uint8_t mod) { return mod; } #endif -__attribute__((weak)) void keyboard_post_init_keymap(void) {} - #ifdef RP2040_MATH_IN_ROM typedef void (*init_fn)(void); - extern init_fn __preinit_array_base__; extern init_fn __preinit_array_end__; +#endif +__attribute__((weak)) void keyboard_pre_init_keymap(void) {} void keyboard_pre_init_user(void) { +#ifdef RP2040_MATH_IN_ROM for (init_fn *func = &__preinit_array_base__; func < &__preinit_array_end__; func++) (*func)(); -} #endif + keyboard_pre_init_keymap(); +} diff --git a/jack/jack.h b/jack/jack.h index eb9182c..3d3b1c9 100644 --- a/jack/jack.h +++ b/jack/jack.h @@ -21,6 +21,12 @@ enum custom_keycodes { UC_SUPER }; +#define CMB(name, action, ...) name, +enum combos { +#include "combos.def" +}; +#undef CMB + bool process_record_unicode(uint16_t keycode, keyrecord_t *record); bool process_record_taps(uint16_t keycode, keyrecord_t *record); extern uint8_t extract_mod_bits(uint16_t code); @@ -29,15 +35,15 @@ void tap_code_register(uint8_t code, uint8_t mods, uint16_t delay, bool register_tap); void process_tap_code_buffer(void); void tap_string(const char *str); -void keyboard_post_init_keymap(void); + #ifdef TAP_DANCE_ENABLE void td_reset(tap_dance_state_t *state, void *user_data); void em_dash_mins(tap_dance_state_t *state, void *user_data); void ply_nxt_prv(tap_dance_state_t *state, void *user_data); void raise_paste(tap_dance_state_t *state, void *user_data); #endif + void oled_timer_reset(void); -bool oled_task_keymap(void); void anim_frame(uint16_t size, char const action[][size]); void wpm_graph(void); void felix_dog(void); @@ -49,6 +55,11 @@ void render_keylog(void); void render_wpm(void); void render_scan_rate(void); +void keyboard_pre_init_keymap(void); +void keyboard_post_init_keymap(void); +void housekeeping_task_keymap(void); +bool oled_task_keymap(void); + #define KEYLOG_LEN 5 #define PNP TD(PLY_NXT_PRV) #define PSTRSE TD(PASTE_RAISE) diff --git a/jack/oled.c b/jack/oled.c index adaad3d..ec52705 100644 --- a/jack/oled.c +++ b/jack/oled.c @@ -11,7 +11,6 @@ extern OLED_BLOCK_TYPE oled_dirty; void oled_timer_reset(void) { oled_timer = timer_read32(); } __attribute__((weak)) bool oled_task_keymap(void) { return true; } - bool oled_task_user(void) { if (is_keyboard_master()) { if (timer_elapsed32(oled_timer) > 300000) { diff --git a/jack/post_rules.mk b/jack/post_rules.mk index 9880cdb..fb10049 100644 --- a/jack/post_rules.mk +++ b/jack/post_rules.mk @@ -1,3 +1,14 @@ ifeq ($(MCU_SERIES), RP2040) include picosdk_math.mk endif + +ifeq ($(strip $(RP2040_MATH_IN_ROM)), yes) + OPT_DEFS += -DRP2040_MATH_IN_ROM + MCU_LDSCRIPT = RP2040_FLASH_TIMECRIT_ROM_MATH +endif + +ifeq ($(strip $(MOUSE_JIGGLE_ENABLE)), yes) + OPT_DEFS += -DMOUSE_JIGGLE_ENABLE + MOUSEKEY_ENABLE = yes + DEFERRED_EXEC_ENABLE = yes +endif diff --git a/jack/rules.mk b/jack/rules.mk index bd2c377..71ddad7 100644 --- a/jack/rules.mk +++ b/jack/rules.mk @@ -16,44 +16,34 @@ MOUSE_JIGGLE_ENABLE = yes CUSTOM_TAP_CODE_ENABLE = no DEBOUNCE_TYPE = asym_eager_defer_pk AVR_CFLAGS += -mrelax -INTROSPECTION_KEYMAP_C = jack.c +INTROSPECTION_KEYMAP_C = introspection.c -SRC += tapping.c +SRC += $(USER_PATH)/jack.c $(USER_PATH)/tapping.c ifeq ($(strip $(OLED_ENABLE)), yes) - SRC += oled.c + SRC += $(USER_PATH)/oled.c WPM_ENABLE = yes endif ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) RGB_MATRIX_CUSTOM_USER = yes - SRC += color.c + SRC += $(USER_PATH)/color.c endif ifeq ($(strip $(UNICODE_COMMON)), yes) UNICODE_ENABLE = no - SRC += unicode.c + SRC += $(USER_PATH)/unicode.c endif ifeq ($(strip $(CUSTOM_TAP_CODE_ENABLE)), yes) OPT_DEFS += -DCUSTOM_TAP_CODE_ENABLE - SRC += tap_code.c + SRC += $(USER_PATH)tap_code.c endif ifeq ($(PLATFORM), CHIBIOS) ifeq ($(MCU_SERIES), RP2040) RP2040_MATH_IN_ROM = no + PROGRAM_CMD = doas picotool load $(BUILD_DIR)/$(TARGET).uf2 endif EXTRAFLAGS += -O3 endif - -ifeq ($(strip $(RP2040_MATH_IN_ROM)), yes) - OPT_DEFS += -DRP2040_MATH_IN_ROM - MCU_LDSCRIPT = RP2040_FLASH_TIMECRIT_ROM_MATH -endif - -ifeq ($(strip $(MOUSE_JIGGLE_ENABLE)), yes) - OPT_DEFS += -DMOUSE_JIGGLE_ENABLE - MOUSEKEY_ENABLE = yes - DEFERRED_EXEC_ENABLE = yes -endif |