class DSIDisplay – Controlador de Ecrã DSI

A classe DSIDisplay controla painéis MIPI-DSI através do controlador de host DSI do STM32. O MIPI DSI é um protocolo de ecrã série com pacotes que utiliza uma pista de relógio mais uma ou mais pistas de dados como pares diferenciais, permitindo transportar conteúdo de alta resolução (até 1080p) com muito menos fios do que o RGB paralelo de 24 bits. Os pixels fluem diretamente de um buffer de fotograma suportado por SDRAM à taxa de atualização escolhida, pelo que a CPU não está envolvida na atualização.

A resolução do painel é selecionada através de framesize utilizando as constantes do módulo display (QVGA, VGA, HD, FHD, …). As sequências de inicialização específicas do painel são fornecidas através do argumento de palavra-chave controllerST7701 cobre os painéis DSI baseados em ST7701 de 480x800 mais comuns. Os comandos DCS podem ser emitidos fora de banda através de bus_write() / bus_read(). O brilho da retroiluminação é controlado por GPIO por defeito, ou por DACBacklight / PWMBacklight se passados como backlight.

Os fotogramas são apresentados chamando write() com uma image.Image. O controlador trata internamente da conversão RGB, redimensionamento, ROI, paleta e transformações de orientação.

Exemplo – espelhar a câmara num painel DSI de 480x800 baseado em 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 do ecrã em hertz. O intervalo válido é de 30 a 120. Controla o relógio LCD DSI.

display_on Ativa o ecrã.

triple_buffer Aloca três buffers de fotograma para permitir atualizações do ecrã sem rasgo. Necessário para a inversão vertical em write().

portrait Troca a largura e a altura do framesize.

channel O canal virtual MIPI DSI a utilizar para comunicar com o ecrã.

controller Passe aqui a classe do chip controlador para o inicializar juntamente com o ecrã. Por exemplo, display.ST7701(), que é um controlador de ecrã padrão para ecrãs MIPI DSI.

backlight Especifique um módulo controlador de retroiluminação a utilizar. Por defeito, a retroiluminação é controlada através de um pino GPIO.

deinit() None

Liberta os pinos de E/S e a RAM utilizados pela classe. É chamado automaticamente na destruição.

width() int

Devolve a largura do ecrã.

height() int

Devolve a altura do ecrã.

triple_buffer() int

Devolve se o triple buffering está ativado.

bgr() int

Devolve se o ecrã espera pixels ordenados em BGR.

byte_swap() int

Devolve se o ecrã espera pixels com bytes trocados.

framesize() int

Devolve a constante de framesize com que o ecrã foi inicializado.

refresh() int

Devolve 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

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

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

x_scale controla o fator de escala da imagem apresentada na direção x (float). Se este valor for negativo, a imagem será espelhada horizontalmente. Se y_scale não for especificado, corresponderá a x_scale para manter a proporção.

y_scale controla o fator de escala da imagem apresentada 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, corresponderá a y_scale.

roi é o tuplo retângulo de região de interesse (x, y, w, h) da imagem a apresentar.

rgb_channel é o canal RGB (0=R, 1=G, 2=B) a extrair de uma imagem RGB565 e renderizar no ecrã em escala de cinzentos. -1 desativa a extração. O intervalo válido é de -1 a 2.

alpha controla a opacidade da imagem. 255 apresenta uma imagem opaca, valores inferiores misturam em direção ao preto, e 0 produz uma imagem completamente preta. O intervalo válido é de 0 a 255.

color_palette pode ser uma enumeração de paleta de cores ou uma imagem RGB565 de 256 pixels a utilizar como tabela de pesquisa de cores sobre o valor em escala de cinzentos da imagem de entrada. Aplicado após a extração de rgb_channel.

alpha_palette pode ser uma imagem em escala de cinzentos de 256 pixels utilizada como tabela de pesquisa de alfa que modula alpha por pixel de entrada em escala de cinzentos. Aplicado após a extração de rgb_channel.

hint é um OR lógico dos seguintes sinalizadores:

clear(display_off: bool = False) None

Limpa o buffer de fotograma do LCD para preto.

display_off se True desliga a lógica do ecrã em vez de limpar o buffer de fotograma.

backlight(value: int | None = None) int

Define o valor de diminuição da retroiluminação do LCD, de 0 (desligado) a 100 (ligado). Passe sem argumentos para obter o valor atual da retroiluminação.

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

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

Envia o comando DSI cmd ao ecrã.

args é um inteiro opcional ou buffer 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 ecrã utilizando o comando DSI cmd.

args é um inteiro opcional ou buffer 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 controlador com arg opcional ao ecrã. Lança ValueError se o ecrã não suportar ioctl.