aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/action.c2
-rw-r--r--quantum/audio/audio.c27
-rw-r--r--quantum/audio/audio.h6
-rw-r--r--quantum/eeconfig.c6
-rw-r--r--quantum/eeconfig.h64
-rw-r--r--quantum/keyboard.c4
-rw-r--r--quantum/keycodes.h20
-rw-r--r--quantum/led_matrix/led_matrix.c2
-rw-r--r--quantum/led_matrix/led_matrix.h2
-rw-r--r--quantum/led_matrix/led_matrix_drivers.c8
-rw-r--r--quantum/led_matrix/led_matrix_drivers.h2
-rw-r--r--quantum/main.c35
-rw-r--r--quantum/pointing_device/pointing_device_auto_mouse.c20
-rw-r--r--quantum/pointing_device/pointing_device_auto_mouse.h4
-rw-r--r--quantum/process_keycode/process_backlight.c30
-rw-r--r--quantum/process_keycode/process_led_matrix.c32
-rw-r--r--quantum/process_keycode/process_led_matrix.h10
-rw-r--r--quantum/quantum.c11
-rw-r--r--quantum/quantum_keycodes_legacy.h53
-rw-r--r--quantum/rgb_matrix/rgb_matrix.c2
-rw-r--r--quantum/rgb_matrix/rgb_matrix.h2
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.c9
-rw-r--r--quantum/rgb_matrix/rgb_matrix_drivers.h2
-rw-r--r--quantum/rgblight/rgblight.c22
-rw-r--r--quantum/rgblight/rgblight.h7
-rw-r--r--quantum/rgblight/rgblight_drivers.c2
-rw-r--r--quantum/rgblight/rgblight_drivers.h1
-rw-r--r--quantum/split_common/transactions.c5
-rw-r--r--quantum/split_common/transport.h1
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