
Surpreendentemente, o antigo e-book prs-505 da Sony é um designer muito legal de todos os tipos de produtos caseiros. Mais uma vez, peguei este livro para fazer para mim um relógio de “papel”. Gosto dessa solução porque os números são grandes e brilhantes, embora não brilhem no escuro e não interfiram no sono. A ideia de um relógio em papel eletrônico não é nova, mas eu só queria brincar com este e-book legal novamente. O resultado é uma espécie de projeto de fim de semana, porque posso. Como de costume, coletei todos os erros e enganos possíveis. Descrevi meu caminho espinhoso neste artigo.
fundo
Certamente muitos vão se lembrar do meu post " E-book como display ", no qual eu disse a vocês como trabalhar com a exibição de um e-book.

Foto do post " E-book como display ".
Lá, na verdade, estava trabalhando com o framebuffer do dispositivo de vídeo, no qual exibia a imagem. O principal problema daquele artigo era transferir a imagem para o dispositivo. Então, não encontrei pólvora e motivação suficientes em mim mesmo para levar o meu plano ao fim, porque o livro foi dado a alguém e a ideia de fazer tal dispositivo foi esquecida. Mas tudo mudou após o lançamento de um artigo maravilhoso do autoralexshnup: " Tinta eletrônica para Wirenboard 5 ou desenho de códigos de barras on Go ". Neste artigoalexshnupresolveu o problema de exibição de códigos de barras na tela deste livro para depuração do scanner de código de barras. E acabou de resolver o problema de transferência de imagens para o livro.

Resumindo então alexshnupcriou um módulo de kernel que, quando um livro é conectado via USB, cria um disco rígido virtual adicional, 600x800 = 480.000 bytes de tamanho. Mais precisamente, o disco terá 1 MB, mas a área visível é de apenas 480.000 bytes. Na verdade, tudo que vai para a memória do disco irá para a tela do livro. Em geral, esta é uma peça brilhante, você pode até ver visualmente como está o layout do disco, se, por exemplo, você criar um sistema de arquivos lá. Por exemplo, você pode enviar uma imagem a um livro com o seguinte comando:
djpeg -pnm -grayscale test.jpg | dd bs=1 skip=15 | dd of=/dev/sdx bs=480k
Tudo o que é descrito mais adiante neste artigo é a continuação ideológica desses dois experimentos.
Vamos começar, consertar e fazer de novo
Depois de ler o artigo , entrei em contato com seu autoralexshnup... E ele decidiu me dar um livro desmontado para experimentos. Como resultado, tendo em mãos o equipamento de trabalho, embarquei alegremente nos experimentos. A primeira coisa que precisei fazer foi instalar o firmware prs-plus . E depois disso, você pode tentar criar esse disco rígido virtual para transferir imagens de acordo com o artigoalexshnup... Não vou citar o artigo, é um guia completo. Depois disso, tento transferir a imagem usando o comando dd.

A imagem é transmitida de uma nova maneira.
Com alegria percebendo que tudo, todas as cartas estão em minhas mãos, há uma interface para transferência de imagens, você pode usar como quiser, comecei a fazer um monte de experimentos. Comecei a escrever um programa de relógio e depurar sua saída em um livro. Como resultado, como geralmente é o caso com o comando "dd" ("destruidor de disco"), cometi um erro com o disco, e ...
Como resultado, escrevi em vez de um disco virtual, no disco (unidade flash) do próprio livro, transformando-o em um tijolo ... Acabei de pegar e escrever 480.000 bytes de gordura -seção. Não consigo nem transmitir todos os sentimentos que experimentei naquele momento.

Livro aberto.
O principal, como restaurar este livro, não estava claro. Ficou claro que você precisa pegar outro livro do mesmo tipo e reinstalar o firmware prs-plus nele. Em seguida, pegue esses primeiros 480.000 bytes dele e transfira-os para este bloco.
No geral, fiquei triste, surtei e comprei um novo e-book Sony prs-505 no Avito. Ao mesmo tempo, o livro estava com todos os botões funcionando, em uma caixa, os trens não se rasgaram. Poderia até ser usado para o fim a que se destinava, a única coisa era que a bateria estava meio descarregada. Mas, para meus objetivos, isso foi o suficiente. Agora, com as baterias descarregadas, esses livros podem ser encontrados em até mil rublos, na minha opinião o preço ideal para um dispositivo Linux, com código aberto e um sistema de economia de energia tão lindo.

E-book recém-comprado.
Com este livro, repeti o procedimento de instalação do firmware da mesma forma, então, conforme planejado, transferi 480.000 bytes da seção gorda de um e-book para outro. Assim, ganhei dois livros, com os quais já me diverti. É verdade que aquele que foi desmontado completamente começou a ter erros sem Deus, e eu praticamente não o usei.
Nós escrevemos software
A ideia do relógio é bastante simples. Vamos simplesmente formar uma imagem do tempo em uma tela e, em seguida, enviá-la para o framebuffer. Para fazer isso, vamos formar números e dois pontos. Lembro que a resolução do livro é de 600x800 (não me enganei, exatamente 600x800), se você olhar como uma folha.
HH: MM: SS - isso é o que temos com oito caracteres. No total, cada dígito é 100x600. Para os números escolhi uma bela fonte “Gideon's-Army-”. Em seguida, usando imagemagick, formamos números e dois pontos com os seguintes comandos:
for i in `seq 0 9`; do convert -font Gideon’s-Army- -pointsize 150 -size 100x600\
-gravity center -rotate 90 -depth 8 caption:"$i" $i.pgm;done
convert -font Gideon’s-Army- -pointsize 150 -size 100x600 -gravity center -depth 8\
-rotate 90 caption:':' dots.pgm
Como resultado, obtemos números de 0 a 9 e dois pontos. Aqui está um exemplo do número 2:

Se você cortar o cabeçalho de um determinado arquivo pgm, então esses dados serão imediatamente adequados para gravação no livro. Falei sobre isso em detalhes em meu artigo " Um livro eletrônico como um display ", então não vou me alongar sobre isso.
Em seguida, foi uma questão de tecnologia formar um bitmap a partir desses dígitos para gravar no framebuffer, simplesmente copiando a matriz usando o mapeamento de arquivo na memória. Todo o projeto reside no repositório: github.com/dlinyj/sony_prs-505_clock .
Todo o programa está contido no arquivo time.c... Não vou analisar o código inteiro, mas vou me concentrar em alguns pontos. Neste programa, eu apenas faço um mapeamento de arquivo na memória (um buffer de quadro, um arquivo de teste ou um arquivo de dispositivo de disco virtual de e-book). A seguir, já estamos trabalhando com o arquivo como área de memória. Eu copio as imagens dos símbolos do relógio para ele, dependendo da hora atual.
Exibimos um arquivo na memória no qual formarei uma imagem.
image = mmap (0, file_lenght, PROT_WRITE, MAP_SHARED, fd, 0);
As imagens são copiadas na função print_symbol, para a qual passo o número da posição do dígito e o nome do arquivo de dígito a ser copiado.
void print_symbol (unsigned int position, char * filename) {
void * numer_im;
int numer;
numer = open (filename, O_RDWR);
numer_im = mmap (0, NUMER_SIZE, PROT_WRITE, MAP_SHARED, numer, 0);
memcpy(&image[first_header + NUMER_PIXELS * position], &numer_im[16], NUMER_PIXELS);
munmap (numer_im, NUMER_SIZE);
close(numer);
}
Aqui, abro o arquivo de dígitos e copio-o para a posição apropriada na área de memória da imagem mapeada.
Em princípio, era possível todas as vezes não abrir o arquivo, ler e depois fechá-lo, mas simplesmente fazer uma cópia na memória e copiar de lá, mas uma boa ideia veio só agora.
Se você deseja executar este programa no seu computador para formar uma imagem, não se esqueça de alterar o compilador no Makefile e remover o define:
# Makefile .
#CFLAGS=-D __BOOK__
CC = gcc
#CC= /opt/cross/gcc-3.2.3-glibc-2.2.5/arm-unknown-linux-gnu/bin/arm-unknown-linux-gnu-gcc
Compilamos o programa e o executamos sem parâmetros. Como resultado, obtemos o arquivo “test.pgm” com a hora atual.

Se você especificar um dispositivo de arquivo específico, a imagem já será gerada sem o cabeçalho do arquivo pgm, adequado para upload para o livro. Além disso, este programa pode ser carregado em um livro e, em seguida, atualizar automaticamente a hora.
Executei este programa em um PC com um livro USB conectado e exibi a hora nele. O programa é iniciado de forma simples (o script start.sh aceita o arquivo do dispositivo):
#!/bin/bash
while true;do ./time $1;done
Como resultado, você pode assistir o relógio correndo na tela.

conclusões
O programa é escrito de tal forma que pode ser coletado e preenchido em um e-book para transformá-lo em um relógio. Pode parecer engraçado usar um dispositivo técnico tão complexo como um relógio, mas por que não? Agora, nesses livros, as baterias estão morrendo, e substituí-las é uma tarefa bastante trabalhosa. Se a bateria fosse substituída por seu emulador (um espaço em branco que permite que o livro funcione, mas não armazena energia), e o livro fosse conectado a um carregador, ele funcionaria constantemente.
Minhas experiências mostraram que o livro no carregador não entra no modo de hibernação e o relógio pode funcionar continuamente. Além disso, o próprio livro tem um relógio embutido e pode mostrar a hora corretamente.
Um dos problemas que encontrei, e não consegui resolver, é como adicionar o programa do relógio ao carregamento automático do livro, ao mesmo tempo em que sufocava o carregamento da própria interface gráfica, para que não houvesse competição pela exibição. Em geral, ainda há espaço para mais experimentação e experimentação. Mas essa já vai ser uma história completamente diferente, ganhei esse livro, mostra o relógio, dá pra começar outros projetos.
Que sugestões malucas você tem para usar o e-book Sony prs-505?
Links:
- "E-book como uma exibição."
- "Tinta eletrônica para Wirenboard 5 ou desenho de códigos de barras on Go."
- Repositório de projetos.
- História de minhas experiências 1 , 2 , 3 , 4 .