Bug 20717

Summary: Rockbox players
Product: media-player-info Reporter: Sven Arvidsson <sa>
Component: New deviceAssignee: Martin Pitt <martin.pitt>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: medium CC: danny.kukawka, rasher+fdo, skelite
Version: unspecified   
Hardware: Other   
OS: Linux (All)   
URL: http://www.rockbox.org/
Whiteboard:
i915 platform: i915 features:

Description Sven Arvidsson 2009-03-17 15:35:58 UTC
Some time ago, the free firmware Rockbox started using its own USB stack, instead of that of the original firmware. This means that some mp3 players which previously was identified as such, no longer is.

Since not all players supported by Rockbox supports the same capabilites I'm not sure what the best way is to separate them, but having everything identifying itself as Rockbox marked as a music player would be a great start.

This is the dmesg output of my first generation Apple Ipod Nano, using the Rockbox USB stack:

[75944.000042] usb 7-6: new high speed USB device using ehci_hcd and address 8
[75944.056259] hub 7-0:1.0: unable to enumerate USB device on port 6
[75947.668012] usb 7-6: new high speed USB device using ehci_hcd and address 9
[75947.814820] usb 7-6: New USB device found, idVendor=05ac, idProduct=120a
[75947.814823] usb 7-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[75947.814825] usb 7-6: Product: Rockbox media player
[75947.814827] usb 7-6: Manufacturer: Rockbox.org
[75947.814829] usb 7-6: SerialNumber: 100000000000A2700184E5AF2
[75947.814915] usb 7-6: configuration #1 chosen from 1 choice
[75947.832491] scsi14 : SCSI emulation for USB Mass Storage devices
[75947.840023] usb-storage: device found at 9
[75947.840026] usb-storage: waiting for device to settle before scanning
[75952.841427] usb-storage: device scan complete
[75952.843673] scsi 14:0:0:0: Direct-Access     SST55LD0 19K-45-C-MWE     ADBA PQ: 0 ANSI: 4
[75952.865038] sd 14:0:0:0: [sdg] 7999487 512-byte hardware sectors: (4.09 GB/3.81 GiB)
[75952.868408] sd 14:0:0:0: [sdg] Write Protect is off
[75952.868410] sd 14:0:0:0: [sdg] Mode Sense: 0b 00 00 08
[75952.868413] sd 14:0:0:0: [sdg] Assuming drive cache: write through
[75952.883036] sd 14:0:0:0: [sdg] 7999487 512-byte hardware sectors: (4.09 GB/3.81 GiB)
[75952.886410] sd 14:0:0:0: [sdg] Write Protect is off
[75952.886413] sd 14:0:0:0: [sdg] Mode Sense: 0b 00 00 08
[75952.886415] sd 14:0:0:0: [sdg] Assuming drive cache: write through
[75952.886418]  sdg: sdg1 sdg2
[75952.892093] sd 14:0:0:0: [sdg] Attached SCSI removable disk
[75952.892159] sd 14:0:0:0: Attached scsi generic sg7 type 0
[75953.886557] FAT: utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!

(It's possible to work around this using a .is_audio_player file of course)
Comment 1 Danny Kukawka 2009-03-18 08:10:42 UTC
1) I guess this can only work for devices with a USB stack?!
2) I'm not sure if hal-info would be the correct place to put this info to. Let me explain why:
2.1) We don't know which devices are supported by rockbox (means: we don't know the USB ids).
2.2) We don't know which audio formats are supported by different rockbox releases etc.

This all would make it hard to maintain such a list in a fdi file which is part of hal-info. 

It would be better if the rockbox developer would provide and maintain such a list outside of HAL (e.g. provide it via the project page and force the user to install the latest rockbox-hal-info package if they update their player with a recent firmware) as also some other projects do (libmtp, libgphoto2 ...), since they have all the knowledge about the capabilities of the different devices and releases.
Comment 2 Sven Arvidsson 2009-03-21 16:07:50 UTC
Those are all excellent points. I will file a bug with Rockbox instead.

I guess this can be resolved as NOTOURBUG?
Comment 3 Jonas Häggqvist 2009-06-30 18:32:37 UTC
Just a note, Rockbox devices (using our own USB stack) can be recognised by the following 2 values:
iManufacturer = "Rockbox.org"
iProduct = "Rockbox media player"

These will be set for all Rockbox devices using the USB stack, so it should be pretty easy to match this.
Comment 4 Jonas Häggqvist 2009-06-30 18:36:34 UTC
Furthermore, we (I'm a Rockbox committer) could add the version or revision number if that made the job easier, regarding codec support.

I don't think it'd be feasible for a small project like Rockbox to maintain hal-info packages and require users to install them. The result would probably be that it won't happen.
Comment 5 Bastien Nocera 2010-03-25 09:06:55 UTC
*** Bug 22569 has been marked as a duplicate of this bug. ***
Comment 6 Bastien Nocera 2010-03-25 11:04:09 UTC
Moving to media-player-info.

Could the Rockbox people please come up with a .mpi file for use in
media-player-info that would handle Rockbox players?
Comment 7 Martin Pitt 2010-03-25 13:45:38 UTC
So, we need

 (1) A way to identify the player. I assume this is not possible with the usual vendor/product IDs, but rather some product names, serial number patterns, or something else. The output of

   udevadm info --attribute-walk --name=/dev/sdb1

(or whatever the device is) should be helpful for this.

 (2) A list of supported input/ouput formats

 (3) (possibly) The list of directories where rockbox devices store their music in.
Comment 8 Sven Arvidsson 2010-04-02 14:30:36 UTC
My only Rockbox player is dead and gone, but maybe Jonas can provide the needed information?
Comment 9 Jonas Häggqvist 2010-04-28 05:22:46 UTC
(3)
Rockbox does not dictate any kind of storage mechanism, so music can be anywhere. You could argue to exclude /.rockbox, which holds Rockbox system files, plugins etc. and might in theory include sound files for games in the future (but doesn't right now, to my knowledge).

(2)
I'm not sure what you mean by output formats? The full list of supported sound codecs is here:

http://www.rockbox.org/wiki/SoundCodecs#Current_Status (new codecs added occasionally)

Currently:
Lossy:
- MPEG Layer 1,2,3 audio
- Ogg/vorbis
- Musepack
- A/52 (AC3)
- AAC (MP4)
- WMA (standard)
- ADX
- Speex
- Realaudio/Cook
- Realaudio/ATRAC3
- Realaudio/AC3
- Realaudio/AAC
- ATRAC3 (OMA container)
- ATRAC3 (WAV container)
Lossless:
- WAV (PCM, ADPCM)
- AIFF (PCM, ADPCM)
- FLAC
- ALAC
- Wavpack
- Shorten
- Monkey's Audio
Other:
- SID
- MOD
- NSF, NSFE
- SPC
- MIDI
- GBS
- SAP


(1)

Presumably you'll want to match against this:
    ATTRS{manufacturer}=="Rockbox.org"
    ATTRS{product}=="Rockbox media player"

Full output below:

rasher@gaia:~$ /sbin/udevadm info --attribute-walk --name=/dev/sda1

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0/host1/target1:0:0/1:0:0:0/block/sda/sda1':
    KERNEL=="sda1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="62"
    ATTR{size}=="15606578"
    ATTR{alignment_offset}=="0"
    ATTR{stat}=="     426    15888    21597     6148        0        0        0        0        0     2944     6148"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0/host1/target1:0:0/1:0:0:0/block/sda':
    KERNELS=="sda"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="1"
    ATTRS{ro}=="0"
    ATTRS{size}=="15708160"
    ATTRS{alignment_offset}=="0"
    ATTRS{capability}=="53"
    ATTRS{stat}=="     505    16179    24557     9080        0        0        0        0        0     3352     9080"
    ATTRS{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0/host1/target1:0:0/1:0:0:0':
    KERNELS=="1:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="Rockbox "
    ATTRS{model}=="Internal Storage"
    ATTRS{rev}=="0.00"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x265"
    ATTRS{iodone_cnt}=="0x265"
    ATTRS{ioerr_cnt}=="0x0"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0/host1/target1:0:0':
    KERNELS=="target1:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0/host1':
    KERNELS=="host1"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6/1-6:1.0':
    KERNELS=="1-6:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v0781p7421d0100dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="0"

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1/1-6':
    KERNELS=="1-6"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 2"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="5396"
    ATTRS{idVendor}=="0781"
    ATTRS{idProduct}=="7421"
    ATTRS{bcdDevice}=="0100"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="7"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Rockbox.org"
    ATTRS{product}=="Rockbox media player"
    ATTRS{serial}=="30000000000000000A4B4323607060BF4"

  looking at parent device '/devices/pci0000:00/0000:00:10.3/usb1':
    KERNELS=="usb1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="137"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.32-trunk-686 ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:10.3"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:10.3':
    KERNELS=="0000:00:10.3"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x1106"
    ATTRS{device}=="0x3104"
    ATTRS{subsystem_vendor}=="0x1043"
    ATTRS{subsystem_device}=="0x80a1"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="21"
    ATTRS{local_cpus}=="ffffffff"
    ATTRS{local_cpulist}=="0-31"
    ATTRS{modalias}=="pci:v00001106d00003104sv00001043sd000080A1bc0Csc03i20"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

rasher@gaia:~$
Comment 10 Jonas Häggqvist 2010-04-28 06:12:49 UTC
Just to make this clear - the above is true only for the players that use our own software USB stack. Players with dedicated USB hardware bridges or where we don't yet have the necessary drivers in place cannot be detected through these means for obvious reasons.

If you wish to detect these, it gets slightly trickier. To detect them, looking for /.rockbox/rockbox-info.txt should do, which also includes the player name. However, the oldest of these only support MPEG Layer1,2,3 and PCM WAV.

Also, nearly all players (except for those old players) support pre-scaled MPEG2 video as detailed by http://www.rockbox.org/wiki/PluginMpegplayer.

If you have more questions, feel free to post on http://cool.haxx.se/mailman/listinfo/rockbox-dev
Comment 11 Martin Pitt 2010-04-29 09:34:12 UTC
That'll do nicely, thanks!
Comment 12 Martin Pitt 2010-04-29 23:18:59 UTC
Thanks! I did my best to find the corresponding MIME types for all those formats (some less popular ones don't seem to have registered MIME types, so I omitted them): 

http://cgit.freedesktop.org/media-player-info/commit/?id=c8fcd6ffc56c5dcfd1e51dfce0cbcc6462996675

For this to work I had to make a slight extension of the udev rule geneator:

http://cgit.freedesktop.org/media-player-info/commit/?id=4df139d98be706af3c5879945a24554dadc00201

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.