r3vn / feedbackd

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Haptic/visual/audio feedback for GNOME

Code coverage

feedbackd provides a DBus daemon (feedbackd) to act on events to provide haptic, visual and audio feedback. It offers a library (libfeedback) and GObject introspection bindings to ease using it from applications.

License

feedbackd is licensed under the GPLv3+ while the libfeedback library is licensed under LGPL 2.1+.

Getting the source

git clone https://source.puri.sm/Librem5/feedbackd
cd feedbackd

The master branch has the current development version.

Dependencies

On a Debian based system run

sudo apt-get -y install build-essential
sudo apt-get -y build-dep .

For an explicit list of dependencies check the Build-Depends entry in the debian/control file.

Building

We use the meson (and thereby Ninja) build system for feedbackd. The quickest way to get going is to do the following:

meson . _build
ninja -C _build
ninja -C _build test
ninja -C _build install

Running

Running from the source tree

To run the daemon use

_build/run

You can introspect and get the current theme with

gdbus introspect --session --dest org.sigxcpu.Feedback --object-path /org/sigxcpu/Feedback

and to request feedback for an event

gdbus call --session --dest org.sigxcpu.Feedback --object-path /org/sigxcpu/Feedback --method org.sigxcpu.Feedback.Feedback 'my.app.id' 'phone-incoming-call' '[]' 0

See examples/ for a simple python example using GObject introspection.

How it works

We're using a event naming spec similar to http://0pointer.de/public/sound-naming-spec.html to name events. This will allow us to act as a system sound library so applications only need to call into this library and things like the quiet and silent profile work out of the box.

Feedback theme

Events are then mapped to a specific type of feedback (sound, led, vibra) via a device specific theme (since devices have different capabilities).

There's currently only a single hard coded theme named default. The currently available feedback types are:

  • Sound (an audible sound from the sound naming spec)
  • VibraRumble: haptic motor rumbling
  • VibraPeriodic: periodic feedback from the haptic motor
  • Led: Feedback via blinking LEDs

You can check the feedback theme and the classes (prefixed with Fbd) for available properties. Note that the feedback theme API (including the theme file format) is not stable but considered internal to the daemon.

Profiles

The profile determines which parts of the theme are in use:

  • full: Use configured events from the full, quiet and silent parts of the feedback them.
  • quiet: Use quiet and silent part from of the feedback theme. This usually means no audio feedback.
  • silent: Only use the silent part from the feedback theme. This usually means to not use audio or vibra.

It can be set via a GSetting

  gsettings set org.sigxcpu.feedbackd profile full

fbcli

fbcli can be used to trigger feedback for different events. Here are some examples:

Phone call

Run feedbacks for event phone-incoming-call until explicitly stopped:

_build/cli/fbcli -t 0 -E phone-incoming-call

New instant message

Run feedbacks for event message-new-instant just once:

_build/cli/fbcli -t -1 -E message-new-instant

Alarm clock

Run feedbacks for event message-new-instant for 10 seconds:

_build/cli/fbcli -t 10 -E alarm-clock-elapsed

Per app profiles

One can set the feedback profile of an individual application via GSettings. E.g. for an app with app id sm.puri.Phosh to set the profile to quiet do:

GSETTINGS_SCHEMA_DIR=_build/data/ gsettings set org.sigxcpu.feedbackd.application:/org/sigxcpu/feedbackd/application/sm-puri-phosh/ profile quiet

Documentation

About

License:GNU General Public License v3.0


Languages

Language:C 93.1%Language:Meson 6.6%Language:Python 0.2%Language:Shell 0.1%