]>
Commit | Line | Data |
---|---|---|
ec1bef8e | 1 | Royalty-Free Non-Exclusive Use of USB Product-IDs |
2 | ================================================= | |
3 | ||
4 | Version 2009-04-13 | |
5 | ||
6 | Strictly speaking, this is not a license. You can't give a license to use | |
7 | a simple number (such as e.g. 1500) for any purpose. This is a set of rules | |
8 | which should make it possible to build USB devices without the requirement | |
9 | for individual USB IDs. If you break one of the rules, you will run into | |
10 | technical problems sooner or later, but you don't risk legal trouble. | |
11 | ||
12 | ||
13 | OBJECTIVE DEVELOPMENT Software GmbH hereby grants you the non-exclusive | |
14 | right to use four USB.org vendor-ID (VID) / product-ID (PID) pairs with | |
15 | products based on Objective Development's firmware-only USB driver for | |
16 | Atmel AVR microcontrollers: | |
17 | ||
18 | * VID = 5824 (=0x16c0) / PID = 1500 (=0x5dc) for devices implementing no | |
19 | USB device class (vendor-class devices with USB class = 0xff). Devices | |
20 | using this pair will be referred to as "VENDOR CLASS" devices. | |
21 | ||
22 | * VID = 5824 (=0x16c0) / PID = 1503 (=0x5df) for HID class devices | |
23 | (excluding mice and keyboards). Devices using this pair will be referred | |
24 | to as "HID CLASS" devices. | |
25 | ||
26 | * VID = 5824 (=0x16c0) / PID = 1505 (=0x5e1) for CDC class modem devices | |
27 | Devices using this pair will be referred to as "CDC-ACM CLASS" devices. | |
28 | ||
29 | * VID = 5824 (=0x16c0) / PID = 1508 (=0x5e4) for MIDI class devices | |
30 | Devices using this pair will be referred to as "MIDI CLASS" devices. | |
31 | ||
32 | Since the granted right is non-exclusive, the same VID/PID pairs may be | |
33 | used by many companies and individuals for different products. To avoid | |
34 | conflicts, your device and host driver software MUST adhere to the rules | |
35 | outlined below. | |
36 | ||
37 | OBJECTIVE DEVELOPMENT Software GmbH has obtained these VID/PID pairs from | |
38 | Wouter van Ooijen (see www.voti.nl) for exclusive disposition. Wouter van | |
39 | Ooijen has obtained the VID from the USB Implementers Forum, Inc. | |
40 | (see www.usb.org). The VID is registered for the company name | |
41 | "Van Ooijen Technische Informatica". | |
42 | ||
43 | ||
44 | RULES AND RESTRICTIONS | |
45 | ====================== | |
46 | ||
47 | (1) The USB device MUST provide a textual representation of the | |
48 | manufacturer and product identification. The manufacturer identification | |
49 | MUST be available at least in USB language 0x0409 (English/US). | |
50 | ||
51 | (2) The textual manufacturer identification MUST contain either an Internet | |
52 | domain name (e.g. "mycompany.com") registered and owned by you, or an | |
53 | e-mail address under your control (e.g. "myname@gmx.net"). You can embed | |
54 | the domain name or e-mail address in any string you like, e.g. "Objective | |
55 | Development http://www.obdev.at/vusb/". | |
56 | ||
57 | (3) You are responsible for retaining ownership of the domain or e-mail | |
58 | address for as long as any of your products are in use. | |
59 | ||
60 | (4) You may choose any string for the textual product identification, as | |
61 | long as this string is unique within the scope of your textual manufacturer | |
62 | identification. | |
63 | ||
64 | (5) Matching of device-specific drivers MUST be based on the textual | |
65 | manufacturer and product identification in addition to the usual VID/PID | |
66 | matching. This means that operating system features which are based on | |
67 | VID/PID matching only (e.g. Windows kernel level drivers, automatic actions | |
68 | when the device is plugged in etc) MUST NOT be used. The driver matching | |
69 | MUST be a comparison of the entire strings, NOT a sub-string match. For | |
70 | CDC-ACM CLASS and MIDI CLASS devices, a generic class driver should be used | |
71 | and the matching is based on the USB device class. | |
72 | ||
73 | (6) The extent to which VID/PID matching is allowed for non device-specific | |
74 | drivers or features depends on the operating system and particular VID/PID | |
75 | pair used: | |
76 | ||
77 | * Mac OS X, Linux, FreeBSD and other Unixes: No VID/PID matching is | |
78 | required and hence no VID/PID-only matching is allowed at all. | |
79 | ||
80 | * Windows: The operating system performs VID/PID matching for the kernel | |
81 | level driver. You are REQUIRED to use libusb-win32 (see | |
82 | http://libusb-win32.sourceforge.net/) as the kernel level driver for | |
83 | VENDOR CLASS devices. HID CLASS devices all use the generic HID class | |
84 | driver shipped with Windows, except mice and keyboards. You therefore | |
85 | MUST NOT use any of the shared VID/PID pairs for mice or keyboards. | |
86 | CDC-ACM CLASS devices require a ".inf" file which matches on the VID/PID | |
87 | pair. This ".inf" file MUST load the "usbser" driver to configure the | |
88 | device as modem (COM-port). | |
89 | ||
90 | (7) OBJECTIVE DEVELOPMENT Software GmbH disclaims all liability for any | |
91 | problems which are caused by the shared use of these VID/PID pairs. You | |
92 | have been warned that the sharing of VID/PID pairs may cause problems. If | |
93 | you want to avoid them, get your own VID/PID pair for exclusive use. | |
94 | ||
95 | ||
96 | HOW TO IMPLEMENT THESE RULES | |
97 | ============================ | |
98 | ||
99 | The following rules are for VENDOR CLASS and HID CLASS devices. CDC-ACM | |
100 | CLASS and MIDI CLASS devices use the operating system's class driver and | |
101 | don't need a custom driver. | |
102 | ||
103 | The host driver MUST iterate over all devices with the given VID/PID | |
104 | numbers in their device descriptors and query the string representation for | |
105 | the manufacturer name in USB language 0x0409 (English/US). It MUST compare | |
106 | the ENTIRE string with your textual manufacturer identification chosen in | |
107 | (2) above. A substring search for your domain or e-mail address is NOT | |
108 | acceptable. The driver MUST NOT touch the device (other than querying the | |
109 | descriptors) unless the strings match. | |
110 | ||
111 | For all USB devices with matching VID/PID and textual manufacturer | |
112 | identification, the host driver must query the textual product | |
113 | identification and string-compare it with the name of the product it can | |
114 | control. It may only initialize the device if the product matches exactly. | |
115 | ||
116 | Objective Development provides examples for these matching rules with the | |
117 | "PowerSwitch" project (using libusb) and with the "Automator" project | |
118 | (using Windows calls on Windows and libusb on Unix). | |
119 | ||
120 | ||
121 | Technical Notes: | |
122 | ================ | |
123 | ||
124 | Sharing the same VID/PID pair among devices is possible as long as ALL | |
125 | drivers which match the VID/PID also perform matching on the textual | |
126 | identification strings. This is easy on all operating systems except | |
127 | Windows, since Windows establishes a static connection between the VID/PID | |
128 | pair and a kernel level driver. All devices with the same VID/PID pair must | |
129 | therefore use THE SAME kernel level driver. | |
130 | ||
131 | We therefore demand that you use libusb-win32 for VENDOR CLASS devices. | |
132 | This is a generic kernel level driver which allows all types of USB access | |
133 | for user space applications. This is only a partial solution of the | |
134 | problem, though, because different device drivers may come with different | |
135 | versions of libusb-win32 and they may not work with the libusb version of | |
136 | the respective other driver. You are therefore encouraged to test your | |
137 | driver against a broad range of libusb-win32 versions. Do not use new | |
138 | features in new versions, or check for their existence before you use them. | |
139 | When a new libusb-win32 becomes available, make sure that your driver is | |
140 | compatible with it. | |
141 | ||
142 | For HID CLASS devices it is necessary that all those devices bind to the | |
143 | same kernel driver: Microsoft's generic USB HID driver. This is true for | |
144 | all HID devices except those with a specialized driver. Currently, the only | |
145 | HIDs with specialized drivers are mice and keyboards. You therefore MUST | |
146 | NOT use a shared VID/PID with mouse and keyboard devices. | |
147 | ||
148 | Sharing the same VID/PID among different products is unusual and probably | |
149 | violates the USB specification. If you do it, you do it at your own risk. | |
150 | ||
151 | To avoid possible incompatibilities, we highly recommend that you get your | |
152 | own VID/PID pair if you intend to sell your product. Objective | |
153 | Development's commercial licenses for V-USB include a PID for | |
154 | unrestricted exclusive use. |