a Rockbox modification by gl.tter
last update: 18 Jun 2006 
Features: These are my current changes/extensions to a recent version of the Rockbox code:

Style:   iRiver H1x0 Specific
  Graphics-and-grayscale-heavy gl.tter Playback Screen, using heavily expanded WPS functionality:

(note this is a rough approximation - the animation is smoother and peakmeters work properly on the device).
Why is the screen green?
- Why are some of the graphics 'noisy'?  The iRiver H1x0 series displays have only 2 shades of gray (apart from black and white), and so
dithering is used to simulate smoother shading.
- Is the disc supposed to wobble like that?  Yep
: ).

I created the design in Photoshop first without worrying about the existing WPS limitations (except for sticking to a single font), and then wrote the supporting code to make it work.  The original design is target-resolution optimised, but entirely vector based, so it could be adapted perfectly to any resolution:

Stats:  111 bitmaps (and counting).


Eyecandy:   iRiver H1x0 Specific
  Backlight Peakmeter!

Flashes the H1x0 backlight in time to the audio.  Use for playback and/or recording.  With style presets (or custom settings), and seperate battery / ac settings


Functional:   iRiver H1x0 Specific
- NEW -
(June 18 06)
Screensaver - use plugins as screensavers!  Fully configurable with 'AC only' and 'Timeout' options.  Supports:


- NEW -
(June 2 06)
Favourite Tracks!  Automatically remembers how often files have been manually played, and lists them in a virtual folder:


Tech:  implemented using Track Metadata files (small text files that can store track-specific values).  The metadata values are loaded with the dircache and are automatically updated/saved.

- NEW - Exit menu instantly by pressing the Play or Menu buttons.  
- NEW - 'Fade on Stop/Pause' Time setting - can now specify how long the fade on stop/pause should last: 100 - 3000ms (in 100ms steps).  
- NEW - 'Start/Stay on WPS' setting (optional) - WPS now stays when stopping audio, ie. you need to specifically click to get to the file browser (a more stylish user experience imo).  It also means that the 'stop' icon is actually used, plus it avoids the confusing 'I clicked Stop, but as it was still fading out I also then intuitively clicked for the file browser which started playing another file!' thing (I did that all the time : ).  
  Filename Formatting / Grouping:

For now see details here.

  Seperate Optical-Out Enable setting for Battery / AC - automatically switches the Optical out on/off based on power connection status and your preferences. 

Ideal when eg. you always use the optical out at home, but don't want to waste battery juice on the move.

  AC Volume override - optional, forces & maintains a fixed volume whilst on AC, then automatically changes back to last used battery volume when AC is removed.  Works correctly even across boots.

Ideal if you always want to run at a particular volume at home (eg. 0db for the iRiver's volume-variable line-out), but not have your ears blown off when you first use it on the move.

  WPS Battery display fixed - each segment in a 4 segment battery display now correctly represents 25%, and all segments extinguish only when less that 15mins estimated time remain.

Previously the first segment already extinguished at 80%, and all segments vanished at 19% - not only far too early, but the actual remaining time completely depends on the battery capacity!

  WPS Volume display fixed - first and last volume bitmaps are only shown on exactly the first and last volume level.

This is not only better, but also required for 'mute/max' type bitmaps to work.


WPS Extensions:   iRiver
  WPS Viewports (text pixel positioning with optional clipping rectangle, implemented using Screen Viewports):

Enabled with %wp  ('p' for 'pixel coordinates').

A line can then be prefixed with pixel coordinates and optional clipping dimensions.  This allows text to be placed anywhere and aligned / clipped to a rectangle (those lines no longer eat up a traditional screen line):

(at line/subline start:)
[clip width|clip_height|]

TODO: When clip dimensions are specified, text can also be top / middle / bottom aligned using:

%at / %am / %ab   (%am is the default).

(careful alignment use allows WPS designs to use different sized fonts without breaking the layout).


(as Screen Viewports are currently only implemented for H1x0 - but easily extendable to other targets).
  Partial H1x0 WPS Backdrop Support.

All the static artwork you see in the WPS is a single screen-sized backdrop bitmap.  The support is partial as overlapping text or graphics overwrite it.

(already supported on other targets)
  Bitmap limit extended:
(currently) 0-60 can be used in %x tags in addition to a-z & A-Z.
  Y Coord Progress Bars:

Progress Bars can now be decoupled from lines and placed at arbitrary heights by adding an optional y coordinate parameter:


(fully backwards compatible with existing WPS)

  New Tags:

%fk - Track Frequency in kHz (eg. "44.1" instead of "41000")

As Enum: <8000|11025|16000|22050|

%fd - Track Bit Depth.

As enum: <3bit|4bit|8bit|16bit|18bit|20bit|24bit|
  32bit PCM|32bit Float|unknown>

%fl - Track is "lossless" / "lossy".

As enum: <lossy|lossless>

%fr - Lossless Compression Ratio (percentage of original size), else 0.

%gi - Inverted Text ('g' stands for 'graphics effects').

  • Peak Level tags (0-100%):
- Left channel peak
- Right channel peak
- Mono peak
(largest of left/right)

Can also be used in conditionals (with arbitrary enum numbers like battery and volume levels) to produce animated displays, eg. a 4 bitmap animation might use:


Note that when used in conditionals, the range used is actually 50-100% to produce more dynamic displays on volume-maximized music (faster peak updates would be better), and a slow release is also applied.  Also the first and last enum will only be hit on exactly 0 and 100%, ie.:

%?vm<0%|1 ... 99%|100%>

  Arbitrary Volume / Battery / Peak Level Enums:

WPS designers can now use abitrary bitmap numbers for volume, battery and (new) peak levels (my WPS uses 15 volume segments + off for example).  The code counts how many enums a WPS uses in the respective conditional tags, and works off that.
(fully backwards compatible with existing WPS').

  Extended %mp enum:

%?mp<Stop|Play|Pause|Ffwd|Rew|Fading Audio>

Can be used to indicate the transition from play->pause/stop and vica versa (otherwise there is no visual indication that anything's happening until the fade completes).

(actually that breaks backwards compat. doesn't it - hmm...)

  Bugfix: Lines that don't contain any output text are no longer cleared (this stops those lines clearing areas you don't want).

  Bugfix: Sublines containing only bitmaps didn't work.



All text / images (c) gl.tter  (gl.tter [at] r-i-l [dot] net)  2006