Étonnamment, l'ancien livre électronique Sony prs-505 est un concepteur très cool de toutes sortes de produits faits maison. Une fois de plus j'ai pris ce livre pour me fabriquer une montre «papier». J'aime cette solution car les chiffres sont grands et lumineux, alors qu'ils ne brillent pas dans l'obscurité et n'interfèrent pas avec le sommeil. L'idée d'une horloge sur papier électronique n'est pas du tout nouvelle, mais je voulais juste jouer à nouveau avec ce livre électronique cool. Le résultat est une sorte de projet de week-end, parce que je peux. Comme d'habitude, j'ai rassemblé toutes les erreurs et erreurs possibles. J'ai décrit mon chemin épineux dans cet article.
Contexte
Beaucoup se souviendront sûrement de mon article « E-book as a display » dans lequel j'ai expliqué comment travailler avec l'affichage d'un e-book.
Photo du message " E-book comme affichage ".
Là, en fait, je travaillais avec le framebuffer de l'appareil vidéo, dans lequel j'affichais l'image. Le principal problème de cet article était le transfert de l'image vers l'appareil. Ensuite, je n'ai pas trouvé assez de poudre à canon et de motivation en moi pour mener à bien mon plan, car le livre a été donné à quelqu'un et l'idée de fabriquer un tel appareil a été oubliée. Mais tout a changé après la publication d'un magnifique article de l'auteurAlexshnup: " Encre électronique pour Wirenboard 5 ou dessin de codes-barres sur Go ". Dans cet articleAlexshnupa résolu le problème d'affichage des codes à barres sur l'écran de ce livre pour déboguer le scanner de codes à barres. Et vient de résoudre le problème du transfert des images vers le livre.
Bref, alors Alexshnupa créé un module de noyau qui, lorsqu'un livre est connecté via USB, crée un disque dur virtuel supplémentaire, d'une taille de 600x800 = 480 000 octets. Plus précisément, le disque sera de 1 Mo, mais la zone visible n'est que de 480 000 octets. En fait, tout ce qui entre dans la mémoire du disque ira à l'écran du livre. En général, c'est une pièce brillante, vous pouvez même voir visuellement comment la disposition du disque se déroule, si, par exemple, vous créez un système de fichiers là-bas. Par exemple, vous pouvez envoyer une image vers un livre avec la commande suivante:
djpeg -pnm -grayscale test.jpg | dd bs=1 skip=15 | dd of=/dev/sdx bs=480k
Tout ce qui est décrit plus loin dans cet article est une continuation idéologique de ces deux expériences.
Commençons, réparons et recommençons
Après avoir lu l' article , j'ai contacté son auteurAlexshnup... Et il a décidé de me donner un livre démonté pour des expériences. En conséquence, ayant du matériel de travail à portée de main, je me suis lancé avec bonheur dans les expériences. La première chose que j'avais à faire était d'installer le firmware prs-plus . Et après cela, vous pouvez essayer de créer ce disque dur virtuel pour transférer des images selon l'articleAlexshnup... Je ne citerai pas l'article, c'est un guide complet. Après cela, j'essaye de transférer l'image en utilisant la commande dd.
L'image est transmise d'une nouvelle manière.
Réalisant joyeusement que tout, toutes les cartes sont entre mes mains, il y a une interface pour transférer des images, vous pouvez l'utiliser comme vous le souhaitez, j'ai commencé à faire un tas d'expériences. J'ai commencé à écrire un programme d'horloge et à déboguer leur sortie dans un livre. En conséquence, comme c'est généralement le cas avec la commande "dd" ("disk destroyer"), j'ai fait une erreur avec le disque, et ...
En conséquence, je l'ai écrit à la place d'un disque virtuel, sur le disque (lecteur flash) du livre lui-même, le transformant en brique ... Je viens de prendre et d'écrire 480 000 octets de graisse -section. Je ne peux même pas transmettre tous les sentiments que j'ai ressentis à ce moment-là.
Livre ouvert.
L'essentiel, comment restaurer ce livre, n'était pas clair. Il était clair que vous deviez prendre un autre livre du même type et réinstaller le firmware prs-plus dessus. Ensuite, prenez ces 480000 premiers octets et transférez-les dans cette brique.
En général, j'étais triste, paniqué et j'ai acheté un nouvel e-book Sony prs-505 sur Avito. En même temps, le livre était avec tous les boutons de travail, dans un cas, les trains n'étaient pas déchirés. Il pouvait même être utilisé aux fins prévues, la seule chose était que la batterie était à moitié morte. Mais pour mes besoins, c'était suffisant. Maintenant, avec des piles déchargées, ces livres peuvent être trouvés jusqu'à mille roubles, à mon avis le prix idéal pour un appareil Linux, avec l'open source et un système d'économie d'énergie aussi magnifique.
E-book fraîchement acheté.
Avec ce livre, j'ai répété la procédure d'installation du firmware de la même manière, puis, comme prévu, j'ai transféré 480000 octets de la grosse section d'un livre électronique à un autre. Ainsi, je me suis retrouvé avec deux livres, avec lesquels je me suis déjà amusé. Certes, celui qui a été complètement démonté a commencé à être un buggy impie, et je ne l'ai pratiquement pas utilisé.
Nous écrivons des logiciels
L'idée de la montre est assez simple. Nous allons simplement former une image du temps sur une toile, puis l'envoyer vers le framebuffer. Pour ce faire, nous formerons des nombres et des deux points. Permettez-moi de vous rappeler que la résolution du livre est de 600x800 (je ne me suis pas trompé, à savoir 600x800), si vous le regardez comme une feuille.
CC: MM: SS - c'est ce que nous obtenons huit caractères. Au total, chaque chiffre est de 100x600. Pour les nombres, j'ai choisi une belle police "Gideon's-Army-". Ensuite, en utilisant imagemagick, nous formons des nombres et des deux-points avec les commandes suivantes:
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
En conséquence, nous obtenons des nombres de 0 à 9 et un signe deux-points. Voici un exemple du numéro 2:
Si vous coupez l'en-tête d'un fichier pgm donné, ces données sont immédiatement adaptées à l'écriture dans le livre. J'en ai parlé en détail dans mon article " Un livre électronique comme affichage ", donc je ne m'attarderai pas sur cela en détail.
Ensuite, c'était une question de technologie pour former une image bitmap à partir de ces chiffres pour l'écrire dans le framebuffer en copiant simplement la matrice en utilisant le mappage de fichier en mémoire. L'ensemble du projet réside dans le référentiel: github.com/dlinyj/sony_prs-505_clock .
L'ensemble du programme est contenu dans le fichier time.c... Je n'analyserai pas tout le code, mais je m'attarderai sur quelques points. Dans ce programme, je fais simplement un mappage de fichier en mémoire (soit un tampon de trame, soit un fichier de test, soit un périphérique de fichier d'un disque virtuel de livre électronique). Ensuite, nous travaillons déjà avec le fichier comme zone de mémoire. J'y copie les images des symboles d'horloge, en fonction de l'heure actuelle.
Nous affichons un fichier en mémoire dans lequel je vais former une image.
image = mmap (0, file_lenght, PROT_WRITE, MAP_SHARED, fd, 0);
Les images sont copiées dans la fonction print_symbol, dans laquelle je passe le numéro de position du chiffre et le nom du fichier de chiffres à copier.
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);
}
Ici, j'ouvre le fichier de chiffres et je le copie à la position appropriée dans la zone de mémoire de l'image mappée.
En principe, il était possible à chaque fois de ne pas ouvrir le fichier, de le lire, puis de le fermer, mais simplement de faire une copie en mémoire et de copier à partir de là, mais une bonne idée n'est venue que maintenant.
Si vous souhaitez exécuter ce programme sur votre ordinateur pour former une image, n'oubliez pas de changer le compilateur dans le Makefile et de supprimer 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
Nous compilons le programme et l'exécutons sans paramètres. En conséquence, nous obtenons le fichier «test.pgm» avec l'heure actuelle.
Si vous spécifiez un périphérique de fichier spécifique, alors la formation de l'image sera déjà sans l'en-tête du fichier pgm, adapté au téléchargement vers le livre. En outre, ce programme peut être chargé dans un livre, puis mettre à jour automatiquement l'heure.
J'ai exécuté ce programme sur un PC avec un livre USB connecté et j'ai affiché l'heure dessus. Le programme est lancé simplement (le script start.sh, accepte le fichier de l'appareil):
#!/bin/bash
while true;do ./time $1;done
En conséquence, vous pouvez regarder l'horloge fonctionner sur l'écran.
conclusions
Le programme est écrit de telle manière qu'il peut être collecté et rempli dans un livre électronique pour le transformer en une horloge. Il peut sembler amusant d'utiliser un appareil technique aussi complexe comme horloge, mais pourquoi pas. Maintenant, les piles meurent dans ces livres et leur remplacement est une tâche assez laborieuse. Si la batterie était remplacée par son émulateur (un blanc qui permet au livre de fonctionner, mais ne stocke pas d'énergie) et que le livre était connecté à un chargeur, il fonctionnerait en permanence.
Mes expériences ont montré que le livre sur le chargeur ne passe pas en mode veille et que la montre peut fonctionner en continu. De plus, le livre lui-même a une horloge intégrée, et il peut afficher l'heure correctement.
Un des problèmes que j'ai rencontré, et que je n'ai pas pu résoudre, est de savoir comment ajouter le programme d'horloge au démarrage du livre, tout en étouffant le chargement de l'interface graphique elle-même, de sorte qu'il n'y ait pas de concurrence pour l'affichage. En général, il reste encore de la place pour de nouvelles expérimentations et expérimentations. Mais ce sera une histoire complètement différente, j'ai gagné ce livre, affiche l'horloge, vous pouvez démarrer d'autres projets.
Quelles suggestions folles avez-vous pour utiliser le livre électronique Sony prs-505?
Liens:
- "E-book comme affichage."
- "Encre électronique pour Wirenboard 5 ou dessiner des codes-barres sur Go."
- Référentiel de projet.
- Historique de mes expériences 1 , 2 , 3 , 4 .