1
0
forked from drath/libratbag
Commit Graph

791 Commits

Author SHA1 Message Date
Thomas Hindoe Paaboel Andersen
3af0544421 hidpp10: fix last entry in dpi_list_from_range 2017-10-18 08:12:27 +10:00
Peter Hutterer
f69b4d53f6 hidpp20: implement 8060 adjustable report rate
The bitmask in the 8060 report is for ms between reports. We could do all, but
really we only care about a few resolutions, anything else is too niche to
bother with.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
cb4be02a56 tools: add 'rate get-all' to the resolutions
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
bacdab2596 Sanity-check the list of dpi values and report rates
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
ec7bb2f63a Add list of report rates to the resolutions
Same blueprint as the list of DPI values

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
74a5551a8d Allow for zero number of dpi values to be set
At least in the DBus API we can't just say "doesn't exist", so let's allow for
a zero-sized list.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
3e0c803a37 driver-hidpp20: fix some indentation
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
ae9e287b8d Fix a comment referring to a function name in the typemap
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
410e01de61 gskill: add a missing empty line
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
d167dfd83b gskill: init the DPI list correctly
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Peter Hutterer
9b7d8f5f24 Fix missing nres assignments
For directly set resolution lists, nres remained at 0

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-17 10:55:14 +02:00
Benjamin Tissoires
f1d20f1f35 tools: ratbag-command.py: fix new resolutions list
This one gets a little bit meesy given that the libratbag expects a
C array. Provide some wrapping aound it and hope we won't have to
do it again and again.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2017-10-16 19:06:57 +02:00
Benjamin Tissoires
1148d172b5 Generate a direct python wrapper around libratbag with swig
And use it to create ratabg-command.py

Benefits are that we bypass ratbagd, meaning we can attach gdb or run
valgrind on the tools themselves.

Problem is the python wrapper doesn't clean up after itself, and so
running valgrind is moot

Fixes #274

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2017-10-16 19:06:57 +02:00
Peter Hutterer
b951d83a64 Add ratbagd_led_has_mode() and the required dbus additions
To be able to query which modes are available.

Exposed via ratbagctl as
./build/ratbagctl.devel led 0 capabilities event4

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-16 08:47:32 +10:00
Benjamin Tissoires
f56df6b1d0 enums.h: few doc fixups
Replacing the doctext where they should be in enum ratbag_led_mode.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2017-10-16 07:09:26 +10:00
Peter Hutterer
40658c6d0e hidpp10: pass the dpi list to libratbag as-is
If our device only has a discrete number of DPIs, pass it on as-is to
libratbag rather than pretending it's a range and then failing to set the
DPIs.

For the actual ranged devices we use libratbag's now-exponential range
mapping rather than passing all possible ones on. This relies on us having the
same steps that libratbag uses, should be safe enough.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 17:46:05 +02:00
Peter Hutterer
94320099b0 Convert the resolution range into something resembling an exponential one
Because 8000 vs 8050 dpi shouldn't matter...

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 17:46:05 +02:00
Peter Hutterer
f592cabcd7 Replace the resolutions min/max with an explicit list of dpi values
Previously, we could get a min/max value but there was no guarantee that it
any value in between would actually work on the device. Some devices have a
discrete number of resolutions (e.g. 500, 1000, 2000, 2500), most others have
at least a minimum step size (so 1234 isn't a valid dpi value).

Change the min/max to a discrete list of which resolutions are supported. This
allows a UI to adjust its interface dynamically - e.g. a combobox if there are
only 3 resolutions or a slider if there are a million of them.

This is a DBus API break

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 17:46:05 +02:00
Peter Hutterer
b140bc2827 test: add dpi min/max tests
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 17:46:05 +02:00
Peter Hutterer
aeaa69b9e1 Move the log defines higher so we can use them anywhere
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 17:46:05 +02:00
Peter Hutterer
51c1be3806 Move the enums into their separate header file
libratbag is not a library anymore. Move all the stuff that we need for the
DBus interface (i.e. the enum values) into its own header file so they're
all in one place and we don't have to worry about it anymore.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 08:59:33 +02:00
Peter Hutterer
b9e647ccb8 Remove c++ guard
libratbag is not a public header, so we don't have to worry about C++ anymore.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-13 08:59:33 +02:00
Thomas Hindoe Paaboel Andersen
e063aa3d2a hidpp10: Fix LED read/write
With this the LEDs can be read and written on the G9.

The G9 is as far as I know the only hid++1.0 mouse with RGB LED. The
other mice are monochrome.
2017-10-12 08:07:59 +10:00
Peter Hutterer
9a74e30c64 Use foreach loops to iterate though the profiles
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-11 09:14:56 +02:00
Peter Hutterer
f26de4bb29 Change driver probe() as a flat function
Previously, probe() would call ratbag_init_profiles() which in turn would call
the various function pointers in the driver to fill in profiles, buttons and
leds (the latter while filling in profiles). This made the probe() function
harder to understand than necessary and unreliable because it wasn't always
clear which bits were already set up while some driver function was called and
which ones weren't yet.

This patch switches to a flat probe(). The driver still needs to call
ratbag_init_profiles(), libratbag sets up everything (to default values). Then
the driver can fill in the rest as it wants.

This patch still makes use of the current infrastructure, the drivers
just call the read_profile and read_button functions manually now.

Fixes #370

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-11 09:14:56 +02:00
Peter Hutterer
e9008eeaba Align resolution creation with the button/profile/led creation bits
Resolutions were still stored in an array over a linked list like the
buttons/leds/profiles and initializing them from a driver was different than
buttons or leds. This brings the resolutions in line with the buttons and
leds.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-11 09:14:56 +02:00
Peter Hutterer
1c85d77d56 data: add LedTypes keyword argument to the device files
At least on HID++ 2.0, the LED types appear to be random and don't match the
protocol specs. Other protocols don't even have those bits, so let's make this
a generic entry.

This is pre-filled for all LEDs but drivers can override it where required.

Fixes #377

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-10 09:30:50 +10:00
Peter Hutterer
e58e79cb8d Fix a comment
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-10 08:41:55 +10:00
Peter Hutterer
186d626c40 Remove RATBAG_LED_TYPE_UNKNOWN from the enum list
A driver is supposed to know what type an LED is, unknown doesn't help anyone
here. So replace this with a private #define and abort when a driver doesn't
set the type. This also adds a requirement that any driver initializing a LED
must have the read_led() function, otherwise we can't fill it in correctly.

And bump the enum up by one, the first valid value should start at 1 (or some
other non-boolean value).

Related #365
Fixes #364

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 19:12:17 +02:00
Peter Hutterer
ab2dae47af hidpp20: require HIDPP_PAGE_COLOR_LED_EFFECTS for LEDs to work
If HIDPP_PAGE_COLOR_LED_EFFECTS fails but the profile returns a nonzero LED
count we crash later in hidpp20drv_read_led() because all the led info is
null.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 19:12:17 +02:00
Peter Hutterer
ec442b960d hidpp20: don't set the device's num_leds, it's overwritten later
This should all be handled by libratbag, not the driver.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 19:12:17 +02:00
Benjamin Tissoires
670720b40f hidpp20: fix .type parsing for sw_leds
struct hidpp20_led_sw_ctrl_led_info holds a u8 for the .type field.
Attempting to convert a value which is already a u8 ends up setting
0 and thus discarding the type information.

Fix by removing the extra step.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2017-10-09 19:12:00 +02:00
Peter Hutterer
9f4df9582c test: move an not-null assert to above where we deference it
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Peter Hutterer
d282590746 test: set all leds to logo
Because that's exactly what we rely on right now - zalloc sets it to 0 which
is type logo.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Peter Hutterer
9e5047976b hidpp10: rename a variable from 'profile' to 'typestr'
To avoid confusion

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Peter Hutterer
d69a2ec5ba hidpp10: use _cleanup_ for a profile
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Peter Hutterer
4bfd5d9a13 Add helper functions to loop through profiles, buttons and leds
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Peter Hutterer
091e651831 Fix a comment, the deprecated functions *should* be removed
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-09 12:01:56 +10:00
Thomas Hindoe Paaboel Andersen
d52c2c0320 hidpp10: remove empty callback
write_profile is deprecated and none of the other drivers have an empty
implementation like this.
2017-10-07 09:39:22 +10:00
Thomas Hindoe Paaboel Andersen
cd71ce67b1 hidpp10: only update current resolution once per commit
With the swtich to the commit style the function
hidpp10drv_write_resolution_dpi is doing too much work.

Before commit style the function would:
* get the profile
* get the current resolution
* write the profile (resets it to default dpi)
* set the current (updated) resolution

With the commit style we call the function for every resolution
in every dirty profile we now:
* get the current resolution
* set the current (updated) resolution
Then later:
* write the profile (resets to default dpi)

This patch changes this to only doing one set of the current resolution
when the active profile has been written. This reduces the traffic to the
device and sets the current resolution after the profile write.
2017-10-05 17:20:49 +02:00
Thomas Hindoe Paaboel Andersen
43f501907e hidpp10: fix setting resolution on G9
The G9 sends a short report and does not
have separate DPIs for x and y.
2017-10-05 17:20:49 +02:00
Thomas Hindoe Paaboel Andersen
a19a79d33a hidpp10: add Leds entry to .device file
For the device I have I do not see a way to get
this information by querying the device.

If the value is set in the .device file it will
override anything that the hidpp10 driver itself
would have found.
2017-10-03 23:06:01 +02:00
Ogier Bouvier
835a694c4b driver-hidpp20: add feature discovery for 0x1300
fix #325

Signed-off-by: Ogier Bouvier <obouvier@logitech.com>
2017-10-03 19:48:32 +10:00
Ogier Bouvier
a47492e62c hidpp20: add support for non-RGB LEDs, feature 0x1300
Signed-off-by: Ogier Bouvier <obouvier@logitech.com>
2017-10-03 19:48:32 +10:00
Peter Hutterer
186a1deda8 led: change RGB to RGB888 and add 1-bit RGB
1-bit RGB is needed for the Logitech G300, let's rename the main RGB to
indicate how many bits we actually have.

See #335

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-10-03 08:58:34 +02:00
Thomas Hindoe Paaboel Andersen
f3208b499b G300: set the color depth 2017-09-29 00:18:22 +02:00
Thomas Hindoe Paaboel Andersen
94e0842a06 G300: add support LEDs 2017-09-29 00:18:22 +02:00
Thomas Hindoe Paaboel Andersen
e0de98ba01 set CAP_LED for mice with only 1 LED
Even if there is only 1 LED we should set
the cap to let Piper change it in the GUI
2017-09-28 09:06:28 +10:00
Thomas Hindoe Paaboel Andersen
1adb147f6d expand documentation of probe call
Add a comment that drivers are expected to initialize and
read all profiles in the probe callback.

Fixes #333
2017-09-28 09:05:59 +10:00
Peter Hutterer
b1c4bba3b2 led: add support for color depth
The initial value of 400 in the enum is chosen so it looks weird when someone
tries to interpret the value as integer. Values of 1, 2, 4, etc. could be
confused with something realistic.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2017-09-22 09:18:28 +02:00