Initialization and deinitialization functions were rewritten as part of
switch to libusb 1.0 path. There is no point in keeping a separate patch
that changes them slightly.
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.
G15daemon calls libg15Debug() before initLibG15(). This works well with
the legacy library, but the new one requres a context to be initialized
before calling any functions. This patch adds tracking of libusb
initialization status and never calls libusb_set_option() when library
is not initialized.
libg15 (1.2.7-2) unstable; urgency=low
* add list-missing to debian/rules
* Don't export the .la file (see debian-devel@l.d.o)
* We are conformant to policy 2.8.3