0408478701915ed19b4925bde6df9a8e4ffc240c
Original code iterates through every possible descriptor in nested loops and tries to do initialization every iteration without considered what are those descriptors for nor stopping when interface is finally claimed. It has following problems: 1. It iterates through all configurations, but explicitly resets a device configuration to 1 every iteration. 2. It never configures a possibly shared device even it is currently unconfigured. 3. It treats alternative settings as independent interfaces and iterates through them while implicitly setting alternative setting to 0. 4. It can claim several interfaces but uses only the last one. 5. It doesn't track claimed interfaces' number and always deinitializes interface 0. This in fact works for a device with single configuration, single interface and no alternative settings, like most of the supported devices (except G510), but it is fundamentally incorrect. Therefore as part of migration to libusb 1.0 I've rewritten the initialization procedure in a more linear way. First it selects a configuration, which is 1 in most cases. Next it iterates through descriptors in this configuration to find a single compatible interface. Only after that it resets the device and claims the interface.
This is a library to handle the LCD and extra keys on the Logitech G15 Gaming Keyboard and similar devices. This library requires libusb. LibG15 currently supports LCD & keys on the following devices: - Original G15 keyboard - G11 keyboard - Z10 speakers - 2nd revision of the G15 (amber backlight, 6 'G' keys, LCD) - Gamepanel available on some laptops - G13 game device
Languages
C
95.1%
M4
3.6%
Makefile
1%
Shell
0.3%