klasa DSIDisplay – Upravljački program DSI zaslona

Klasa DSIDisplay upravlja MIPI-DSI panelima putem STM32 DSI host upravljača. MIPI DSI je paketni serijski protokol zaslona koji koristi jednu liniju takta i jednu ili više linija podataka kao diferencijalne parove, što mu omogućuje prijenos sadržaja visoke razlučivosti (do 1080p) preko znatno manje žica nego 24-bitni paralelni RGB. Pikseli se izravno prenose iz međuspremnika slike u SDRAM-u pri odabranoj frekvenciji osvježavanja, pa CPU nije uključen u osvježavanje.

Razlučivost panela odabire se putem framesize korištenjem konstanti iz modula display (QVGA, VGA, HD, FHD, …). Inicijalizacijski nizovi specifični za panel uključuju se preko ključnog argumenta controllerST7701 pokriva uobičajene 480x800 DSI panele temeljene na ST7701. DCS naredbe mogu se izdavati izvan glavnog toka putem bus_write() / bus_read(). Svjetlinom pozadinskog osvjetljenja prema zadanim postavkama upravlja se kao jednostavnim GPIO-om, ili putem DACBacklight / PWMBacklight ako se proslijedi kao backlight.

Sličice se prikazuju pozivom metode write() s image.Image. Upravljački program interno obrađuje pretvorbu RGB-a, skaliranje, ROI, paletu i transformacije orijentacije.

Primjer – preslikavanje kamere na 480x800 DSI panel temeljen na 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)

Konstruktori

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 Jedna od standardnih podržanih razlučivosti (npr. display.FWVGA).

refresh Postavlja frekvenciju osvježavanja zaslona u hercima. Valjani raspon je 30 do 120. Time se upravlja DSI LCD taktom.

display_on Omogućuje zaslon.

triple_buffer Dodjeljuje tri međuspremnika slike kako bi se omogućilo ažuriranje zaslona bez trganja slike. Potrebno za vertikalno preokretanje u write().

portrait Zamjenjuje širinu i visinu veličine sličice.

channel Virtualni MIPI DSI kanal koji se koristi za komunikaciju sa zaslonom.

controller Ovdje proslijedite klasu upravljačkog čipa kako bi se inicijalizirao zajedno sa zaslonom. Npr. display.ST7701() koji je standardni upravljač zaslona za MIPI DSI zaslone.

backlight Određuje modul upravljača pozadinskog osvjetljenja koji će se koristiti. Prema zadanim postavkama pozadinskim osvjetljenjem upravlja se putem GPIO pina.

deinit() None

Oslobađa U/I pinove i RAM koje koristi klasa. To se automatski poziva pri uništavanju.

width() int

Vraća širinu zaslona.

height() int

Vraća visinu zaslona.

triple_buffer() int

Vraća je li omogućeno trostruko međuspremanje.

bgr() int

Vraća očekuje li zaslon piksele poredane u BGR redoslijedu.

byte_swap() int

Vraća očekuje li zaslon piksele s zamijenjenim bajtovima.

framesize() int

Vraća konstantu veličine sličice s kojom je zaslon inicijaliziran.

refresh() int

Vraća frekvenciju osvježavanja u hercima.

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

Prikazuje image čiji gornji lijevi kut počinje na lokaciji x, y.

image može biti niz puta umjesto objekta slike kako bi se slika automatski učitala s diska. Npr. write("test.jpg").

x_scale upravlja time koliko se prikazana slika skalira u smjeru x (float). Ako je ova vrijednost negativna, slika će biti horizontalno preokrenuta. Ako y_scale nije naveden, poprimit će vrijednost x_scale kako bi se zadržao omjer stranica.

y_scale upravlja time koliko se prikazana slika skalira u smjeru y (float). Ako je ova vrijednost negativna, slika će biti vertikalno preokrenuta. Vertikalno preokretanje zahtijeva triple_buffer=True. Ako x_scale nije naveden, poprimit će vrijednost y_scale.

roi je n-torka pravokutnika područja interesa (x, y, w, h) slike koja se prikazuje.

rgb_channel je RGB kanal (0=R, 1=G, 2=B) koji se izdvaja iz RGB565 slike i prikazuje na zaslonu u sivim tonovima. -1 onemogućuje izdvajanje. Valjani raspon je -1 do 2.

alpha upravlja koliko je slika neprozirna. 255 prikazuje neprozirnu sliku, niže vrijednosti stapaju prema crnoj, a 0 daje potpuno crnu sliku. Valjani raspon je 0 do 255.

color_palette može biti enumeracija palete boja ili RGB565 slika od 256 piksela koja se koristi kao tablica za pretraživanje boja na temelju vrijednosti sivih tonova ulazne slike. Primjenjuje se nakon izdvajanja rgb_channel.

alpha_palette može biti slika u sivim tonovima od 256 piksela koja se koristi kao alfa tablica za pretraživanje koja modulira alpha po vrijednosti sivih tonova svakog ulaznog piksela. Primjenjuje se nakon izdvajanja rgb_channel.

hint je logički OR sljedećih zastavica:

clear(display_off: bool = False) None

Briše međuspremnik slike LCD-a u crno.

display_off ako je True isključuje logiku zaslona umjesto brisanja međuspremnika slike.

backlight(value: int | None = None) int

Postavlja vrijednost zatamnjenja pozadinskog osvjetljenja LCD-a, 0 (isključeno) do 100 (uključeno). Bez argumenata vraća trenutnu vrijednost pozadinskog osvjetljenja.

Osim ako se konstruktoru ne proslijedi upravljač DACBacklight ili PWMBacklight, pozadinskim osvjetljenjem upravlja se kao GPIO pinom i ono će ići samo od 0 (isključeno) do vrijednosti različite od nule (uključeno).

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

Šalje DSI naredbu cmd zaslonu.

args je neobavezni cijeli broj ili međuspremnik koji sadrži parametre naredbe.

dcs ako je True šalje naredbu kao DCS (Display Command Set) paket.

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

Čita len bajtova sa zaslona koristeći DSI naredbu cmd.

args je neobavezni cijeli broj ili međuspremnik koji sadrži parametre naredbe.

dcs ako je True šalje naredbu kao DCS (Display Command Set) paket.

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

Šalje zaslonu ioctl cmd specifičan za upravljački program s neobaveznim arg. Podiže ValueError ako zaslon ne podržava ioctl.