class DSIDisplay – DSI kijelzőmeghajtó

A DSIDisplay osztály a MIPI-DSI paneleket az STM32 DSI host vezérlőn keresztül hajtja meg. A MIPI DSI egy csomagalapú soros kijelzőprotokoll, amely egy órajel-sávot és egy vagy több adatsávot használ differenciális párként, ami lehetővé teszi, hogy nagy felbontású tartalmat (akár 1080p-ig) sokkal kevesebb vezetéken vigyen át, mint a 24 bites párhuzamos RGB. A képpontok közvetlenül egy SDRAM-alapú framebufferből áramlanak a kiválasztott frissítési frekvencián, így a CPU nem vesz részt a frissítésben.

A panel felbontása a framesize argumentumon keresztül választható ki a display modul konstansainak használatával (QVGA, VGA, HD, FHD, …). A panelspecifikus inicializálási szekvenciák a controller kulcsszó-argumentumon keresztül csatlakoztathatók – a ST7701 lefedi a gyakori ST7701-alapú 480x800-as DSI paneleket. A DCS parancsok sávon kívül adhatók ki a bus_write() / bus_read() metódusokkal. A háttérvilágítás fényereje alapértelmezés szerint egyszerű GPIO-ként van meghajtva, vagy a DACBacklight / PWMBacklight által, ha backlight ként adják át.

A képkockák megjelenítése a write() metódus egy image.Image objektummal való meghívásával történik. A meghajtó belsőleg kezeli az RGB konverziót, a méretezést, a ROI-t, a palettát és a tájolási transzformációkat.

Példa – a kamera tükrözése egy ST7701-alapú 480x800-as DSI panelre:

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)

Konstruktorok

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)

A framesize a standard támogatott felbontások egyike (pl. display.FWVGA).

A refresh beállítja a képernyő frissítési frekvenciáját hertzben. Az érvényes tartomány 30 és 120 között van. Ez vezérli a DSI LCD órajelet.

A display_on engedélyezi a kijelzőt.

A triple_buffer három framebuffert foglal le, hogy lehetővé tegye a szakadásmentes kijelzőfrissítéseket. A write() metódusban a függőleges tükrözéshez szükséges.

A portrait felcseréli a framesize szélességét és magasságát.

A channel a kijelzővel való kommunikációhoz használandó virtuális MIPI DSI csatorna.

A controller Adja át itt a vezérlőchip osztályát, hogy a kijelzővel együtt inicializálja. Pl. display.ST7701(), amely egy standard kijelzővezérlő a MIPI DSI kijelzőkhöz.

A backlight Adja meg a használandó háttérvilágítás-vezérlő modult. Alapértelmezés szerint a háttérvilágítás egy GPIO lábon keresztül lesz vezérelve.

deinit() None

Felszabadítja az osztály által használt I/O lábakat és RAM-ot. Ez automatikusan meghívódik megsemmisítéskor.

width() int

Visszaadja a képernyő szélességét.

height() int

Visszaadja a képernyő magasságát.

triple_buffer() int

Visszaadja, hogy a hármas pufferelés engedélyezve van-e.

bgr() int

Visszaadja, hogy a kijelző BGR sorrendű képpontokat vár-e.

byte_swap() int

Visszaadja, hogy a kijelző bájtcserélt képpontokat vár-e.

framesize() int

Visszaadja azt a framesize konstanst, amellyel a kijelző inicializálva lett.

refresh() int

Visszaadja a frissítési frekvenciát hertzben.

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

Megjelenít egy image képet, amelynek bal felső sarka az x, y helyen kezdődik.

Az image lehet egy elérési útvonalat tartalmazó karakterlánc kép objektum helyett, hogy automatikusan betöltse a képet a lemezről. Pl. write("test.jpg").

Az x_scale szabályozza, hogy a megjelenített kép mennyire legyen méretezve x irányban (float). Ha ez az érték negatív, a kép vízszintesen lesz tükrözve. Ha az y_scale nincs megadva, akkor az x_scale értékéhez igazodik a képarány megőrzése érdekében.

Az y_scale szabályozza, hogy a megjelenített kép mennyire legyen méretezve y irányban (float). Ha ez az érték negatív, a kép függőlegesen lesz tükrözve. A függőleges tükrözéshez triple_buffer=True szükséges. Ha az x_scale nincs megadva, akkor az y_scale értékéhez igazodik.

A roi a megjelenítendő kép érdeklődési terület téglalapja (x, y, w, h) tuple formájában.

Az rgb_channel az az RGB csatorna (0=R, 1=G, 2=B), amelyet ki kell nyerni egy RGB565 képből és szürkeárnyalatosan kell megjeleníteni a kijelzőn. A -1 letiltja a kinyerést. Az érvényes tartomány -1 és 2 között van.

Az alpha szabályozza, hogy a kép mennyire átlátszatlan. A 255 átlátszatlan képet jelenít meg, az alacsonyabb értékek a fekete felé keverik, a 0 pedig teljesen fekete képet eredményez. Az érvényes tartomány 0 és 255 között van.

A color_palette lehet egy színpaletta enum vagy egy 256 képpontos RGB565 kép, amelyet a bemeneti kép szürkeárnyalatos értékén színkereső táblázatként használ. Az rgb_channel kinyerés után kerül alkalmazásra.

Az alpha_palette lehet egy 256 képpontos szürkeárnyalatos kép, amelyet alfa kereső táblázatként használ, amely az alpha értéket bemeneti képpontonkénti szürkeárnyalatos érték szerint modulálja. Az rgb_channel kinyerés után kerül alkalmazásra.

A hint a következő jelzők logikai VAGY kapcsolata:

clear(display_off: bool = False) None

Feketére törli az LCD framebuffert.

A display_off ha True, kikapcsolja a kijelző logikáját a framebuffer törlése helyett.

backlight(value: int | None = None) int

Beállítja az LCD háttérvilágítás tompítási értékét, 0 (ki) és 100 (be) között. Adja meg argumentumok nélkül az aktuális háttérvilágítás-érték lekérdezéséhez.

Hacsak nem ad át egy DACBacklight vagy PWMBacklight vezérlőt a konstruktornak, a háttérvilágítás GPIO lábként van vezérelve, és csak 0 (ki) és nem nulla (be) között fog váltani.

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

DSI parancs cmd küldése a kijelzőnek.

Az args egy opcionális egész szám vagy puffer, amely a parancs paramétereit tartalmazza.

A dcs ha True, a parancsot DCS (Display Command Set) csomagként küldi.

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

len bájt olvasása a kijelzőről a DSI parancs cmd használatával.

Az args egy opcionális egész szám vagy puffer, amely a parancs paramétereit tartalmazza.

A dcs ha True, a parancsot DCS (Display Command Set) csomagként küldi.

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

Egy meghajtó-specifikus ioctl cmd küldése opcionális arg argumentummal a kijelzőnek. ValueError kivételt vált ki, ha a kijelző nem támogatja az ioctl-t.