На удивление старенькая читалка Sony prs-505 представляет собой очень крутой конструктор всяких самоделок.
В очередной раз взял эту книгу, чтобы сделать себе «бумажные» часы.
Мне нравится это решение тем, что цифры большие и яркие, но они не светятся в темноте и не мешают спать.
Идея часов на электронной бумаге совсем не нова, но мне просто захотелось еще раз поиграть с этой крутой читалкой.
В результате получается своего рода проект выходного дня, потому что я могу.
Как обычно, собрал все возможные грабли и ошибки.
Свой тернистый путь я описал в этой статье.
Фон
Наверняка многие помнят мой пост" Ээлектронная книга как дисплей » в котором я рассказал о том, как работать с дисплеем электронной книги.
Фото из поста" Ээлектронная книга как дисплей ".
Там по сути я работал с фреймбуфером видеоустройства, в которое выводил изображение.
Основной проблемой в той статье была передача изображений на устройство.
Тогда я не нашел в себе достаточно пороха и мотивации, чтобы довести задуманное до конца, поэтому книгу отдали кому-то, а идея создания такого устройства была забыта.
Но все изменилось после выхода замечательной статьи от автора Алексшнуп : " ? Электронные чернила для Wirenboard 5 или рисование штрих-кодов на Go ".
В этой статье Алексшнуп решена проблема отображения штрих-кодов на экране этой книги для отладки сканера штрих-кодов.
А я только что решил проблему переноса изображений в книгу.
Короче говоря, тогда Алексшнуп создал модуль ядра, который при подключении книги по USB создает дополнительный виртуальный жесткий диск размером 600х800=480000 байт. Точнее диск будет 1 Мб, но видимая область всего 480 000 байт. Фактически все, что окажется в памяти диска, окажется на экране книги.
В общем, это блестящая вещь; можно даже визуально увидеть, как разбивается диск, если, например, создать там файловую систему.
Например, вы можете отправить изображение в книгу с помощью следующей команды:
Все, что описано далее в этой статье, является идеологическим продолжением этих двух экспериментов.djpeg -pnm -grayscale test.jpg | dd bs=1 skip=15 | dd of=/dev/sdx bs=480k
Начнем, исправим и сделаем еще раз
После прочтения статьи , я связался с его автором Алексшнуп .И он решил дать мне одну разобранную книгу для экспериментов.
В итоге, имея в руках работающее оборудование, я с радостью приступил к экспериментам.
Первое что мне нужно было сделать это установить прошивку прс-плюс .
И после этого можно попробовать создать тот самый виртуальный жёсткий диск для передачи изображений по статье Алексшнуп .
Статью цитировать не буду, это исчерпывающее руководство.
После этого пытаюсь передать изображение командой dd.
Образ передан по-новому.
Радостно осознав, что у меня все есть, все карты у меня на руках, есть интерфейс передачи изображений, я могу использовать его как угодно, я начал проделывать кучу экспериментов.
Я начал писать программу часов и отлаживать ее вывод в книгу.
В итоге, как обычно бывает с командой «dd» («разрушитель диска»), я сделал не тот диск, и.
В итоге вместо виртуального диска я записал на диск (флешку) самой книги, превратив ее в кирпич.
Просто взял и записал 480 000 байт жирного раздела.
Я даже не могу передать всех тех чувств, которые я испытала в тот момент.
Потрепанная книга.
Главное, как восстановить эту книгу, было неясно.
Было понятно, что нужно взять другую такую же книгу и заново установить на нее прошивку.
прс-плюс .
Затем возьмите из него эти первые 480 000 байт и перенесите их в этот кирпич.
В общем, я расстроился, психанул и купил на Авито новую читалку Sony prs-505. При этом книга пришла со всеми рабочими кнопками, в чехле шлейфы не порвались.
Его даже можно было использовать по прямому назначению, вот только аккумулятор наполовину сдох.
Но для моих целей этого было достаточно.
Сейчас с севшими батарейками эти книги можно найти до тысячи рублей, на мой взгляд идеальная цена для линуксового устройства, с открытым исходным кодом и такой шикарной системой энергосбережения.
Недавно купленная электронная книга.
С этой книгой я повторил процедуру установки прошивки точно так же, затем, как и планировал, перенес 480 000 байт толстого раздела из одной электронной книги в другую.
Это дало мне две книги, которые мне уже понравились.
Правда тот, что был разобран полностью, начал безбожно глючить, и я им практически не пользовался.
Мы пишем программное обеспечение
Идея часов довольно проста.Мы просто сформируем изображение времени на холсте, а затем отправим его во фреймбуфер.
Для этого мы будем формировать цифры и двоеточия.
Напомню, разрешение книги 600х800 (не ошибся, именно 600х800), если смотреть на нее как на лист. CC: MM: SS — это дает нам восемь символов.
Итого каждая фигурка имеет размер 100х600. Для цифр я выбрал красивый шрифт «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_lock .
Вся программа содержится в файле время.
с .
Я не буду рассматривать весь код, но остановлюсь на нескольких моментах.
В этой программе я просто сопоставляю файл в память (либо кадровый буфер, либо тестовый файл, либо файловое устройство виртуального диска электронной книги).
Далее работаем с файлом как с областью памяти.
Копирую в него изображения символов часов в зависимости от текущего времени.
Отображаем файл в памяти, в котором будем создавать изображение.
image = mmap (0, file_lenght, PROT_WRITE, MAP_SHARED, fd, 0);
Копирование изображений происходит в функции print_symbol, которой я передаю номер позиции цифры и имя файла копируемой цифры.
void print_symbol (unsigned int position, char * filename) {
Теги: #Разработка для Linux #Разработка для Интернета вещей #Сделай сам или Сделай сам #ruvds_articles #ruvds_articles #часы #часы #Электронная книга #sony prs-505 #электронная бумага
-
Сегодня Состоялась Презентация Opengl 4.0
19 Oct, 24 -
30 Идей Для Стартапов
19 Oct, 24 -
Думать По-Другому!
19 Oct, 24