diff options
Diffstat (limited to 'keyboards/jpe230/big_knob/big_knob.c')
-rw-r--r-- | keyboards/jpe230/big_knob/big_knob.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/keyboards/jpe230/big_knob/big_knob.c b/keyboards/jpe230/big_knob/big_knob.c new file mode 100644 index 0000000000..db3dab5ed6 --- /dev/null +++ b/keyboards/jpe230/big_knob/big_knob.c @@ -0,0 +1,97 @@ +// Copyright 2023 jpe230 (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "qp.h" +#include "qp_comms.h" +#include "qp_st77xx_opcodes.h" +#include "gfx/logo.qgf.h" + +painter_device_t lcd; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Init board: +// - Draw logo + +void keyboard_post_init_kb(void) { + backlight_set(BACKLIGHT_DEFAULT_LEVEL); + + wait_ms(LCD_WAIT_TIME); + + // Initialise the LCD + lcd = qp_st7735_make_spi_device(LCD_HEIGHT, LCD_WIDTH, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, LCD_SPI_DIVISOR, 0); + qp_init(lcd, LCD_ROTATION); + + // Invert Colour + #ifdef LCD_INVERT_COLOUR + qp_comms_start(lcd); + qp_comms_command(lcd, ST77XX_CMD_INVERT_ON); + qp_comms_stop(lcd); + #endif + + // Apply Offset + qp_set_viewport_offsets(lcd, LCD_OFFSET_X, LCD_OFFSET_Y); + + // Turn on the LCD and clear the display + qp_power(lcd, true); + qp_rect(lcd, 0, 0, LCD_WIDTH, LCD_HEIGHT, HSV_BLACK, true); + + // Show logo + painter_image_handle_t logo_image = qp_load_image_mem(gfx_logo); + qp_drawimage(lcd, 0, 0, logo_image); + + keyboard_post_init_user(); +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Lights handling: +// - Turn off backlight (screen) after timeout or suspend +// - Turn off rgblight after timeout or suspend + +bool lights_off = false; + +__attribute__((weak)) void lights_wakeup_user(void) {}; +__attribute__((weak)) void lights_suspend_user(void) {}; + +void backlight_wakeup(void) { + backlight_set(BACKLIGHT_DEFAULT_LEVEL); +} + +void backlight_suspend(void) { + backlight_set(0); +} + +void lights_wakeup(void) { + lights_off = false; + rgblight_wakeup(); + backlight_wakeup(); + lights_wakeup_user(); +} + +void lights_suspend(void) { + lights_off = true; + lights_suspend_user(); + rgblight_suspend(); + backlight_suspend(); +} + +void housekeeping_task_kb(void) { + if ( lights_off && last_input_activity_elapsed() <= LIGHTS_TIMEOUT) + { + lights_wakeup(); + } + if (!lights_off && last_input_activity_elapsed() > LIGHTS_TIMEOUT) { + lights_suspend(); + } +} + +void suspend_power_down_kb(void) { + lights_suspend(); + qp_power(lcd, false); + suspend_power_down_user(); +} + +void suspend_wakeup_init_kb(void) { + qp_power(lcd, true); + lights_wakeup(); + suspend_wakeup_init_user(); +} |