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