aboutsummaryrefslogtreecommitdiff
path: root/quantum
diff options
context:
space:
mode:
Diffstat (limited to 'quantum')
-rw-r--r--quantum/eeconfig.c4
-rw-r--r--quantum/keymap_extras/keymap_farsi.h171
-rw-r--r--quantum/led.c11
-rw-r--r--quantum/led.h3
-rw-r--r--quantum/painter/qp.h6
-rw-r--r--quantum/painter/qp_internal.c1
-rw-r--r--quantum/painter/rules.mk16
-rw-r--r--quantum/process_keycode/process_rgb_matrix.c101
-rw-r--r--quantum/process_keycode/process_rgb_matrix.h10
-rw-r--r--quantum/process_keycode/process_underglow.c91
-rw-r--r--quantum/process_keycode/process_underglow.h10
-rw-r--r--quantum/rgblight/rgblight_drivers.c8
12 files changed, 417 insertions, 15 deletions
diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
index 40690d6a97..ffbbf43a95 100644
--- a/quantum/eeconfig.c
+++ b/quantum/eeconfig.c
@@ -46,7 +46,7 @@ __attribute__((weak)) void eeconfig_init_kb(void) {
*/
void eeconfig_init_quantum(void) {
#if defined(EEPROM_DRIVER)
- eeprom_driver_erase();
+ eeprom_driver_format(false);
#endif
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER);
@@ -108,7 +108,7 @@ void eeconfig_enable(void) {
*/
void eeconfig_disable(void) {
#if defined(EEPROM_DRIVER)
- eeprom_driver_erase();
+ eeprom_driver_format(false);
#endif
eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_NUMBER_OFF);
}
diff --git a/quantum/keymap_extras/keymap_farsi.h b/quantum/keymap_extras/keymap_farsi.h
new file mode 100644
index 0000000000..d268917513
--- /dev/null
+++ b/quantum/keymap_extras/keymap_farsi.h
@@ -0,0 +1,171 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+#include "keycodes.h"
+// clang-format off
+
+// Aliases
+#define FA_ZWJ KC_GRV // (zero-width joiner)
+#define FA_1A KC_1 // ۱
+#define FA_2A KC_2 // ۲
+#define FA_3A KC_3 // ۳
+#define FA_4A KC_4 // ۴
+#define FA_5A KC_5 // ۵
+#define FA_6A KC_6 // ۶
+#define FA_7A KC_7 // ۷
+#define FA_8A KC_8 // ۸
+#define FA_9A KC_9 // ۹
+#define FA_0A KC_0 // ۰
+#define FA_MINS KC_MINS // -
+#define FA_EQL KC_EQL // =
+#define FA_ZAD KC_Q // ض
+#define FA_SAD KC_W // ص
+#define FA_SE KC_E // ث
+#define FA_QAF KC_R // ق
+#define FA_FE KC_T // ف
+#define FA_GHYN KC_Y // غ
+#define FA_EYN KC_U // ع
+#define FA_HE KC_I // ه
+#define FA_KHE KC_O // خ
+#define FA_HEJ KC_P // ح
+#define FA_JIM KC_LBRC // ج
+#define FA_CHE KC_RBRC // چ
+#define FA_SHIN KC_A // ش
+#define FA_SIN KC_S // س
+#define FA_YE KC_D // ی
+#define FA_BE KC_F // ب
+#define FA_LAM KC_G // ل
+#define FA_ALEF KC_H // ا
+#define FA_TE KC_J // ت
+#define FA_NOON KC_K // ن
+#define FA_MIM KC_L // م
+#define FA_KAF KC_SCLN // ک
+#define FA_GAF KC_QUOT // گ
+#define FA_BSLS KC_BSLS // (backslash)
+#define FA_LT KC_LT // <
+#define FA_ZA KC_Z // ظ
+#define FA_TA KC_X // ط
+#define FA_ZE KC_C // ز
+#define FA_RE KC_V // ر
+#define FA_ZAL KC_B // ذ
+#define FA_DAL KC_N // د
+#define FA_PE KC_M // پ
+#define FA_WAW KC_COMM // و
+#define FA_DOT KC_DOT // .
+#define FA_SLSH KC_SLSH // /
+#define FA_SPC KC_SPC //
+#define FA_DIV S(FA_ZWJ) // ÷
+#define FA_EXLM S(FA_1A) // !
+#define FA_THS S(FA_2A) // ٬
+#define FA_DECS S(FA_3A) // ٫
+#define FA_RIAL S(FA_4A) // ﷼
+#define FA_PRCA S(FA_5A) // ٪
+#define FA_MUL S(FA_6A) // ×
+#define FA_COMA S(FA_7A) // ،
+#define FA_ASTR S(FA_8A) // *
+#define FA_RPRN S(FA_9A) // )
+#define FA_LPRN S(FA_0A) // (
+#define FA_TATW S(FA_MINS) // ـ
+#define FA_PLUS S(FA_EQL) // +
+#define FA_SUK S(FA_ZAD) // ْ
+#define FA_DMTN S(FA_SAD) // ٌ
+#define FA_KSTN S(FA_SE) // ٍ
+#define FA_FTHN S(FA_QAF) // ً
+#define FA_DMM S(FA_FE) // ُ
+#define FA_KAS S(FA_GHYN) // ِ
+#define FA_FAT S(FA_EYN) // َ
+#define FA_TSDD S(FA_HE) //
+#define FA_RBRC S(FA_KHE) // ]
+#define FA_LBRC S(FA_HEJ) // [
+#define FA_RCBR S(FA_JIM) // }
+#define FA_LCBR S(FA_CHE) // {
+#define FA_HMZV S(FA_SHIN) // ؤ
+#define FA_HMZY S(FA_SIN) // ئ
+#define FA_YEA S(FA_YE) // ي
+#define FA_HMZU S(FA_BE) // إ
+#define FA_HMZO S(FA_LAM) // أ
+#define FA_MALF S(FA_ALEF) // آ
+#define FA_TEHM S(FA_TE) // ة
+#define FA_RQOT S(FA_NOON) // »
+#define FA_LQOT S(FA_MIM) // «
+#define FA_COLN S(FA_KAF) // :
+#define FA_SCLA S(FA_GAF) // ؛
+#define FA_GT S(FA_LT) // >
+#define FA_KAFA S(FA_ZA) // ك
+#define FA_MADO S(FA_TA) // ٓ
+#define FA_JEH S(FA_ZE) // ژ
+#define FA_SUPA S(FA_RE) // ٰ
+#define FA_ZWNJ S(FA_ZAL) // (zero-width non-joiner)
+#define FA_HMZA S(FA_DAL) // ٔ
+#define FA_HMZ S(FA_PE) // ء
+#define FA_QSA S(FA_SLSH) // ؟
+#define FA_TILD ALGR(FA_ZWJ) // ~
+#define FA_GRV ALGR(FA_1A) // `
+#define FA_AT ALGR(FA_2A) // @
+#define FA_HASH ALGR(FA_3A) // #
+#define FA_DLR ALGR(FA_4A) // $
+#define FA_PERC ALGR(FA_5A) // %
+#define FA_CIRC ALGR(FA_6A) // ^
+#define FA_AMPR ALGR(FA_7A) // &
+#define FA_BULT ALGR(FA_8A) // •
+#define FA_LRM ALGR(FA_9A) // (left-to-right mark)
+#define FA_RLM ALGR(FA_0A) // (right-to-left mark)
+#define FA_UNDS ALGR(FA_MINS) // _
+#define FA_DMNS ALGR(FA_EQL) // − (dead)
+#define FA_DEG ALGR(FA_ZAD) // °
+#define FA_EURO ALGR(FA_SE) // €
+#define FA_LRO ALGR(FA_HE) // (left-to-right override)
+#define FA_RLO ALGR(FA_KHE) // (right-to-left override)
+#define FA_PDF ALGR(FA_HEJ) // (pop directional formatting)
+#define FA_LRE ALGR(FA_JIM) // (left-to-right embedding)
+#define FA_RLE ALGR(FA_CHE) // (right-to-left embedding)
+#define FA_ALFM ALGR(FA_YE) // ى
+#define FA_ALFW ALGR(FA_ALEF) // ٱ
+#define FA_LORP ALGR(FA_NOON) // ﴾
+#define FA_RORP ALGR(FA_MIM) // ﴿
+#define FA_SCLN ALGR(FA_KAF) // ;
+#define FA_DQT ALGR(FA_GAF) // "
+#define FA_MINA ALGR(FA_BSLS) // -
+#define FA_PIPE ALGR(FA_ZA) // |
+#define FA_SUBA ALGR(FA_RA) // ٖ
+#define FA_HMZB ALGR(FA_DAL) // ء
+#define FA_ELLP ALGR(FA_PE) // …
+#define FA_COMM ALGR(FA_WAW) // ,
+#define FA_QUOT ALGR(FA_DOT) // '
+#define FA_QUES ALGR(FA_SLSH) // ?
+#define FA_1 S(ALGR(FA_1A)) // 1
+#define FA_2 S(ALGR(FA_2A)) // 2
+#define FA_3 S(ALGR(FA_3A)) // 3
+#define FA_4 S(ALGR(FA_4A)) // 4
+#define FA_5 S(ALGR(FA_5A)) // 5
+#define FA_6 S(ALGR(FA_6A)) // 6
+#define FA_7 S(ALGR(FA_7A)) // 7
+#define FA_8 S(ALGR(FA_8A)) // 8
+#define FA_9 S(ALGR(FA_9A)) // 9
+#define FA_0 S(ALGR(FA_0A)) // 0
+#define FA_BRKP S(ALGR(FA_LT)) // ¦
+#define FA_NNBS S(ALGR(FA_SPC)) // (narrow non-breaking space)
+
diff --git a/quantum/led.c b/quantum/led.c
index e2b5985109..aec3edc823 100644
--- a/quantum/led.c
+++ b/quantum/led.c
@@ -56,19 +56,15 @@ static void handle_backlight_caps_lock(led_t led_state) {
#endif
static uint32_t last_led_modification_time = 0;
-uint32_t last_led_activity_time(void) {
+
+uint32_t last_led_activity_time(void) {
return last_led_modification_time;
}
+
uint32_t last_led_activity_elapsed(void) {
return timer_elapsed32(last_led_modification_time);
}
-/** \brief Lock LED set callback - keymap/user level
- *
- * \deprecated Use led_update_user() instead.
- */
-__attribute__((weak)) void led_set_user(uint8_t usb_led) {}
-
/** \brief Lock LED update callback - keymap/user level
*
* \return True if led_update_kb() should run its own code, false otherwise.
@@ -146,7 +142,6 @@ __attribute__((weak)) void led_set(uint8_t usb_led) {
handle_backlight_caps_lock((led_t)usb_led);
#endif
- led_set_user(usb_led);
led_update_kb((led_t)usb_led);
}
diff --git a/quantum/led.h b/quantum/led.h
index b9fad670ae..669e93e194 100644
--- a/quantum/led.h
+++ b/quantum/led.h
@@ -48,9 +48,6 @@ void led_wakeup(void);
void led_task(void);
-/* Deprecated callbacks */
-void led_set_user(uint8_t usb_led);
-
/* Callbacks */
bool led_update_user(led_t led_state);
bool led_update_kb(led_t led_state);
diff --git a/quantum/painter/qp.h b/quantum/painter/qp.h
index 02acbf589a..820c418f43 100644
--- a/quantum/painter/qp.h
+++ b/quantum/painter/qp.h
@@ -539,6 +539,12 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai
# define GC9A01_NUM_DEVICES 0
#endif // QUANTUM_PAINTER_GC9A01_ENABLE
+#ifdef QUANTUM_PAINTER_GC9107_ENABLE
+# include "qp_gc9107.h"
+#else // QUANTUM_PAINTER_GC9107_ENABLE
+# define GC9107_NUM_DEVICES 0
+#endif // QUANTUM_PAINTER_GC9107_ENABLE
+
#ifdef QUANTUM_PAINTER_SSD1351_ENABLE
# include "qp_ssd1351.h"
#else // QUANTUM_PAINTER_SSD1351_ENABLE
diff --git a/quantum/painter/qp_internal.c b/quantum/painter/qp_internal.c
index 1f0f981796..7d4a6430af 100644
--- a/quantum/painter/qp_internal.c
+++ b/quantum/painter/qp_internal.c
@@ -16,6 +16,7 @@ enum {
+ (ST7789_NUM_DEVICES) // ST7789
+ (ST7735_NUM_DEVICES) // ST7735
+ (GC9A01_NUM_DEVICES) // GC9A01
+ + (GC9107_NUM_DEVICES) // GC9107
+ (SSD1351_NUM_DEVICES) // SSD1351
+ (SH1106_NUM_DEVICES) // SH1106
};
diff --git a/quantum/painter/rules.mk b/quantum/painter/rules.mk
index d991a6d742..7b2ab702ee 100644
--- a/quantum/painter/rules.mk
+++ b/quantum/painter/rules.mk
@@ -14,6 +14,7 @@ VALID_QUANTUM_PAINTER_DRIVERS := \
st7735_spi \
st7789_spi \
gc9a01_spi \
+ gc9107_spi \
ssd1351_spi \
sh1106_i2c \
sh1106_spi
@@ -131,10 +132,21 @@ define handle_quantum_painter_driver
OPT_DEFS += -DQUANTUM_PAINTER_GC9A01_ENABLE -DQUANTUM_PAINTER_GC9A01_SPI_ENABLE
COMMON_VPATH += \
$(DRIVER_PATH)/painter/tft_panel \
- $(DRIVER_PATH)/painter/gc9a01
+ $(DRIVER_PATH)/painter/gc9xxx
SRC += \
$(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
- $(DRIVER_PATH)/painter/gc9a01/qp_gc9a01.c
+ $(DRIVER_PATH)/painter/gc9xxx/qp_gc9a01.c
+
+ else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),gc9107_spi)
+ QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
+ QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
+ OPT_DEFS += -DQUANTUM_PAINTER_GC9107_ENABLE -DQUANTUM_PAINTER_GC9107_SPI_ENABLE
+ COMMON_VPATH += \
+ $(DRIVER_PATH)/painter/tft_panel \
+ $(DRIVER_PATH)/painter/gc9xxx
+ SRC += \
+ $(DRIVER_PATH)/painter/tft_panel/qp_tft_panel.c \
+ $(DRIVER_PATH)/painter/gc9xxx/qp_gc9107.c
else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ssd1351_spi)
QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
diff --git a/quantum/process_keycode/process_rgb_matrix.c b/quantum/process_keycode/process_rgb_matrix.c
new file mode 100644
index 0000000000..fd2aa1a0c7
--- /dev/null
+++ b/quantum/process_keycode/process_rgb_matrix.c
@@ -0,0 +1,101 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "process_rgb_matrix.h"
+#include "rgb_matrix.h"
+#include "action_util.h"
+#include "keycodes.h"
+#include "modifiers.h"
+
+bool process_rgb_matrix(uint16_t keycode, keyrecord_t *record) {
+#ifdef RGB_TRIGGER_ON_KEYDOWN
+ if (record->event.pressed) {
+#else
+ if (!record->event.pressed) {
+#endif
+ bool shifted = get_mods() & MOD_MASK_SHIFT;
+ switch (keycode) {
+ case QK_RGB_MATRIX_ON:
+ rgb_matrix_enable();
+ return false;
+ case QK_RGB_MATRIX_OFF:
+ rgb_matrix_disable();
+ return false;
+ case QK_RGB_MATRIX_TOGGLE:
+ rgb_matrix_toggle();
+ return false;
+ case QK_RGB_MATRIX_MODE_NEXT:
+ if (shifted) {
+ rgb_matrix_step_reverse();
+ } else {
+ rgb_matrix_step();
+ }
+ return false;
+ case QK_RGB_MATRIX_MODE_PREVIOUS:
+ if (shifted) {
+ rgb_matrix_step();
+ } else {
+ rgb_matrix_step_reverse();
+ }
+ return false;
+ case QK_RGB_MATRIX_HUE_UP:
+ if (shifted) {
+ rgb_matrix_decrease_hue();
+ } else {
+ rgb_matrix_increase_hue();
+ }
+ return false;
+ case QK_RGB_MATRIX_HUE_DOWN:
+ if (shifted) {
+ rgb_matrix_increase_hue();
+ } else {
+ rgb_matrix_decrease_hue();
+ }
+ return false;
+ case QK_RGB_MATRIX_SATURATION_UP:
+ if (shifted) {
+ rgb_matrix_decrease_sat();
+ } else {
+ rgb_matrix_increase_sat();
+ }
+ return false;
+ case QK_RGB_MATRIX_SATURATION_DOWN:
+ if (shifted) {
+ rgb_matrix_increase_sat();
+ } else {
+ rgb_matrix_decrease_sat();
+ }
+ return false;
+ case QK_RGB_MATRIX_VALUE_UP:
+ if (shifted) {
+ rgb_matrix_decrease_val();
+ } else {
+ rgb_matrix_increase_val();
+ }
+ return false;
+ case QK_RGB_MATRIX_VALUE_DOWN:
+ if (shifted) {
+ rgb_matrix_increase_val();
+ } else {
+ rgb_matrix_decrease_val();
+ }
+ return false;
+ case QK_RGB_MATRIX_SPEED_UP:
+ if (shifted) {
+ rgb_matrix_decrease_speed();
+ } else {
+ rgb_matrix_increase_speed();
+ }
+ return false;
+ case QK_RGB_MATRIX_SPEED_DOWN:
+ if (shifted) {
+ rgb_matrix_increase_speed();
+ } else {
+ rgb_matrix_decrease_speed();
+ }
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/quantum/process_keycode/process_rgb_matrix.h b/quantum/process_keycode/process_rgb_matrix.h
new file mode 100644
index 0000000000..a02bf57b5f
--- /dev/null
+++ b/quantum/process_keycode/process_rgb_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_rgb_matrix(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/process_keycode/process_underglow.c b/quantum/process_keycode/process_underglow.c
new file mode 100644
index 0000000000..779672ac07
--- /dev/null
+++ b/quantum/process_keycode/process_underglow.c
@@ -0,0 +1,91 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "process_underglow.h"
+#include "rgblight.h"
+#include "action_util.h"
+#include "keycodes.h"
+#include "modifiers.h"
+
+bool process_underglow(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
+ switch (keycode) {
+ case QK_UNDERGLOW_TOGGLE:
+ rgblight_toggle();
+ return false;
+ case QK_UNDERGLOW_MODE_NEXT:
+ if (shifted) {
+ rgblight_step_reverse();
+ } else {
+ rgblight_step();
+ }
+ return false;
+ case QK_UNDERGLOW_MODE_PREVIOUS:
+ if (shifted) {
+ rgblight_step();
+ } else {
+ rgblight_step_reverse();
+ }
+ return false;
+ case QK_UNDERGLOW_HUE_UP:
+ if (shifted) {
+ rgblight_decrease_hue();
+ } else {
+ rgblight_increase_hue();
+ }
+ return false;
+ case QK_UNDERGLOW_HUE_DOWN:
+ if (shifted) {
+ rgblight_increase_hue();
+ } else {
+ rgblight_decrease_hue();
+ }
+ return false;
+ case QK_UNDERGLOW_SATURATION_UP:
+ if (shifted) {
+ rgblight_decrease_sat();
+ } else {
+ rgblight_increase_sat();
+ }
+ return false;
+ case QK_UNDERGLOW_SATURATION_DOWN:
+ if (shifted) {
+ rgblight_increase_sat();
+ } else {
+ rgblight_decrease_sat();
+ }
+ return false;
+ case QK_UNDERGLOW_VALUE_UP:
+ if (shifted) {
+ rgblight_decrease_val();
+ } else {
+ rgblight_increase_val();
+ }
+ return false;
+ case QK_UNDERGLOW_VALUE_DOWN:
+ if (shifted) {
+ rgblight_increase_hue();
+ } else {
+ rgblight_decrease_hue();
+ }
+ return false;
+ case QK_UNDERGLOW_SPEED_UP:
+ if (shifted) {
+ rgblight_decrease_speed();
+ } else {
+ rgblight_increase_speed();
+ }
+ return false;
+ case QK_UNDERGLOW_SPEED_DOWN:
+ if (shifted) {
+ rgblight_increase_speed();
+ } else {
+ rgblight_decrease_speed();
+ }
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/quantum/process_keycode/process_underglow.h b/quantum/process_keycode/process_underglow.h
new file mode 100644
index 0000000000..b409cafbb8
--- /dev/null
+++ b/quantum/process_keycode/process_underglow.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_underglow(uint16_t keycode, keyrecord_t *record);
diff --git a/quantum/rgblight/rgblight_drivers.c b/quantum/rgblight/rgblight_drivers.c
index 8902b8f842..76e9031aec 100644
--- a/quantum/rgblight/rgblight_drivers.c
+++ b/quantum/rgblight/rgblight_drivers.c
@@ -14,6 +14,14 @@ const rgblight_driver_t rgblight_driver = {
#elif defined(RGBLIGHT_APA102)
# include "apa102.h"
+// Temporary shim
+static void apa102_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) {
+ for (uint16_t i = 0; i < number_of_leds; i++) {
+ apa102_set_color(i, ledarray[i].r, ledarray[i].g, ledarray[i].b);
+ }
+ apa102_flush();
+}
+
const rgblight_driver_t rgblight_driver = {
.init = apa102_init,
.setleds = apa102_setleds,