PyUSB - USB Access from Python
==============================

The PyUSB module provides Python with easy access to the host
machine's Universal Serial Bus (USB) system.  Although not yet
complete, PyUSB does provide a core set of functionality around which
useful applications can be developed.

As with most Python modules, PyUSB's documentation is based on Python
doc strings and can therefore be manipulated by tools such as pydoc.

PyUSB was developed and tested on the Slackware GNU/Linux
distribution and Windows XP Professional. Some testing has been done on Ubuntu,
Mac OS X and FreeBSD.

If you have any question about PyUSB, you can contact the author at
wander (dot) lairson (at) gmail (dot) com.

Installing PyUSB on GNU/Linux Systems
=====================================

These instructions are for Debian-based systems.  Instructions for
other flavors of GNU/Linux should be similar.  

You will first need to install the following packages:

1) python (PyUSB is useless without it)
2) gcc (the compiler, linker, etc.)
3) python-dev (includes header files needed to compile PyUSB)
4) libusb-dev (C library upon which PyUSB is based)

For example, the command

sudo apt-get install python gcc python-dev libusb-dev

should install all these packages on most Debian-based systems with
access to the proper package repositories.

Once the above packages are installed, you can build and install PyUSB
with the command

python setup.py install

run as root from within the same directory as this README file.

Installing PyUSB on Windows
===========================

These instructions are for installing PyUSB in a Cygwin environment.
See the end of this section for notes on installing in a Visual C++
environment.

You will first need to install the following software:

1) Cygwin: A Linux-like environment for Windows available from
http://www.cygwin.com.  Be sure to include GCC and Python with the
Cygwin installation.

2) libusb-win32: a Windows version of the libusb C library available
from http://libusb-win32.sourceforge.net.

From within a Cygwin terminal, copy the libusb.a file from the
libusb-win32 lib/ directory to $(CYGWINDIR)/usr/lib/, and copy the
usb.h file from the libusb-win32 include/ directory to
$(CYGWINDIR)/usr/include/.  You can build and install PyUSB with the
command

python setup.py install

run from within the same directory as this README file.

To build PyUSB using Visual C++, use Python's distutils tool, which
might request that .NET SDK Framework be installed first.
Alternatively, you can use the Visual C++ .NET 2005 project solution
included in the same directory as this README file.  In this case, you
will need to manually change the project settings to include the
Python and libusb-win32 headers and libraries in the Visual C++ path.

USAGE
=====

This Python program is an example of how PyUSB can be used.

#
# Open a device, look at the alternate interfaces, use the device, and
# then close the connection.
#

import usb                 # import the usb module

bus = usb.busses()         # get a list of all available busses

dev = bus[0].devices[0]    # choose the first device on the first bus

handle = dev.open()        # open the device

for alt in dev.configurations[0].interfaces[0]:
    print alt              # look at the alternate settings.

handle.setConfiguration(0) # choose the first configuration

handle.claimInterface(0)   # choose the first interface

### Use the device here. ###

handle.releaseInterface()  # also called automatically on __del__


TODO/ROADMAP
============

- more tests
- more samples
- better documentation
- utility functions to find devices


ACKNOWLEDGEMENTS
================

Thanks to the following people for their help and contributions to the
PyUSB project.  Where possible, there contributions are noted in the
source code. 

- Damian Staniforth
- Brenno Diegoli
- Israel Florentino
- Xiaofan Chen
- Mario Olimpio de Menezes
- Renato Manzan
- Ray Schumacher
- Mark Rages
- James Barabas
- Andrew Rogers
- Juha Torkkel
- Josh Lifton
- David Merrill
- Srikanth Jandhyala
- Alexander Krause
- Yael Maguire
- Lucio Torre
- Simeon Miteff

PS: this great README file was written by Josh Lifton... :-)
