-
-
Notifications
You must be signed in to change notification settings - Fork 39.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Keyboard] Add stront keyboard #21035
Merged
Merged
Changes from all commits
Commits
Show all changes
20 commits
Select commit
Hold shift + click to select a range
2054973
first version
zzeneg d9b4811
refactor display code
zzeneg 3f6709d
add gif
zzeneg ba3254a
show layers, screen styles
zzeneg 1bc3507
disable unused lvgl features
zzeneg af1a2f7
Revert "add gif"
zzeneg eb50ba9
small improvements
zzeneg e34fdc9
add rgb matrix config
zzeneg 97c066a
finalize firmware
zzeneg 3455feb
add readme
zzeneg ecfe44c
cirque spi support
zzeneg 806a7d9
add default keymap
zzeneg 07adc8d
add hid keymap
zzeneg 8f4ca7b
add i2c keymap
zzeneg 20c6987
update my keymap
zzeneg f729f73
update readme
zzeneg d1477ca
improve readme
zzeneg aa2f0b3
Merge branch 'master' into feature/stront
zzeneg 9d986de
PR updates
zzeneg 1296961
adjust to latest master updates
zzeneg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
// Copyright 2023 zzeneg (@zzeneg) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#define SERIAL_USART_FULL_DUPLEX | ||
#define SERIAL_USART_PIN_SWAP | ||
#define SERIAL_USART_TX_PIN GP0 | ||
#define SERIAL_USART_RX_PIN GP1 | ||
|
||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET | ||
#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U | ||
|
||
/* any side can be master by default, enable split sync to support it */ | ||
#define EE_HANDS | ||
#define SPLIT_LED_STATE_ENABLE | ||
#define SPLIT_MODS_ENABLE | ||
#define SPLIT_POINTING_ENABLE | ||
|
||
/* SPI config for display/touchpad */ | ||
#define SPI_DRIVER SPID1 | ||
#define SPI_SCK_PIN GP10 | ||
#define SPI_MOSI_PIN GP11 | ||
#define SPI_MISO_PIN GP12 | ||
|
||
/* touchpad config */ | ||
#define POINTING_DEVICE_RIGHT | ||
#define POINTING_DEVICE_CS_PIN GP9 | ||
#define POINTING_DEVICE_ROTATION_180 | ||
#define CIRQUE_PINNACLE_DIAMETER_MM 40 | ||
|
||
/* LCD config */ | ||
#define LCD_DC_PIN GP12 | ||
#define LCD_CS_PIN GP9 | ||
#define LCD_RST_PIN GP13 | ||
#define BACKLIGHT_PWM_DRIVER PWMD7 | ||
#define BACKLIGHT_PWM_CHANNEL RP2040_PWM_CHANNEL_A | ||
#define QUANTUM_PAINTER_LVGL_USE_CUSTOM_CONF | ||
|
||
/* RGB config */ | ||
#ifdef RGB_MATRIX_ENABLE | ||
# define SPLIT_TRANSPORT_MIRROR | ||
# define RGB_MATRIX_LED_COUNT RGBLED_NUM | ||
# define RGB_DISABLE_WHEN_USB_SUSPENDED | ||
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS | ||
# define RGB_MATRIX_KEYPRESSES | ||
|
||
# define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue | ||
# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN // Static gradient top to bottom, speed controls how much gradient changes | ||
# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT // Static gradient left to right, speed controls how much gradient changes | ||
# define ENABLE_RGB_MATRIX_BREATHING // Single hue brightness cycling animation | ||
# define ENABLE_RGB_MATRIX_BAND_SAT // Single hue band fading saturation scrolling left to right | ||
# define ENABLE_RGB_MATRIX_BAND_VAL // Single hue band fading brightness scrolling left to right | ||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT // Single hue 3 blade spinning pinwheel fades saturation | ||
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL // Single hue 3 blade spinning pinwheel fades brightness | ||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT // Single hue spinning spiral fades saturation | ||
# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL // Single hue spinning spiral fades brightness | ||
# define ENABLE_RGB_MATRIX_CYCLE_ALL // Full keyboard solid hue cycling through full gradient | ||
# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT // Full gradient scrolling left to right | ||
# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN // Full gradient scrolling top to bottom | ||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN // Full gradient scrolling out to in | ||
# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL // Full dual gradients scrolling out to in | ||
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON // Full gradient Chevron shaped scrolling left to right | ||
# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL // Full gradient spinning pinwheel around center of keyboard | ||
# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL // Full gradient spinning spiral around center of keyboard | ||
# define ENABLE_RGB_MATRIX_DUAL_BEACON // Full gradient spinning around center of keyboard | ||
# define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard | ||
# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS // Full dual gradients spinning two halfs of keyboard | ||
# define ENABLE_RGB_MATRIX_RAINDROPS // Randomly changes a single key's hue | ||
# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS // Randomly changes a single key's hue and saturation | ||
# define ENABLE_RGB_MATRIX_HUE_BREATHING // Hue shifts up a slight amount at the same time, then shifts back | ||
# define ENABLE_RGB_MATRIX_HUE_PENDULUM // Hue shifts up a slight amount in a wave to the right, then back to the left | ||
# define ENABLE_RGB_MATRIX_HUE_WAVE // Hue shifts up a slight amount and then back down in a wave to the right | ||
# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL // Single hue fractal filled keys pulsing horizontally out to edges | ||
# define ENABLE_RGB_MATRIX_PIXEL_FLOW // Pulsing RGB flow along LED wiring with random hues | ||
# define ENABLE_RGB_MATRIX_PIXEL_RAIN // Randomly light keys with random hues | ||
# if defined(RGB_MATRIX_FRAMEBUFFER_EFFECTS) | ||
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM! | ||
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN // That famous computer simulation | ||
# endif | ||
# if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES) | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE // Pulses keys hit to hue & value then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE // Static single hue, pulses keys hit to shifted hue then fades to current hue | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE // Hue & value pulse near a single key hit then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE // Hue & value pulse near multiple key hits then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS // Hue & value pulse the same column and row of a single key hit then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS // Hue & value pulse the same column and row of multiple key hits then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS // Hue & value pulse away on the same column and row of a single key hit then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS // Hue & value pulse away on the same column and row of multiple key hits then fades value out | ||
# define ENABLE_RGB_MATRIX_SPLASH // Full gradient & value pulse away from a single key hit then fades value out | ||
# define ENABLE_RGB_MATRIX_MULTISPLASH // Full gradient & value pulse away from multiple key hits then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_SPLASH // Hue & value pulse away from a single key hit then fades value out | ||
# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH // Hue & value pulse away from multiple key hits then fades value out | ||
# endif | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,125 @@ | ||
// Copyright 2023 zzeneg (@zzeneg) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include "display.h" | ||
#include "qp.h" | ||
#include "lvgl_helpers.h" | ||
|
||
/* shared styles */ | ||
lv_style_t style_screen; | ||
lv_style_t style_container; | ||
lv_style_t style_button; | ||
lv_style_t style_button_active; | ||
|
||
/* screens */ | ||
static lv_obj_t *screen_home; | ||
|
||
/* home screen content */ | ||
static lv_obj_t *label_shift; | ||
static lv_obj_t *label_ctrl; | ||
static lv_obj_t *label_alt; | ||
static lv_obj_t *label_gui; | ||
static lv_obj_t *label_caps; | ||
|
||
void init_styles(void) { | ||
lv_style_init(&style_screen); | ||
lv_style_set_bg_color(&style_screen, lv_color_black()); | ||
|
||
lv_style_init(&style_container); | ||
lv_style_set_pad_top(&style_container, 0); | ||
lv_style_set_pad_bottom(&style_container, 0); | ||
lv_style_set_pad_left(&style_container, 0); | ||
lv_style_set_pad_right(&style_container, 0); | ||
lv_style_set_bg_opa(&style_container, 0); | ||
lv_style_set_border_width(&style_container, 0); | ||
lv_style_set_width(&style_container, lv_pct(100)); | ||
lv_style_set_height(&style_container, LV_SIZE_CONTENT); | ||
|
||
lv_style_init(&style_button); | ||
lv_style_set_pad_top(&style_button, 4); | ||
lv_style_set_pad_bottom(&style_button, 4); | ||
lv_style_set_pad_left(&style_button, 4); | ||
lv_style_set_pad_right(&style_button, 4); | ||
lv_style_set_radius(&style_button, 6); | ||
lv_style_set_text_color(&style_button, lv_palette_main(LV_PALETTE_AMBER)); | ||
|
||
lv_style_init(&style_button_active); | ||
lv_style_set_bg_color(&style_button_active, lv_palette_main(LV_PALETTE_AMBER)); | ||
lv_style_set_bg_opa(&style_button_active, LV_OPA_100); | ||
lv_style_set_text_color(&style_button_active, lv_color_black()); | ||
} | ||
|
||
void init_screen_home(void) { | ||
screen_home = lv_scr_act(); | ||
|
||
lv_obj_add_style(screen_home, &style_screen, 0); | ||
use_flex_column(screen_home); | ||
|
||
lv_obj_t *mods = lv_obj_create(screen_home); | ||
lv_obj_add_style(mods, &style_container, 0); | ||
use_flex_column(mods); | ||
|
||
lv_obj_t *mods_row1 = lv_obj_create(mods); | ||
lv_obj_add_style(mods_row1, &style_container, 0); | ||
use_flex_row(mods_row1); | ||
label_gui = create_button(mods_row1, "GUI", &style_button, &style_button_active); | ||
label_alt = create_button(mods_row1, "ALT", &style_button, &style_button_active); | ||
|
||
lv_obj_t *mods_row2 = lv_obj_create(mods); | ||
lv_obj_add_style(mods_row2, &style_container, 0); | ||
use_flex_row(mods_row2); | ||
label_ctrl = create_button(mods_row2, "CTL", &style_button, &style_button_active); | ||
label_shift = create_button(mods_row2, "SFT", &style_button, &style_button_active); | ||
|
||
lv_obj_t *label_stront = lv_label_create(screen_home); | ||
lv_label_set_text(label_stront, "stront"); | ||
#if LV_FONT_MONTSERRAT_48 | ||
lv_obj_set_style_text_font(label_stront, &lv_font_montserrat_48, LV_PART_MAIN); | ||
#endif | ||
|
||
label_caps = create_button(screen_home, "CAPS", &style_button, &style_button_active); | ||
} | ||
|
||
bool display_init_kb(void) { | ||
dprint("display_init_kb - start\n"); | ||
|
||
backlight_enable(); | ||
|
||
painter_device_t display = qp_st7789_make_spi_device(240, 300, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 16, 3); | ||
qp_set_viewport_offsets(display, 0, 20); | ||
|
||
if (!qp_init(display, QP_ROTATION_180) || !qp_power(display, true) || !qp_lvgl_attach(display)) return false; | ||
|
||
dprint("display_init_kb - initialised\n"); | ||
|
||
lv_disp_t *lv_display = lv_disp_get_default(); | ||
lv_theme_t *lv_theme = lv_theme_default_init(lv_display, lv_palette_main(LV_PALETTE_AMBER), lv_palette_main(LV_PALETTE_BLUE), true, LV_FONT_DEFAULT); | ||
lv_disp_set_theme(lv_display, lv_theme); | ||
init_styles(); | ||
|
||
bool res = display_init_user(); | ||
if (res) { | ||
dprint("display_init_kb - adding default home screen\n"); | ||
init_screen_home(); | ||
} | ||
|
||
return true; | ||
} | ||
|
||
__attribute__((weak)) bool display_init_user(void) { | ||
return true; | ||
} | ||
|
||
__attribute__((weak)) void display_housekeeping_task(void) { | ||
dprint("display_housekeeping_task_kb\n"); | ||
|
||
toggle_state(label_shift, LV_STATE_PRESSED, MODS_SHIFT); | ||
toggle_state(label_ctrl, LV_STATE_PRESSED, MODS_CTRL); | ||
toggle_state(label_alt, LV_STATE_PRESSED, MODS_ALT); | ||
toggle_state(label_gui, LV_STATE_PRESSED, MODS_GUI); | ||
} | ||
|
||
__attribute__((weak)) void display_process_caps(bool active) { | ||
dprint("display_process_caps\n"); | ||
toggle_state(label_caps, LV_STATE_PRESSED, active); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
// Copyright 2023 zzeneg (@zzeneg) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include "qp_lvgl.h" | ||
|
||
#define MODS_SHIFT ((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) | ||
#define MODS_CTRL ((get_mods() | get_oneshot_mods()) & MOD_MASK_CTRL) | ||
#define MODS_ALT ((get_mods() | get_oneshot_mods()) & MOD_MASK_ALT) | ||
#define MODS_GUI ((get_mods() | get_oneshot_mods()) & MOD_MASK_GUI) | ||
|
||
/* shared styles */ | ||
extern lv_style_t style_screen; | ||
extern lv_style_t style_container; | ||
extern lv_style_t style_button; | ||
extern lv_style_t style_button_active; | ||
|
||
bool display_init_kb(void); | ||
bool display_init_user(void); | ||
void display_housekeeping_task(void); | ||
void display_process_caps(bool active); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
// Copyright 2023 zzeneg (@zzeneg) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#define HAL_USE_SPI TRUE | ||
#define HAL_USE_PWM TRUE | ||
|
||
#include_next <halconf.h> |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is doubled up with MISO. Is that intentional?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes - same pin is used as DC for LCD on one half and as touchpad's MISO on another. I could use
SPI_MISO_PIN
inqp_st7789_make_spi_device
instead but I feel like it looks worse.