class DSIDisplay – Driver de afișaj DSI

Clasa DSIDisplay acționează panourile MIPI-DSI prin controlerul gazdă DSI al STM32. MIPI DSI este un protocol serial de afișare bazat pe pachete care folosește o linie de ceas plus una sau mai multe linii de date sub formă de perechi diferențiale, ceea ce îi permite să transporte conținut de înaltă rezoluție (până la 1080p) prin mult mai puține fire decât RGB-ul paralel pe 24 de biți. Pixelii sunt transmiși direct dintr-un tampon de cadre (frame buffer) susținut de SDRAM la rata de reîmprospătare aleasă, astfel încât procesorul nu este implicat în reîmprospătare.

Rezoluția panoului este selectată prin framesize folosind constantele din modulul display (QVGA, VGA, HD, FHD, …). Secvențele de inițializare specifice panoului sunt conectate prin argumentul cu cuvânt-cheie controllerST7701 acoperă panourile DSI 480x800 obișnuite bazate pe ST7701. Comenzile DCS pot fi emise în afara benzii prin bus_write() / bus_read(). Luminozitatea iluminării de fundal este acționată implicit ca un simplu GPIO sau prin DACBacklight / PWMBacklight dacă este transmisă ca backlight.

Cadrele sunt prezentate apelând write() cu un image.Image. Driverul gestionează intern conversia RGB, scalarea, ROI, paleta și transformările de orientare.

Exemplu – oglindirea camerei pe un panou DSI 480x800 bazat pe ST7701:

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)

Constructori

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 Una dintre rezoluțiile standard acceptate (de ex. display.FWVGA).

refresh Setează rata de reîmprospătare a ecranului în herți. Intervalul valid este de la 30 la 120. Aceasta controlează ceasul LCD-ului DSI.

display_on Activează afișajul.

triple_buffer Alocă trei tampoane de cadre pentru a permite actualizări ale afișajului fără efect de rupere. Necesar pentru răsturnarea verticală în write().

portrait Interschimbă lățimea și înălțimea framesize.

channel Canalul virtual MIPI DSI folosit pentru a comunica cu afișajul.

controller Transmiteți aici clasa cipului controler pentru a-l inițializa împreună cu afișajul. De ex. display.ST7701(), care este un controler de afișaj standard pentru afișaje MIPI DSI.

backlight Specifică un modul de controler de iluminare de fundal care va fi folosit. În mod implicit, iluminarea de fundal va fi controlată printr-un pin GPIO.

deinit() None

Eliberează pinii de I/O și memoria RAM folosite de clasă. Aceasta este apelată automat la distrugere.

width() int

Returnează lățimea ecranului.

height() int

Returnează înălțimea ecranului.

triple_buffer() int

Returnează dacă tamponul triplu este activat.

bgr() int

Returnează dacă afișajul așteaptă pixeli ordonați BGR.

byte_swap() int

Returnează dacă afișajul așteaptă pixeli cu octeți interschimbați.

framesize() int

Returnează constanta framesize cu care a fost inițializat afișajul.

refresh() int

Returnează rata de reîmprospătare în herți.

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

Afișează o image al cărei colț din stânga sus începe la locația x, y.

image poate fi un șir de cale în loc de un obiect imagine pentru a încărca automat imaginea de pe disc. De ex. write("test.jpg").

x_scale controlează cât de mult este scalată imaginea afișată în direcția x (float). Dacă această valoare este negativă, imaginea va fi răsturnată orizontal. Dacă y_scale nu este specificat, va corespunde cu x_scale pentru a menține raportul de aspect.

y_scale controlează cât de mult este scalată imaginea afișată în direcția y (float). Dacă această valoare este negativă, imaginea va fi răsturnată vertical. Răsturnarea verticală necesită triple_buffer=True. Dacă x_scale nu este specificat, va corespunde cu y_scale.

roi este tuplul dreptunghiular al regiunii de interes (x, y, w, h) din imaginea de afișat.

rgb_channel este canalul RGB (0=R, 1=G, 2=B) care va fi extras dintr-o imagine RGB565 și redat pe afișaj în tonuri de gri. -1 dezactivează extragerea. Intervalul valid este de la -1 la 2.

alpha controlează cât de opacă este imaginea. 255 afișează o imagine opacă, valorile mai mici amestecă spre negru, iar 0 produce o imagine complet neagră. Intervalul valid este de la 0 la 255.

color_palette poate fi un enum de paletă de culori sau o imagine RGB565 de 256 de pixeli care va fi folosită ca tabel de căutare a culorilor pe baza valorii de tonuri de gri a imaginii de intrare. Aplicată după extragerea rgb_channel.

alpha_palette poate fi o imagine în tonuri de gri de 256 de pixeli folosită ca tabel de căutare alpha care modulează alpha pentru fiecare valoare de tonuri de gri a pixelului de intrare. Aplicată după extragerea rgb_channel.

hint este un SAU logic al indicatorilor:

clear(display_off: bool = False) None

Golește tamponul de cadre al LCD-ului la negru.

display_off dacă este True, oprește logica afișajului în loc să golească tamponul de cadre.

backlight(value: int | None = None) int

Setează valoarea de atenuare a iluminării de fundal a LCD-ului, de la 0 (oprit) la 100 (pornit). Nu transmiteți niciun argument pentru a obține valoarea curentă a iluminării de fundal.

Cu excepția cazului în care un controler DACBacklight sau PWMBacklight este transmis constructorului, iluminarea de fundal este controlată ca un pin GPIO și va trece doar de la 0 (oprit) la o valoare diferită de zero (pornit).

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

Trimite comanda DSI cmd către afișaj.

args este un întreg sau un tampon (buffer) opțional care conține parametrii comenzii.

dcs dacă este True, trimite comanda ca pachet DCS (Display Command Set).

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

Citește len octeți de la afișaj folosind comanda DSI cmd.

args este un întreg sau un tampon (buffer) opțional care conține parametrii comenzii.

dcs dacă este True, trimite comanda ca pachet DCS (Display Command Set).

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

Trimite un ioctl cmd specific driverului cu un arg opțional către afișaj. Generează ValueError dacă afișajul nu acceptă ioctl.