Commit Graph

1664 Commits

Author SHA1 Message Date
Benjamin Tissoires
2607114709 ratbagctl: put the device at the beginning of the command
Having the device node last makes it easy for us to test the same line
on various devices. That is not the most common use-case - normally we'd
expect our users to have one mouse and run several commands on it
(that's the case during debugging as well).
So let's change the device node to be the first argument, it makes for
easier typing/copy-paste, etc.

Plus it makes it a lot more obvious which one the full command is
(`dpi set 800` in this example)

```
$ ratbagctl hidraw4 dpi set 800
```

Fixes: #635

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-22 22:59:56 +10:00
Peter Hutterer
d171f953c7 data: drop all SVGs
See the earlier commit "Drop the SVG handling from libratbag" for an
explanation, this commit merely removes the actual files from git.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 11:17:09 +01:00
Peter Hutterer
734977f176 Drop the SVG handling from libratbag
The SVGs must not be part of any stable API, there is too much behavior
implied that we cannot/do not specify. So it's perfectly likely that a future
change in the SVGs or rendering libraries breaks things in some detail. But
then we cannot update the SVGs without risking breaking other clients that
rely on the current behavior.

Besides: we only have one theme, called "gnome" because a push
towards having SVGs for other themes never happened.

And that theme isn't gnome-specific, it merely looks GNOMEy. The theme is very
much piper-specific in that it requires certain elements that piper cares
about. Currently anyway, if we make this part of our API, piper cannot change
that behavior ever without breaking others.

So let's drop SVG handling completely and rely on the clients to sort it out
for themselves.

For now the SVGs are left in the tree to make it easier to copy to Piper. Once
that's done, we will remove those too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 11:17:09 +01:00
Peter Hutterer
10a1cc9bbc ratbagd: export the Model property for the device
When the SVGs need to be maintained elsewhere, we need something reliable to
match devices with SVGs. The easiest is to provide a unique model string,
usually composed from the usb/bluetooth information.

A string format was chosen to make it more flexible for the glorious future
where we have something other than usb or bluetooth devices. Meanwhile, the
format is the well-known "usb:1234:56ef:0" string (bus, vid, pid, version).

The version in this string is a future-proof safeguard for libratbag. It will
be used where libratbag supports two devices with the same VID/PID and where
this is not otherwise differentiable. We don't have any such devices yet, so
libratbag just returns a hardcoded 0.

The format is currently defined for usb and bluetooth, in the future we may
have other strings.

The base guarantee is that this is a reliable identifier for the model that
will never change for that model. IOW this is what piper can use to map
devices to their SVGs.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 11:17:09 +01:00
Peter Hutterer
367aa29dfe Drop the Led.Type property
The led type was the physical led type to describe where the LED sits.

This property is basically unused and of questionable use anyway. GUI
applications would need to rely on drawings of the mouse anyway. Scripts don't
really care because ratbagctl uses the led index anyway. The only time this
matters is when we're looking at (human) device discovery. But even then just
trying to set the LED is enough to figure out which one is which.

So let's drop this API on the assumption that it's not really needed and
maintaining and extending that enum forever is not necessary.

This is not a full purge, merely the DBus API that gets dropped.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 10:09:17 +01:00
Peter Hutterer
79711dfdad Drop the Button.Type property
The button type was the physical button type, not the logically assigned
button number.

This property is basically unused and of questionable use anyway. GUI
applications would need to rely on drawings of the mouse anyway. Scripts don't
really care because ratbagctl uses the button index anyway. The only time this
matters is when we're looking at (human) device discovery. But often clicking
around is enough to figure out the index.

So let's drop this API on the assumption that it's not really needed and
maintaining and extending that enum forever is not necessary.

This is not a full purge, merely the DBus API that gets dropped.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 10:09:17 +01:00
Peter Hutterer
32a5ad377e Drop the writable-name capability
Make this implict - if the profile has a name, it's writable. Otherwise it's
not and you'll have to rely on the index or make up your own naming.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
5328c20a58 Drop device capabilities
Now that the have all moved or been removed, there is no need to keep this
API.

This is a DBus API break, the Capabilities property disappears.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
014212bbd9 Move the query-configuration to the profile, rename to write-only
This is arguably a profile-specific thing since the device itself is static
(we still know button numbers, etc.), we just don't know the content of each
profile.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
3fcf13b58e Drop the superflous device capabilities
If we have a profiles/resolution/button/led, we can write to it. That is the
default assumption and where we don't have write-access to those, we should
simply not expose them.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
55fd6c7a71 Drop the button key/macro device capability
The same information is supposed to be available in the button's action types

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
d6bbc33dda Drop the switchable-profile device capability
If we have more than one profile, we can switch between them. Because
otherwise having more than one profile is just showing off and we don't like
that type of behaviour, no no.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
d24ea1e662 Drop the switchable-resolution device capability
This capability is superfluous. If we have more than one resolution, we can
switch between them because ... well, why have more than one then?

Signed-off-by:Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
e4d4a7905a Move the disable-profile capability into the profile caps
This is a profile-specific capability, not a device-specific one so let's move
it there.

Arguably, the DBus API should not expose SetEnabled() where not available, but
that's a separate issue.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
af729ec16b Move the set-default-profile capability into the profiles
Theoretical case is where some profiles cannot be set to be the default, but
realistically: this is a profile-specific attribute so let's move the flag
there.

Arguably, the DBus API should not expose SetDefault() where not available, but
that's a separate issue.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
8ae35fa11b Namespace the device capabilities better
Fixes #224

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:21:00 +10:00
Peter Hutterer
561f0ac866 gskill: don't break after finding the active index
We still need to read the data of all other profiles. This broke in f26de4bb,
the previous loop only did the is-active modification

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 16:19:01 +10:00
Peter Hutterer
12ac8b17f0 ratbagd: pick the ID from a list of preselected names
We don't want anyone to rely on a specific content of the ID, e.g. by
hardcoding hidraw/event node numbers. So let's make this an opaque list with
no meaning other than "this is a rodent".

This is solely for the benefit of ratbagctl which uses these IDs as access
identifier.

This doesn't affect ratbag-command which still uses device paths. It also does
not affect the object path. And piper shows the device name anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 08:48:38 +10:00
Peter Hutterer
b568963b14 ratbagd: rename the 'name' variable to 'sysname'
Because that's what it is

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 08:48:38 +10:00
Peter Hutterer
583a050945 README: drop the logo to below the headline
Almost the same placement, but the horizontal line that github uses to render
headers doesn't get cut off anymore.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 07:59:22 +10:00
Peter Hutterer
fe5ed89995 README: rewording and shuffling around
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 07:59:22 +10:00
Peter Hutterer
9ceec4f9f7 README: set a percentage size for the logo
First time I viewed this was on mobile, and the logo left enough space for a
lonely "li" on the left, with the "bratbag" in the line below the logo. Let's
call that a design faux pas and make it small enough to scale.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-22 07:59:22 +10:00
Benjamin Tissoires
e55c3812db Change position of the logo in the README
and use the animated one

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 14:10:23 +01:00
Benjamin Tissoires
d924218c7c logo: only change the eyes colors
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Benjamin Tissoires
8a3eb946fe Add the logo in the DBus documentation
so we can reuse it in the README with animations :)

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Benjamin Tissoires
c734cec88a Add the logo in the README
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Benjamin Tissoires
109621f73e logo: make it square
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Benjamin Tissoires
6e09afd61e logo: RGB lighting!
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Benjamin Tissoires
943308ccaf logo: reshuffle the rats in their correct layers
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
2019-02-21 21:47:28 +10:00
Peter Hutterer
253e8f6edc data: add a logo for libratbag
Because every self-respecting project needs one of those, right?

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-21 11:05:59 +01:00
Peter Hutterer
17d8bcacf6 Switch to using hidraw as base event source
We started with event nodes for some reason lost in the distant past (probably
because that's what a lot of other tools use). But since we exclusively deal
with hidraw devices here and event nodes only serve to look up the hidraw
node, let's get rid of that indirection layer and work with hidraw directly.

Note that changes how ratbagctl works, it used the event nodes before. So
anyone who hardcoded the event node in one way or another is going to see
breakage. Then again, the "eventX" string was the device ID as advertised by
ratbagd, so it's supposed to be treated as an opaque string anyway.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-21 10:23:08 +01:00
Peter Hutterer
6280268919 ratbag-command: fix get_svg_fd()
Regression introduced in 107a649e08

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-20 10:59:14 +01:00
Peter Hutterer
caa75d170d ratbagd: make sure the profile name is ascii-only
Strings on DBus need to be valid UTF8, some of the default profile names on
the G700 include the degree character (" Profile n° 1"), the whole string ends
up being invalid UTF8.

This results in two issues:
- ratbagd gets quietly kicked off the bus when it sends that string
- ratbag-command throws an exception because Python is unhappy about the
  non-UTF8 string:
  UnicodeEncodeError: 'utf-8' codec can't encode character '\udcb0' in position 3: surrogates not allowed

The quick workaround here is to strip anything that's not ASCII from the
profile name. The same may be necessary for some device names too, but let's
wait until we see that.

For ratbag-command we convert the string to bytes and back using the 'ignore'
argument, this way we should see the original profile string without the
printf errors.

This is an incomplete fix, we'll have the same issue if a user tries to set a
non-ASCII name. The long-term fix is to convert whatever we have (probably ISO
8859-1, but can we detect that?) into UTF8 before passing it around. That
would also mean converting it back before writing to the device.

Fixes #617

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-20 11:26:23 +10:00
Peter Hutterer
a7f44211df tools: print the error message if we fail to connect to ratbagd
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-20 11:26:23 +10:00
Peter Hutterer
a3466f0e99 test: add profile name support to the internal test devices
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-20 11:26:23 +10:00
Peter Hutterer
222dda17a6 Don't set the resolution if it's not in our DPI list
Fixes #121

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 09:29:25 +01:00
Peter Hutterer
29fb0f855f ratbagd: map the default theme to the gnome theme
We don't install the default SVGs anymore and all the effort for new mice goes
into the gnome theme.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 09:27:55 +01:00
Peter Hutterer
91dfc3477d driver-hidpp10: fix a coverity complaint
Coverity seems to think this can use uninitialized array elements but that can
only happen when hidpp10->dpi_count is 0. In which case the callee doesn't
touch it anyway but coverity doesn't care about that bit.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 09:14:58 +01:00
Peter Hutterer
42caf3bc94 hidpp20: fix self-assignment
Going by the comment above, this needs to be endian-converted.

Found by coverity

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 09:14:58 +01:00
Peter Hutterer
7778da715e doc: some more updates/cleanups
Noteworthy: "Description" has been renamed to "Name" ages ago in ratbagd, this
just corrects the documentation.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 13:23:42 +10:00
Peter Hutterer
0c2e4121af tools: sync ratbagd from piper
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 12:40:17 +10:00
Peter Hutterer
107a649e08 ratbag: drop Device.Svg and Device.GetSvg()
This isn't used by anything in the tree and Piper doesn't use it either.
(`ratbagctl` queries it from the sodipodi name in the SVG).

Plus, assuming we run sandboxed the filename is useless anyway, `GetSvgFd()`
takes care of this bit though.

So let's drop this.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-19 12:36:39 +10:00
Peter Hutterer
a17613459b circleci: drop scan-build from the jobs to run
Scan-build is at the point where it gives us too many false positives to be
reliable and they're not easily fixable other than sprinkling
"ignore_clang_sa_mem_leak" comments all over the source.

This caused us to drop F29 from the CI earlier, see 1225f421c0, but
really we just shouldn't use something that's so unreliable as part of our CI.

The main issue continues to be the use of __attribute__((cleanup)) but others
give us false positives too.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-18 09:48:10 +01:00
Peter Hutterer
3392b5e276 tools: switch time.clock() to time.perf_counter()
toolbox.py:86: DeprecationWarning: time.clock has been deprecated in Python
3.3 and will be removed from Python 3.8: use time.perf_counter or
time.process_time instead

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-18 09:47:09 +01:00
Peter Hutterer
13656b60f7 doc: ref the LED enums correctly
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-18 14:26:23 +10:00
Peter Hutterer
c2f93dc672 doc: reformat the DBus API docs a bit better
Use the default Python class, it's not perfect but still makes more sense than
the javascript class.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-18 14:21:39 +10:00
Peter Hutterer
468e6108ca doc: some documentation improvements
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-18 11:35:11 +10:00
Peter Hutterer
59e134149a README: update to point to the new wiki page for device notes
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
2019-02-01 08:59:09 +10:00
FFY00
29b2e64a1d data: add device file for Logitech G603
Co-authored-by: damex <damex.pp@gmail.com>
2019-01-30 15:06:54 +10:00
Jente Hidskes
4ce6a872ca data/gnome: increase vertical spacing in Logitech G Pro
The SVG guidelines specify a minimal vertical distance of 40px. There
were two lines in the G Pro SVG that had less, leading to the buttons
overlapping. This is visible in #607.
2019-01-26 11:41:12 +10:00