[13:52:29] <vm03> привет всем!
[14:18:32] <zombah> добрый день всем
[14:32:34] <stuw> vm03: заманчивая штука )
[14:32:49] <stuw> zombah: ну че как? :) будем пилить эвенты дальше?
[14:33:22] <vm03> zombah, привет!
[14:33:58] <zombah> stuw: vm03: привет
[14:34:03] <zombah> stuw: конечно будем
[14:34:31] <vm03> stuw, вот только не нашел sata насколько быстрый там, а так очень интересно и вроде как все драйвера открыты
[14:34:35] <zombah> stuw: я вчера пытался вспомнить что там андроиду нужно вообще чтобы их обрабатывать, но уверенной инфо не нашел
[14:34:58] <stuw> zombah: powerbtnd - судя по коду, он слушает максимум 3 девайса, имя которых начинается с "power key" (или NVEC power button)
[14:35:57] <stuw> когда получает событие отпускания KEY_POWER, то эмулирует нажатие KEY_POWER, паузу 2 сек, отпускание KEY_POWER. Шлет новые события в /dev/uinput
[14:36:28] <stuw> можно в конфиге настроить, чтобы по двойному клику, а не одинарному, эмулировал событие
[14:36:33] <zombah> stuw: ну powerbtnd нормально вызивает меню выключения
[14:36:44] <stuw> что такое /dev/uinput - хз
[14:36:55] <zombah> stuw: но если можно без него обоитись такой вариант предпочтительней
[14:37:08] <stuw> а откуда powerbtnd взялся ?
[14:37:30] <zombah> stuw: я его добавил когда с 3.1 не было вариантов долгое нажатие сделать
[14:37:47] <zombah> stuw: он из android-x86 т.к. там писюки
[14:39:47] <zombah> сейчас я его отключил пока чтобы попробовать без него
[14:40:22] <stuw> у нас на нажатие и быстрое отпускание кнопки питания генерится одно событие
[14:40:50] <stuw> поэтому нам скорее всего понадобится этот демон (по крайней мере на первый парах), ибо в ядре слипы вставлять не хочется
[14:40:55] <zombah> stuw: быстро нажатие это сон, powerbtnd это не делает он только меню выключения
[14:41:40] <zombah> stuw: аутентичное поведение андроида, короткое нажатие - сон, длинное - меню выключения.
[14:42:21] <zombah> stuw: раньше у нас с 3.1 было только короткое, powerbtnd из него эмулировал длинное для вызова меню
[14:42:41] <stuw> на долгое нажатие у нас тоже одно событие (это событие в тестовом ядре в драйвере клавы) - можно судить по количеству сообщение "kbd varsize msg" на нажатие
[14:43:08] <zombah> хм
[14:43:14] <stuw> ага
[14:43:24] <zombah> надо найти код от другого девайса посмотреть как там это сделано
[14:43:26] <stuw> у нас нет отдельных событий на нажатие и отпускание этой кнопки
[14:43:37] <zombah> я вроде у grouper находил, надо вспомнить
[14:44:07] <zombah> нехсус 7 который
[14:44:16] <stuw> на короткое нажате-отпускание единичное событие, на длинное - другое единичное событие
[14:45:24] <stuw> мы в драйвере сами шлем сначала нажатие кнопки, потом сразу отпускание кнопки. Для длинного нажатия мы можем слать KEY_POWER, для короткого KEY_SLEEP
[14:45:26] <zombah> stuw: а можно их разнести на разные input/event девайсы? тогда powerbtnd может перехватывать только длинное
[14:45:49] <stuw> zombah: да, сейчас это на разных девайсах сделано
[14:46:11] <stuw> только я, возможно, накосячил с объявлением девайса для короткого нажатия
[14:46:17] <zombah> stuw: я просто в getevent не вижу на длинное ничего только в дмесг
[14:46:43] <stuw> да, я такое допускаю из-за моего косяка )
[14:46:45] <zombah> stuw: короткое норм видно в getevent, я тебе сбрасывал лог там два ивента
[14:46:50] <stuw> угу
[14:50:42] <stuw> zombah: "NVEC power button" и "NVEC sleep button" - я думаю, что по короткому можно слать KEY_SLEEP на "NVEC sleep button"
[14:55:39] <stuw> zombah: запушил
[14:56:13] <stuw> надо сейчас еще в исходниках андроида поискать, как и где он KEY_SLEEP и KEY_POWER обрабатывает
[15:25:01] <zombah> там некий eventhub должен быть, надо найти его
[15:25:15] <zombah> он вроде все ивенты в андроиде обработывает
[15:49:26] <stuw> zombah: https://android.googlesource.com/platform/frameworks/base/+/d922ae01ca99a2b6d39a9393f86776a1d10ebd14/services/input/EventHub.cpp - вот такое есть
[15:54:04] <zombah> stuw: похоже по виду
[15:54:40] <stuw> KEYCODE_POWER onKeyLongPress - еще это можно искать
[15:55:13] <stuw> zombah: adb shell input keyevent 26
[15:55:22] <stuw> такая команда что-нибудь делает ?
[16:02:16] <zombah> stuw: счас гляну
[16:05:43] <stuw> блин, еще хрен загуглишь ведь, все про приложения для андроида пишут :(
[16:05:52] <zombah> stuw: экран вырубился, слип сигнал похоже
[16:06:11] <stuw> а в логе есть что ?
[16:06:44] <zombah> stuw: в дмесг есть, [ 69.269069] pm_request_early_suspend_state: sleep (0->3) at 68761287000 (2016-04-08 01:14:23.447526000 UTC)
[16:07:24] <stuw> а в logcat'е ?
[16:07:31] <zombah> счас гляну
[16:07:37] <stuw> в ядре то более-менее ясно что и где искать
[16:07:43] <stuw> вопрос в самом андроиде
[16:09:05] <zombah> ничего интересного в логах, все говорят что мол уходим в слип и все
[16:09:21] <stuw> а кто говорит? какие подсистемы ?
[16:09:35] <stuw> кто первый сказал, с того и начинать
[16:09:46] <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:50] <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:09:55] <zombah> счас гляну что за процесс это
[16:10:17] <zombah> блин форкнулся уже
[16:10:21] <zombah> нет его больше
[16:11:21] <zombah> процесс system server говорит power sleep requested
[16:11:55] <zombah> I/power_sleep_requested( 1316): 0
[16:11:55] <zombah> I/power_screen_state( 1316): [0,2,0,0]
[16:11:55] <zombah> I/power_screen_broadcast_send( 1316): 1
[16:12:14] <zombah> ps |grep 1316
[16:12:14] <zombah> system 1316 1197 370776 65940 ffffffff b6e90bc4 S system_server
[16:13:54] <zombah> а Input хз кто говорит, процесс исчезает сразу как скажет это про KeyEvent
[16:14:45] <zombah> пересобралось с последним патчем, счас попробую накатить
[16:28:19] <stuw> zombah: https://github.com/android/platform_frameworks_base/blob/master/services/core/java/com/android/server/power/PowerManagerService.java#L1140
[16:30:14] <stuw> https://android.googlesource.com/platform/frameworks/base/+/c12035cd40d01b032013f515cb509e6c8791cf65/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#837
[16:30:39] <stuw> com.android.internal.R.integer.config_shortPressOnPowerBehavior
[16:30:56] <zombah> ага
[16:31:51] <stuw> https://android.googlesource.com/platform/frameworks/base/+/c12035cd40d01b032013f515cb509e6c8791cf65/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#153
[16:34:48] <stuw> PhoneWindowManager.java
[16:35:58] <zombah> ты понимаешь что это значит?
[16:46:03] <zombah> уехал на совещание
[16:48:34] <stuw> обработка KeyEvent.KEYCODE_POWER происходит в PhoneWindowManager.java. По этому событию зовется powerShortPress. Внутри powerShortPress в зависимости от значения config_shortPressOnPowerBehavior происходит действие.
[16:49:46] <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:41] <stuw> SHORT_PRESS_POWER_REALLY_GO_TO_SLEEP_AND_GO_HOME = 3 - то же, что и 2, но + вызов launchHomeFromHotKey()
[16:51:47] <stuw> KeyEvent.KEYCODE_SLEEP - тупо пошлет в сон (примерно то же, что и SHORT_PRESS_POWER_GO_TO_SLEEP = 1)
[16:54:23] <stuw> начинается кутерьма в dispatchUnhandledKey (в этом же файле). Кто зовет dispatchUnhandledKey пока не знаю
[16:57:54] <stuw> Для длинного нажатия действия тоже настраиваются (ключ - LONG_PRESS_POWER_GLOBAL_ACTIONS)
[23:22:30] <zombah> а во -lt ключ у getevent есть https://source.android.com/devices/input/getevent.html#showing-live-events
[23:22:50] <zombah> можно смотреть не input а event интерфейс
[23:38:18] <stuw_> прикольно
[23:57:34] <stuw_> что на последнем ядре показывает ?