суббота, 23 марта 2013 г.

Повышение отзывчивости Google Nexus 4

Предлагаю вариант решения проблемы с чувствительностью к касаниям сенсорной панели смартфона Google Nexus 4.



Прежде всего, могу предположить, что многие возразят, мол, у них "все Ок и никаких проблем нет, а ты все придумал". На самом деле я был бы рад, если бы это было так. Но с этой проблемой столкнулся не только я. На http://code.google.com обсуждается этот вопрос (№ 40445) - http://code.google.com/p/android/issues/detail?id=40445

Более того, если мне дадут в руки два смартфона, один с исправленным тачем, другой - без, то я "с закрытыми глазами" определю где какой. Просто все зависит от того, с какой силой вы привыкли касаться экрана, а после чувствительного тача Samsung Galaxy S II проблема Nexus 4 очень заметна, особенно при быстром наборе текста на встроенной клавиатуре.

Можете не соглашаться с выводами, ваше право. Для тех кому интересно, читаем дальше.

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

Собственно, как проявляется эта проблема можно посмотреть на видео - http://youtu.be/jXqSH9U2sFo:


Чтобы узнать чувствительность сенсора "в числах" делаем так:
  1. Включаем в меню "Для разработчиков" параметр "Отображать касания"
  2. После этого, например, в галерее с какой-нибудь картинкой легонько касаемся экрана пальцем (без свайпов!)
  3. Смотрим параметр PRS вверху (чем меньше, тем лучше).
У SGS2 PRS = 0.01-0.02.
У N4 до применения патча PRS = 0.50-0.60, после патча PRS = 0.35-0.40.
*Есть предположение, что сравнивать эти параметры между двумя разными аппаратами не корректно, т.к. значения выдает драйвер, который на каждом аппарате свой. А вот для сравнения чувствительности на одном и том же аппарате указанный алгоритм вполне сойдет.

Предполагаемая причина указанной выше проблемы:
Виноват драйвер сенсорной панели Synaptics S7020 версии E027, идущий на ВСЕ нексусы с октября 2012 года. Узнать версию драйвера можно командой из консоли:
cat /sys/devices/virtual/input/lge_touch/fw_ver
На старой версии драйвера E015 чувствительность была гораздо выше. Причины, побудившие Synaptic обновить драйвер перечислены здесь - PLG137 firmware E027 update:
- Fixed issues in production test
  . ghost touch in high and low temperature
  . ghost touch with noisy charger connect
  . sensing test
- Stablized thumb operation
- Fixed flapping finger width report
У драйвера закрыты исходники, потому "нормального" исправления кода пока не предвидится.
Но к счастью, на XDA найден способ временно вернуть старую версию драйвера - [ZIP][MOD] Increase touch responsiveness

!!! Естественно, все, что вы делаете - на свой страх и риск !!!

Требования перед прошивкой: установленный BusyBox (в цианогене он есть по умолчанию).

Сам процесс прошивки:
  1. Скачиваем файл - http://tinyw.in/wRXS
  2. Прошиваем его через рекавери
  3. Перегружаем смарт. 
  4. Внимание: каждый раз при перезагрузке сенсорная панель не будет реагировать в течении 30-60 сек. Это нормально: производится установка и активация драйвера.
  5. Для проверки корректности установки драйвера смотрим файл /data/Driver.log
Что делает скачанный файл:
  • Enables init.d by adding a command into install-recovery.sh to run anything in /system/etc/init.d (method by Ryuinferno)
  • Extracts the E015 driver to /system for safe keeping and script usage (E015 is a downgrade of the touch driver that senses touch better)
  • Adds an init.d script that changes the touchscreen driver to E015 on every boot (driver supplied by Matt and so was the temp-replace method. It runs his method on every boot essentially.)
  • Sends log to /data/Driver.log so user can check proper installation if desired
Данный драйвер, прошитый указанным способом, не влияет на драйвер используемый в рекавери (но иногда появляется пауза после загрузки в рекавери где-то 10-15 сек). Для возвращения исходного драйвера E027 прошиваем через рекавери этот файл - http://goo.im/devs/trter10/RevertE015.zip или просто прошиваем системную прошивку (без сброса даных, с вайпами кэш и далвик-кэш).

Способ проверен мной лично на прошивке Cyanogenmod 10.1 20130129 и выше, ядра - Matr1x v6.0, 6.5, franco.Kernel r102, r110. Никаких глюков мной не обнаружено (в том числе и тех, что побудили Synaptic обновить драйвер).

Естественно, процедуру прошивки драйвера нужно повторять каждый раз после обновления основной прошивки системы. 
Если у вас прошивка Cyanogenmod (CM), то проще всего воспользоваться программой CyanDelta Updater, которая, во-первых, позволяет скачивать разностные обновления CM размером 8-20 Мб (а не всю прошивку целиком, под 180Мб), а во-вторых позволяет задать последовательность прошивки сразу нескольких файлов.
Для прошивки сразу нескольких файлов через CyanDelta рекомендуется использовать рекавери TWRP (проверено мной). Поставить его легко: качаем с гугл плей GooManager, после чего в меню программы выбираем Install OpenRecoveryScript.


2 комментария: