Skip to content

Commit 5107c4e

Browse files
committed
working on the global rotate
1 parent b93935b commit 5107c4e

Some content is hidden

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

43 files changed

+745
-823
lines changed

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/nv3041a/nv3041a.py

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ def __init__(
9595
buf_size = display_width * display_height * lv.color_format_get_size(color_space)
9696

9797
if frame_buffer1 is None:
98+
if frame_buffer2 is not None:
99+
frame_buffer2.free()
100+
98101
gc.collect()
99102

100103
for flags in (
@@ -104,18 +107,16 @@ def __init__(
104107
lcd_bus.MEMORY_SPIRAM
105108
):
106109
try:
107-
frame_buffer1 = (
108-
data_bus.allocate_framebuffer(buf_size, flags)
109-
)
110+
frame_buffer1 = lcd_bus.framebuffer(buf_size, flags)
110111

111112
if (flags | lcd_bus.MEMORY_DMA) == flags:
112-
frame_buffer2 = (
113-
data_bus.allocate_framebuffer(buf_size, flags)
114-
)
113+
frame_buffer2 = lcd_bus.framebuffer(buf_size, flags)
115114

116115
break
117116
except MemoryError:
118-
frame_buffer1 = data_bus.free_framebuffer(frame_buffer1) # NOQA
117+
if frame_buffer1 is not None:
118+
frame_buffer1.free()
119+
frame_buffer1 = None
119120

120121
if frame_buffer1 is None:
121122
raise MemoryError(
@@ -151,11 +152,7 @@ def __init__(
151152
offset_y,
152153
color_byte_order,
153154
color_space, # NOQA
154-
# we don't need to sue RGB565 byte swap so we override it
155-
rgb565_byte_swap=False,
156-
_cmd_bits=_cmd_bits,
157-
_param_bits=8,
158-
_init_bus=True
155+
_cmd_bits=_cmd_bits
159156
)
160157

161158
def _flush_ready_cb(self, *_):
@@ -169,7 +166,7 @@ def _flush_ready_cb(self, *_):
169166

170167
def set_params(self, cmd, params=None):
171168
cmd = self.__cmd_modifier(cmd)
172-
self._data_bus.tx_param(cmd, params)
169+
self._data_bus.tx_param(cmd, params, False)
173170

174171
def _set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
175172
return self._dummy_set_memory_location(x1, y1, x2, y2)
@@ -182,7 +179,7 @@ def _dummy_set_memory_location(self, x1: int, y1: int, x2: int, y2: int):
182179
param_buf[2] = (x2 >> 8) & 0xFF
183180
param_buf[3] = x2 & 0xFF
184181

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

187184
def _flush_cb(self, _, area, color_p):
188185
x1 = area.x1 + self._offset_x
@@ -202,5 +199,9 @@ def _flush_cb(self, _, area, color_p):
202199
# Divide buffer in 2 chunks:
203200
first_chunk = int(size / 2)
204201

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())
202+
self._data_bus.tx_color(self.__ramwr, data_view[:first_chunk], x1, y1,
203+
x2, y2, self._rotation, False,
204+
self._rgb565_dither)
205+
self._data_bus.tx_color(self.__ramwrc, data_view[first_chunk:], x1, y1,
206+
x2, y2, self._rotation, self._disp_drv.flush_is_last(),
207+
self._rgb565_dither)

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/sdl_display/sdl_display.py

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55
from micropython import const # NOQA
66
import micropython # NOQA
77

8+
import lcd_bus
9+
10+
811
# Window has been shown
912
_SDL_WINDOWEVENT_SHOWN = const(1)
1013
# Window has been hidden
@@ -90,43 +93,35 @@ def __init__(
9093
data_bus=None,
9194
display_width=display_width,
9295
display_height=display_height,
93-
frame_buffer1=frame_buffer1,
94-
frame_buffer2=frame_buffer2,
95-
reset_pin=None,
96-
reset_state=display_driver_framework.STATE_HIGH,
97-
power_pin=None,
98-
power_on_state=display_driver_framework.STATE_HIGH,
99-
backlight_pin=None,
100-
backlight_on_state=display_driver_framework.STATE_HIGH,
10196
offset_x=offset_x,
10297
offset_y=offset_y,
103-
color_byte_order=display_driver_framework.BYTE_ORDER_RGB,
10498
color_space=color_space,
105-
rgb565_byte_swap=False,
106-
_init_bus=False
99+
_init_bus=False,
100+
_sw_rotate=True
107101
)
108102

109103
self._data_bus = data_bus
110104

111-
buffer_size = lv.color_format_get_size(color_space)
112-
buffer_size *= display_width * display_height
105+
buffer_size = int(display_width * display_height *
106+
lv.color_format_get_size(color_space) / 10)
113107

114108
if frame_buffer1 is None:
115-
frame_buffer1 = data_bus.allocate_framebuffer(buffer_size, 0)
109+
frame_buffer1 = lcd_bus.framebuffer(buffer_size, 0)
116110

117-
if frame_buffer2 is None:
118-
frame_buffer2 = data_bus.allocate_framebuffer(buffer_size, 0)
119-
else:
120-
if buffer_size != len(frame_buffer1):
121-
raise RuntimeError('frame buffer is not large enough')
111+
if frame_buffer2 is not None:
112+
frame_buffer2.free()
122113

123-
if frame_buffer2 is not None:
124-
if len(frame_buffer1) != len(frame_buffer2):
125-
raise RuntimeError('Frame buffer sizes are not equal.')
114+
frame_buffer2 = lcd_bus.framebuffer(buffer_size, 0)
126115

127116
self._frame_buffer1 = frame_buffer1
128117
self._frame_buffer2 = frame_buffer2
129118

119+
self._fb1_mv = memoryview(frame_buffer1)
120+
if frame_buffer2 is not None:
121+
self._fb2_mv = memoryview(frame_buffer2)
122+
else:
123+
self._fb2_mv = None
124+
130125
self._disp_drv = lv.display_create(display_width, display_height) # NOQA
131126

132127
self._disp_drv.set_color_format(color_space)
@@ -149,34 +144,36 @@ def __init__(
149144
lv.COLOR_FORMAT.RAW_ALPHA: _SDL_PIXELFORMAT_RGBA8888 # NOQA
150145
}
151146

152-
cf = self._cf = mapping.get(color_space, None)
153-
154-
if cf is None:
147+
if color_space not in mapping:
155148
raise RuntimeError('Color format is not supported')
156149

150+
cf = self._cf = mapping[color_space]
151+
157152
data_bus.init(
158153
display_width,
159154
display_height,
160155
lv.color_format_get_size(color_space) * 8,
161156
cf,
162-
False,
163157
8,
164-
8
158+
8,
159+
self._frame_buffer1,
160+
self._frame_buffer2,
161+
True,
162+
False,
165163
)
166164

167165
self._disp_drv.set_flush_cb(self._flush_cb)
168166

169167
self._disp_drv.set_buffers(
170-
frame_buffer1,
171-
frame_buffer2,
168+
self._fb1_mv,
169+
self._fb2_mv,
172170
len(frame_buffer1),
173-
lv.DISPLAY_RENDER_MODE.DIRECT # NOQA
171+
lv.DISPLAY_RENDER_MODE.PARTIAL # NOQA
174172
)
175173

176174
self._ignore_size_chg = False
177175

178176
data_bus.register_callback(self._flush_ready_cb)
179-
180177
data_bus.register_quit_callback(self._quit_cb)
181178
data_bus.register_window_callback(self._windows_event_cb)
182179

@@ -208,12 +205,16 @@ def _res_chg_event_cb(self, _):
208205

209206
buf_size = int(hor_res * ver_res * bpp)
210207

211-
self._frame_buffer1 = self._data_bus.realloc_buffer(buf_size, 1) # NOQA
212-
self._frame_buffer2 = self._data_bus.realloc_buffer(buf_size, 2) # NOQA
208+
self._data_bus.realloc_buffer(buf_size, 1) # NOQA
209+
210+
self._fb1_mv = memoryview(self._frame_buffer1)
211+
212+
if self._frame_buffer2 is not None:
213+
self._fb2_mv = memoryview(self._frame_buffer2)
213214

214215
self._disp_drv.set_buffers(
215-
self._frame_buffer1,
216-
self._frame_buffer2,
216+
self._fb1_mv,
217+
self._fb2_mv,
217218
len(self._frame_buffer1),
218219
lv.DISPLAY_RENDER_MODE.DIRECT # NOQA
219220
)

api_drivers/common_api_drivers/display/ssd1306/ssd1306.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ def __init__(
5151

5252
if frame_buffer1 is None:
5353

54+
if frame_buffer2 is not None:
55+
frame_buffer2.free()
56+
5457
gc.collect()
5558

5659
for flags in (
@@ -60,18 +63,15 @@ def __init__(
6063
lcd_bus.MEMORY_SPIRAM
6164
):
6265
try:
63-
frame_buffer1 = (
64-
data_bus.allocate_framebuffer(buf_size, flags)
65-
)
66+
frame_buffer1 = lcd_bus.framebuffer(buf_size, flags)
6667

6768
if (flags | lcd_bus.MEMORY_DMA) == flags:
68-
frame_buffer2 = (
69-
data_bus.allocate_framebuffer(buf_size, flags)
70-
)
71-
69+
frame_buffer2 = lcd_bus.framebuffer(buf_size, flags)
7270
break
7371
except MemoryError:
74-
frame_buffer1 = data_bus.free_framebuffer(frame_buffer1) # NOQA
72+
if frame_buffer1 is not None:
73+
frame_buffer1.free()
74+
frame_buffer1 = None
7575

7676
if frame_buffer1 is None:
7777
raise MemoryError(
@@ -92,17 +92,13 @@ def __init__(
9292
frame_buffer2=frame_buffer2,
9393
reset_pin=reset_pin,
9494
reset_state=reset_state,
95-
power_pin=None,
9695
backlight_pin=backlight_pin,
9796
backlight_on_state=backlight_on_state,
9897
offset_x=offset_x,
9998
offset_y=offset_y,
100-
color_byte_order=display_driver_framework.BYTE_ORDER_RGB,
10199
color_space=color_space, # NOQA
102100
rgb565_byte_swap=rgb565_byte_swap,
103-
_cmd_bits=8,
104-
_param_bits=8,
105-
_init_bus=True
101+
_sw_rotate=True
106102
)
107103

108104
self._power_pin = power_pin
@@ -126,7 +122,6 @@ def set_power(self, value):
126122
self.set_params(_DISP_OFF)
127123

128124
def _flush_cb(self, _, area, color_p):
129-
130125
x1 = 0
131126
x2 = self.display_width - 1
132127

@@ -140,11 +135,11 @@ def _flush_cb(self, _, area, color_p):
140135

141136
self._param_buf[0] = x1
142137
self._param_buf[1] = x2
143-
self.set_params(_SET_COL_ADDR, self._param_mv[:2])
138+
self._data_bus.tx_param(_SET_COL_ADDR, self._param_mv[:2], False)
144139

145140
self._param_buf[0] = y1
146141
self._param_buf[1] = y2
147-
self.set_params(_SET_PAGE_ADDR, self._param_mv[:2])
142+
self._data_bus.tx_param(_SET_PAGE_ADDR, self._param_mv[:2], True)
148143

149144
size = (
150145
(area.x2 - area.x1 + 1) *
@@ -156,4 +151,5 @@ def _flush_cb(self, _, area, color_p):
156151
# what converts from the C_Array object the binding passes into a
157152
# memoryview object that can be passed to the bus drivers
158153
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())
154+
self._data_bus.tx_color(0, data_view, x1, y1, x2, y2, self._rotation,
155+
self._disp_drv.flush_is_last(), self._rgb565_dither)

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/display/st7701/st7701.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ def __init__(
210210
_cmd_bits=8,
211211
_param_bits=8,
212212
_init_bus=False,
213+
_sw_rotate=True
213214
)
214215

215216
def _spi_3wire_init(self, type): # NOQA

0 commit comments

Comments
 (0)