DRIVERS.md: Doc 4.2" ePaper display do_refresh.

pull/80/head
Peter Hinch 2024-07-24 17:48:29 +01:00
rodzic 99829bb266
commit 8a5c698655
4 zmienionych plików z 23 dodań i 7 usunięć

Wyświetl plik

@ -1445,7 +1445,7 @@ All methods are synchronous. Common API (nanogui and microgui):
applications, issue `.wait_until_ready`. Asynchronous and microgui applications applications, issue `.wait_until_ready`. Asynchronous and microgui applications
should wait on the `rfsh_done` event. should wait on the `rfsh_done` event.
Nanogui API: Synchronous methods for nanogui API:
* `sleep` No args. Applications should call this before power down to ensure * `sleep` No args. Applications should call this before power down to ensure
the display is put into the correct state. the display is put into the correct state.
@ -1457,12 +1457,28 @@ Nanogui API:
is called by the constructor. It may be used to recover from a `sleep` state is called by the constructor. It may be used to recover from a `sleep` state
but this is not recommended for V2 displays (see note on current consumption). but this is not recommended for V2 displays (see note on current consumption).
Asynchronous method for use in nanogui code:
* `do_refresh(split=0)` The unused arg is for compatibility with the micro-gui
core and is ignored. In asynchronous nano gui code, issuing
```python
while not ssd.ready():
await asyncio.sleep_ms(0)
await ssd.do_refresh()
```
causes the contents of the `ssd` frame buffer to be transferred to the display.
The duration of `do_refresh` blocking is set by `ssd.maxblock`: if this period
would be exceeded, `do_refresh` will yield to the scheduler before resuming. It
is essential to ensure that the display is ready before initiating a refresh;
the `do_refresh` method returns before the physical refresh is complete. The
method should not be issued in micro-gui applications.
### 5.3.3 Events ### 5.3.3 Events
These provide synchronisation in asynchronous applications. They are only These provide synchronisation in asynchronous applications. They are only
needed in more advanced asynchronous applications and their use is discussed in needed in more advanced asynchronous applications and their use is discussed in
[EPD Asynchronous support](./DRIVERS.md#6-epd-asynchronous-support). They are [EPD Asynchronous support](./DRIVERS.md#6-epd-asynchronous-support). They are
necessary in microgui applications to synchronise changes between partial and necessary in micro-gui applications to synchronise changes between partial and
full refrresh modes. See full refrresh modes. See
[this demo](https://github.com/peterhinch/micropython-micro-gui/blob/main/gui/demos/epaper.py). [this demo](https://github.com/peterhinch/micropython-micro-gui/blob/main/gui/demos/epaper.py).
* `updated` Set when framebuf has been copied to device. It is now safe to * `updated` Set when framebuf has been copied to device. It is now safe to
@ -1479,13 +1495,13 @@ full refrresh modes. See
seconds to enable viewing. This enables generic nanogui demos to be run on an seconds to enable viewing. This enables generic nanogui demos to be run on an
EPD. EPD.
The following are intended for use in micro-gui applications: The following are primarily for use in micro-gui applications:
* `maxblock=25` Defines the maximum period (in ms) that the asynchronous * `maxblock=25` Defines the maximum period (in ms) that the asynchronous
refresh can block before yielding to the scheduler. refresh can block before yielding to the scheduler.
* `blank_on_exit=True` On application shutdown by default the display is * `blank_on_exit=True` On application shutdown by default the display is
cleared. Setting this `False` overrides this, leaving the display contents in cleared. Setting this `False` overrides this, leaving the display contents in
place. place (this is an instruction to micro-gui).
Note that in synchronous applications with `demo_mode=False`, `refresh` returns Note that in synchronous applications with `demo_mode=False`, `refresh` returns
while the display is updating. Applications should issue `wait_until_ready` while the display is updating. Applications should issue `wait_until_ready`

Wyświetl plik

@ -257,7 +257,7 @@ class EPD(framebuf.FrameBuffer):
# Specific method for micro-gui. Unsuitable EPD's lack this method. Micro-gui # Specific method for micro-gui. Unsuitable EPD's lack this method. Micro-gui
# does not test for asyncio as this is guaranteed to be up. # does not test for asyncio as this is guaranteed to be up.
async def do_refresh(self, split): async def do_refresh(self, split=0):
assert not self._busy, "Refresh while busy" assert not self._busy, "Refresh while busy"
await self._as_show() # split=5 await self._as_show() # split=5

Wyświetl plik

@ -256,7 +256,7 @@ class EPD(framebuf.FrameBuffer):
self._busy = False self._busy = False
self.complete.set() self.complete.set()
async def do_refresh(self, split): # For micro-gui async def do_refresh(self, split=0): # For micro-gui
assert not self._busy, "Refresh while busy" assert not self._busy, "Refresh while busy"
await self._as_show() # split=5 await self._as_show() # split=5

Wyświetl plik

@ -227,7 +227,7 @@ class EPD(framebuf.FrameBuffer):
return inner return inner
# micro-gui API; asyncio is running. # micro-gui API; asyncio is running.
async def do_refresh(self, split): # split = 5 async def do_refresh(self, split=0): # split = 5
assert not self._busy, "Refresh while busy" assert not self._busy, "Refresh while busy"
if self._partial: if self._partial:
await self._as_show_partial() await self._as_show_partial()