Skip to content

Commit 1c33fa3

Browse files
committed
adds new indev driver
1 parent 248836a commit 1c33fa3

File tree

2 files changed

+144
-0
lines changed

2 files changed

+144
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# Copyright (c) 2024 - 2025 Kevin G. Schlosser
2+
3+
from micropython import const # NOQA
4+
import pointer_framework
5+
import machine # NOQA
6+
import time
7+
8+
_DATA_REG = const(0x80)
9+
_STATUS_REG = const(0xE0)
10+
_PAGE_REG = const(0xF0)
11+
12+
I2C_ADDR = 0x40
13+
BITS = 8
14+
15+
16+
class GSL1680(pointer_framework.PointerDriver):
17+
18+
def _read_reg(self, reg, num_bytes=None, buf=None):
19+
self._tx_buf[0] = reg >> 8
20+
self._tx_buf[1] = reg & 0xFF
21+
if num_bytes is not None:
22+
self._device.write_readinto(self._tx_mv[:2], self._rx_mv[:num_bytes])
23+
else:
24+
self._device.write_readinto(self._tx_mv[:2], buf)
25+
26+
def _write_reg(self, reg, value=None, buf=None):
27+
if value is not None:
28+
self._tx_buf[0] = value
29+
self._device.write_mem(reg, self._tx_mv[:1])
30+
elif buf is not None:
31+
self._device.write_mem(reg, buf)
32+
33+
def __init__(
34+
self,
35+
device,
36+
wake_pin,
37+
touch_cal=None,
38+
startup_rotation=pointer_framework.lv.DISPLAY_ROTATION._0, # NOQA
39+
debug=False
40+
):
41+
self._tx_buf = bytearray(4)
42+
self._tx_mv = memoryview(self._tx_buf)
43+
self._rx_buf = bytearray(24)
44+
self._rx_mv = memoryview(self._rx_buf)
45+
46+
self._device = device
47+
48+
if isinstance(wake_pin, int):
49+
wake_pin = machine.Pin(wake_pin, machine.Pin.OUT)
50+
51+
self._wake_pin = wake_pin
52+
53+
self._wake_up()
54+
time.sleep_ms(50)
55+
self._write_reg(_STATUS_REG, 0x88)
56+
time.sleep_ms(10)
57+
self._write_reg(0xE4, 0x04)
58+
time.sleep_ms(5)
59+
self._tx_buf[:4] = bytearray([0x00, 0x00, 0x00, 0x00])
60+
self._write_reg(0xBC, buf=self._tx_mv[:4])
61+
time.sleep_ms(5)
62+
self._write_reg(0xE0, 0x00)
63+
64+
super().__init__(
65+
touch_cal=touch_cal, startup_rotation=startup_rotation, debug=debug
66+
)
67+
68+
def _wake_up(self):
69+
# toggle wake pin
70+
self._wake_pin.value(1)
71+
time.sleep_ms(5) # NOQA
72+
self._wake_pin.value(0)
73+
time.sleep_ms(5) # NOQA
74+
self._wake_pin.value(1)
75+
time.sleep_ms(3) # NOQA
76+
77+
def _get_coords(self):
78+
self._read_reg(_DATA_REG, buf=self._rx_mv)
79+
data = self._rx_buf
80+
81+
touch_count = data[0]
82+
if touch_count > 0:
83+
x = ((data[5] << 8) & 0xF) | data[4]
84+
y = ((data[7] << 8) & 0xF) | data[6]
85+
86+
return self.RELEASED, x, y

display_configs/ER-TFTMC050-3.toml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
[MCU.esp32]
2+
BOARD = "ESP32_GENERIC_S3"
3+
BOARD_VARIANT = "SPIRAM_OCT"
4+
flash_size = 16
5+
enable_jtag_repl = 'n'
6+
enable_cdc_repl = 'n'
7+
enable_uart_repl = 'y'
8+
uart_repl_bitrate = 115200
9+
10+
[I2C.Bus.i2c_bus]
11+
host = 0
12+
scl = 20
13+
sda = 19
14+
freq = 400000
15+
16+
[I80Bus.display_bus]
17+
data0 = 11
18+
data1 = 12
19+
data2 = 13
20+
data3 = 14
21+
data4 = 15
22+
data5 = 16
23+
data6 = 17
24+
data7 = 18
25+
dc = 8
26+
wr = 6
27+
cs = -1
28+
freq = 80000000
29+
30+
[I2C.Device.indev_device]
31+
bus = "i2c_bus"
32+
dev_id = "gsl1680.I2C_ADDR"
33+
reg_bits = "gsl1680.BITS"
34+
35+
[LT7381.display]
36+
data_bus = "display_bus"
37+
display_width = 800
38+
display_height = 480
39+
backlight_pin = 4
40+
reset_pin = 21
41+
wait_pin = 9
42+
color_space = "lv.COLOR_FORMAT.RGB565"
43+
44+
[display.set_power]
45+
params = [true]
46+
47+
[display.init]
48+
params = ["lt7381.TYPE_ER_TFTMC050_3"]
49+
50+
[GSL1680.indev]
51+
device = "indev_device"
52+
wake_pin = 0
53+
54+
[display.set_backlight]
55+
params = [100]
56+
57+
[task_handler.TaskHandler]
58+
params=[]

0 commit comments

Comments
 (0)