class DSIDisplay – DSI Ekran Sürücüsü

DSIDisplay sınıfı, MIPI-DSI panellerini STM32 DSI ana denetleyicisi üzerinden sürer. MIPI DSI, diferansiyel çiftler olarak bir saat hattı ve bir veya daha fazla veri hattı kullanan paketlenmiş bir seri ekran protokolüdür; bu da yüksek çözünürlüklü içeriği (1080p’ye kadar) 24-bit paralel RGB’ye kıyasla çok daha az kabloyla taşımasını sağlar. Pikseller, seçilen yenileme hızında doğrudan SDRAM destekli bir çerçeve arabelleğinden akar, bu nedenle yenileme işlemine CPU dahil olmaz.

Panel çözünürlüğü, display modülündeki sabitler (QVGA, VGA, HD, FHD, …) kullanılarak framesize aracılığıyla seçilir. Panele özgü başlatma dizileri controller anahtar argümanı aracılığıyla takılır – ST7701 yaygın ST7701 tabanlı 480x800 DSI panellerini kapsar. DCS komutları bus_write() / bus_read() ile bant dışında verilebilir. Arka aydınlatma parlaklığı varsayılan olarak basit bir GPIO olarak sürülür veya backlight olarak geçirilirse DACBacklight / PWMBacklight tarafından sürülür.

Çerçeveler, bir image.Image ile write() çağrılarak sunulur. Sürücü, RGB dönüşümünü, ölçeklemeyi, ROI’yi, paleti ve yönlendirme dönüşümlerini dahili olarak yönetir.

Örnek – kamerayı ST7701 tabanlı 480x800 DSI paneline yansıtma:

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)

Yapıcılar

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 Standart desteklenen çözünürlüklerden biri (ör. display.FWVGA).

refresh Ekran yenileme hızını hertz cinsinden ayarlar. Geçerli aralık 30 ile 120 arasındadır. Bu, DSI LCD saatini denetler.

display_on Ekranı etkinleştirir.

triple_buffer Yırtılmasız ekran güncellemelerine izin vermek için üç çerçeve arabelleği ayırır. write() içinde dikey çevirme için gereklidir.

portrait Çerçeve boyutunun genişlik ve yüksekliğini değiştirir.

channel Ekranla iletişim kurmak için kullanılacak sanal MIPI DSI kanalı.

controller Ekranla birlikte başlatmak için denetleyici çip sınıfını buraya geçirin. Ör. MIPI DSI ekranları için standart bir ekran denetleyicisi olan display.ST7701().

backlight Kullanılacak bir arka aydınlatma denetleyicisi modülü belirtin. Varsayılan olarak arka aydınlatma bir GPIO pini üzerinden denetlenir.

deinit() None

Sınıf tarafından kullanılan G/Ç pinlerini ve RAM’i serbest bırakır. Bu, yok edilme sırasında otomatik olarak çağrılır.

width() int

Ekranın genişliğini döndürür.

height() int

Ekranın yüksekliğini döndürür.

triple_buffer() int

Üçlü arabelleğin etkin olup olmadığını döndürür.

bgr() int

Ekranın BGR sıralı pikseller bekleyip beklemediğini döndürür.

byte_swap() int

Ekranın bayt sırası değiştirilmiş pikseller bekleyip beklemediğini döndürür.

framesize() int

Ekranın başlatıldığı çerçeve boyutu sabitini döndürür.

refresh() int

Yenileme hızını hertz cinsinden döndürür.

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

Sol üst köşesi x, y konumundan başlayan bir image görüntüler.

image, görüntüyü diskten otomatik olarak yüklemek için bir görüntü nesnesi yerine bir yol dizesi olabilir. Ör. write("test.jpg").

x_scale görüntülenen görüntünün x yönünde ne kadar ölçekleneceğini denetler (float). Bu değer negatifse görüntü yatay olarak çevrilir. y_scale belirtilmezse en boy oranını korumak için x_scale ile eşleşir.

y_scale görüntülenen görüntünün y yönünde ne kadar ölçekleneceğini denetler (float). Bu değer negatifse görüntü dikey olarak çevrilir. Dikey çevirme triple_buffer=True gerektirir. x_scale belirtilmezse y_scale ile eşleşir.

roi görüntülenecek görüntünün ilgi bölgesi dikdörtgen demetidir (x, y, w, h).

rgb_channel, bir RGB565 görüntüsünden çıkarılıp ekranda gri tonlamalı olarak işlenecek RGB kanalıdır (0=R, 1=G, 2=B). -1 çıkarmayı devre dışı bırakır. Geçerli aralık -1 ile 2 arasındadır.

alpha görüntünün ne kadar opak olduğunu denetler. 255 opak bir görüntü görüntüler, daha düşük değerler siyaha doğru karıştırır ve 0 tamamen siyah bir görüntü üretir. Geçerli aralık 0 ile 255 arasındadır.

color_palette bir renk paleti enum’ı veya giriş görüntüsünün gri tonlama değeri üzerinde renk arama tablosu olarak kullanılacak 256 piksellik bir RGB565 görüntüsü olabilir. rgb_channel çıkarımından sonra uygulanır.

alpha_palette her giriş pikselinin gri tonlama değerine göre alpha değerini modüle eden bir alfa arama tablosu olarak kullanılan 256 piksellik bir gri tonlamalı görüntü olabilir. rgb_channel çıkarımından sonra uygulanır.

hint bayrakların mantıksal OR’udur:

clear(display_off: bool = False) None

LCD çerçeve arabelleğini siyaha temizler.

display_off True ise çerçeve arabelleğini temizlemek yerine ekran mantığını kapatır.

backlight(value: int | None = None) int

LCD arka aydınlatma kısma değerini 0 (kapalı) ile 100 (açık) arasında ayarlar. Geçerli arka aydınlatma değerini almak için hiçbir argüman geçirmeyin.

Yapıcıya bir DACBacklight veya PWMBacklight denetleyicisi geçirilmediği sürece, arka aydınlatma bir GPIO pini olarak denetlenir ve yalnızca 0 (kapalı) ile sıfır olmayan (açık) değerler arasında değişir.

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

Ekrana DSI komutu cmd gönderir.

args komut parametrelerini içeren isteğe bağlı bir tam sayı veya arabellektir.

dcs True ise komutu bir DCS (Display Command Set) paketi olarak gönderir.

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

DSI komutu cmd kullanarak ekrandan len bayt okur.

args komut parametrelerini içeren isteğe bağlı bir tam sayı veya arabellektir.

dcs True ise komutu bir DCS (Display Command Set) paketi olarak gönderir.

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

Ekrana isteğe bağlı arg ile sürücüye özgü bir ioctl cmd gönderir. Ekran ioctl’i desteklemiyorsa ValueError yükseltir.