Merge remote-tracking branch 'origin/halcyon' into halcyon-elora-rev2

This commit is contained in:
VeyPatch 2024-12-10 16:14:27 +01:00
commit a6d8b455a7
21 changed files with 116 additions and 99 deletions

View file

@ -12,12 +12,7 @@ If the keyboard has not been merged yet to the main branch of QMK you may need t
1. Fork this repository 1. Fork this repository
1. Clone your fork to your local machine 1. Clone your fork to your local machine
1. Enable userspace in QMK config using `qmk config user.overlay_dir="$(realpath qmk_userspace)"` 1. Enable userspace in QMK config using `qmk config user.overlay_dir="$(realpath qmk_userspace)"`
1. Add a new keymap for your board using `qmk new-keymap` 1. Add a new keymap for your board by copy, pasting and renaming the `default_hlc` keymap within the `keyboards/splitkb/halcyon/$KB$/keymaps` folder.
* This will create a new keymap in the `keyboards` directory, in the same location that would normally be used in the main QMK repository. For example, if you wanted to add a keymap for the Halcyon Kyria, it will be created in `keyboards/splitkb/halcyon/kyria/<your keymap name>`
* You can also create a new keymap using `qmk new-keymap -kb <your_keyboard> -km <your_keymap>`
* Alternatively, add your keymap manually by placing it in the location specified above. This may be easier if you want to copy the default keymap and change it to your liking.
* `layouts/<layout name>/<your keymap name>/keymap.*` is also supported if you prefer the layout system but has not been tested with our halcyon modules.
1. Create and add `USER_NAME := halcyon_modules` to your keymaps `rules.mk`
1. Add your keymap(s) to the build by running `qmk userspace-add -kb <your_keyboard> -km <your_keymap> -e <halcyon_module>=1 -e TARGET=<filename>`. 1. Add your keymap(s) to the build by running `qmk userspace-add -kb <your_keyboard> -km <your_keymap> -e <halcyon_module>=1 -e TARGET=<filename>`.
* This will automatically update your `qmk.json` file * This will automatically update your `qmk.json` file
* Corresponding `qmk userspace-remove -kb <your_keyboard> -km <your_keymap> -e <halcyon_module>=1 -e TARGET=<filename>`. * Corresponding `qmk userspace-remove -kb <your_keyboard> -km <your_keymap> -e <halcyon_module>=1 -e TARGET=<filename>`.
@ -61,8 +56,8 @@ If you wish to point GitHub actions to a different repository, a different branc
To override the `build` job, you can change the following parameters to use a different QMK repository or branch, this can be useful if you want to use a different QMK or vial branch for example: To override the `build` job, you can change the following parameters to use a different QMK repository or branch, this can be useful if you want to use a different QMK or vial branch for example:
``` ```
with: with:
qmk_repo: splitkb/qmk_firmware qmk_repo: qmk/qmk_firmware
qmk_ref: halcyon-kyria qmk_ref: master
``` ```
If you wish to manually manage `qmk_firmware` using git within the userspace repository, you can add `qmk_firmware` as a submodule in the userspace directory instead. GitHub Actions will automatically use the submodule at the pinned revision if it exists, otherwise it will use the default latest revision of `qmk_firmware` from the main repository. This will not work when using vial. If you wish to manually manage `qmk_firmware` using git within the userspace repository, you can add `qmk_firmware` as a submodule in the userspace directory instead. GitHub Actions will automatically use the submodule at the pinned revision if it exists, otherwise it will use the default latest revision of `qmk_firmware` from the main repository. This will not work when using vial.

View file

@ -2,7 +2,7 @@
#include "hlc_tft_display/hlc_tft_display.h" #include "hlc_tft_display/hlc_tft_display.h"
// Include the QP api // Include the QP api
#include "qp.h" #include "qp_surface.h"
// Add a font, this font is generated using the QP CLI tools (https://docs.qmk.fm/quantum_painter#quantum-painter-cli) // Add a font, this font is generated using the QP CLI tools (https://docs.qmk.fm/quantum_painter#quantum-painter-cli)
#include "graphics/thintel15.qff.h" #include "graphics/thintel15.qff.h"
@ -10,6 +10,10 @@
// Initialize the font // Initialize the font
static painter_font_handle_t thintel; static painter_font_handle_t thintel;
// Setup painter devices
painter_device_t lcd;
painter_device_t lcd_surface;
// This function is ran on bootup of the keyboard // This function is ran on bootup of the keyboard
bool module_post_init_user(void) { bool module_post_init_user(void) {
// Load the font in to memory. // Load the font in to memory.
@ -55,12 +59,12 @@ bool display_module_housekeeping_task_user(bool second_display) {
// Make sure that the second display loads correctly, sometimes it takes a little while for the keyboard to know it has a second display. // Make sure that the second display loads correctly, sometimes it takes a little while for the keyboard to know it has a second display.
// So we reset the state and make it run again until the secondary display is drawn correctly // So we reset the state and make it run again until the secondary display is drawn correctly
if(second_display && !second_display_set) { if(second_display && !second_display_set) {
display_set = false; display_set = false;
} }
// Move surface to lcd, this actually writes the content to the physical display // Move surface to lcd, this actually writes the content to the physical display
qp_surface_draw(lcd_surface, lcd, 0, 0, 0); qp_surface_draw(lcd_surface, lcd, 0, 0, 0);
return false; return false;
} }

View file

@ -2,4 +2,4 @@
SRC += display.c SRC += display.c
# Include the font file # Include the font file
SRC += graphics/thintel15.qff.c SRC += graphics/thintel15.qff.c

View file

@ -204,7 +204,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/ */
[_ADJUST] = LAYOUT_split_3x6_5_hlc( [_ADJUST] = LAYOUT_split_3x6_5_hlc(
_______, _______, _______, QWERTY , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QWERTY , _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, DVORAK , _______, _______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD, _______, _______, _______, _______, DVORAK , _______, _______, RGB_TOG, RGB_SAI, RGB_HUI, RGB_VAI, RGB_MOD , _______,
_______, _______, _______, COLEMAK, _______, _______,_______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD, _______, _______, _______, _______, COLEMAK, _______, _______,_______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, RGB_RMOD, _______,
_______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
@ -271,4 +271,4 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
} }
return false; return false;
} }
#endif #endif

View file

@ -1,2 +1,2 @@
# This adds module functionality to your keyboard (files found in users/halcyon_modules) # This adds module functionality to your keyboard (files found in users/halcyon_modules)
USER_NAME := halcyon_modules USER_NAME := halcyon_modules

View file

@ -14,4 +14,4 @@
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS #define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#define RGB_MATRIX_KEYPRESSES #define RGB_MATRIX_KEYPRESSES
#define DYNAMIC_KEYMAP_LAYER_COUNT 8 #define DYNAMIC_KEYMAP_LAYER_COUNT 8

View file

@ -4,13 +4,55 @@
"version": 1, "version": 1,
"layout": "LAYOUT_split_3x6_5_hlc", "layout": "LAYOUT_split_3x6_5_hlc",
"layers": [ "layers": [
["KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSPC", "MT(MOD_LCTL, KC_ESC)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "MT(MOD_RCTL, KC_QUOTE)", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_LBRC", "KC_CAPS", "MO(5)", "KC_RBRC", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "MO(6)", "KC_LGUI", "MT(MOD_LALT, KC_ENT)", "KC_SPC", "MO(3)", "MO(4)", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_APP", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], [
["KC_TAB", "KC_QUOTE", "KC_COMM", "KC_DOT", "KC_P", "KC_Y", "KC_F", "KC_G", "KC_C", "KC_R", "KC_L", "KC_BSPC", "MT(MOD_LCTL, KC_ESC)", "KC_A", "KC_O", "KC_E", "KC_U", "KC_I", "KC_D", "KC_H", "KC_T", "KC_N", "KC_S", "MT(MOD_RCTL, KC_MINUS)", "KC_LSFT", "KC_SCLN", "KC_Q", "KC_J", "KC_K", "KC_X", "KC_LBRC", "KC_CAPS", "MO(5)", "KC_RBRC", "KC_B", "KC_M", "KC_W", "KC_V", "KC_Z", "KC_RSFT", "MO(6)", "KC_LGUI", "MT(MOD_LALT, KC_ENT)", "KC_SPC", "MO(3)", "MO(4)", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_APP", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], "KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" , "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_BSPC" ,
["KC_TAB", "KC_Q", "KC_W", "KC_F", "KC_P", "KC_B", "KC_J", "KC_L", "KC_U", "KC_Y", "KC_SCLN", "KC_BSPC", "MT(MOD_LCTL, KC_ESC)", "KC_A", "KC_R", "KC_S", "KC_T", "KC_G", "KC_M", "KC_N", "KC_E", "KC_I", "KC_O", "MT(MOD_RCTL, KC_QUOTE)", "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_D", "KC_V", "KC_LBRC", "KC_CAPS", "MO(5)", "KC_RBRC", "KC_K", "KC_H", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "MO(6)", "KC_LGUI", "MT(MOD_LALT, KC_ENT)", "KC_SPC", "MO(3)", "MO(4)", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_APP", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], "MT(MOD_LCTL, KC_ESC)" , "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" , "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN" , "MT(MOD_RCTL, KC_QUOTE)" ,
["KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_HOME", "KC_UP", "KC_END", "KC_VOLU", "KC_DEL", "KC_TRNS", "KC_LGUI", "KC_LALT", "KC_LCTL", "KC_LSFT", "KC_TRNS", "KC_PGDN", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_VOLD", "KC_INS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_SCRL", "KC_TRNS", "KC_TRNS", "KC_PAUSE", "KC_MPRV", "KC_MPLY", "KC_MNXT", "KC_MUTE", "KC_PSCR", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], "KC_LSFT" , "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_LBRC" , "KC_CAPS" , "MO(5)" , "KC_RBRC" , "KC_N" , "KC_M" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT" ,
["KC_GRV", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_EQL", "KC_TILD", "KC_EXLM", "KC_AT", "KC_HASH", "KC_DLR", "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "KC_PLUS", "KC_PIPE", "KC_BSLS", "KC_COLN", "KC_SCLN", "KC_MINS", "KC_LBRC", "KC_LCBR", "KC_TRNS", "KC_TRNS", "KC_RCBR", "KC_RBRC", "KC_UNDS", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_QUES", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], "MO(6)" , "KC_LGUI" , "MT(MOD_LALT, KC_ENT)" , "KC_SPC" , "MO(3)" , "MO(4)" , "KC_SPC" , "KC_RALT" , "KC_RGUI" , "KC_APP" ,
["KC_TRNS", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_TRNS", "KC_TRNS", "KC_RSFT", "KC_RCTL", "KC_LALT", "KC_RGUI", "KC_TRNS", "KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"], "KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
["KC_TRNS", "KC_TRNS", "KC_TRNS", "DF(0)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "DF(1)", "KC_TRNS", "KC_TRNS", "RGB_TOG", "RGB_SAI", "RGB_HUI", "RGB_VAI", "RGB_MOD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "DF(2)", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "RGB_SAD", "RGB_HUD", "RGB_VAD", "RGB_RMOD", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO", "KC_MUTE", "KC_NO", "KC_NO", "KC_NO", "KC_NO"] ],
[
"KC_TAB" , "KC_QUOTE", "KC_COMM" , "KC_DOT" , "KC_P" , "KC_Y" , "KC_F" , "KC_G" , "KC_C" , "KC_R" , "KC_L" , "KC_BSPC" ,
"MT(MOD_LCTL, KC_ESC)" , "KC_A" , "KC_O" , "KC_E" , "KC_U" , "KC_I" , "KC_D" , "KC_H" , "KC_T" , "KC_N" , "KC_S" , "MT(MOD_RCTL, KC_MINUS)" ,
"KC_LSFT" , "KC_SCLN" , "KC_Q" , "KC_J" , "KC_K" , "KC_X" , "KC_LBRC" , "KC_CAPS" , "MO(5)" , "KC_RBRC" , "KC_B" , "KC_M" , "KC_W" , "KC_V" , "KC_Z" , "KC_RSFT" ,
"MO(6)" , "KC_LGUI" , "MT(MOD_LALT, KC_ENT)" , "KC_SPC" , "MO(3)" , "MO(4)" , "KC_SPC" , "KC_RALT" , "KC_RGUI" , "KC_APP" ,
"KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
],
[
"KC_TAB" , "KC_Q" , "KC_W" , "KC_F" , "KC_P" , "KC_B" , "KC_J" , "KC_L" , "KC_U" , "KC_Y" , "KC_SCLN" , "KC_BSPC" ,
"MT(MOD_LCTL, KC_ESC)" , "KC_A" , "KC_R" , "KC_S" , "KC_T" , "KC_G" , "KC_M" , "KC_N" , "KC_E" , "KC_I" , "KC_O" , "MT(MOD_RCTL, KC_QUOTE)" ,
"KC_LSFT" , "KC_Z" , "KC_X" , "KC_C" , "KC_D" , "KC_V" , "KC_LBRC" , "KC_CAPS" , "MO(5)" , "KC_RBRC" , "KC_K" , "KC_H" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_RSFT" ,
"MO(6)" , "KC_LGUI" , "MT(MOD_LALT, KC_ENT)" , "KC_SPC" , "MO(3)" , "MO(4)" , "KC_SPC" , "KC_RALT" , "KC_RGUI" , "KC_APP" ,
"KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_MUTE" , "KC_NO" , "KC_NO" , "KC_NO" , "KC_NO"
],
[
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "KC_PGUP" , "KC_HOME" , "KC_UP" , "KC_END" , "KC_VOLU" , "KC_DEL" ,
"_______" , "KC_LGUI" , "KC_LALT" , "KC_LCTL" , "KC_LSFT" , "_______" , "KC_PGDN" , "KC_LEFT" , "KC_DOWN" , "KC_RGHT" , "KC_VOLD" , "KC_INS" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "KC_SCRL" , "_______" , "_______" , "KC_PAUSE", "KC_MPRV" , "KC_MPLY" , "KC_MNXT" , "KC_MUTE" , "KC_PSCR" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
],
[
"KC_GRV" , "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" , "KC_6" , "KC_7" , "KC_8" , "KC_9" , "KC_0" , "KC_EQL" ,
"KC_TILD" , "KC_EXLM" , "KC_AT" , "KC_HASH" , "KC_DLR" , "KC_PERC" , "KC_CIRC" , "KC_AMPR" , "KC_ASTR" , "KC_LPRN" , "KC_RPRN" , "KC_PLUS" ,
"KC_PIPE" , "KC_BSLS" , "KC_COLN" , "KC_SCLN" , "KC_MINS" , "KC_LBRC" , "KC_LCBR" , "_______" , "_______" , "KC_RCBR" , "KC_RBRC" , "KC_UNDS" , "KC_COMM" , "KC_DOT" , "KC_SLSH" , "KC_QUES" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
],
[
"_______" , "KC_F9" , "KC_F10" , "KC_F11" , "KC_F12" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "KC_F5" , "KC_F6" , "KC_F7" , "KC_F8" , "_______" , "_______" , "KC_RSFT" , "KC_RCTL" , "KC_LALT" , "KC_RGUI" , "_______" ,
"_______" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
],
[
"_______" , "_______" , "_______" , "DF(0)" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "DF(1)" , "_______" , "_______" , "RGB_TOG" , "RGB_SAI" , "RGB_HUI" , "RGB_VAI" , "RGB_MOD" , "_______" ,
"_______" , "_______" , "_______" , "DF(2)" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "RGB_SAD" , "RGB_HUD" , "RGB_VAD" , "RGB_RMOD", "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" ,
"_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______" , "_______"
]
], ],
"encoders": [ "encoders": [
[{"ccw": "KC_VOLD", "cw": "KC_VOLU"}, {"ccw": "KC_VOLD", "cw": "KC_VOLU"}, {"ccw": "KC_PGUP", "cw": "KC_PGDN"} ,{"ccw": "KC_PGUP", "cw": "KC_PGDN"}], [{"ccw": "KC_VOLD", "cw": "KC_VOLU"}, {"ccw": "KC_VOLD", "cw": "KC_VOLU"}, {"ccw": "KC_PGUP", "cw": "KC_PGDN"} ,{"ccw": "KC_PGUP", "cw": "KC_PGDN"}],

View file

@ -5,4 +5,4 @@ VIALRGB_ENABLE = yes
ENCODER_MAP_ENABLE = yes ENCODER_MAP_ENABLE = yes
# This adds module functionality to your keyboard (files found in users/halcyon_modules) # This adds module functionality to your keyboard (files found in users/halcyon_modules)
USER_NAME := halcyon_modules USER_NAME := halcyon_modules

View file

@ -11,18 +11,18 @@
#define RP_PWM_USE_PWM5 TRUE #define RP_PWM_USE_PWM5 TRUE
#define HAL_USE_PWM TRUE #define HAL_USE_PWM TRUE
#define HAL_USE_SPI TRUE
#define SPLIT_POINTING_ENABLE #define SPLIT_POINTING_ENABLE
#define POINTING_DEVICE_COMBINED #define POINTING_DEVICE_COMBINED
#define HLC_BACKLIGHT_TIMEOUT 120000 #define HLC_BACKLIGHT_TIMEOUT 120000
#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_LEVELS 10
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
#if !defined(HLC_TFT_DISPLAY) #if !defined(HLC_TFT_DISPLAY)
#define BACKLIGHT_PIN NO_PIN #define BACKLIGHT_PIN NO_PIN
#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_LEVELS 10
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
#endif #endif
#if !defined(HLC_CIRQUE_TRACKPAD) #if !defined(HLC_CIRQUE_TRACKPAD)
@ -66,7 +66,7 @@
} }
#endif #endif
// Elora // Elora
#if PRODUCT_ID == 0xA392 #if PRODUCT_ID == 0xA392
#undef ENCODER_A_PINS #undef ENCODER_A_PINS
#define ENCODER_A_PINS { GP22, HLC_ENCODER_A } #define ENCODER_A_PINS { GP22, HLC_ENCODER_A }
@ -88,4 +88,4 @@
{k10A, k10B, k10C, k10D, k10E, k10F, KC_NO}, \ {k10A, k10B, k10C, k10D, k10E, k10F, KC_NO}, \
{k11A, k11B, k11C, k11D, k11E, KC_NO, KC_NO} \ {k11A, k11B, k11C, k11D, k11E, KC_NO, KC_NO} \
} }
#endif #endif

View file

@ -1,13 +1,9 @@
// Copyright 2024 splitkb.com (support@splitkb.com) // Copyright 2024 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "halcyon.h" #include "halcyon.h"
#include "transactions.h" #include "transactions.h"
#include "print.h"
#include "split_util.h" #include "split_util.h"
#include "pointing_device.h"
__attribute__((weak)) bool module_post_init_kb(void) { __attribute__((weak)) bool module_post_init_kb(void) {
return module_post_init_user(); return module_post_init_user();
@ -29,6 +25,7 @@ __attribute__((weak)) bool display_module_housekeeping_task_user(bool second_dis
return true; return true;
} }
module_t module_master;
module_t module; module_t module;
#ifdef HLC_NONE #ifdef HLC_NONE
module_t module = hlc_none; module_t module = hlc_none;
@ -49,6 +46,9 @@ bool backlight_off = false;
void backlight_wakeup(void) { void backlight_wakeup(void) {
backlight_off = false; backlight_off = false;
backlight_enable(); backlight_enable();
if (get_backlight_level() == 0) {
backlight_level(BACKLIGHT_LEVELS);
}
} }
// Timeout handling // Timeout handling
@ -79,6 +79,8 @@ void housekeeping_task_kb(void) {
static bool synced = 0; static bool synced = 0;
if(is_transport_connected() && synced == 0) { if(is_transport_connected() && synced == 0) {
transaction_rpc_send(MODULE_SYNC, sizeof(module), &module); // Sync to slave transaction_rpc_send(MODULE_SYNC, sizeof(module), &module); // Sync to slave
// Good moment to make sure the backlight wakes up after boot for both halves
backlight_wakeup();
synced = 1; synced = 1;
} }
display_module_housekeeping_task_kb(false); // Is master so can never be the second display display_module_housekeeping_task_kb(false); // Is master so can never be the second display
@ -90,7 +92,7 @@ void housekeeping_task_kb(void) {
display_module_housekeeping_task_kb(false); // Otherwise be the main display display_module_housekeeping_task_kb(false); // Otherwise be the main display
} }
} }
// Backlight feature // Backlight feature
if (backlight_off && last_input_activity_elapsed() <= HLC_BACKLIGHT_TIMEOUT) { if (backlight_off && last_input_activity_elapsed() <= HLC_BACKLIGHT_TIMEOUT) {
backlight_wakeup(); backlight_wakeup();
@ -194,4 +196,4 @@ const matrix_row_t matrix_mask[] = {
0b0011111, 0b0011111,
}; };
#endif #endif
#endif #endif

View file

@ -11,11 +11,11 @@ typedef enum module {
hlc_tft_display hlc_tft_display
} module_t; } module_t;
module_t module_master; extern module_t module_master;
bool module_post_init_kb(void); bool module_post_init_kb(void);
bool module_housekeeping_task_kb(void); bool module_housekeeping_task_kb(void);
bool display_module_housekeeping_task_kb(bool second_display); bool display_module_housekeeping_task_kb(bool second_display);
bool module_post_init_user(void); bool module_post_init_user(void);
bool module_housekeeping_task_user(void); bool module_housekeeping_task_user(void);
bool display_module_housekeeping_task_user(bool second_display); bool display_module_housekeeping_task_user(bool second_display);

View file

@ -15,4 +15,4 @@
#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE #define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
#define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE #define CIRQUE_PINNACLE_POSITION_MODE CIRQUE_PINNACLE_ABSOLUTE_MODE
#define CIRQUE_PINNACLE_TAP_ENABLE #define CIRQUE_PINNACLE_TAP_ENABLE
#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE #define POINTING_DEVICE_GESTURES_SCROLL_ENABLE

View file

@ -1,7 +1,3 @@
CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
SPI_DRIVER_REQUIRED = yes CONFIG_H += $(CURRENT_DIR)/config.h
POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
CONFIG_H += $(CURRENT_DIR)/config.h

View file

@ -9,4 +9,4 @@
#define HLC_ENCODER_BUTTON GP16 #define HLC_ENCODER_BUTTON GP16
#define HLC_ENCODER_A GP27 #define HLC_ENCODER_A GP27
#define HLC_ENCODER_B GP26 #define HLC_ENCODER_B GP26

View file

@ -1,11 +1,7 @@
// Copyright 2024 splitkb.com (support@splitkb.com) // Copyright 2024 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "util.h"
#include "split_util.h" #include "split_util.h"
#include "matrix.h"
#include "debounce.h"
#include "atomic_util.h" #include "atomic_util.h"
#ifdef SPLIT_KEYBOARD #ifdef SPLIT_KEYBOARD
@ -128,7 +124,7 @@ void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
// Populate the matrix row with the state of the col pin // Populate the matrix row with the state of the col pin
current_row_value |= pin_state ? 0 : row_shifter; current_row_value |= pin_state ? 0 : row_shifter;
} }
} }
// ↑↑↑ THIS HAS BEEN ADDED/CHANGED // ↑↑↑ THIS HAS BEEN ADDED/CHANGED
// Unselect row // Unselect row
@ -137,4 +133,4 @@ void matrix_read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
// Update the matrix // Update the matrix
current_matrix[current_row] = current_row_value; current_matrix[current_row] = current_row_value;
} }

View file

@ -1,4 +1,4 @@
CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
SRC += $(CURRENT_DIR)/hlc_encoder.c SRC += $(CURRENT_DIR)/hlc_encoder.c
CONFIG_H += $(CURRENT_DIR)/config.h CONFIG_H += $(CURRENT_DIR)/config.h

View file

@ -29,9 +29,6 @@
// Backlight configuration // Backlight configuration
#define BACKLIGHT_PIN GP27 #define BACKLIGHT_PIN GP27
#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_LEVELS 10
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_B
// Timeout configuration // Timeout configuration
#define QUANTUM_PAINTER_DISPLAY_TIMEOUT HLC_BACKLIGHT_TIMEOUT #define QUANTUM_PAINTER_DISPLAY_TIMEOUT HLC_BACKLIGHT_TIMEOUT

View file

@ -1,17 +1,10 @@
// Copyright 2024 splitkb.com (support@splitkb.com) // Copyright 2024 splitkb.com (support@splitkb.com)
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "halcyon.h" #include "halcyon.h"
#include "hlc_tft_display.h" #include "hlc_tft_display.h"
#include "config.h"
#include "qp.h"
#include "qp_comms.h"
#include "qp_surface.h" #include "qp_surface.h"
#include "qp_st77xx_opcodes.h"
#include "split_util.h"
#include <time.h> #include <time.h>
// Fonts mono2 // Fonts mono2
@ -44,6 +37,9 @@ static uint16_t lcd_surface_fb[135*240];
int color_value = 0; int color_value = 0;
painter_device_t lcd;
painter_device_t lcd_surface;
led_t last_led_usb_state = {0}; led_t last_led_usb_state = {0};
layer_state_t last_layer_state = {0}; layer_state_t last_layer_state = {0};
@ -88,7 +84,7 @@ void draw_grid() {
// Draw the filled cell inside the outline if it's alive // Draw the filled cell inside the outline if it's alive
if (grid[y][x]) { if (grid[y][x]) {
switch (color_value) { switch (color_value) {
case 0: case 0:
qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_0, true); qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_0, true);
break; break;
case 1: case 1:
@ -100,7 +96,7 @@ void draw_grid() {
case 3: case 3:
qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_3, true); qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_3, true);
break; break;
case 4: case 4:
qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_4, true); qp_rect(lcd_surface, left + OUTLINE_SIZE, top + OUTLINE_SIZE, right - OUTLINE_SIZE, bottom - OUTLINE_SIZE, HSV_LAYER_4, true);
break; break;
case 5: case 5:
@ -195,10 +191,10 @@ void update_display(void) {
last_led_usb_state = led_usb_state; last_led_usb_state = led_usb_state;
first_run_led = true; first_run_led = true;
} }
if(last_layer_state != layer_state || first_run_layer == false) { if(last_layer_state != layer_state || first_run_layer == false) {
switch (get_highest_layer(layer_state|default_layer_state)) { switch (get_highest_layer(layer_state|default_layer_state)) {
case 0: case 0:
layer_number = qp_load_image_mem(gfx_0); layer_number = qp_load_image_mem(gfx_0);
qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_0, HSV_BLACK); qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_0, HSV_BLACK);
break; break;
@ -214,7 +210,7 @@ void update_display(void) {
layer_number = qp_load_image_mem(gfx_3); layer_number = qp_load_image_mem(gfx_3);
qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_3, HSV_BLACK); qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_3, HSV_BLACK);
break; break;
case 4: case 4:
layer_number = qp_load_image_mem(gfx_4); layer_number = qp_load_image_mem(gfx_4);
qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_4, HSV_BLACK); qp_drawimage_recolor(lcd_surface, 5, 5, layer_number, HSV_LAYER_4, HSV_BLACK);
break; break;
@ -241,7 +237,7 @@ void update_display(void) {
} }
// Quantum function // Quantum function
void suspend_power_down_kb(void) { void suspend_power_down_kb(void) {
qp_power(lcd, false); qp_power(lcd, false);
suspend_power_down_user(); suspend_power_down_user();
} }
@ -280,7 +276,7 @@ bool module_post_init_kb(void) {
} }
// Called from halcyon.c // Called from halcyon.c
bool display_module_housekeeping_task_kb(bool second_display) { bool display_module_housekeeping_task_kb(bool second_display) {
if(!display_module_housekeeping_task_user(second_display)) { return false; } if(!display_module_housekeeping_task_user(second_display)) { return false; }
if(second_display) { if(second_display) {
@ -295,7 +291,7 @@ bool display_module_housekeeping_task_kb(bool second_display) {
second_display_set = true; second_display_set = true;
} }
if (timer_elapsed32(last_draw) >= 100) { // Throttle to 10 fps if (timer_elapsed32(last_draw) >= 100) { // Throttle to 10 fps
draw_grid(); draw_grid();
update_grid(); update_grid();
@ -318,4 +314,4 @@ bool display_module_housekeeping_task_kb(bool second_display) {
qp_surface_draw(lcd_surface, lcd, 0, 0, 0); qp_surface_draw(lcd_surface, lcd, 0, 0, 0);
return true; return true;
} }

View file

@ -25,8 +25,8 @@
// #define HSV_LAYER_8 213, 56, 255 // #define HSV_LAYER_8 213, 56, 255
#define HSV_LAYER_UNDEF 0, 255, 255 #define HSV_LAYER_UNDEF 0, 255, 255
painter_device_t lcd; extern painter_device_t lcd;
painter_device_t lcd_surface; extern painter_device_t lcd_surface;
void draw_grid(void); void draw_grid(void);
void update_grid(void); void update_grid(void);
@ -35,4 +35,4 @@ void add_cell_cluster(void);
uint8_t get_random_color_index(void); uint8_t get_random_color_index(void);
void update_display(void); void update_display(void);
void backlight_wakeup(void); void backlight_wakeup(void);
void backlight_suspend(void); void backlight_suspend(void);

View file

@ -1,15 +1,9 @@
CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST)))) CURRENT_DIR := $(dir $(realpath $(lastword $(MAKEFILE_LIST))))
QUANTUM_PAINTER_ENABLE = yes SRC += $(CURRENT_DIR)/hlc_tft_display.c
QUANTUM_PAINTER_DRIVERS += st7789_spi surface CONFIG_H += $(CURRENT_DIR)/config.h
BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = pwm
SRC += $(CURRENT_DIR)/hlc_tft_display.c
# Fonts # Fonts
SRC += $(CURRENT_DIR)/graphics/fonts/Retron2000-27.qff.c $(CURRENT_DIR)/graphics/fonts/Retron2000-underline-27.qff.c SRC += $(CURRENT_DIR)/graphics/fonts/Retron2000-27.qff.c $(CURRENT_DIR)/graphics/fonts/Retron2000-underline-27.qff.c
# Numbers in image format # Numbers in image format
SRC += $(CURRENT_DIR)/graphics/numbers/0.qgf.c $(CURRENT_DIR)/graphics/numbers/1.qgf.c $(CURRENT_DIR)/graphics/numbers/2.qgf.c $(CURRENT_DIR)/graphics/numbers/3.qgf.c $(CURRENT_DIR)/graphics/numbers/4.qgf.c $(CURRENT_DIR)/graphics/numbers/5.qgf.c $(CURRENT_DIR)/graphics/numbers/6.qgf.c $(CURRENT_DIR)/graphics/numbers/7.qgf.c $(CURRENT_DIR)/graphics/numbers/8.qgf.c $(CURRENT_DIR)/graphics/numbers/9.qgf.c $(CURRENT_DIR)/graphics/numbers/undef.qgf.c SRC += $(CURRENT_DIR)/graphics/numbers/0.qgf.c $(CURRENT_DIR)/graphics/numbers/1.qgf.c $(CURRENT_DIR)/graphics/numbers/2.qgf.c $(CURRENT_DIR)/graphics/numbers/3.qgf.c $(CURRENT_DIR)/graphics/numbers/4.qgf.c $(CURRENT_DIR)/graphics/numbers/5.qgf.c $(CURRENT_DIR)/graphics/numbers/6.qgf.c $(CURRENT_DIR)/graphics/numbers/7.qgf.c $(CURRENT_DIR)/graphics/numbers/8.qgf.c $(CURRENT_DIR)/graphics/numbers/9.qgf.c $(CURRENT_DIR)/graphics/numbers/undef.qgf.c
CONFIG_H += $(CURRENT_DIR)/config.h

View file

@ -4,21 +4,16 @@ SRC += halcyon.c
LTO_ENABLE ?= yes LTO_ENABLE ?= yes
ifndef HLC_CIRQUE_TRACKPAD #add any other pointing devices here # May need to be changed when adding more pointing devices
# Needed otherwise pointing devices will not work POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_ENABLE = yes POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
# cirque defined here as otherwise sensitivity on slave is way too high
# may need to be changed when we start supporting other pointing devices
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
endif
ifndef HLC_TFT_DISPLAY #add any other displays here # May need to be changed when adding more displays
# Needed otherwise displays will not work QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_ENABLE = yes QUANTUM_PAINTER_DRIVERS += st7789_spi surface
QUANTUM_PAINTER_DRIVERS += st7789_spi
BACKLIGHT_ENABLE = yes BACKLIGHT_ENABLE = yes
BACKLIGHT_DRIVER = pwm BACKLIGHT_DRIVER = pwm
endif
ifdef HLC_ENCODER ifdef HLC_ENCODER
include $(CURRENT_DIR)/hlc_encoder/rules.mk include $(CURRENT_DIR)/hlc_encoder/rules.mk
@ -36,4 +31,4 @@ HLC_OPTIONS := $(HLC_NONE) $(HLC_CIRQUE_TRACKPAD) $(HLC_ENCODER) $(HLC_TFT_DISPL
ifeq ($(filter 1, $(HLC_OPTIONS)), ) ifeq ($(filter 1, $(HLC_OPTIONS)), )
$(error Wrong or no module specified. Please specify one of the following: HLC_NONE, HLC_CIRQUE_TRACKPAD, HLC_ENCODER or HLC_TFT_DISPLAY.) $(error Wrong or no module specified. Please specify one of the following: HLC_NONE, HLC_CIRQUE_TRACKPAD, HLC_ENCODER or HLC_TFT_DISPLAY.)
endif endif