Skip to content

Commit 98f65e4

Browse files
committed
Big update to the lcd bus classes
1 parent 4ca4f69 commit 98f65e4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+5923
-2819
lines changed

api_drivers/common_api_drivers/display/axs15231b/axs15231b.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def set_params(self, cmd, params=None):
134134
cmd <<= 8
135135
cmd |= _WRITE_CMD << 24
136136

137-
self._data_bus.tx_param(cmd, params)
137+
self._data_bus.tx_param(cmd, params, False)
138138

139139
def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
140140
if y1 == 0:
@@ -148,18 +148,19 @@ def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
148148
param_buf[1] = x1 & 0xFF
149149
param_buf[2] = (x2 >> 8) & 0xFF
150150
param_buf[3] = x2 & 0xFF
151-
152-
self._data_bus.tx_param(_CASET, self._param_mv)
153-
154151
if self.__qspi:
152+
self._data_bus.tx_param(_CASET, self._param_mv, True)
153+
155154
cmd &= 0xFF
156155
cmd <<= 8
157156
cmd |= _WRITE_COLOR << 2
158157
else:
158+
self._data_bus.tx_param(_CASET, self._param_mv, False)
159+
159160
param_buf[0] = (y1 >> 8) & 0xFF
160161
param_buf[1] = y1 & 0xFF
161162
param_buf[2] = (y2 >> 8) & 0xFF
162163
param_buf[3] = y2 & 0xFF
163-
self._data_bus.tx_param(_RASET, self._param_mv)
164+
self._data_bus.tx_param(_RASET, self._param_mv, True)
164165

165166
return cmd

api_drivers/common_api_drivers/display/ili9225/ili9225.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,28 +35,28 @@ def _set_memory_location(self, x1, y1, x2, y2):
3535

3636
param_buf[0] = (x1 >> 8) & 0xFF
3737
param_buf[1] = x1 & 0xFF
38-
self._data_bus.tx_param(_HWINADDR1, self._param_mv[:2])
38+
self._data_bus.tx_param(_HWINADDR1, self._param_mv[:2], False)
3939

4040
param_buf[0] = (x2 >> 8) & 0xFF
4141
param_buf[1] = x2 & 0xFF
42-
self._data_bus.tx_param(_HWINADDR2, self._param_mv[:2])
42+
self._data_bus.tx_param(_HWINADDR2, self._param_mv[:2], False)
4343

4444
# Page addresses
4545
param_buf[0] = (y1 >> 8) & 0xFF
4646
param_buf[1] = y1 & 0xFF
47-
self._data_bus.tx_param(_VWINADDR1, self._param_mv[:2])
47+
self._data_bus.tx_param(_VWINADDR1, self._param_mv[:2], False)
4848

4949
param_buf[0] = (y2 >> 8) & 0xFF
5050
param_buf[1] = y2 & 0xFF
51-
self._data_bus.tx_param(_VWINADDR2, self._param_mv[:2])
51+
self._data_bus.tx_param(_VWINADDR2, self._param_mv[:2], False)
5252

5353
param_buf[0] = (x1 >> 8) & 0xFF
5454
param_buf[1] = x1 & 0xFF
55-
self._data_bus.tx_param(_RAMADDRSET1, self._param_mv[:2])
55+
self._data_bus.tx_param(_RAMADDRSET1, self._param_mv[:2], False)
5656

5757
param_buf[0] = (y1 >> 8) & 0xFF
5858
param_buf[1] = y1 & 0xFF
59-
self._data_bus.tx_param(_RAMADDRSET2, self._param_mv[:2])
59+
self._data_bus.tx_param(_RAMADDRSET2, self._param_mv[:2], True)
6060

6161
return _RAMWR
6262

api_drivers/common_api_drivers/display/lt7381/lt7381.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ def _set_memory_location(self, x_start, y_start, x_end, y_end):
209209
self.set_params(_CURH_L, x_start & 0xff)
210210
self.set_params(_CURH_H, (x_start >> 8) & 0xFF)
211211
self.set_params(_CURV_L, y_start & 0xFF)
212-
self.set_params(_CURV_H, (y_start >> 8) & 0xFF)
212+
self._disp_drv.tx_param(_CURV_H, (y_start >> 8) & 0xFF, True)
213213

214214
return _MRWDP
215215

@@ -236,4 +236,4 @@ def _flush_cb(self, _, area, color_p):
236236
data_view = color_p.__dereference__(size)
237237

238238
self._data_bus.tx_color(cmd, data_view, x1, y1, x2, y2, self._rotation,
239-
self._disp_drv.flush_is_last())
239+
self._dither, self._disp_drv.flush_is_last())

api_drivers/common_api_drivers/display/nv3041a/nv3041a.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ def _flush_ready_cb(self, *_):
169169

170170
def set_params(self, cmd, params=None):
171171
cmd = self.__cmd_modifier(cmd)
172-
self._data_bus.tx_param(cmd, params)
172+
self._data_bus.tx_param(cmd, params, False)
173173

174174
def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
175175
return self._dummy_set_memory_location(x1, y1, x2, y2)
@@ -182,7 +182,7 @@ def _dummy_set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
182182
param_buf[2] = (x2 >> 8) & 0xFF
183183
param_buf[3] = x2 & 0xFF
184184

185-
self._data_bus.tx_param(self.__caset, self._param_mv)
185+
self._data_bus.tx_param(self.__caset, self._param_mv, True)
186186

187187
def _flush_cb(self, _, area, color_p):
188188
x1 = area.x1 + self._offset_x
@@ -199,8 +199,11 @@ def _flush_cb(self, _, area, color_p):
199199

200200
data_view = color_p.__dereference__(size)
201201

202-
# Divide buffer in 2 chunks:
203-
first_chunk = int(size / 2)
202+
half_height = int(height / 2)
204203

205-
self._data_bus.tx_color(self.__ramwr, data_view[:first_chunk], x1, y1, x2, y2, self._rotation, False)
206-
self._data_bus.tx_color(self.__ramwrc, data_view[first_chunk:], x1, y1, x2, y2, self._rotation, self._disp_drv.flush_is_last())
204+
first_chunk = width * half_height * lv.color_format_get_size(self._color_space)
205+
206+
self._data_bus.tx_color(self.__ramwr, data_view[:first_chunk], x1, y1, x2, half_height - 1, self._rotation,
207+
self._dither, False)
208+
self._data_bus.tx_color(self.__ramwrc, data_view[first_chunk:], x1, height - half_height - 1, x2, y2, self._rotation,
209+
self._dither, self._disp_drv.flush_is_last())

api_drivers/common_api_drivers/display/ra8876/ra8876.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -556,32 +556,32 @@ def _set_memory_location(self, x_start, y_start, x_end, y_end):
556556

557557
# set active window start X/Y
558558
buf[0] = x_start & 0xFF
559-
self.set_params(_AWUL_X0, mv)
559+
self._data_bus.tx_param(_AWUL_X0, mv, False)
560560
buf[0] = (x_start >> 8) & 0xFF
561-
self.set_params(_AWUL_X1, mv)
561+
self._data_bus.tx_param(_AWUL_X1, mv, False)
562562
buf[0] = y_start & 0xFF
563-
self.set_params(_AWUL_Y0, mv)
563+
self._data_bus.tx_param(_AWUL_Y0, mv, False)
564564
buf[0] = (y_start >> 8) & 0xFF
565-
self.set_params(_AWUL_Y1, mv)
565+
self._data_bus.tx_param(_AWUL_Y1, mv, False)
566566

567567
# set active window width and height
568568
buf[0] = (x_end - x_start) & 0xFF
569-
self.set_params(_AW_WTH0, mv)
569+
self._data_bus.tx_param(_AW_WTH0, mv, False)
570570
buf[0] = ((x_end - x_start) >> 8) & 0xFF
571-
self.set_params(_AW_WTH1, mv)
571+
self._data_bus.tx_param(_AW_WTH1, mv, False)
572572
buf[0] = (y_end - y_start) & 0xFF
573-
self.set_params(_AW_HT0, mv)
573+
self._data_bus.tx_param(_AW_HT0, mv, False)
574574
buf[0] = ((y_end - y_start) >> 8) & 0xFF
575-
self.set_params(_AW_HT1, mv)
575+
self._data_bus.tx_param(_AW_HT1, mv, False)
576576

577577
# set cursor
578578
buf[0] = x_start & 0xff
579-
self.set_params(_CURH0, mv)
579+
self._data_bus.tx_param(_CURH0, mv, False)
580580
buf[0] = (x_start >> 8) & 0xFF
581-
self.set_params(_CURH1, mv)
581+
self._data_bus.tx_param(_CURH1, mv, False)
582582
buf[0] = y_start & 0xFF
583-
self.set_params(_CURV0, mv)
583+
self._data_bus.tx_param(_CURV0, mv, False)
584584
buf[0] = (y_start >> 8) & 0xFF
585-
self.set_params(_CURV1, mv)
585+
self._data_bus.tx_param(_CURV1, mv, True)
586586

587587
return _MRWDP

api_drivers/common_api_drivers/display/rgb_display/rgb_display.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def __init__(
5656
rgb565_byte_swap=rgb565_byte_swap,
5757
_cmd_bits=8,
5858
_param_bits=8,
59-
_init_bus=True
59+
_init_bus=True,
60+
_sw_rotation=True
6061
)
6162

6263
def init(self):

api_drivers/common_api_drivers/display/rm68120/rm68120.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ def _set_memory_location(self, x1, y1, x2, y2):
3030
param_buf[2] = (x2 >> 8) & 0xFF
3131
param_buf[3] = x2 & 0xFF
3232

33-
self._data_bus.tx_param(_CASET, self._param_mv[:4])
33+
self._data_bus.tx_param(_CASET, self._param_mv[:4], False)
3434

3535
# Page addresses
3636
param_buf[0] = (y1 >> 8) & 0xFF
3737
param_buf[1] = y1 & 0xFF
3838
param_buf[2] = (y2 >> 8) & 0xFF
3939
param_buf[3] = y2 & 0xFF
4040

41-
self._data_bus.tx_param(_PASET, self._param_mv[:4])
41+
self._data_bus.tx_param(_PASET, self._param_mv[:4], True)
4242

4343
return _RAMWR
4444

@@ -57,4 +57,4 @@ def _on_size_change(self, _):
5757
0x00,
5858
self._madctl(self._color_byte_order, ~rotation, self._ORIENTATION_TABLE) # NOQA
5959
])
60-
self._data_bus.tx_param(_MADCTL, param_buf)
60+
self._data_bus.tx_param(_MADCTL, param_buf, False)

api_drivers/common_api_drivers/display/spd2010/spd2010.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def _flush_ready_cb(self, *_):
166166

167167
def set_params(self, cmd, params=None):
168168
cmd = self.__cmd_modifier(cmd)
169-
self._data_bus.tx_param(cmd, params)
169+
self._data_bus.tx_param(cmd, params, False)
170170

171171
def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
172172
param_buf = self._param_buf # NOQA
@@ -176,14 +176,14 @@ def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
176176
param_buf[2] = (x2 >> 8) & 0xFF
177177
param_buf[3] = x2 & 0xFF
178178

179-
self._data_bus.tx_param(self.__caset, self._param_mv)
179+
self._data_bus.tx_param(self.__caset, self._param_mv, False)
180180

181181
param_buf[0] = (y1 >> 8) & 0xFF
182182
param_buf[1] = y1 & 0xFF
183183
param_buf[2] = (y2 >> 8) & 0xFF
184184
param_buf[3] = y2 & 0xFF
185185

186-
self._data_bus.tx_param(self.__raset, self._param_mv)
186+
self._data_bus.tx_param(self.__raset, self._param_mv, True)
187187

188188
def _flush_cb(self, _, area, color_p):
189189
x1 = area.x1 + self._offset_x
@@ -199,4 +199,5 @@ def _flush_cb(self, _, area, color_p):
199199
size = width * height * lv.color_format_get_size(self._color_space)
200200

201201
data_view = color_p.__dereference__(size)
202-
self._data_bus.tx_color(self.__ramwr, data_view, x1, y1, x2, y2, self._rotation, False)
202+
self._data_bus.tx_color(self.__ramwr, data_view, x1, y1, x2, y2, self._rotation,
203+
self._dither, self._disp_drv.flush_is_last())

api_drivers/common_api_drivers/display/ssd1306/ssd1306.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,11 +140,11 @@ def _flush_cb(self, _, area, color_p):
140140

141141
self._param_buf[0] = x1
142142
self._param_buf[1] = x2
143-
self.set_params(_SET_COL_ADDR, self._param_mv[:2])
143+
self._data_bus.tx_param(_SET_COL_ADDR, self._param_mv[:2], False)
144144

145145
self._param_buf[0] = y1
146146
self._param_buf[1] = y2
147-
self.set_params(_SET_PAGE_ADDR, self._param_mv[:2])
147+
self._data_bus.tx_param(_SET_PAGE_ADDR, self._param_mv[:2], True)
148148

149149
size = (
150150
(area.x2 - area.x1 + 1) *
@@ -156,4 +156,4 @@ def _flush_cb(self, _, area, color_p):
156156
# what converts from the C_Array object the binding passes into a
157157
# memoryview object that can be passed to the bus drivers
158158
data_view = color_p.__dereference__(size)
159-
self._data_bus.tx_color(0, data_view, x1, y1, x2, y2, self._rotation, self._disp_drv.flush_is_last())
159+
self._data_bus.tx_color(0, data_view, x1, y1, x2, y2, self._rotation, self._dither, self._disp_drv.flush_is_last())

api_drivers/common_api_drivers/display/ssd1351/ssd1351.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ def _set_memory_location(self, x1, y1, x2, y2):
2929
param_buf[2] = (x2 >> 8) & 0xFF
3030
param_buf[3] = x2 & 0xFF
3131

32-
self._data_bus.tx_param(_CASET, self._param_mv[:4])
32+
self._data_bus.tx_param(_CASET, self._param_mv[:4], False)
3333

3434
# Page addresses
3535
param_buf[0] = (y1 >> 8) & 0xFF
3636
param_buf[1] = y1 & 0xFF
3737
param_buf[2] = (y2 >> 8) & 0xFF
3838
param_buf[3] = y2 & 0xFF
3939

40-
self._data_bus.tx_param(_PASET, self._param_mv[:4])
40+
self._data_bus.tx_param(_PASET, self._param_mv[:4], True)
4141

4242
return _RAMWR

api_drivers/common_api_drivers/frozen/other/auto_rotation.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Copyright (c) 2024 - 2025 Kevin G. Schlosser
22

33
import lvgl as lv
4+
import fusion
5+
46

57

68
class AutoRotation:

api_drivers/py_api_drivers/frozen/display/display_driver_framework.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ def __init__(
8484
rgb565_byte_swap=False,
8585
_cmd_bits=8,
8686
_param_bits=8,
87-
_init_bus=True
87+
_init_bus=True,
88+
_sw_rotate=False
8889
):
8990
if power_on_state not in (STATE_HIGH, STATE_LOW):
9091
raise RuntimeError(
@@ -130,6 +131,8 @@ def __init__(
130131
self._rotation = lv.DISPLAY_ROTATION._0 # NOQA
131132

132133
self._rgb565_byte_swap = rgb565_byte_swap
134+
self._dither = False
135+
self._sw_rotate = _sw_rotate
133136
self._cmd_bits = _cmd_bits
134137
self._param_bits = _param_bits
135138

@@ -239,6 +242,7 @@ def _init_bus(self):
239242
lv.color_format_get_size(self._color_space) * 8,
240243
buffer_size,
241244
self._rgb565_byte_swap,
245+
self._sw_rotate,
242246
self._cmd_bits,
243247
self._param_bits
244248
)
@@ -284,6 +288,12 @@ def _init_bus(self):
284288

285289
self._displays.append(self)
286290

291+
def set_dither(self, value):
292+
self._dither = bool(value)
293+
294+
def get_dither(self):
295+
return self._dither
296+
287297
def _on_size_change(self, _):
288298
rotation = self._disp_drv.get_rotation()
289299
self._width = self._disp_drv.get_horizontal_resolution()
@@ -298,7 +308,7 @@ def _on_size_change(self, _):
298308
self._param_buf[0] = (self._madctl(
299309
self._color_byte_order, self._ORIENTATION_TABLE, ~rotation
300310
))
301-
self._data_bus.tx_param(_MADCTL, self._param_mv[:1])
311+
self._data_bus.tx_param(_MADCTL, self._param_mv[:1], False)
302312

303313
@staticmethod
304314
def get_displays():
@@ -484,10 +494,7 @@ def init(self, type=None): # NOQA
484494
self._initilized = True
485495

486496
def set_params(self, cmd, params=None):
487-
self._data_bus.tx_param(cmd, params)
488-
489-
def get_params(self, cmd, params):
490-
self._data_bus.rx_param(cmd, params)
497+
self._data_bus.tx_param(cmd, params, False)
491498

492499
def get_power(self):
493500
if self._power_pin is None:
@@ -560,15 +567,15 @@ def _set_memory_location(self, x1, y1, x2, y2):
560567
param_buf[2] = (x2 >> 8) & 0xFF
561568
param_buf[3] = x2 & 0xFF
562569

563-
self._data_bus.tx_param(_CASET, self._param_mv)
570+
self._data_bus.tx_param(_CASET, self._param_mv, False)
564571

565572
# Page addresses
566573
param_buf[0] = (y1 >> 8) & 0xFF
567574
param_buf[1] = y1 & 0xFF
568575
param_buf[2] = (y2 >> 8) & 0xFF
569576
param_buf[3] = y2 & 0xFF
570577

571-
self._data_bus.tx_param(_RASET, self._param_mv)
578+
self._data_bus.tx_param(_RASET, self._param_mv, True)
572579

573580
return _RAMWR
574581

@@ -592,7 +599,7 @@ def _flush_cb(self, _, area, color_p):
592599
# memoryview object that can be passed to the bus drivers
593600
data_view = color_p.__dereference__(size)
594601
self._data_bus.tx_color(cmd, data_view, x1, y1, x2, y2,
595-
self._rotation, self._disp_drv.flush_is_last())
602+
self._rotation, self._dither, self._disp_drv.flush_is_last())
596603

597604
# we always register this callback no matter what. This is what tells LVGL
598605
# that the buffer is able to be written to. If this callback doesn't get

api_drivers/py_api_drivers/frozen/display/rgb_display_framework.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ def __init__(
3535
spi_3wire_shared_pins=False,
3636
_cmd_bits=8,
3737
_param_bits=8,
38-
_init_bus=True
38+
_init_bus=True,
39+
_sw_rotate=True,
3940
):
4041

4142
self._spi_3wire = spi_3wire
@@ -60,7 +61,8 @@ def __init__(
6061
rgb565_byte_swap=rgb565_byte_swap,
6162
_cmd_bits=_cmd_bits,
6263
_param_bits=_param_bits,
63-
_init_bus=_init_bus
64+
_init_bus=_init_bus,
65+
_sw_rotate=_sw_rotate
6466
)
6567

6668
def set_params(self, cmd, params=None):

0 commit comments

Comments
 (0)