Отладка физических кнопок в Android

Во-первых, я не поверил, что при нажатии на кнопку ничего не происходит, так как увидел в выводе dmesg, что twl6030_pwrbutton (кнопка питания OMAP4) была успешно запущена ядром:
input: twl6030_pwrbutton as /devices/platform/omap/omap_i2c.1/i2c-1/1-
0049/twl6030_pwrbutton/input/input3
Во-вторых, я решил, что если кнопка не позволяет выбрать какой-либо пункт в меню, то это не значит,
что она ничего не генерирует, возможно программный код recovery не слышит её отчаянный зов :)Первым делом я воспользовался командой cat прямо в recovery:
cat /dev/input/event3
При нажатии на кнопку в консоль начал выбрасываться какой-то мусор. Скорее всего, это нормально :) В
любом случае, это показатель, что кнопка работает — генерирует НЕЧТО.По умолчанию в Linux и Android кнопка включения имеет код 116 и событие KEY_POWER, и CWM Recovery, если судить по исходникам, ждёт именно его. Вот отрывок исходного кода модуля default_recovery_keys.c:
case KEY_POWER:
case KEY_LEFTBRACE:
case KEY_ENTER:
case BTN_MOUSE:
case KEY_CAMERA:
case KEY_F21:
case KEY_SEND:
case KEY_HOMEPAGE:
case KEY_SEARCH:
return SELECT_ITEM;
Выясним, что генерирует кнопка на самом деле. В этом деле незаменимым помощником является утилита
getevent. В режиме recovery эта утилита отсутствует, поэтому загружаем на смартфоне любой работающий
ROM и надеемся, что там она есть. Мне повезло. Запускаем:
case KEY_LEFTBRACE:
case KEY_ENTER:
case BTN_MOUSE:
case KEY_CAMERA:
case KEY_F21:
case KEY_SEND:
case KEY_HOMEPAGE:
case KEY_SEARCH:
return SELECT_ITEM;
root@android:/ # getevent
add device 1: /dev/input/event7
name: "HS_KEY"
add device 2: /dev/input/event6
name: "bma222"
add device 3: /dev/input/event5
name: "light sensor"
add device 4: /dev/input/event4
name: "compass"
add device 5: /dev/input/event2
name: "ft5x0x_ts"
could not get driver version for /dev/input/mice, Not a typewriter
add device 6: /dev/input/event8
name: "SDP4430 Headset Jack"
add device 7: /dev/input/event0
name: "SIM_DETECT"
add device 8: /dev/input/event1
name: "gpio-keys"
add device 9: /dev/input/event3
name: "twl6030_pwrbutton"
Для того, чтобы просмотреть информацию конкретно по кнопке питания, запускаем так:
add device 1: /dev/input/event7
name: "HS_KEY"
add device 2: /dev/input/event6
name: "bma222"
add device 3: /dev/input/event5
name: "light sensor"
add device 4: /dev/input/event4
name: "compass"
add device 5: /dev/input/event2
name: "ft5x0x_ts"
could not get driver version for /dev/input/mice, Not a typewriter
add device 6: /dev/input/event8
name: "SDP4430 Headset Jack"
add device 7: /dev/input/event0
name: "SIM_DETECT"
add device 8: /dev/input/event1
name: "gpio-keys"
add device 9: /dev/input/event3
name: "twl6030_pwrbutton"
root@android:/ # getevent -lp /dev/input/event3
add device 1: /dev/input/event3
name: "twl6030_pwrbutton"
events:
KEY (0001): KEY_END
input props:
‹none›
Оказывается, кнопка генерирует событие KEY_END вместо KEY_POWER. Поиск причины, по которой так
происходит, я решил отложить на потом, а пока переназначил "громкость вниз" на выбор пункта меню, ведь
перемещаться по пунктам recovery можно и при помощи одной кнопки :)add device 1: /dev/input/event3
name: "twl6030_pwrbutton"
events:
KEY (0001): KEY_END
input props:
‹none›
Обсуждение
Никто не оставлял здесь комментариев.
Войдите на сайт, чтобы присоединиться к обсуждению.