mirror of
https://github.com/qmk/qmk_firmware
synced 2024-12-22 08:26:21 +00:00
Add LD7032 support to QP. (#20828)
Co-authored-by: Nick Brassel <nick@tzarc.org> Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
This commit is contained in:
parent
7983f7409b
commit
49e339ba8d
@ -28,6 +28,8 @@ Supported devices:
|
||||
| ILI9341 | RGB LCD | 240x320 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9341_spi` |
|
||||
| ILI9486 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9486_spi` |
|
||||
| ILI9488 | RGB LCD | 320x480 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ili9488_spi` |
|
||||
| LD7032 (SPI) | Monochrome OLED | 128x40 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ld7032_spi` |
|
||||
| LD7032 (I2C) | Monochrome OLED | 128x40 | I2C | `QUANTUM_PAINTER_DRIVERS += ld7032_i2c` |
|
||||
| SSD1351 | RGB OLED | 128x128 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += ssd1351_spi` |
|
||||
| ST7735 | RGB LCD | 132x162, 80x160 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7735_spi` |
|
||||
| ST7789 | RGB LCD | 240x320, 240x240 | SPI + D/C + RST | `QUANTUM_PAINTER_DRIVERS += st7789_spi` |
|
||||
@ -478,6 +480,40 @@ Native color format mono2 is compatible with SH1106
|
||||
|
||||
SSD1306 and SH1106 are almost entirely identical, to the point of being indisinguishable by Quantum Painter. Enable SH1106 support in Quantum Painter and create SH1106 devices in firmware to perform drawing operations on SSD1306 displays.
|
||||
|
||||
==== LD7032
|
||||
|
||||
Enabling support for the LD7032 in Quantum Painter is done by adding the following to `rules.mk`:
|
||||
|
||||
```make
|
||||
QUANTUM_PAINTER_ENABLE = yes
|
||||
# For SPI:
|
||||
QUANTUM_PAINTER_DRIVERS += ld7032_spi
|
||||
# For I2C:
|
||||
QUANTUM_PAINTER_DRIVERS += ld7032_i2c
|
||||
```
|
||||
|
||||
Creating a SH1106 device in firmware can then be done with the following APIs:
|
||||
|
||||
```c
|
||||
// SPI-based LD7032:
|
||||
painter_device_t qp_ld7032_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
|
||||
// I2C-based LD7032:
|
||||
painter_device_t qp_ld7032_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
|
||||
```
|
||||
|
||||
The device handle returned from the `qp_ld7032_make_???_device` function can be used to perform all other drawing operations.
|
||||
|
||||
The maximum number of displays of each type can be configured by changing the following in your `config.h` (default is 1):
|
||||
|
||||
```c
|
||||
// 3 SPI displays:
|
||||
#define LD7032_NUM_SPI_DEVICES 3
|
||||
// 3 I2C displays:
|
||||
#define LD7032_NUM_I2C_DEVICES 3
|
||||
```
|
||||
|
||||
Native color format mono2 is compatible with LD7032.
|
||||
|
||||
:::::
|
||||
|
||||
===== Surface
|
||||
|
411
drivers/painter/ld7032/qp_ld7032.c
Normal file
411
drivers/painter/ld7032/qp_ld7032.c
Normal file
File diff suppressed because it is too large
Load Diff
66
drivers/painter/ld7032/qp_ld7032.h
Normal file
66
drivers/painter/ld7032/qp_ld7032.h
Normal file
@ -0,0 +1,66 @@
|
||||
// Copyright 2023 Nick Brassel (@tzarc)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
|
||||
#include "gpio.h"
|
||||
#include "qp_internal.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter LD7032 configurables (add to your keyboard's config.h)
|
||||
|
||||
#if defined(QUANTUM_PAINTER_LD7032_SPI_ENABLE) && !defined(LD7032_NUM_SPI_DEVICES)
|
||||
/**
|
||||
* @def This controls the maximum number of SPI LD7032 devices that Quantum Painter can communicate with at any one time.
|
||||
* Increasing this number allows for multiple displays to be used.
|
||||
*/
|
||||
# define LD7032_NUM_SPI_DEVICES 1
|
||||
#else
|
||||
# define LD7032_NUM_SPI_DEVICES 0
|
||||
#endif
|
||||
|
||||
#if defined(QUANTUM_PAINTER_LD7032_I2C_ENABLE) && !defined(LD7032_NUM_I2C_DEVICES)
|
||||
/**
|
||||
* @def This controls the maximum number of I2C LD7032 devices that Quantum Painter can communicate with at any one time.
|
||||
* Increasing this number allows for multiple displays to be used.
|
||||
*/
|
||||
# define LD7032_NUM_I2C_DEVICES 1
|
||||
#else
|
||||
# define LD7032_NUM_I2C_DEVICES 0
|
||||
#endif
|
||||
|
||||
#define LD7032_NUM_DEVICES ((LD7032_NUM_SPI_DEVICES) + (LD7032_NUM_I2C_DEVICES))
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter LD7032 device factories
|
||||
|
||||
#ifdef QUANTUM_PAINTER_LD7032_SPI_ENABLE
|
||||
|
||||
/**
|
||||
* Factory method for an LD7032 SPI LCD device.
|
||||
*
|
||||
* @param panel_width[in] the width of the display in pixels (usually 128)
|
||||
* @param panel_height[in] the height of the display in pixels (usually 64)
|
||||
* @param chip_select_pin[in] the GPIO pin used for SPI chip select
|
||||
* @param dc_pin[in] the GPIO pin used for D/C control
|
||||
* @param reset_pin[in] the GPIO pin used for RST
|
||||
* @param spi_divisor[in] the SPI divisor to use when communicating with the display
|
||||
* @param spi_mode[in] the SPI mode to use when communicating with the display
|
||||
* @return the device handle used with all drawing routines in Quantum Painter
|
||||
*/
|
||||
painter_device_t qp_ld7032_make_spi_device(uint16_t panel_width, uint16_t panel_height, pin_t chip_select_pin, pin_t dc_pin, pin_t reset_pin, uint16_t spi_divisor, int spi_mode);
|
||||
|
||||
#endif // QUANTUM_PAINTER_LD7032_SPI_ENABLE
|
||||
|
||||
#ifdef QUANTUM_PAINTER_LD7032_I2C_ENABLE
|
||||
|
||||
/**
|
||||
* Factory method for an LD7032 I2C LCD device.
|
||||
*
|
||||
* @param panel_width[in] the width of the display in pixels (usually 128)
|
||||
* @param panel_height[in] the height of the display in pixels (usually 64)
|
||||
* @param i2c_address[in] the I2C address to use
|
||||
* @return the device handle used with all drawing routines in Quantum Painter
|
||||
*/
|
||||
painter_device_t qp_ld7032_make_i2c_device(uint16_t panel_width, uint16_t panel_height, uint8_t i2c_address);
|
||||
|
||||
#endif // QUANTUM_PAINTER_LD7032_I2C_ENABLE
|
45
drivers/painter/ld7032/qp_ld7032_opcodes.h
Normal file
45
drivers/painter/ld7032/qp_ld7032_opcodes.h
Normal file
@ -0,0 +1,45 @@
|
||||
// Copyright 2023 Dasky (@daskygit)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
typedef enum {
|
||||
LD7032_SOFTRES = 0x01,
|
||||
LD7032_DISP_ON_OFF = 0x02,
|
||||
LD7032_DATA_RW = 0x08,
|
||||
LD7032_DISP_DIRECTION = 0x09,
|
||||
LD7032_IFMODE = 0x0D,
|
||||
LD7032_PEAK_WIDTH = 0x10,
|
||||
LD7032_DOT_CURRENT = 0x12,
|
||||
LD7032_SCAN_MODE = 0x13,
|
||||
LD7032_DISP_STBY_ON_OFF = 0x14,
|
||||
LD7032_PEAK_DELAY = 0x16,
|
||||
LD7032_ROW_SCAN = 0x17,
|
||||
LD7032_PRE_C_WIDTH = 0x18,
|
||||
LD7032_DFRAME = 0x1A,
|
||||
LD7032_DATA_REVERSE = 0x1C,
|
||||
LD7032_WRITE_DIRECTION = 0x1D,
|
||||
LD7032_READREG = 0x20,
|
||||
LD7032_DISP_SIZE_X = 0x30,
|
||||
LD7032_DISP_SIZE_Y = 0x32,
|
||||
LD7032_X_BOX_ADR_START = 0x34,
|
||||
LD7032_X_BOX_ADR_END = 0x35,
|
||||
LD7032_Y_BOX_ADR_START = 0x36,
|
||||
LD7032_Y_BOX_ADR_END = 0x37,
|
||||
LD7032_X_DISP_START = 0x38,
|
||||
LD7032_Y_DISP_START = 0x39,
|
||||
LD7032_XTALK_EN = 0x3A,
|
||||
LD7032_XTALK_REF = 0x3B,
|
||||
LD7032_AGING_EN = 0x3C,
|
||||
LD7032_VDD_SEL = 0x3D,
|
||||
LD7032_TESTCNT0 = 0x3E,
|
||||
LD7032_VCC_R_SEL = 0x3F,
|
||||
LD7032_PRE_C_SELECT = 0x44,
|
||||
LD7032_ROW_OVERLAP = 0x48,
|
||||
LD7032_S_SLEEP_TIMER = 0xC0,
|
||||
LD7032_S_SLEEP_START = 0xC2,
|
||||
LD7032_S_STEP_TIMER = 0xC3,
|
||||
LD7032_S_STEP_UNIT = 0xC4,
|
||||
LD7032_S_CONDITION = 0xCC,
|
||||
LD7032_S_START_STOP = 0xCD,
|
||||
LD7032_S_SELECT = 0xCE,
|
||||
LD7032_TESTCNT1 = 0xF0, //-0xFF
|
||||
} ld7032_opcodes;
|
@ -557,6 +557,12 @@ int16_t qp_drawtext_recolor(painter_device_t device, uint16_t x, uint16_t y, pai
|
||||
# define SH1106_NUM_DEVICES 0
|
||||
#endif // QUANTUM_PAINTER_SH1106_ENABLE
|
||||
|
||||
#ifdef QUANTUM_PAINTER_LD7032_ENABLE
|
||||
# include "qp_ld7032.h"
|
||||
#else // QUANTUM_PAINTER_LD7032_ENABLE
|
||||
# define LD7032_NUM_DEVICES 0
|
||||
#endif // QUANTUM_PAINTER_LD7032_ENABLE
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Quantum Painter Extras
|
||||
|
||||
|
@ -19,6 +19,7 @@ enum {
|
||||
+ (GC9107_NUM_DEVICES) // GC9107
|
||||
+ (SSD1351_NUM_DEVICES) // SSD1351
|
||||
+ (SH1106_NUM_DEVICES) // SH1106
|
||||
+ (LD7032_NUM_DEVICES) // LD7032
|
||||
};
|
||||
|
||||
static painter_device_t qp_devices[QP_NUM_DEVICES] = {NULL};
|
||||
|
@ -17,7 +17,9 @@ VALID_QUANTUM_PAINTER_DRIVERS := \
|
||||
gc9107_spi \
|
||||
ssd1351_spi \
|
||||
sh1106_i2c \
|
||||
sh1106_spi
|
||||
sh1106_spi \
|
||||
ld7032_i2c \
|
||||
ld7032_spi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
@ -182,6 +184,29 @@ define handle_quantum_painter_driver
|
||||
$(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
|
||||
$(DRIVER_PATH)/painter/sh1106/qp_sh1106.c
|
||||
|
||||
else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ld7032_spi)
|
||||
QUANTUM_PAINTER_NEEDS_SURFACE := yes
|
||||
QUANTUM_PAINTER_NEEDS_COMMS_SPI := yes
|
||||
QUANTUM_PAINTER_NEEDS_COMMS_SPI_DC_RESET := yes
|
||||
OPT_DEFS += -DQUANTUM_PAINTER_LD7032_ENABLE -DQUANTUM_PAINTER_LD7032_SPI_ENABLE
|
||||
COMMON_VPATH += \
|
||||
$(DRIVER_PATH)/painter/oled_panel \
|
||||
$(DRIVER_PATH)/painter/ld7032
|
||||
SRC += \
|
||||
$(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
|
||||
$(DRIVER_PATH)/painter/ld7032/qp_ld7032.c
|
||||
|
||||
else ifeq ($$(strip $$(CURRENT_PAINTER_DRIVER)),ld7032_i2c)
|
||||
QUANTUM_PAINTER_NEEDS_SURFACE := yes
|
||||
QUANTUM_PAINTER_NEEDS_COMMS_I2C := yes
|
||||
OPT_DEFS += -DQUANTUM_PAINTER_LD7032_ENABLE -DQUANTUM_PAINTER_LD7032_I2C_ENABLE
|
||||
COMMON_VPATH += \
|
||||
$(DRIVER_PATH)/painter/oled_panel \
|
||||
$(DRIVER_PATH)/painter/ld7032
|
||||
SRC += \
|
||||
$(DRIVER_PATH)/painter/oled_panel/qp_oled_panel.c \
|
||||
$(DRIVER_PATH)/painter/ld7032/qp_ld7032.c
|
||||
|
||||
endif
|
||||
endef
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user