class DSIDisplay – DSI-display-drivrutin

Klassen DSIDisplay driver MIPI-DSI-paneler via STM32 DSI-värdstyrenheten. MIPI DSI är ett paketbaserat seriellt display-protokoll som använder en klocklane plus en eller flera datalanes som differentiella par, vilket gör att det kan bära högupplöst innehåll (upp till 1080p) över betydligt färre ledningar än 24-bitars parallell RGB. Pixlar strömmar direkt från en SDRAM-baserad bildbuffert med den valda uppdateringsfrekvensen, så CPU:n är inte inblandad i uppdateringen.

Panelupplösningen väljs via framesize med konstanterna i modulen display (QVGA, VGA, HD, FHD, …). Panelspecifika initieringssekvenser kopplas in via nyckelordsargumentet controllerST7701 täcker de vanliga ST7701-baserade 480x800 DSI-panelerna. DCS-kommandon kan skickas out-of-band via bus_write() / bus_read(). Bakgrundsbelysningens ljusstyrka drivs som ett enkelt GPIO som standard, eller av DACBacklight / PWMBacklight om det skickas som backlight.

Bildrutor presenteras genom att anropa write() med en image.Image. Drivrutinen hanterar RGB-konvertering, skalning, ROI, palett- och orienteringstransformer internt.

Exempel – spegla kameran på en ST7701-baserad 480x800 DSI-panel:

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)

Konstruktorer

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 En av de standardstödda upplösningarna (t.ex. display.FWVGA).

refresh Ställer in skärmens uppdateringsfrekvens i hertz. Giltigt intervall är 30 till 120. Detta styr DSI LCD-klockan.

display_on Aktiverar displayen.

triple_buffer Allokerar tre bildbuffertar för att möjliggöra rivningsfria displayuppdateringar. Krävs för vertikal vändning i write().

portrait Byter plats på bildrutans bredd och höjd.

channel Den virtuella MIPI DSI-kanal som ska användas för att kommunicera med displayen.

controller Skicka styrenhetschipets klass här för att initiera det tillsammans med displayen. T.ex. display.ST7701() som är en standard display-styrenhet för MIPI DSI-displayer.

backlight Ange en bakgrundsbelysningsmodul som ska användas. Som standard styrs bakgrundsbelysningen via ett GPIO-stift.

deinit() None

Frigör de I/O-stift och det RAM som klassen använder. Detta anropas automatiskt vid destruktion.

width() int

Returnerar skärmens bredd.

height() int

Returnerar skärmens höjd.

triple_buffer() int

Returnerar huruvida trippelbuffring är aktiverat.

bgr() int

Returnerar huruvida displayen förväntar sig BGR-ordnade pixlar.

byte_swap() int

Returnerar huruvida displayen förväntar sig byte-växlade pixlar.

framesize() int

Returnerar den framesize-konstant som displayen initierades med.

refresh() int

Returnerar uppdateringsfrekvensen i hertz.

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

Visar en image vars övre vänstra hörn börjar vid position x, y.

image kan vara en sökvägssträng istället för ett bildobjekt för att automatiskt läsa in bilden från disk. T.ex. write("test.jpg").

x_scale styr hur mycket den visade bilden skalas i x-riktningen (float). Om värdet är negativt vänds bilden horisontellt. Om y_scale inte anges matchas det med x_scale för att bibehålla bildförhållandet.

y_scale styr hur mycket den visade bilden skalas i y-riktningen (float). Om värdet är negativt vänds bilden vertikalt. Vertikal vändning kräver triple_buffer=True. Om x_scale inte anges matchas det med y_scale.

roi är intresseområdets rektangeltupel (x, y, w, h) för den bild som ska visas.

rgb_channel är den RGB-kanal (0=R, 1=G, 2=B) som ska extraheras ur en RGB565-bild och renderas på displayen i gråskala. -1 avaktiverar extraktion. Giltigt intervall är -1 till 2.

alpha styr hur ogenomskinlig bilden är. 255 visar en ogenomskinlig bild, lägre värden blandar mot svart och 0 ger en helt svart bild. Giltigt intervall är 0 till 255.

color_palette kan vara en color palette-enum eller en RGB565-bild på 256 pixlar som används som en färguppslagstabell på gråskalevärdet i indatabilden. Tillämpas efter rgb_channel-extraktion.

alpha_palette kan vara en gråskalebild på 256 pixlar som används som en alfauppslagstabell vilken modulerar alpha per gråskalevärde i indatapixeln. Tillämpas efter rgb_channel-extraktion.

hint är en logisk OR av flaggorna:

clear(display_off: bool = False) None

Rensar LCD-bildbufferten till svart.

display_off om True stängs displaylogiken av istället för att rensa bildbufferten.

backlight(value: int | None = None) int

Ställer in LCD-bakgrundsbelysningens dämpningsvärde, 0 (av) till 100 (på). Skicka inga argument för att hämta det aktuella bakgrundsbelysningsvärdet.

Om inte en DACBacklight- eller PWMBacklight-styrenhet skickas till konstruktorn styrs bakgrundsbelysningen som ett GPIO-stift och kan endast gå från 0 (av) till skilt från noll (på).

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

Skicka DSI-kommandot cmd till displayen.

args är ett valfritt heltal eller en buffert som innehåller kommandoparametrar.

dcs om True skickas kommandot som ett DCS-paket (Display Command Set).

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

Läs len byte från displayen med DSI-kommandot cmd.

args är ett valfritt heltal eller en buffert som innehåller kommandoparametrar.

dcs om True skickas kommandot som ett DCS-paket (Display Command Set).

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

Skicka en drivrutinsspecifik ioctl cmd med valfritt arg till displayen. Genererar ValueError om displayen inte stöder ioctl.