При чтении с evdev некоторые события с наушниками отсутствуют - PullRequest
0 голосов
/ 30 сентября 2019

События увеличения и уменьшения громкости от Bluetooth-гарнитуры не видны evdev в моем коде на моем Raspberry Pi Zero W. Для моего набора наушников, который повторно использует кнопки регулировки громкости для предыдущей и следующей функции трека, удерживая их нажатой,эти события также отсутствуют. У другой пары наушников, которые я пробовал, есть специальные кнопки для предыдущей и следующей дорожки, и они отлично читаются, как и кнопка паузы / воспроизведения на каждой паре (поэтому обе пары пропускают некоторые события в evdev).

Использование стандартныхКод учебника evdev, немного изменен. Погуглил, но нигде не могу найти эту конкретную проблему. Оба наушника отлично работают с VLC на Raspberry Pi.

Я предполагаю, что события как-то перехватываются, поэтому я попытался получить эксклюзивный доступ к устройству, а пропущенные события все еще не читались (хотя рабочаяв этом режиме события не влияли на VLC).

Также попытался распечатать все события, а не только EV_KEY, на случай, если я каким-то образом неправильно пойму возможности. Вывод возможности:

/ dev / input / event4 00: 08: 2A: FF: EB: CD {

('EV_SYN', 0): [('SYN_REPORT', 0), (' SYN_CONFIG ', 1), (' SYN_MT_REPORT ', 2), ('? ', 20)],

(' EV_KEY ', 1): [(' KEY_1 ',2), («KEY_2», 3), («KEY_3», 4), («KEY_4», 5), («KEY_5», 6), («KEY_6», 7), («KEY_7», 8), ('KEY_8', 9), ('KEY_9', 10), ('KEY_0', 11), ('KEY_ENTER', 28), ('KEY_DOT', 52), ('KEY_F1', 59), («KEY_F2», 60), («KEY_F3», 61), («KEY_F4», 62), («KEY_F5», 63), («KEY_F6», 64), («KEY_F7», 65), («KEY_F8»', 66), (' KEY_F9 ', 67), (' KEY_UP ', 103), (' KEY_LEFT ', 105), (' KEY_RIGHT ', 106), (' KEY_DOWN ', 108), ([' KEY_MIN_INTERESTING ', 'KEY_MUTE'], 113), ('KEY_VOLUMEDOWN', 114), ('KEY_VOLUMEUP', 115), ('KEY_HELP', 138), ('KEY_MENU', 139), ('KEY_NEXTSONG', 163), («KEY_PREVIOUSSONG», 165), («KEY_STOPCD», 166), («KEY_RECORD», 167), («KEY_REWIND», 168), («KEY_CONFIG», 171), («KEY_EXIT», 174), («KEY_PLAYCD»', 200), (' KEY_PAUSECD ', 201), (' KEY_FASTFORWARD ', 208), (' KEY_SELECT ', 353), (' KEY_POWER2 ', 356), ('KEY_INFO', 358), ('KEY_PROGRAM', 362), ('KEY_FAVORITES', 364), ('KEY_LIST', 395), ('KEY_RED', 398), ('KEY_GREEN', 399), ('KEY_YELLOW', 400), ('KEY_BLUE', 401), ('KEY_CHANNELUP', 402), ('KEY_CHANNELDOWN', 403), ('KEY_LAST', 405)]

}

Вот код, который я сейчас использую:

from evdev import InputDevice, categorize, ecodes
dev = InputDevice( '/dev/input/event4' )

print( dev )

dev.grab()     # get exclusive access to device 

for event in dev.read_loop():
    if event.type == ecodes.EV_KEY:
        print( categorize( event ) )
    else:
        print( categorize( event ) )     # print out all events, not just EV_KEYs just in case

Большое спасибо за любые предложения.

...