Skip to content

Commit

Permalink
[Keyboard] Add stront keyboard (qmk#21035)
Browse files Browse the repository at this point in the history
  • Loading branch information
zzeneg authored and autoferrit committed Dec 6, 2023
1 parent 97bf323 commit 258de6a
Show file tree
Hide file tree
Showing 38 changed files with 3,286 additions and 0 deletions.
95 changes: 95 additions & 0 deletions keyboards/stront/config.h
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
125 changes: 125 additions & 0 deletions keyboards/stront/display.c
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);
}
20 changes: 20 additions & 0 deletions keyboards/stront/display.h
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);
9 changes: 9 additions & 0 deletions keyboards/stront/halconf.h
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>
Loading

0 comments on commit 258de6a

Please sign in to comment.