rockbox/docs
Michael McAllister dbd53ef8ae hibyr1: implement USB DAC
Implement the USB Audio Class DAC on the HiBy R1 and R3ProII, driven by
the usb_audio setting from the scaffolding patch: the host plays audio
over USB and the player's CS43131 renders it.

The vendor kernel provides a UAC gadget function "uac_sa" whose char
device /dev/uac_sa delivers the host's PCM: the isochronous OUT frames
are converted to left-justified S16-in-S32 stereo and queued in a kernel
ring, drained with a non-blocking read(). The data path lives in
usb-dac-hiby.c -- a pump thread drains /dev/uac_sa into a small
single-producer/single-consumer ring and the mixer callback hands that
PCM to the codec through the normal ALSA output path. No resampling is
needed because Rockbox clocks the codec at the host-negotiated rate.

The DAC is built on the existing configfs gadget and binds the UDC like
ADB, while usb_power_only keeps the USB thread out of the way. In charge
mode it is a standalone self-bound gadget. In adb mode it is composed
alongside adb on one gadget so the host gets a sound card and adb at
once; uac_sa must be the first-linked function (audio interfaces 0-1)
because the vendor function hard-codes its interface numbers.

The pump is hardware-only, so usb-dac-hiby.c is excluded from simulator
builds; the usb_audio_get_active() playback-interlock stub lives with the
scaffolding.

The R3ProII shares this hosted HiBy port and the same userspace gadget,
and the data path is codec-agnostic, so nothing here is R1-specific.
Only the R1 has been validated on-device.

Co-Authored-By: Claude Opus 4.8
Change-Id: I64c57ede27f411a2c61d41a7e0fa127b51a7b5b9
2026-07-22 15:22:46 -04:00
..
logo lcd_color/cabbiev2: New iconset in multiple sizes 2011-11-26 16:01:11 +00:00
CHARGING_ALGORITHM Removed executable flag 2007-01-09 23:29:07 +00:00
COMMITTERS docs: add myself to CREDITS and COMMITTERS 2026-01-03 13:30:08 -05:00
CONTRIBUTING Update the RealName and AI sections in docs/CONTRIBUTING 2026-07-08 10:44:14 -04:00
COPYING Removed 'howto' addition 2003-11-20 14:13:30 +00:00
COPYING-MANUAL Manual license is GFDL, add it to the docs folder. 2006-12-17 11:54:10 +00:00
CREDITS hibyr1: implement USB DAC 2026-07-22 15:22:46 -04:00
gpl-2.0.html Remove duplicated license file. 2010-09-04 18:50:12 +00:00
HISTORY Convert to UTF-8 and a few tweaks. 2008-02-07 00:56:07 +00:00
LICENSES utf8proc: Add utf8proc for normalizing UTF-8 strings 2026-03-01 08:26:00 -05:00
MAINTAINERS docs: update MAINTAINERS 2025-11-08 08:28:45 -05:00
NODO Remove outdated NODO list from the docs folder. Replace it with a link to the wiki. 2010-05-15 21:54:24 +00:00
PLUGIN_API chore: Get rid of *all* vestigal CVS '$Id:$' tags 2026-06-01 16:01:18 -04:00
profontdoc.txt Make sure files which aren't windows-specific use \n line endings only 2010-06-17 16:59:51 +00:00
README docs: we use xz, not bz2, for tarballs 2024-10-13 09:33:00 -04:00
sample.colours Make sure files which aren't windows-specific use \n line endings only 2010-06-17 16:59:51 +00:00
sample.icons Add a sample.icons file, and add a few more files to the docs folder in the zips 2007-06-18 09:32:28 +00:00
UISIMULATOR docs: Delete some _very_ obsolete documentation 2025-04-20 16:53:57 -04:00
usb-api.md usb: refactor control request handling 2026-05-25 12:42:36 +01:00

               __________               __   ___.
     Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
     Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
     Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
     Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
                       \/            \/     \/    \/            \/

Build Your Own Rockbox

1. Clone 'rockbox' from git (or extract a downloaded archive).

   $ git clone git://git.rockbox.org/rockbox

     or

   $ tar xJf rockbox.tar.xz

2. Create a build directory, preferably in the same directory as the firmware/
   and apps/ directories. This is where all generated files will be written.

   $ cd rockbox
   $ mkdir build
   $ cd build

3. Make sure you have mips/m68k/arm-elf-gcc and siblings in the PATH. Make sure
   that you have 'perl' in your PATH too. Your gcc cross compiler needs to be
   a particular version depending on what player you are compiling for. These
   can be generated using the rockboxdev.sh script in the /tools/ folder of the
   source.

   $ which arm-elf-eabi-gcc
   $ which perl

4. In your build directory, run the 'tools/configure' script and enter what
   target you want to build for and if you want a debug version or not (and a
   few more questions). It'll prompt you. The debug version is for making a
   gdb version out of it. It is only useful if you run gdb towards your target
   Archos.

   $ ../tools/configure

5. *ploink*. Now you have got a Makefile generated for you.

6. Run 'make' and soon the necessary pieces from the firmware and the apps
   directories have been compiled, linked and scrambled for you.

   $ make
   $ make zip

7. unzip the rockbox.zip on your music player, reboot it and
   *smile*.

If you want to build for more than one target, just create several build
directories and create a setup for each target:

   $ mkdir build-fuzeplus
   $ cd build-fuzeplus
   $ ../tools/configure

   $ mkdir build-xduoox3
   $ cd build-xduoox3
   $ ../tools/configure

Questions anyone? Ask on the mailing list or on IRC. We'll be happy to help you!