class DSIDisplay -- DSI ディスプレイドライバ

DSIDisplay クラスは、STM32 DSI ホストコントローラを介して MIPI-DSI パネルを駆動します。MIPI DSI はパケット化されたシリアルディスプレイプロトコルで、1 本のクロックレーンと 1 本以上のデータレーンを差動ペアとして使用します。これにより、24 ビットパラレル RGB よりもはるかに少ない配線で高解像度コンテンツ(最大 1080p)を伝送できます。ピクセルは SDRAM ベースのフレームバッファから選択したリフレッシュレートで直接ストリーミングされるため、リフレッシュに CPU は関与しません。

パネルの解像度は、display モジュールの定数(QVGAVGAHDFHD など)を使って framesize を通じて選択します。パネル固有の初期化シーケンスは controller キーワード引数を介して組み込まれます。ST7701 は一般的な ST7701 ベースの 480x800 DSI パネルに対応します。DCS コマンドは bus_write() / bus_read() を介してアウトオブバンドで発行できます。バックライトの輝度はデフォルトで単純な GPIO として駆動されますが、backlight として渡せば DACBacklight / PWMBacklight によって駆動できます。

フレームは image.Image を指定して write() を呼び出すことで表示されます。ドライバは RGB 変換、スケーリング、ROI、パレット、向きの変換を内部で処理します。

例 -- カメラ映像を ST7701 ベースの 480x800 DSI パネルにミラーリングする:

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)

コンストラクタ

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 標準でサポートされている解像度のいずれか(例: display.FWVGA)。

refresh 画面のリフレッシュレートをヘルツで設定します。有効範囲は 30 から 120 です。これは DSI LCD クロックを制御します。

display_on ディスプレイを有効にします。

triple_buffer ティアリングのないディスプレイ更新を可能にするために 3 つのフレームバッファを割り当てます。write() での垂直反転に必要です。

portrait framesize の幅と高さを入れ替えます。

channel ディスプレイとの通信に使用する仮想 MIPI DSI チャネル。

controller ディスプレイとともに初期化するコントローラチップクラスをここに渡します。例: display.ST7701()。これは MIPI DSI ディスプレイ用の標準ディスプレイコントローラです。

backlight 使用するバックライトコントローラモジュールを指定します。デフォルトでは、バックライトは GPIO ピンを介して制御されます。

deinit() None

このクラスが使用する I/O ピンと RAM を解放します。これは破棄時に自動的に呼び出されます。

width() int

画面の幅を返します。

height() int

画面の高さを返します。

triple_buffer() int

トリプルバッファリングが有効かどうかを返します。

bgr() int

ディスプレイが BGR 順のピクセルを期待しているかどうかを返します。

byte_swap() int

ディスプレイがバイトスワップされたピクセルを期待しているかどうかを返します。

framesize() int

ディスプレイが初期化された際の framesize 定数を返します。

refresh() int

リフレッシュレートをヘルツで返します。

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

左上隅が位置 xy から始まる image を表示します。

image には、画像オブジェクトの代わりにパス文字列を指定して、ディスクから画像を自動的に読み込むこともできます。例: write("test.jpg")

x_scale は表示画像を x 方向にどれだけ拡大縮小するかを制御します(float)。この値が負の場合、画像は水平方向に反転されます。y_scale が指定されていない場合、アスペクト比を維持するために x_scale に一致します。

y_scale は表示画像を y 方向にどれだけ拡大縮小するかを制御します(float)。この値が負の場合、画像は垂直方向に反転されます。垂直反転には triple_buffer=True が必要です。x_scale が指定されていない場合、y_scale に一致します。

roi は表示する画像の関心領域を表す矩形タプル (x, y, w, h) です。

rgb_channel は、RGB565 画像から抽出してディスプレイにグレースケールで描画する RGB チャネル(0=R、1=G、2=B)です。-1 で抽出を無効にします。有効範囲は -1 から 2 です。

alpha は画像の不透明度を制御します。255 で不透明な画像を表示し、値を下げるほど黒に近づき、0 で完全に黒い画像になります。有効範囲は 0 から 255 です。

color_palette には、カラーパレット列挙値、または入力画像のグレースケール値に対するカラールックアップテーブルとして使用する 256 ピクセルの RGB565 画像を指定できます。rgb_channel 抽出後に適用されます。

alpha_palette には、入力ピクセルのグレースケール値ごとに alpha を変調するアルファルックアップテーブルとして使用する 256 ピクセルのグレースケール画像を指定できます。rgb_channel 抽出後に適用されます。

hint は以下のフラグの論理 OR です:

  • image.AREA: ダウンスケール時に、デフォルトの最近傍法ではなくエリアスケーリングを使用します。

  • image.BILINEAR: デフォルトの最近傍スケーリングではなくバイリニアスケーリングを使用します。

  • image.BICUBIC: デフォルトの最近傍スケーリングではなくバイキュービックスケーリングを使用します。

  • image.CENTER: 描画される画像をディスプレイ上で中央揃えにします。これはスケーリング後に適用されます。

  • image.HMIRROR: 画像を水平方向にミラーリングします。

  • image.VFLIP: 画像を垂直方向に反転します。

  • image.TRANSPOSE: 画像を転置します(x/y を入れ替え)。

  • image.EXTRACT_RGB_CHANNEL_FIRST: スケーリングの前に rgb_channel 抽出を行います。

  • image.APPLY_COLOR_PALETTE_FIRST: スケーリングの前にカラーパレットを適用します。

  • image.SCALE_ASPECT_KEEP: 描画される画像をディスプレイ内に収まるようにスケーリングします。

  • image.SCALE_ASPECT_EXPAND: 描画される画像をディスプレイいっぱいに満たすようにスケーリングします(クロップが発生します)。

  • image.SCALE_ASPECT_IGNORE: 描画される画像をディスプレイいっぱいに満たすようにスケーリングします(引き伸ばしが発生します)。

  • image.ROTATE_90: 画像を 90 度回転します(これは単に VFLIP | TRANSPOSE です)。

  • image.ROTATE_180: 画像を 180 度回転します(これは単に HMIRROR | VFLIP です)。

  • image.ROTATE_270: 画像を 270 度回転します(これは単に HMIRROR | TRANSPOSE です)。

clear(display_off: bool = False) None

LCD フレームバッファを黒にクリアします。

display_off が True の場合、フレームバッファをクリアする代わりにディスプレイロジックをオフにします。

backlight(value: int | None = None) int

LCD バックライトの調光値を 0(オフ)から 100(オン)で設定します。引数を渡さない場合は現在のバックライト値を取得します。

DACBacklight または PWMBacklight コントローラがコンストラクタに渡されない限り、バックライトは GPIO ピンとして制御され、0(オフ)から非ゼロ(オン)の間でのみ動作します。

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

DSI コマンド cmd をディスプレイに送信します。

args はコマンドパラメータを含むオプションの整数またはバッファです。

dcs が True の場合、コマンドを DCS(Display Command Set)パケットとして送信します。

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

DSI コマンド cmd を使用してディスプレイから len バイトを読み取ります。

args はコマンドパラメータを含むオプションの整数またはバッファです。

dcs が True の場合、コマンドを DCS(Display Command Set)パケットとして送信します。

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

ドライバ固有の ioctl cmd を、オプションの arg とともにディスプレイに送信します。ディスプレイが ioctl をサポートしていない場合は ValueError を送出します。