• Status Closed
  • Percent Complete
  • Task Type Patches
  • Category User Interface
  • Assigned To No-one
  • Operating System PortalPlayer-based
  • Severity Low
  • Priority Very Low
  • Reported Version Daily build (which?)
  • Due in Version Undecided
  • Due Date Undecided
  • Votes
  • Private
Attached to Project: Rockbox
Opened by MikeS - 2007-07-18
Last edited by jdgordon - 2007-07-23

FS#7451 - Alternative method of list acceleration for scrollwheel-based devices

This is _potentially_ applicable to any scrollwheel-based device. This first patch will only work on the e200 series however. It’s not SVN ready but since the availablity of event data is sort of hacked in to make it just work.

List acceleration is based upon velocity-squared time a constant times number of missed wheel interrupts. The perceived velocity in the list should remain rather constant regardless of CPU load for any given wheel speed.

Fine control remains fine and yet you can move very far with a single wheel flick. It should be easy to aim for a particular range in the list (looking at the scroll bar). A small amount of time with it should make aiming pretty much a reflex action.

Closed by  jdgordon
2007-07-23 11:27
Reason for closing:  Accepted

I can’t really speak from experience, having only used an Ipod (3G I think) with it’s OF (and never used Rockbox on a scrollwheel of any kind). However, I do recall be impressed by the responsiveness of Apple’s UI and would think that would be the ideal for Rockbox.

I know that “the OF does it” is not, in itself, a good reason for doing anything, but Apple must be doing some things right to have their market dominance - style, certainly, but also the feel of the UI.

Just a random thought there, from early in the morning. Apologies if it’s not relevant!

MikeS commented on 2007-07-19 16:05

This should be more responsive than Sandisk’s UI. I just want some Sansa owners to check it out (JdGordon, you there? :). The constants can be tweaked of course and I really think it’s a scheme that has no need for any settings and the time settings for scrolling would be removed (but those are good for joystick-based devices). Noone’s complained about the thresholds I chose for the wheel so I think it’s possible to adjust this sort of thing to not require them.

Anyone should keep in mind that until decoding is done on the COP, alot of movement in the list will always trigger the boost in the codec thread which causes that sticky movement because the frequent drawing causes the PCM buffer to run low. This patch keeps the scrolling moving along in the list regardless of that.

alright, alright, I’ll try the patch… :D

yeah, it feels very nice on the sansa, ill see if I can try it on my sisters nano a bit later. It completly breaks the list movement on joystick targets (tested on h300).
did you want to use this or the svn code depending on the target? or was the plan for one code which worked better on the wheel targets?

MikeS commented on 2007-07-20 03:03

It won’t work on an iPod because the scrollwheel driver doesn’t set the correct data. I just blasted it in for a demo and didn’t worry about integrating it here but I have done that on my own copy. Someone with a particular iPod available would have to tune the scrollwheel driver to have clicks be the correct angle for comfort.

The bit format for the message data is:
[31:24] = skip count + 1
[23:0] = clicks/uS in fixed 0.24: v = 0xffffffu/dt

Driver is requires a high speed mode where skips will be allowed and v computed.
Slow speed mode never skips since that’s fine control…v = 0, even if messages are skipped. Skip count still sent.

…if you were inclined to mess with any iPod scrollwheel driver.

MikeS commented on 2007-07-21 21:38

Ok, I think I’ll commit this one with a new #define HAVE_SCROLLWHEEL (defined only for e200 atm). The main problem is that the ideal power curve feels like it should be somewhere between v^1 and v^2. I suppose v^1.5 might be ok but that means a new version of the fsqrt function that can handle large fixed-point integers. :| Not too difficult but more in the binary.


Available keyboard shortcuts


Task Details

Task Editing