USB HID control for Microsoft Teams ( or Skype) e.g. Mic mute status LED

Hi, I have trying to mute/unmute microphone during Microsoft Teams meetings. I have managed to to it by USB HID with Pro Micro (32u4) by sending mute short short (CTRL+SHIFT+M) thru

But this works only if Teams is the active window. Also, it is not possible to get mute status. Alternative way is use Telephony Page of HID with custom HID. It provides Mute LED also. In below links there are explanations for implementation. Skype for Business (SfB) has more explanation. Despite I tried to get the data.

Did anyone anyone tried to HID with Teams of Skype?
How can I implement custom HID and Telephony?
If anyone interested in such project, we can work together.

I recently saw Mute Button for MS Teams; I did not look at it but maybe it solves the issue?

Thank you for your prompt reponse. I reviewed the project. Similar to what I have done, it's using CTLR+SHIFT+M to (un)mute. On top, it's using WINKEY+1 short to make the Teams active window, if I'm working on another window (e.g. PowerPoint)

Actually, I looking for a solution to achieve below features:

  • Mic mute/unmute (even if Teams is not the active window)
  • Get mic mute status

Teams or Skype compatible headsets (e.g. Plantronics C320) are doing it thru HID.

PS. I requested MS to allow USB HID Telephony page for such purposes.

I'm actually looking into doing something similar using an Arduino Leonardo and the Hid Project (GitHub - NicoHood/HID: Bring enhanced HID functions to your Arduino!)

I'm attempting to copy one of the devices in this library to use as a telephony device but havent got far enough to implement the hid descriptors just yet.

Here's a list of the hid telephony descriptors supported by windows

Did you manage to solve you problem? I am probably doing very simmilar project as yours.
By the Microsoft documentation there is a Teams Accessory Signali Protocol which is probably what we need, but Microsoft share it only to OEM manufacturers not hobbysts. I had tried to use Telephony HID interface, but for Teams it does not work.

hi guys, I am trying to do something similar, did you made progress here? thank you in advance! :wink:

I still couldn't find a solution. No possibility to get it yet.

So what is the keyboard code for the actual mute button on a keyboard which has this button as many do?

This would require at least two components, a modification to the report sent by arduino micro (I've not read the telephony reference yet) and also and HID report descriptor to match the report. A third component is the output of mute status. I'm somewhat interested in such thing. Maybe after I finish grading all my final exam papers :smiley:

There is a new USB HID Usage Table (v1.22) published. In new version, microphone control is added in Consumer Page (0x0C). It is intended for Game Recording & Broadcasting but it may work for conferencing applications maybe. ( I haven't deeply investigated yet)

Keyboard mute buttons affect the output device (e.g. speakers) so you can no longer hear what the caller is saying. Whereas the topic of this discussion is to mute the telephony mic so that the person on the other end of the call can't hear you cough or mutter nasty things about them.

To answer your question, mic mute is on the telephony Usage Page 0x0B. The mic mute button sends Usage ID 2F. The mic mute status led on the headset responds to Usage ID 09.

From my own testing it would appear that some programs, particularly Teams, will only respond to the headset models they have certified.

So to make this work the Arduino can't identify itself as a generic telephony device. Instead it will need to report as a known good model with appropriate Vendor ID. Jabara and Plantronics are probably good candidates.

It would be greatly appreciated if anyone can confirm they have a headset with a working mute button and/or mute led, and also post what model it is.

Edit: found a Reddit post saying the mute button works on Jabra Elite 75.

Maybe this will help:

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.