forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Core] Quantum Painter - LVGL Integration (qmk#18499)
Co-authored-by: Nick Brassel <[email protected]>
- Loading branch information
Showing
24 changed files
with
1,140 additions
and
3 deletions.
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
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
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
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,10 @@ | ||
// Copyright 2022 Nick Brassel (@tzarc) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
#pragma once | ||
|
||
// #define LV_DITHER_GRADIENT 1 | ||
|
||
#include_next <lv_conf.h> | ||
|
||
// #undef LV_COLOR_16_SWAP | ||
// #define LV_COLOR_16_SWAP 0 |
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
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,55 @@ | ||
# Quantum Painter LVGL Integration :id=lvgl | ||
|
||
LVGL (Light and Versatile Graphics Library) is an open-source graphics library providing everything you need to create an embedded GUI for your board with easy-to-use graphical elements. | ||
|
||
LVGL integrates with [Quantum Painter's](quantum_painter.md) API and drivers to render to the display, the hardware supported by Quantum Painter is also supported by LVGL. | ||
|
||
?> Keep in mind that enabling the LVGL integration has a big impact in firmware size, it is recommeded to use a supported MCU with >256 kB of flash space. | ||
|
||
To learn more about LVGL and how to use it please take a look at their [official documentation](https://docs.lvgl.io/8.2/intro/) | ||
|
||
## Enabling LVGL :id=lvgl-enabling | ||
To enable LVGL to be built into your firmware, add the following to `rules.mk`: | ||
|
||
```make | ||
QUANTUM_PAINTER_ENABLE = yes | ||
QUANTUM_PAINTER_DRIVERS = ...... | ||
QUANTUM_PAINTER_LVGL_INTEGRATION = yes | ||
``` | ||
To configure the Quantum Painter Display Drivers please read the [Quantum Painter Display Drivers](quantum_painter.md#quantum-painter-drivers) section. | ||
|
||
## Quantum Painter LVGL API :id=lvgl-api | ||
|
||
### Quantum Painter LVGL Attach :id=lvgl-api-init | ||
|
||
```c | ||
bool qp_lvgl_attach(painter_device_t device); | ||
``` | ||
The `qp_lvgl_attach` function is used to set up LVGL with the supplied display, and requires an already configured display. | ||
```c | ||
static painter_device_t display; | ||
void keyboard_post_init_kb(void) { | ||
display = qp_make_.......; // Create the display | ||
qp_init(display, QP_ROTATION_0); // Initialise the display | ||
if (qp_lvgl_attach(display)) { // Attach LVGL to the display | ||
...Your code to draw // Run LVGL specific code to draw | ||
} | ||
} | ||
``` | ||
To init. the display please read the [Display Initialisation](quantum_painter.md#quantum-painter-api-init) section. | ||
|
||
!> Attaching LVGL to a display means LVGL subsequently "owns" the display. Using standard Quantum Painter drawing operations with the display after LVGL attachment will likely result in display artifacts. | ||
### Quantum Painter LVGL Detach :id=lvgl-api-init | ||
|
||
```c | ||
void qp_lvgl_detach() | ||
``` | ||
|
||
The `qp_lvgl_detach` function stops the internal LVGL ticks and releases resources related to it. | ||
|
||
## Enabling/Disabling LVGL features :id=lvgl-configuring | ||
|
||
You can overwrite LVGL specific features in your `lv_conf.h` file. |
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,15 @@ | ||
// Copyright 2022 Jose Pablo Ramirez (@jpe230) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
/* SPI pins */ | ||
#define SPI_DRIVER SPID0 | ||
#define SPI_SCK_PIN GP18 | ||
#define SPI_MOSI_PIN GP19 | ||
#define SPI_MISO_PIN GP20 | ||
|
||
/* LCD Configuration */ | ||
#define LCD_RST_PIN GP0 | ||
#define LCD_DC_PIN GP1 | ||
#define LCD_CS_PIN GP2 |
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,12 @@ | ||
// Copyright 2022 Jose Pablo Ramirez (@jpe230) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#include_next <halconf.h> | ||
|
||
#undef HAL_USE_SPI | ||
#define HAL_USE_SPI TRUE | ||
|
||
#undef SPI_USE_WAIT | ||
#define SPI_USE_WAIT TRUE |
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,50 @@ | ||
// Copyright 2022 Jose Pablo Ramirez (@jpe230) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#include QMK_KEYBOARD_H | ||
#include "qp.h" | ||
|
||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
LAYOUT_ortho_1x1(JS_BUTTON0) | ||
}; | ||
|
||
painter_device_t lcd; | ||
|
||
void lv_example_arc_2(void); | ||
|
||
void keyboard_post_init_user(void) { | ||
lcd = qp_gc9a01_make_spi_device(240, 240, LCD_CS_PIN, LCD_DC_PIN, LCD_RST_PIN, 4, 0); | ||
qp_init(lcd, QP_ROTATION_0); | ||
qp_rect(lcd, 0, 0, 239, 319, 0, 255, 255, true); | ||
|
||
if (qp_lvgl_attach(lcd)) { | ||
lv_example_arc_2(); | ||
} | ||
} | ||
|
||
static void set_angle(void* obj, int32_t v) { | ||
lv_arc_set_value(obj, v); | ||
} | ||
|
||
/** | ||
* Create an arc which acts as a loader. | ||
*/ | ||
void lv_example_arc_2(void) { | ||
/*Create an Arc*/ | ||
lv_obj_t* arc = lv_arc_create(lv_scr_act()); | ||
lv_arc_set_rotation(arc, 270); | ||
lv_arc_set_bg_angles(arc, 0, 360); | ||
lv_obj_remove_style(arc, NULL, LV_PART_KNOB); /*Be sure the knob is not displayed*/ | ||
lv_obj_clear_flag(arc, LV_OBJ_FLAG_CLICKABLE); /*To not allow adjusting by click*/ | ||
lv_obj_center(arc); | ||
|
||
static lv_anim_t a; | ||
lv_anim_init(&a); | ||
lv_anim_set_var(&a, arc); | ||
lv_anim_set_exec_cb(&a, set_angle); | ||
lv_anim_set_time(&a, 1000); | ||
lv_anim_set_repeat_count(&a, LV_ANIM_REPEAT_INFINITE); /*Just for the demo*/ | ||
lv_anim_set_repeat_delay(&a, 500); | ||
lv_anim_set_values(&a, 0, 100); | ||
lv_anim_start(&a); | ||
} |
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 2022 Jose Pablo Ramirez (@jpe230) | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
|
||
#pragma once | ||
|
||
#include_next <mcuconf.h> | ||
|
||
#undef RP_SPI_USE_SPI0 | ||
#define RP_SPI_USE_SPI0 TRUE |
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,3 @@ | ||
QUANTUM_PAINTER_ENABLE = yes | ||
QUANTUM_PAINTER_LVGL_INTEGRATION = yes | ||
QUANTUM_PAINTER_DRIVERS = gc9a01_spi |
Oops, something went wrong.