И только после покупки набрел на форум сайта The-eBook.org, где обнаружилось, что писать программы для этой книжки можно, да к тому же не на какой-нибудь обрезанной Java, а на самом обычном C.
Ну, дернуло и меня этим заняться, особенно всвязи с тем, что в Libro НЕТ ШАХМАТ!! :( Но на то, чтобы подступиться к программированию, потратил кучу времени. Крупицы требуемых полезных сведений были разбросаны чуть ли не по всему форуму, и стоило большого труда всё это собрать воедино.
Между прочим, Qumo Libro программно совместима с Qumo Colibri, Digma e*, Gmini, Sibrary, и другими подобными электронными книгами, поэтому данное руководство и для вышеозначенных книг тоже должно подойти.
В общем, всвязи со всем этим, решил написать небольшую статью для тех, кто вдруг тоже купит себе читалку, совместимую с Qumo Libro, и захочет для этого девайса что-нибудь написать!
Итак, приступим! Для того, чтобы программировать под Qumo, нам понадобится 64-битный Linux. Дело в том, что китайцы написали SDK именно под эту систему, так что деваться некуда. Но при этом, я вас уверяю, работать с Linux уметь не требуется :) Смотрите сами ниже по тексту, совершенно ничего сложного.
В общем, первым делом, запускаем закачку следующих двух дистрибутивов:
- VirtualBox.
- Ubuntu x64 (не забудьте на странице загрузки выбрать именно 64-разрядную версию)
Хост: 125.91.8.7У меня с этого сайта почему-то ОЧЕНЬ медленно качается и соединение рвется постоянно, поэтому когда все-таки удалось скачать, я переупаковал этот SDK в 7-zip, и разместил его на собственном хостинге:
Пользователь: FTP_user6
Пароль: user123
Короткая ссылка: ftp://FTP_user6:user123@125.91.8.7/
Файл: sibrary_toolchain.tbz2
http://files.paccbet.ru/sibrary_toolchain.tar.7zЖдем, пока скачается, дальше последовательность действий такая:
Во-первых, устанавливаем VirtualBox, запускаем, создаем новую виртуальную машину, выбираем целевую ОС Ubuntu x64, памяти ставим хотя бы полгига, ну и напоследок создаем виртуальный жесткий диск на 6 гигабайт.
При попытке запуска вновь созданной виртуальной машины VirtualBox сама спросит, хотим ли мы подсунуть диск с операционкой, этого мы безусловно хотим, подсовываем им скачанный файлик ubuntu-10.10-desktop-amd64.iso в качестве диска, и дальше я даже комментировать не буду, на мой взгляд Ubuntu поставить это даже проще, чем Windows :)
Кстати, после того как поставили Ubuntu, можем скачать SDK прямо с виртуалки, это очень даже удобно (в комплекте с Ubuntu ведь сразу же идет FireFox):
Чтобы распаковать, быстренько ставим 7-zip через Центр приложений Ubuntu. Для этого выбираем в верхнем меню Приложения -> Центр приложений Ubuntu, там пишем в окошке поиска 7-zip, шмакаем по первому пакету в списке и устанавливаем его. Ну согласитесь, удобно, да?:)
СТОП! Нет, я тут не рекламирую Linux. Просто, действительно удобно сделали некоторые вещи. А для нас это прежде всего означает, что не будет проблем с использованием данной операционки для программирования интересующего нас Qumo Libro.
Вернемся к нашим баранам. Распаковывать SDK нужно в корневой каталог файловой системы, в этом случае все файлы лягут по нужным путям. Распаковка производится с помощью менеджера архивов, там тоже все очень ясно и понятно.
Теперь пора создавать собственно наше приложение!
Выбираем в меню Переход -> Домашний каталог, создаем новую папку (например test, я сделал для удобства две вложенные папки, qumolibro/test), создаем пустой файл, переименовываем его в test.c, и затем создаем еще один пустой файл, и его переименовываем в makefile.
Жмем на makefile дважды (открывается gedit, это убунтовский аналог блокнота), и копипастим туда следующий текст:
CC = arm-ereader-linux-gnueabi-gcc LD = arm-ereader-linux-gnueabi-gcc SRC = test.c OBJ = $(SRC:.c=.o) EXE = test CFLAGS += -Wall -g `pkg-config --cflags gtk+-2.0` LDFLAGS += `pkg-config --libs gtk+-2.0` all: $(OBJ) $(LD) -o $(EXE) $(OBJ) $(LDFLAGS)
Дальше открываем файл test.c, и копипастим туда вот такой код:
#include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <gtk gtk.h> // ---------------- // Работа с экраном // ---------------- #define EPAPER_UPDATE_LOCAL 0x101 #define EPAPER_UPDATE_PART 0x102 #define EPAPER_UPDATE_FULL 0x103 // Низкоуровневая функция для обновления экрана static void epaperUpdate(int ioctl_call) { int fd = open("/dev/fb0", O_RDWR); if (fd >= 0) { ioctl(fd, ioctl_call); close(fd); } } // Обработчик события на перерисовку виджета GTK+ static gboolean onWidgetPaint( GtkWidget *widget, GdkEventExpose *event, gpointer data) { epaperUpdate(EPAPER_UPDATE_PART); return FALSE; } // ------------ // Главное окно // ------------ // При попытке закрыть окно static gboolean onWindowClose( GtkWidget *widget, GdkEvent *event, gpointer data) { return TRUE; } // Уничтожение окна static void onWindowDestroy(GtkWidget *widget, gpointer data ) { gtk_main_quit(); } // Создание окна верхнего уровня static GtkWidget *createMainWindow() { // Создаем окно верхнего уровня GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // Подписываемся на события для этого окна g_signal_connect(window, "delete-event", G_CALLBACK(onWindowClose), NULL); g_signal_connect(window, "destroy", G_CALLBACK(onWindowDestroy), NULL); g_signal_connect(window, "expose-event", G_CALLBACK(onWidgetPaint), NULL); return window; } int main(int argc, char **argv) { GtkWidget *window, *button; // Инициализируем библиотеку GTK+ gtk_init(&argc, &argv); // Создаем главное окно window = createMainWindow(); // Создаем кнопку с надписью Hello World button = gtk_button_new_with_label ("Hello World"); // Подписываемся на события кнопки g_signal_connect_swapped(button, "clicked", G_CALLBACK (gtk_widget_destroy), window); g_signal_connect(button, "expose-event", G_CALLBACK(onWidgetPaint), NULL); // Добавляем кнопку в окно gtk_container_add(GTK_CONTAINER(window), button); // Запускаем на выполнение gtk_widget_show_all(window); gtk_main(); return 0; }
Можете при желании поразбираться с кодом, вкратце скажу, на Qumo Libro используется GTK+ 2.0 (штука ужасная конечно, но придется идти на жертвы!), и еще некоторые хитрые способы для работы с E-Ink экраном.
Что же, код создан, осталось его скомпилировать. К делу!
Открываем Приложения -> Стандартные -> Терминал, и вводим следующие команды:
cd test/
source /usr/local/ereader/eabi-glibc/toolchain_setup
make
В итоге, должно отобразиться что-то типа такого:
Ура! Появился исполняемый файлик, все отлично. Теперь его можно закачивать на флэшку вашего Libro, запускать через Проводник, и увидеть заветный Hello World.
P. S. На всякий случай, упомяну еще одну небольшую закавыку, при создании Shared folder в Virtual Box (предварительно придется, естественно, поставить "Дополнения гостевой ОС"), сразу убунта его не увидит, придется зайти в терминал, и прописать следующие команды:
sudo mkdir /media/windows-share, где <folder-name> нужно заменить на название Shared folder, указанного в Virtual box. После этих операций можно будет спокойно копировать файлы между Shared folder и Ubuntu.
sudo mount -t vboxsf <folder-name> /media/windows-share
Мне сегодня какраз эту читалку подарили(на днюху), и тут подробнейшее howto для программирования под неё. Спасибо :)
ОтветитьУдалитьДолго не мог понять зачем virtualbox и ubuntu, только потом дошло, что большинство использует windows:)
Интересно, у меня с 32 битной осью получится или придётся переползать на 64 бита? Скачается, узнаю.
На форуме ребята говорят однозначно: пойдет только на 64 битах. Чтобы заработало на x86, нужно прилагать какие-то дополнительные усилия, но я в этом не силен, ничего конкретного порекомендовать не могу.
ОтветитьУдалитьДа, если кому-то потребуются более подробные примеры, я уже успел портировать следующие две игры: Пятнашки и Сокобан.
По ссылкам - подробные описания игр, скриншоты, ссылки на бинарники и на исходники.
Извините, у вас сдк не сохранился? Не могу нигде найти...
УдалитьК сожалению, нет. Файл уж больно здоровый, так что в определенный момент с хостинга его удалил, там места не хватало. И жесткий диск уже сменил с тех пор, давно дело было... Остались только исходники и бинарники для игр которые я написал.
УдалитьВот уважаемый S-trace с форума http://www.the-ebook.org дал ссылку:
Удалитьhttps://cloud.mail.ru/public/E2Ko/dAGMM3rpv
Ага, на 32 не идёт.
ОтветитьУдалитьЧто-то не получается запустить сокобан: сделал всё по инструкции(тупо извлёк архив в корень флешки). Нажимаю на gsoko - ничего не происходит. Что я делаю неправильно?
Вот как на флешке: http://pastebin.com/GcpS0m5S
Прошу прощения, ошибочка обнаружилась!
ОтветитьУдалитьСпасибо, что сообщили.
Нужно чтобы каталоги имели структуру:
Data/gsoko/img
Data/gsoko/levels
, а сам исполняемый файл gsoko в любое удобное место можно положить
сейчас перезалью архив, можете пока сами создать в папке Data каталог gsoko и переместить туда img и levels
Архив перезалил. Должно заработать.
ОтветитьУдалитьВо, спасибо, запустилось:)
ОтветитьУдалитьАга, отлично! Вечером залью версию с увеличенными в 2 раза картинками (на форуме ребята помогли).
ОтветитьУдалитьЕщё поправьте " Дальше открываем файл test.c, и копипастим туда вот такой код:"
ОтветитьУдалитьгде #include воспринимается как html тег.
Как поставлю 64 битную ось, надо будет попробовать читалку man'ов запилить:)
Исправил, спасибо!
ОтветитьУдалитьНа всякий случай сообщаю: на форуме выложил свежую версию Сокобана, вроде стало значительно лучше.
ОтветитьУдалить64 битная ось почти установлена, теперь буду мучать девайс:)
ОтветитьУдалитьзы /usr/bin/chess - это что-то типо крестики-нолики (запустить можно скриптом NAME.sh с содержимым:
#!/bin/sh
/usr/bin/chess
)
Запустил я у себя hello world:)
ОтветитьУдалитьКак ещё можно отключать usb-storage на либре? А то разъём долго не проживёт:) Идеально было-бы поднять сетевой интерфейс по узб, ну или компорт, тоже неплохо:)
А насчёт gtk - его выкинуть и напрямую работать с фреймбуффером не получится?
На оба вопроса могу сказать только, что я в вопросах, связанных с программированием под Linux, разбираюсь довольно плохо. Все, что на текущий момент известно, включая всякие примеры, можно найти на форуме в топике Первая программа для Qumo.
ОтветитьУдалитьИдеально было-бы поднять сетевой интерфейс по узб, ну или компорт, тоже неплохо:)
Вот это очень актуальный вопрос! Знаю, что на Азбуке, к примеру, такое возможно.
Что больше всего бесит, это что на книжке ничего нельзя делать, пока подключен usb storage... Хотя бы потестировать бы программу не вынимая шнурка, дак нельзя! :(
как прикрутить папку в винде к убмунту на вертуалке? я не работал в этой среде...
ОтветитьУдалитьАндрей, прочитай конец сообщения как следует:))
ОтветитьУдалитьТам в P.S. как раз именно этот вопрос подробно расписан.
Между прочим, на днях китайцы открыли SDK Sibrary и даже с возможностью создания собственных прошивок. Подробнее - на форуме The-Ebook.
ОтветитьУдалитьЫЫЫЫ(извиняюсь за столь неинформативное сообщение, сейчас буду читать, пытаться собирать)
ОтветитьУдалитьОтлично! Я посмотрел sdk, в качестве оконного менеджера используется matchbox.. а GPE ктоньть пробовал собирать? ибо для него достаточно много всего..
ОтветитьУдалитьКамрад, а читалку еще не писал?
ОтветитьУдалитьРебяты, я с Qumo Libro закончил, к сожалению - хрупкий экран очень, вот и продавили мне его случайно :(
ОтветитьУдалитьА т.к. у меня двое детей маленьких, то я предпочел пока к E-Ink не возвращаться, а приобрести что-то более прочное.
Так что больше я не программирую под Qumo Libro, все что успел написать - Шахматы, Sokoban и Пятнашки - все есть на форуме The-Ebook. Обсуждение рекомендую перенести туда.
Грустно:( У меня gmini m6, трясусь над ней, чтоб не угробить. А читалку хочется такую, чтоб часы не отображались... Придется вспоминать программирование:)
ОтветитьУдалитьА у тебя разве нет полноэкранного режима? На Qumo Libro точно был, в меню поищи.
ОтветитьУдалитьПолный экран есть, кнопкой ОК включается. Только я че-то не совсем уверен, что это помогает немного беречь заряд:)
ОтветитьУдалитьАндрей, скажите пожалуста: можно ли на нем (qumo libro) просто терминал запустить?
ОтветитьУдалитьКак я понял GTK это создание интерфейса, а на С программа.
ОтветитьУдалитьВопрос, а на GTK к примеру таймер написать можно и вставить в читалку?
Блин, а у меня даже 7 zip нормально не встал - только консольная версия, и та ошибку пишет - "Неподдерживаемый метод сжатия tar.gz". Ну.. это я к тому как "действительно удобно делать некоторые вещи" :)
ОтветитьУдалитьЗа мануальчик спасибо!