HID implementation for the BlueZ stack

by Marcel Holtmann


1. Introduction

The Bluetooth specification defines the HID profile for connecting human interface device over a Bluetooth link. The Bluetooth HID profile is based on the USB HID specification and Peter Klausler has done some work in January 2003 to make the Microsoft Optical Desktop for Bluetooth working under Linux. He improved his implementation six times and it should now work fine with any HID compatible Bluetooth device. Because of his fake.o kernel driver and his own SDP implementation the code never makes it into the BlueZ utilities. Another thing is that the USB kernel subsystem already has a full working and stable HID parser and it is not needed to do this work twice. This reimplementation of the HID profile from scratch has the goal to fix the current problems and come up with a complete and fully integrated implementation of the HID profile for Linux. Most of the new code is ready for testing.


2. Linux and HID devices

Starting with the Linux kernel 2.6.6 and patch-2.6.6-mh1 it is possible to use the new Bluetooth Human Interface Device Protocol (HIDP) implementation. With the hidp kernel module and the hidd program from the bluez-utils package the Bluetooth HID support gets into new dimensions. With kernel 2.6.8-rc1 the HIDP module with boot protocol support is official part of the stable Linux kernel series. The HIDP support is fully supported by the bluez-utils-2.8 package.

Right now the following HID devices are known to work perfectly together with this implementation and actually every other new device should work, too.

Device VID:PID (Version) Bluetooth Class AFH Idle Timeout
Logitech Cordless Presenter 1.1 (CSR - 0xbc) 0x012580 no no
Logitech MX900 Optical Mouse 046d:b001 (2200) 1.1 (CSR - 0x350) 0x002580 no unknown
Logitech Ultra-flat Keyboard (diNovo) 046d:b303 (2303) 1.1 (CSR - 0x350) 0x002540 no 3 hours and 5 minutes
Logitech PC Remote Commander (diNovo) 046d:b3e1 (2501) 1.1 (CSR - 0x350) 0x002540 no unknown
Microsoft Wireless Optical Desktop 045e:007b (0033) 1.1 (CSR - 0x1df) 0x002540 no 12 minutes
Microsoft Wireless IntelliMouse Explorer 045e:007c (0039) 1.1 (CSR - 0x1d0) 0x002580 no 12 minutes
Apple Wireless Keyboard 05ac:0209 (0101) 1.1 (Broadcom - 0x5b00) 0x002540 slave no
Apple Wireless Mouse 05ac:0309 (0100) 1.1 (Broadcom - 0x5b00) 0x002580 slave no
EPoX Barton Keyboard (BT-KB01B) 1.1 (CSR - 0x32d) 0x002540 no 21 minutes
EPoX Barton Mouse (BT-MS02B) 1.1 (CSR - 0x20a) 0x002580 no 11 minutes
BlueTake Mouse (BT500) 1.1 (CSR - 0x417) 0x002580 no 20 minutes
Higoto BlueMouse 1.1 (CSR - 0x417) 0x002580 no 20 minutes
BlueLogic Bluetooth Car Keyboard 1.1 (CSR - 0x1a5) 0x002540 no unknown
BlueLogic WingKey Keyboard 1.1 (CSR - 0x1a5) 0x002540 no unknown


3. Using Bluetooth HID devices

To use a Bluetooth mouse or keyboard with Linux you need at least the Linux kernel 2.6.6-mh1. This means you have to install a vanilla 2.6 kernel with one of the latest Bluetooth patches. To enable the HIDP module the kernel option CONFIG_BT_HIDP must be selected. If this is done your new kernel includes full Bluetooth HID support.

linux:~# modinfo hidp
author:         Marcel Holtmann <marcel@holtmann.org>
description:    Bluetooth HIDP ver 0.2
version:        0.2 86C71232C213B652CB1A62D
license:        GPL
alias:          bt-proto-6
vermagic:       2.6.6-mh2 preempt PENTIUM4 gcc-3.3
depends:        bluetooth,l2cap


4. Device specific information

It seems that every Bluetooth HID implementation has its own characteristics. Even if they are based on standard implementations from CSR and Broadcom every device is different. The following pages gives some clues about the device specific behaviours.

Logitech cordless presenter and diNovo media desktop
Microsoft optical desktop and IntelliMouse
Apple wireless keyboard and mouse
EPoX Barton desktop and presenter
FrogPad Bluetooth iFrog
BlueTake and Higoto mouse
Broadcom dongles
Wiimote devices

Besides these devices there are also other Bluetooth HID products were nothing about is known at the moment. However they may work or may not work. These links point to the manufacturer websites.

Stowaway Bluetooth Wireless Keyboard
Nokia Wireless Keyboard


5. HID related links

USB HID information and related specifications
Microsoft related HID documentation
HID questions and answers
The HID Page by Jan Axelson


Copyright © 2003-2004 Marcel Holtmann Created on September 7, 2003
Last modification on May 15, 2004