Call for help: Testing headset buttons
-
Any chance we will see working bluetooth buttons in the music player on the dev channel soon? Really looking forward to finally be able to fast forward songs in my car again
-
Thanks @flohack for working on this! My test:
Wired headset with a single button, plugged into the BQ E4.5: the device appears as
/dev/input/event1: ACCDET
and reacts like this on button presses:Event: time 1619503503.379042, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1 Event: time 1619503503.379054, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0 Event: time 1619503503.379059, -------------- SYN_REPORT ------------
The same headset is seen on the Xiaomi Note 7 Pro as
/dev/input/event4: sm6150-idp-snd-card Button Jack
and sends these two events on button press:Event: time 1619504074.039626, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 1 Event: time 1619504074.039626, -------------- SYN_REPORT ------------ Event: time 1619504074.039777, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 0 Event: time 1619504074.039777, -------------- SYN_REPORT ------------
-
Thanks guys!
Already a lot of good information. So the wired buttons it seems a bit easier, not so many variants:- KEY_MEDIA and KEY_PLAYPAUSE need to be handled for media playback and calls
- we can agree that the meaning is PLAY or PAUSE, also for the MEDIA event
- In case Music is playing it will pause the music, or continue playback if state is PAUSE
- In case a call is signalled, the button should only pick up the call. Media playback will already be stopped by the telephony framework.
- In case a call is active, the button should only end the call. Media playback will already be started again by the telephony framework.
-
@flohack Cool, although bluetooth seems not too different either.
On my wired headset and the Oneplus3 I also noticed evtest events on a different device for plugging in the headset and removing it from the headset socket. I guess that would also be useful to support in the music player?
-
@povoq That should be the events that switch the audio sink to the headset. That should already be handled properly otherwise you would not hear anything
-
Ah, I guess. Sometimes it seems to get confused though switching away from bluetooth devices etc.
-
Device Sony Xperia X (F5121)
When plugging in the original Inears headset <MHA750>, the volume control changes from speaker to earphone, then drops right back to speaker after about 1.5 seconds.I tried the evtest anyway with the following 2 results, not sure if they are helpful. Because nothing really happened during the test run, not until I opened the <write to file> file to see what happened.
Available devices: /dev/input/event0: qpnp_pon /dev/input/event1: bu520x1nvx /dev/input/event2: somc_chg_unplug_key /dev/input/event3: gpio-keys /dev/input/event4: clearpad /dev/input/event5: msm8976-tasha-snd-card Headset Jack /dev/input/event6: msm8976-tasha-snd-card Button Jack Select the device event number [0-6]: 6 Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 Input device name: "msm8976-tasha-snd-card Button Jack" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 226 (KEY_MEDIA) Event code 260 (BTN_4) Event code 261 (BTN_5) Event code 582 (KEY_VOICECOMMAND) Properties: Property type 6 (?) Testing ... (interrupt to exit) second test <dito> Select the device event number [0-6]: 5 Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 Input device name: "msm8976-tasha-snd-card Headset Jack" Supported events: Event type 0 (EV_SYN) Event type 5 (EV_SW) Event code 2 (SW_HEADPHONE_INSERT) state 0 Event code 4 (SW_MICROPHONE_INSERT) state 0 Event code 6 (SW_LINEOUT_INSERT) state 0 Event code 7 (SW_JACK_PHYSICAL_INSERT) state 0 Event code 15 (?) state 0 Event code 16 (?) state 0 Event code 17 (?) state 0 Event code 18 (?) state 0 Properties: Testing ... (interrupt to exit) Event: time 1619464909.762451, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1 Event: time 1619464909.762451, type 5 (EV_SW), code 4 (SW_MICROPHONE_INSERT), value 1 Event: time 1619464909.762451, type 5 (EV_SW), code 7 (SW_JACK_PHYSICAL_INSERT), value 1 Event: time 1619464909.762451, type 5 (EV_SW), code 17 (?), value 1 Event: time 1619464909.762451, -------------- SYN_REPORT ------------ Event: time 1619464910.860134, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0 Event: time 1619464910.860134, type 5 (EV_SW), code 4 (SW_MICROPHONE_INSERT), value 0 Event: time 1619464910.860134, type 5 (EV_SW), code 7 (SW_JACK_PHYSICAL_INSERT), value 0 Event: time 1619464910.860134, type 5 (EV_SW), code 17 (?), value 0 Event: time 1619464910.860134, -------------- SYN_REPORT ------------ Event: time 1619464946.781515, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 1 Event: time 1619464946.781515, type 5 (EV_SW), code 4 (SW_MICROPHONE_INSERT), value 1 Event: time 1619464946.781515, type 5 (EV_SW), code 7 (SW_JACK_PHYSICAL_INSERT), value 1 Event: time 1619464946.781515, type 5 (EV_SW), code 17 (?), value 1 Event: time 1619464946.781515, -------------- SYN_REPORT ------------ Event: time 1619464952.772939, type 5 (EV_SW), code 2 (SW_HEADPHONE_INSERT), value 0 Event: time 1619464952.772939, type 5 (EV_SW), code 4 (SW_MICROPHONE_INSERT), value 0 Event: time 1619464952.772939, type 5 (EV_SW), code 7 (SW_JACK_PHYSICAL_INSERT), value 0 Event: time 1619464952.772939, type 5 (EV_SW), code 17 (?), value 0
Is this helpful ?
-
@mario-ch Well partially, but normally the evdev for inserting and removing headsets is different from the button control. So with the button device nothing happened? I guess that would be the right one...
-
@flohack So, I now played a song as a comparison and plugged in the Inears headset.
The Jack has switched from speaker to earphone and I could hear the music, but the volume buttons did not work.
In addition, the Evtest with <6>; with the same result as above (first test), namely nothing. -
I'm a bit late, but here's my version of events:
Devices:
Cosmo Communicator
PinePhone Rev1.2bHeadsets:
3 different sets of wired headsets, one with 3 buttons, one with 2 buttons, one with 1 buttonOn the Cosmo, selecting:
'/dev/input/event0: ACCDET'For all buttons on all headsets I get:
type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
-------------- SYN_REPORT ------------
type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
-------------- SYN_REPORT ------------There were 'Event code 114 (KEY_VOLUMEDOWN)' and 'Event code 115 (KEY_VOLUMEUP)' amongst other things listed in the 'Supported events' list, but I didn't see them on any button press.
On the PinePhone, after entering 'evtest' I got no 'Available devices', after entering 'sudo evtest' I got some choices, but none gave any response.
-
Device: Xiaomi Mi A2
Wired USB earphones with three buttons: Mi Dual Driver Earphones (Type-C) (https://www.amazon.de/XIAOMI-KopfhΓΆrer-WeiΓ-Audio-Stecker/dp/B07MLRXJBC)Available devices: /dev/input/event0: qpnp_pon /dev/input/event1: NVTCapacitiveTouchScreen /dev/input/event2: uinput-goodix /dev/input/event3: hall-switch-input /dev/input/event4: gpio-keys /dev/input/event5: sdm660-snd-card Headset Jack /dev/input/event6: sdm660-snd-card Button Jack /dev/input/event7: uinput-fpc Select the device event number [0-7]: 6 Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0 Input device name: "sdm660-snd-card Button Jack" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 226 (KEY_MEDIA) Event code 260 (BTN_4) Event code 261 (BTN_5) Event code 582 (KEY_VOICECOMMAND) Properties: Property type 6 (?) Testing ... (interrupt to exit) Event: time 1620770065.854970, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 1 Event: time 1620770065.854970, -------------- SYN_REPORT ------------ Event: time 1620770065.855140, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP), value 0 Event: time 1620770065.855140, -------------- SYN_REPORT ------------ Event: time 1620770067.377695, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 1 Event: time 1620770067.377695, -------------- SYN_REPORT ------------ Event: time 1620770067.377772, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 0 Event: time 1620770067.377772, -------------- SYN_REPORT ------------ Event: time 1620770068.851389, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 1 Event: time 1620770068.851389, -------------- SYN_REPORT ------------ Event: time 1620770068.851508, type 1 (EV_KEY), code 114 (KEY_VOLUMEDOWN), value 0 Event: time 1620770068.851508, -------------- SYN_REPORT ------------
-
@c4pp4 Ah, cool, so USB headset audio is already supported? That would be nice to add to the button support as well.
-
@povoq Well headset audio should work for music with any headset (wired, BT) but call audio seems to be broken for BT.
-
@flohack Well, I was surprised as "wired" as in headphone jack is completly different from USB headsets.
-
@povoq Ohh I see. That would be new, that USB devices work
-
Oh, I didn't understand I could test wired ones
I have ones of those white, hard ones with 3 buttons, vol+, vol- and white button:Select the device event number [0-5]: 4 Input driver version is 1.0.1 Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0 Input device name: "ACCDET" [...] Properties: Testing ... (interrupt to exit) Event: time 1620815706.095935, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1 Event: time 1620815706.095935, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Only white central button works, not the volume ones
-
Nexus 5, RC Channel (2021-W18), wired headset w/
play/pause
,volume +
,volume -
buttons:phablet@ubuntu-phablet:~$ sudo evtest No device specified, trying to scan all of /dev/input/event* Available devices: /dev/input/event0: qpnp_pon /dev/input/event1: touch_dev /dev/input/event2: gpio-keys /dev/input/event3: hs_detect /dev/input/event4: msm8974-taiko-mtp-snd-card Button Jack /dev/input/event5: msm8974-taiko-mtp-snd-card Headset Jack Select the device event number [0-5]: 3 Input driver version is 1.0.1 Input device ID: bus 0x0 vendor 0x1 product 0x1 version 0x1 Input device name: "hs_detect" Supported events: Event type 0 (EV_SYN) Event type 1 (EV_KEY) Event code 114 (KEY_VOLUMEDOWN) Event code 115 (KEY_VOLUMEUP) Event code 226 (KEY_MEDIA) Event type 5 (EV_SW) Event code 2 (SW_HEADPHONE_INSERT) state 1 Event code 4 (SW_MICROPHONE_INSERT) state 1 Properties: Testing ... (interrupt to exit) Event: time 439671.235176, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 1 Event: time 439671.235866, -------------- SYN_REPORT ------------ Event: time 439671.400194, type 1 (EV_KEY), code 226 (KEY_MEDIA), value 0 Event: time 439671.400336, -------------- SYN_REPORT ------------
So the
volume +
andvolume -
buttons are not detected, but theplay / pause
button is detected (correctly) asKEY_MEDIA
. However, pressing it 1 time gives 2 events, both thevalue 1
and thevalue 0
entries above are from a single key press. -
@kugiigi this means the device you are inspecting isn't associated with your headset (or it isn't detecting any button presses). Try again with another device selected. If it is a bluetooth device and you have selected the correct device (by mac address for bluetooth) then I think that means unfortunately button detection isn't working for that device. Can you try other bluetooth devices and / or other wired headsets?
UPDATE: I tried with 2 bluetooth devices and got no detected events either.....
-
@rik Yeah the 2 events are okay, you could have different functions for a long and a short press, so thats why it needs to send press and release.
-
Nexus 5, RC Channel (2021-W18), 2 bluetooth headsets (Mpow M30 earbuds, Anker Sound Core Mini speaker): no events detected when pressing play/pause, volume buttons but sound does work to both devices
-