Commit Graph
9 Commits
Author SHA1 Message Date
Alexander Ponyatykh 0408478701 Rewrite of initialization and deinitialization functions
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.
2019-11-18 02:50:24 +03:00
Alexander Ponyatykh bd4495ec01 Fix transfer error handling 2019-11-18 02:50:24 +03:00
Alexander Ponyatykh 80dac3d2d6 Use explict libusb_context 2019-11-18 02:50:24 +03:00
Alexander Ponyatykh aa2cf02029 Change log level for some error messages
Contrary to expectations, G15_LOG_WARN is more verbose level than
G15_LOG_INFO.
2019-11-18 02:50:24 +03:00
Alexander Ponyatykh 98449afc5d Delay calling libusb_set_option() until libusb is initialized
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.
2019-11-18 02:50:13 +03:00
Alexander Ponyatykh 92e60dd1a4 Migrate from legacy libusb-0.1 to libusb-1.0 2019-11-17 00:21:34 +03:00
Alexander Ponyatykh 9c78d63e0c Fix spelling error in log message 2019-11-14 00:57:22 +03:00
Alexander Ponyatykh 854430b9b8 Update packaging:
* Remove watch file.
 * Сonformant to policy 4.4.1.1.
 * Remove obsolete variable from debian/rules.
 * Add Vcs fileds to debian/control
2019-11-14 00:29:44 +03:00
Alexander Ponyatykh dfaff3b01b Add a patch to fix re_initLibG15() to properly reset the internal state
This allows g15daemon to continue working after keyboard was
replugged and after suspend or hibernate.

LP: #1357556
2019-05-10 11:34:58 +02:00