dlinyj: (Default)
Очередная статья от меня на хабре. Свёл все свои эксперименты с электронными книгами Sony prs-505 в единую статью.



Как обычно, читаем комментрируем, ставим лайки. И ставим жирную точку в данном проекте.
dlinyj: (Default)
Ответы на вопрос предыдущего поста будут позднее

Что-то я психанул в связи с частичной утратой PRS-505 и нереализованной программой, что решил потратить два косаря и купить нормальную целую книгу. На самом деле у меня впервые в руках нормально работающая целая книжка, без каких либо нареканий. И выглядит она так, будто её вчера принесли из магазина. Только дохлый аккумулятор (что в сущности не особо важная проблема).



И я не удержался, прошил её альтернативными прошивками, сконфигурировал, расчехлил барабан для дроби и...


ОНО работает!



Грёбаный волшебник!


Полное удовлетворение!




Просто эмоции :)
dlinyj: (Default)
Так получилось, что данный проект был сделан в "стол" из-за того, что книжку я загубил.

Пришла идея, куда можно применить книжку - сделать часы. Мне нравится большие цифры, и такие чтобы были яркими, но не светились в темноте. Идея не нова, и есть часы на электронной бумаге. Но всё же решил сделать. Решение гениальное и простое. Для начала формируем цифры и двоеточия. Напомню, что разрешение книжки 600х800 (если смотреть как на лист).
ЧЧ:ММ:СС - это как раз восемь символов. Итого, каждая цифра получается размером 100x600. Был подобран приятный шрифт Gideon’s-Army-, и сформированы цифры и двоеточия двумя командами:
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

Если обрезать заголовок файла, то формат как раз для записи в книгу. Получается примерно такая цифиря.



Умышленно сделал бордюр в отображении, чтобы понять формат цифры. ЖЖ режет бордюр. pgm оставил для удобства просмотра. Чтобы понятно какие цифры получились.
Дальше было дело техники сформировать из данных цифр битмап для записи во фреймбуффер, простым копированием матрицы с помощью отображения файла в память. Для удобства отладки, если не указан оконечный файл, то формируется обычный pgm-файл с заголовком, которые можно просмотреть редактором (test.pgm). Если указать конкретный файл (можно файл-устройство), то создаётся чистый битмап (отличается фактически отсутствием заголовка в 54 байта). Результат.


test.pgm


Готовую программу разместил github: https://github.com/dlinyj/sony_prs-505_clock

Если бы была живая книжка, код бы перенёс прямо в книжку. Запускается программа просто (скрипт start.sh, принимает файл-устройство):

while true;do ./time /dev/sd*;done


Цикл внешний, так как не смог победить синхронизацию записи на диск в момент работы программы. Пока программа не завершит работу, данные на диск не попадают. Особенности ядерной организации (4.4.0-53-generic). Всякие sync не помогают. Если в книжку, то надо добавить ещё ioctl как в моей статье на хабре и указать сам fb0 внутри программы (буквально добавить 4 строки в программу). Может допишу позже. Гифка работы под катом.

гифка работы )

Пост написал исключительно, чтобы не забыть и не потерять. Думаю, если достану книгу, то доделаю проект, так как почти готов.
dlinyj: (Default)
Понимаешь, что налажал в команде dd...

Написал отличную программулинку, только хотел её обкатать на книжке, и ошибся с диском...


Кирпич эдишн. Стёр первые 480 000 байт (точно) FAT-раздела... Что делать - не знаю... Был бы донор... Кнопки не пашут.
dlinyj: (Default)
Электронная книжка в качестве дисплея, дубль два...


Да-да, та самая модель! Тот кто не понял, о чём идёт речь, то затравка в этом посте. А я пользуясь случаем, выражаю огромную благодарность автору поста alexshnup за методический материал и аппаратное обеспечение! Прям вдохновило на дальнейшие подвиги :).

З.Ы. Мои потуги с книжкой можно почитать по тегу prs-505
dlinyj: (Default)
Что-то в связи с болезнью никак не могу добраться до ЖЖ, собраться с мыслями и написать данный простенький пост. Грёбаная осень!

Забегая вперёд скажу, что мне удалось по UART передать картинку, всё благодаря товарищу [livejournal.com profile] paracloud, который мне точно указал что делать в этом посте http://dlinyj.livejournal.com/609986.html .

Говоря простым языком, нужно настроить консоль. Я набросал небольшую програмку

#include <stdio.h>

...
int main (int argc, char* argv[])
{
    struct termios oldtty, newtty;
    fcntl(0, F_SETFL, 0);     //read com-port is the bloking
    tcgetattr(0, &oldtty);
    newtty = oldtty;
    newtty.c_iflag =  IGNBRK;
    newtty.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
    newtty.c_oflag = 0;
    newtty.c_cflag &= ~PARENB;
    newtty.c_cflag |= CS8;
    newtty.c_cc[VMIN] = 1;
    newtty.c_cc[VTIME] = 1;
    tcsetattr(0, TCSANOW, &newtty);
    return 0;
}



По сути программа перенастраивает терминал и отключает эхо. После чего "вслепую" вводим на книжке
cat /dev/tty > result.raw

а на компе вводим
sudo cat img.raw > /dev/ttyUSB0

И спустя, примерно, минуту получаем исходный файл на книжке. Консоль удаётся вернуть только после перезагрузки книжки. Это файл вполне себе видится и выводится на экран без потерь и артефактов.

Это был топорный тестовый вариант, в стиле "а можно ли?"

Далее, я решил написать программу, которая не создаёт промежуточный файл, а принимает данные в буфер, а затем этот буфер копирует во фреймбуффер. Ознакомится можно под катом )

Здесь настраивается блокирующее чтение:

fcntl(0, F_SETFL, 0); //read com-port is the bloking

Которое не делает бесконечный цикл, а блокирует оператор read до появления данных.

Не знаю, что я делаю не так. Пограмма честно отрабатывает, но выводит тупо чёрный экран, по завершению приёма. Увы...
Надо разбираться дальше.
dlinyj: (Default)
Что-то я столько сил положил на вывод на экран хоть что-нибдь, плюс за выходные ни разу не отдохнул, т.к. просто утоп в домашних делах. В результате чувствую себя выжатым лимоном, который переехал бронепоезд. По сему дальнейшие ковыряния провожу вяленько, в свободное от работы время.

Обо всём попорядку.

1. Было проверенно и доказано, что для картинки выводимой на экран значащим является только старший ниббл. А конкретно старшие три бита цвета. Остальные могут принимать любое значение и на изображение не влияют.
Это означает, что можно передавать по UART только старшую часть байта, которую удобно кодировать символами от 0 до F (HEX).

Была набросана небольшая программа (текст под катом), которая преобразует любой файл в поток старших ниблов текст програмки )
Программа работает отлично, но... попытка передать что-либо затыкается. Точнее нет. Если сделать так:

./senddata any-file > /dev/ttyUSB*

То в консоли на ридере будет бежать текст как и положено. Однко, если в консоли на книжке сделать

cat /dev/tty > testfile

или

cat > testfile

то, увы - testfile в любом раскладе будет равен нулю. Не знаю почему. И консоль затыкается при таком подходе от обилия символов. Но если в minicom попробовать передать текстовый файл, а там опять же сделать так cat, то файл как-то криво передаётся, но опять же не полностью.

В общем, как обойти эту засаду я пока не знаю, и даже не знаю куда копать, кроме как в сторону драйверов или второго UARTa

2. Второй вариант - это попытка сменить драйвер USB. Камрад [livejournal.com profile] 22021977 провёл большую работу по сборке онного драйвера. О том как это сделать можно и нужно прочитать тут: http://dlinyj.livejournal.com/609590.html?thread=7841846#t7841846

Первая попытка загрузить драйвер у меня привела к панике ядра: паника под катом )

Если попробовать сначала загрузить g_zero.o (даже не знаю, что за драйвер), то он на него ругнётся, но не запаникует. Потом можно даже загрузить с неким успехом g_ether.o опять же под кат и далее там )

Есть несколько решений влоб: вывести вторую консоль (хотя бы RX). Проблема очевидна - куда её выводить. Либо попробовать вообще альтернативную прошивку. Проблема осложняется тем, что по моему она работает с sd-карты и грузится кнопкой 7. А я в процессе опытов перебил шлейф от клавы (впрочем это лечится). Мне тут сказали, что я упоротый, что занимаюсь такими вещами :)


З.Ы. У меня тут эпичная шляпа случилась: запустил обновление системы с 10.04 на 12.04 (жалею до сих пор). В середине обновления что-то коротнуло в компе и он вырубился. Результат - слетевшая rootfs. Но слава богу востанавливаемая.
dlinyj: (Default)
Уж простят меня люди не в теме, но я пишу о том что мне важно и интересно!

Итак, открываем шампанское, заряжаем салюты и громко кричим ура: картинку удалось вывести на экран. Для этого даже была набросана и скомпилированна программа


Тот самый график, о котором я писал ранее


О моих терханиях можно почитать в комментариях к тому посту http://dlinyj.livejournal.com/609201.html

Собственно говоря, я поставил тулчейн, который мне посоветовал [Bad username or site: @ livejournal.com] мне не подошёл. И какие ухищрения я не использовал, заставить работать программу я не смог (спасибо за помощь [livejournal.com profile] vshmuk и [livejournal.com profile] paracloud ) . Путём многократного гугления, а так же с наводки товарища [livejournal.com profile] 22021977 оказалось, что для данного устройства энтузиастами пишется целый свой линукс! http://openinkpot.org/wiki (А вы говорите vogue-плееры) А следовательно должен быть и рабочий тулчейн.

Поиском "prs-505 toolchain" он был найден тут http://code.google.com/p/prs-plus/downloads/detail?name=arm-toolchain-sony-300.tar.gz&can=4&q= . После чего хелло ворд завёлся без проблем (даже без статика!). Ну дальше дело техники, согласно http://systemsand.me/sony-prs-300prs-505-hack/ набросал небольшую программку текст програмки )

Дефайны взял из кода драёвера с сайта Sony http://www.sony.net/Products/Linux/Audio/PRS-505.html файл 8track20070714.tgz (спасибо [livejournal.com profile] paracloud за наводку.

Компилировал примитивнной коммандой с минимум опций : path to toolchain/arm-unknown-linux-gnu-gcc -static showpic.c -o showpic

Без статика не захотел работать. Дальше после монтирования всех устройств, запускаем:
root@(none):/tmp/t1# ./showpic send.raw 
Show image
root@(none):/tmp/t1# 


И наслаждаемся картинкой в заглавии :).

Из неприятных багов было замечено, что картинку после гнуплота надо повернуть. Лечится переписыванием скрипта гнуплота.

Теперь осталось научится гасить консоль, пока не знаю как. Из процессов активно-запущенных, никто не вызывает подозрение ps aux )

Поговаривают, что можно сделать usb-gadget, типа чтобы книжка виделась USB-Ethernet. Но это отдельный гемморой. Готов выслушать мысли и предложения.
dlinyj: (Default)
Сначала я попробовал собрать свою rootfs и скормить её родному прошивальщику. Но с ошибкой контрольной суммы был послан в пешее эротическое путешествие.

Тогда я заметил, что при подключённом USB на компе видится некий диск, объёмом примерно 200 метров. Но в системе его нет. К слову сказать с подсоединённым USB нет нужды убивать никакие процессы, система работает не засыпая.

У меня есть вся прошивка кникжи, и я понял что жёский диск используется в приложении книги (имеется в виду то для чего предназначено устройство). Это файлик cramfs.Fsk.img
Я примонтировал этот образ на своём компьютере и поглядел скрипт sony/ebook/bin/tinyhttp.sh . Это тот самый скрипт, который мы придушиваем в самом начале, чтобы получить консоль. И там была такая строка:

NUM=`grep Data /proc/mtd | awk -F: '{print $1}' | awk -Fd '{print$2}'`
/usr/local/sony/bin/mkdosfs /dev/mtdblock$NUM


Выполнив первый скрипт, я получил число семнадцать, и дальше подмонтировал /dev/mtdblock17 в /tmp/t1 . Объяснить как я понял, что именно это будет флешкой я не могу, но просто логика подсказала, что именно в этом файле должна идти инициализация пользовательских данных.

И в результате я увидел содержимое диска, которое я вижу на своём компе.

Далее, у меня был уже собранный helloworld для ARM920T. И я решил попробовать его запустить
Для справки: собирался коммандой: arm-none-linux-gnueabi-gcc -mcpu=arm920t hello.c -o hello

И тут меня ждал облом'c...
root@(none):/tmp/t1# ls
Digital Editions  autorun.inf  database  hello  tmp
root@(none):/tmp/t1# cp hello /tmp/
root@(none):/tmp/t1# cd ..
root@(none):/tmp# ls
hello  t1
root@(none):/tmp# ./hello 
bash: ./hello: No such file or directory
root@(none):/tmp# chmod +x hello 
root@(none):/tmp# ./hello 
bash: ./hello: No such file or directory


Увы... Увы... Пока что делать не знаю.
dlinyj: (Default)
Пока грандиозными результатами похвастать не могу, но всё же.

Задача: показывать раз в N секунд заданное изображение (график из gnuplot) на экране.
Решение: Оказалось достаточно тривиальным. У нас есть консоль, по которой идёт общение с линуксом. По этой консоли мы отдаём комманды в линуксе книжки (благодаря ей собственно и возможна эта петрушка), и по ней же мы можем перебрасывать данные(!). Не буду же я каждый раз перетыкать флешку.

Первое, что я сделал, это вывел отладочную консоль на бесполезный разъём наушников (кто будет слушать музыку с читалки?). При чём даже мудрившись обойтись всего двумя проводами, поскольку земля звука и цифры одна.


Вывод консоли


Книжку пока не собрал, поскольку боюсь ка бы какой косяк не всплыл. Если за сегодня всё будет хорошо, то уберу обратно в корпус (благо это занимает три минуты).

Управление и приём-передача файлов Задача чуть более сложная, но решаемая, по крайней мере у меня сработала передача от ридера в комп.
Как вы помните, в посте о железе http://dlinyj.livejournal.com/607475.html я говорил о скрипте, который записывает изображение во фрейм буффер. Напомню этот кусочек
NUM=`grep BootImg /proc/mtd | awk -F: '{print $1}' | awk -Fd '{print$2}'`
dd if=/dev/mtd$NUM of=/dev/fb0 bs=256 count=1875
/opt/sony/ebook/bin/writescreen init 0


Первая комманда определяет нормер раздела (точнее блочного устройства) NUM на котором содержится образ загрузочной картинки. Для тех кто в танке, это тупо область памяти на флешке, которая в линуксе видится как отдельный файл.
Выполнив её, я узнал, что у меня этот номер равен девяти. Ну дальше вторую комманду я немного поправил, чтобы передача велась в СОМ-порт. Опытным путём установил, что консоль для приёмо-передачи - это файл /dev/tty . Перебрасываем картинку, для этого на компе закрываем терминал и выполняем:

cat /dev/ttyUSB2 > bootimg.raw , где ttyUSB2 - это мой интерфейс VCP на базе ft232rl.

После чего в другой консоли компьютера даём комманду:

echo "dd if=/dev/mtd9 of=/dev/tty bs=256 count=1875" > /dev/ttyUSB2 , что посылает через консоль комманду передачи образа по консоли.

Всё отлично сработало, правда картинку слегка перекособочило, но это отрабатывает. После небольшой обработки согласно комментарию http://dlinyj.livejournal.com/607545.html?thread=7800633#t7800633 камрада lapinmax.ya.ru я преобразовал её в png.



Картинка с читалки


Полагаю, что её перекособочило из-за неверного старта или появившихся откуда-то лишних байт.

Обратная процедура передачи файла у меня не получилась детали как я подготавливал картинку и пробовал передать )

Полагаю, что основная причина неудачи получения файла на книжку заключается в том, что это стандартное устройство ввода, надо каким-то чудесным образом отключить консоль от стандартного устройства ввода на время передачи, а потом его включить! По моему товарищ [livejournal.com profile] cluster_d мне подсказывал как это сделать для роутера, быть может он мне поможет и сейчас.

На счёт вывода изображения на экран
К сожалению тупо с помощью консоли мне этого не удалось сделать. Вероятно придётся писать небольшую свою программулинку, как было сделано тут http://systemsand.me/sony-prs-300prs-505-hack/ . Товарищ, который писал этот пост, обещал в выходные посмотреть исходники, но видимо забыл про меня :(. Сегодня возможно попробую написать hello world. Можете мне посоветовать тулчейн и где его скачать (ОСь Ubuntu 10.10)

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 01:47 am
Powered by Dreamwidth Studios