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

MNVolkov

Разработчик
Команда форума
Сообщения
399
Реакции
2,682
Баллы
483
Ваше "умное" устройство
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 компилятора
Библиотека
Библиотека включает в себя как адреса функций прошивки, так и некоторые функции, которые написаны для облегчения разработки пользовательских приложений, например функции работы с меню. Библиотеку необходимо распаковать в папку на одном уровне с папками приложений. Путь до этой папки будет указан в сценарии сборки.

Актуальная версия библиотеки на GitHub -

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



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



BipEmulator от @x27 - Эмулятор окружения BipOS для часов Amazfit Bip, предназначенный для написания и отладки приложений под управлением мода BipOS (0.5.X) в среде Microsoft Visual Studio 2019

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



Пример приложения
Специально для облегчения вхождения подготовлен пример приложения на языке СИ 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. Для обновления данных в оперативной памяти часы после обновления ресурсов необходимо перезагрузить. Сделать это можно либо через меню настроек выключив и включив часы.
У вас нет разрешения на просмотр содержимого!


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


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

Вложения

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

Pólux

Разработчик
Команда форума
Сообщения
160
Реакции
357
Баллы
78
Ваше "умное" устройство
Amazfit Bip

Вложения

  • 102.3 KB Просмотры: 23

BurSoft

Друг форума
Сообщения
63
Реакции
173
Баллы
48
Ваше "умное" устройство
Amazfit Bip
Затем попробуйте build2.bat из прилагаемого пакета. Остальные файлы являются оригиналами @MNVolkov.
Спасибо, работает!
Вы подсказали мне причину, почему build.bat от @MNVolkov не компилирует. Дело в том, что батник сохранён в Unix-формате, с окончаниями строк LF, для винды это непривычный формат.
В этом случае возникает ошибка
Bash:
import.s:(.text+0x8): undefined reference to `main'
о которой я писал ранее
Если сохранить этот батник в Win-формате CRLF, то компиляция проходит нормально
Изменить окончания строк можно в Notepad++, нужно в режиме замены (режим поиска Расширенный) заменить все \n на \r\n
На скриншоте видно, как выглядит неправильные окончания строк, и окно замены
2021-04-03_185324.png
 

Pólux

Разработчик
Команда форума
Сообщения
160
Реакции
357
Баллы
78
Ваше "умное" устройство
Amazfit Bip
@BurSoft У тебя острое зрение! В Notepad++ также есть пункт меню, посвященный преобразованиям в конце строки:
Captura de pantalla 2021-04-03 205235.png
 

BurSoft

Друг форума
Сообщения
63
Реакции
173
Баллы
48
Ваше "умное" устройство
Amazfit Bip
@BurSoft У тебя острое зрение! В Notepad++ также есть пункт меню, посвященный преобразованиям в конце строки:
оо, круто) не додумался поискать эту функцию по менюшкам, преобразовал по старинке)
спасибо, так гораздо проще!
 
Последнее редактирование:

sashapont

Новичок
Сообщения
16
Реакции
2
Баллы
23
Ваше "умное" устройство
Amazfit Bip
Господа, а есть возможность скомпилировать эльфы на маке? Майк файл для линукса, который выкладывали здесь не сработал :(
 

Sanya pilot

Местный
Сообщения
47
Реакции
83
Баллы
58
Ваше "умное" устройство
Amazfit Bip
Господа, а есть возможность скомпилировать эльфы на маке? Майк файл для линукса, который выкладывали здесь не сработал :(
Оп, а можете ткнуть где скинули? Мне позарез надо, не терплю на винде прогать
 
  •  Мне нравится
Реакции: be3

sashapont

Новичок
Сообщения
16
Реакции
2
Баллы
23
Ваше "умное" устройство
Amazfit Bip
Где-то в начале этой темы видел
 

ugers

Местный
Сообщения
88
Реакции
425
Баллы
68
Ваше "умное" устройство
Amazfit Bip
Обновление BipStatusbarLibrary
*Адаптация под BipOS 0.5.5 - перенес изменения из приложения DnD от @MNVolkov,
*Добавлена зарядка батареи. Теперь при зарядке отображается соответствующий значок
1617723677627.png
Исходники:

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

 

AllexIn

Новичок
Сообщения
6
Реакции
0
Баллы
1
Ваше "умное" устройство
Amazfit Bip
Доступны только графические ресурсы.
То есть возможности залить в ресы текстовый файл и прочитать его из приложения - нет?
Я к чему:
Есть желание вынести часть логики приложения в внешний ресурс, чтобы потенциальный пользователь приложения мог его под себя поправить не трогая саму приложуху, а лишь подправив конфиг.
 

BurSoft

Друг форума
Сообщения
63
Реакции
173
Баллы
48
Ваше "умное" устройство
Amazfit Bip
Приветствую всех!
Сделал что-то типа Галереи для просмотра изображений из демо "Демонстрация использования "собственных" ресурсов", но сейчас оно показывает все подряд ресурсы.
Что нужно изменить в коде приложения, чтобы оно видело только графику png?
Спасибо!
 

MNVolkov

Разработчик
Команда форума
Сообщения
399
Реакции
2,682
Баллы
483
Ваше "умное" устройство
Amazfit Bip
То есть возможности залить в ресы текстовый файл и прочитать его из приложения - нет?
Приложения могут читать свои ресурсы по номерам начиная с 0 через функцию read_elf_res_by_id (int index_listed, int res_id, int offset, void* buffer, int len);
параметр index_listed должен быть равен ELF_INDEX_SELF
Если нужно модифицировать, то тогда нужно пользоваться секцией параметров через функцию ElfReadSettings (int index_listed, void* buffer, int offset, int len); или ElfWriteSettings (int index_listed, void* buffer, int offset, int len);

Что нужно изменить в коде приложения, чтобы оно видело только графику png?
В часах нет графики PNG есть только ресурсы часов (собственный формат huami), которые образуются в результате запаковки файла ресурсов через "Архиватор ресурсов", например.
 

MNVolkov

Разработчик
Команда форума
Сообщения
399
Реакции
2,682
Баллы
483
Ваше "умное" устройство
Amazfit Bip
В связи с исправлением ошибки прошивочной функции write_flashвнесены следующие изменения в код загрузчика:
  • теперь функция write_flashявляется часть кода BipOS и является "оберткой" для одноименной прошивочной функции, которая теперь может быть вызывана как _write_flash
  • добавлена функция get_bipos_build() , которая возвращает номер сборки BipOS. Наличие необходимого функционала BipOS приложение может отслеживать при помощи данной функции, проверя возвращаемое ею значение на минимально допустимое по требованиям приложения.
Проверить совместимость приложения с функционалом установленной BipOS можно примерно следующим образом:
C:
int is_supported_fw() {
  return    (get_bipos_build() >= 5);
}
Поскольку в предыдущих сборках функция get_bipos_build() отсутствовала, приложения при её вызове в BipOS до версии 0.5.5 build 5 будут перезагружать часы. Однако, использование функции get_bipos_build() на старых версиях BipOS оправдано в таких случаях как, например, в приложении BTNotes, когда ошибка в прошивке часов приводила к повреждению данных системных переменных и частично флэш памяти часов. В этом случае перезагрузка часов допустимое неудобство, взамен более крупных последствий при выполнении несовместимого кода.
 
Последнее редактирование:

Yuukari

Участник
Сообщения
48
Реакции
188
Баллы
48
Ваше "умное" устройство
Amazfit Bip
Заметил одну странную особенность при установке DND режима из приложения. Мне потребовалось, чтобы при запуске приложения автоматически включался режим DND. Я использую следующий код:
C:
char dnd = DND_MODE_ON;
set_generic_data(GENERIC_DATA_DND_MODE, &dnd);
И он, конечно, включает DND режим, но как-то странно. Если выйти из приложения и перейти в стандартный DND экран - там он включен. Однако на циферблате иконка DND режима не отображается, и если отправить уведомление - оно все равно будет показываться. Это проходит когда на циферблате меняется время на минуту вперед - появляется иконка DND режима на циферблате, и уведомления уже не показываются.

Ставил кастомный simpleDND, и там тоже наблюдается похожее поведение. Полностью DND включается не сразу.
 

MNVolkov

Разработчик
Команда форума
Сообщения
399
Реакции
2,682
Баллы
483
Ваше "умное" устройство
Amazfit Bip
Заметил одну странную особенность при установке DND режима из приложения. Мне потребовалось, чтобы при запуске приложения автоматически включался режим DND. Я использую следующий код:
C:
char dnd = DND_MODE_ON;
set_generic_data(GENERIC_DATA_DND_MODE, &dnd);
И он, конечно, включает DND режим, но как-то странно. Если выйти из приложения и перейти в стандартный DND экран - там он включен. Однако на циферблате иконка DND режима не отображается, и если отправить уведомление - оно все равно будет показываться. Это проходит когда на циферблате меняется время на минуту вперед - появляется иконка DND режима на циферблате, и уведомления уже не показываются.

Ставил кастомный simpleDND, и там тоже наблюдается похожее поведение. Полностью DND включается не сразу.
Постараюсь еще раз изучить этот вопрос, но код включения DND брал из оригинального экрана DND. Возможно что-то не учел, проверю.
 

Yuukari

Участник
Сообщения
48
Реакции
188
Баллы
48
Ваше "умное" устройство
Amazfit Bip
Постараюсь еще раз изучить этот вопрос, но код включения DND брал из оригинального экрана DND. Возможно что-то не учел, проверю.
Заметил еще то, что даже если штатно включить DND заранее, и потом зайти в приложение, которое при запуске тоже активирует DND мод - его состояние все равно "сбрасывается", аналогично описанному выше. Он активирован на экране DND, но иконка на циферблате отсутствует, и показываются приходящие уведомления, пока не сменится время на минуту вперед
 

thichthat

Участник
Сообщения
15
Реакции
131
Баллы
43
Ваше "умное" устройство
Amazfit Bip
В связи с исправлением ошибки прошивочной функции write_flashвнесены следующие изменения в код загрузчика:
  • теперь функция write_flashявляется часть кода BipOS и является "оберткой" для одноименной прошивочной функции, которая теперь может быть вызывана как _write_flash
  • добавлена функция get_bipos_build() , которая возвращает номер сборки BipOS. Наличие необходимого функционала BipOS приложение может отслеживать при помощи данной функции, проверя возвращаемое ею значение на минимально допустимое по требованиям приложения.
Проверить совместимость приложения с функционалом установленной BipOS можно примерно следующим образом:
C:
int is_supported_fw() {
  return    (get_bipos_build() >= 5);
}
Thank you very much for all your hard work! That's very great to me. Although I'm not having time to continue my work (due to homework at school), I'm very excited and I will try it as soon as I can.
 

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

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