kelas DSIDisplay -- Driver Display DSI

Kelas DSIDisplay mengendalikan panel MIPI-DSI melalui pengontrol host DSI STM32. MIPI DSI adalah protokol display serial terpaketkan yang menggunakan satu lane clock ditambah satu atau lebih lane data sebagai pasangan diferensial, yang memungkinkan pengiriman konten resolusi tinggi (hingga 1080p) melalui kabel yang jauh lebih sedikit dibandingkan RGB paralel 24-bit. Piksel mengalir langsung dari buffer bingkai berbasis SDRAM pada laju refresh yang dipilih, sehingga CPU tidak terlibat dalam proses refresh.

Resolusi panel dipilih melalui framesize menggunakan konstanta di modul display (QVGA, VGA, HD, FHD, ...). Urutan inisialisasi khusus panel disisipkan melalui argumen kata kunci controller -- ST7701 mencakup panel DSI 480x800 berbasis ST7701 yang umum. Perintah DCS dapat dikirimkan secara out-of-band melalui bus_write() / bus_read(). Kecerahan lampu latar dikendalikan sebagai GPIO sederhana secara default, atau oleh DACBacklight / PWMBacklight jika diberikan sebagai backlight.

Bingkai ditampilkan dengan memanggil write() dengan sebuah image.Image. Driver menangani konversi RGB, penskalaan, ROI, transformasi palet dan orientasi secara internal.

Contoh -- cerminkan kamera ke panel DSI 480x800 berbasis 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)

Konstruktor

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 Salah satu resolusi standar yang didukung (mis. display.FWVGA).

refresh Mengatur laju refresh layar dalam hertz. Rentang valid adalah 30 hingga 120. Ini mengontrol jam LCD DSI.

display_on Mengaktifkan display.

triple_buffer Mengalokasikan tiga buffer bingkai untuk memungkinkan pembaruan display tanpa robekan. Diperlukan untuk pembalikan vertikal dalam write().

portrait Tukar lebar dan tinggi framesize.

channel Saluran MIPI DSI virtual yang digunakan untuk berkomunikasi dengan display.

controller Berikan kelas chip pengontrol di sini untuk menginisialisasinya bersama dengan display. Mis. display.ST7701() yang merupakan pengontrol display standar untuk display MIPI DSI.

backlight Tentukan modul pengontrol lampu latar yang akan digunakan. Secara default lampu latar akan dikontrol melalui pin GPIO.

deinit() None

Melepaskan pin I/O dan RAM yang digunakan oleh kelas. Ini dipanggil secara otomatis saat penghapusan.

width() int

Mengembalikan lebar layar.

height() int

Mengembalikan tinggi layar.

triple_buffer() int

Mengembalikan apakah triple buffering diaktifkan.

bgr() int

Mengembalikan apakah display mengharapkan piksel berurutan BGR.

byte_swap() int

Mengembalikan apakah display mengharapkan piksel dengan byte ditukar.

framesize() int

Mengembalikan konstanta framesize yang digunakan untuk menginisialisasi display.

refresh() int

Mengembalikan laju refresh dalam 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

Menampilkan sebuah image yang sudut kiri atasnya dimulai dari lokasi x, y.

image dapat berupa string path sebagai ganti objek citra untuk memuat citra secara otomatis dari disk. Mis. write("test.jpg").

x_scale mengontrol seberapa banyak citra yang ditampilkan diskalakan dalam arah x (float). Jika nilai ini negatif, citra akan dibalik secara horizontal. Jika y_scale tidak ditentukan maka akan mengikuti x_scale untuk mempertahankan rasio aspek.

y_scale mengontrol seberapa banyak citra yang ditampilkan diskalakan dalam arah y (float). Jika nilai ini negatif, citra akan dibalik secara vertikal. Pembalikan vertikal membutuhkan triple_buffer=True. Jika x_scale tidak ditentukan maka akan mengikuti y_scale.

roi adalah tuple persegi panjang wilayah yang diminati (x, y, w, h) dari citra yang akan ditampilkan.

rgb_channel adalah saluran RGB (0=R, 1=G, 2=B) yang diekstrak dari citra RGB565 dan dirender pada display dalam skala abu-abu. -1 menonaktifkan ekstraksi. Rentang valid adalah -1 hingga 2.

alpha mengontrol seberapa buram citranya. 255 menampilkan citra yang buram, nilai yang lebih rendah memperkirakan warna hitam, dan 0 menghasilkan citra hitam sepenuhnya. Rentang valid adalah 0 hingga 255.

color_palette dapat berupa enum palet warna atau citra RGB565 256 piksel yang digunakan sebagai tabel pencarian warna pada nilai skala abu-abu citra input. Diterapkan setelah ekstraksi rgb_channel.

alpha_palette dapat berupa citra skala abu-abu 256 piksel yang digunakan sebagai tabel pencarian alpha yang memodulasi alpha per nilai skala abu-abu piksel input. Diterapkan setelah ekstraksi rgb_channel.

hint adalah OR logis dari flag-flag:

clear(display_off: bool = False) None

Membersihkan buffer bingkai LCD ke warna hitam.

display_off jika True mematikan logika display alih-alih membersihkan buffer bingkai.

backlight(value: int | None = None) int

Mengatur nilai redupan lampu latar LCD, 0 (mati) hingga 100 (hidup). Berikan tanpa argumen untuk mendapatkan nilai lampu latar saat ini.

Kecuali pengontrol DACBacklight atau PWMBacklight diberikan ke konstruktor, lampu latar dikontrol sebagai pin GPIO dan hanya akan berpindah dari 0 (mati) ke non-nol (hidup).

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

Kirim perintah DSI cmd ke display.

args adalah integer opsional atau buffer yang berisi parameter perintah.

dcs jika True mengirimkan perintah sebagai paket DCS (Display Command Set).

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

Baca len byte dari display menggunakan perintah DSI cmd.

args adalah integer opsional atau buffer yang berisi parameter perintah.

dcs jika True mengirimkan perintah sebagai paket DCS (Display Command Set).

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

Kirim ioctl cmd khusus driver dengan arg opsional ke display. Menghasilkan ValueError jika display tidak mendukung ioctl.