Pull to refresh

Comments 31

Мне тоже пришел Flipper. Забавная вестьч. Как я понимаю, удалось заказать в ряду последних покупателей, сейчас на Joom доставка в Россию прекращена(((((

После прихода Флиппера я ещё успел заказать на Joom WiFi плату. Впрочем, пока не понял что с ней делать :)

У меня с флиппером и логистикой тоже не сложилось. Прекрасно пришёл в Москву, только я страну жительства уже два раза сменил с начала года. :D

Однажды да заберу, надеюсь, да попробую поковырять...

Уже вполне официально, как я понял, российские интернет-магазины его продают.

Пока увидел только Joom который в рф не доставляет (хотя есть люди что успели заказать) и нашёл на Амперке за 16к. Но это имхо дорого.

в поддержке сказали, что невозможность покупки на Joom с доставкой в РФ временная, однако предложили если очень нужно - купить например в Амперке.

Спасибо автору. Очень удивило отсутствие нормальных инструкций от разрабов. Теперь может тоже попробую что-то написать.

отсутствие нормальных инструкций от разрабов

Сейчас проблема (и она упомянута в статье) в том, что мы очень часто переделываем API или систему сборки, и пока мы не поймем что все работает как нужно, заморозим API и скажем что прошивка достигла версии 1.0 любая документация по сборке приложений преждевременна и замедлит нашу работу.

Из хорошего - мы начали писать примеры использования функций, а так как актуальность их покрывается компиляцией прошивки, и отсутствует необходимость общаться с отделом документации, то это почти не сказывается на скорости нашей работы.

Нельзя ли узнать кое-что про разработку под Flipper Zero? Может быть ткнёте в какое-то место в доке или в пример готовый.

Я пишу достаточно бесполезное приложение, просто чтобы посмотреть как вообще разрабатывать под FZ и у меня такая задача — выводить текст, прокручивая экран. Есть ли встроенные методы это сделать или надо определять, что я достиг конца экрана и перерисовывать его?

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

Заявленный функционал и область применения не особо мотивируют палить на мейнстримных ресурсах свои достижения?

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

Что же тут может демотивировать писать статьи? Мое предположение тут скорее нехватка документации и слишком злые правила написания под эмбед (которые мы еще ужесточили строгими проверками в компиляторе).

Мое предположение тут скорее нехватка документации

Могу рассказать чего не хватало мне:

  • понимания модели многопоточности

  • понимания модели (циклов?) обработки событий

Поднимая во флиппере диалог с помощью dialog_message_show(dialogs, message);, я до конца не понимал, что именно происходит в этот момент. Запускается свой цикл обработки событий? Приходят ли нажатия кнопок в мой input_callback? Рисуется ли мое приложение под диалогом? Блокирующий ли это вообще вызов? ^^ Это можно проверить, но удобнее когда основные механики описаны.

В качестве примера совершенно не случайно приведу Qt. Документация дает четкое понимание того, как работают события, циклы обработки событий, потоки, сигналы и слоты. Один раз прочитал - понял навсегда.

Кстати, с сохранением иконки были определенные трудности. Прямолинейное сохранение в PNG дало на выходе файл размером ~1Кб, тогда как оригинальная иконка весила ~140 байт. Пришлось доставать Lister и разбираться, что же такого Photoshop вставляет в файл :) Ответ был на поверхности: кучу метаданных. Немного помучившись с диалогом «Сохранить для Web», удалось ужать размер файла до ~150 байт (хоть и все метаданные выкусить не удалось). Картинка успешно открылась на устройстве, дальнейшая борьба за десятки байт показалась бессмысленной.

А зачем, она же конвертируется при сборке в свой формат все равно? Независимо от метаданных, ее размер будет зависеть только от разрешения.

Ваша правда: в сгенерированном h-файле длина массива всего 21 байт. Еще одна продуманная мелочь, здорово!

Да, флиппер понимает только свой формат изображений, heatshrink-compressed xbm image. Из минусов - все нужно конвертировать. Из плюсов - изображения занимают очень мало места.

Моё уважение разработчикам стандартной библиотеки за удачное применение такого известного приема, как реализация в C самописной таблицы виртуальных функций (как в высокоуровневых языках).

Спасибо, приятно слышать.

просто задать несколько параметров, а на выходе готовая основа для приложения

Что-то подобное есть в недавно зарелизившемся uFBT (standalone система сборки приложений для флиппера). Наверное перенесем это и в обычный FBT.

заставить VS Code видеть моё приложение и подсвечивать ошибки у меня почему-то не получилось

./fbt firmware_cdb делали? Это генерация compile_commands.json, без которого vscode не знает как процессить файлы через intellisense.
Постараемся хотя бы основные тонкости описать в документации.

вопрос эффективности чтения байт файловой системы

На самом деле кроме кеширования на уровне стрима, есть еще кеширование на уровне блочного устройства (сд-карты), последние 8 запрошенных секторов всегда кешируются. Иногда это приводит к тому что буферизированные стримы медленнее чем работа через storage_file_xxx.

./fbt firmware_cdb делали?

Worked like a charm!

Ссылка на собранное приложение

Чтобы хранить-распространять приложение - лучше завести отдельный репо в папке applications_user под него. В итоге получится папка которая может быть собрана как FBT, будучи склонированной в applications_user, так и uFBT отдельно. Под uFBT есть даже гитхаб-экшены, которые собирают приложение в облаке на каждый коммит.

Например вот как приложение выглядит на гитхабе, и вот так оно расположено в applications_user.

applications_user

собрано под v0.70, работает после обновления на v0.71

Для внешних приложений у Флиппера своя версия, указана в api_symbols.csv и увеличивается только при изменении API.

Спасибо за совет, сделал все по аналогии с указанным приложением, в том числе action для сборки и nightly-ссылку. Новый дом проекта: https://github.com/QtRoS/flipper-zero-hex-viewer
Несложно, но кое-что пришлось додумать, было бы полезно превратить в гайд.

А что пришлось додумывать?

Как и зачем использовать nightly.link (ранее был не знаком с проблемой получения результатов latest билдов) и необходимость правки workflow (тоже не пользовался ранее).

Вчера только размышлял что дельфин нигде не мелькает и тут бац, отличная работа :)

Ээх... а мой флиппер путешествует по Германии. Так что весьма грустно читать, что и получили уже все и можно просто взять и купить...

Хех, а я было расстроился, что мне на две недели позже пришла посылка, чем знакомым. Все в сравнении познается!

Надо в него засунуть micropython или lua, что бы скрипты запускать прямо с флешки, закинул в папку и запускай. Я думаю разработка всякого интересного ускорится в разы.

Тут в комментариях отметились создатели, возможно прокомментируют, @Dr_zlo13@koteeq

@Dr_Zlo13прикручивал JS, но он очень кастрированный, поэтому писать что-то сложное не очень удобно. Ну и биндинги полные нужно готовить, конечно.

Микропитон чуть интереснее, но он очень жирный. У нас не осталось свободного места на флеше, чтобы вкрутить его в «ядро» прошивки. В качестве динамически запускаемого приложения его тащить тоже трудно, потому что такие приложения живут в оперативке, которой доступно около 120 КБ (если верно помню), чего опять же мало для микропитона.

Луа особо не трогали вроде.

Как по мне, гораздо перспективнее компилируемые языки вроде Rust или Go (через tinygo).

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

Кстати, скомпилировать и запустить приложение на Флиппере быстрее, либо эквивалентно по времени "закинуть скрипт в папку".

Да я в целом уже потыкал и немного проникся fap файлами, и то что именно fap можно закидывать и запускать просто как приложения на компе, сильно порадовало что если системное api не меняется все прекрасно работает между разными версиями прошивки. Единственно наверное что прямо стоит сделать это запилить аля arduino ide (тут только потому что это хороший пример), когда скачиваешь, просто запускаешь, в меню сверху выбираешь версию твоей прошивки и по кнопке получаешь fap файл или если флиппер подключен запуск сразу на нем. Вообщем настройку окружения нужно свисти к минимуму что бы каждый школьник мог скачать и через пару кликов получить рабочий hello world. Еще как хороший пример platformio нужно повозится немного, но закрывает кучу вопросов с компиляцией и зависимостями для конечного пользователя. Но имхо задачи эти явно не в приоритете должны быть.
В любом случае вы огромные молодцы, надеюсь в скором времени, когда девайсов накопится нужное количество, комьютини само заберет на себя часть вопросов и разгрузит основную команду.

Sign up to leave a comment.

Articles