从PRS-505电子书制作手表





令人惊讶的是,旧的索尼prs-505电子书是各种自制产品的非常酷的设计师。我再次读过这本书,使自己成为“纸”表。我喜欢这种解决方案,因为它们既大又亮,而它们却不会在黑暗中发光,也不会干扰睡眠。电子纸上的时钟根本不是什么新主意,但我只是想再次玩这个很酷的电子书。结果是一种周末计划,因为我可以。和往常一样,我收集了所有可能的错误和错误。我在本文中描述了我的棘手道路。



背景



当然,很多人都会记得我的帖子“作为显示的电子书”,其中我告诉了如何使用电子书的显示。





图片来自“电子书作为展示”。



实际上,我在那里使用视频设备的帧缓冲区,在其中显示图像。那篇文章的主要问题是将图像传输到设备。然后,我自己没有找到足够的火药和动力来结束我的计划,因为这本书是送给某人的,而忘记了制造这种装置的想法。但是在作者发表精彩的文章后,一切都改变了亚历克斯努普:“ Wirenboard 5的电子墨水或Go上绘制条形码”。在这篇文章中亚历克斯努普解决了在本书屏幕上显示条形码以调试条形码扫描仪的问题。并且刚刚解决了将图像传输到书本的问题。







简而言之 亚历克斯努普创建了一个内核模块,当通过USB连接书籍时,该内核模块会创建一个额外的虚拟硬盘,大小为600x800 = 480,000字节。更确切地说,磁盘将为1 MB,但可见区域仅为480,000字节。实际上,进入磁盘内存的所有内容都将进入书籍的屏幕。通常,这是一个很棒的作品,例如,如果您在此处创建文件系统,您甚至可以直观地看到磁盘布局的运行情况。例如,您可以使用以下命令将图像发送到书籍:



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


本文中进一步描述的所有内容都是这两个实验的意识形态延续。



让我们开始,修复它,然后再做一次



阅读文章后,我联系了作者亚历克斯努普... 他决定给我一本拆卸的实验书。结果,我手头上有工作设备,很高兴地开始了实验。我需要做的第一件事是安装prs-plus固件然后,您可以尝试根据该文章创建该虚拟硬盘驱动器以传输图像亚历克斯努普... 我不会引用该文章,它是一个全面的指南。之后,我尝试使用dd命令传输图像。





图像以新方式传输。



欣喜地了解到一切,所有卡都在我手中,有一个用于传输图像的界面,您可以随意使用它,我开始做一堆实验。我开始编写时钟程序,并将其输出调试为书。结果,就像通常使用命令“ dd”(“磁盘破坏器”)一样,我在磁盘上犯了一个错误,并且……

结果,我将它而不是虚拟磁盘写到了书本身的磁盘(闪存驱动器)上,变成了砖头……我只花了480,000字节写了脂肪-部分。我什至无法传达我当时的所有感受。





已打开的书。



如何还原这本书的主要内容尚不清楚。很显然,您需要另一本相同的书并在上面重新安装prs-plus固件。然后从中取出前480,000个字节,并将其传输到该砖中。



总的来说,我很伤心,害怕,并在Avito上购买了新的Sony prs-505电子书。同时,这本书带有所有的工作按钮,在这种情况下,火车没有被撕裂。它甚至可以用于预期的目的,唯一的问题是电池没电了。但是就我的目的而言,这就足够了。现在,有了废旧电池,这些书就可以找到多达一千卢布,在我看来,这是Linux设备,开源和如此华丽的节能系统的理想价格。





新鲜购买的电子书。



在这本书中,我以相同的方式重复了安装固件的过程,然后按计划将480,000字节的胖节从一本电子书转移到了另一本电子书。因此,我得到了两本书,已经很有趣了。没错,被完全拆解的那辆车开始是令人难以置信的越野车,而我实际上并没有使用它。



我们写软件



手表的想法很简单。我们将简单地在画布上形成时间图像,然后将其发送到帧缓冲区。为此,我们将形成数字和冒号。让我提醒您,如果您像书本一样看这本书,它的分辨率是600x800(我没记错,就是600x800)。

CC:MM:SS-这就是我们得到的八个字符。总计,每个数字为100x600。对于数字,我选择了一种不错的字体“ Gideon's-Army-”。接下来,使用imagemagick,我们使用以下命令形成数字和冒号:



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




结果,我们得到从0到9的数字和一个冒号。这是数字2的示例:







如果您切断了给定pgm文件的标题,那么此数据将立即适合于写入书本。我在我的文章“作为显示的电子书”中详细讨论了这一点,因此,我将不再赘述。

然后,通过简单地使用文件映射将矩阵复制到内存中,就可以从这些数字形成位图以写入帧缓冲区,这是技术问题。整个项目都位于存储库中:github.com/dlinyj/sony_prs-505_clock



整个程序包含在文件time.c中... 我不会分析整个代码,但是我将在几点上做详细介绍。在此程序中,我只是将文件映射到内存(帧缓冲区,测试文件或电子书虚拟磁盘设备文件)。接下来,我们已经将文件用作存储区。我将时钟符号的图像复制到其中,具体取决于当前时间。

我们在内存中显示一个文件,在其中我将形成图像。



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


图像在print_symbol函数中复制,我在其中传递了数字位置编号和要复制的数字文件的名称。



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


在这里我打开数字文件并将其复制到映射图像的存储区域中的适当位置。

原则上,每次都可以不打开文件,读取文件然后将其关闭,而只是在内存中进行复制并从那里进行复制,但这只是一个好主意。

如果要在计算机上运行该程序以形成映像,请不要忘记更改Makefile中的编译器并删除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


我们编译程序并在没有参数的情况下运行它。结果,我们获得了带有当前时间的文件“ test.pgm”。







如果指定了特定的文件设备,则图像的格式将已经没有pgm文件的标题,适合于上传到书中。另外,可以将该程序加载到书中,然后自动更新时间。

我在连接了USB书的PC上运行了该程序,并在上面显示了时间。该程序只需启动即可(start.sh脚本接受设备文件):



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


结果,您可以在屏幕上观看时钟。







结论



该程序的编写方式使其可以被收集并填充到电子书中,从而将其转变为时钟。使用像时钟这样的复杂技术设备似乎很有趣,但是为什么不呢?现在这些书中的电池快要枯竭了,而更换它们是一项相当艰巨的任务。如果将电池替换为其仿真器(可以让书本工作但不存储能量的空白电池),并且书本已连接至充电器,则它将一直工作。

我的实验表明,充电器上的书不会进入睡眠模式,并且手表可以连续工作。另外,这本书本身有一个内置时钟,它可以正确显示时间。

我遇到的无法解决的问题之一是如何在自动加载书籍时添加时钟程序,同时又限制了图形界面本身的加载,因此在显示方面没有竞争。一般而言,仍有进一步试验和试验的空间。但这已经是一个完全不同的故事了,我赢得了这本书,显示了时钟,可以启动其他项目。

您对使用Sony prs-505电子书有什么疯狂的建议?



链接:



  1. “电子书作为显示。”
  2. “ Wirenboard 5的电子墨水或在Go上绘制条形码。”
  3. 项目存储库。
  4. 我的实验记录1234



All Articles