Он ловко держал инструменты и припаивал последний проводок. Весь такой пушистый и красивый. Дымок витиевато поднимался вверх, а в енотской разливался приятный запах канифоли…



Однажды нам с Кряком попался симпатичный смартфон. Стало любопытно залезть в него, установить приложения и продолжить эксперименты с ним. Но путь преградил экран с паролем. Потыкав пальцем и осознав, что попыток больше трёх, мы обрадовались, ведь это увеличивало наши шансы. Телефон временно отправился на полку, а Кряк по своим делам. Мне нужно было ещё доделать текущие проекты. А этот 100% опять что-то сломал.

В один из дней меня внезапно посетила интересная мысль.

– Давай сюда, тебе понравится! – зову я пернатого коллегу.
– …?
– Совмещаем интересы: исследуем сенсор, пишем приложение на Питоне и взламываем пароль! Попробуем новое, заодно получим доступ! А?! Круто?
Утёнок явно заинтересовался новой забавой и пошёл за своими инструментами.

Любопытно, что из этого получилось?)


Какой интерфейс?


Просматривая схемы смартфонов, можно заметить, что интерфейс у контроллеров ёмкостного сенсора I2C, есть пара дополнительных линий (RST, INT) и интерфейс стандартный:

Alcatel 6043D.

Explay A351.


Huawei G620.

ZTE Blade L130.


Huawei-g6.

Документации частенько нет либо она неполная, поэтому требуется обратная разработка.
Пожалуй, Кряк справится – специалист он хороший:


– Печеньки?! ПЕЧЕНЬКИИИ!!!


– Сначала займёмся делом. Мысли рационально.
– Но я всё равно хочу печеньку!
– Ладно.
[Перерыв на обед] …

Изучаем нашу жертву


Точную модель смартфона мы не определили. Какой-то китАйфон 6(S).


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


R7126_MainBoard_V3.0


На задней крышке видим надписи FCC ID BCG-E2816A и Model A1586.


Если поискать по FCC ID, то находится какая-то полезная информация. Но не для нашей подделки, а для оригинала. Экранчик и внутренности там несколько иные.


У нашего пациента контроллер тача на шлейфе.



Focal Tech FT6336DMB. На шлейфе даже подписаны контакты. Удобно!
Есть пусть неполный, но даташит на контроллер. Какая удача!
FT6236 FT6336 FT6436L FT6436_Datasheet

Что интересного в даташите?


FT6X36 – контроллеры ёмкостной сенсорной панели со встроенным 16-битным микроконтроллером. Поддерживают одну точку касания и жест или две точки касания одновременно.


Подключение довольно простое. Данные передаются по обычному I2C интерфейсу. 


Контроллер сенсора может работать в нескольких режимах:
  1. Активный. В этом режиме он активно сканирует сенсорную панель. По умолчанию 60 кадров/с. Можно настроить быстрее или медленнее.
  2. Слежение (monitor mode). Панель сканируется на пониженной частоте (25 кадров/с, настраивается). В данном режиме большинство алгоритмов отключено. Работает простое определение наличия касания для перехода в активный режим.
  3. Спящий. Можно пробудить сигналом Reset.

Если у FT6X36 есть полезные данные по касаниям, то он информирует управляющий процессор сигналом прерывания (/INT).

Делаем стендик для работы


Даташит – это хорошо. Но в данном случае в нём описано далеко не всё, что нам нужно. Зато у нас есть рабочее устройство и логический анализатор.

– Кряк, позови монтажника! Пусть проводки к разъёму припаяет.
[Спустя 20 минут в енотской] …

(рисунок доктора Штрих)

– О, нормально так припаял!


Знакомьтесь. Это наш монтажник Кузя. В школе ему делали замечания по поводу воровства хлеба из столовки, но потом парень взялся за ум и стал прекрасным специалистом.

С кошками он по-прежнему общается.
Получается вот такой удобный стендик:


Анализатор подключаем с помощью гребёнки контактов. Штатная кнопка выключения неудобная, поэтому припаяем свою. Питание удобно подключать с помощью разъёма с ключом. Для перезапуска телефона достаточно просто разъединить и соединить обратно.

Чтобы проводки не отваливались, можно прикрепить их термоклеем. При необходимости он легко удаляется. Если есть такая цель, то можно сделать ещё аккуратнее. В данном случае хочется быстро сделать интересный проект без лишних усложнений.

Записываем и анализируем обмен


Рассмотрим обмен контроллера сенсорной панели с процессором телефона при включении, а потом немного реакцию на касания.

Файлы с записанным обменом можно найти здесь.

Анализ общей картины.


В самом начале мы видим импульсы. Затем большая пауза. Это телефон включается. На курсоре 1 появляется стартовый экран.


На курсоре 2 экран отключается. На курсоре 3 включаем экран кнопкой блокировки. На курсоре 4 экран вновь отключается. На курсоре 5 через некоторое время после включения экрана кнопкой блокировки пробуем касаться экрана (в тот момент начинается активность импульсов на линиях SDA и SCL). Смахиваем заставку вправо, потом пробуем вводить пароль.
При касаниях на лини INT наблюдается активность.


Подключим I2C декодер и посмотрим, что там передаётся.
Подробнее изучим область в начале записи.


До включения питания сенсора есть активность на SCL и SDA. На этом интерфейсе сидят ещё какие-то устройства. К тачу это не имеет отношения.

До появления заставки на экране и большой активности на SCL и SDA у нас есть 3 места малой активности. На картинке они отмечены стрелочками. Из-за масштаба левая стрелка указывает сразу на 2 места.


Анализ общей картины подробнее
Через 100 мс после отпускания RST (линия перешла высокое состояние) INT тоже переходит в высокий уровень. Затем с 428й начинаются посылки для сенсорной панели (на интерфейсе сидят несколько устройств).


После прочтения ДШ на контроллер тача всё становится понятнее. Что мы тут видим?
0b111000 – это I2C адрес контроллера тача
0х70 = 0b111000 и последний бит 0 (запись)
0х71 = 0b111000 и последний бит 1 (чтение)


Сначала записываем адрес, из ктр будем читать – 0х00, затем читаем.


Из DEVICE_MODE считывается код 0х00 – WORKING MODE. 
Далее из 0xА8 (FOCALTECH_ID) считывается 0x11.
Из 0xА6 (Firmware Version) – 0x01.
Через длительное время пишется в В0 (описания такого регистра нет) 00.

Далее адреса записи/чтения 4C/4D. Это какое-то другое устройство, процесор общается с ним до подачи питания на тач. Там ещё несколько устройств.

После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана.


В пачке посылки для и от устройства с адресом записи/чтения 4C/4D.
Периодически что-то читается из регистра 02 этого устройства. Есть и другие посылки, но по адресам 70/71 для/от нашего тача ничего нет. 
Чтобы ничего не пропустить, используем поиск строки «Address write: 70» и переключаемся по результатам поиска.


Оп! В большой пачке мы сразу не заметили посылки для тача (смотрели быстро). А там есть.


Эта позиция показана курсором. Как раз в конце пачки.
Процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, похоже на спящий режим).
[7:0] Current power mode which system is in  R/W
Далее конец пачки – экран отключился.
Потом новая пачка – это я нажал кнопку блокировки и экран включился.
В начале этой пачки сигнал Reset, чтобы контроллер тача проснулся.


А в конце пачки снова процессор пишет в регистр А5 (PWR_MODE) значение 03 (описания нет, но видимо спящий режим).
Изучим участок, где мы начали касаться тача.


После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT.


Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
Контроллер сенсора отвечает 00 00 01 00 52 03 65 00

Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
Ответ 00 FF FF FF FF FF FF FF

Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.
Странно: зачем снова читать версию прошивки контроллера тача при касании?


Рассмотрели левую пачку после первого касания.
Теперь посмотрим правую (после курсора 2).
Запрос от процессора на чтение из 00 (Device Mode) Ответ 00 00 01 80 63 03 62 00
Запрос от процессора на чтение из 08 (P1_MISC 1st Touch Area) Ответ 00 FF FF FF FF FF FF FF
Процессор читает из 10 (описания нет) Ответ FF FF FF FF FF FF FF FF
Процессор читает из А6 (Firmware Version) Ответ 01.

Анализ общей картины кратко.
После подачи питания на контроллер сенсорной панели из DEVICE_MODE считывается 0х00 – WORKING MODE.

Далее из 0xА8 (FOCALTECH_ID) считали 0x11.
Из 0xА6 (Firmware Version) считали 0x01.
Через длительное время пишем в В0 значение 00 (описания такого регистра в даташите нет).

После этого на экране появляется стартовая заставка и начинается пачка импульсов до отключения экрана. Почти все посылки в пачке для других устройств. В конце пачки процессор пишет в регистр А5 (PWR_MODE) контроллера тача значение 03 (описания нет, похоже на спящий режим).

Далее конец пачки – экран отключился.

После включения экрана кнопкой блокировки процессор будит контроллер тача импульсом Reset. Затем касаемся сенсора и начинается активность на линии INT. Этим сигналом контроллер сенсора сообщает процессору, что есть полезные данные.

Получив прерывание INT от тача, процессор начинает считывать данные. Это всегда происходит по одной схеме:
  1. Процессор пишет адрес регистра 00 (Device Mode), из ктр будет читать.
    В ответ контроллер сенсора посылает 8 посылок, например, 00 00 01 00 52 03 65 00.
  2. Процессор считывает данные из регистра 08 (P1_MISC 1st Touch Area)
    Ответ 00 FF FF FF FF FF FF FF
  3. Процессор читает из 10 (описания нет). Ответ FF FF FF FF FF FF FF FF
  4. Процессор читает из А6 (Firmware Version). Ответ 01.

И при каждом касании процессор зачем-то считывает версию прошивки. Постоянно забывает или проверяет обновления? ?
Процессор отправляет один адрес для чтения, в ответ приходит 8 посылок. Наверное, это значения из восьми регистров подряд.
В ДШ есть описание регистров, но не всех.


Пока не всё понятно. Запишем и проанализируем обмен при касаниях разных мест экрана разными способами (1 и 2 точки, жест и т. д.) Для удобства писать лучше в разные файлы. Касаться лучше аккуратно, кончиком пальца.
Измеряем частоту.


100 кГц. Частоту выборки нужно выбирать минимум в 4 раза больше частоты сигнала. Сделаем в 10 раз больше – 1 МГц (было 50 МГц). Так будет меньше точек и программа будет работать шустрее.

Касание левого верхнего угла


При касании обмен выглядит так:


За малый промежуток времени видим довольно много пачек импульсов. Частота опроса сенсорной панели 91,6 Гц.


Что передаётся в пачках?
Жирным подчёркнутым помечены изменения относительно предыдущей пачки.

Пачка 1
Процессор считывает из
00 Ответ 00 00 01 00 82 00 4С 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2
Процессор считывает данные из
00 Ответ 00 00 01 80 82 00 4С 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 3
Процессор считывает данные из
00 Ответ 00 00 01 80 86 00 4D 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 4
Процессор считывает данные из 
00 Ответ 00 00 01 80 89 00 4D 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
В 5ой-9ой пачках так же.
Пачка 10
Процессор считывает данные из 
00 Ответ 00 00 01 80 85 00 48 00
08 Ответ 00 FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 11
Процессор считывает данные из 
00 Ответ 00 00 01 80 80 00 44 00
Остальное так же.
Пачка 12
Процессор считывает данные из 
00 Ответ 00 00 00 40 80 00 44 00
Остальное так же.
Пачка 13.
Процессор считывает данные из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF.
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
14-я …18-я пачки такие же

Меняется только ответ из 00. И то незначительно и не в каждой пачке.
Видимо, при касании палец приложил не мгновенно или несколько смещал. Поэтому значения чуть-чуть меняются. А так бы не менялись.
Ближе к концу чуть-чуть меняется ответ из 08 (первая позиция с 00 на FF). Потом снова не меняется.

Касание правого верхнего угла



Что передаётся в пачках?
Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 01 01 E3 00 1D 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Процессор читает из 
00 Ответ 00 00 01 81 E3 00 1D 00
08 Ответ так же
10 Ответ так же
A6 Ответ так же
Пачка 3. Процессор читает из 
00 Ответ 00 00 00 41 E3 00 1D 00
08 Ответ так же
10 Ответ так же
A6 Ответ так же
Пачка 4. Процессор читает из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ так же
A6 Ответ так же
Пачки 5-8. Процессор читает из 
00 Ответ так же
08 Ответ так же
10 Ответ так же
A6 Ответ так же

Тут у нас касание вышло покороче. Поэтому пачек 8, а не 18, как в прошлый раз.
Полагаю, после отпускания касания происходят изменения такого вида:
при касании 00 ответ 00 00 00 41 E3 00 1D 00
08 ответ 00 FF FF FF FF FF FF FF,
после отпускания 
00 ответ 00 00 00 FF FF FF FF FF
08 ответ FF FF FF FF FF FF FF FF

Сравним ответ из 00 для левого и правого верхнего углов.
Левый верхний   00 Ответ 00 00 01 80 89 00 4D 00
Правый верхний 00 Ответ 00 00 01 81 E3 00 1D 00

Касание правого нижнего угла


Что передаётся в пачках?
Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 01 01 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Процессор читает из 
00 Ответ 00 00 01 81 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачки 3,4,5,6,7 такие же
Пачка 8. Процессор читает из 
00 Ответ 00 00 00 41 CA 03 BE 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 9. Процессор читает из 
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Оставшиеся несколько пачек такие же.

Сравним установившиеся значение на запрос чтения из 00.
Правый верхний угол 00 Ответ 00 00 01 81 E3 00 1D 00
Правый нижний угол 00 Ответ 00 00 01 81 CA 03 BE 00

2 касания одновременно (левые верхний и нижний углы)


Что передаётся в пачках?
Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Процессор читает из 
00 Ответ 00 00 02 00 08 03 72 00
08 Ответ 00 00 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Касания держал долго, поэтому пачек много. Посмотрим через 10: 1,11,21…
Пачка 11. Процессор читает из 
00 Ответ 00 00 02 80 08 03 72 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 21. Процессор читает из 
00 Ответ 00 00 02 80 08 03 72 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 31. Процессор читает из
00 Ответ 00 00 02 80 08 03 74 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 41 такая же.
Пачка 61. Процессор читает из
00 Ответ 00 00 02 80 0С 03 76 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 101. Процессор читает из
00 Ответ 00 00 02 80 10 03 78 00
08 Ответ 00 80 58 10 2E 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 131. Процессор читает из
00 Ответ 00 00 02 80 10 03 79 00
08 Ответ 00 80 55 10 2F 00 00 FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 133. Процессор читает из
00 Ответ 00 00 01 80 52 10 2C 00

Кол-во касаний в байте 2 стало 1
08 Ответ 00 FF FF FF FF FF FF FF

Видно, здесь отпустили касание №2
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Последние 4 пачки. Процессор читает из
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Отпустили оба касания.

Пока понимание такое:
00 – параметры касания №1
08 – параметры касания №2
10 – параметры жеста или касания №3? Проверим позже.
Так же есть подозрение, что в начале касания меняются площадь касания (Touch Area) и Touch Weight. Могут незначительно меняться координаты касания даже при касании без движения, так как человек может немного двигать палец.

Смахивание заставки вправо



Записываем файлик. На картинке чётко видны паузы между смахом вправо и касанием цифр 1-9, 0.
Возможно, смах вправо – это жест, поэтому попробуем найти в записанных посылках код 0х14 жеста «Move Right».


Поиск по декодированным кодам пока ничего не дал. Разбираем посылки.

Что передаётся в пачках?
Жирным подчёркнутым помечены изменения относительно предыдущей пачки.
Пачка 1. Касание. Процессор читает из 
00 Ответ 00 00 01 00 6F 03 5E 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 2. Удержание. Процессор читает из
00 Ответ 00 00 01 80 6F 03 5E 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 3. Удержание, deltaX=9. Процессор читает из
00 Ответ 00 00 01 80 78 03 5C 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 4. Удержание, deltaX=10. Процессор читает из

      ?? ?? ?? ?? ХХ ?? YY ??
00 Ответ 00 00 01 80 82 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 5. Удержание, deltaX=7. Процессор читает из
00 Ответ 00 00 01 80 89 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 6. Удержание, deltaX=4. Процессор читает из
00 Ответ 00 00 01 80 8D 03 5B 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 7. Удержание, deltaX=1.Процессор читает из
00 Ответ 00 00 01 80 8E 03 5A 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 8. Удержание, deltaX=4. Процессор читает из
00 Ответ 00 00 01 80 92 03 5A 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 9. Удержание, deltaX=8. Процессор читает из
00 Ответ 00 00 01 80 9A 03 59 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 10. Удержание, deltaX=12. Процессор читает из
00 Ответ 00 00 01 80 A6 03 59 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 11. Удержание, deltaX=15.Процессор читает из
00 Ответ 00 00 01 80 B5 03 58 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 12. Удержание, deltaX=12.Процессор читает из
00 Ответ 00 00 01 80 C7 03 57 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 13. Удержание, deltaX=13. Процессор читает из
00 Ответ 00 00 01 80 DA 03 56 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 14. Удержание, deltaX=21. Процессор читает из
00 Ответ 00 00 01 80 EF 03 55 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 15. Удержание, deltaX=23. Процессор читает из

      ?? ?? ?? ?X ХХ ?? YY ??
00 Ответ 00 00 01 81 06 03 53 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

Пачка 16. Удержание, deltaX=24. Процессор читает из
00 Ответ 00 00 01 81 1E 03 52 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 20. Удержание, deltaX=110. Процессор читает из
00 Ответ 00 00 01 81 8C 03 4D 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 22. Удержание, deltaX=66 Процессор читает из
00 Ответ 00 00 01 81 CE 03 49 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 23. Удержание, deltaX=24 Процессор читает из
00 Ответ 00 00 01 81 E6 03 48 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачка 24. Отпускание Процессор читает из
00 Ответ 00 00 00 41 E6 03 48 00
08 Ответ 00 FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01
Пачки 25-28. Процессор читает из
00 Ответ 00 00 00 FF FF FF FF FF
08 Ответ FF FF FF FF FF FF FF FF
10 Ответ FF FF FF FF FF FF FF FF
A6 Ответ 01

В движении, параллельном одной из осей, отлично видно, где какие координаты. Одна из координат изменяется незначительно (хоть и стараемся вести ровно, чуть кривим), а вторая сильно.
Понаблюдав, как изменяются байты от пачки к пачке, можно предположить следующую структуру ответа на чтение из 00:
      ?? ?? ?? ?X ХХ ?? YY ??

Структура посылок


Ещё раз посмотрим таблицу регистров.


Когда касание одно, во втором (счёт от нуля) байте 01, когда 2, то 02.
00 00 01 00 6F 03 5E 00
00 00 02 80 08 03 72 00
Отметим. NT – number of touch points. Регистры считываются просто по порядку по 8 штук. Видимо, это сделано для уменьшения посылок с адресом и экономии трафика.
Ответ на 00: ?? ?? NT XH ХL YH YL ??
Нулевой байт вообще всегда 00. Похоже на Device Mode. 00 – это working mode.
Первый байт во всех опробованных до этого касаниях и смахе вправо 00. Честно говоря, я ожидал, что смах вправо будет распознан как жест «move right», тогда в этом регистре появился бы код 14. Но этого почему-то не случилось.
Ответ на 00 
DEV_MODE GEST_ID? NT P1_XH P1_ ХL P1_YH P1_YL P1_WEIGHT?
Ответ на 08
P1_MISC? P2_XH P2_XL P2_YH P2_YL P2_WEIGHT P2_MISC ??
Можно заметить, что при отпускании касания №1 P1_MISC становится FF. До отпускания P1_MISC = 00.
При отпускании P1_XH P1_ ХL P1_YH P1_YL P1_WEIGHT меняется на FF FF FF FF FF.
До отпускания P1_WEIGHT=00
Ответ на 10
?? ?? ?? ?? ?? ?? ?? ??
Описания регистров с 0E до 80 нет. Интересно, это параметры точки №3, параметры жеста или просто зарезервированные под модернизацию регистры?



Коротко о главном


Встречаются сенсорные панели с собственным контроллером на шлейфе. Обычно такой контроллер связывается с процессором телефона по I2C. Дополнительно используется линия сброса (Reset) и линия прерывания (INT).

Опыты проводились над каким-то китАйфоном 6(S). Вероятно, разных копий много.
Контроллер сенсорной панели здесь на шлейфе, Focal Tech FT6336DMB.
Благодаря ловким ручонкам еноту хорошо удаются мелкие работы.)
С помощью логического анализатора мы записали и проанализировали более десяти файлов при разных вариантах касаний (разные координаты, жесты, кол-во точек касаний и др.) Удалось выяснить структуру посылок.

Данный контроллер определяет максимум два касания одновременно.

Жесты пока не получается сделать. Пробовал двигать две точки сразу слева направо, потом ребро ладони так же. Пробовал и увеличение или уменьшение масштаба. Но не получается вызвать жест. Возможно, жесты ещё нужно включить.

Продолжение следует.)
Выражаю благодарность доктору Штрих за симпатичного енота!

Понравился проект, статья – поделитесь впечатлением!
Не стесняйтесь писать комментарии, нам важно ваше мнение ?.



Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале



Читайте также:

Комментарии (3)


  1. the_bat
    25.12.2024 09:08

    Хорошая исследовательская работа проведена!

    Интересно, получится ли имитировать работу сенсора?

    Ждем продолжения.


    1. Kopcheniy Автор
      25.12.2024 09:08

      После обратной разработки сенсора это дело техники.

      Тем более с такой весёлой командой.)


  1. smart_alex
    25.12.2024 09:08

    Картинка КДПВ зачётная. Это прям шедевр :)