Commit Graph

93 Commits

Author SHA1 Message Date
Ilya Guterman
45129b2bc8 hidpp20: define internal LED structure 2016-12-05 14:09:22 +10:00
bentiss
f75152f074 Merge pull request #95 from cvuchener/g502rgb
Added G502 support and small fix
2016-08-31 11:37:08 +02:00
Clément Vuchener
f72c96914b hidpp20: fix reading has_dpi_shift
The comparison was always false because of missing bit shift.

Signed-off-by: Clément Vuchener <clement.vuchener@gmail.com>
2016-08-30 16:50:18 +02:00
Benjamin Tissoires
9aa2120c7d hidpp20: prevent segfault if hidpp20_adjustable_dpi_get_dpi() fails
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-14 09:43:35 +02:00
Benjamin Tissoires
21d0219809 hidpp20: add new special action in G900
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-11 14:01:15 +02:00
Benjamin Tissoires
c1bf3be48e hidpp20: read/write the whole dictionary, not just the first 16 bytes
The G900 advertises 5 profiles, which do not fit in only 16 bytes.
We need to read at least 32 bytes, so be it.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-10 11:13:34 +02:00
Benjamin Tissoires
27293a22df hidpp20: enable G900 profile type
The profile is retro-compatible with the rest, so we can access it
in the same way.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-09 20:09:24 +02:00
Benjamin Tissoires
fc07672983 hidpp20: prevent invalid ROM access
The device can report how much rom it has through profile_count_oob.
Make sure we have something in ROM before accessing it.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-09 20:08:18 +02:00
Benjamin Tissoires
64037febdc hidpp20: fix return path for hidpp20_onboard_profiles_read
A negative error means a communication error, while a positive one means
a HID++ one. Make sure we abort early enough.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-05-09 19:51:46 +02:00
Peter Hutterer
0785bf138d hidpp20: fail for hidpp10 devices
hidpp10 devices have their own driver, let's not initialize them here and just
fail. If a hidpp10 device is assigned the hidpp20 driver this is a bug.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-04-29 09:50:20 +10:00
Benjamin Tissoires
85acab4642 hidpp20: fix correct number of resolutions in the profile
There are only 5 resolutions per profile.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-02 10:54:13 +01:00
Benjamin Tissoires
0b5ccfeaed hidpp20: re-enable G303
The G303 shares the same profile than the G402/G502. The only difference
is an extension at the end of the profile, but they are compatible.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-02 10:50:19 +01:00
Benjamin Tissoires
f108ffa9ff hidpp20: remove internal project name
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-02 10:49:07 +01:00
Benjamin Tissoires
9aa8938eb8 hidpp20: profiles: make sure the mouse is in the profiles mode, not HID
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-01 15:05:50 +01:00
Benjamin Tissoires
25094daaed hidpp20: profiles: make sure device is compatible with our implementation
Get_Profile_Info gives valuable information to know if we are compatible
with a given device. Use it and bail out if we are not able to support
the device.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-01 14:57:19 +01:00
Benjamin Tissoires
6cba2abd8e hidpp20: reorder profile initialization
Spec says the profile count is stored in byte 3 of
CMD_ONBOARD_PROFILES_GET_PROFILES_DESCR, so use this to allocate the proper
number of profiles.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-03-01 14:15:15 +01:00
Benjamin Tissoires
54fa8b6fa4 drv-hidpp20: implement set_current_profile()
Only enabled for PROFILES_8100.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-02-09 14:42:45 +01:00
Benjamin Tissoires
f3679bc8e7 hidpp20: fix return value of hidpp20_onboard_profiles_write()
data is a uint8_t*, so its size could never be 256, the size of the
profile.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2016-02-09 14:42:40 +01:00
Benjamin Tissoires
8ed646fd7f hidpp20: do not overwrite macros when writing a profile
Same commit for hidpp20:
Previously, we would put a random address in the macro value, meaning we
lose the content of the macros.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-12-18 13:27:15 +01:00
Benjamin Tissoires
a9a8e23d37 hidpp20: parse macros
I am pretty sure we could do a better job, but heh.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-12-17 11:39:34 +01:00
Benjamin Tissoires
94062a0881 hidpp20: implement hidpp20_onboard_profiles_destroy to free memory
Macros will be dynamically allocated, so we need a way to free them
reliably.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-12-16 14:17:30 +01:00
Benjamin Tissoires
dd7de2225c hidpp20: clean the button mapping code
The button mapping of the hid++ 2.0 devices is close to the one from
HID++ 1.0, but not entirely (1.0 have a size of 3 while and 2.0 a size
of 4).
The parsing was not clean, so reuse a the same logic than hidpp10.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-12-08 17:43:31 +01:00
Benjamin Tissoires
dcf5e45797 hidpp20: fix resolution up/down
Looks like they where inverted

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-12-08 17:43:31 +01:00
Benjamin Tissoires
e063d7d5e1 hidraw: add Consumer Control Table
Most should be fine, though I did not tested each key.

HID++ 1.0 and 2.0 use it now, though HID++ 2.0 needs refinments (only a u8
is used though we need a u16)

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-11-27 16:55:06 +01:00
Benjamin Tissoires
9cc323d80f hidpp: extract hidpp20_crc_ccitt into hidpp_generic
Looks like the hid++ 1.0 devices are also using the same crc computation,
so put it in the generic part.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
2015-11-26 17:43:34 +01:00
Benjamin Tissoires
0068ef2b06 hidpp20: use a struct definition for onboard profiles
Removes the magic constants here and there, though the description
of the struct is not very nice and clean.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:57:26 +01:00
Benjamin Tissoires
2a2d9e0f67 hidpp20: add a generic write_page function
Looks like the crc needs to be passed anyway, so have a common helper to
set the crc and write the whole page.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:57:25 +01:00
Benjamin Tissoires
9714ba53f5 hidpp20: update the dictionary when writing the profiles
If the device has never been configured under Windows, the dictionary
of the profiles might be blank. When it is blank, any changes made to
the profiles are ignored by the mouse.
Update a new dictionary if the profile was previously not enabled.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:57:18 +01:00
Benjamin Tissoires
8782c5117f hidpp20: the profile also contains a name
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:50:51 +01:00
Benjamin Tissoires
72d74da27c hidpp20: read the profile in ROM if the profile in flash is not valid
This happens after unboxing the mouse or if there is a wrong crc in
the profiles.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:50:48 +01:00
Benjamin Tissoires
ee2bd0475f hidpp20: move the crc function up
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:48:50 +01:00
Benjamin Tissoires
071a507d44 hidpp20: replace manual BE feeding by the helpers
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:48:50 +01:00
Benjamin Tissoires
5c97492f44 hidpp20: fix LE/BE declarations, and move them to hidpp-generic.h
hidpp20_get_unaligned_be_u16 was LE, not BE.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-11-06 18:48:48 +01:00
Benjamin Tissoires
3753bd3216 hidpp20drv: implement write_button for devices with profiles
Still missing the consumer control HID keys, but the rest works (minus
the modifier keys).

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-22 15:14:03 -04:00
Benjamin Tissoires
ba26f6f35c hidpp20: implement the write functionality of the profiles
Not completely full features, but works to set the DPI, report rate and
buttons assignments (no macros yet).

The current code reads first the current values, changes that needs to be
changed and writes back the data. Long term, we want to build the data
directly from the profiles and just write them.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-22 15:14:03 -04:00
Benjamin Tissoires
2d020e840a hidpp20: fix the profile size
the profile contains 16 pages of 16 bytes, not only 15

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-22 15:14:03 -04:00
Benjamin Tissoires
88083511db hidpp20: remove unused parameter
profiles_list is not used anymore in hidpp20_onboard_profiles_get_current_profile
let's remove it.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-21 16:01:13 -04:00
Benjamin Tissoires
21d22bf74e hidpp20: change hidpp20_onboard_profiles_read_memory API
It looks like we can not use a section > 0xff and that the first
parameter corresponds to the type of the available memory (rom or flash).

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:32:56 -04:00
Benjamin Tissoires
d3abebf202 hidpp20: change hidpp20_onboard_profiles_read_memory API
It looks like we can not use a section > 0xff and that the first
parameter corresponds to the type of the available memory (rom or flash).

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:31:46 -04:00
Benjamin Tissoires
3294c5c048 hidpp20: parse the special keys in the profiles
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:28:47 -04:00
Benjamin Tissoires
26fdafb881 hidpp20: parse the buttons mapping in the profiles
Only export the actual buttons in ratbag_button for now.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:25:59 -04:00
Benjamin Tissoires
24f7319a6f hidpp20: read the button count from the mouse
When using onboard profiles, it looks like we have the button count.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:24:03 -04:00
Benjamin Tissoires
7c1718d316 hidpp20: first parsing of feature 0x8100 - onboard profiles
Obtained by rev-engineering the protocol.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 17:24:02 -04:00
Benjamin Tissoires
4991118bcd hidpp20: simplify internal hidpp20_feature_set_get API
We do not export it anymore and we plan to use it only in
hidpp20_device_new().

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:59:48 -04:00
Benjamin Tissoires
dcf0a0e89d hidpp20: use the internal list of features instead of asking the device
We already know the indexes in the table, so there is no point in making
a round trip to the device.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:49:17 -04:00
Benjamin Tissoires
2ff7bff6df hidpp20: remove uninitialized variable use
get_mousepointer_info does not take any parameters.
Remove the warning.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:49:17 -04:00
Benjamin Tissoires
6ac92f8479 hidpp20: retrieve and store the list of features once for all
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:49:13 -04:00
Benjamin Tissoires
8ffa2f9b96 hidpp20: retrieve the protocol version in hidpp20.c
We need hidpp20 to handle the list of available features. So we need to be
sure in hidpp20 that we are talking to a hidpp20 device.

Move the version retrieval in hidpp20 where it makes sense.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:19:02 -04:00
Benjamin Tissoires
65888eedd4 hidpp20: add new struct hidpp20_device
This struct will be used to store the table features/index and probably
others. It also allows a single entry point to set the device index.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-20 16:18:56 -04:00
Benjamin Tissoires
3b3b9ce0a2 hidpp20: switch hidpp20 to use the non-libratbag dependencies too
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2015-10-16 16:43:46 -04:00