classe DSIDisplay – Driver de Display DSI

A classe DSIDisplay aciona painéis MIPI-DSI por meio do controlador host DSI do STM32. O MIPI DSI é um protocolo serial de display em pacotes que usa uma lane de clock mais uma ou mais lanes de dados como pares diferenciais, o que permite transportar conteúdo de alta resolução (até 1080p) usando muito menos fios do que o RGB paralelo de 24 bits. Os pixels são transmitidos diretamente de um framebuffer apoiado em SDRAM na taxa de atualização escolhida, de modo que a CPU não é envolvida na atualização.

A resolução do painel é selecionada através de framesize usando as constantes do módulo display (QVGA, VGA, HD, FHD, …). Sequências de inicialização específicas do painel são conectadas via o argumento de palavra-chave controllerST7701 cobre os painéis DSI 480x800 comuns baseados no ST7701. Comandos DCS podem ser emitidos fora de banda via bus_write() / bus_read(). O brilho da retroiluminação é acionado como um simples GPIO por padrão, ou por DACBacklight / PWMBacklight se passado como backlight.

Os quadros são apresentados chamando write() com uma image.Image. O driver lida internamente com a conversão de RGB, escalonamento, ROI, paleta e transformações de orientação.

Exemplo – espelhar a câmera em um painel DSI 480x800 baseado no 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)

Construtores

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 Uma das resoluções padrão suportadas (por exemplo, display.FWVGA).

refresh Define a taxa de atualização da tela em hertz. O intervalo válido é de 30 a 120. Isso controla o clock do LCD DSI.

display_on Habilita o display.

triple_buffer Aloca três framebuffers para permitir atualizações do display sem rasgo (tearing). Necessário para a inversão vertical em write().

portrait Troca a largura e a altura do framesize.

channel O canal MIPI DSI virtual a ser usado para se comunicar com o display.

controller Passe aqui a classe do chip controlador para inicializá-lo junto com o display. Por exemplo, display.ST7701(), que é um controlador de display padrão para displays MIPI DSI.

backlight Especifica um módulo controlador de retroiluminação a ser usado. Por padrão, a retroiluminação será controlada por um pino GPIO.

deinit() None

Libera os pinos de E/S e a RAM usados pela classe. Isso é chamado automaticamente na destruição.

width() int

Retorna a largura da tela.

height() int

Retorna a altura da tela.

triple_buffer() int

Retorna se o buffer triplo (triple buffering) está habilitado.

bgr() int

Retorna se o display espera pixels ordenados em BGR.

byte_swap() int

Retorna se o display espera pixels com bytes trocados (byte-swapped).

framesize() int

Retorna a constante de framesize com a qual o display foi inicializado.

refresh() int

Retorna a taxa de atualização em 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

Exibe uma image cujo canto superior esquerdo começa na localização x, y.

image pode ser uma string de caminho em vez de um objeto de imagem para carregar automaticamente a imagem do disco. Por exemplo, write("test.jpg").

x_scale controla o quanto a imagem exibida é escalonada na direção x (float). Se este valor for negativo, a imagem será invertida horizontalmente. Se y_scale não for especificado, ele corresponderá a x_scale para manter a proporção.

y_scale controla o quanto a imagem exibida é escalonada na direção y (float). Se este valor for negativo, a imagem será invertida verticalmente. A inversão vertical requer triple_buffer=True. Se x_scale não for especificado, ele corresponderá a y_scale.

roi é a tupla retangular da região de interesse (x, y, w, h) da imagem a ser exibida.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a ser extraído de uma imagem RGB565 e renderizado no display em escala de cinza. -1 desabilita a extração. O intervalo válido é de -1 a 2.

alpha controla o quão opaca a imagem é. 255 exibe uma imagem opaca, valores menores mesclam em direção ao preto e 0 produz uma imagem totalmente preta. O intervalo válido é de 0 a 255.

color_palette pode ser um enum de paleta de cores ou uma imagem RGB565 de 256 pixels a ser usada como uma tabela de consulta de cores sobre o valor em escala de cinza da imagem de entrada. Aplicado após a extração de rgb_channel.

alpha_palette pode ser uma imagem em escala de cinza de 256 pixels usada como uma tabela de consulta alfa que modula alpha por valor de escala de cinza do pixel de entrada. Aplicado após a extração de rgb_channel.

hint é um OR lógico das flags:

clear(display_off: bool = False) None

Limpa o framebuffer do LCD para preto.

display_off se True, desliga a lógica do display em vez de limpar o framebuffer.

backlight(value: int | None = None) int

Define o valor de escurecimento da retroiluminação do LCD, de 0 (desligado) a 100 (ligado). Não passe argumentos para obter o valor atual da retroiluminação.

A menos que um controlador DACBacklight ou PWMBacklight seja passado ao construtor, a retroiluminação é controlada como um pino GPIO e só irá de 0 (desligado) a diferente de zero (ligado).

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

Envia o comando DSI cmd para o display.

args é um inteiro ou buffer opcional contendo os parâmetros do comando.

dcs se True, envia o comando como um pacote DCS (Display Command Set).

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

len bytes do display usando o comando DSI cmd.

args é um inteiro ou buffer opcional contendo os parâmetros do comando.

dcs se True, envia o comando como um pacote DCS (Display Command Set).

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

Envia um ioctl cmd específico do driver com um arg opcional para o display. Levanta ValueError se o display não suportar ioctl.