Copyright (C) 1999, 2000 Bruce Tenison
Portions Copyright (C) 1999, 2000 David Nelson
Thanks to David Nelson for guidance and the usage of the scanner.txt
and scanner.c files to model our driver and this informative file.

Mar. 2, 2000

CHANGES

- Initial Revision


OVERVIEW

This README will address issues regarding how to configure the kernel
to access a RIO 500 mp3 player.  
Before I explain how to use this to access the Rio500 please be warned:

W A R N I N G:
--------------

Please note that this software is still under development.  The authors
are in no way responsible for any damage that may occur, no matter how
inconsequential.

It seems that the Rio has a problem when sending .mp3 with low batteries.
I suggest when the batteries are low and want to transfer stuff that you
replace it with a fresh one. In my case, what happened is I lost two 16kb
blocks (they are no longer usable to store information to it). But I don't
know if thats normal or not. It could simply be a problem with the flash 
memory.

In an extreme case, I left my Rio playing overnight and the batteries wore 
down to nothing and appear to have corrupted the flash memory. My RIO 
needed to be replaced as a result.  Diamond tech support is aware of the 
problem.  Do NOT allow your batteries to wear down to nothing before 
changing them.  It appears RIO 500 firmware does not handle low battery 
power well at all. 

On systems with OHCI controllers, the kernel OHCI code appears to have 
power on problems with some chipsets.  If you are having problems 
connecting to your RIO 500, try turning it on first and then plugging it 
into the USB cable.  

Contact information:
--------------------

   The main page for the project is hosted at sourceforge.net in the following
   address: http://rio500.sourceforge.net You can also go to the sourceforge
   project page at: http://sourceforge.net/project/?group_id=1944 There is 
   also a mailing list: rio500-users@lists.sourceforge.net

Authors:
-------

Most of the code was written by Cesar Miquel <miquel@df.uba.ar>. Keith 
Clayton <kclayton@jps.net> is incharge of the PPC port and making sure
things work there. Bruce Tenison <btenison@dibbs.net> is adding support
for .fon files and also does testing. The program will mostly sure be
re-written and Pete Ikusz along with the rest will re-design it. I would
also like to thank Tri Nguyen <tmn_3022000@hotmail.com> who provided use 
with some important information regarding the communication with the Rio.

ADDITIONAL INFORMATION and Userspace tools

http://rio500.sourceforge.net/


REQUIREMENTS

A host with a USB port.  Ideally, either a UHCI (Intel) or OHCI
(Compaq and others) hardware port should work.

A Linux development kernel (2.3.x) with USB support enabled or a
backported version to linux-2.2.x.  See http://www.linux-usb.org for
more information on accomplishing this.

A Linux kernel with RIO 500 support enabled.

'lspci' which is only needed to determine the type of USB hardware
available in your machine.

CONFIGURATION

Using `lspci -v`, determine the type of USB hardware available.

  If you see something like:

    USB Controller: ......
    Flags: .....
    I/O ports at ....

  Then you have a UHCI based controller.

  If you see something like:

     USB Controller: .....
     Flags: ....
     Memory at .....

  Then you have a OHCI based controller.

Using `make menuconfig` or your preferred method for configuring the
kernel, select 'Support for USB', 'OHCI/UHCI' depending on your
hardware (determined from the steps above), 'USB Diamond Rio500 support', and
'Preliminary USB device filesystem'.  Compile and install the modules
(you may need to execute `depmod -a` to update the module
dependencies).

Add a device for the USB rio500:
  `mknod /dev/usb/rio500 c 180 64`

Set appropriate permissions for /dev/usb/rio500 (don't forget about
group and world permissions).  Both read and write permissions are
required for proper operation.

Load the appropriate modules (if compiled as modules):

  OHCI:
    modprobe usbcore
    modprobe usb-ohci
    modprobe rio500

  UHCI:
    modprobe usbcore
    modprobe usb-uhci  (or uhci)
    modprobe rio500

That's it.  The Rio500 Utils at: http://rio500.sourceforge.net should
be able to access the rio500.

BUGS

If you encounter any problems feel free to drop me an email.

Bruce Tenison
btenison@dibbs.net

