melianmiko / OpenFreebuds

Open source app for HUAWEI FreeBuds (Linux + Windows)
https://mmk.pw/en/openfreebuds/
GNU General Public License v3.0
93 stars 8 forks source link

Freebuds pro 2 #11

Closed sprootik closed 1 month ago

sprootik commented 1 year ago

Hi. I have freebuds pro 2 and I want to help add support the device. How can I do it?

melianmiko commented 1 year ago

Hi @sprootik, Thanks for your interest in this project.

I could try to implement support of this headset model, If you'll dump a Bluetooth commands that official app uses to control them. Here's a short guide how to do that. With collected logs and recorded video I can try to do that.

E-Mail for sending collected files: support@melianmiko.ru.

melianmiko commented 1 year ago

And sorry for my poor English, it isn't my main language, so guide and message may contain some mistakes

sprootik commented 1 year ago

I understand correctly that you speak Russian? :) Me too.) Я могу снять дамп с ноута (через tcpdump) с блютуз адаптера и нарезать его файлами - подключение, отключение, смена режимов (это можно сделать жестами, без приложения huawei) итд. Возможно, так будет проще? Единственное, я не очень понимаю, каким образом передаётся заряд батареи наушников и кейса и как происходил реверс протокола. Во всяком случае, bluetoothctl не выдаёт никакой информации о заряде ушей. Вообще, я немого пишу на python, если Вы дадите мне небольшую консультацию по структуре проекта, возможно я бы смог подготовить pull request. :)

P.S. Спасибо за проект, пользовался для freebuds 4i, очень удобно. Так же, при желании, можем пообщаться напрямую - почта итд.

melianmiko commented 1 year ago

О, повезло, не придётся позориться со своим ломанным английским)

Суть моего метода в том же: андроид запишет весь бт трафик в багрепорт (в том числе переданные заряд батареи и т п), а видео с экрана поможет понять что и в какой момент делалось, чтоб трафик проще изучать было. Плюс делается без ПК.

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

Если сильно параноишь, можешь выкинуть из архива с репортом всё кроме btsnoop_log, его в целом должно хватить, хотя логи тоже помогли бы, ai life много чего в логкат выводит)

sprootik commented 1 year ago

Хорошо. Как будет возможность, попробую снять дамп с телефона. Так же, если будет небольшая консультация по структуре проекта, могу попробовать добавить все изменения сам)

сб, 18 мар. 2023 г., 13:33 MelianMiko @.***>:

О, повезло, не придётся позориться со своим ломанным английским)

Суть моего метода в том же: андроид запишет весь бт трафик в багрепорт (в том числе переданные заряд батареи и т п), а видео с экрана поможет понять что и в какой момент делалось, чтоб трафик проще изучать было. Плюс делается без ПК.

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

— Reply to this email directly, view it on GitHub https://github.com/melianmiko/OpenFreebuds/issues/11#issuecomment-1474723395, or unsubscribe https://github.com/notifications/unsubscribe-auth/AJH3C7SHQGSRVII3FAKGTIDW4VCJZANCNFSM6AAAAAAV6IFYN4 . You are receiving this because you were mentioned.Message ID: @.***>

melianmiko commented 1 year ago

Окей, жду.

Я хотел задокументировать по-человечески всё здесь, но свободного времени не хватает постоянно. "Любимый" универ, куча других аппок и сайт... Руки не доходят =)

sprootik commented 1 year ago

Оке, сброшу на почту и напишу. В принципе, достаточно будет общего описания, я же так понимаю, достаточно будет добавить модуль?

melianmiko commented 1 year ago

Общее понимание... В src/openfreebuds/device лежит основная часть кода, которая тебя будет интересовать. Класс HuaweiGenericSppDevice реализует чтение/запись в беспроводной параллельный порт. Реализация каждой фичи (батарея, anc, настройка жестов, смена языка...) реализованы в отдельных подключаемых классах (handler-ах). Собственно для добавления устройства надо замутить класс, наследующийся от generic-а, и подключающий все требуемые устройству обработчики. Инфу о самом протоколе и структуре пакетов можешь почитать у меня на сайте.

достаточно будет добавить модуль?

Не факт... Проблема тут в том, что набор команд может отличаться от устройства к устройству, плюс что ещё хуже, может отличаться структура ответа на эти команды. Я например прикупил себе FreeLace Pro (ибо tws задолбали), в целом набор команд у них почти тот же что и у 4i, но в ответах отсутствует часть полей, из-за чего прога падает. Надо новые обработчики писать.

Плюс эти наушники при переключении шумодава кнопкой отсылают пакет, аналогичный тому, который 4i отсылает при извлечении их из уха (да, это можно детектировать, отдельно от смены режима), из-за чего всё к фигам падало, ибо вместо ожидаемого статуса "в ухе" (0 или 1) приходил новый режим шумодава (0-2, иногда почему-то 255)...

Крч именно из-за таких нюансов и прошу записать всё, что можно записать из офф приложения =)

sprootik commented 1 year ago

Спасибо. Прочитал статью про протокол. В общем, я использовал твой скрипт из статьи, немного поковырял уши и пришел к выводу, что все команды идентичны 4i. Проверил, так и есть, если выставить профиль для 4i то все работает. Единственно, меня несколько смущает индикатор заряда, но проверю это позже. Судя по всем, все что нужно сделать, это добавить это добавить профиль для freebuds pro 2. Чуть позже попробую создать пул реквест с профилем. P.S. Кончено, можно ещё добавить выбор режима шумодава, если заморочиться.

sprootik commented 1 year ago

Если не сложно, обнови aur.

melianmiko commented 1 year ago

Ответил под пулл-реквестом. https://github.com/melianmiko/OpenFreebuds/pull/13#issuecomment-1474866349

sprootik commented 1 year ago

В общем, батарея работает корректно.

melianmiko commented 1 year ago

Ну и отлично.

Добрался до знакомого с 5i, записал всё что было нужно по аналогии с отправленной статьёй, так что к следующему релизу организую их полную поддержку. Мб их профиль лучше подойдёт для Pro 2, по крайней мере по набору функций они больше похожи.

Так что issue пока не закрываю, хотелось бы всё-таки полную поддержку огранизовать.

sprootik commented 1 year ago

Чего-то в 0.12.1 перестали работать, в 0.12 работали...

sprootik commented 1 year ago

Ответил под пулл-реквестом. #13 (comment)

В общем, склонировал и проверил, так и есть, в 0.12.1 что-то сломалось)

melianmiko commented 1 year ago

Чего-то в 0.12.1 перестали работать, в 0.12 работали...

Единственные изменения в 0.12.1: обновил перевод на русский и убрал проверку совместимости с бт-адаптером, которая не особо-то и работала.

Можешь логи снять?

sprootik commented 1 year ago

Чего-то в 0.12.1 перестали работать, в 0.12 работали...

Единственные изменения в 0.12.1: обновил перевод на русский и убрал проверку совместимости с бт-адаптером, которая не особо-то и работала.

Можешь логи снять?

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

melianmiko commented 1 year ago

Ну, судя по диффу, что-то изменилось в работе с блютузом. Вероятно, в этой проверки и дело.

Очень сомневаюсь, эта проверка чисто при запуске программы смотрела, есть ли пригодный для использования бт-адаптер, не более того. То есть она никак не влияла на работу связи с устройствами...

Да, скажи куда скинуть

Можешь тут, личной инфы там никакой, кроме версии прошивки на наушниках и их модели. Либо на почту: support@melianmiko.ru

sprootik commented 1 year ago

Ну, судя по диффу, что-то изменилось в работе с блютузом. Вероятно, в этой проверки и дело.

Очень сомневаюсь, эта проверка чисто при запуске программы смотрела, есть ли пригодный для использования бт-адаптер, не более того. То есть она никак не влияла на работу связи с устройствами...

Да, скажи куда скинуть

Можешь тут, личной инфы там никакой, кроме версии прошивки на наушниках и их модели. Либо на почту: support@melianmiko.ru

Логи просто при выполнении приклада, или можно как-то ещё снять?

sprootik commented 1 year ago

В общем, с гита все завелось. Судя по всему, сбойная версия только в AUR.

melianmiko commented 1 year ago

В общем, с гита все завелось. Судя по всему, сбойная версия только в AUR.

Я его ещё и обновить забыл, там 0.12 висела =)