Thanks to Dave O. for fixing this document.... HOW TO ADD SUPPORT FOR NEW MP3 PLAYERS The first and critical step is obtaining a Linux driver and/or utility set that supports the device. After that, follow the steps below to get it working with the DEC. HOW TO ADD MASS STORAGE DEVICES Follow these steps if the device is supported by the USB mass storage class driver. Otherwise, see HOW TO ADD OTHER DEVICES below. To see if your device is recognized: cd /opt/odin/SCS/SP/usbStorage/Devices mv usbStorage.sav usbStorage killall X # to restart the UI Now plug in your device and go to the Library/Portables screen. If you see "USB Storage Device" listed, you're in luck. If not, the usb-storage driver is having problems with the device. Look in /var/log/kern.log for clues. For it to work on the DEC, it must be successfully mapped to a SCSI disk device file (e.g. /dev/sda1) and be mountable read-write. Assuming it works, you can create a descriptor file that is unique to your device so the UI will display the real name of your device instead of "USB Storage Device". In the same directory as above, copy an existing file and rename it. The name should be composed of 8 hexadecimal digits where the first 4 digits are the USB vendor ID and the next 4 digits are the USB product ID (see below for how to determine this number). For example: 07810002 refers to the SanDisk ImageMate CompactFlash card reader. Edit the file to change the name. [01/29/2007] How To Determine the USB vendor ID. With your USB device still connected, change to the /proc/scsi directory and look for a directory named usb-storage-0 (or perhaps usb-storage-1, etc.). Inside that directory you should find a file with the name of “1” (or possibly “2”, etc.) If you “cat” the contents of that file, you’ll see something like the following: $ cat 1 Host scsi1: usb-storage Vendor: CREATIVE Product: Zen Nano Plus Serial Number: 4002F9D69EC3CF87 Protocol: Transparent SCSI Transport: Bulk GUID: 041e41394002f9d69ec3cf87 ^^^^^^^^ |||||||| PhysicalDeviceGuid The last line is what you are after. The first 8 digits of the GUID are the hex numbers you are after. The above is from (not surprisingly) a Creative Zen Nano Plus. Below is from a Creative MuVo TX FM. Host scsi2: usb-storage Vendor: CREATIVE Product: MuVo TX FM Serial Number: 0002F9BB3F3B8B1B Protocol: Transparent SCSI Transport: Bulk GUID: 041e41200002f9bb3f3b8b1b Note that renaming usbStorage.sav to usbStorage will cause supported devices (i.e. devices with descriptor files) to be listed twice: one with the real name and the other with "USB Storage Device". So, you may want to rename usbStorage back to usbStorage.sav when you're done experimenting. [end new section] HOW TO ADD OTHER DEVICES For other devices, use the scriptd interface. The scriptpd is a device independent Portable Device (PD) plugin driver. It interfaces with shell scripts to provide device specific functionality. To support a new device, just provide a new set of scripts to interface to the device and provide a descriptor file to enable the scriptpd to recognize your device. Add your descriptor file(s) to /opt/odin/SCS/SP/scriptpd/Devices. The name of the file specifies an identifier string as follows: name[.options] The scriptpd uses "name" to find the scripts relative to /opt/fiji/pd. If name=xxx, then scriptpd looks in the directory /opt/fiji/pd/xxx for the scripts. The name also specifies the prefix for each of the scripts in this directory. For example: xxxProbe xxxInfo xxxWriteFileToDevice xxxDeleteFile xxxListDir xxxCreateDir (optional) xxxDeleteDir (optional; required if xxxCreateDir implemented) xxxFormatDevice (optional) Options is an optional dot (.) separated list of command line arguments that the scriptpd passes to all of the scripts. For example: rioutil.rio600.0 will configure the scriptpd to pass the "rio600 0" command line arguments to the rioutil scripts. For example: rioutilProbe rio600 0 SCRIPT GENERAL INFO All scripts should exit with status of 0 when the command completes without error. They should exit with status > 0 upon error. Normal script output should be printed to stdout. Error messages should be printed to stderr. If an optional script is not implemented as defined, do not place stubs or placeholders in the script directory. The file should not exist. SCRIPT DETAILS Probe Description Called to check if device is attached and available. Syntax Probe [options] Expected output None (ignored) Exit status 0 if device is attached and available. Otherwise, > 0. Info Description Called to get device info. Syntax Info [options] Expected output sizeKbytes= freeKbytes= writeKbytesPerSec= Exit status 0 on success. >0 on error. WriteFileToDevice Description Called to transfer a file to the device. Syntax WriteFileToDevice [options] source_file_name dest_file_name Expected output None (ignored) Exit status 0 on success. >0 on error. DeleteFile Description Called to delete a file on the device. Syntax DeleteFile [options] file_name Expected output None (ignored) Exit status 0 on success. >0 on error. ListDir Description Called to list the contents of a directory on the device. The path separator is "/". At a minimum, the root directory name of "/" must be handled. Syntax ListDir [options] directory_name Expected output file=name sizeKbytes= dir=name Notes: - Regular files are listed with a file and sizeKbytes tag. - Directories are listed with a dir tag. - One item is listed per line. - file and dir items can be listed in any order. Example: file=A short song.mp3 sizeKbytes=345 dir=My Music file=A long song.mp3 sizeKbytes=9876 Exit status 0 on success. >0 on error. CreateDir (optional) Description Called to create a directory on the device. Syntax CreateDir [options] directory_name Expected output None (ignored) Exit status 0 on success. >0 on error. DeleteDir (optional; required if CreateDir implemented) Description Called to delete a directory on the device. Syntax DeleteDir [options] directory_name Expected output None (ignored) Exit status 0 on success. >0 on error. FormatDevice (optional) Description Called to format or clear all content from device. Syntax FormatDevice [options] Expected output None (ignored) Exit status 0 on success. >0 on error.