Royalty-Free Non-Exclusive License USB Product-ID=================================================Version 2006-06-19OBJECTIVE DEVELOPMENT Software GmbH hereby grants you the non-exclusiveright to use three USB.org vendor-ID (VID) / product-ID (PID) pairs withproducts based on Objective Development's firmware-only USB driver forAtmel AVR microcontrollers:* VID = 5824 (=0x16c0) / PID = 1500 (=0x5dc) for devices implementing noUSB device class (vendor-class devices with USB class = 0xff). Devicesusing this pair will be referred to as "VENDOR CLASS" devices.* VID = 5824 (=0x16c0) / PID = 1503 (=0x5df) for HID class devices(excluding mice and keyboards). Devices using this pair will be referredto as "HID CLASS" devices.* VID = 5824 (=0x16c0) / PID = 1505 (=0x5e1) for CDC class modem devicesDevices using this pair will be referred to as "CDC-ACM CLASS" devices.Since the granted right is non-exclusive, the same VID/PID pairs may beused by many companies and individuals for different products. To avoidconflicts, your device and host driver software MUST adhere to the rulesoutlined below.OBJECTIVE DEVELOPMENT Software GmbH has licensed these VID/PID pairs fromWouter van Ooijen (see www.voti.nl), who has licensed the VID from the USBImplementers Forum, Inc. (see www.usb.org). The VID is registered for thecompany name "Van Ooijen Technische Informatica".RULES AND RESTRICTIONS======================(1) The USB device MUST provide a textual representation of themanufacturer and product identification. The manufacturer identificationMUST be available at least in USB language 0x0409 (English/US).(2) The textual manufacturer identification MUST contain either an Internetdomain name (e.g. "mycompany.com") registered and owned by you, or ane-mail address under your control (e.g. "myname@gmx.net"). You can embedthe domain name or e-mail address in any string you like, e.g. "ObjectiveDevelopment http://www.obdev.at/avrusb/".(3) You are responsible for retaining ownership of the domain or e-mailaddress for as long as any of your products are in use.(4) You may choose any string for the textual product identification, aslong as this string is unique within the scope of your textual manufactureridentification.(5) Matching of device-specific drivers MUST be based on the textualmanufacturer and product identification in addition to the usual VID/PIDmatching. This means that operating system features which are based onVID/PID matching only (e.g. Windows kernel level drivers, automatic actionswhen the device is plugged in etc) MUST NOT be used. The driver matchingMUST be a comparison of the entire strings, NOT a sub-string match. ForCDC-ACM CLASS devices, a generic class driver should be used and thematching is based on the USB device class.(6) The extent to which VID/PID matching is allowed for non device-specificdrivers or features depends on the operating system and particular VID/PIDpair used:* Mac OS X, Linux, FreeBSD and other Unixes: No VID/PID matching isrequired and hence no VID/PID-only matching is allowed at all.* Windows: The operating system performs VID/PID matching for the kernellevel driver. You are REQUIRED to use libusb-win32 (seehttp://libusb-win32.sourceforge.net/) as the kernel level driver forVENDOR CLASS devices. HID CLASS devices all use the generic HID classdriver shipped with Windows, except mice and keyboards. You thereforeMUST NOT use any of the shared VID/PID pairs for mice or keyboards.CDC-ACM CLASS devices require a ".inf" file which matches on the VID/PIDpair. This ".inf" file MUST load the "usbser" driver to configure thedevice as modem (COM-port).(7) OBJECTIVE DEVELOPMENT Software GmbH disclaims all liability for anyproblems which are caused by the shared use of these VID/PID pairs. Youhave been warned that the sharing of VID/PID pairs may cause problems. Ifyou want to avoid them, get your own VID/PID pair for exclusive use.HOW TO IMPLEMENT THESE RULES============================The following rules are for VENDOR CLASS and HID CLASS devices. CDC-ACMCLASS devices use the operating system's class driver and don't need acustom driver.The host driver MUST iterate over all devices with the given VID/PIDnumbers in their device descriptors and query the string representation forthe manufacturer name in USB language 0x0409 (English/US). It MUST comparethe ENTIRE string with your textual manufacturer identification chosen in(2) above. A substring search for your domain or e-mail address is NOTacceptable. The driver MUST NOT touch the device (other than querying thedescriptors) unless the strings match.For all USB devices with matching VID/PID and textual manufactureridentification, the host driver must query the textual productidentification and string-compare it with the name of the product it cancontrol. It may only initialize the device if the product matches exactly.Objective Development provides examples for these matching rules with the"PowerSwitch" project (using libusb) and with the "Automator" project(using Windows calls on Windows and libusb on Unix).Technical Notes:================Sharing the same VID/PID pair among devices is possible as long as ALLdrivers which match the VID/PID also perform matching on the textualidentification strings. This is easy on all operating systems exceptWindows, since Windows establishes a static connection between the VID/PIDpair and a kernel level driver. All devices with the same VID/PID pair musttherefore use THE SAME kernel level driver.We therefore demand that you use libusb-win32 for VENDOR CLASS devices.This is a generic kernel level driver which allows all types of USB accessfor user space applications. This is only a partial solution of theproblem, though, because different device drivers may come with differentversions of libusb-win32 and they may not work with the libusb version ofthe respective other driver. You are therefore encouraged to test yourdriver against a broad range of libusb-win32 versions. Do not use newfeatures in new versions, or check for their existence before you use them.When a new libusb-win32 becomes available, make sure that your driver iscompatible with it.For HID CLASS devices it is necessary that all those devices bind to thesame kernel driver: Microsoft's generic USB HID driver. This is true forall HID devices except those with a specialized driver. Currently, the onlyHIDs with specialized drivers are mice and keyboards. You therefore MUSTNOT use a shared VID/PID with mouse and keyboard devices.Sharing the same VID/PID among different products is unusual and probablyviolates the USB specification. If you do it, you do it at your own risk.To avoid possible incompatibilities, we highly recommend that you get yourown VID/PID pair if you intend to sell your product. ObjectiveDevelopment's commercial licenses for AVR-USB include a PID forunrestricted exclusive use.