diff options
Diffstat (limited to 'quantum')
29 files changed, 236 insertions, 155 deletions
diff --git a/quantum/action.c b/quantum/action.c index 8dae32b2cb..74ef55e5eb 100644 --- a/quantum/action.c +++ b/quantum/action.c @@ -658,7 +658,6 @@ void process_action(keyrecord_t *record, action_t action) { layer_off(action.layer_tap.val); break; } else if (tap_count < ONESHOT_TAP_TOGGLE) { - layer_on(action.layer_tap.val); set_oneshot_layer(action.layer_tap.val, ONESHOT_START); } } else { @@ -671,7 +670,6 @@ void process_action(keyrecord_t *record, action_t action) { } # else if (event.pressed) { - layer_on(action.layer_tap.val); set_oneshot_layer(action.layer_tap.val, ONESHOT_START); } else { clear_oneshot_layer_state(ONESHOT_PRESSED); diff --git a/quantum/audio/audio.c b/quantum/audio/audio.c index c1a1500493..b2611c5f09 100644 --- a/quantum/audio/audio.c +++ b/quantum/audio/audio.c @@ -20,6 +20,7 @@ #include "debug.h" #include "wait.h" #include "util.h" +#include "gpio.h" /* audio system: * @@ -121,6 +122,32 @@ static bool audio_initialized = false; static bool audio_driver_stopped = true; audio_config_t audio_config; +#ifndef AUDIO_POWER_CONTROL_PIN_ON_STATE +# define AUDIO_POWER_CONTROL_PIN_ON_STATE 1 +#endif + +void audio_driver_initialize(void) { +#ifdef AUDIO_POWER_CONTROL_PIN + gpio_set_pin_output_push_pull(AUDIO_POWER_CONTROL_PIN); + gpio_write_pin(AUDIO_POWER_CONTROL_PIN, !AUDIO_POWER_CONTROL_PIN_ON_STATE); +#endif + audio_driver_initialize_impl(); +} + +void audio_driver_stop(void) { + audio_driver_stop_impl(); +#ifdef AUDIO_POWER_CONTROL_PIN + gpio_write_pin(AUDIO_POWER_CONTROL_PIN, !AUDIO_POWER_CONTROL_PIN_ON_STATE); +#endif +} + +void audio_driver_start(void) { +#ifdef AUDIO_POWER_CONTROL_PIN + gpio_write_pin(AUDIO_POWER_CONTROL_PIN, AUDIO_POWER_CONTROL_PIN_ON_STATE); +#endif + audio_driver_start_impl(); +} + void eeconfig_update_audio_current(void) { eeconfig_update_audio(audio_config.raw); } diff --git a/quantum/audio/audio.h b/quantum/audio/audio.h index eb0bedc6f9..054331d6f3 100644 --- a/quantum/audio/audio.h +++ b/quantum/audio/audio.h @@ -215,9 +215,9 @@ void audio_startup(void); // hardware interface // implementation in the driver_avr/arm_* respective parts -void audio_driver_initialize(void); -void audio_driver_start(void); -void audio_driver_stop(void); +void audio_driver_initialize_impl(void); +void audio_driver_start_impl(void); +void audio_driver_stop_impl(void); /** * @brief get the number of currently active tones diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c index 2d2180b4b4..40690d6a97 100644 --- a/quantum/eeconfig.c +++ b/quantum/eeconfig.c @@ -19,6 +19,8 @@ void via_eeprom_set_valid(bool valid); void eeconfig_init_via(void); #endif +_Static_assert((intptr_t)EECONFIG_HANDEDNESS == 14, "EEPROM handedness offset is incorrect"); + /** \brief eeconfig enable * * FIXME: needs doc @@ -57,11 +59,9 @@ void eeconfig_init_quantum(void) { eeprom_update_byte(EECONFIG_AUDIO, 0); eeprom_update_dword(EECONFIG_RGBLIGHT, 0); eeprom_update_byte(EECONFIG_RGBLIGHT_EXTENDED, 0); - eeprom_update_byte(EECONFIG_UNUSED, 0); eeprom_update_byte(EECONFIG_UNICODEMODE, 0); eeprom_update_byte(EECONFIG_STENOMODE, 0); - uint64_t dummy = 0; - eeprom_update_block(&dummy, EECONFIG_RGB_MATRIX, sizeof(uint64_t)); + eeprom_write_qword(EECONFIG_RGB_MATRIX, 0); eeprom_update_dword(EECONFIG_HAPTIC, 0); #if defined(HAPTIC_ENABLE) haptic_reset(); diff --git a/quantum/eeconfig.h b/quantum/eeconfig.h index d7cce166bd..fa0dd799d1 100644 --- a/quantum/eeconfig.h +++ b/quantum/eeconfig.h @@ -19,37 +19,57 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include <stdint.h> #include <stdbool.h> +#include <stddef.h> // offsetof #include "eeprom.h" +#include "util.h" #ifndef EECONFIG_MAGIC_NUMBER -# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE6 // When changing, decrement this value to avoid future re-init issues +# define EECONFIG_MAGIC_NUMBER (uint16_t)0xFEE5 // When changing, decrement this value to avoid future re-init issues #endif #define EECONFIG_MAGIC_NUMBER_OFF (uint16_t)0xFFFF +// Dummy struct only used to calculate offsets +typedef struct PACKED { + uint16_t magic; + uint8_t debug; + uint8_t default_layer; + uint16_t keymap; + uint8_t backlight; + uint8_t audio; + uint32_t rgblight; + uint8_t unicode; + uint8_t steno; + uint8_t handedness; + uint32_t keyboard; + uint32_t user; + union { // Mutually exclusive + uint32_t led_matrix; + uint64_t rgb_matrix; + }; + uint32_t haptic; + uint8_t rgblight_ext; +} eeprom_core_t; + /* EEPROM parameter address */ -#define EECONFIG_MAGIC (uint16_t *)0 -#define EECONFIG_DEBUG (uint8_t *)2 -#define EECONFIG_DEFAULT_LAYER (uint8_t *)3 -#define EECONFIG_KEYMAP (uint16_t *)4 -#define EECONFIG_BACKLIGHT (uint8_t *)6 -#define EECONFIG_AUDIO (uint8_t *)7 -#define EECONFIG_RGBLIGHT (uint32_t *)8 -#define EECONFIG_UNICODEMODE (uint8_t *)12 -#define EECONFIG_STENOMODE (uint8_t *)13 -// EEHANDS for two handed boards -#define EECONFIG_HANDEDNESS (uint8_t *)14 -#define EECONFIG_KEYBOARD (uint32_t *)15 -#define EECONFIG_USER (uint32_t *)19 -#define EECONFIG_UNUSED (uint8_t *)23 -// Mutually exclusive -#define EECONFIG_LED_MATRIX (uint32_t *)24 -#define EECONFIG_RGB_MATRIX (uint64_t *)24 - -#define EECONFIG_HAPTIC (uint32_t *)32 -#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)36 +#define EECONFIG_MAGIC (uint16_t *)(offsetof(eeprom_core_t, magic)) +#define EECONFIG_DEBUG (uint8_t *)(offsetof(eeprom_core_t, debug)) +#define EECONFIG_DEFAULT_LAYER (uint8_t *)(offsetof(eeprom_core_t, default_layer)) +#define EECONFIG_KEYMAP (uint16_t *)(offsetof(eeprom_core_t, keymap)) +#define EECONFIG_BACKLIGHT (uint8_t *)(offsetof(eeprom_core_t, backlight)) +#define EECONFIG_AUDIO (uint8_t *)(offsetof(eeprom_core_t, audio)) +#define EECONFIG_RGBLIGHT (uint32_t *)(offsetof(eeprom_core_t, rgblight)) +#define EECONFIG_UNICODEMODE (uint8_t *)(offsetof(eeprom_core_t, unicode)) +#define EECONFIG_STENOMODE (uint8_t *)(offsetof(eeprom_core_t, steno)) +#define EECONFIG_HANDEDNESS (uint8_t *)(offsetof(eeprom_core_t, handedness)) +#define EECONFIG_KEYBOARD (uint32_t *)(offsetof(eeprom_core_t, keyboard)) +#define EECONFIG_USER (uint32_t *)(offsetof(eeprom_core_t, user)) +#define EECONFIG_LED_MATRIX (uint32_t *)(offsetof(eeprom_core_t, led_matrix)) +#define EECONFIG_RGB_MATRIX (uint64_t *)(offsetof(eeprom_core_t, rgb_matrix)) +#define EECONFIG_HAPTIC (uint32_t *)(offsetof(eeprom_core_t, haptic)) +#define EECONFIG_RGBLIGHT_EXTENDED (uint8_t *)(offsetof(eeprom_core_t, rgblight_ext)) // Size of EEPROM being used for core data storage -#define EECONFIG_BASE_SIZE 37 +#define EECONFIG_BASE_SIZE ((uint8_t)sizeof(eeprom_core_t)) // Size of EEPROM dedicated to keyboard- and user-specific data #ifndef EECONFIG_KB_DATA_SIZE diff --git a/quantum/keyboard.c b/quantum/keyboard.c index 5aaa4b452f..df1dc1c3ee 100644 --- a/quantum/keyboard.c +++ b/quantum/keyboard.c @@ -500,10 +500,10 @@ void keyboard_init(void) { */ void switch_events(uint8_t row, uint8_t col, bool pressed) { #if defined(LED_MATRIX_ENABLE) - process_led_matrix(row, col, pressed); + led_matrix_handle_key_event(row, col, pressed); #endif #if defined(RGB_MATRIX_ENABLE) - process_rgb_matrix(row, col, pressed); + rgb_matrix_handle_key_event(row, col, pressed); #endif } diff --git a/quantum/keycodes.h b/quantum/keycodes.h index 69d62b5731..da1012cf12 100644 --- a/quantum/keycodes.h +++ b/quantum/keycodes.h @@ -627,6 +627,15 @@ enum qk_keycode_defines { QK_BACKLIGHT_UP = 0x7804, QK_BACKLIGHT_STEP = 0x7805, QK_BACKLIGHT_TOGGLE_BREATHING = 0x7806, + QK_LED_MATRIX_ON = 0x7810, + QK_LED_MATRIX_OFF = 0x7811, + QK_LED_MATRIX_TOGGLE = 0x7812, + QK_LED_MATRIX_MODE_NEXT = 0x7813, + QK_LED_MATRIX_MODE_PREVIOUS = 0x7814, + QK_LED_MATRIX_BRIGHTNESS_UP = 0x7815, + QK_LED_MATRIX_BRIGHTNESS_DOWN = 0x7816, + QK_LED_MATRIX_SPEED_UP = 0x7817, + QK_LED_MATRIX_SPEED_DOWN = 0x7818, RGB_TOG = 0x7820, RGB_MODE_FORWARD = 0x7821, RGB_MODE_REVERSE = 0x7822, @@ -1281,6 +1290,15 @@ enum qk_keycode_defines { BL_UP = QK_BACKLIGHT_UP, BL_STEP = QK_BACKLIGHT_STEP, BL_BRTG = QK_BACKLIGHT_TOGGLE_BREATHING, + LM_ON = QK_LED_MATRIX_ON, + LM_OFF = QK_LED_MATRIX_OFF, + LM_TOGG = QK_LED_MATRIX_TOGGLE, + LM_NEXT = QK_LED_MATRIX_MODE_NEXT, + LM_PREV = QK_LED_MATRIX_MODE_PREVIOUS, + LM_BRIU = QK_LED_MATRIX_BRIGHTNESS_UP, + LM_BRID = QK_LED_MATRIX_BRIGHTNESS_DOWN, + LM_SPDU = QK_LED_MATRIX_SPEED_UP, + LM_SPDD = QK_LED_MATRIX_SPEED_DOWN, RGB_MOD = RGB_MODE_FORWARD, RGB_RMOD = RGB_MODE_REVERSE, RGB_M_P = RGB_MODE_PLAIN, @@ -1416,6 +1434,7 @@ enum qk_keycode_defines { #define IS_STENO_KEYCODE(code) ((code) >= QK_STENO_BOLT && (code) <= QK_STENO_COMB_MAX) #define IS_MACRO_KEYCODE(code) ((code) >= QK_MACRO_0 && (code) <= QK_MACRO_31) #define IS_BACKLIGHT_KEYCODE(code) ((code) >= QK_BACKLIGHT_ON && (code) <= QK_BACKLIGHT_TOGGLE_BREATHING) +#define IS_LED_MATRIX_KEYCODE(code) ((code) >= QK_LED_MATRIX_ON && (code) <= QK_LED_MATRIX_SPEED_DOWN) #define IS_RGB_KEYCODE(code) ((code) >= RGB_TOG && (code) <= RGB_MODE_TWINKLE) #define IS_QUANTUM_KEYCODE(code) ((code) >= QK_BOOTLOADER && (code) <= QK_ALT_REPEAT_KEY) #define IS_KB_KEYCODE(code) ((code) >= QK_KB_0 && (code) <= QK_KB_31) @@ -1438,6 +1457,7 @@ enum qk_keycode_defines { #define STENO_KEYCODE_RANGE QK_STENO_BOLT ... QK_STENO_COMB_MAX #define MACRO_KEYCODE_RANGE QK_MACRO_0 ... QK_MACRO_31 #define BACKLIGHT_KEYCODE_RANGE QK_BACKLIGHT_ON ... QK_BACKLIGHT_TOGGLE_BREATHING +#define LED_MATRIX_KEYCODE_RANGE QK_LED_MATRIX_ON ... QK_LED_MATRIX_SPEED_DOWN #define RGB_KEYCODE_RANGE RGB_TOG ... RGB_MODE_TWINKLE #define QUANTUM_KEYCODE_RANGE QK_BOOTLOADER ... QK_ALT_REPEAT_KEY #define KB_KEYCODE_RANGE QK_KB_0 ... QK_KB_31 diff --git a/quantum/led_matrix/led_matrix.c b/quantum/led_matrix/led_matrix.c index c0fb4c810b..2ca62c6969 100644 --- a/quantum/led_matrix/led_matrix.c +++ b/quantum/led_matrix/led_matrix.c @@ -159,7 +159,7 @@ void led_matrix_set_value_all(uint8_t value) { #endif } -void process_led_matrix(uint8_t row, uint8_t col, bool pressed) { +void led_matrix_handle_key_event(uint8_t row, uint8_t col, bool pressed) { #ifndef LED_MATRIX_SPLIT if (!is_keyboard_master()) return; #endif diff --git a/quantum/led_matrix/led_matrix.h b/quantum/led_matrix/led_matrix.h index 941d42aeca..9a13c3e52b 100644 --- a/quantum/led_matrix/led_matrix.h +++ b/quantum/led_matrix/led_matrix.h @@ -124,7 +124,7 @@ uint8_t led_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void led_matrix_set_value(int index, uint8_t value); void led_matrix_set_value_all(uint8_t value); -void process_led_matrix(uint8_t row, uint8_t col, bool pressed); +void led_matrix_handle_key_event(uint8_t row, uint8_t col, bool pressed); void led_matrix_task(void); diff --git a/quantum/led_matrix/led_matrix_drivers.c b/quantum/led_matrix/led_matrix_drivers.c index 2e80bd0375..bd4852e939 100644 --- a/quantum/led_matrix/led_matrix_drivers.c +++ b/quantum/led_matrix/led_matrix_drivers.c @@ -33,6 +33,14 @@ const led_matrix_driver_t led_matrix_driver = { .set_value_all = is31fl3218_set_value_all, }; +#elif defined(LED_MATRIX_IS31FL3236) +const led_matrix_driver_t led_matrix_driver = { + .init = is31fl3236_init_drivers, + .flush = is31fl3236_flush, + .set_value = is31fl3236_set_value, + .set_value_all = is31fl3236_set_value_all, +}; + #elif defined(LED_MATRIX_IS31FL3729) const led_matrix_driver_t led_matrix_driver = { .init = is31fl3729_init_drivers, diff --git a/quantum/led_matrix/led_matrix_drivers.h b/quantum/led_matrix/led_matrix_drivers.h index a961784a62..60354e4677 100644 --- a/quantum/led_matrix/led_matrix_drivers.h +++ b/quantum/led_matrix/led_matrix_drivers.h @@ -7,6 +7,8 @@ #if defined(LED_MATRIX_IS31FL3218) # include "is31fl3218-mono.h" +#elif defined(LED_MATRIX_IS31FL3236) +# include "is31fl3236-mono.h" #elif defined(LED_MATRIX_IS31FL3729) # include "is31fl3729-mono.h" #elif defined(LED_MATRIX_IS31FL3731) diff --git a/quantum/main.c b/quantum/main.c index 3b101c522c..3159c55850 100644 --- a/quantum/main.c +++ b/quantum/main.c @@ -25,22 +25,9 @@ void protocol_pre_task(void); void protocol_post_task(void); // Bodge as refactoring this area sucks.... -void protocol_init(void) __attribute__((weak)); -void protocol_init(void) { - protocol_pre_init(); - - keyboard_init(); - - protocol_post_init(); -} - -void protocol_task(void) __attribute__((weak)); -void protocol_task(void) { - protocol_pre_task(); - +void protocol_keyboard_task(void) __attribute__((weak)); +void protocol_keyboard_task(void) { keyboard_task(); - - protocol_post_task(); } /** \brief Main @@ -53,11 +40,25 @@ int main(void) { protocol_setup(); keyboard_setup(); - protocol_init(); + protocol_pre_init(); + keyboard_init(); + protocol_post_init(); /* Main loop */ while (true) { - protocol_task(); + protocol_pre_task(); + protocol_keyboard_task(); + protocol_post_task(); + +#ifdef RAW_ENABLE + void raw_hid_task(void); + raw_hid_task(); +#endif + +#ifdef CONSOLE_ENABLE + void console_task(void); + console_task(); +#endif #ifdef QUANTUM_PAINTER_ENABLE // Run Quantum Painter task diff --git a/quantum/pointing_device/pointing_device_auto_mouse.c b/quantum/pointing_device/pointing_device_auto_mouse.c index 1b11fffedb..d9f924e258 100644 --- a/quantum/pointing_device/pointing_device_auto_mouse.c +++ b/quantum/pointing_device/pointing_device_auto_mouse.c @@ -45,7 +45,7 @@ static inline bool layer_hold_check(void) { } /* check all layer activation criteria */ -static inline bool is_auto_mouse_active(void) { +bool is_auto_mouse_active(void) { return auto_mouse_context.status.is_activated || auto_mouse_context.status.mouse_key_tracker || layer_hold_check(); } @@ -99,6 +99,15 @@ bool get_auto_mouse_toggle(void) { } /** + * @brief get key tracker value + * + * @return bool of current layer_toggled state + */ +int8_t get_auto_mouse_key_tracker(void) { + return auto_mouse_context.status.mouse_key_tracker; +} + +/** * @brief Reset auto mouse context * * Clear timers and status @@ -164,6 +173,15 @@ void set_auto_mouse_debounce(uint8_t debounce) { } /** + * @brief Changes the timeout for the mouse auto layer to be disabled + * + * @param key_tracker + */ +void set_auto_mouse_key_tracker(int8_t key_tracker) { + auto_mouse_context.status.mouse_key_tracker = key_tracker; +} + +/** * @brief toggle mouse layer setting * * Change state of local layer_toggled bool meant to track when the mouse layer is toggled on by other means diff --git a/quantum/pointing_device/pointing_device_auto_mouse.h b/quantum/pointing_device/pointing_device_auto_mouse.h index 904f18b68e..a596c065a3 100644 --- a/quantum/pointing_device/pointing_device_auto_mouse.h +++ b/quantum/pointing_device/pointing_device_auto_mouse.h @@ -81,9 +81,11 @@ void set_auto_mouse_timeout(uint16_t timeout); // set l uint16_t get_auto_mouse_timeout(void); // get layer timeout void set_auto_mouse_debounce(uint8_t debounce); // set debounce uint8_t get_auto_mouse_debounce(void); // get debounce +void set_auto_mouse_key_tracker(int8_t key_tracker); // set key tracker +int8_t get_auto_mouse_key_tracker(void); // get key tracker void auto_mouse_layer_off(void); // disable target layer if appropriate (DO NOT USE in layer_state_set stack!!) layer_state_t remove_auto_mouse_layer(layer_state_t state, bool force); // remove auto mouse target layer from state if appropriate (can be forced) - +bool is_auto_mouse_active(void); // check if target layer is active /* ----------For custom pointing device activation----------------------------------------------------------- */ bool auto_mouse_activation(report_mouse_t mouse_report); // handles pointing device trigger conditions for target layer activation (overwritable) diff --git a/quantum/process_keycode/process_backlight.c b/quantum/process_keycode/process_backlight.c index c1596ec07d..dafe979760 100644 --- a/quantum/process_keycode/process_backlight.c +++ b/quantum/process_keycode/process_backlight.c @@ -15,36 +15,11 @@ */ #include "process_backlight.h" - -#ifdef LED_MATRIX_ENABLE -# include "led_matrix.h" -#else -# include "backlight.h" -#endif +#include "backlight.h" bool process_backlight(uint16_t keycode, keyrecord_t *record) { if (record->event.pressed) { switch (keycode) { -#ifdef LED_MATRIX_ENABLE - case QK_BACKLIGHT_ON: - led_matrix_enable(); - return false; - case QK_BACKLIGHT_OFF: - led_matrix_disable(); - return false; - case QK_BACKLIGHT_DOWN: - led_matrix_decrease_val(); - return false; - case QK_BACKLIGHT_UP: - led_matrix_increase_val(); - return false; - case QK_BACKLIGHT_TOGGLE: - led_matrix_toggle(); - return false; - case QK_BACKLIGHT_STEP: - led_matrix_step(); - return false; -#else case QK_BACKLIGHT_ON: backlight_level(BACKLIGHT_LEVELS); return false; @@ -63,11 +38,10 @@ bool process_backlight(uint16_t keycode, keyrecord_t *record) { case QK_BACKLIGHT_STEP: backlight_step(); return false; -# ifdef BACKLIGHT_BREATHING +#ifdef BACKLIGHT_BREATHING case QK_BACKLIGHT_TOGGLE_BREATHING: backlight_toggle_breathing(); return false; -# endif #endif } } diff --git a/quantum/process_keycode/process_led_matrix.c b/quantum/process_keycode/process_led_matrix.c new file mode 100644 index 0000000000..217c9a2c28 --- /dev/null +++ b/quantum/process_keycode/process_led_matrix.c @@ -0,0 +1,32 @@ +// Copyright 2024 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "process_led_matrix.h" +#include "led_matrix.h" + +bool process_led_matrix(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case QK_BACKLIGHT_ON: + led_matrix_enable(); + return false; + case QK_BACKLIGHT_OFF: + led_matrix_disable(); + return false; + case QK_BACKLIGHT_DOWN: + led_matrix_decrease_val(); + return false; + case QK_BACKLIGHT_UP: + led_matrix_increase_val(); + return false; + case QK_BACKLIGHT_TOGGLE: + led_matrix_toggle(); + return false; + case QK_BACKLIGHT_STEP: + led_matrix_step(); + return false; + } + } + + return true; +} diff --git a/quantum/process_keycode/process_led_matrix.h b/quantum/process_keycode/process_led_matrix.h new file mode 100644 index 0000000000..407d04aa27 --- /dev/null +++ b/quantum/process_keycode/process_led_matrix.h @@ -0,0 +1,10 @@ +// Copyright 2024 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <stdint.h> +#include <stdbool.h> +#include "action.h" + +bool process_led_matrix(uint16_t keycode, keyrecord_t *record); diff --git a/quantum/quantum.c b/quantum/quantum.c index 6639dc2291..011f9d73e4 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c @@ -16,7 +16,7 @@ #include "quantum.h" -#if defined(BACKLIGHT_ENABLE) || defined(LED_MATRIX_ENABLE) +#ifdef BACKLIGHT_ENABLE # include "process_backlight.h" #endif @@ -40,6 +40,10 @@ # include "process_leader.h" #endif +#ifdef LED_MATRIX_ENABLE +# include "process_led_matrix.h" +#endif + #ifdef MAGIC_ENABLE # include "process_magic.h" #endif @@ -333,9 +337,12 @@ bool process_record_quantum(keyrecord_t *record) { #ifdef AUDIO_ENABLE process_audio(keycode, record) && #endif -#if defined(BACKLIGHT_ENABLE) || defined(LED_MATRIX_ENABLE) +#if defined(BACKLIGHT_ENABLE) process_backlight(keycode, record) && #endif +#if defined(LED_MATRIX_ENABLE) + process_led_matrix(keycode, record) && +#endif #ifdef STENO_ENABLE process_steno(keycode, record) && #endif diff --git a/quantum/quantum_keycodes_legacy.h b/quantum/quantum_keycodes_legacy.h index 260ac1c8a4..51ec77bae0 100644 --- a/quantum/quantum_keycodes_legacy.h +++ b/quantum/quantum_keycodes_legacy.h @@ -3,56 +3,3 @@ // clang-format off // Deprecated Quantum keycodes -#define SH_TG QK_SWAP_HANDS_TOGGLE -#define SQ_TOG QK_SEQUENCER_TOGGLE - -#define MAGIC_SWAP_CONTROL_CAPSLOCK QK_MAGIC_SWAP_CONTROL_CAPS_LOCK -#define MAGIC_UNSWAP_CONTROL_CAPSLOCK QK_MAGIC_UNSWAP_CONTROL_CAPS_LOCK -#define MAGIC_TOGGLE_CONTROL_CAPSLOCK QK_MAGIC_TOGGLE_CONTROL_CAPS_LOCK -#define MAGIC_UNCAPSLOCK_TO_CONTROL QK_MAGIC_CAPS_LOCK_AS_CONTROL_OFF -#define MAGIC_CAPSLOCK_TO_CONTROL QK_MAGIC_CAPS_LOCK_AS_CONTROL_ON -#define MAGIC_SWAP_LALT_LGUI QK_MAGIC_SWAP_LALT_LGUI -#define MAGIC_UNSWAP_LALT_LGUI QK_MAGIC_UNSWAP_LALT_LGUI -#define MAGIC_SWAP_RALT_RGUI QK_MAGIC_SWAP_RALT_RGUI -#define MAGIC_UNSWAP_RALT_RGUI QK_MAGIC_UNSWAP_RALT_RGUI -#define MAGIC_UNNO_GUI QK_MAGIC_GUI_ON -#define MAGIC_NO_GUI QK_MAGIC_GUI_OFF -#define MAGIC_TOGGLE_GUI QK_MAGIC_TOGGLE_GUI -#define MAGIC_SWAP_GRAVE_ESC QK_MAGIC_SWAP_GRAVE_ESC -#define MAGIC_UNSWAP_GRAVE_ESC QK_MAGIC_UNSWAP_GRAVE_ESC -#define MAGIC_SWAP_BACKSLASH_BACKSPACE QK_MAGIC_SWAP_BACKSLASH_BACKSPACE -#define MAGIC_UNSWAP_BACKSLASH_BACKSPACE QK_MAGIC_UNSWAP_BACKSLASH_BACKSPACE -#define MAGIC_TOGGLE_BACKSLASH_BACKSPACE QK_MAGIC_TOGGLE_BACKSLASH_BACKSPACE -#define MAGIC_HOST_NKRO QK_MAGIC_NKRO_ON -#define MAGIC_UNHOST_NKRO QK_MAGIC_NKRO_OFF -#define MAGIC_TOGGLE_NKRO QK_MAGIC_TOGGLE_NKRO -#define MAGIC_SWAP_ALT_GUI QK_MAGIC_SWAP_ALT_GUI -#define MAGIC_UNSWAP_ALT_GUI QK_MAGIC_UNSWAP_ALT_GUI -#define MAGIC_TOGGLE_ALT_GUI QK_MAGIC_TOGGLE_ALT_GUI -#define MAGIC_SWAP_LCTL_LGUI QK_MAGIC_SWAP_LCTL_LGUI -#define MAGIC_UNSWAP_LCTL_LGUI QK_MAGIC_UNSWAP_LCTL_LGUI -#define MAGIC_SWAP_RCTL_RGUI QK_MAGIC_SWAP_RCTL_RGUI -#define MAGIC_UNSWAP_RCTL_RGUI QK_MAGIC_UNSWAP_RCTL_RGUI -#define MAGIC_SWAP_CTL_GUI QK_MAGIC_SWAP_CTL_GUI -#define MAGIC_UNSWAP_CTL_GUI QK_MAGIC_UNSWAP_CTL_GUI -#define MAGIC_TOGGLE_CTL_GUI QK_MAGIC_TOGGLE_CTL_GUI -#define MAGIC_EE_HANDS_LEFT QK_MAGIC_EE_HANDS_LEFT -#define MAGIC_EE_HANDS_RIGHT QK_MAGIC_EE_HANDS_RIGHT -#define MAGIC_SWAP_ESCAPE_CAPSLOCK QK_MAGIC_SWAP_ESCAPE_CAPS_LOCK -#define MAGIC_UNSWAP_ESCAPE_CAPSLOCK QK_MAGIC_UNSWAP_ESCAPE_CAPS_LOCK -#define MAGIC_TOGGLE_ESCAPE_CAPSLOCK QK_MAGIC_TOGGLE_ESCAPE_CAPS_LOCK - -#define LCG_SWP QK_MAGIC_SWAP_LCTL_LGUI -#define LCG_NRM QK_MAGIC_UNSWAP_LCTL_LGUI -#define RCG_SWP QK_MAGIC_SWAP_RCTL_RGUI -#define RCG_NRM QK_MAGIC_UNSWAP_RCTL_RGUI -#define LAG_SWP QK_MAGIC_SWAP_LALT_LGUI -#define LAG_NRM QK_MAGIC_UNSWAP_LALT_LGUI -#define RAG_SWP QK_MAGIC_SWAP_RALT_RGUI -#define RAG_NRM QK_MAGIC_UNSWAP_RALT_RGUI -#define GUI_ON QK_MAGIC_GUI_ON -#define GUI_OFF QK_MAGIC_GUI_OFF -#define GUI_TOG QK_MAGIC_TOGGLE_GUI - -#define X(i) UM(i) -#define XP(i, j) UP(i, j) diff --git a/quantum/rgb_matrix/rgb_matrix.c b/quantum/rgb_matrix/rgb_matrix.c index 655aca1867..aaba00b457 100644 --- a/quantum/rgb_matrix/rgb_matrix.c +++ b/quantum/rgb_matrix/rgb_matrix.c @@ -156,7 +156,7 @@ void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue) { #endif } -void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed) { +void rgb_matrix_handle_key_event(uint8_t row, uint8_t col, bool pressed) { #ifndef RGB_MATRIX_SPLIT if (!is_keyboard_master()) return; #endif diff --git a/quantum/rgb_matrix/rgb_matrix.h b/quantum/rgb_matrix/rgb_matrix.h index f8a6845e02..ceb3185d1a 100644 --- a/quantum/rgb_matrix/rgb_matrix.h +++ b/quantum/rgb_matrix/rgb_matrix.h @@ -148,7 +148,7 @@ uint8_t rgb_matrix_map_row_column_to_led(uint8_t row, uint8_t column, uint8_t *l void rgb_matrix_set_color(int index, uint8_t red, uint8_t green, uint8_t blue); void rgb_matrix_set_color_all(uint8_t red, uint8_t green, uint8_t blue); -void process_rgb_matrix(uint8_t row, uint8_t col, bool pressed); +void rgb_matrix_handle_key_event(uint8_t row, uint8_t col, bool pressed); void rgb_matrix_task(void); diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c index 95d1e884f0..4370996d0e 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.c +++ b/quantum/rgb_matrix/rgb_matrix_drivers.c @@ -36,6 +36,14 @@ const rgb_matrix_driver_t rgb_matrix_driver = { .set_color_all = is31fl3218_set_color_all, }; +#elif defined(RGB_MATRIX_IS31FL3236) +const rgb_matrix_driver_t rgb_matrix_driver = { + .init = is31fl3236_init_drivers, + .flush = is31fl3236_flush, + .set_color = is31fl3236_set_color, + .set_color_all = is31fl3236_set_color_all, +}; + #elif defined(RGB_MATRIX_IS31FL3729) const rgb_matrix_driver_t rgb_matrix_driver = { .init = is31fl3729_init_drivers, @@ -143,6 +151,7 @@ rgb_led_t rgb_matrix_ws2812_array[WS2812_LED_COUNT]; bool ws2812_dirty = false; static void init(void) { + ws2812_init(); ws2812_dirty = false; } diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.h b/quantum/rgb_matrix/rgb_matrix_drivers.h index a24cb03a18..1ea5f0817d 100644 --- a/quantum/rgb_matrix/rgb_matrix_drivers.h +++ b/quantum/rgb_matrix/rgb_matrix_drivers.h @@ -7,6 +7,8 @@ #if defined(RGB_MATRIX_AW20216S) # include "aw20216s.h" +#elif defined(RGB_MATRIX_IS31FL3236) +# include "is31fl3236.h" #elif defined(RGB_MATRIX_IS31FL3218) # include "is31fl3218.h" #elif defined(RGB_MATRIX_IS31FL3729) diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c index 530cb04688..62137c020b 100644 --- a/quantum/rgblight/rgblight.c +++ b/quantum/rgblight/rgblight.c @@ -145,6 +145,15 @@ __attribute__((weak)) RGB rgblight_hsv_to_rgb(HSV hsv) { return hsv_to_rgb(hsv); } +void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) { + led1->r = r; + led1->g = g; + led1->b = b; +#ifdef RGBW + led1->w = 0; +#endif +} + void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1) { HSV hsv = {hue, sat, val}; RGB rgb = rgblight_hsv_to_rgb(hsv); @@ -155,15 +164,6 @@ void sethsv(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1) { sethsv_raw(hue, sat, val > RGBLIGHT_LIMIT_VAL ? RGBLIGHT_LIMIT_VAL : val, led1); } -void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) { - led1->r = r; - led1->g = g; - led1->b = b; -#ifdef RGBW - led1->w = 0; -#endif -} - void rgblight_check_config(void) { /* Add some out of bound checks for RGB light config */ @@ -243,6 +243,8 @@ void rgblight_init(void) { rgblight_timer_init(); // setup the timer + rgblight_driver.init(); + if (rgblight_config.enable) { rgblight_mode_noeeprom(rgblight_config.mode); } @@ -1566,4 +1568,4 @@ uint8_t rgblight_velocikey_match_speed(uint8_t minValue, uint8_t maxValue) { return MAX(minValue, maxValue - (maxValue - minValue) * ((float)typing_speed / TYPING_SPEED_MAX_VALUE)); } -#endif
\ No newline at end of file +#endif diff --git a/quantum/rgblight/rgblight.h b/quantum/rgblight/rgblight.h index 9e2b073776..0ed67ff6e3 100644 --- a/quantum/rgblight/rgblight.h +++ b/quantum/rgblight/rgblight.h @@ -240,8 +240,6 @@ void rgblight_unblink_all_but_layer(uint8_t layer); #endif -extern rgb_led_t led[RGBLIGHT_LED_COUNT]; - extern const uint8_t RGBLED_BREATHING_INTERVALS[4] PROGMEM; extern const uint8_t RGBLED_RAINBOW_MOOD_INTERVALS[3] PROGMEM; extern const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[3] PROGMEM; @@ -290,11 +288,6 @@ typedef struct _rgblight_ranges_t { extern rgblight_ranges_t rgblight_ranges; -/* === Utility Functions ===*/ -void sethsv(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1); -void sethsv_raw(uint8_t hue, uint8_t sat, uint8_t val, rgb_led_t *led1); // without RGBLIGHT_LIMIT_VAL check -void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1); - /* === Low level Functions === */ void rgblight_set(void); void rgblight_set_clipping_range(uint8_t start_pos, uint8_t num_leds); diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c index 45b60e1a5f..8902b8f842 100644 --- a/quantum/rgblight/rgblight_drivers.c +++ b/quantum/rgblight/rgblight_drivers.c @@ -7,6 +7,7 @@ # include "ws2812.h" const rgblight_driver_t rgblight_driver = { + .init = ws2812_init, .setleds = ws2812_setleds, }; @@ -14,6 +15,7 @@ const rgblight_driver_t rgblight_driver = { # include "apa102.h" const rgblight_driver_t rgblight_driver = { + .init = apa102_init, .setleds = apa102_setleds, }; diff --git a/quantum/rgblight/rgblight_drivers.h b/quantum/rgblight/rgblight_drivers.h index f7125a6f3d..af28b918e1 100644 --- a/quantum/rgblight/rgblight_drivers.h +++ b/quantum/rgblight/rgblight_drivers.h @@ -7,6 +7,7 @@ #include "color.h" typedef struct { + void (*init)(void); void (*setleds)(rgb_led_t *ledarray, uint16_t number_of_leds); } rgblight_driver_t; diff --git a/quantum/split_common/transactions.c b/quantum/split_common/transactions.c index 33bc9e9f57..decf5e5ede 100644 --- a/quantum/split_common/transactions.c +++ b/quantum/split_common/transactions.c @@ -419,6 +419,10 @@ static bool mods_handlers_master(matrix_row_t master_matrix[], matrix_row_t slav if (!mods_need_sync && new_mods.oneshot_mods != split_shmem->mods.oneshot_mods) { mods_need_sync = true; } + new_mods.oneshot_locked_mods = get_oneshot_locked_mods(); + if (!mods_need_sync && new_mods.oneshot_locked_mods != split_shmem->mods.oneshot_locked_mods) { + mods_need_sync = true; + } # endif // NO_ACTION_ONESHOT bool okay = true; @@ -442,6 +446,7 @@ static void mods_handlers_slave(matrix_row_t master_matrix[], matrix_row_t slave set_weak_mods(mods.weak_mods); # ifndef NO_ACTION_ONESHOT set_oneshot_mods(mods.oneshot_mods); + set_oneshot_locked_mods(mods.oneshot_locked_mods); # endif } diff --git a/quantum/split_common/transport.h b/quantum/split_common/transport.h index 4f6b968fa8..fbd87ca312 100644 --- a/quantum/split_common/transport.h +++ b/quantum/split_common/transport.h @@ -101,6 +101,7 @@ typedef struct _split_mods_sync_t { uint8_t weak_mods; # ifndef NO_ACTION_ONESHOT uint8_t oneshot_mods; + uint8_t oneshot_locked_mods; # endif // NO_ACTION_ONESHOT } split_mods_sync_t; #endif // SPLIT_MODS_ENABLE |