The last Raspberry Pi that I bought (the one that powers my ledweb setup) came with a remote control intended for media servers, one of the official OSMC remotes. I thought it would be fun to use it to do something involving my LED panel, like switching between different modes or something.
I couldn’t find any information on using this remote outside of OSMC, however. I’ve never done any programming that interfaced directly with a USB device either. But it turned out to be surprisingly straightforward.
After figuring out which USB device it was (by running lsusb
, unplugging the
receiver, and running it again, naturally), I did some very minimal reading
about USB, enough to understand that devices can have multiple interfaces. I
then took a closer look via lsusb -v
. Turns out that it has two interfaces,
one using the mouse protocol and one using the keyboard protocol (I’m not sure
why the first is recognized as a mouse, though, since all the buttons map to
keys…). A bit more Googling (er, DuckDuckGoing) informed me such devices are
exposed via /dev/input/event?
device files. And a little bit more searching
revealed the evdev
Python package that reads from these devices. A simple
script taken from a
Stack Overflow answer and I was
able to categorize the different buttons.
It turns out that both input devices are actually used by the remote, for
different keys. On my machine, /dev/input/event0
reads from the directional
controls: the arrows (unsurprisingly) map to KEY_UP
, KEY_RIGHT
, KEY_DOWN
,
and KEY_LEFT
. The “OK” button in the middle maps to KEY_ENTER
. The home
button on the top left also uses this device, mapping to KEY_HOME
. The other
keys can be read from /dev/input/event1
. The “i” button on top right maps to
KEY_INFO
. THe other six buttons map as follows (left to right, top to
bottom): KEY_BACK
, KEY_CONTEXT_MENU
, KEY_PLAYPAUSE
, KEY_STOP
,
KEY_REWIND
, and KEY_FASTFORWARD
.
Now to actually make them do something interesting!