luokka DSIDisplay – DSI-näyttöajuri

DSIDisplay-luokka ohjaa MIPI-DSI-paneeleja STM32 DSI -isäntäohjaimen kautta. MIPI DSI on pakettipohjainen sarjamuotoinen näyttöprotokolla, joka käyttää yhtä kellokaistaa sekä yhtä tai useampaa datakaistaa differentiaalipareina, mikä mahdollistaa korkearesoluutioisen sisällön (jopa 1080p) siirron huomattavasti vähemmillä johdoilla kuin 24-bittinen rinnakkainen RGB. Pikselit virtaavat suoraan SDRAM-pohjaisesta kehyspuskurista valitulla virkistystaajuudella, joten CPU ei osallistu virkistykseen.

Paneelin resoluutio valitaan framesize-argumentilla käyttäen display-moduulin vakioita (QVGA, VGA, HD, FHD, …). Paneelikohtaiset alustussekvenssit liitetään controller-avainsana-argumentilla – ST7701 kattaa yleiset ST7701-pohjaiset 480x800 DSI-paneelit. DCS-komentoja voidaan antaa kaistan ulkopuolella bus_write()- / bus_read()-metodeilla. Taustavalon kirkkautta ohjataan oletuksena yksinkertaisena GPIO:na, tai DACBacklight- / PWMBacklight-ohjaimella, jos sellainen annetaan backlight-argumenttina.

Kehykset esitetään kutsumalla write()-metodia image.Image-oliolla. Ajuri hoitaa RGB-muunnoksen, skaalauksen, ROI:n, paletin ja suuntamuunnokset sisäisesti.

Esimerkki – peilaa kamera ST7701-pohjaiselle 480x800 DSI-paneelille:

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)

Rakentajat

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 Yksi vakioista tuetuista resoluutioista (esim. display.FWVGA).

refresh Asettaa näytön virkistystaajuuden hertseinä. Sallittu vaihteluväli on 30-120. Tämä ohjaa DSI LCD -kelloa.

display_on Ottaa näytön käyttöön.

triple_buffer Varaa kolme kehyspuskuria repeämättömien näyttöpäivitysten mahdollistamiseksi. Vaaditaan pystysuuntaiseen kääntöön write()-metodissa.

portrait Vaihtaa kehyskoon leveyden ja korkeuden keskenään.

channel Virtuaalinen MIPI DSI -kanava, jota käytetään näytön kanssa kommunikointiin.

controller Anna ohjainpiirin luokka tähän alustaaksesi sen näytön kanssa. Esim. display.ST7701(), joka on vakionäytönohjain MIPI DSI -näytöille.

backlight Määritä käytettävä taustavalon ohjainmoduuli. Oletuksena taustavaloa ohjataan GPIO-nastan kautta.

deinit() None

Vapauttaa luokan käyttämät I/O-nastat ja RAM-muistin. Tämä kutsutaan automaattisesti tuhoamisen yhteydessä.

width() int

Palauttaa näytön leveyden.

height() int

Palauttaa näytön korkeuden.

triple_buffer() int

Palauttaa, onko kolmoispuskurointi käytössä.

bgr() int

Palauttaa, odottaako näyttö BGR-järjestyksessä olevia pikseleitä.

byte_swap() int

Palauttaa, odottaako näyttö tavuvaihdettuja pikseleitä.

framesize() int

Palauttaa kehyskokovakion, jolla näyttö alustettiin.

refresh() int

Palauttaa virkistystaajuuden hertseinä.

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

Näyttää kuvan image, jonka vasen yläkulma alkaa sijainnista x, y.

image voi olla polkumerkkijono kuvaolion sijaan, jolloin kuva ladataan automaattisesti levyltä. Esim. write("test.jpg").

x_scale ohjaa, kuinka paljon näytettävää kuvaa skaalataan x-suunnassa (liukuluku). Jos arvo on negatiivinen, kuva käännetään vaakasuunnassa. Jos y_scale ei ole määritetty, se vastaa arvoa x_scale kuvasuhteen säilyttämiseksi.

y_scale ohjaa, kuinka paljon näytettävää kuvaa skaalataan y-suunnassa (liukuluku). Jos arvo on negatiivinen, kuva käännetään pystysuunnassa. Pystysuuntainen kääntö vaatii triple_buffer=True. Jos x_scale ei ole määritetty, se vastaa arvoa y_scale.

roi on näytettävän kuvan kohdealueen suorakulmiomonikko (x, y, w, h).

rgb_channel on RGB-kanava (0=R, 1=G, 2=B), joka poimitaan RGB565-kuvasta ja esitetään näytöllä harmaasävyisenä. -1 poistaa poiminnan käytöstä. Sallittu vaihteluväli on -1…2.

alpha ohjaa, kuinka läpinäkymätön kuva on. 255 näyttää läpinäkymättömän kuvan, pienemmät arvot häivyttävät kohti mustaa, ja 0 tuottaa täysin mustan kuvan. Sallittu vaihteluväli on 0…255.

color_palette voi olla väripaletin enum tai 256 pikselin RGB565-kuva, jota käytetään värihakutauluna syötekuvan harmaasävyarvolle. Sovelletaan rgb_channel-poiminnan jälkeen.

alpha_palette voi olla 256 pikselin harmaasävykuva, jota käytetään alfahakutauluna, joka moduloi arvoa alpha syötepikselin harmaasävyarvon mukaan. Sovelletaan rgb_channel-poiminnan jälkeen.

hint on lippujen looginen TAI-yhdistelmä:

clear(display_off: bool = False) None

Tyhjentää LCD-kehyspuskurin mustaksi.

display_off jos True, sammuttaa näytön logiikan sen sijaan, että tyhjentäisi kehyspuskurin.

backlight(value: int | None = None) int

Asettaa LCD-taustavalon himmennysarvon, 0 (pois) – 100 (päällä). Älä anna argumentteja saadaksesi nykyisen taustavalon arvon.

Ellei rakentajalle anneta DACBacklight- tai PWMBacklight-ohjainta, taustavaloa ohjataan GPIO-nastana ja se kytkeytyy vain arvosta 0 (pois) nollasta poikkeavaan arvoon (päällä).

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

Lähettää DSI-komennon cmd näytölle.

args on valinnainen kokonaisluku tai puskuri, joka sisältää komennon parametrit.

dcs jos True, lähettää komennon DCS-pakettina (Display Command Set).

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

Lukee len tavua näytöltä käyttäen DSI-komentoa cmd.

args on valinnainen kokonaisluku tai puskuri, joka sisältää komennon parametrit.

dcs jos True, lähettää komennon DCS-pakettina (Display Command Set).

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

Lähettää ajurikohtaisen ioctl-komennon cmd valinnaisella argumentilla arg näytölle. Nostaa ValueError-poikkeuksen, jos näyttö ei tue ioctl:ää.