Прошивка Bluedio T4


Важное предупреждение! Действия описаные ниже могут привести к уничтожению ваших наушников! Я описываю только свой опыт и не призываю ни к каким действиям. Любые повреждения вызванные попыткой повторить — исключительно на вашей ответсвенности.
Если предупреждение не остановало вас, и вы по-прежнему желаете повторить опыт, для смягчения последующего удара, рекомендую начать относиться к своим наушникам как к уже сломанным. Их уже нет. Вам повезет если они заработают снова. И вам очень повезет если проблема с задержкой исчезнет. Но это только если повезет. А так их у вас их уже нет. Смиритесь. 🙂

Описание проблемы. Наушники Bluedio T4 ранних ревизий (произведенных до середины июня 2017) имеют проблему с рассинхронизацией звука при просмотре видео при подключении через Bluetooth. Звук запаздывает до одной секунды. Настройка плеера на искусственную задержку звука невозможна, т.к. проблема осложняется тем что задержка плавающая — иногда это 1000мс, иногда это 500мс, иногда она практически исчезает. Насколько я понял, завизит от параметров аудио-потока. Стартует всегда синхронно, однако со временем ошибка накапливается. Побочный эффект, заметный при прослушивании музыки — если нажать на паузу, в самом плеере трек становится на паузу, однако в наушниках звук продолжает играть в районе секунды. Проблема была на всех моих девайсах.
(Одно исключение было с одним из компьютеров — вероятно используется какой-то нестандартный блютус-профиль, или особенность драйвера: на нем была какая-то коррекция, из-за которой аудио и видео синхронизировалось где-то раз в секунду. Однако во время этой коррекции звук прерывался и видео проскакивало на время рассинхронизации. В итоге просмотр видео был невозможен из-за постоянных заиканий и пропусков видео.)
При подключении по проводу проблемы нет. Впрочем это и не удивительно — в этом случае, звук идет напрямую на динамики, минуя процессор наушников (шумоподавление и регулировка громкости не работают).

Если использование наушников для просмотра видео по проводу для вас не вариант, и не страшно угробить их (смотри предупреждение выше), а также имеются паяльник с тонким жалом и руки, тогда есть возможность исправить эту проблему.
Проблема не исчезает совсем! Но задержка снижается до приемлимого уровня.
В качестве примера, вот для сравнения небольшой видеофрагмент до и после прошивки:
1. До прошивки

2. После прошивки

(К сожалению компьютер с заиканием по-прежнему заикаится. Однако интервал между икотами значительно увеличился — сейчас скачки происходят где-то раз в 15 секунд (иногда дольше), и они не такие заметные как было раньше (на некоторых видео не заикается совсем)).
В общем я предупредил — проблема осталась, но сней уже можно мириться.
Upd. Сменил драйвера bluetooth на икающем компе – проблема ушла совсем.

Сразу оговорюсь, что использовался софт с производтсвенной линии. Софт китайский, интерфейс китайский. Понять что там происходит — тяжело. Более того, мне не удалось добиться положительного подтверждения процесса прошивки — все операции заканчивались либо с ошибкой, либо вываливанием в бесконечный цикл в процессе финальнрой верификации. Однако мои действия в конечном итоге привели к обновлению MAC-адреса и исчезновлению задержки. Из чего я заключаю что прошивка таки залилась успешно.
Разобраться в работе приложения удалось благодаря использованию мониторинга serial-порта и эмуляцией наушников на arduino-подобном SoC’е (использовал NodeMCU ESP 12E).
Интерфейс программы я частично перевел, однако исключительно чтобы можно было ссылаться на элементы интерфейса по-человечески, а не «дропдаун с длинным иероглифом, отмеченный красным».

Для прошивки потребуются:
1. Паяльник с тонким жалом
2. Какой-либо модуль для эмуляции 232-го интерфейса через USB (ну или любой иной способ подключиться к плате наушников через COM-порт). Я
во время экспериментов использовал PL2303, FTDI, и CH341A. Последний и использовался во время финальной заливки. Главное требование — чтобы COM-порт поддерживал соединение на скорости 921600 бод.
3. Windows компьютер (настоящий, или виртуалка — не суть важно. Главное чтобы был доступ к COM-порту)
4. Отверточки, проводки, всякое-разное. Если есть первые два пункта, то все остальное тоже наверняка есть 🙂

Итак, последовательность действий.
-1. Записываем старый MAC адрес. Исключительно для проверки результата. При остром желании можно прошить его же, однако смысла особо не вижу. Я пользовался вот этой программой.
0. Полностью заряжаем батарею.
1. Разбираем правое ухо. Чтобы не поцарапать пластик, рекомендую использовать присоску. Крышка держится на трех защелках. К сожалению это самый стрёмный момент — я разбирал трижды, и все три раза переживал что могу отломать один из зацепов. Все самое интересное (материнка, батарея) находятся в правом ухе.

Для любопытных привожу содержимое левого уха — чтобы не было соблазна лишний раз ломать.
На нижней стороне платы имеется несколько сервисных площадок, которые очевидно используются на производтственной линии (имеются следы подключений).
Возможно для полной эмуляции производственной линии необходимо задействовать их все. Для наших целей достаточно исопльзовать только три.
2. Подпаиваемся к площадкам SCL, DAT, GND
3. Подлючаем 232-ой интерфейс следующим образом:
RX → DAT
TX → SCL
GND → GND(думаю можно не объяснять что можно обойтись без dupont-коннекторов как это сделал я, а просто подпаяться напрямую, или вообще обойтись без пайки. Но сами понимаете… )
4. Подключаем модуль к компьютеру, устанавливаем драйвера, запускаем программу.
5. Первый шаг возможно не нужен, но поможет оценить работоспособность системы:
5.1. Выбираем нужный порт, остальные отключаем. (Port settings → Scan Ports → COMx → OK) 
5.2. Идем в настройки. (Firmware Configuration → usr/pwd: lyfoes.com/lyfoes.com)
5.3. Исправляем путь к файлу прошивки, если надо, а также устанавливаем параметры как на картинке.
Параметры BT Address NAP/UAP/LAP отвечают за новый MAC адрес. При большом желании можно ввести оригинальный адрес и попытаться угадать какой из паттернов генератора не изменит его 🙂 Я ввел оригинальный и оставил паттерн как на скриншоте, но программа «скорректировала» его в третьем байте.
5.4. Сохраняем параметры и в главном окне жмем на кнопку Start (синий кружок с треугольником). В это время программа открывает порт в режиме 921600 8N1 и ждет начала передачи от наушников (сама ничего не пишет в порт пока не получит первый пакет 0xBE500003).
5.5. Жмем кнопку питания на наушниках. Если все подключено правильно, драйвера в порядке, выбран правильный COM-порт, то должен побежать прогресс. Наушники в это время моргают синим-красным светодиодами. В течении десятка секунд идет первый цикл (вероятно эмуляция записи), после чего начинается второй (вероятно верификация), доходит до 20% и останавливается с ошибкой. После ошибки наушники остаются гореть красным светодиодом. Ждем когда погаснет и они снова перейдут в режим ожидания начала соединения (в районе минуты-двух).
6. Собственно запись.
6.1. Идем в настройки и отключаем чекбоксы “calibration” и “Factory pattern”
6.2. Повторяем предыдущий пункт: стартуем запись в программе, жмем питание на наушниках. Первый цикл пробегает за 13 секунд. Со вторым, лично у меня, случилось странное — программа сменила статус бар на «тестирование» и больше никак не обновляла прогресс. Наушники тоже никак не проявляли активность. Однако в serial-мониторе шел активный обмен данными (правда данные не выглядели куском прошивки — скорее повторяющиеся блоки разреженных данных). Для очистки совести я выждал более получаса. После чего просто отключил наушники от порта. Дальше немного напрягся — они больше ни на что не реагировали. После ряда экспериментов, удалось вернуть их к жизни подключением питания в usb-порт. Проверка показала что MAC-адрес обновился и задержка исчезла.
Есть подозрение что перед вторым циклом наушники перешли в режим удержания сессии и ожидали команды посредством кнопки питания, или еще какое условие должно было выполнится. К сожалению проверить все варианты я не догадался — была глубокая ночь и хотелось спать 🙂
Краткое видео для закрепления материала:

Вообще же, первоначальный план был заменить китайский «черный ящик» на самописный прошивальщик, благо вся коммуникация имеется. Однако катострофическая нехватка времени и затягивающийся прогресс на неопределенное время… Починил свои — и ладно. Делюсь тем что есть. Так что есть поле для дальнейших изысканий, если у кого появится такое желание.
Дополнительные хотелки, которыми возможно займусь как появится острое желание и время:
– раздобыть финальную прошивку с исправленными косяками, ежели будет такая (надо войти в контакт с инженерами bluedio, украсть, выпросить, отдаться в конце концов 🙂 снова 🙂 ). Как вариант — разобраться как скачать текущую прошивку из наушников, и найти донор который будет выпущен в ближайшем будущем. (вроде сейчас появились T4S — посмотреть есть ли аппаратные отличия, или только софт )
– напрягают дефолтные звуки (“power off”, “device connected”, итд). Хотелось бы заменить их на более короткие бульки и бипы.
– Программа максимум — раздобыть исходники прошивки. А там aptX и кто знает что еще… 🙂
– Ну или забить и пользоваться тем что есть пока не помрёт, а там купить новые 🙂
Если, вдруг, кто-то зайдет дальше в изысканиях — пишите, делитесь информацией (сюда, или в личку: anar@ibn.by).

Ах, да. Чуть не забыл. Ссылка на архив с программой-прошивальщиком. Пароль: lyfoes.com