Инструкция Bip | Разработка приложений для BipOS ( SDK )

MNVolkov

Разработчик
Команда форума
Сообщения
295
Реакции
2,159
Баллы
463
Ваше "умное" устройство
Amazfit Bip
  • Первое сообщение
  • #1
Разработка приложений для BipOS
Software Development Kit (SDK)
MNVolkov BipOS

Вводная часть
Начиная с версии 0.5 MNVolkov MOD полностью переработан код запуска приложений. Теперь каждое приложение - это отдельный файл, хранящийся в ресурсах. Формат исполняемых файлов Arm-elf (или просто "эльф"). Мод получил новое название BipOS. При запуске меню мода происходит сканирование ресурсов на наличие приложений. Для каждой прошивки разное количество ресурсов, а приложения всегда размещаются в конце. Поэтому загрузчик ищет ресурсы по сигнатуре Elf начиная с 930 ресурса. Из найденных приложений формируется список, который помещается в меню "приложения".
Для того чтобы повысить общее удобство и снизить количество несовместимостей разработана система "прошивконезависимых" приложений. Так один и тот же Калькулятор будет работать как на латин 1.1.5.12, так и на нелатин 1.1.2.05. без изменений (необходимо только разместить его в RES файле соответствующей версии). Независимость от прошивки удалось достигнуть за счет применения универсальной библиотеки libbip.a которая содержит адреса функций прошивки. После загрузки эльфа в оперативную память происходит пересчет внутренних адресов функций и переменных т.н. релокация, а так же подмена библиотечных адресов функций на реальные адреса функций в прошивке.


Среда разработки
Для разработки приложений понадобится среда разработки и компилятор. В качестве среды разработки я использую обычный Notepad++ . Наверное, можно настроить Code::Blocks или другую IDE я до этого не дошел, отложил на будущее. Установка специализированной IDE конечно повысит удобство разработки. На среде разработки останавливаться не буду.

Компилятор
Для сборки приложения я применяю GNU Embedded Toolchain for Arm. Для установки необходимо проделать следующие шаги:
  1. Скачать тулчейн можно тут:

    Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.


    Качаем файл gcc-arm-none-eabi-8-2019-q3-update-win32-sha2.exe ( или более свежую редакцию) с таким описанием: Windows 32-bit Installer (Signed for Windows 7 and later)
  2. Можно все установить по умолчанию, в конце установки установить все галочки
  3. Рекомендуется добавить в системный (не пользовательский) PATH путь до папки bin компилятора
Библиотека
Библиотека включает в себя как адреса функций прошивки, так и некоторые функции, которые написаны для облегчения разработки пользовательских приложений, например функции работы с меню. Библиотеку необходимо распаковать в папку на одном уровне с папками приложений. Путь до этой папки будет указан в сценарии сборки.
v.0.5.2
У вас нет разрешения на просмотр содержимого!

v.0.5.1
У вас нет разрешения на просмотр содержимого!

v.0.5
У вас нет разрешения на просмотр содержимого!


Пример приложения
Специально для облегчения вхождения подготовлен пример приложения на языке СИ template_app. Функционал простой: создается рабочий экран приложения, при нажатии в центр экрана меняется цвет фона и надписи.
Этот пример можно использовать в качестве шаблона. Для этого нужно создать новую папку приложения и скопировать в неё файлы примера. Наименование папки приложения в скрипте сборки берется в качестве служебного имени приложения.
Отображаемое в списке приложений наименование необходимо внести в файл label.txt При этом после наименования не должно быть каких либо символов или перевода строки.
Для сборки приложения подготовлен bat файл. Сборка осуществляется путем запуска bat файла внутри папки без параметров. Все параметры компилятора и линковщика совместимые с загрузчиком BipOS внесены в этот скрипт.
Приложение-шаблон:
У вас нет разрешения на просмотр содержимого!

Исходники на GitHub

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.



Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.



Сборка RES файла и загрузка в часы
Для запуска эльфа необходимо загрузить его в часы. Для этого необходимо поместить его в RES файл. Для сборки RES файлов разработана специальная программа для ПК (Win32) с помощью которой можно добавить в ваш существующий RES файл необходимые приложения. ResPack.exe - это консольное приложение для выполнения простых операций с RES фалами Amazfit Bip: отображение содержимого с краткой информацией по каждому ресурсу, распаковка сырых данных ресурсов, выполнение выравнивания строковых ресурсов версии 61 и 69 для решения проблемы пропадания текста при загрузке кастомных ресурсов, а также добавления произвольных файлов в ресурсы.
Для добавления в существующий RES файл файлов приложений запускаем из командной строки:
Код:
ResPack -a <выходной_RES_файл> <входной_RES_файл> файлы которые надо добавить
Полученный RES файл прошивается в часы обычным способом, например, через GadgetBridge. Для обновления данных в оперативной памяти часы после обновления ресурсов необходимо перезагрузить. Сделать это можно либо через меню настроек выключив и включив часы.
У вас нет разрешения на просмотр содержимого!


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


Обсуждение процесса разработки ведется в этой теме.
 

Вложения

Последнее редактирование модератором:

Kastyel1990

Участник
Сообщения
24
Реакции
27
Баллы
28
Ваше "умное" устройство
Amazfit Bip
Привет ребята. Подскажите у кого компилируются приложения, скиньте пльзь рабочий батник компилятор. Из шапки у меня бьет ошибки, что в посте выше.
 

Джони

Местный
Сообщения
42
Реакции
31
Баллы
53
Пока что нет ни одного приложения для часов значит не все так легко
 

Джони

Местный
Сообщения
42
Реакции
31
Баллы
53
Интересно прошивку с часов Пебл не получиться пересобрать для бипов
 

Kastyel1990

Участник
Сообщения
24
Реакции
27
Баллы
28
Ваше "умное" устройство
Amazfit Bip
Просто мало идей, которые можно реализовать без рандомных чисел
А у вас батник работает норм? Можете скинуть?
Авто объединение сообщений:

Интересно прошивку с часов Пебл не получиться пересобрать для бипов
А что в ней примечательного?
 
Последнее редактирование:

Джони

Местный
Сообщения
42
Реакции
31
Баллы
53
Просто готовые приложения есть
 

Kastyel1990

Участник
Сообщения
24
Реакции
27
Баллы
28
Ваше "умное" устройство
Amazfit Bip
Есть, смотрите в этой теме выше
Все батники, что в этой теме - не работают и бьют ошибки, что я показывал выше, включая те батники, что с проектами шаблонов(Календарь и шаблон) Они тоже не собираются.
На диске С:\ у меня есть папка Programs, в которой находятся папки с программами, в которых находятся исходники программ и батник для сборки эльфа. В этой же папке(C:\Programs\) лежит папка libbip, с библиотеками. GNU Toolchain установлен в путь по умолчанию.
Может где-то в расположении я сделал ошибку, ибо все-таки странно, что я скачиваю исходники календаря, и даже он не собирается с теми же ошибками.
 

MNVolkov

Разработчик
Команда форума
Сообщения
295
Реакции
2,159
Баллы
463
Ваше "умное" устройство
Amazfit Bip
если тулчейн установлен по умолчанию и прописан в path то можете взять батник из GitHub или вот этот ?
 

Вложения

  •  Мне нравится
Реакции: be3

MNVolkov

Разработчик
Команда форума
Сообщения
295
Реакции
2,159
Баллы
463
Ваше "умное" устройство
Amazfit Bip
  •  Мне нравится
Реакции: be3

ILYA_ZX

Новичок
Сообщения
4
Реакции
6
Баллы
13
Ваше "умное" устройство
Amazfit Bip
Не работают. Ошибка во время компиляции
Функция возвращает случайное число от 0 до max:
C++:
unsigned long randseed;

unsigned short randint( long max )
{
  randseed = randseed * 0x08088405;
  randseed++;
  return ( ( randseed >> 16 ) * max ) >> 16;
}
 

maxgrom

Участник
Сообщения
64
Реакции
66
Баллы
33
Ваше "умное" устройство
Amazfit Bip
Функция возвращает случайное число от 0 до max:
C++:
unsigned long randseed;

unsigned short randint( long max )
{
  randseed = randseed * 0x08088405;
  randseed++;
  return ( ( randseed >> 16 ) * max ) >> 16;
}
Спасибо, попробую заставить работать змейку
 
  •  Мне нравится
Реакции: be3

ILYA_ZX

Новичок
Сообщения
4
Реакции
6
Баллы
13
Ваше "умное" устройство
Amazfit Bip
Появилась теперь такая ошибка. Сталкивались с ней?
Посмотреть вложение 23376
Папки libbip и template_app (или другого приложения) в одном каталоге находятся?

Не работают. Ошибка во время компиляции
Добрались руки до практики. Проблема в стандартной библиотеке, по умолчанию использует soft vfp.
Подключается, если линкеру указать неверный путь до библиотеки.
Мне пришлось править эту строчку в bat файле, вот что получилось:
SET LIBRARY_PATH=!BASE_PATH!\lib\gcc\arm-none-eabi\8.3.1\thumb\v7e-m+fp\hard
И конечно, #include <stdlib.h>
 

Kastyel1990

Участник
Сообщения
24
Реакции
27
Баллы
28
Ваше "умное" устройство
Amazfit Bip
Папки libbip и template_app (или другого приложения) в одном каталоге находятся?
Да. Ложил и в один каталог, и кидал файлы libbip прямо в папку с исходниками и делал, чтоб файлы libbip находились в одной папке с папками программ и даже вручную полный путь прописывал в батнике. У меня просто закончились идеи)
 

ILYA_ZX

Новичок
Сообщения
4
Реакции
6
Баллы
13
Ваше "умное" устройство
Amazfit Bip
Да. Ложил и в один каталог, и кидал файлы libbip прямо в папку с исходниками и делал, чтоб файлы libbip находились в одной папке с папками программ и даже вручную полный путь прописывал в батнике. У меня просто закончились идеи)
А если это
SET GCC_OPT=%GCC_OPT% -DFW_VERSION=%TERGET_FW_VERSION_GCC% -DLIB_BIP_H=\"..\/libbip\/libbip.h\"
заменить на
SET GCC_OPT=%GCC_OPT% -DFW_VERSION=%TERGET_FW_VERSION_GCC% -DLIB_BIP_H=\"..\\libbip\\libbip.h\"
в build.bat?
Или как вариант, закомментировать строку#include LIB_BIP_H в libbip.h
Должно сработать и то и то:good:
Нет, про build.bat неправильно написал! Разбираюсь....
Исправил.
У меня работает.
 
Последнее редактирование:

MNVolkov

Разработчик
Команда форума
Сообщения
295
Реакции
2,159
Баллы
463
Ваше "умное" устройство
Amazfit Bip
Обновление
MNVolkov BipOS SDK 0.5.1

Изменения:
  • Доработан код загрузчика в части запуска и завершения приложений для устранения утечек памяти. Теперь при запуске эльфа ему в качестве параметра передается указатель на структуру запущенного приложения Elf_proc_ (см. libbip.h)
  • Алгоритм сканирования ресурсов в поисках приложений усовершенствован, теперь не нужно перезагружать часы когда загружен новый RES файл, приложения обновятся автоматически (при входе в меню "Приложения" происходит принудительное сканирование приложений).
  • Все приложения теперь могут иметь свое название на одном из следующих языков: Русский, Английский, Итальянский, Испанский, Французский, Немецкий. Отображаемое название зависит от локали телефона и настроек BipOS в меню "Язык меню". Все названия берутся при компиляции эльфа из файла label.txt. Формат файла представлен ниже.
  • Приложения получили поддержку "своих" ресурсов. Таким образом независимым от прошивки теперь стал не только код приложения, но и ресурсы. Подробнее ниже.
  • Настройки каждого приложения теперь хранятся в индивидуальной для каждого приложения области памяти в elf файле. Подробнее ниже.
  • Реализована возможность запуска приложения по событию (пока только одно событие реализовано - жест просмотра информации). Подробнее ниже
Запуск и остановка приложений
При запуске приложения после релокации адресов происходит передача управления в функцию main(int param0, char** argv) приложения. При этом параметр argv не определен и не используется. В параметре param0 содержится указатель на структуру Elf_proc_ (перед использованием необходимо привести к типу (Elf_proc_*). Сруктура данных следующая:
C:
typedef struct  {                //    структура запущенного процесса
    unsigned int     process_id;    //    идентификатор процесса, присваивается загрузчиком
    int            index_listed;    //    индекс эльфа в списке загрузчика
    void*             base;        //    указатель на выделенную под процесс память
    unsigned int    size;        //    количество выделенной под процесс памяти
    void*            ret_f;        //    точка возврата процесса
    unsigned int    ret_param0;    //    параметр функции возврата
    void(*elf_finish)(void* param0);    //    указатель на процедуру завершения эльфа, сюда надо передать
                                        //    адрес любого символа в адресном пространстве эльфа
    int                argc;        //    количество параметров при запуске эльфа
    void**            argv;        //    параметры при запуске эльфа
} Elf_proc_;
В жизненном цикле приложения наиболее часто будут использоваться параметры elf_finish(void* param0) и index_listed.
Параметр index_listed используется в функциях ElfReadSettings/ElfWriteSettings и т.д. для указания приложения ресурсы и настройки которого будут использоваться.
Параметр elf_finish - указатель на функцию завершающую жизненный цикл приложения. По окончании работы приложения необходимо вызвать elf_finish с параметром равным указателю на любой символ в адресном пространстве эльфа. После чего происходит корректное завершение и высвобождение памяти, занятой самим приложением, а также служебной информацией.

Мультиязычные названия
С версии 0.5.1 приложения могут иметь отображаемое название на нескольких языках. Эти названия определяются в файле label.txt находящейся в папке проекта, при компиляции приложения вносятся в соответствующие секции elf файла. Структура label.txt на примере календаря представлена ниже:
Код:
Calendar
RU    Календарь
IT    Calendario
ES    Calendario
FR    Calendrier
DE    Kalender
Файл label.txt должен быть сохранен в кодировке UTF-8. Первая строка без указания кода языка содержит название по-умолчанию, когда не найдено более подходящих названий. Как правило в первой строке следует указывать название на английском языке.
Последующие строки должны начинаться с кодировки языка заглавными символами. В настоящий момент поддерживаются языки RU - русский, IT - итальянский, ES - испанский, FR-французский, DE - немецкий. Далее, отделенное от кода языка символом табуляции, следует название приложения на указанном языке.
Все переводы строк могут быть как CR так и LF, так и CRLF. Более того, переводы строк могут быть заменены на символы табуляции, а символ табуляции на перевод строки. Таким образом указанный файл label.txt может выглядеть следующим образом:
Код:
Calendar    RU    Календарь    IT    Calendario    ES    Calendario    FR    Calendrier    DE    Kalender
(использованы только символы табуляции, без перевода строк)

Собственные ресурсы
Начиная с версии 0.5.1. приложения могут использовать собственные ресурсы. Это значит, что нет необходимости для работы приложения вставлять свои ресурсы в RES-файл часов. Достаточно создать свой RES файл, состоящий из необходимых ресурсов и при компиляции приложения, он будет помещен в специальную секцию elf файла. Ресурсы будут доступны по индексу, начиная с 0 через функцию int show_elf_res_by_id(int index_listed, int res_id, int pos_x, int pos_y).
Доступны только графические ресурсы. Для сборки графических ресурсов можно воспользоваться AmazFitBipTool.

Сохранение настроек приложения
Каждое приложение начиная с версии 0.5.1. может сохранять свои настройки в специальной секции elf файла при этом не мешая другим приложениям и без риска оставить за собой мусор при удалении прилоежния. Доступ к разделу настроек осуществляется через функции int ElfGetSettingsSize (int index_listed), int ElfWriteSettings (int index_listed, void* buffer, int offset, int len), int ElfReadSettings (int index_listed, void* buffer, int offset, int len)
Размер области настроек определяется при компиляции приложения, первоначальные значения настроек хранятся в файле settings.bin и помещаются в специальную секцию elf файла при компиляции. При переустановке приложения (перезаливка файла ресурсов) все настройки принимают значения по-умолчанию (как в файле settings.bin).

Запуск приложений по событию
В версии 0.5.1 реализован запуск приложения по событию. При этом происходит запуск (при наличии) приложения с соответствующим именем (не путать с отображаемым именем, которого может и не быть вовсе).
На текущий момент события всего два: редактирование будильника - нажатие на левую часть экрана на экране установки будильников, а также жест просмотра информации на часах (при этом соответствующий пункт должен быть включен в меню MiFit).
По событию редактирование будильника происходит запуск приложения с именем alarm_edit .
По событию жеста просмотра информации происходит запуск приложения с именем hook_wf_gesture.
Наличие отображаемого имени влияет только на наличие пункта в меню "Приложения" (не имеющие отображаемого имени приложения не видны).
Имя приложения определяется при компиляции и тождественно имени папки проекта.

Библиотека
Обновленная библиотека libbip.h доступна к скачиванию. Для работы с BipOS 0.5.1. необходимо собрать приложения с применением этой библиотеки.
У вас нет разрешения на просмотр содержимого!


Примеры приложений
Для демонстрации работы новых функций подготовлены примеры приложений. Код размещен на GitHub:
Шаблон-пример приложения:

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.


Календарь:

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.


Демонстрационное приложение с применением генератора случаных чисел:

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.


Демонстрационное приложение с использованием собственныз ресурсов:

Пожалуйста войдите или зарегистрируйтесь для просмотра скрытого текста.



Сами приложения можно скачать в теме Прошивка - Bip | Приложения для BipOS ( elf )

Если Вам понравилась моя работа, работа команды форума, не стесняйтесь делать пожертвования на дальнейшее развитие мода и ресурса MyAmazFit.ru
Реквизиты можно найти в моем профиле MNVolkov
Делать пожертвования можно на Яндекс.Деньги, QIWI и PayPal. Если у вас нет аккаунта в этих платежных системах, не расстраивайтесь, все они принимают банковские карты Visa MasterCard и даже МИР.


Спасибо за бурное обсуждение и ваше внимание к разработке BipOS. Надеюсь сообщество приумножит достижения в разработке для Amazfit Bip своими приложениями.
 

Вложения

Последнее редактирование:

Kastyel1990

Участник
Сообщения
24
Реакции
27
Баллы
28
Ваше "умное" устройство
Amazfit Bip
Блин. Я походу единственный, у которого выплывает куча косяков. При сборке эльфа с новым батником из приложения Own_res_demo, эльф компилируется, однако с ошибкой, которая влияет на работу приложения. Приложение либо не запускается, в случае с Own_res_demo.elf либо зависает, в случае с календарем.Screenshot_7.jpg
 

maxgrom

Участник
Сообщения
64
Реакции
66
Баллы
33
Ваше "умное" устройство
Amazfit Bip
Блин. Я походу единственный, у которого выплывает куча косяков. При сборке эльфа с новым батником из приложения Own_res_demo, эльф компилируется, однако с ошибкой, которая влияет на работу приложения. Приложение либо не запускается, в случае с Own_res_demo.elf либо зависает, в случае с календарем.Посмотреть вложение 23505
Та же самая проблема, но на работу не влияет
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу