pwmd

Crates.iopwmd
lib.rspwmd
version0.2.0
sourcesrc
created_at2021-10-17 22:51:25.822627
updated_at2021-10-19 20:49:36.018179
descriptionExposes PWM chips to DBUS.
homepage
repositoryhttps://github.com/kevinbader/pwmd
max_upload_size
id466454
size69,714
Kevin Bader (kevinbader)

documentation

README

pwmd

Crates.io docs.rs

pwmd exposes the Linux' sysfs PWM interface to DBUS.

Why

PWM controllers are often used for LEDs. Playing around with LEDs is fun and it's also super easy to control them, thanks to a simple sysfs based API the Linux kernel exposes. Only drawback: your hacky script needs root privileges to use it.

With pwmd you can use DBUS to control LEDs without root privileges. Under the hood, pwmd uses the sysfs API - it exposes this part of sysfs to user-space via DBUS, without running the risk of scripts causing mayhem to other parts of sysfs.

Getting started

$ cargo install --git https://github.com/kevinbader/pwmd
$ sudo pwmd

pwmd then exposes its API on DBUS. For example, you could export the first PWM controller using dbus-send:

SERVICE="com.kevinbader.pwmd"
OBJECT_PATH="/com/kevinbader/pwmd/pwm1"
INTERFACE="com.kevinbader.pwmd.pwm1"
METHOD="Export"
dbus-send --system \
  --type=method_call --print-reply \
  --dest=$SERVICE \
  $OBJECT_PATH \
  ${INTERFACE}.${METHOD} uint32:0

Use busctl to see available methods:

$ busctl --user introspect com.kevinbader.pwmd /com/kevinbader/pwmd/pwm1
NAME                                TYPE      SIGNATURE RESULT/VALUE FLAGS
com.kevinbader.pwmd.pwm1            interface -         -            -
.Disable                            method    uu        (qs)         -
.Enable                             method    uu        (qs)         -
.Export                             method    u         (qs)         -
.Quit                               method    -         (qs)         -
.SetDutyCycleNs                     method    uut       (qs)         -
.SetPeriodNs                        method    uut       (qs)         -
.SetPolarity                        method    uus       (qs)         -
.Unexport                           method    u         (qs)         -

TODOs

  • CONTRIBUTORS file
  • GitHub Actions pipeline setup
  • systemd file
  • describe how to control logging output
  • high-level API specifically for LEDs
Commit count: 25

cargo fmt