This is the Readme file for the directory "examples" of AVR-USB, a firmware-
only USB driver for AVR microcontrollers.

WHAT IS IN THIS DIRECTORY?
==========================
This directory contains examples which are mostly for educational purposes.
Examples can be device firmware only, host software only or both. Here is
a summary:

custom-class
  A custom class device with host software based on libusb. It demonstrates
  the straight forward way of sending small amounts of data to a device and
  receiving data from the device. It does NOT demonstrate how to send large
  amounts of data to the device or how to receive data generated on the fly
  by the device (how to use usbFunctionWrite() and usbFunctionRead()). See
  the hid-data example for how usbFunctionWrite() and usbFunctionRead() are
  used.

hid-custom-rq
  This example implements the same functionality as the custom-class example
  above, but declares the device as HID. This prevents the "give me a driver
  CD" dialog on Windows. The device can still be controlled with libusb as in
  the previous example (on Windows, the filter version of libusb-win32 must
  be installed). In addition to the features presented in custom-class, this
  example demonstrates how a HID class device is defined.

hid-mouse
  This example implements a mouse device. No host driver is required since
  today's operating systems have drivers for USB mice built-in. It
  demonstrates how a real-world HID class device is implemented and how
  interrupt-in endpoints are used.

hid-data
  This example demonstrates how the HID class can be misused to transfer
  arbitrary data over HID feature reports. This technique is of great value
  on Windows because no driver DLLs are needed (the hid-custom-rq example
  still requires the libusb-win32 DLL, although it may be in the program's
  directory). The host side application requires no installation, it can
  even be started directly from a CD. This example also demonstrates how
  to transfer data using usbFunctionWrite() and usbFunctionRead().

usbtool
  This is a general purpose development and debugging tool for USB devices.
  You can use it during development of your device to test various requests
  without special test programs. But it is also an example how all the
  libusb API functions are used.

More information about each example can be found in the Readme file in the
respective directory.

Hardware dependencies of AVR code has been kept at a minimum. All examples
should work on any AVR chip which has enough resources to run the driver.
Makefile and usbconfig.h have been configured for the metaboard hardware (see
http://www.obdev.at/goto.php?t=metaboard for details). Edit the target
device, fuse values, clock rate and programmer in Makefile and the I/O pins
dedicated to USB in usbconfig.h.


WHAT IS NOT DEMONSTRATED IN THESE EXAMPLES?
===========================================
These examples show only the most basic functionality. More elaborate
examples and real world applications showing more features of the driver are
available at http://www.obdev.at/avrusb/projects.html. Most of these
features are described in our documentation wiki at
http://www.obdev.at/goto.php?t=avrusb-wiki.

To mention just a few:

Using RC oscillator for system clock
  The 12.8 MHz and 16.5 MHz modules of AVR-USB have been designed to cope
  with clock rate deviations up to 1%. This allows an RC oscillator to be
  used. Since the AVR's RC oscillator has a factory precision of only 10%,
  it must be calibrated to an external reference. The EasyLogger example
  shows how this can be done.

Dynamically generated descriptors
  Sometimes you want to implement different typtes of USB device depending
  on a jumper or other condition. AVR-USB has a very flexible interface for
  providing USB descriptors. See AVR-Doper for how to provide descriptors
  at runtime.

Virtual COM port
  Some people prefer a virtual serial interface to communicate with their
  device. We strongly discourage this method because it does things
  forbidden by the USB specification. If you still want to go this route,
  see AVR-CDC.

Implementing suspend mode
  AVR-USB does not implement suspend mode. This means that the device does
  not reduce power consumption when the host goes into sleep mode. Device
  firmware is free to implement suspend mode, though. See USB2LPT for an
  example.

The projects mentioned above can best be found on

    http://www.obdev.at/avrusb/prjall.html

where all projects are listed.

----------------------------------------------------------------------------
(c) 2008 by OBJECTIVE DEVELOPMENT Software GmbH.
http://www.obdev.at/
