Подключение pocketbook к linux

Обновлено: 06.07.2024

С брендом Pocketbook, думаю, знакомы многие. Если нет, поищите по тэгу pocketbook. Кратко, это устройство с экраном e-ink, использующееся для чтения электронных книг и работающее под управлением Linux. Два дня назад я купил себе такой – Pocketbook 301 plus. Одна из причин выбора именно Pocketbook в том, что для него есть SDK. Наверное, каждый программист наслаждается возможностью расширять функционал своих гаджетов под свои же нужды.

Программы для устройств Pocketbook пишутся на C с использование компилятора GCC. О том, как программировать на C под Linux, материалов в интернете масса, а вот об использовании библиотеки InkView почти ничего. InkView – это библиотека ввода\вывода для устройств Pocketbook. Учебный материал об этой библиотеке ограничивается заголовочным файлом inkview.h и исходником inkdemo.c. Несмотря на 10-и летний стаж программирования, я очень не люблю разбираться в чём-то по чужим исходникам. Уверен, я не один такой. И вполне возможно, что смогу своей статьёй облегчить кому-нибудь старт.

Мы начнём с простого – минимальной запускающейся программы, а потом будем её поэтапно усложнять. Цель этой статьи показать основные принципы, поэтому ничего полезного мы пока не напишем. Возможно, в будущем хабравчане подкинут мне идею полезной программы, и мы её вместе напишем или, если это будет интереснее, мы исследуем и разберём каждую упомянутую в inkview.h функцию и у Pocketbook SDK наконец-то появится документация.


Но сначала подготовим среду разработки. Скачайте PBSDK версии 14.2. Не знаю, почему так, но на момент написания статьи, программы, собранные с использование PBSDK версии 15.1, не запускались на устройстве. Дистрибутив PBSDK – это самораспаковывающийся архив. Он предложит распаковаться в C:\PBSDK, я с ним согласился, чего и вам советую. В процессе распаковки он сам установит нужные библиотеки, переменные окружения и произведёт изменения в реестре. Можно приступать к программированию.

В C:\PBSDK\sources создайте папку… Пусть будет hbr01. А в ней, в свою очередь, папки src и images и скопируйте из C:\PBSDK\sources\inkdemo файлы make.bat и makearm.bat. Первый собирает «эмулируемый» файл программы, а второй исполняемый файл для устройства. В папке src будут храниться исходные файлы нашей программы, а папка images нам пригодится ближе к концу статьи. Ещё нам понадобиться сделать небольшое изменение в bat-файлах. В файле make.bat найдите строку set OUTPUT=inkdemo.exe и замените на set OUTPUT=hbr01.exe, также для makearm.bat найдите set OUTPUT=hbr01.app и замените на set OUTPUT=hbr02.app. Ну, и наконец, в папке src создаём файл main.c следующего содержания:

Попробуйте запустить make.bat, в папке должен появиться файл hbr01.exe. Если вы его запустите, то увидите монотонное окно, закрывающееся при нажатии любой клавиши.

image

Разберёмся, как это работает. В main мы вызываем функцию InkViewMain. Она, как и многие другие, определена в заголовочном файле inkview.h, поэтому мы его должны предварительно включить. InkViewMain принимает только один параметр – функцию — обработчик событий, main_handler. Его можно считать сердцем программы. Функция main_handler принимает три параметра: type – идентификатор события и два параметра события. К параметрам события мы вернёмся позже. Пока же мы проверяем тип события и, если это нажатие клавиши, то завершаем работу программы функцией CloseApp.

image

image

image

image

Она и будет писать на экране то, что мы передадим ей параметром. Для этого мы с помощью функции FillArea рисуем белый прямоугольник длинной 250 и высоток 20 в точке с координатами 350 по X и 770 по Y, функцией SetFont устанавливаем, предварительно инициализированный, шрифт, который будет использоваться, функцией DrawString рисуем строку и функцией PartialUpdate даём контроллеру экрана команду обновить область, в которой предварительно нарисовали прямоугольник. Работая с экранами e-ink, надо всегда помнить, что единожды выведенное никуда с него не денется. Всё надо стирать самостоятельно.

В пятой строке мы объявляем наше изображение. В main_handler добавляем проверку на событие EVT_SHOW. Это событие сопутствует вообще всем событиям, проще говоря, если произошёл вызов main_handler, можно гарантировать, что EVT_SHOW произошло. Самое лучшее место, чтобы что-нибудь рисовать. Функция DrawBitmap, которой мы и рисуем изображения на экране, принимает три параметра: координаты на экране и ссылку на изображение. После этого необходимо обновить экран. Ради эксперимента можете попробовать закомментировать функцию FullUpdate.

Краткий сюжет предыдущих серий: / «Вчера мне «на посмотреть» оставили мёртвую электронную книжку Pocketbook на E-Ink, модель 611 <. > Сейчас я ищу образ с внутренней карты памяти рабочего экземпляра, чтобы залить её на рассматриваемый и окончательно выяснить, является ли это мёртвое состояние следствием сбоя обновления, либо проблема в компонентах устройства»

А теперь новая серия:


Как восстановить Pocketbook 611 Obreey с помощью сковороды, паяльника, СКФ, переходника SD<-microSD и программиста компании Pocketbook (респект ему)?- под катом.

Состояние до проведения нижеописанных действий:


Как следует из предыдущего поста, сразу же после публикации со мной связался Михаил Бойко, программист компании Pocketbook (по собственной инициативе!). Михаил предложил помощь в восстановлении устройства, и сразу же дал 6 ценных рекомендаций, воспользовавшись которыми были получены первые результаты:

1. Если есть возможность, посмотрите напряжение на батарейке. Если вы заряжали ее, то там должно быть больше 4.0 вольт. Если там 3.6 то плохо, если 3.2 и меньше, то это очень плохо.

Хороший совет. Жаль проверить было нечем. Но и в итоге батарея оказалась не при чём

2. Попробуйте отсоединить батарейку. Подождите пару минут, убедитесь что отключен USB провод и батарейка, и закоротите металлическим предметом 2 вывода на разъеме питания. Если есть тестер, убедитесь что отсутствуют остаточные напряжения. Подключите батарейку и попробуйте включить книжку.

К сожалению, на этапе отсоединения колодки от разъёма батареи последний отвалился от платы вместе с колодкой… Пришлось доставать 25Вт игольчатый паяльник и припаивать обратно. Однако основная борьба за книжку развернулась до припайки разъёма, т.к. она прекрасно вела себя, будучи подключенной только к сетевому источнику питания. Т.е. батарея (её наличие/отсутствие) на работоспособность Pocketbook 611 не влияет. Сделано ценное наблюдение — разъём аккумулятора не рассчитан на большое количество отключений-подключений


3. Как именно книжка не включается? Зеленый индикатор включается? Включаются обе половинки индикатора? Какую прошивку ставили? Какая прошивка была перед этим установлена? Что значит «неофициальная» прошивка? Где вы ее взяли? Какой серийный номер устройства?

Всю информацию, которая мне была известна, я описал Михаилу, дополнив фотографией экрана с застывшим процессом обновления

4. Сделайте образ памяти (я предполагаю что у вас есть доступ к Linux машине)

В моём случае (Fedora 17) команда dd запускалась через su, а устройство — mmcblk0 (подключенная через переходник в кардридер ноутбука карта microSD). Более подробно все действия в терминале отражены в общем логе восстановления

Этот пункт также не вызвал никаких вопросов, архив с образом был сразу же отправлен на исследование

После записи образа на внутреннюю карту памяти и установки её обратно в книжку началось самое интересное — она ожила! «Как надо» замигала подсветка центральной кнопки джойстика при первом же нажатии кнопки включения, и штатно заработало обновление до версии 15.8.0, взятой с официального сайта Pocketbook

На обновление ушло не больше 3х минут, и вот передо мной главное меню книжки, до этого момента незнакомое.






Ещё примерно 30 минут понадобилось на тестирование всех функций, чтобы сделать вывод — с книжкой по-прежнему что-то не так: при любой попытке использовать WiFi (обновление, проверка соединения) она зависала с разными спецэффектами. Непрорисовавшееся до конца окно установления соединения, чёрный экран, чёрное окно…

Но после очередного письма Михаилу стала понятна причина такого поведения, а также открылась причина исходной проблемы:
Посмотрел образ карточки, что вы прислали. Пользователь ставил прошивку от 613 (611 plus) на 611. Платформы 613 и 611 сильно отличаются в железе, хотя внешне выглядят они практически одинаково. Прошивка 611, на которую ставилась прошивка от 613 по какой-то причине не заметила подвоха и на 611 был установлен загрузчик от 613, который не может работать на железе от 611. Я модифицирую присланный вами образ карточки, запишу туда «правильный» загрузчик и вышлю вам для записи на устройство. Тот образ что я вам раньше присылал (я так понял что у вас именно с ним получилось запуститься), скорее всего, не совсем подходит к конкретно вашему экземпляру книги, т.к. там отличаются вейвформы (они уникальный для каждой партии экранов) и, возможно, есть еще какие-то привязки к железу. Я в течении часа подготовлю образ карточки и пришлю его вам на почту.

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

если все прошло нормально, то экран должен 2 раза обновиться через черное, и вверху должна появиться надпись «Firmware update»

При обновлении можно использовать любую доступную прошивку, но желательно использовать как можно более новую.

Казалось бы, вот и последний шаг к победе, но нет! Именно после этой стадии microSD-карточки начали безбожно глючить… Незаписанные до конца образы обновлений, file read error при попытке обновления… Это удалось прекратить только форматированием внутренней памяти и внешней SD-карты через интерфейс самого устройства. Только тогда обновление прошло успешно. В целом, есть ощущение, что проблема с самой внешней SD-картой (Apacer 1Gb, не могу сказать из комплекта она или куплена отдельно)

И только после переформатирования и перезаписи официальной прошивки 15.8.0 обновление прошло успешно, и заработал WiFi


Конец истории, надеюсь я. Завтра отдам книжу владельцу

Полный хронологический лог терминала: goo.gl/VBCZu
Архив со всеми образами, задействованными в восстановлении: goo.gl/QEL9Z

Ещё раз спасибо Михаилу Бойко за рецепт!

P.S.: Определённо, Pocketbook 611 гораздо крепче, чем кажется)

upd ot krovatti: в некоторых случаях книжка включается кнопками обновления + 3-секундным удерживанием reset, а в некоторых кнопкой Power. Проверено на нескольких моделях 611. Инфа 148%.

Читайте также: