1
0
forked from drath/libratbag
Commit Graph

1318 Commits

Author SHA1 Message Date
Benjamin Tissoires
975c91ae54 hidraw: allow opening of sibling devices
Some mice have a separate hid interface for configuring the advanced
features. It occurs that this is a common enough use case to be handled
directly by libratbag-hidraw instead of having a per-device quirk.

The idea is to allow opening the sibling hidraw devices during .probe()
and to give a matching callback. If the callback succeeds, then the
hidraw node will be used.
With this, one device might be opened several times, this has to be fixed
in a separate commit.

Fixes issue #19

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
ce37417525 hidraw: break ratbag_open_hidraw in two
We want to be able to find sibling hidraw nodes. For that, we need to
open and test several different hidraw nodes. Makes the opening of a
specific hidraw node in its own function.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
abde78e6c4 hidraw: check if the hidraw node corresponds to the ratbag device
We were retrieving the hidraw information but did not use them.
Now the debug output "foo is device 'bar'" is only shown when there is
a match.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
4538d03b36 hidraw: remove now useless storage of the udev hidraw node
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
00f8f90288 hidraw: make ratbag-hidraw responsible for all hidraw related operations
libratbag.c does not need to initialize anything hidraw related, so
move out everything to libratbag-hidraw.c.
That means that calling ratbag_close_hidraw() is not a requirement
whithin the drivers to exit properly.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
7dfa8cb75e hidraw: move ratbag_device_init_hidraw() in libratbag-hidraw
We are touching hidraw internals here, better having the function in
libratbag-hidraw.c.

No functional changes.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
936ad60da4 remove unused parameter in ratbag_device_init_hidraw()
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-07 18:30:21 -04:00
Benjamin Tissoires
0ece3c1a9e hidpp10: fix comment
Looks like the page 1 is not a RAM page but a directory, and is in the
flash too.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-24 14:13:39 -04:00
Benjamin Tissoires
c26ce20c5c hidpp10: fix reading memory
Command 0xA2 (Read Sector) takes only a one byte argument for the offset
(entry in the documentation).

Clean up the code and return an error if the page (sector in the doc)
is invalid (to avoid querying the device which would output an
ERR_INVALID_VALUE).

Fixes #15

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-24 13:35:04 -04:00
Benjamin Tissoires
bb4b8d729b roccat-drv: fix macro parsing
If the time is not given in the macro, the device still accepts it and
works properly by setting 10 ms of delay after a key press and 50 ms
between the keys.

Problem is: without this, the RATBAG_MACRO_EVENT_WAIT is not set during
parsing, so we end up having a RATBAG_MACRO_EVENT_NONE between 2 key
events, and the library ends up truncating the macro after the first
RATBAG_MACRO_EVENT_NONE.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-18 11:08:37 -04:00
Benjamin Tissoires
0f1b11a874 debug: put the raw debug logs in hidraw, not in per-driver handlers
Might not be the best solution for hidpp10, because it just removes the
duplicates, but this way all of the other drivers can benefit from the
raw debug parameter.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-18 10:56:58 -04:00
Thomas Hindoe Paaboel Andersen
5ee30e5a65 hidpp10: don't skip the first profile
Only skip the first two profiles that seem like garbage.
2015-09-17 17:07:47 +02:00
Thomas Hindoe Paaboel Andersen
cbc0f0c4c7 hidpp10: Read colors in profiles 2015-09-17 17:07:47 +02:00
Peter Hutterer
5d992faf1f Merge pull request #20 from cvuchener/small_fixes
hidpp10: add G5 2007
2015-09-18 00:19:13 +10:00
Clément Vuchener
249ad1e639 hidpp10: add G5 2007 2015-09-17 16:11:07 +02:00
NoXPhasma
c5ad1a0e42 hidpp10: add G9x 2015-09-17 03:48:18 +02:00
Clément Vuchener
bfd9c62963 Abort when the report id is invalid 2015-09-16 21:14:04 +02:00
Clément Vuchener
863b26eee2 Use defines instead of values for button types 2015-09-16 19:13:15 +02:00
Clément Vuchener
16c83975af Added set current resolution function for G500s 2015-09-16 19:10:34 +02:00
Clément Vuchener
91dd957618 Added long command in hidpp_request_command 2015-09-16 19:08:56 +02:00
Clément Vuchener
cedab5cacc Added G500 id 2015-09-16 18:42:59 +02:00
Peter Hutterer
298205f02e Merge pull request #11 from phomes/led-colors
hidpp10: Add support for get/set of led color
2015-09-17 00:03:04 +10:00
Thomas Hindoe Paaboel Andersen
81dfec8f79 hidpp10: Add support for get/set of led color
For supported devices this can get and set the led colors in RGB.

This patch just adds the support in the lib. Later patches will
add it to the driver and expose it in libratbag.
2015-09-15 23:46:11 +02:00
Thomas Hindoe Paaboel Andersen
ab7b620dd4 hidpp10/20: fix a buffer overflow
We pass a negative length into log_buffer which expects a size_t.
This causes it to write past the allocated output_buf.
2015-09-15 20:24:56 +02:00
Thomas Hindoe Paaboel Andersen
a85a40b713 hidpp10: add G9 2015-09-15 20:24:56 +02:00
Thomas Hindoe Paaboel Andersen
6155d86923 hidpp10/20: retry on usb timeout
On the M705 I frequently get usb timeouts here if the device has
not been active for a while. Retrying after 10 ms seems to reliably
fix the timeout problem.

We could have just added the 10 ms sleep directly but it does not
seem to be neccesary on wired devices so I chose not to. Setting the
ret value to a face positive number and looping would also work but
we risk an endless loop. In the end I just went for a single retry
as that fixed the problem for me.
2015-09-15 20:24:56 +02:00
Benjamin Tissoires
e514da8218 drv interface: make the commit to the device mandatory
When writing a button, the given button should also be stored in the
memory of the device.
Amend the documentation

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 11:06:30 -04:00
Benjamin Tissoires
c7f8e851c1 etekcity: write the profile to commit the button asap
we should not require to actually write the profile to actually write the
button in the memory of the device.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 11:06:30 -04:00
Peter Hutterer
a3aacd3a99 Drop the _by_index suffix
This is the default, if we need a _by_name or so later we can add it.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-09-16 00:55:12 +10:00
Benjamin Tissoires
41cf0176f0 roccat: remove spurious errors when waiting for the device to be ready
Not perfect but we need to figure out what 0x02 means eventually.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 10:46:26 -04:00
Benjamin Tissoires
3dc8f466ec roccat: abort if the macro does not match
If there is any problem while retrieving a macro, the first element in
the report might not match. In such cases, abort.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 10:38:12 -04:00
Benjamin Tissoires
892497ca60 roccat: retrieve the macro if we are not in the default profile
When the macro is not on profile 0, we need to set the mouse in the
correct mode first.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 10:37:17 -04:00
Benjamin Tissoires
ee0c58ca35 roccat: break infinite loops
When waiting for a status, the mouse sometimes answers 0x02, which seems
to be EINVAL (though it can be an ACK too). Treat this answer so we do
not end up in some infinite loops.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 10:36:10 -04:00
Benjamin Tissoires
8a99ed6436 roccat: write the profile to commit the button asap
we should not require to actually write the profile to actually write the
button in the memory of the device.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-15 10:34:42 -04:00
Benjamin Tissoires
8e1d750ba1 roccat: add SVG for the Kone XTD
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-13 18:40:40 -04:00
Benjamin Tissoires
e73e1e2ab1 roccat: replace various msleep with actual device wait for readiness
The device can tell whether it is ready or not, so better poll for it
instead of waiting 100ms and hoping for the best.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-13 18:40:40 -04:00
Benjamin Tissoires
84edfc23fc roccat: add support for changing the DPI
Again, this differs from the etekcity by not having to set the config
report first.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-13 18:40:40 -04:00
Benjamin Tissoires
86a40ba519 roccat: add support to write profile and macros
There is a slight difference with etekcity:
- there is no need to first set the config macro element we are about to
  send (the information are already in the macro report)
- we need to be sure the mouse processed the macro and is ready to handle
  a new command. Thus the introduction of roccat_is_ready()

We should see if the etekcity does not require such check too (IIRC it did,
but the timeout were sufficient).

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-13 18:40:40 -04:00
Peter Hutterer
585a59796b Merge pull request #9 from phomes/no-refcount
hidpp10: drop internal ref counts
2015-09-14 08:33:53 +10:00
Thomas Hindoe Paaboel Andersen
bb5a7cbd1f hidpp10: drop internal ref counts
This caused a problem since the hidpp10_device would keep a ref to
the ratbag_device - and the hidpp10_device would only get destroyed
when the ratbag_device got a ref count 0.
2015-09-13 23:14:29 +02:00
Thomas Hindoe Paaboel Andersen
0a8642a6b0 hidpp10: make the fallback profile active and default 2015-09-13 23:01:26 +02:00
Thomas Hindoe Paaboel Andersen
fc13c15fe2 hidraw: only show the report IDs once 2015-09-13 18:18:16 +02:00
Benjamin Tissoires
55fc8dc721 roccat/etekcity: check for the presence of the key mapping report ID
Removes the duplicate nodes found by the drivers.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-12 23:31:45 -04:00
Benjamin Tissoires
90fa2251fa drv-hidpp**: check if the device accepts the HID++ reports
Removes the broken pipe on invalid nodes

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-12 10:17:34 -04:00
Benjamin Tissoires
84cfedbf5f hidraw: actually store the list of available report IDs
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-12 10:16:47 -04:00
Benjamin Tissoires
d065bda3a6 hidraw: implement a first dummy parsing of the report descriptor
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-09-12 09:48:01 -04:00
Benjamin Tissoires
24cb59af2f roccat: remove unused variable
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-12 09:46:54 -04:00
Benjamin Tissoires
b0e5508da9 Embbed the hidraw private elements in its own struct
mechanical patch

the hidraw_fd should only be used in libratbag_hidraw, so better having
it in its own struct so we can extend the hidraw elements without touching
ratbag_device.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

# Conflicts:
#	src/libratbag-hidraw.c
2015-09-12 09:46:08 -04:00
Benjamin Tissoires
1ca65ce7cb libratbag.c should not close directly the hidraw node
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-09-12 09:41:44 -04:00
Thomas Hindoe Paaboel Andersen
7fbadce2fe remove unused function 2015-09-12 08:48:25 +02:00