Итоги Хакатона Flipper Zero

-k5jexlgdri8uy09f-9-ggdzotm.jpeg

Flipper Zero — проект карманного мультитула для хакеров в формфакторе тамагочи, который мы разрабатываем. Предыдущие посты [1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23]

3 декабря 2021 г. в Москве прошел хакатон посвященный разработке под Flipper Zero. Всего было подано 57 заявок, из них одобрено 17. Всего в хакатоне приняло участие 42 человека и унесли домой 50 Флипперов.

Если коротко — это было потрясающе! Мы не ожидали такого уровня проработки проектов и вовлечения участников. Порог входа в понимание прошивки Флиппера достаточно высокий, разобраться со всеми API сложно, но не смотря на это почти все проекты были реализованы успешно.

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

Проекты которые родились на хакатоне

  • SPI программатор для флеш-памяти — подключаешь прищепку к SPI флешке, другим концом в GPIO флиппера, и можно дампать и записывать SPI-память. Определение флешки происходит автоматически. Дампы сохраняются на SD-карту и с нее же прошиваются.
  • Ethernet модуль — хардварный модуль для подключения Флиппера к Ethernet сетям. Можно использовать как LAN тестер, проверять есть ли в кабеле интернет. Ребята сделали собственную печатную плату и получился готовый продукт!
  • Модуль твердотельного гироскопа IMU — хардварный модуль, который измеряет положение Флиперра в пространстве. В будущем может использоваться для приложения вроде air mouse.
  • Инфракрасный приемник → HID мост — Флиппер подключается к компьютеру и прикидывается HID-клавиатурой, дальше ИК-приемник настраивается на прием сигналов от любого пульта для телевизора. Можно использовать любой пульт имеющийся в доме для управления компьютеров. Гениальная программа, до которой мы не додумались сами.
  • Эмулятор CHIP-8 — эмулятор для программ на языке CHIP-8. Можно запускать существующие ROM-ы с играми и демками. Вывод на экран автоматически скейлится до флипперного экрана 128×64 px.
  • Флиппер как Apple AirTag — система гео отслеживания на основе Bluetooth LE, которая используется в устройствах Apple, может быть реализована и на других устройствах. Команде удалось превратить Флиппер в Airtag, так что его положение можно отслеживать используя инфраструктуру Apple.
  • Telegram клиент (sic!) — настоящий телеграм-клиент на Флиппере. Работает как мост к Telegram-клиенту запущенному на телефоне через Bluetooth. Пользоваться им полноценным клиентом не получится, но проект полезен как демонстрация использования разных слоев API.
  • Игра 2048 (sic!) — классическая игра 2048 на маленьком экране. Сложность ее рализации в том, что из-за маленького экранчика флиппера, на один кубик не помещается 4 цифры в стандартном шрифте. Поэтому авторам пришлось рисовать собственный пиксельный шрифт.
  • Расширение функций iButton DS199x — автор допил поддержку протоколов… что-то там про NVRAM. @blvdharvest
  • Эмулятор магнитных карт — авторы повторили проект magspoof и скрестили его со считывателем магнитных карт в виде аппаратного модуля для Флиппера. Позже выяснилось, что вместо отдельного модуля magspoof, можно использовать встроенную антенну Флиппера на 125khz! Таким образом, во Флиппере была открыта новая полезная функция.
  • Анализатор спектра Sub-GHz — консольная утилита для просмотра спектра в диапазоне Sub1-GHz.
  • Игра Stack Attack — оммаж на старую игру на телефонах Siemens, где нужно было уворачиваться от ящиков и складировать их. Роль грузчика выполняет дельфин.


Менеджер SPI флешек


xkgu6vzaytbpp2vbf0wp6qjfdso.jpeg

Авторы проекта: Hedger, x893, @ghettorce
Текст: Hedger

1. Идея


У Флиппера «из коробки» есть множество повседневно-полезных фич, а также несколько реже используемых, но не менее ценных функций, каждая из которых ранее требовала отдельного девайса.
Концепция подключаемых внешних модулей, позиционируемая разработчиками как одна из фишек устройства, расширяет возможности использования за рамки предоставляемого встроенным оборудованием и прошивкой.
На внешний интерфейс выведено несколько GPIO, некоторые из которых также можно сконфигурировать для работы встроенных интерфейсов UART, SPI и I2C.

image-loader.svg
Интерфейс Флиппера для внешних модулей

Флиппер уже вышел в серийное производство, но в части набора программных фич всё ещё находится в активной разработке.
Поэтому, когда появилось объявление о проведении московского хакатона, мы подали одну из первых заявок на участие, выбрав качестве проекта поддержку работы с внешними SPI-флешками.
Подобные флешки стоят практически в любом современном устройстве, в котором есть обновляемая прошивка. В таких флешках хранятся UEFI и BIOS видеокарт современных компьютеров и ноутбуков, прошивки девайсов IoT, в том числе на платформах ESP32/ESP8266, а также множества прочих гаджетов.
Для работы с SPI-флешками есть множество различных программаторов, в том числе дешёвые китайские на основе микросхемы CH341a.

s7nwzsacbttsariwiirrhpdc9jo.jpeg
Китайский программатор на CH341a

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

2. Прошивка и API

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

image-loader.svg
Часть хедеров HAL

Система предоставляет сервисы для взаимодействия с файловой системой, нотификациями, RPC, графикой.
Для разработки приложений используется кастомный UI-фреймворк с разделением обработки событий и рендера интерфейса. При разработке доступно несколько стилей написания кода — от простого однооконного приложения с использованием С API, до более сложных многоэкранных интерфейсов в двух стилях — полноценный объектно-ориентированный на C++ и более простой, но не менее функциональный стиль на чистом С.
Для добавления функционала в прошивку необходимо её перекомпилировать. На текущий момент Флиппер не поддерживает загрузку приложений с SD-карты. Однако, разработчики обещали в обозримом будущем предоставить функционал загрузки плагинов с SD и исполнения их из оперативной памяти.

3. Удалённая отладка

Организаторами был предоставлен доступ к удалённому стенду с подключённым Флиппером и инструментами для отладки. Он оказался невероятно полезным для тестирования кода до непосредственного старта трёхдневного хакатона. С его помощью удалось проверить и отладить каркас UI и фоновый обработчик взаимодействия по SPI.

0t9x8pyjzhyvg_lkmktioqjj3p8.jpeg
«Удалённый» флиппер

Отдельно хочется отметить удобные инструменты для стриминга экрана Флиппера и удалённого управления им github.com/aprosvetova/screech

rt8hv3w3aa_3qkxuq_xrvdwchbu.jpeg
Тестовый билд прошивки, загруженный на удалённый Флиппер

4. Среда разработки: J-Link & Segger ES

Оригинальная прошивка Флиппера подразумевает сборку с помощью make и тулчейна gcc-arm-none-eabi. Для удобства развёртывания разработчиками таже предоставлен Docker-контейнер, в котором установлено всё необходимое для сборки и базовой отладки с помощью gdb под Linux. Для редактирования исходников предлагалось использовать всё, что угодно, от Sublime Text до VS Code.
Но ленивым и развращённым GUI разработчикам вроде нас такое решение показалось неудобным, и вдвоём с x893 мы собрали солюшен под Segger Embedded Studio for ARM (SES) — отличную (для эмбеда) кроссплатформенную среду разработки. Солюшен для сборки прошивки использует тот же тулчейн, что и оригинальный пайплайн.
SES также предоставляет удобную навигацию по исходному коду, управление параметрами сборки (для Флиппера — релизный или отладочный билд, выбор таргета аппаратной ревизии) и графическую отладку. В качестве отладчика может применяться как родной для Segger J-Link, так и интерфейс gdb через openocd или ST-LINK-SERVER.

image-loader.svg
Пошаговая отладка прошивки

о время разработки и отладки прошивки мы пользовались отладчиками J-Link v8 и v9, китайские клоны которых можно приобрести по демократичной цене. Уже после хакатона проверили и настроили связь SES с Флиппером через ST-Link — прошивка и отладка также работают без особых проблем.

5. Графический интерфейс модуля прошивки


Разработанное нами приложение — компонент прошивки Флиппера — предоставляет базовые функции по работе с SPI флешками:

  • Определение модели подключённой флешки
  • Чтение дампа в файл (.bin) на SD-карту
  • Стирание флешки и запись дампа из файла
  • Верификация записанного


Всё взаимодействие с SPI памятью ведётся по базовой части протокола 25 серии, включающей в себя запрос трёхбайтового ID микросхемы (необходимо для определения размера флешки и её особенностей), чтение, стирание и запись областей памяти.

image-loader.svg
Экран определения типа памяти перед чтением и записью
При запуске программа автоматически определяет типа подключенной флеш-памяти и выводит результаты обнаружения на экран.

image-loader.svg
Процесс чтения дампа в файл на SD-карте

image-loader.svg
Интеграция в файловый архив

Файлы считанных дампов доступны в отдельной вкладке файлового архива. Их можно запустить из списка и сразу активировать процесс записи дампа на флешку.

image-loader.svg
Очистка флешки перед записью

image-loader.svg
Запись дампа в SPI флеш

Когда запись флешки завершена, по нажатию кнопки ОК можно запустить процесс верификации данных.

image-loader.svg
image-loader.svg
Верификация данных

Поскольку операции взаимодействия с внешней памятью могут быть достаточно долгими, особенно стирание участков флеша, то вся работа с внешним SPI вынесена в фоновый поток, обрабатывающий очередь задач от пользовательского интерфейса и не блокирующий его.
Также мы изначально планировали добавить поддержку работы с I2C памятью с повторным использованием компонентов пользовательского интерфейса, но сроки хакатона оказались слишком сжатыми для полноценной отладки взаимодействия по второму физическому интерфейсу.

6. Аппаратный модуль

Для демонстрации был собран прототип внешнего модуля с ZIF-панелью для микросхем памяти. В панельке предусмотрены 2 места под установку микросхем SPI 25 серии (в левой части) и I2C памяти 24 серии (в правой).

nem5drixgiia82dzlbahctc4rkw.jpeg
Внешний модуль

В панельку можно напрямую вставлять чипы в корпусах DIP-8, а с помощью стандартных тестовых клипс возможно прямое подключение к чипам в корпусах SOIC-8/SOP-8.

onshdae4ohkbv6bp62euwxztzkc.jpeg
Подключение модуля к Флипперу

dtc8bkfi_mkugz0_pqcupvq7blo.jpeg
SPI-флеш память на девборде ESP32

pxlm83xqzq3j7xncjbauiiukqbu.jpeg
Подключение к флешке девкита с помощью клипсы-«прищепки»

xovbbqmli5rv1muynf_g-xpirz8.jpeg
Отладчик ST-Link v3 также может использоваться как breakout плата для пинов GPIO

pxlm83xqzq3j7xncjbauiiukqbu.jpeg
Отладка физического уровня при обмене по SPI

7. Демонстрация


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

8. Результат и итоги


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

По итогам хакатона, нашей командой были разработаны:
Компонент прошивки Флиппера, реализующий базовое взаимодействие с внешними SPI-флешками 25 серии. Код, после некоторой доработки и «зачистки», пригоден для включения в код прошивки в качестве опционального компонента;
Прототип внешнего модуль для Флиппера, обеспечивающий удобное подключение микросхем памяти в корпусах DIP и SOIC-8/SOP-8.

Также мы подготовили проектную часть от Segger Embedded Studio в виде отдельного репозитория, чтобы упростить вхождение в разработку прошивки Флиппера и её компонентов для других участников сообщества.

Ethernet ping-tester


vey6vueqe6wardem3aemuoac3gi.jpeg

Авторы проекта: @karasevIA, @sht4
Текст: @sht4

О самом хакатоне мы оба узнали из статьи на Хабре. Далее Ефим дал клич в чат института, а Иван его подхватил. Встретились и стали думать — что делать?
Вариант с CAN-модулем был первым претендентом, но так и не удалось придумать куда бы его применить. Тогда выбор пал на модуль Ethernet, гораздо более популярный разьем, и применить его проще простого. Часто на производстве, дома или в общаге встречается пустая RJ-45 розетка, а что в ней — загадка. Разгадать ее и стало целью нашего модуля.
С идеей разобрались, дальше встал вопрос о ее реализации. Задачу разбили на «железо» и «софт». На Ефима упала железная часть, на Ивана возложили софтовую реализацию. Отладочным железом стал модуль на основе w5500 и плата stm32l0-discovery.

vaxm3beq5le46je4a6e2m9byous.jpeg

Из комплекта собрали простенькую отладку на основе FreeRTOS и смеси библиотек, найденных на просторах интернета. Не обошлось без трудностей и на этом этапе, первый модуль упорно отказывался получать адрес от роутера, после пары дней мучений был куплен второй, более компактный, и он уже заработал как надо.
Со схемой расправились быстро. Первоначально заметили, что на выбранной нами гребенке, есть два пина CS, а значит можно подключить и два разных модуля: один — наш, второй — другой. Потому заложили в схему второй модуль. Впоследствии от идеи отказались, реализовать ее за хакатон не представлялось возможным.
С платой думали дольше. К счастью, открытость флиппера позволила скачать весь корпус флиппера в step файлах! Чертежи так же были достаточно удобны в использовании. Рисовали прямо на них, а напечатанная моделька упростила визуальное восприятие.

image-loader.svg
image-loader.svg

Контур платы накидали во Fusion 360, и подхватили его в Altium-е. Нам подсказали что нужно учитывать еще и возможный чехол, потому добавили пару мм вылета разъему.

image-loader.svg
fxnpsik2koi5rp2oly_aqyjvhs0.jpeg

День Х


На начало хакатона у нас в запасе:
простой, но работающий, пример на отладочной плате
виртуалка, где вроде собирается проект прошивки недельной давности
Ефим, мчащий за платой в Резонит
горящие сердца и желание заполучить признание фанатов флиппера

В этот день нам раздали флипперы. Как именно они оказались у команды организаторов хакатона умалчивается. Но один из организаторов был подозрительно сильно похож на Павла Жовнера.

День Х+1


Утром этого дня во флиппер была зашита первая самопальная прошивка через специальное приложение qFlipper и спаяна первая плата. Легких путей мы не ищем, потому решили делать gui самым «правильным» вариантом — через ViewDispatcher. С платой тоже решили не обходить стороной детские ошибки и наделали их везде где можно было. Ефим потратил весь день на то чтобы отладить плату, а Иван разбирался в системе gui.

День Х+2. Он же — последний.


На утро имелся базовый gui, а плата все так же не работала. К счастью, была возможность использовать сколхоженный из соплеклея и текстолита модуль, и основная отладка велась именно на нем.

image-loader.svg
image-loader.svg
image-loader.svg
image-loader.svg

Когда основная работа с GUI была завершена, и мы начали скрещивать наш самописный GUI + железный модуль — выяснилась очень важная вещь. В прошивку, буквально за день — два до этого, внесли важный патч, упрощающий работу с внешним SPI. При этом в старой её версии, для переключения МК на гребенку флиппера, четкой инструкции не было.
Позиция организаторов была примерно такой:
«По образу и подобию раскидайте конфиги». Иван раскидал во все файлы нужные конфиги, с полпинка не завелось и мы прислушались к другому совету — перейти на новую прошивку.
Уже началась следующая презентация, а мы, «только начали» работать с железками на самом Flipper-e. Пот стекал по пальцам и закипал на ноутбуке, сборка происходила внутри докера внутри виртуальной Ubuntu внутри ноутбука на Windows, отчего ноут кипел. Как только проект был переведен на более совершенную прошивку, модуль завелся с пол-пинка, мы выдохнули и дали отмашку что готовы выходить. К сожалению, исправить все ошибки в красивой плате не удалось, презентацию мы делали на модуле из соплеклея. Отладить плату его удалось уже после хакатона.

image-loader.svg
image-loader.svg

Выводы и замечания


По аппаратной части флиппера проблем не встретили, вставил — заработало.
С софтом было посложнее. По своей простоте работа с прошивкой очень далека от той же Ардуино. Чтобы собрать один gui проект, потребовалось много бегать по проекту и ручками вставлять свои дефайны и анимации, и это не говоря о том, сколько файлов пришлось на сам проект. Хотелось бы попроще для мелких проектов. Команда флиппера и сама это понимает, пусть и быстрого решения не предвидится.

image-loader.svg

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

image-loader.svg

Эмулятор chip8


mkvbx8pubgrlexrw0ipgw4_ey0s.jpeg

Авторы проекта: dwdraugr, @mega8bit
Текст: @mega8bit

Цель проекта — создание приложения, позволяющие запускать бинарные файлы программ, работающих на 8 битных микрокомпьютерах CHIP8 70-ых годов

Сам CHIP8 имеет 35 опкодов, 16 8-битных регистров, 48 байт стека для 12 уровней вложенности, несколько таймеров для звука и задержки.

Исходное разрешение дисплея составляет 64×32 пикселя, что в два раза меньше, чем у флиппера, по этому мы масштабируем изображение, цвет дисплея — монохромный, что идеально подходит для флиппера.
Графика выводится на экран путем рисования спрайтов от 1 до 16 пикселей. Каждый пиксель это XOR операция по отношению пикселей экрана, таким образом нет необходимости задавать цвет.

u1rmueqfma7dpvoncxayxfygmsc.jpeg
qqrmhfd-nzxgo4n_4gq8mr7k_du.jpeg

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

fgnqvxvodvw4azuvz1ohluxbgqm.jpeg

Флиппер и твердотельный гироскоп


[Видео] Демонстрация работы модуля гироскопа

Авторы проекта: @avtopolet, @okalachev
Текст: @okalachev

Цель проекта — создание платы расширения Флиппера для подключения твердотельного гироскопа/акселерометра (IMU).

В проекте использовался модуль GY-521, который содержит в себе микросхему IMU-6050 и минимальную необходимую обвязку, включая резисторы подтяжки шины I2C (по этой шине и происходит обмен данными с Флиппером). Для того, чтобы все выглядело красиво и монолитно было принято решение изготовить печатную плату-переходник.
Исчерпывающая информация была найдена на сайте документации docs.flipperzero.one/ru. В разделе «GPIO и модули» дана расшифровка выведенных на корпус гнезд разъема доступных GPIO.

Для подключения использованы выводы 15 (данные), 16 (тактирование), 11 (общий) и 9 (питание 3.3V). Команда Флиппера упростила процесс разработки создав шаблон в EasyEDA (https://docs.flipperzero.one/ru/development/external-module/guide), на его основе была разведена плата и получены Gerber файлы.
Методом изготовления была выбрана фрезеровка платы на станке ЧПУ, использовался FlatCAM (получение управляющей программы для станка) и G-code Ripper (для коррекции управляющей программы по высоте для точной фрезеровки). Очень подробно процесс описан товарищем DI HALT easyelectronics.ru/gravirovka-pechatnyx-plat-na-chpu-frezernom-stanke-chast-pervaya-flatcam.html, огромное ему спасибо).

image-loader.svg

После сборки и тестирования была обнаружена проблема — модуль в переходнике работал только на проводах-перемычках. При подключении непосредственно в разъем Флиппера IMU-6050 переставала определяться на шине. Происходило это из-за неподключенного ни к чему обширного медного полигона вокруг дорожек. Припаяв полигон к общему выводу мы решили проблему и сосредоточились на разработке программного обеспечения.

Было сделано приложение для взаимодействия с IMU, состоящее из трех экранов. Первый экран с основной информацией: сырые данные с акселерометра, данные с гироскопа с учетом калибровки, рассчитанные углы по pitch и roll. Второй экран с дополнительной информацией (температура), третий экран — импровизированный уровень.

image-loader.svg

vr67mbfihk8gjc0zcxdauuon19q.jpeg

Для взаимодействия с модулем использовалась библиотека для Arduino, в которой все I2C-функции были заменены на соответствующие вызовы к API Флиппера, а также сделаны другие правки (например, учет 32-битности МК Флиппера).
Исходник добавленного приложения: github.com/okalachev/flipperzero-firmware/tree/imu/applications/imu.

Telegram клиент

1etmmdrb68ykg8spif1aakdqvfe.jpeg

Авторы проекта: Astrra, vichuma, SunnyCapt [2lnlwtx/wetox]

О хакатоне я с Астрой узнали из канала Жовнера, так как давно следим за развитием Флиппера и его успехами, и не поучаствовать было невозможно :)

Первой идеей была реализация таймера, однако организаторы отклонили заявку из-за недостаточной сложности. Поэтому я предложила замахнуться на реализацию максимально простого клиента для Telegram, чтобы еще сильнее расширить его присутствие на различных платформах. Идея была в отправке сообщений, не доставая телефон (зимой в перчатках на телефоне затруднительно что-либо делать), чтобы не отвлекаться от увлекательного процесса хакинга, а заодно сразу делиться записанными сигналами/ключами/дампами. У всей команды почти полностью отсутствовал какой-либо опыт разработки embedded (не считая баловства с Arduino), поэтому идея звучала амбициознее некуда :)

Firmware


GUI для приложения на флиппере можно реализовать тремя разными способами — мы остановились на варианте с ViewDispatcher, так как нужен был интерфейс и переиспользование готовых модулей, а переусложнять со сценами не хотелось. Так как прошивка ещё не умеет подгружать кастомные приложения, для запиливания решили сделать встроенное в прошивку приложение, вызывающееся из меню плагинов (скорее всего, любые кастомные приложения в будещем будут вызываться оттуда). При открытии приложения после короткой загрузки показываются 3 последних диалога из Telegram аккаунта (поддерживаются только ЛС). При выборе любого из них список показывает три последних сообщения из выбранного диалога и кнопку написания нового. Кнопка написания нового сообщения открывает клавиатуру на которой можно натыкать любое сообщение (из английских букв и цифр, вместо пробела нижнее подчёркивание), и кнопка save его отправляет. Ура!
Всё это мы реализовали стоковыми GUI функциями флиппера, так что даже не пришлось городить что-то своё с этой стороны.
[Видео] Телеграм клиент на Флиппере

Android App


Варианты реализации взаимодействия флиппера с телеграмом сводились к различным комбинациям неизведанного, а именно telegram client api (недолго думая остановились на использовании библиотеки tdlib) и RPC. И вот какой выбор стоял:
написать свое приложение с нуля, разобраться во всем самостоятельно и рассказать людям — полезно, круто, но долго
впилить в официальный клиент телеграма общения с флиппером — не пришлось бы возиться с апи, однако документации по реализации RPC не было
впилить в приложение флиппера общение с телеграмом — ковырять tdlib, по нему благо есть документация и примеры

Решили пойти по последнему пути. Дальше было два дня боли, связанной в основном с tdlib. Когда код был уже написан — ничего не работало. Несколько часов рассуждений принесли плоды: Prebuilt tdlib library for Android с core.telegram.org был устаревшим (не было поддержки 64-битных id«шников), скомпилировав либу из исходников всё закрутилось, завертелось.

В реализации очень помог автор приложения — @LionZXY


[Видео] Прокси приложение для Telegram под Android на основе tglib

RPC

pfblaeofhdi0di7jhsilmhxf0km.jpeg

На момент хакатона документация для разработчиков практически полностью отсутствовала, поэтому приходилось учиться на примерах из исходников, параллельно задавая вопросы разрабам прошивки. Общение для сторонних приложений по RPC чуть-чуть не успело зарелизиться к хакатону, и в итоге решено было цепляться к системному RPC. Общение реализовано с помощью протокола Protobuf, а в качестве транспорта мог использоваться один (только один одновременно!) из транспортов: Bluetooth или CLI (доступный по USB), при использовании которого вы лишаетесь возможности смотреть логи без отладчика, так как сессия CLI может быть только одна.
Удобных инструментов для отладки RPC не было, поэтому я вооружилась PySerial и писала байты напрямую в открытую CLI сессию, используя CyberChef, protoflex и protogen для (де)сериализации. Оказалось, что флиппер использует delimited вариацию Protobuf, в которой пишется длина пакета перед ним самим в виде VarInt — стоит учитывать это при разработке, так как далеко не все реализации умеют его подставлять из коробки. Итоговая proto-схема выглядит таким образом: основной пакет, telegram-specific сообщения.

Сообщения получаются по RPC через Bluetooth от приложения на телефоне, и потом обрабатываются callback«ом, в котором нужно обрабатывать все пришедшие данные — в нашем случае, перерисовывать GUI и сохранять последние сообщения.

Result


wsg68ltfjveykonrlwblhyxiryk.jpeg
За 2 суток (первый день не считается, так как только получили флипперы на руки и разбирались) мы написали полностью рабочее приложение для флиппера с телеграмом, через которое можно было отправлять и получать сообщения. Так как времени было крайне мало, всё держалось на честном слове (мы были удивлены, когда на демо всё прошло без проблем!), и само приложение всё ещё сырое, поэтому на момент написания статьи не рекомендуем его к использованию — однако, со временем это может измениться, следите за новостями коммитами!
Процесс разработки на флиппер ещё не совсем дружелюбен к новичкам, но организаторы уже учли большинство замечаний и улучшений по developer experience, и в ближайшем будущем разрабатывать станет ещё проще!
[Видео] демонстрация на телеграм клиента на хакатоне

Профишка Флиппера на Github
Приложение под Android

Функция AirTag для Флиппера


Заявка
Авторы: Биба, Боба и Абоба: @Genom_10, AlexStrNik и kinjalik

Цель проекта


Разработать модификацию для Flipper Zero Firmware с функционалом локации устройства на местности посредством эксплуатации сети устройства Apple FindMy (iPhone, iPad, etc.) с использованием программного решения OpenHayStack.

А если по человечески — увидеть приблизительное местоположение флиппера на карте, по типу Apple AirTag, используя наработки OpenHayStack.

Получившийся результат

Мы добавили в устройство третий режим работы Bluetooth Low Energy под названием OHS (сокращенно от OpenHayStack). К, сожалению, из-за особенностей структуры пакета не получилось совместить нормальную работу BLE и OHS. Со временем выяснилось, что наш функционал ломает еще больше всяких вещей :) Не исключено что нам просто не хватило знаний, но в том же айфоне под это выделен отдельный чип (вроде), а в Купертино работают люди точно поумнее нас (дизайнеры нового макбука не в счет). Когда режим включен, он начинает бродкастить advertise-пакеты BLE, содержащие публичный ключ Флиппера. Затем, через сервис Apple FindMy, мы грабим записи о местоположении, расшифровываем и кладем на карту.

image-loader.svg
image-loader.svg

Нами так же было форкнуто непосредственно приложение-клиент OpenHayStack с целью автоматизации загрузки публичного ключа в память Флиппера. В итоге все действия пользователя свелись к а) Прошивке Флиппера; б) Генерации пары ключей в клиенте Openhaystack; в) Деплою публичного ключа в память Флиппера непосредственно из приложения OHS.

image-loader.svg
image-loader.svg

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

В статье описаны не все проекты, так как их авторы вовремя не прислали тексты. В будущем, возможно опубликуем остальные проекты.

Наши соцсети


Узнавайте о новостях проекта Flipper Zero первыми в наших соцсетях!

© Habrahabr.ru