dev builds
themes manual
device status forums
mailing lists
IRC bugs
dev guide

Search | Go
Wiki > Main > SummerOfCode > SummerOfCode2009 > UsbStackEnhancements

USB stack enhancements

This project is part of the Google Summer of Code 2009 project.

Project name Student Mentor Code
Allow USB class drivers to be implemented as plugins + Implement Human Interface Device (HID) Tomer Shalev (tomers) Frank Gevaerts (gevaerts) Git repository at

Rockbox has an integrated USB stack for some targets, with mainly the Mass-Storage Class Driver being used. The main aim of the project, is to add support for an additional class-driver, the Human-Interface-Device (HID) class driver, and to overhaul the USB stack to dynamically load class drivers as modules (aka plugins), therefore reduce binary size, and ease development of additional class drivers (e.g. MTP).


Phase 1 (50%):
  • Implement a working HID class driver, replacing the charging-only driver
  • Write a HID test application (control volume of the host)
Phase 2 (50%):
  • Separate class driver from main binary, and implement infrastructure to dynamically load them

Currently working on: Phase 1

Remaining work for completing phase 1:
  • Remove the charging-only USB class-driver in favour of the HID driver
  • Configure keymaps for all platforms that uses the Rockbox USB stack (FS#10218)
  • Implement a sample application that sends various key codes to the host, e.g. use Rockbox as a PowerPoint Presenter (but not cordless, of course)

Completed (and committed) tasks:
  • Switch to git repository management, to ease development process
  • Valid enumeration of the DAP as a Human-Interface Device
  • Implement support for Interrupt transfers in Sansa e200
  • Add debug menu items to control volume (VolUp/VolDown/Mute) on the host using HID messages
  • Successfully send HID messages to host.

Other ideas for leveraging this work, which will not be implemented as part of this GSoC project:
  • Implement Interrupt type endpoints in all other drivers
  • Implement context menu to control the class driver, e.g. key-mappings (code pages), etc.
  • Implement 'code-page' to configure key-mapping for controlling Power-Point presentations
  • Make touch-screen enabled platforms identify as a tablet device, enabling the player to act as a touch-pad
  • Use touchscreen platforms as a LCD keyboard
  • Contol what is displayed on the DAP's LCD via a driver run on the host OS


r9 - 02 Apr 2021 - 20:46:07 - UnknownUser

Copyright © by the contributing authors.