Input over Bluetooth LE architecture and the new uHID module
Joao Paulo Rechi Vita, Andre Guedes (<email address hidden> <email address hidden>)
The first Bluetooth Smart and Smart Ready devices are available in the
marketing. This technology focus on low energy consumption and opens
new frontiers promising to replace proprietary protocols on short
range communication, and scenarios where power consumption is
critical. The purpose of this talk is to present the architecture of
the HID over GATT profile (HoG) implementation on BlueZ, the
interaction with the HID subsystem, and the challenges encountered
during the implementation.
One of the main concerns was how to demultiplex HoG traffic from
traffic of other LE based profiles, since the same channel is shared
between them. To avoid adding this logic and parsing the protocols in
the kernel, it has been done in userspace and then pure HID traffic is
injected back into the kernel. To handle this traffic a new module
called uHID has been created, and it works in the same fashion as the
uinput module but deals with HID reports. To validate this
architecture, an experiment has been done to qualitatively evaluated
the latency of the copy and context switch between kernel and
userspace.
The HID profile over BR/EDR (traditional bluetooth) may also be moved
to this architecture in the future, aligning both implementations.
Bio
João Paulo has done several contributions to Linux Bluetooth stack,
besides other areas like media, connectivity, etc. He is currently
working on INdT with Bluetooth Low Energy support on BlueZ (both
kernel and userspace). He has spoken on last Linux Plumbers about
AVRCP integration on the desktop and on last Desktop Summit about OTR
support on Telepathy.
Andre Guedes is an active contributor of the BlueZ project (the
official Linux Bluetooth protocol stack). He has done several
contributions to the Linux kernel to support Bluetooth Low Energy
technology. Andre works for INdT (Instituto Nokia de Tecnologia) as
software developer.
Blueprint information
- Status:
- Not started
- Approver:
- None
- Priority:
- Undefined
- Drafter:
- None
- Direction:
- Needs approval
- Assignee:
- None
- Definition:
- New
- Series goal:
- None
- Implementation:
- Unknown
- Milestone target:
- None
- Started by
- Completed by