No power button and lid events from nvec

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

Events

https://github.com/ac100-ru/picasso-kernel/tree/3.18-paz00-nvec-events

NVEC

Short press is a SYSTEM event.

04:18 zombah: вот что в дмесг по короткому
04:18 zombah: [  756.692073] ec system event c5 04 01 00 80 00
04:18 zombah: [  756.700307] evt - sys varsize msg: c5 04 01 00 80 00

Long press is a KEYBOARD event.

[  745.238531] kbd varsize msg: c0 04 e0 5e e0 de

Hardware

zombah: когда держу нажатой для долгого клика вывалиет сразу UP и DOWN хотя я еще не отпустил, правда это может мелочь
14:40 stuw: у нас на нажатие и быстрое отпускание кнопки питания генерится одно событие
14:40 stuw: поэтому нам скорее всего понадобится этот демон !речь о powerbtnd! (по крайней мере на первый парах), ибо в ядре слипы вставлять не хочется
14:42 stuw: на долгое нажатие у нас тоже одно событие (это событие в тестовом ядре в драйвере клавы) - можно судить по количеству сообщение "kbd varsize msg" на нажатие
14:10 stuw: сразу приходит нажатие и отпускание при долгом нажатии, потому что нам приходит только одно событие, для которого в драйвере мы и шлем нажатие и отпускание. Я про это вчера уже упоминал.
14:10 zombah: ааа
14:10 stuw: железо генерирует одно событие, по которому ядро генерирует два :)


Android

14:41 zombah: stuw: аутентичное поведение андроида, короткое нажатие - сон, длинное - меню выключения.

Android goes to sleep

16:09 zombah: I/Input   ( 1983): InjectKeyEvent: KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_POWER, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=257343, downTime=257343, deviceId=-1, source=0x101 }
16:09 zombah: I/Input   ( 1983): InjectKeyEvent: KeyEvent { action=ACTION_UP, keyCode=KEYCODE_POWER, scanCode=0, metaState=0, flags=0x0, repeatCount=0, eventTime=257343, downTime=257343, deviceId=-1, source=0x101 }
16:11 zombah: процесс system server говорит power sleep requested
16:11 zombah: I/power_sleep_requested( 1316): 0
16:11 zombah: I/power_screen_state( 1316): [0,2,0,0]
16:11 zombah: I/power_screen_broadcast_send( 1316): 1
16:11 zombah: ps |grep 1316
16:11 zombah: system    1316  1197  370776 65940 ffffffff b6e90bc4 S system_server
16:13 zombah: а Input хз кто говорит, процесс исчезает сразу как скажет это про KeyEvent
16:28 stuw: zombah: https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/power/PowerManagerService.java#L1140
16:29 stuw: https://android.googlesource.com/platform/frameworks/base/+/c12035cd40d01b032013f515cb509e6c8791cf65/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#837
16:30 stuw: com.android.internal.R.integer.config_shortPressOnPowerBehavior
16:30 zombah: ага
16:31 stuw: https://android.googlesource.com/platform/frameworks/base/+/c12035cd40d01b032013f515cb509e6c8791cf65/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#153
16:34 stuw: https://github.com/haosp/android_frameworks_base/blob/a263e19c36dba92b9f1456ca7257f3a490f38818/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#L4454
16:34 stuw: PhoneWindowManager.java
...
16:48 stuw: обработка KeyEvent.KEYCODE_POWER происходит в PhoneWindowManager.java. По этому событию зовется powerShortPress. Внутри powerShortPress в зависимости от значения config_shortPressOnPowerBehavior происходит действие.
16:49 stuw: config_shortPressOnPowerBehavior -  число. SHORT_PRESS_POWER_NOTHING = 0 - ничего не делать, SHORT_PRESS_POWER_GO_TO_SLEEP = 1 - спать, SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP = 2 - тоже вроде спать (отличия не разбирал),
16:50 stuw: SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME = 3 - то же, что и 2, но + вызов launchHomeFromHotKey()
16:51 stuw: KeyEvent.KEYCODE_SLEEP - тупо пошлет в сон (примерно то же, что и SHORT_PRESS_POWER_GO_TO_SLEEP = 1)
16:54 stuw: начинается кутерьма в dispatchUnhandledKey (в этом же файле). Кто зовет dispatchUnhandledKey пока не знаю
16:57 stuw: Для длинного нажатия действия тоже настраиваются (ключ - LONG_PRESS_POWER_GLOBAL_ACTIONS)

powerbtnd

14:34 stuw: zombah: powerbtnd - судя по коду, он слушает максимум 3 девайса, имя которых начинается с "power key" (или NVEC power button)
14:35 stuw: когда получает событие отпускания KEY_POWER, то эмулирует нажатие KEY_POWER, паузу 2 сек, отпускание KEY_POWER. Шлет новые события в /dev/uinput
14:36 stuw: можно в конфиге настроить, чтобы по двойному клику, а не одинарному, эмулировал событие
14:36 stuw: что такое /dev/uinput - хз

Emulation

KEYCODE_POWER

adb shell input keyevent 26

KEYCODE_SLEEP (didn't check it)

adb shell input keyevent 223