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)
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.
Those are all excellent points. I will file a bug with Rockbox instead. I guess this can be resolved as NOTOURBUG?
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.
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.
*** Bug 22569 has been marked as a duplicate of this bug. ***
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?
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.
My only Rockbox player is dead and gone, but maybe Jonas can provide the needed information?
(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:~$
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
That'll do nicely, thanks!
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.