Code Monkey home page Code Monkey logo

headsetcontrol's People

Contributors

aguywholikestetris avatar alisadah avatar anerruption avatar centic9 avatar core1024 avatar dessix avatar elril0000 avatar giuseppem99 avatar gort818 avatar hadess avatar infiniteloopgamedev avatar ionic avatar iv-m avatar jaypikay avatar johannlejeune avatar krdimitrov avatar leixb avatar matthewbaggett avatar michsior14 avatar peternordin avatar questofiranon avatar s3lph avatar sapd avatar simonbaird avatar snkaupe avatar str0g avatar strudelkuchen avatar vtimofeenko avatar xphyro avatar yurusov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

headsetcontrol's Issues

VOID PRO battery check issue

When the mic is put up vertically, which triggers an automatic mute, the battery readings are wrong.

Examples:

mic down, muted (with the mute key)
Battery: 94%

mic down, unmuted
Battery: 94%

mic up, automuted
Battery: 222%

Maybe this is an issue with the VOID PRO and you are not getting it with yours, if so: can I provide you with any readings to figure this out?

hidraw-Permissions

I'm on Arch and had the Problem, that i needed to be root to use HeadsetCotrol on my corsair void Pro.
The reason for this is, afaik, that the hidraw-devices used by this program are owned by root. To change this I changed the udev-rule to contain the Following:

SUBSYSTEM=="hidraw", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="0a14", MODE="0666"

With the ENV{ID_MODEL}="..." my headset did not get matched, and as the Vendor-/Product-ID do not change it is afe to use them. Further changes to SUBSYSTEM were made to change the Permissions for the correct /dev/hidraw#.

As I am not sure whether this is specific for Archlinux or applicable on other Distributions, i would ask you to look into this and if necessary change the rules.

Regards
Hades

Void Wired Support

I made a fork that implements partial support for the Wired Void. It finds the Void Wired however, the sidetone command for the Void fails with:

Found Corsair Wired!
Error in transfering data :(

This would lead me to believe that possibly the protocol for the Wired version is different than the Wireless? Any ideas?

[Feature Request] Check battery level

I'd love to be able to see the current battery level, as I have no other way of receiving that information (unless I go on Windows and see what the Logitech Gaming Software says).

A simple command such as "./G930SideTone battery" that returns the battery percentage would be great.

volume scroll stops working after launching

Device: G533

This works before launching HeadsetControl
The headset itself makes a little sound indicating if you are raising or lowering the volume, volume raises or lowers fine and in my case, mate desktop shows this notification:
gi

After launching sudo HeadsetControl -s 128
you can still hear the sound in headset, but volume remains unchanged and no notification is shown, off course.

edit: running in debian stretch with mate.

Check battery level for g930 headset

Hi, I followed the guide in #3 to check the protocol for the g930 headset and I hope I did it right.

Search for packets with a info of URB_INTERRUPT in, if you found some, check the leftover capture data field, this is the data field. Now you need to go through multiple of such packets and see if the values make sense as battery indicator (e.g. if there is a 32 in hex, that could mean that the battery is 50% full). Post me the full data of such a packet (the data and the headers!).

As I cannot find the described pattern I attached the log file of USBPcap.

During capture, I did the following (time and packet column might be incorrect, I only looked for the right interval which seemed promising)

event, time, leftover capture data, packet no
charge, 101, 02 20 04 00 00, 2820
15s later
discharge, 116, 02 00 04 00 00, 2929
15s later
charge, 131, 02 20 04 00 00, 3044
15s later
discharge, 146, 02 00 04 00 00, 3157
15s later
charge, 161, 02 20 04 00 00, 3287
15s later
discharge, 176, 02 00 04 00 00, 3400
15s later
charge, 191, 02 20 04 00 00, 3530
15s later
discharge, 206, 02 00 04 00 00, 3639

15s later
unplug, 221, , 3754
5s later
plug
25s later
unplug, 251, , 4783
5s later
plug

(headset was almost full during capture)

The protocol of g930 seems totally different to me and I cannot find the battery level...

Is there anything else I can provide to have the battery check implemented for the g930?

Corsair virtuoso

cant get the corsair virtuoso to work added it like the other corsair headsets

Get the current sidetone level

Hello,

Is there a way to get the current sidetone level value for a connected headset? I would like to build a sidetone slider bar for GNOME around your code and would like to know the initial value recorded in the headset itself without needing to persist it on the computer.

G633 support

Any chance you could implement support for the Logitech G633 Artemis Spectrum?

save settings?

Hi! I love your project. I just would love to save the settings permanently. Is there a way to achieve that? I am using Arch with KDE.

cannot install it

on debian jessie with kde, i have problems with the libusb :

gcc main.c -std=gnu99 -L"/usr/lib" -lusb-1.0 -o headsetcontrol
main.c:21:31: fatal error: libusb-1.0/libusb.h: no such  file or folder
 #include <libusb-1.0/libusb.h>

i tried installing libusb 1.0 with aptitude, but it didn't solve the problem

can you help me ?
thanks

Arch Linux AUR Package

Hey, congratulations for the great work!

Just came here to inform that I created and AUR package for this repository headsetcontrol-git. Anyone using Arch based distributions have an easier way to install it now.

No features supported for G430?

Hi, I'm running Ubuntu 16.04 and I'm trying to get rid of sidetone on my Logitech G430 headset. Whenever I run sudo HeadsetControl -s 0 it says "Error: This headset doesn't support sidetone"
It says for all of the other features as well that they are not supported.
But in the readme it says that the G430 is supported, so surely something is wrong here?

Headsetcontrol written by Sapd (Denis Arnst) https://github.com/Sapd

Found Logitech G430!

Error: This headset doesn't support sidetone

Logitech G430 on Linux

I tried again to get this working on Linux, and I discovered additional information dmesg output when I ran headsetcontrol:

[523380.230450] usb 3-9: usbfs: process 6312 (headsetcontrol) did not claim interface 0 before use
[523380.232022] input: Logitech Logitech G430 Gaming Headset as /devices/pci0000:00/0000:00:14.0/usb3/3-9/3-9:1.3/0003:046D:0A4D.0010/input/input27
[523380.290414] hid-generic 0003:046D:0A4D.0010: input,hidraw1: USB HID v1.00 Device [Logitech Logitech G430 Gaming Headset] on usb-0000:00:14.0-9/input3

If I change the calls to libusb_claim_interface() and libusb_release_interface() to use 0 for the second argument, then it works.

I don't want to submit a PR with that change because I assume that it would break everything that was already working. Do you think there is a way to dynamically discover the correct value to use depending on device and platform?

Logitech G533 Battery Level

[lucas@majestic ~]:$ sudo headsetcontrol -b
Found Logitech G533!

Failed to request battery. Error: -100: (null)

Sidetone works ok.
Any help is welcome.

HS70 Support?

I noticed the Void is supported, so I was wondering.. any chance of the Corsair HS70 being supported? With what I've found this program is my only chance for getting sidetone from this headset on Linux. If it isn't possible I understand, but I thought I'd ask. I personally have little to no experience with Linux otherwise I'd be happy to help with adding support myself.

Sidetone Not Working For G430 on Mac

After building and installing, I type in the command to disable sidetone (headsetcontrol -s 0), and I receive the following in terminal:
"Found Logitech G430"
"Error: This headset doesn't support sidetone"

It's very possible I built the necessary parts incorrectly, as I'm new to Mac OS. If there is any other information I could provide to facilitate the process, please let me know. Thanks in advance.

Can't compile on Linux Mint (FIXED)

Great job on this tool, I've been looking for something like this for months, thanks for the effort!

I cloned the repository, installed libusb-1.0, but still wasn't able to compile.
This is the error message I get:

Programs/G930SideTone [master] » make
gcc main.c -L"/usr/lib" -lusb-1.0 -o G930Sidetone
main.c: In function ‘find_logitech_g930’:
main.c:110:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (ssize_t i = 0; i < cnt; i++)
     ^
main.c:110:5: note: use option -std=c99 or -std=gnu99 to compile your code
main.c: In function ‘send_sidetone’:
main.c:134:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
     for (int i = 16; i < 64; i++)
     ^
make: *** [default] Error 1

Enhancement: Future plans?

Hi! I just bought a G935, and HeadsetControl has been exactly what I needed to get the headset working. Thanks!
Are there any plans to expand the features to cover the other things that the official software can do? I don't have a windows machine, and right now the buttons are useless to me.

Many thanks.

Logitech g933-935 Battery issue!

Hello,
i have ubuntu 19.10 when i use HeadsetControl -b i get the following:

Found Logitech g933-935 Wireless!

Failed to request battery. Error: -24: (null)

Corsair Corsair VOID PRO Wireless missing in udev rules

HeadsetControl is unable to open the Corsair VOID PRO Wireless due to the following line
missing in 70-headsets.rules
# Corsair VOID PRO Wireless
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="0a1a", TAG+="uaccess"

lsusb output for the Corsair VOID PRO Wireless on my system is:
Bus 005 Device 002: ID 1b1c:0a1a Corsair Corsair VOID PRO Wireless Gaming Headset

Corsair Void Wired Not supported

In your readme you said that my headset(Corsair Void Wired) was supported but when using your program I get "No supported headset found". Is there a fix for that error?

Notification daemon

Hi!

screenshot

Thank you very very much for this useful piece of software.
I wrote a small (and pretty ugly) daemon that will display notifications for the battery state of your devices:
https://github.com/Manawyrm/headsetcontrol-notificationd

Should we link to this repo in the README for HeadsetControl?
I'm probably not the only user that would like to have desktop notifications for battery status.

Thanks!

Arctis 7 battery incorrect

I have an Arctis 7 2019 edition

Bus 002 Device 006: ID 1038:12ad SteelSeries ApS

The battery is incorrect. After charging it all night the battery strength is reported as 64%. This is a pretty new headset so I doubt the battery has degraded that far yet.

$ ./headsetcontrol -b
Found SteelSeries Arctis (7/Pro)!

Battery: 64%

G633 side lights doesn't turn off

When trying to turn the lights off on my G633 headset, only the light strips on the back are turning off. The G logo is still enlightened.

G533 macOS High Sierra (10.13.4)

Thank you for this!! I've already asked the Logitech support a thousand times for OSX support for the Gaming-Headsets. Besides gaming on a Win10 machine I'm also using the headset unser OSX.

Now for the problem: I'm using a G533 and can't set the sidetone like it should be:

./HeadsetControl -s 128 disables sidetone completely, which is ok for me.
./HeadsetControl -s 127 and ./HeadsetControl -s 1 practicaly have the same loudness on sidetone (very loud), can't tell any difference.

I've cloned the current master and compiled it with make, cmake, etc. via brew.

The problem ist not, that I'm missing the sidetone but that I hear a loud swooshy noise (Rauschen) obviously coming from the sidetone if enabled. Under Windows I can get around this by setting the sidetone to ~50%.

So on OSX currently -s 128 is working for me without any sidetone at all.
Is this is a bug or did I understand something wrong?

Cheers and thank you,
Patrik

"no supported headset found"

Getting "no supported headset found" when trying to connect to my Corsair Void Pro wireless headset. Worked previously, but I've received a new USB controller from Corsair as part of warranty replacement. I've looked at the model number on old and new USB and they are the same.

I also checked the PCI address (?) in dmesg output and I believe it matches the one in the corsair_void_pro.c file.

Any help would be appreciated.

Please provide more machine-readable interface

For example instead of such output

➜ HeadsetControl -b                        
Found Logitech G933 Wireless!

Battery: 70%

more convenient will be separate this command

➜ HeadsetControl -b                        
70

model

➜ HeadsetControl -m                     
Logitech G933

status

➜ HeadsetControl -s            
connected

Corsair Void Pro Wireless (RGB) LED Off breaks mute button

All of the control options recognize and work fine on my Corsair Void Pro Wireless (RGB) headset. However, when I set the LEDs to off (headsetcontrol -l 0), the mute button on the side of the headset does not work.
When LEDs are on:

  • Mute button makes a beeping noise when pressed
  • When enabled, mic is muted and no sound is measured in various sound settings and measurements

When LEDs are off:

  • Mute button does not make a noise when pressed
  • Mute button has no effect on mic sensitivity or input

Sidetone Disables After Sound Sometimes (G430)

Hello,

I built HeadsetControl on MacOS for my g430s using build 41be993 and everything seems to work well besides one issue: The sidetone setting seems to reset; specifically after a new sound is made.

For instance, after setting "headsetcontrol -s 0" it will silence sidetone, but if I were to play a youtube video, it would reset. If I were to set "headsetcontrol -s 0" again, it would work for the remainder of the youtube video, then loading a new page, playing music, etc. will trigger it to reset again. I'm aware I can setup a loop like "while sleep 1; do HeadsetControl -s 0; done", but is there a more permanent solution available?

Any help would be much appreciated, Thank you for this build.

Corsaid Void Wired not working

I tried normal setup and I tried to follow the instructions from the other closed issue about this, but it didnt work with different errors.

Sometimes it says no supported headset found, one thing I tried found the headset but said broken pipe.

OS: Kubuntu 19.04

My lsusb output is:
Bus 003 Device 007: ID 1b1c:0a18 Corsair

What can I do to find the problem and make it work?

[Feature Request] Support for Plantronics DA45

Hi,

I am not sure, if it is really possible but, could you help me in doing the following:

  1. Find out, which data has to be sent via USB to set the sidetone of the DA45 (if it supports it at all).
  2. Extend your tool to also support the DA45.

I would be very happy about your support.

Thanks in advance.

Steelseries Artic 7 2019 not reconnized

Hi,
I've purchased for Christmas an Steelseries Headset Artic 7 version 2019 and it is not reconnized on Linux Manjaro with the last version of HeadsetControl.
[olivier@thorielle ~]$ HeadsetControl -h
Headsetcontrol written by Sapd (Denis Arnst)
https://github.com/Sapd

Parameters
-s level Sets sidetone, level must be between 0 and 128
-b Checks the battery level
-n soundid Makes the headset play a notifiation

[olivier@thorielle ~]$ HeadsetControl -b
Headsetcontrol written by Sapd (Denis Arnst)
https://github.com/Sapd

No supported headset found
[olivier@thorielle ~]$ HeadsetControl -n 0
Headsetcontrol written by Sapd (Denis Arnst)
https://github.com/Sapd

No supported headset found

Here more explanation about my system and usb:

[olivier@thorielle ~]$ lsusb
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 002: ID 046d:c517 Logitech, Inc. LX710 Cordless Desktop Laser
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 1b1c:1b51 Corsair
Bus 001 Device 003: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 002: ID 1038:12ad SteelSeries ApS
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

[olivier@thorielle ~]$ dmesg | grep usb [ 0.718696] usbcore: registered new interface driver usbfs [ 0.718696] usbcore: registered new interface driver hub [ 0.718700] usbcore: registered new device driver usb [ 0.869704] usbcore: registered new interface driver usbserial_generic [ 0.869708] usbserial: USB Serial support registered for generic [ 1.718711] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19 [ 1.718712] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 1.718713] usb usb1: Product: xHCI Host Controller [ 1.718714] usb usb1: Manufacturer: Linux 4.19.12-2-MANJARO xhci-hcd [ 1.718714] usb usb1: SerialNumber: 0000:02:00.0 [ 1.719509] usb usb2: We don't know the algorithms for LPM for this host, disabling LPM. [ 1.719522] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19 [ 1.719523] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 1.719524] usb usb2: Product: xHCI Host Controller [ 1.719524] usb usb2: Manufacturer: Linux 4.19.12-2-MANJARO xhci-hcd [ 1.719525] usb usb2: SerialNumber: 0000:02:00.0 [ 1.720267] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 4.19 [ 1.720268] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 1.720268] usb usb3: Product: xHCI Host Controller [ 1.720269] usb usb3: Manufacturer: Linux 4.19.12-2-MANJARO xhci-hcd [ 1.720270] usb usb3: SerialNumber: 0000:0a:00.3 [ 1.720467] usb usb4: We don't know the algorithms for LPM for this host, disabling LPM. [ 1.720480] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 4.19 [ 1.720481] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1 [ 1.720481] usb usb4: Product: xHCI Host Controller [ 1.720482] usb usb4: Manufacturer: Linux 4.19.12-2-MANJARO xhci-hcd [ 1.720483] usb usb4: SerialNumber: 0000:0a:00.3 [ 2.046734] usb 1-2: new full-speed USB device number 2 using xhci_hcd [ 2.050041] usb 3-2: new full-speed USB device number 2 using xhci_hcd [ 2.224527] usb 3-2: New USB device found, idVendor=046d, idProduct=0b02, bcdDevice=40.02 [ 2.224530] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [ 2.224531] usb 3-2: Product: Logitech BT Mini-Receiver [ 2.224532] usb 3-2: Manufacturer: Logitech [ 2.360881] usb 1-2: New USB device found, idVendor=1038, idProduct=12ad, bcdDevice= 1.19 [ 2.360884] usb 1-2: New USB device strings: Mfr=4, Product=5, SerialNumber=0 [ 2.360885] usb 1-2: Product: SteelSeries Arctis 7 [ 2.360886] usb 1-2: Manufacturer: SteelSeries [ 2.433491] usbcore: registered new interface driver usbhid [ 2.433493] usbhid: USB HID core driver [ 2.435318] input: SteelSeries SteelSeries Arctis 7 Consumer Control as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-2/1-2:1.5/0003:1038:12AD.0001/input/input2 [ 2.490070] input: SteelSeries SteelSeries Arctis 7 as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-2/1-2:1.5/0003:1038:12AD.0001/input/input4 [ 2.490454] hid-generic 0003:1038:12AD.0001: input,hiddev0,hidraw0: USB HID v1.11 Device [SteelSeries SteelSeries Arctis 7] on usb-0000:02:00.0-2/input5 [ 2.513369] usb 1-6: new full-speed USB device number 3 using xhci_hcd [ 2.670414] usb 3-2.2: new full-speed USB device number 3 using xhci_hcd [ 2.807549] usb 3-2.2: New USB device found, idVendor=046d, idProduct=c70e, bcdDevice=40.02 [ 2.807552] usb 3-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.807554] usb 3-2.2: Product: Logitech BT Mini-Receiver [ 2.807555] usb 3-2.2: Manufacturer: Logitech [ 2.807556] usb 3-2.2: SerialNumber: 000761A35EDF [ 2.843012] usb 1-6: New USB device found, idVendor=1b1c, idProduct=1b51, bcdDevice= 3.08 [ 2.843014] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2.843016] usb 1-6: Product: CORSAIR DARK CORE RGB SE Wireless USB Receiver [ 2.843017] usb 1-6: Manufacturer: Corsair [ 2.843018] usb 1-6: SerialNumber: 16007025AF099D2258CCD846F5001946 [ 2.872108] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver Mouse as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input5 [ 2.872142] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver Consumer Control as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input6 [ 2.926733] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input7 [ 2.926750] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input8 [ 2.926767] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input9 [ 2.926784] input: Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver Keyboard as /devices/pci0000:00/0000:00:01.3/0000:02:00.0/usb1/1-6/1-6:1.0/0003:1B1C:1B51.0002/input/input10 [ 2.926849] hid-generic 0003:1B1C:1B51.0002: input,hiddev1,hidraw1: USB HID v1.11 Mouse [Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver] on usb-0000:02:00.0-6/input0 [ 2.936066] hid-generic 0003:1B1C:1B51.0003: hiddev2,hidraw2: USB HID v1.11 Device [Corsair CORSAIR DARK CORE RGB SE Wireless USB Receiver] on usb-0000:02:00.0-6/input1 [ 3.026159] input: Logitech Logitech BT Mini-Receiver as /devices/pci0000:00/0000:00:07.1/0000:0a:00.3/usb3/3-2/3-2.2/3-2.2:1.0/0003:046D:C70E.0004/input/input11 [ 3.080513] hid-generic 0003:046D:C70E.0004: input,hidraw3: USB HID v1.11 Keyboard [Logitech Logitech BT Mini-Receiver] on usb-0000:0a:00.3-2.2/input0 [ 3.163373] usb 3-2.3: new full-speed USB device number 4 using xhci_hcd [ 3.297522] usb 3-2.3: New USB device found, idVendor=046d, idProduct=c70a, bcdDevice=40.02 [ 3.297524] usb 3-2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 3.297525] usb 3-2.3: Product: Logitech BT Mini-Receiver [ 3.297526] usb 3-2.3: Manufacturer: Logitech [ 3.297527] usb 3-2.3: SerialNumber: 000761A35EDF [ 3.558937] input: Logitech Logitech BT Mini-Receiver Mouse as /devices/pci0000:00/0000:00:07.1/0000:0a:00.3/usb3/3-2/3-2.3/3-2.3:1.0/0003:046D:C70A.0005/input/input22 [ 3.559046] input: Logitech Logitech BT Mini-Receiver Consumer Control as /devices/pci0000:00/0000:00:07.1/0000:0a:00.3/usb3/3-2/3-2.3/3-2.3:1.0/0003:046D:C70A.0005/input/input23 [ 3.613428] input: Logitech Logitech BT Mini-Receiver System Control as /devices/pci0000:00/0000:00:07.1/0000:0a:00.3/usb3/3-2/3-2.3/3-2.3:1.0/0003:046D:C70A.0005/input/input24 [ 3.613490] hid-generic 0003:046D:C70A.0005: input,hiddev3,hidraw4: USB HID v1.11 Mouse [Logitech Logitech BT Mini-Receiver] on usb-0000:0a:00.3-2.3/input0 [ 4.092988] usbcore: registered new interface driver snd-usb-audio ==================================================================================================================================== [olivier@thorielle ~]$ inxi -xxx --usb USB: Hub: 1-0:1 info: Full speed (or root) Hub ports: 10 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 Device-1: 1-2:2 info: SteelSeries ApS type: Audio,HID driver: hid-generic,snd-usb-audio,usbhid interfaces: 6 rev: 1.1 speed: 12 Mb/s chip ID: 1038:12ad Device-2: 1-6:3 info: Corsair type: Mouse,HID driver: hid-generic,usbhid interfaces: 2 rev: 2.0 speed: 12 Mb/s chip ID: 1b1c:1b51 serial: 16007025AF099D2258CCD846F5001946 Hub: 2-0:1 info: Full speed (or root) Hub ports: 4 rev: 3.1 speed: 10 Gb/s chip ID: 1d6b:0003 Hub: 3-0:1 info: Full speed (or root) Hub ports: 4 rev: 2.0 speed: 480 Mb/s chip ID: 1d6b:0002 Hub: 3-2:2 info: Logitech C-UV35 [Bluetooth Mini-Receiver] (HID proxy mode) ports: 3 rev: 2.0 speed: 12 Mb/s chip ID: 046d:0b02 Device-3: 3-2.2:3 info: Logitech MX1000 Bluetooth Laser Mouse type: Keyboard driver: hid-generic,usbhid interfaces: 1 rev: 2.0 speed: 12 Mb/s chip ID: 046d:c70e serial: 000761A35EDF Device-4: 3-2.3:4 info: Logitech MX5000 Cordless Desktop type: Mouse driver: hid-generic,usbhid interfaces: 1 rev: 2.0 speed: 12 Mb/s chip ID: 046d:c70a serial: 000761A35EDF Hub: 4-0:1 info: Full speed (or root) Hub ports: 4 rev: 3.0 speed: 5 Gb/s chip ID: 1d6b:0003 [olivier@thorielle ~]$

Hope that can help you.

Couldn't open device.

~/HeadsetControl/build$ ./headsetcontrol -s 16
Found Logitech G633/G933/G935!

Couldn't open device.

Any solutions?

Logitech G930 on MacOS

After installing libusb (btw: now it has version 1.0.21) and cloning repo I typed:
gcc main.c -L"/usr/local/Cellar/libusb/1.0.21/lib" -lusb-1.0 -I"/usr/local/Cellar/libusb/1.0.21/include" -std=gnu99 -o headsetcontrol and had no errors, than I tried to use and had: HeadsetControl: command not found

Sidetone stops working after muting mic from headset itself.

Hi, thanks for bringing this awesome tool. Gaming with friends without sidetone makes me speak too loud, lol.

I have a G533 and HeadsetControl simply stops working after I lift up the mic (this automatically mutes it) when I put back the mic in its position.

Corsair Void Pro USB Can't set sidetone

Hello, after compiling the program as explained in the readme i get the following error when i try to set sidetone. Is this a known issue? I was unable to find anything similar.

Setting lights on and off on the headset however does work

The output

sudo ./headsetcontrol -s 120
Found Corsair Void (Pro)!

ioctl (SFEATURE): Broken pipe
Failed to set sidetone. Error: -1: (null)

Computer Specifications:

- ubuntu 19.10 eoan 
- Corsair VOID PRO Gaming Headset

LsUsb:
Bus 001 Device 009: ID 1b1c:1b5e Corsair Corsair VOID PRO USB Gaming Headset

end part of strace ran on the same command as above:

access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/hidraw/hidraw6/uevent", F_OK) = 0
openat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/hidraw/hidraw6/uevent", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
read(3, "MAJOR=239\nMINOR=6\nDEVNAME=hidraw"..., 4096) = 34
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
openat(3, "sys", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "devices", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "pci0000:00", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0000:00:14.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "usb1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-6", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "1-6.5", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-6.5:1.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "0003:0424:274C.000C", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "hidraw", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
close(3)                                = 0
access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/hidraw/uevent", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
openat(3, "sys", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "devices", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "pci0000:00", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0000:00:14.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "usb1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-6", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "1-6.5", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-6.5:1.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "0003:0424:274C.000C", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
close(4)                                = 0
access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/uevent", F_OK) = 0
readlinkat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/subsystem", "../../../../../../../../bus/hid", 4096) = 31
lstat("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/uevent", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-6/1-6.5/1-6.5:1.0/0003:0424:274C.000C/uevent", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
read(3, "DRIVER=hid-generic\nHID_ID=0003:0"..., 4096) = 177
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
openat(3, "sys", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "devices", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "pci0000:00", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0000:00:14.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "usb1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-8", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "1-8:1.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0003:0B05:1872.0003", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "hidraw", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "hidraw1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
close(3)                                = 0
access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/hidraw/hidraw1/uevent", F_OK) = 0
openat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/hidraw/hidraw1/uevent", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
read(3, "MAJOR=239\nMINOR=1\nDEVNAME=hidraw"..., 4096) = 34
read(3, "", 4096)                       = 0
close(3)                                = 0
openat(AT_FDCWD, "/", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
openat(3, "sys", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "devices", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "pci0000:00", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0000:00:14.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "usb1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-8", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "1-8:1.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0003:0B05:1872.0003", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "hidraw", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
close(4)                                = 0
access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/hidraw/uevent", F_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
openat(3, "sys", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "devices", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "pci0000:00", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0000:00:14.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "usb1", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "1-8", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
openat(3, "1-8:1.0", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 4
fstat(4, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(3)                                = 0
openat(4, "0003:0B05:1872.0003", O_RDONLY|O_NOFOLLOW|O_CLOEXEC|O_PATH) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=0, ...}) = 0
close(4)                                = 0
close(3)                                = 0
access("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/uevent", F_OK) = 0
readlinkat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/subsystem", "../../../../../../../bus/hid", 4096) = 28
lstat("/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/uevent", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
openat(AT_FDCWD, "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-8/1-8:1.0/0003:0B05:1872.0003/uevent", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0
read(3, "DRIVER=hid-generic\nHID_ID=0003:0"..., 4096) = 199
read(3, "", 4096)                       = 0
close(3)                                = 0
uname({sysname="Linux", nodename="-----------", ...}) = 0
openat(AT_FDCWD, "/dev/hidraw0", O_RDWR) = 3
ioctl(3, HIDIOCGRDESCSIZE or HIDIOCGVERSION, 0x7ffe515ab63c) = 0
ioctl(3, HIDIOCGRDESC, 0x7ffe515ab640)  = 0
ioctl(3, HIDIOCSFEATURE(64), 0x7ffe515ac610) = -1 EPIPE (Broken pipe)
dup(2)                                  = 4
fcntl(4, F_GETFL)                       = 0x2 (flags O_RDWR)
fstat(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
write(4, "ioctl (SFEATURE): Broken pipe\n", 30ioctl (SFEATURE): Broken pipe
) = 30
close(4)                                = 0
write(2, "Failed to set sidetone. Error: -"..., 42Failed to set sidetone. Error: -1: (null)
) = 42
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

Wrong idProduct for Corsair Void Pro Wireless (RGB)

Couldn't get HeadsetControl to work as a non-privileged user. Turns out my headset has a different idProduct that the included udev rule in 50-corsair-void-pro.rules:

ID_VENDOR=Corsair
ID_VENDOR_ENC=Corsair
ID_VENDOR_ID=1b1c
ID_MODEL=Corsair_VOID_PRO_Wireless_Gaming_Headset
ID_MODEL_ENC=Corsair\x20VOID\x20PRO\x20Wireless\x20Gaming\x20Headset
ID_MODEL_ID=0a1a
ID_REVISION=0000
ID_SERIAL=Corsair_Corsair_VOID_PRO_Wireless_Gaming_Headset
ID_BUS=usb

Changing
SUBSYSTEM=="hidraw", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="0a14", MODE="0666"

To
SUBSYSTEM=="hidraw", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b1c", ATTRS{idProduct}=="0a1a", MODE="0666"

Makes it work as a normal user:

$ HeadsetControl -b
Found Corsair Void (Pro)!

Battery: 61%
$

Corsair Void Pro Couldn't open device

My system is running Linux Mint 18.3.

When trying to get or set any of the functions I get this :

`Headsetcontrol written by Sapd (Denis Arnst)
https://github.com/Sapd

Found Corsair Void Pro!

Couldn't open device.`

confirmed the udev rules are in place and I'm getting the same message with sudo

Rename executable to headsetcontrol

I think the executable should be in all lowercase, almost all binaries in *nix systems are lowercase..

I would make it a lot easier to call in Linux since the file systems are mostly case sensitive.

Gentoo ebuild

I wrote a Gentoo ebuild for headsetcontrol. Since there is no installation section in the repo - should I add it as a wiki page?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.