class DSIDisplay – DSI Display-stuurprogramma

De DSIDisplay-klasse stuurt MIPI-DSI-panelen aan via de DSI-hostcontroller van de STM32. MIPI DSI is een gepakketteerd serieel displayprotocol dat één kloklane plus een of meer datalanes als differentiële paren gebruikt, waardoor het content met hoge resolutie (tot 1080p) over veel minder draden kan vervoeren dan 24-bit parallelle RGB. Pixels stromen rechtstreeks vanuit een SDRAM-gebaseerde framebuffer met de gekozen verversingsfrequentie, zodat de CPU niet bij het verversen betrokken is.

De paneelresolutie wordt geselecteerd via framesize met de constanten uit de display-module (QVGA, VGA, HD, FHD, …). Paneelspecifieke initialisatiesequenties worden ingeplugd via het controller-sleutelwoordargument – ST7701 dekt de gangbare ST7701-gebaseerde 480x800 DSI-panelen. DCS-commando’s kunnen out-of-band worden verzonden via bus_write() / bus_read(). De helderheid van de achtergrondverlichting wordt standaard als een eenvoudige GPIO aangestuurd, of door DACBacklight / PWMBacklight indien doorgegeven als backlight.

Frames worden weergegeven door write() aan te roepen met een image.Image. Het stuurprogramma handelt RGB-conversie, schaling, ROI, palet- en oriëntatietransformaties intern af.

Voorbeeld – de camera spiegelen naar een ST7701-gebaseerd 480x800 DSI-paneel:

import csi
import display
import image

csi0 = csi.CSI()
csi0.reset()
csi0.pixformat(csi.RGB565)
csi0.framesize(csi.QVGA)

lcd = display.DSIDisplay(framesize=display.TFWVGA,
                         controller=display.ST7701())

while True:
    lcd.write(csi0.snapshot(), hint=image.SCALE_ASPECT_KEEP)

Constructors

class display.DSIDisplay(framesize: int = FWVGA, *, refresh: int = 60, display_on: bool = True, triple_buffer: bool = True, portrait: bool = False, channel: int = 0, controller: Any | None = None, backlight: Any | None = None)

framesize Een van de standaard ondersteunde resoluties (bijv. display.FWVGA).

refresh Stelt de verversingsfrequentie van het scherm in hertz in. Het geldige bereik is 30 tot 120. Dit bestuurt de DSI-LCD-klok.

display_on Schakelt de display in.

triple_buffer Wijst drie framebuffers toe om scheurvrije display-updates mogelijk te maken. Vereist voor verticaal spiegelen in write().

portrait Verwisselt de breedte en hoogte van de framesize.

channel Het virtuele MIPI DSI-kanaal dat gebruikt wordt om met de display te communiceren.

controller Geef hier de klasse van de controllerchip door om deze samen met de display te initialiseren. Bijv. display.ST7701(), wat een standaard display-controller voor MIPI DSI-displays is.

backlight Geef een achtergrondverlichtingscontrollermodule op om te gebruiken. Standaard wordt de achtergrondverlichting via een GPIO-pin bestuurd.

deinit() None

Geeft de I/O-pinnen en het RAM dat door de klasse wordt gebruikt vrij. Dit wordt automatisch aangeroepen bij vernietiging.

width() int

Geeft de breedte van het scherm terug.

height() int

Geeft de hoogte van het scherm terug.

triple_buffer() int

Geeft terug of triple buffering is ingeschakeld.

bgr() int

Geeft terug of de display BGR-geordende pixels verwacht.

byte_swap() int

Geeft terug of de display byte-geswapte pixels verwacht.

framesize() int

Geeft de framesize-constante terug waarmee de display is geïnitialiseerd.

refresh() int

Geeft de verversingsfrequentie in hertz terug.

write(image: image.Image, x: int = 0, y: int = 0, x_scale: float = 1.0, y_scale: float = 1.0, roi: Tuple[int, int, int, int] | None = None, rgb_channel: int = -1, alpha: int = 255, color_palette: image.Image | None = None, alpha_palette: image.Image | None = None, hint: int = 0) None

Geeft een image weer waarvan de linkerbovenhoek begint op locatie x, y.

image mag een padstring zijn in plaats van een image-object om de afbeelding automatisch van schijf te laden. Bijv. write("test.jpg").

x_scale bepaalt hoeveel de weergegeven afbeelding in de x-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding horizontaal gespiegeld. Als y_scale niet is opgegeven, komt het overeen met x_scale om de beeldverhouding te behouden.

y_scale bepaalt hoeveel de weergegeven afbeelding in de y-richting wordt geschaald (float). Als deze waarde negatief is, wordt de afbeelding verticaal gespiegeld. Verticaal spiegelen vereist triple_buffer=True. Als x_scale niet is opgegeven, komt het overeen met y_scale.

roi is de tuple van de aandachtsgebiedrechthoek (x, y, w, h) van de afbeelding die moet worden weergegeven.

rgb_channel is het RGB-kanaal (0=R, 1=G, 2=B) dat uit een RGB565-afbeelding moet worden geëxtraheerd en in grijswaarden op de display moet worden weergegeven. -1 schakelt extractie uit. Het geldige bereik is -1 tot 2.

alpha bepaalt hoe ondoorzichtig de afbeelding is. 255 geeft een ondoorzichtige afbeelding weer, lagere waarden mengen richting zwart, en 0 produceert een volledig zwarte afbeelding. Het geldige bereik is 0 tot 255.

color_palette mag een kleurpalet-enum zijn of een RGB565-afbeelding van 256 pixels die als kleur-opzoektabel op de grijswaarde van de invoerafbeelding wordt gebruikt. Toegepast na rgb_channel-extractie.

alpha_palette mag een grijswaardenafbeelding van 256 pixels zijn die als alfa-opzoektabel wordt gebruikt en alpha per invoerpixel-grijswaarde moduleert. Toegepast na rgb_channel-extractie.

hint is een logische OR van de vlaggen:

clear(display_off: bool = False) None

Wist de LCD-framebuffer naar zwart.

display_off indien True schakelt de displaylogica uit in plaats van de framebuffer te wissen.

backlight(value: int | None = None) int

Stelt de dimwaarde van de LCD-achtergrondverlichting in, 0 (uit) tot 100 (aan). Geef geen argumenten door om de huidige waarde van de achtergrondverlichting op te halen.

Tenzij er een DACBacklight- of PWMBacklight-controller aan de constructor wordt doorgegeven, wordt de achtergrondverlichting als een GPIO-pin bestuurd en zal deze alleen van 0 (uit) naar niet-nul (aan) gaan.

bus_write(cmd: int, args: int | bytes | None = None, *, dcs: bool = False) None

Verzendt DSI-commando cmd naar de display.

args is een optionele integer of buffer die commandoparameters bevat.

dcs indien True verzendt het commando als een DCS-pakket (Display Command Set).

bus_read(cmd: int, len: int, args: int | bytes | None = None, *, dcs: bool = False) bytes

Leest len bytes van de display met DSI-commando cmd.

args is een optionele integer of buffer die commandoparameters bevat.

dcs indien True verzendt het commando als een DCS-pakket (Display Command Set).

ioctl(cmd: int, arg: Any | None = None) Any

Verzendt een stuurprogrammaspecifieke ioctl cmd met optioneel arg naar de display. Genereert ValueError als de display ioctl niet ondersteunt.