USB Hardware and Software

I often use FreeBSD ( based systems for development and have contributed changes to the system on and off over many years including kernel, ports collection and user programs. Recently I have spent more time working with USB devices and have found support for these devices to be less than desirable on FreeBSD. In this section of my site I am providing code that I have created to help drive some of the devices that I have encountered.


To aid the development and use of USB devices on FreeBSD I have contributed a patch to the FreeBSD kernel usb/122819 that introduces a new quirks table to the kernel that can be dynamically changed. To use the dymanic quirks table quirks are added to the system environment using either kenv or loader.conf. An example of a quirk is the one used for the Velleman K8055:

usb.quirk.0="0x10cf 0x5502 0xffff UHID_IGNORE"

and the Jam Panic Button:

usb.quirk.1="0x1130 0x0202 0xffff UHID_IGNORE"

The string contains the vendor id, followed by the product id, the revision and the quirk required. A revision of 0xffff matches any revision. Quirks added via kenv are detected by calling a new ioctl USB_SETDYNQUIRKS an example program usbquirksload is included in the patch.


Velleman K8055 USB Experiment Board Vendor: 0x10cf
Product: 0x5502
Jam USB Panic Button Vendor: 0x1130
Product: 0x0202
Dream Cheeky USB Pedometer Vendor: 0x04f3
Product: 0xa003