Se você pode gato /dev/urandom > /dev/fb0
e obter pixels aleatórios na tela, você tem tudo o que precisa.
No meu caso, eu precisava despejar algumas informações de texto. Eu testei isso no busybox e raspi, para que possa funcionar para você. A resposta pode demorar um pouco, pois se você não usar um console, será necessário imprimir os pixels dos caracteres. Felizmente, alguém fez o trabalho duro, por isso precisamos apenas combiná-lo.
No busybox ou no seu raspi, você deve ter um fbset
binário. Isso pode ajudá-lo a descobrir suas configurações como dimensões da tela.
No meu incorporado fica assim:
# fbset
mode "480x272-1"
# D: 0.104 MHz, H: 0.207 kHz, V: 0.657 Hz
geometry 480 272 480 272 16
timings 9600000 3 3 0 32 17 11
accel false
rgba 5/0,6/5,5/11,0/0
endmode
A parte importante aqui é a largura 480 e a altura 272 pixels.
Como você mencionou, você pode preencher a tela com
cat /dev/urandom > /dev/fb0
e você pode limpá-lo com cat /dev/zeros > /dev/fb0
Depois de limpar sua tela, devemos garantir que você obtenha as dimensões corretamente.
Por acaso, meu busybox tinha um binário fbsplash que recebe como entrada um arquivo .ppm.
Correto se eu estiver errado, mas parece que fb0
aceita esse formato. Dando uma olhada no Portable Anymap na Wikipedia , existem vários "subformatos" ... O fbsplash usa um sofisticado com cores, e assim por diante ... mas queremos ser capazes de imprimir algo legível. Vamos usar o P1 codificado em ASCII por uma questão de simplicidade. Se pudéssemos imprimir uma linha vertical, saberíamos que nossas dimensões estão corretas. Vamos tentar:
Uma linha vertical em um tipo de ppm P1 deve ficar assim:
P1
480 272
f 0 0 0 0 ... 0
f 0 0 0 0 ... 0
...
f 0 0 0 0 ... 0
Portanto, haverá 272 linhas, 959 caracteres de largura. A documentação diz que deveria ser 1 em vez de f ... no busybox e raspi f era mais brilhante.
É importante que você não tenha espaço após o zero ... Essa tarefa pode ser um pouco entediante ... é melhor usar um editor de texto que o ajude. No vim, você pode copiar as duas primeiras linhas, vá para o modo de comando (esc) e digite os seguintes caracteres:
of(esc)479a 0(esc)yy271p
Claro, estou usando minhas dimensões, você deve usar as suas. Cat este arquivo para /dev/fb0
, ele deve se parecer com:
Ok, estou trapaceando ... não é apenas uma linha lá ... é cerca de 8 ... mas quando não funciona (temos dimensões erradas ou temos espaço no final, ter apenas uma linha é muito Mais fácil).
Se você chegou até aqui, temos apenas que imprimir os pixels certos para ver como caracteres. Graças a Marcel Sondaar e seu repo no GitHub , não precisaremos desenhar cada caractere.
Com um pequeno ajuste expandir seu programa simples para imprimir f
em vez de X
e0
em vez de espaços, inserir espaços entre cada char, adicionar o cabeçalho e temos um arquivo .ppm com a letra correspondente a sua charCode.
Um pequeno passo adiante e você não recebe um caractere como entrada, mas uma linha. Crie um arquivo, direcione para o seu programa e faça a saída /dev/fb0
e você obtém uma saída de texto:
Eu testei esta solução também em um raspberry pi e funcionou. O sistema me diz que não tenho reputação de postar mais de 2 links. Até eu entender isso, você deve confiar na minha palavra: D