Hacer un reloj a partir del libro electrónico PRS-505





Sorprendentemente, el viejo libro electrónico Sony prs-505 es un diseñador genial de todo tipo de productos caseros. Una vez más tomé este libro para hacerme un reloj de “papel”. Me gusta esta solución porque los números son grandes y brillantes, mientras que no brillan en la oscuridad y no interfieren con el sueño. La idea de un reloj en papel electrónico no es nueva en absoluto, pero solo quería volver a jugar con este genial libro electrónico. El resultado es una especie de proyecto de fin de semana, porque puedo. Como de costumbre, recopilé todos los posibles errores y equivocaciones. Describí mi camino espinoso en este artículo.



Antecedentes



Seguro que muchos recordarán mi post " E-book as a display " en el que les contaba cómo trabajar con el display de un e-book.





Foto del post " E-book as a display ".



Allí, de hecho, estaba trabajando con el framebuffer del dispositivo de video, en el que mostraba la imagen. El principal problema en ese artículo fue transferir la imagen al dispositivo. Entonces, no encontré suficiente pólvora y motivación en mí mismo para llevar mi plan al final, porque el libro fue entregado a alguien y se olvidó la idea de hacer tal dispositivo. Pero todo cambió después del lanzamiento de un maravilloso artículo del autor.alexshnup: " Tinta electrónica para Wirenboard 5 o códigos de barras de dibujo en Go ". En este articuloalexshnupresolvió el problema de mostrar códigos de barras en la pantalla de este libro para depurar el escáner de códigos de barras. Y acaba de resolver el problema de transferir imágenes al libro.







En resumen, entonces alexshnupcreó un módulo de kernel que, cuando se conecta un libro a través de USB, crea un disco duro virtual adicional, 600x800 = 480,000 bytes de tamaño. Más precisamente, el disco será de 1 MB, pero el área visible es de solo 480.000 bytes. De hecho, todo lo que entra en la memoria del disco irá a la pantalla del libro. En general, esto es algo brillante, incluso puede ver visualmente cómo va el diseño del disco, si, por ejemplo, crea un sistema de archivos allí. Por ejemplo, puede enviar una imagen a un libro con el siguiente comando:



djpeg -pnm -grayscale test.jpg | dd bs=1 skip=15 | dd of=/dev/sdx bs=480k


Todo lo que se describe más adelante en este artículo es una continuación ideológica de estos dos experimentos.



Empecemos, arreglemos y hagámoslo de nuevo



Después de leer el artículo , me comuniqué con su autor.alexshnup... Y decidió regalarme un libro desmontado para experimentos. Como resultado, teniendo a mano equipo de trabajo, me embarqué felizmente en experimentos. Lo primero que tenía que hacer era instalar el firmware prs-plus . Y después de eso puedes intentar crear ese disco duro virtual para transferir imágenes según el artículoalexshnup... No citaré el artículo, es una guía completa. Después de eso, intento transferir la imagen usando el comando dd.





La imagen se transmite de una forma nueva.



Dándome cuenta con alegría de que todo, todas las tarjetas están en mis manos, hay una interfaz para transferir imágenes, puedes usarla como quieras, comencé a hacer un montón de experimentos. Comencé a escribir un programa de reloj y depuré su salida en un libro. Como resultado, como suele ser el caso con el comando "dd" ("destructor de disco"), cometí un error con el disco y ...

Como resultado, lo escribí en lugar de un disco virtual, en el disco (unidad flash) del libro, convirtiéndolo en un ladrillo ... Solo tomé y escribí 480,000 bytes de grasa -sección. Ni siquiera puedo transmitir todos los sentimientos que experimenté en ese momento.





Libro abierto.



Lo principal, cómo restaurar este libro, no estaba claro. Estaba claro que necesita tomar otro libro del mismo y reinstalar el firmware prs-plus en él. Luego, tome estos primeros 480.000 bytes y transfiéralos a este bloque.



En general, estaba triste, asustado y compré un nuevo libro electrónico Sony prs-505 en Avito. Al mismo tiempo, el libro estaba con todos los botones de trabajo, en un caso, los trenes no se rompieron. Incluso podría usarse para el propósito previsto, lo único es que la batería estaba medio descargada. Pero para mis propósitos, eso fue suficiente. Ahora, con las baterías agotadas, estos libros se pueden encontrar hasta mil rublos, en mi opinión el precio ideal para un dispositivo Linux, con código abierto y un sistema de ahorro de energía tan magnífico.





Libro electrónico recién comprado.



Con este libro, repetí el procedimiento para instalar el firmware de la misma manera, luego, como estaba planeado, transferí 480,000 bytes de la sección grasa de un libro electrónico a otro. Así, terminé con dos libros, con los que ya me divertí. Es cierto que el que fue desmontado por completo comenzó a tener errores sin Dios, y prácticamente no lo usé.



Escribimos software



La idea del reloj es bastante sencilla. Simplemente formaremos una imagen del tiempo en un lienzo y luego la enviaremos al framebuffer. Para hacer esto, formaremos números y dos puntos. Permítanme recordarles que la resolución del libro es 600x800 (no me equivoqué, es decir 600x800), si lo miran como una hoja.

CC: MM: SS - eso es lo que obtenemos ocho caracteres. En total, cada dígito es 100x600. Para los números, elegí una bonita fuente “Gideon's-Army-”. Luego, usando imagemagick, formamos números y dos puntos con los siguientes 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, obtenemos números del 0 al 9 y dos puntos. Aquí hay un ejemplo del número 2:







Si corta el encabezado de un archivo pgm determinado, entonces estos datos son adecuados inmediatamente para escribir en el libro. Hablé de esto en detalle en mi artículo " Un libro electrónico como pantalla ", por lo que no me detendré en esto en detalle.

Entonces fue una cuestión de tecnología formar un mapa de bits a partir de estos dígitos para escribir en el framebuffer simplemente copiando la matriz usando el mapeo de archivos en la memoria. Todo el proyecto vive en el repositorio: github.com/dlinyj/sony_prs-505_clock .



Todo el programa está contenido en el archivo time.c... No analizaré todo el código, pero me centraré en algunos puntos. En este programa, simplemente hago una asignación de archivos a la memoria (ya sea un búfer de tramas, un archivo de prueba o un archivo de dispositivo de disco virtual de libro electrónico). A continuación, ya estamos trabajando con el archivo como área de memoria. En él copio imágenes de símbolos de reloj según la hora actual.

Mostramos un archivo en la memoria en el que formaré una imagen.



image = mmap (0, file_lenght, PROT_WRITE, MAP_SHARED, fd, 0);


Las imágenes se copian en la función print_symbol, en la que paso el número de posición del dígito y el nombre del archivo de dígitos a copiar.



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);
}


Aquí abro el archivo de dígitos y lo copio en la posición apropiada en el área de memoria de la imagen mapeada.

En principio, era posible cada vez no abrir el archivo, leerlo y luego cerrarlo, sino simplemente hacer una copia en la memoria y copiar desde allí, pero una buena idea vino solo ahora.

Si desea ejecutar este programa en su computadora para formar una imagen, no olvide cambiar el compilador en el Makefile y eliminar 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 el programa y lo ejecutamos sin parámetros. Como resultado, obtenemos el archivo "test.pgm" con la hora actual.







Si especifica un dispositivo de archivo específico, entonces la formación de la imagen ya estará sin el encabezado del archivo pgm, adecuado para cargarlo en el libro. Además, este programa se puede cargar en el libro y luego actualizar automáticamente la hora.

Ejecuté este programa en una PC con un libro USB conectado y mostré la hora en él. El programa se inicia simplemente (el script start.sh acepta el archivo del dispositivo):



#!/bin/bash
while true;do ./time $1;done


Como resultado, puede ver el reloj en la pantalla.







conclusiones



El programa está escrito de tal manera que se puede recopilar y completar en un libro electrónico para convertirlo en un reloj. Puede parecer divertido utilizar un dispositivo técnico tan complejo como un reloj, pero ¿por qué no? Ahora las pilas de estos libros se están agotando y reemplazarlas es una tarea bastante laboriosa. Si se reemplaza la batería con su emulador (un espacio en blanco que permite que el libro funcione, pero no almacena energía) y el libro se conecta a un cargador, entonces funcionaría constantemente.

Mis experimentos han demostrado que el libro del cargador no entra en modo de suspensión y el reloj puede funcionar de forma continua. Además, el libro en sí tiene un reloj incorporado y puede mostrar la hora correctamente.

Uno de los problemas que encontré, y no pude resolver, es cómo agregar el programa de reloj a la carga automática del libro, mientras sofoca la carga de la interfaz gráfica en sí, para que no haya competencia por la pantalla. En general, todavía hay espacio para una mayor experimentación y experimentación. Pero esa será una historia completamente diferente, gané este libro, muestra el reloj, puedes comenzar otros proyectos.

¿Qué sugerencias locas tienes para usar el libro electrónico Sony prs-505?



Enlaces:



  1. "E-book como exhibición".
  2. "Tinta electrónica para Wirenboard 5 o dibuja códigos de barras en Go".
  3. Repositorio de proyectos.
  4. Historia de mis experimentos 1 , 2 , 3 , 4 .



All Articles