summaryrefslogtreecommitdiff
path: root/usbutils/usbutils-0.11+cvs20041108/usbutils-0.11+cvs20041108.patch
blob: 1898eaef4ba2e00175e206d67b5e1c6de1dfc809 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668
4669
4670
4671
4672
4673
4674
4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924
4925
4926
4927
4928
4929
4930
4931
4932
4933
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066
5067
5068
5069
5070
5071
5072
5073
5074
5075
5076
5077
5078
5079
5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125
5126
5127
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189
5190
5191
5192
5193
5194
5195
5196
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404
5405
5406
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434
5435
5436
5437
5438
5439
5440
5441
5442
5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458
5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654
5655
5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734
5735
5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859
5860
5861
5862
5863
5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946
5947
5948
5949
5950
5951
5952
5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070
6071
6072
6073
6074
6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277
6278
6279
6280
6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
6318
6319
6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817

#
# Patch managed by http://www.holgerschurig.de/patcher.html
#

--- usbutils-0.11/ChangeLog~usbutils-0.11+cvs20041108
+++ usbutils-0.11/ChangeLog
@@ -1,3 +1,30 @@
+2004-10-20 David Brownell <dbrownell@users.sourceforge.net>
+	* lsusb.c: minor formatting updates; add a warning when those HID
+	  descriptors aren't available.
+
+2004-10-20 Aurelien Jarno <aurelien@aurel32.net> 
+	* lsusb.c: bugfixes for reading HID descriptors
+
+2004-10-15 David Brownell <dbrownell@users.sourceforge.net>
+	* lsusb.c: USB 2.0 updates for dual-speed and OTG devices, hubs.
+	  Display all descriptors in the right sequence, and dump ones
+	  we don't (yet) recognize.  Minor cleanups.
+	* usb.ids: update to current version
+
+2004-02-20 Thomas Sailer  <sailer@eldrich.ee.ethz.ch>
+	Move to CVS at linux-usb.sf.net
+	Label as version 0.12.
+
+2003-12-06 Aurelien Jarno <aurelien@aurel32.net> 
+	Update Debian with libusb based version.
+
+2003-08-31 David Brownell <dbrownell@users.sourceforge.net>
+	* lsusb.c: (against 0.11) recognize CDC descriptors, USB 2.0 updates,
+	  string handling updates, 
+
+2003-??-??  Aurelien Jarno <aurelien@aurel32.net> 
+	Convert to latest libusb, supporting BSD and Darwin.
+
 2000-11-06  Thomas Sailer  <sailer@eldrich.ee.ethz.ch>
 
 	* names.c, lsusb.c: Fixup of Gunther Mayer's patch; do not export
--- usbutils-0.11/Makefile.am~usbutils-0.11+cvs20041108
+++ usbutils-0.11/Makefile.am
@@ -1,19 +1,20 @@
-SUBDIRS = libusb
+SUBDIRS =
 
 INCLUDES = 
 
 sbin_PROGRAMS = lsusb usbmodules
+sbin_SCRIPTS = update-usbids
 
-noinst_HEADERS = names.h usb.h usbdevice_fs.h devtree.h list.h usbmodules.h
+noinst_HEADERS = names.h usbdevice_fs.h devtree.h list.h usbmodules.h usbmisc.h
 
-lsusb_SOURCES = lsusb.c names.c devtree.c
+lsusb_SOURCES = lsusb.c names.c devtree.c usbmisc.c
 lsusb_LDADD = @LIBOBJS@
 
-usbmodules_SOURCES = usbmodules.c
+usbmodules_SOURCES = usbmodules.c usbmisc.c
 usbmodules_LDADD = @LIBOBJS@
 
 data_DATA = usb.ids
 
-man_MANS = lsusb.8 usbmodules.8
+man_MANS = lsusb.8 usbmodules.8 update-usbids.8
 
 EXTRA_DIST = $(man_MANS) $(data_DATA) usbutils.spec getopt.h getopt.c getopt1.c
--- usbutils-0.11/NEWS~usbutils-0.11+cvs20041108
+++ usbutils-0.11/NEWS
@@ -1 +1,2 @@
-Created :)
+Thanks to a patch from Aurelien Jarno, usbutils now uses libusb to
+access USB devices
--- usbutils-0.11/configure.in~usbutils-0.11+cvs20041108
+++ usbutils-0.11/configure.in
@@ -1,40 +1,75 @@
-AC_INIT(lsusb.c)
-AC_CANONICAL_SYSTEM
+dnl Process this file with autoconf to produce a configure script.
 
-AM_INIT_AUTOMAKE(usbutils, 0.11)
+# Initialization
+AC_INIT(Makefile.am)
 AM_CONFIG_HEADER(config.h)
 
-dnl AC_CHECK_TOOL()
+AM_INIT_AUTOMAKE(usbutils, 0.12)
 
-AC_PROG_MAKE_SET
-AC_ISC_POSIX
+# determine the system type
+AC_CANONICAL_HOST
+
+# build time sanity check...
+AM_SANITY_CHECK
+
+# checks for programs
 AC_PROG_CC
-AM_PROG_CC_STDC
-dnl AC_PROG_RANLIB
+AC_PROG_RANLIB
+AC_PROG_LN_S
+AC_PROG_INSTALL
+
+# checks for header files
+AC_HEADER_STDC
+AC_CHECK_HEADERS(getopt.h sys/ioctl.h syslog.h errno.h)
+
+# checks for typedefs, structures, and compiler characteristics
 AC_C_CONST
 AC_C_INLINE
-AC_HEADER_STDC
+AC_STRUCT_TM
 
-AC_CHECK_PROG(RANLIB, ranlib, ranlib, :)
-AC_CHECK_PROG(DLLTOOL, dlltool, dlltool, dlltool)
-AC_CHECK_PROG(AS, as, as, as, as)
-AC_CHECK_PROG(AR, ar, ar, ar, ar)
+# checks for library functions
+AC_CHECK_FUNCS([getopt_long],,[AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1])])
 
-AC_CHECK_HEADERS(getopt.h sys/ioctl.h syslog.h errno.h linux/usb.h linux/usbdevice_fs.h)
-AC_CHECK_FUNCS(getopt_long,,LIBOBJS="$LIBOBJS getopt.o getopt1.o")
+dnl checks for libusb-config
+AC_CHECK_PROG(LIBUSB_CONFIG, libusb-config, yes, no)
+if test "$LIBUSB_CONFIG" = "yes"; then
+  LIBUSB_LDFLAGS=`libusb-config --libs`
+  LIBUSB_CFLAGS=`libusb-config --cflags`
+  LIBUSB_VERSION=`libusb-config --version`
+else
+  AC_MSG_ERROR([libusb not found!])
+fi
+	  
 
 dnl set USBIDS_FILE in config.h.
 if test "x${datadir}" = 'x${prefix}/share'; then
   if test "x${prefix}" = "xNONE"; then
-    AC_DEFINE_UNQUOTED(USBIDS_FILE, "${ac_default_prefix}/share/usb.ids")
+    AC_DEFINE_UNQUOTED(USBIDS_FILE, "${ac_default_prefix}/share/usb.ids", [location of usb.ids])
   else
-    AC_DEFINE_UNQUOTED(USBIDS_FILE, "${prefix}/share/usb.ids")
+    AC_DEFINE_UNQUOTED(USBIDS_FILE, "${prefix}/share/usb.ids", [location of usb.ids])
   fi
 else
-  AC_DEFINE_UNQUOTED(USBIDS_FILE, "${datadir}/usb.ids")
+  AC_DEFINE_UNQUOTED(USBIDS_FILE, "${datadir}/usb.ids", [location of usb.ids])
 fi
 
-AC_CONFIG_SUBDIRS([libusb])
+# some extra flags
+CFLAGS="$CFLAGS -Wall $LIBUSB_CFLAGS"
+LDFLAGS="$LDFLAGS $LIBUSB_LDFLAGS"
+
+# pass flags
+AC_SUBST(CFLAGS)
+AC_SUBST(LDFLAGS)
 
-AC_SUBST(LIBOBJS)
 AC_OUTPUT([Makefile])
+
+AC_MSG_RESULT([
+
+usbutils-$VERSION is now configured for $canonical_host_type
+
+  Build:                $build
+  Host:                 $host
+  Source directory:     $srcdir
+  Installation prefix:  $prefix
+  C compiler:           $CC $CFLAGS
+  
+])
--- usbutils-0.11/lsusb.8~usbutils-0.11+cvs20041108
+++ usbutils-0.11/lsusb.8
@@ -1,4 +1,4 @@
-.TH lsusb 8 "14 September 1999" "usbutils-0.9" "Linux USB Utilities"
+.TH lsusb 8 "19 November 2003" "usbutils-0.11" "Linux USB Utilities"
 .IX lsusb
 .SH NAME
 lsusb \- list all USB devices
@@ -29,7 +29,7 @@
 Tells
 .I lsusb
 to be very verbose and display even more information (actually everything the
-PCI device is able to tell).
+USB device is able to tell).
 You must be root for this to work.
 .TP
 \fB\-s\fP [[\fIbus\fP]\fB:\fP][\fIdevnum\fP]
@@ -39,13 +39,9 @@
 .I devnum.
 Both ID's are given in hexadecimal and may be omitted.
 .TP
-\fB\-d\fP \fIvendor\fP\fB:\fP[\fIproduct\fP]
+\fB\-d\fP [\fIvendor\fP]\fB:\fP[\fIproduct\fP]
 Show only devices with the specified vendor and product ID.
-Both ID's are given in hexadecimal;
-the product ID may be omitted, but the vendor ID must be given.
-.TP
-.B \-p \fIprocpath\fP
-Use another path instead of /proc/bus/usb.
+Both ID's are given in hexadecimal.
 .TP
 .B \-D \fIdevice\fP
 Do not scan the /proc/bus/usb directory,
@@ -80,7 +76,7 @@
 
 .SH FILES
 .TP
-.B /usr/share/usb.ids
+.B /usr/share/misc/usb.ids
 A list of all known USB ID's (vendors, products, classes, subclasses and protocols).
 .TP
 .B /proc/bus/usb
--- usbutils-0.11/lsusb.c~usbutils-0.11+cvs20041108
+++ usbutils-0.11/lsusb.c
@@ -3,7 +3,8 @@
 /*
  *      lsusb.c  --  lspci like utility for the USB bus
  *
- *      Copyright (C) 1999, 2000, 2001  Thomas Sailer (sailer@ife.ee.ethz.ch)
+ *      Copyright (C) 1999, 2000, 2001, 2003
+ *        Thomas Sailer (t.sailer@alumni.ethz.ch)
  *
  *      This program is free software; you can redistribute it and/or modify
  *      it under the terms of the GNU General Public License as published by
@@ -24,57 +25,65 @@
 
 /*****************************************************************************/
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/ioctl.h>
 #include <fcntl.h>
-#include <dirent.h>
 #include <string.h>
 #include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
 #include <stdio.h>
 #include <stdarg.h>
-
-#include <linux/types.h>
-#ifdef HAVE_LINUX_USBDEVICE_FS_H
-#include <linux/usbdevice_fs.h>
-#else
-#include "usbdevice_fs.h"
-#endif
-#ifdef HAVE_LINUX_USB_H
-#include <linux/usb.h>
-#else
-#include "usb.h"
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
+#include <usb.h>
 
 #include "names.h"
 #include "devtree.h"
+#include "usbmisc.h"
 
 #define _GNU_SOURCE
 #include <getopt.h>
 
-#define CTRL_RETRIES	 50
-#define CTRL_TIMEOUT	100	/* milliseconds */
 
-#define USB_DT_CS_DEVICE	       	0x21
-#define USB_DT_CS_CONFIG	       	0x22
-#define USB_DT_CS_STRING		0x23
+/* from USB 2.0 spec and updates */
+#define USB_DT_DEVICE_QUALIFIER		0x06
+#define USB_DT_OTHER_SPEED_CONFIG	0x07
+#define USB_DT_OTG			0x09
+#define USB_DT_DEBUG			0x0a
+#define USB_DT_INTERFACE_ASSOCIATION	0x0b
+
+/* convention suggested by common class spec */
 #define USB_DT_CS_INTERFACE		0x24
 #define USB_DT_CS_ENDPOINT		0x25
 
 #define VERBLEVEL_DEFAULT 0	/* 0 gives lspci behaviour; 1, lsusb-0.9 */
 
+#define CTRL_RETRIES	 2
+#define CTRL_TIMEOUT	(5*1000)	/* milliseconds */
+
 static const char *procbususb = "/proc/bus/usb";
 static unsigned int verblevel = VERBLEVEL_DEFAULT;
 static int do_report_desc = 1;
-static int open_mode = O_RDONLY;
 
-static void dump_junk2(unsigned char *, unsigned int);
+static void dump_interface(struct usb_dev_handle *dev, struct usb_interface *interface);
+static void dump_endpoint(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, struct usb_endpoint_descriptor *endpoint);
+static void dump_audiocontrol_interface(struct usb_dev_handle *dev, unsigned char *buf);
+static void dump_audiostreaming_interface(struct usb_dev_handle *dev, unsigned char *buf);
+static void dump_midistreaming_interface(struct usb_dev_handle *dev, unsigned char *buf);
+static char *dump_comm_descriptor(struct usb_dev_handle *dev, unsigned char *buf, char *indent);
+static void dump_hid_device(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, unsigned char *buf);
+static void dump_audiostreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf);
+static void dump_midistreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf);
+static void dump_hub(char *prefix, unsigned char *p, int has_tt);
+static void dump_ccid_device(unsigned char *buf);
+
+/* ---------------------------------------------------------------------- */
+
+static unsigned int convert_le_u32 (const unsigned char *buf)
+{
+        return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24); 
+}
 
 /* ---------------------------------------------------------------------- */
 
@@ -95,66 +104,24 @@
 
 /* ---------------------------------------------------------------------- */
 
-static int usb_control_msg(int fd, u_int8_t requesttype, u_int8_t request, u_int16_t value,
-			   u_int16_t index, unsigned int size, void *data)
-{
-	struct usbdevfs_ctrltransfer ctrl;
-	int result, try;
-
-	ctrl.requesttype = requesttype;
-	ctrl.request = request;
-	ctrl.value = value;
-	ctrl.index = index;
-	ctrl.length = size;
-	ctrl.timeout = 1000;
-	ctrl.data = data;
- 	ctrl.timeout = CTRL_TIMEOUT; 
- 	try = 0;
- 	do {
- 	  	result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
- 		try++;
- 	} while (try < CTRL_RETRIES && result == -1 && errno == ETIMEDOUT);
- 	return result;
-}
-
-/* ---------------------------------------------------------------------- */
-
-static int get_string(int fd, char *buf, size_t size, u_int8_t id, u_int16_t lang)
+static int get_string(struct usb_dev_handle *dev, char* buf, size_t size, u_int8_t id)
 {
-	unsigned char b[256];
-	wchar_t w[128];
-	unsigned int i;
 	int ret;
-
-	if (size < 1)
-		return 0;
-	*buf = 0;
-	/* string ID 0 means no string */
-	if (!id || fd == -1)
-		return 0;
-
-	b[0] = b[1] = 0xbf;
-	ret = usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) | id, 0, sizeof(b), b);
-	if (ret < 0) {
-		if (open_mode == O_RDWR)
-		fprintf(stderr, "cannot get string descriptor %d, error = %s(%d)\n", id, strerror(errno), errno);
-		return 0;
-	}
-	if (ret < 2 || b[0] < 2 || b[1] != USB_DT_STRING) {
-		fprintf(stderr, "string descriptor %d invalid (%02x %02x; len=%d)\n", id, b[0], b[1], ret);
+	
+	if (id) {
+		ret = usb_get_string_simple(dev, id, buf, size);
+		if (ret <= 0) {
+			buf[0] = 0;
+			return 0;
+		}
+		else
+			return ret;
+		
+	} 
+	else {
+		buf[0] = 0;
 		return 0;
 	}
-#if 0
-	for (i = 0; i < ((b[0] - 2) / 2); i++)
-		w[i] = b[2+2*i] | (b[3+2*i] << 8);
-	w[i] = 0;
-	return wcstombs(buf, w, size);
-#else
-        for (i = 0; i < ((b[0] - 2) / 2); i++)
-                buf[i] = b[2+2*i];
-        buf[i] = 0;
-        return i;
-#endif        
 }
 
 static int get_vendor_string(char *buf, size_t size, u_int16_t vid)
@@ -231,7 +198,7 @@
 
 /* ---------------------------------------------------------------------- */
 
-static void dump_junk2(unsigned char *buf, unsigned int len)
+static void dump_bytes(unsigned char *buf, unsigned int len)
 {
 	unsigned int i;
 
@@ -256,27 +223,20 @@
  * General config descriptor dump
  */
 
-static void dump_device(int fd, unsigned char *buf, u_int16_t lang)
+static void dump_device(struct usb_dev_handle *dev, struct usb_device_descriptor *descriptor, unsigned int flags)
 {
-	unsigned int vid, pid;
 	char vendor[128], product[128];
 	char cls[128], subcls[128], proto[128];
 	char mfg[128], prod[128], serial[128];
 
-	if (buf[1] != USB_DT_DEVICE)
-		printf("  Warning: Invalid descriptor\n");
-	else if (buf[0] < 18)
-		printf("  Warning: Descriptor too short\n");
-	vid = buf[8] | (buf[9] << 8);
-	pid = buf[10] | (buf[11] << 8);
-	get_vendor_string(vendor, sizeof(vendor), vid);
-	get_product_string(product, sizeof(product), vid, pid);
-	get_class_string(cls, sizeof(cls), buf[4]);
-	get_subclass_string(subcls, sizeof(subcls), buf[4], buf[5]);
-	get_protocol_string(proto, sizeof(proto), buf[4], buf[5], buf[6]);
-	get_string(fd, mfg, sizeof(mfg), buf[14], lang);
-	get_string(fd, prod, sizeof(prod), buf[15], lang);
-	get_string(fd, serial, sizeof(serial), buf[16], lang);
+	get_vendor_string(vendor, sizeof(vendor), descriptor->idVendor);
+	get_product_string(product, sizeof(product), descriptor->idVendor, descriptor->idProduct);
+	get_class_string(cls, sizeof(cls), descriptor->bDeviceClass);
+	get_subclass_string(subcls, sizeof(subcls), descriptor->bDeviceClass, descriptor->bDeviceSubClass);
+	get_protocol_string(proto, sizeof(proto), descriptor->bDeviceClass, descriptor->bDeviceSubClass, descriptor->bDeviceProtocol);
+	get_string(dev, mfg, sizeof(mfg), descriptor->iManufacturer);
+	get_string(dev, prod, sizeof(prod), descriptor->iProduct);
+	get_string(dev, serial, sizeof(serial), descriptor->iSerialNumber);
 	printf("Device Descriptor:\n"
 	       "  bLength             %5u\n"
 	       "  bDescriptorType     %5u\n"
@@ -292,47 +252,76 @@
 	       "  iProduct            %5u %s\n"
 	       "  iSerial             %5u %s\n"
 	       "  bNumConfigurations  %5u\n",
-	       buf[0], buf[1], buf[3], buf[2], buf[4], cls, buf[5], subcls, buf[6], proto, buf[7],
-	       vid, vendor, pid, product, buf[13], buf[12], buf[14], mfg, buf[15], prod, buf[16], serial, buf[17]);
-	dump_junk(buf, "  ", 18);
+	       descriptor->bLength, descriptor->bDescriptorType, descriptor->bcdUSB >> 8, descriptor->bcdUSB & 0xff, 
+	       descriptor->bDeviceClass, cls, descriptor->bDeviceSubClass, subcls, descriptor->bDeviceProtocol, proto, 
+	       descriptor->bMaxPacketSize0, descriptor->idVendor, vendor, descriptor->idProduct, product, 
+	       descriptor->bcdDevice >> 8, descriptor->bcdDevice & 0xff, descriptor->iManufacturer, mfg,
+	       descriptor->iProduct, prod, descriptor->iSerialNumber, serial, descriptor->bNumConfigurations);
 }
 
-static void dump_config(int fd, unsigned char *buf)
+static void dump_config(struct usb_dev_handle *dev, struct usb_config_descriptor *config)
 {
-	if (buf[1] != USB_DT_CONFIG)
-		printf("  Warning: Invalid descriptor\n");
-	else if (buf[0] < 9)
-		printf("  Warning: Descriptor too short\n");
+	char cfg[128];
+	int i;
+	
+	get_string(dev, cfg, sizeof(cfg), config->iConfiguration);
 	printf("  Configuration Descriptor:\n"
 	       "    bLength             %5u\n"
 	       "    bDescriptorType     %5u\n"
 	       "    wTotalLength        %5u\n"
 	       "    bNumInterfaces      %5u\n"
 	       "    bConfigurationValue %5u\n"
-	       "    iConfiguration      %5u\n"
+	       "    iConfiguration      %5u %s\n"
 	       "    bmAttributes         0x%02x\n",
-	       buf[0], buf[1], buf[2] | (buf[3] << 8), buf[4], buf[5], buf[6], buf[7]);
-	if (buf[7] & 0x40)
+	       config->bLength, config->bDescriptorType, config->wTotalLength,
+	       config->bNumInterfaces, config->bConfigurationValue, config->iConfiguration,
+	       cfg, config->bmAttributes);
+	if (config->bmAttributes & 0x40)
 		printf("      Self Powered\n");
-	if (buf[7] & 0x20)
+	if (config->bmAttributes & 0x20)
 		printf("      Remote Wakeup\n");
-	printf("    MaxPower            %5umA\n", buf[8] * 2);
-	dump_junk(buf, "    ", 9);
+	printf("    MaxPower            %5umA\n", config->MaxPower * 2);
+
+	/* avoid re-ordering or hiding descriptors for display */
+	if (config->extralen) {
+		int		size = config->extralen;
+		unsigned char	*buf = config->extra;
+
+		while (size >= 2) {
+			if (buf[0] < 2) {
+				dump_junk("        ", buf, size);
+				break;
+			}
+			switch (buf[1]) {
+			case USB_DT_OTG:
+				/* handled separately */
+				break;
+			default:
+				/* often a misplaced class descriptor */
+				printf("    UNRECOGNIZED: ");
+				dump_bytes(buf, size);
+				break;
+			}
+			size -= buf[0];
+			buf += buf[0];
+		}
+	}
+	for (i = 0 ; i < config->bNumInterfaces ; i++)
+		dump_interface(dev, &config->interface[i]);
 }
 
-static void dump_interface(int fd, unsigned char *buf, u_int16_t lang)
+static void dump_altsetting(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface)
 {
 	char cls[128], subcls[128], proto[128];
 	char ifstr[128];
+	
+	char *buf;
+	int size, i;
 
-	if (buf[1] != USB_DT_INTERFACE)
-		printf("    Warning: Invalid descriptor\n");
-	else if (buf[0] < 9)
-		printf("    Warning: Descriptor too short\n");
-	get_class_string(cls, sizeof(cls), buf[5]);
-	get_subclass_string(subcls, sizeof(subcls), buf[5], buf[6]);
-	get_protocol_string(proto, sizeof(proto), buf[5], buf[6], buf[7]);
-	get_string(fd, ifstr, sizeof(ifstr), buf[8], lang);
+	get_class_string(cls, sizeof(cls), interface->bInterfaceClass);
+	get_subclass_string(subcls, sizeof(subcls), interface->bInterfaceClass, interface->bInterfaceSubClass);
+	get_protocol_string(proto, sizeof(proto), interface->bInterfaceClass, interface->bInterfaceSubClass, interface->bInterfaceProtocol);
+	get_string(dev, ifstr, sizeof(ifstr), interface->iInterface);
 	printf("    Interface Descriptor:\n"
 	       "      bLength             %5u\n"
 	       "      bDescriptorType     %5u\n"
@@ -343,20 +332,84 @@
 	       "      bInterfaceSubClass  %5u %s\n"
 	       "      bInterfaceProtocol  %5u %s\n"
 	       "      iInterface          %5u %s\n",
-	       buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], cls, 
-	       buf[6], subcls, buf[7], proto, buf[8], ifstr);
-	dump_junk(buf, "      ", 9);
+	       interface->bLength, interface->bDescriptorType, interface->bInterfaceNumber,
+	       interface->bAlternateSetting, interface->bNumEndpoints, interface->bInterfaceClass, cls,
+	       interface->bInterfaceSubClass, subcls, interface->bInterfaceProtocol, proto,
+	       interface->iInterface, ifstr);
+
+	/* avoid re-ordering or hiding descriptors for display */
+	if (interface->extralen)
+	{
+		size = interface->extralen;
+		buf = interface->extra;
+		while (size >= 2 * sizeof(u_int8_t))
+		{
+			if (buf[0] < 2) {
+				dump_junk("      ", buf, size);
+				break;
+			} 
+			switch (buf[1]) {
+			case USB_DT_CS_INTERFACE:
+				switch(interface->bInterfaceClass) {
+					case USB_CLASS_AUDIO:
+						switch(interface->bInterfaceSubClass) {
+							case 1:
+								dump_audiocontrol_interface(dev, buf);
+								break;
+							case 2:
+								dump_audiostreaming_interface(dev, buf);
+								break;
+							case 3:
+								dump_midistreaming_interface(dev, buf);
+								break;
+						}
+						break;
+					case USB_CLASS_COMM:
+						dump_comm_descriptor(dev, buf,
+							"      ");
+						break;
+				}
+				break;
+			case USB_DT_HID:
+				if (interface->bInterfaceClass == USB_CLASS_HID)
+					dump_hid_device(dev, interface, buf);
+				if (interface->bInterfaceClass == 0x0b)
+					dump_ccid_device(buf);
+				break;
+			case USB_DT_OTG:
+				/* handled separately */
+				break;
+			default:
+				/* often a misplaced class descriptor */
+				printf("      UNRECOGNIZED: ");
+				dump_bytes(buf, size);
+				break;
+			}
+			size -= buf[0];
+			buf += buf[0];
+		}
+	}
+	for (i = 0 ; i < interface->bNumEndpoints ; i++)
+		dump_endpoint(dev, interface, &interface->endpoint[i]);
 }
 
-static void dump_endpoint(int fd, unsigned char *buf)
+static void dump_interface(struct usb_dev_handle *dev, struct usb_interface *interface)
+{
+	int i;
+	
+	for (i = 0; i < interface->num_altsetting; i++)
+		dump_altsetting(dev, &interface->altsetting[i]);
+}
+
+static void dump_endpoint(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, struct usb_endpoint_descriptor *endpoint)
 {
 	static const char *typeattr[] = { "Control", "Isochronous", "Bulk", "Interrupt" };
-	static const char *syncattr[] = { "none", "Asynchronous", "Adaptive", "Synchronous" };
+	static const char *syncattr[] = { "None", "Asynchronous", "Adaptive", "Synchronous" };
+	static const char *usage[] = { "Data", "Feedback", "Implicit feedback Data", "(reserved)" };
+	static const char *hb[] = { "1x", "2x", "3x", "(?\?)" };
+	char *buf;
+	int size;
 
-	if (buf[1] != USB_DT_ENDPOINT)
-		printf("      Warning: Invalid descriptor\n");
-	else if (buf[0] < 7)
-		printf("      Warning: Descriptor too short\n");
 	printf("      Endpoint Descriptor:\n"
 	       "        bLength             %5u\n"
 	       "        bDescriptorType     %5u\n"
@@ -364,19 +417,53 @@
 	       "        bmAttributes        %5u\n"
 	       "          Transfer Type            %s\n"
 	       "          Synch Type               %s\n"
-	       "        wMaxPacketSize      %5u\n"
+	       "          Usage Type               %s\n"
+	       "        wMaxPacketSize     0x%04x  %s %d bytes\n"
 	       "        bInterval           %5u\n",
-	       buf[0], buf[1], buf[2], buf[2] & 15, (buf[2] & 0x80) ? "IN" : "OUT", 
-	       buf[3], typeattr[buf[3] & 3], syncattr[(buf[3] >> 2) & 3],
-	       buf[4] | (buf[5] << 8), buf[6]);
-	if (buf[0] < 9) {
-		dump_junk(buf, "        ", 7);
-		return;
-	}
+	       endpoint->bLength, endpoint->bDescriptorType, endpoint->bEndpointAddress, endpoint->bEndpointAddress & 0x0f, 
+	       (endpoint->bEndpointAddress & 0x80) ? "IN" : "OUT", endpoint->bmAttributes, 
+	       typeattr[endpoint->bmAttributes & 3], syncattr[(endpoint->bmAttributes >> 2) & 3], 
+	       usage[(endpoint->bmAttributes >> 4) & 3], endpoint->wMaxPacketSize,
+	       hb[(endpoint->wMaxPacketSize >> 11) & 3],
+	       endpoint->wMaxPacketSize & 0x3ff,
+	       endpoint->bInterval);
+	/* only for audio endpoints */
+	if (endpoint->bLength == 9) 
 	printf("        bRefresh            %5u\n"
 	       "        bSynchAddress       %5u\n",
-	       buf[7], buf[8]);
-	dump_junk(buf, "        ", 9);
+	       endpoint->bRefresh, endpoint->bSynchAddress);
+	
+	/* avoid re-ordering or hiding descriptors for display */
+	if (endpoint->extralen)
+	{
+		size = endpoint->extralen;
+		buf = endpoint->extra;
+		while (size >= 2 * sizeof(u_int8_t))
+		{
+			if (buf[0] < 2) {
+				dump_junk("        ", buf, size);
+				break;
+			}
+			switch (buf[1]) {
+			case USB_DT_CS_ENDPOINT:
+				if (interface->bInterfaceClass == 1 && interface->bInterfaceSubClass == 2)
+					dump_audiostreaming_endpoint(dev, buf);
+				else if (interface->bInterfaceClass == 1 && interface->bInterfaceSubClass == 3)
+					dump_midistreaming_endpoint(dev, buf);
+				break;
+			case USB_DT_OTG:
+				/* handled separately */
+				break;
+			default:
+				/* often a misplaced class descriptor */
+				printf("        UNRECOGNIZED: ");
+				dump_bytes(buf, size);
+				break;
+			}
+			size -= buf[0];
+			buf += buf[0];
+		}
+	}
 }
 
 /* ---------------------------------------------------------------------- */
@@ -385,7 +472,7 @@
  * Audio Class descriptor dump
  */
 
-static void dump_audiocontrol_interface(int fd, unsigned char *buf, u_int16_t lang)
+static void dump_audiocontrol_interface(struct usb_dev_handle *dev, unsigned char *buf)
 {
 	static const char *chconfig[] = {
 		"Left Front (L)", "Right Front (R)", "Center Front (C)", "Low Freqency Enhancement (LFE)",
@@ -423,8 +510,8 @@
 
 	case 0x02:  /* INPUT_TERMINAL */
 		printf("(INPUT_TERMINAL)\n");
-		get_string(fd, chnames, sizeof(chnames), buf[10], lang);
-		get_string(fd, term, sizeof(term), buf[11], lang);
+		get_string(dev, chnames, sizeof(chnames), buf[10]);
+		get_string(dev, term, sizeof(term), buf[11]);
 		termt = buf[4] | (buf[5] << 8);
 		get_audioterminal_string(termts, sizeof(termts), termt);
 		if (buf[0] < 12)
@@ -447,7 +534,7 @@
 
 	case 0x03:  /* OUTPUT_TERMINAL */
 		printf("(OUTPUT_TERMINAL)\n");
-		get_string(fd, term, sizeof(term), buf[8], lang);
+		get_string(dev, term, sizeof(term), buf[8]);
 		termt = buf[4] | (buf[5] << 8);
 		get_audioterminal_string(termts, sizeof(termts), termt);
 		if (buf[0] < 9)
@@ -471,8 +558,8 @@
 		} else {
 		  N = 1+(j*k-1)/8;
 		}
-		get_string(fd, chnames, sizeof(chnames), buf[8+j], lang);
-		get_string(fd, term, sizeof(term), buf[9+j+N], lang);
+		get_string(dev, chnames, sizeof(chnames), buf[8+j]);
+		get_string(dev, term, sizeof(term), buf[9+j+N]);
 		if (buf[0] < 10+j+N)
 			printf("      Warning: Descriptor too short\n");
 		chcfg = buf[6+j] | (buf[7+j] << 8);
@@ -499,7 +586,7 @@
 		printf("(SELECTOR_UNIT)\n");
 		if (buf[0] < 6+buf[4])
 			printf("      Warning: Descriptor too short\n");
-		get_string(fd, term, sizeof(term), buf[5+buf[4]], lang);
+		get_string(dev, term, sizeof(term), buf[5+buf[4]]);
 
 		printf("        bUnitID             %5u\n"
 		       "        bNrInPins           %5u\n",
@@ -519,7 +606,7 @@
 		k = (buf[0] - 7) / j;
 		if (buf[0] < 7+buf[5]*k)
 			printf("      Warning: Descriptor too short\n");
-		get_string(fd, term, sizeof(term), buf[6+buf[5]*k], lang);
+		get_string(dev, term, sizeof(term), buf[6+buf[5]*k]);
 		printf("        bUnitID             %5u\n"
 		       "        bSourceID           %5u\n"
 		       "        bControlSize        %5u\n",
@@ -529,7 +616,7 @@
 			if (buf[5] > 1)
 				chcfg |= (buf[7+buf[5]*i] << 8);
 			for (j = 0; j < buf[5]; j++)
-				printf("        bmaControls(%2u)      0x%02x\n", j, buf[6+buf[5]*i+j]);
+				printf("        bmaControls(%2u)      0x%02x\n", i, buf[6+buf[5]*i+j]);
 			for (j = 0; j < 10; j++)
 				if ((chcfg >> j) & 1)
 					printf("          %s\n", chftrcontrols[j]);
@@ -542,8 +629,8 @@
 		printf("(PROCESSING_UNIT)\n");
 		j = buf[6];
 		k = buf[11+j];
-		get_string(fd, chnames, sizeof(chnames), buf[10+j], lang);
-		get_string(fd, term, sizeof(term), buf[12+j+k], lang);
+		get_string(dev, chnames, sizeof(chnames), buf[10+j]);
+		get_string(dev, term, sizeof(term), buf[12+j+k]);
 		chcfg = buf[8+j] | (buf[9+j] << 8);
 		if (buf[0] < 13+j+k)
 			printf("      Warning: Descriptor too short\n");
@@ -566,15 +653,15 @@
 			printf("          Enable Processing\n");
 		printf("        iProcessing         %5u %s\n"
 		       "        Process-Specific    ", buf[12+j+k], term);
-		dump_junk2(buf+(13+j+k), buf[0]-(13+j+k));
+		dump_bytes(buf+(13+j+k), buf[0]-(13+j+k));
 		break;
 
 	case 0x08:  /* EXTENSION_UNIT */
 		printf("(EXTENSION_UNIT)\n");
 		j = buf[6];
 		k = buf[11+j];
-		get_string(fd, chnames, sizeof(chnames), buf[10+j], lang);
-		get_string(fd, term, sizeof(term), buf[12+j+k], lang);
+		get_string(dev, chnames, sizeof(chnames), buf[10+j]);
+		get_string(dev, term, sizeof(term), buf[12+j+k]);
 		chcfg = buf[8+j] | (buf[9+j] << 8);
 		if (buf[0] < 13+j+k)
 			printf("      Warning: Descriptor too short\n");
@@ -603,12 +690,12 @@
 	default:
 		printf("(unknown)\n"
 		       "        Invalid desc subtype:");
-		dump_junk2(buf+3, buf[0]-3);
+		dump_bytes(buf+3, buf[0]-3);
 		break;
 	}
 }
 
-static void dump_audiostreaming_interface(int fd, unsigned char *buf)
+static void dump_audiostreaming_interface(struct usb_dev_handle *dev, unsigned char *buf)
 {
 	static const char *fmtItag[] = { "TYPE_I_UNDEFINED", "PCM", "PCM8", "IEEE_FLOAT", "ALAW", "MULAW" };
 	static const char *fmtIItag[] = { "TYPE_II_UNDEFINED", "MPEG", "AC-3" };
@@ -622,7 +709,7 @@
 		printf("      Warning: Invalid descriptor\n");
 	else if (buf[0] < 3)
 		printf("      Warning: Descriptor too short\n");
-	printf("      AudioControl Interface Descriptor:\n"
+	printf("      AudioStreaming Interface Descriptor:\n"
 	       "        bLength             %5u\n"
 	       "        bDescriptorType     %5u\n"
 	       "        bDescriptorSubtype  %5u ",
@@ -717,7 +804,7 @@
 		default:
 			printf("(unknown)\n"
 			       "        Invalid desc format type:");
-			dump_junk2(buf+4, buf[0]-4);
+			dump_bytes(buf+4, buf[0]-4);
 		}
 		break;
 
@@ -833,18 +920,18 @@
 		default:
 			printf("(unknown)\n"
 			       "        Invalid desc format type:");
-			dump_junk2(buf+4, buf[0]-4);
+			dump_bytes(buf+4, buf[0]-4);
 		}
 		break;
 
 	default:
 		printf("        Invalid desc subtype:");
-		dump_junk2(buf+3, buf[0]-3);
+		dump_bytes(buf+3, buf[0]-3);
 		break;
 	}
 }
 
-static void dump_audiostreaming_endpoint(int fd, unsigned char *buf)
+static void dump_audiostreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf)
 {
 	static const char *lockdelunits[] = { "Undefined", "Milliseconds", "Decoded PCM samples", "Reserved" };
 	unsigned int lckdelidx;
@@ -874,7 +961,7 @@
 	dump_junk(buf, "        ", 7);
 }
 
-static void dump_midistreaming_interface(int fd, unsigned char *buf, u_int16_t lang)
+static void dump_midistreaming_interface(struct usb_dev_handle *dev, unsigned char *buf)
 {
 	static const char *jacktypes[] = {"Undefined", "Embedded", "External"};
 	char jackstr[128];
@@ -906,7 +993,7 @@
 		printf("(MIDI_IN_JACK)\n");
 		if (buf[0] < 6)
 			printf("      Warning: Descriptor too short\n");
-		get_string(fd, jackstr, sizeof(jackstr), buf[5], lang);
+		get_string(dev, jackstr, sizeof(jackstr), buf[5]);
 		printf( "        bJackType           %5u %s\n"
 			"        bJackID             %5u\n"
 			"        iJack               %5u %s\n",
@@ -930,7 +1017,7 @@
 				j, buf[2*j+6], j, buf[2*j+7]);
 		}
 		j = 6+buf[5]*2; /* midi10.pdf says, incorrectly: 5+2*p */
-		get_string(fd, jackstr, sizeof(jackstr), buf[j], lang);
+		get_string(dev, jackstr, sizeof(jackstr), buf[j]);
 		printf( "        iJack               %5u %s\n",
 			buf[j], jackstr);
 		dump_junk(buf, "        ", j+1);
@@ -985,19 +1072,19 @@
 		if (caps & 0x800)
 			printf( "          DLS2 (Downloadable Sounds Level 2)\n");
 		j = 9+2*buf[4]+capssize;
-		get_string(fd, jackstr, sizeof(jackstr), buf[j], lang);
+		get_string(dev, jackstr, sizeof(jackstr), buf[j]);
 		printf( "        iElement            %5u %s\n", buf[j], jackstr);
 		dump_junk(buf, "        ", j+1);
 		break;
 
 	default:
 		printf("\n        Invalid desc subtype: ");
-		dump_junk2(buf+3, buf[0]-3);
+		dump_bytes(buf+3, buf[0]-3);
 		break;
 	}
 }
 
-static void dump_midistreaming_endpoint(int fd, unsigned char *buf)
+static void dump_midistreaming_endpoint(struct usb_dev_handle *dev, unsigned char *buf)
 {
 	unsigned int j;
 
@@ -1017,26 +1104,196 @@
 	dump_junk(buf, "          ", 4+buf[3]);
 }
 
-
-static void dump_hub(char *p)
+static void dump_hub(char *prefix, unsigned char *p, int has_tt)
 {
 	unsigned int l, i, j;
+	unsigned int wHubChar = (p[4] << 8) | p[3];
 	
-	printf("       Hub Descriptor:\n");
-	printf("         bLength             %3u\n",p[0]);
-	printf("         bDesriptorType      %3u\n",p[1]);
-	printf("         nNbrPorts           %3u\n",p[2]); 
-	printf("         wHubCharacteristic 0x%02x 0x%02x\n", p[3],p[4]);
-	printf("         bPwrOn2PwrGood      %3u * 2 milli seconds\n",p[5]);
-	printf("         bHubContrCurrent    %3u milli Ampere\n",p[6]);
+	printf("%sHub Descriptor:\n", prefix);
+	printf("%s  bLength             %3u\n", prefix, p[0]);
+	printf("%s  bDescriptorType     %3u\n", prefix, p[1]);
+	printf("%s  nNbrPorts           %3u\n", prefix, p[2]); 
+	printf("%s  wHubCharacteristic 0x%04x\n", prefix, wHubChar);
+	switch (wHubChar & 0x03) {
+	case 0:
+		printf("%s    Ganged power switching\n", prefix);
+		break;
+	case 1:
+		printf("%s    Per-port power switching\n", prefix);
+		break;
+	default:
+		printf("%s    No power switching (usb 1.0)\n", prefix);
+		break;
+	}
+	if (wHubChar & 0x04)
+		printf("%s    Compound device\n", prefix);
+	switch ((wHubChar >> 3) & 0x03) {
+	case 0:
+		printf("%s    Ganged overcurrent protection\n", prefix);
+		break;
+	case 1:
+		printf("%s    Per-port overcurrent protection\n", prefix);
+		break;
+	default:
+		printf("%s    No overcurrent protection\n", prefix);
+		break;
+	}
+	if (has_tt) {
+		l = (wHubChar >> 5) & 0x03;
+		printf("%s    TT think time %d FS bits\n", prefix, (l + 1) * 8);
+	}
+	if (wHubChar & (1<<7))
+		printf("%s    Port indicators\n", prefix);
+	printf("%s  bPwrOn2PwrGood      %3u * 2 milli seconds\n", prefix, p[5]);
+	printf("%s  bHubContrCurrent    %3u milli Ampere\n", prefix, p[6]);
 	l= (p[2] >> 3) + 1; /* this determines the variable number of bytes following */
-	printf("         DeviceRemovable   ");
+	printf("%s  DeviceRemovable   ", prefix);
 	for(i = 0; i < l; i++) 
 		printf(" 0x%02x", p[7+i]);
-	printf("\n         PortPwrCtrlMask   ");
-	for(j = 0; j < l; j++)
-		printf(" 0x%02x ", p[7+i+j]);
-	printf("\n");
+	printf("\n%s  PortPwrCtrlMask   ", prefix);
+ 	for(j = 0; j < l; j++)
+ 		printf(" 0x%02x ", p[7+i+j]);
+ 	printf("\n");
+}
+
+static void dump_ccid_device(unsigned char *buf)
+{
+        unsigned int us;
+
+	if (buf[0] < 54) {
+		printf("      Warning: Descriptor too short\n");
+                return;
+        }
+	printf("      ChipCard Interface Descriptor:\n"
+	       "        bLength             %5u\n"
+	       "        bDescriptorType     %5u\n"
+	       "        bcdCCID             %2x.%02x",
+	       buf[0], buf[1], buf[3], buf[2]);
+        if (buf[3] != 1 || buf[2] != 0) 
+                fputs("  (Warning: Only accurate for version 1.0)", stdout);
+        putchar('\n');
+
+        printf("        nMaxSlotIndex       %5u\n"
+                "        bVoltageSupport     %5u  %s\n",
+                buf[4],
+                buf[5], (buf[5] == 1? "5.0V" : buf[5] == 2? "3.0V"
+                         : buf[5] == 3? "1.8V":"?"));
+
+        us = convert_le_u32 (buf+6);
+        printf("        dwProtocols         %5u ", us);
+        if ((us & 1))
+                fputs(" T=0", stdout);
+        if ((us & 2))
+                fputs(" T=1", stdout);
+        if ((us & ~3))
+                fputs(" (Invalid values detected)", stdout);
+        putchar('\n');
+
+        us = convert_le_u32(buf+10);
+        printf("        dwDefaultClock      %5u\n", us);
+        us = convert_le_u32(buf+14);
+        printf("        dwMaxiumumClock     %5u\n", us);
+        printf("        bNumClockSupported  %5u\n", buf[18]);
+        us = convert_le_u32(buf+19);
+        printf("        dwDataRate        %7u bps\n", us);
+        us = convert_le_u32(buf+23);
+        printf("        dwMaxDataRate     %7u bps\n", us);
+        printf("        bNumDataRatesSupp.  %5u\n", buf[27]);
+        
+        us = convert_le_u32(buf+28);
+        printf("        dwMaxIFSD           %5u\n", us);
+
+        us = convert_le_u32(buf+32);
+        printf("        dwSyncProtocols  %08X ", us);
+        if ((us&1))
+                fputs(" 2-wire", stdout);
+        if ((us&2))
+                fputs(" 3-wire", stdout);
+        if ((us&4))
+                fputs(" I2C", stdout);
+        putchar('\n');
+
+        us = convert_le_u32(buf+36);
+        printf("        dwMechanical     %08X ", us);
+        if ((us & 1))
+                fputs(" accept", stdout);
+        if ((us & 2))
+                fputs(" eject", stdout);
+        if ((us & 4))
+                fputs(" capture", stdout);
+        if ((us & 8))
+                fputs(" lock", stdout);
+        putchar('\n');
+
+        us = convert_le_u32(buf+40);
+        printf("        dwFeatures       %08X\n", us);
+        if ((us & 0x0002))
+		fputs("          Auto configuration based on ATR\n",stdout);
+        if ((us & 0x0004))
+		fputs("          Auto activation on insert\n",stdout);
+        if ((us & 0x0008))
+		fputs("          Auto voltage selection\n",stdout);
+        if ((us & 0x0010))
+		fputs("          Auto clock change\n",stdout);
+        if ((us & 0x0020))
+		fputs("          Auto baud rate change\n",stdout);
+        if ((us & 0x0040))
+		fputs("          Auto parameter negotation made by CCID\n",stdout);
+        else if ((us & 0x0080))
+		fputs("          Auto PPS made by CCID\n",stdout);
+        else if ((us & (0x0040 | 0x0080)))
+		fputs("        WARNING: conflicting negotation features\n",stdout);
+
+        if ((us & 0x0100))
+		fputs("          CCID can set ICC in clock stop mode\n",stdout);
+        if ((us & 0x0200))
+		fputs("          NAD value other than 0x00 accpeted\n",stdout);
+        if ((us & 0x0400))
+		fputs("          Auto IFSD exchange\n",stdout);
+
+        if ((us & 0x00010000))
+		fputs("          TPDU level exchange\n",stdout);
+        else if ((us & 0x00020000))
+		fputs("          Short APDU level exchange\n",stdout);
+        else if ((us & 0x00040000))
+		fputs("          Short and extended APDU level exchange\n",stdout);
+        else if ((us & 0x00070000))
+		fputs("        WARNING: conflicting exchange levels\n",stdout);
+
+        us = convert_le_u32(buf+44);
+        printf("        dwMaxCCIDMsgLen     %5u\n", us);
+
+        printf("        bClassGetResponse    ");
+        if (buf[48] == 0xff)
+                fputs("echo\n", stdout);
+        else
+                printf("  %02X\n", buf[48]);
+
+        printf("        bClassEnvelope       ");
+        if (buf[49] == 0xff)
+                fputs("echo\n", stdout);
+        else
+                printf("  %02X\n", buf[48]);
+
+        printf("        wlcdLayout           ");
+        if (!buf[50] && !buf[51])
+		fputs("none\n", stdout);
+        else
+		printf("%u cols %u lines\n", buf[50], buf[51]);
+        
+        printf("        bPINSupport         %5u ", buf[52]);
+        if ((buf[52] & 1))
+		fputs(" verification", stdout);
+        if ((buf[52] & 2))
+		fputs(" modification", stdout);
+        putchar('\n');
+        
+        printf("        bMaxCCIDBusySlots   %5u\n", buf[53]);
+
+        if (buf[0] > 54) {
+		fputs("        junk             ", stdout);
+		dump_bytes(buf+54, buf[0]-54);
+        }
 }
 
 /* ---------------------------------------------------------------------- */
@@ -1047,21 +1304,21 @@
 
 static void dump_report_desc(unsigned char *b, int l)
 {
-        unsigned int t, j, bsize, btag, btype, data, hut;
+        unsigned int t, j, bsize, btag, btype, data = 0xffff, hut = 0xffff;
 	int i;
 	char *types[4] = { "Main", "Global", "Local", "reserved" };
 	char indent[] = "                            ";
 
-	printf("	  Report Descriptor: (length is %d)\n", l);
+	printf("          Report Descriptor: (length is %d)\n", l);
 	for(i = 0; i < l; ) {
 		t = b[i];
-		bsize= b[i] & 0x03;
+		bsize = b[i] & 0x03;
 		if (bsize == 3)
-                        bsize=4;
+                        bsize = 4;
 		btype = b[i] & (0x03 << 2);
 		btag = b[i] & ~0x03; /* 2 LSB bits encode length */
 		printf("            Item(%-6s): %s, data=", types[btype>>2], names_reporttag(btag));
-		if(bsize > 0) {
+		if (bsize > 0) {
 			printf(" [ ");
 			data = 0;
 			for(j = 0; j < bsize; j++) {
@@ -1101,9 +1358,9 @@
                                 
 			default:
 				if(data & 0x80)
-				    printf("Vendor definened\n");
+					printf("Vendor defined\n");
 				else
-				    printf("Reserved for future use.\n");
+					printf("Reserved for future use.\n");
 			}
 			break;
 		case 0x80: /* Input */
@@ -1121,19 +1378,19 @@
 			       data & 0x40 ? "Null_State": "No_Null_Position",
 			       data & 0x80 ? "Volatile": "Non_Volatile",
 			       data &0x100 ? "Buffered Bytes": "Bitfield"
-			);
+				);
 		}
 		i += 1 + bsize;
 	}
 }
 
-static void dump_hid_device(int fd, unsigned char *buf,int interface_number)
+static void dump_hid_device(struct usb_dev_handle *dev, struct usb_interface_descriptor *interface, unsigned char *buf)
 {
 	unsigned int i, len;
 	int n;
 	unsigned char dbuf[8192];
 
-	if (buf[1] != USB_DT_CS_DEVICE)
+	if (buf[1] != USB_DT_HID)
 		printf("      Warning: Invalid descriptor\n");
 	else if (buf[0] < 6+3*buf[5])
 		printf("      Warning: Descriptor too short\n");
@@ -1141,306 +1398,340 @@
 	       "          bLength             %5u\n"
 	       "          bDescriptorType     %5u\n"
 	       "          bcdHID              %2x.%02x\n"
-	       "          bCountryCode        %5u\n"
+	       "          bCountryCode        %5u %s\n"
 	       "          bNumDescriptors     %5u\n",
-	       buf[0], buf[1], buf[3], buf[2], buf[4], buf[5]);
+	       buf[0], buf[1], buf[3], buf[2], buf[4],
+	       names_countrycode(buf[4]) ? : "Unknown", buf[5]);
 	for (i = 0; i < buf[5]; i++)
 		printf("          bDescriptorType     %5u %s\n"
 		       "          wDescriptorLength   %5u\n", 
-		       buf[6+3*i], names_hid(buf[6+3*i]), buf[7+3*i] | (buf[8+3*i] << 8));
+		       buf[6+3*i], names_hid(buf[6+3*i]),
+		       buf[7+3*i] | (buf[8+3*i] << 8));
 	dump_junk(buf, "        ", 6+3*buf[5]);
 	if (!do_report_desc)
 		return;
+	
 	for (i = 0; i < buf[5]; i++) {
-		if (buf[6+3*i] != 0x22) /* we are just interested in report descriptors*/
+		/* we are just interested in report descriptors*/
+		if (buf[6+3*i] != USB_DT_REPORT)
 			continue;
 		len = buf[7+3*i] | (buf[8+3*i] << 8);
 		if (len > sizeof(dbuf)) {
 			printf("report descriptor too long\n");
 			continue;
 		}
-		if ((n = usb_control_msg(fd, 0x81 , 0x06, 0x22<<8, interface_number, len, dbuf)) < 0) {
-			if (open_mode == O_RDWR)
-			printf("cannot get report descriptor\n");
-			continue;
+		if (usb_claim_interface(dev, interface->bInterfaceNumber) == 0) {
+			if ((n = usb_control_msg(dev, 
+					 USB_ENDPOINT_IN | USB_TYPE_STANDARD
+					 	| USB_RECIP_INTERFACE, 
+					 USB_REQ_GET_DESCRIPTOR, 
+					 (USB_DT_REPORT << 8), 
+					 interface->bInterfaceNumber,
+					 dbuf, 
+					 len, 
+					 CTRL_TIMEOUT)) > 0)
+				dump_report_desc(dbuf, n);
+			usb_release_interface(dev, interface->bInterfaceNumber);
+		} else {
+			/* recent Linuxes require claim() for RECIP_INTERFACE,
+			 * so "rmmod hid" will often make these available.
+			 */
+			printf( "         Report Descriptors: \n"
+				"           ** UNAVAILABLE **\n");
 		}
-		dump_report_desc(dbuf, n);
 	}
 }
 
-/* ---------------------------------------------------------------------- */
-
-static void do_config(int fd, unsigned int nr, u_int16_t lang)
+static char *
+dump_comm_descriptor(struct usb_dev_handle *dev, unsigned char *buf, char *indent)
 {
-	unsigned char buf[1024],*p;
-	unsigned int sz,curinterface;
-	int l;
-	u_int8_t curclass = 0xff, cursubclass = 0xff;
+	int		tmp;
+	char		str [128];
 
-	if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_CONFIG << 8) | nr,
-			    0, USB_DT_CONFIG_SIZE, buf) < 0) {
-		if (open_mode == O_RDWR)
-		fprintf(stdout, "cannot get config descriptor %d, %s (%d)\n", nr, strerror(errno), errno);
-		return;
-	}
-	if (buf[0] < USB_DT_CONFIG_SIZE || buf[1] != USB_DT_CONFIG)
-		fprintf(stderr, "Warning: invalid config descriptor\n");
-	sz = buf[2] | buf[3] << 8;
-	if (sz > sizeof(buf)) {
-		fprintf(stderr, "Config %d descriptor too long, truncating\n", nr);
-		sz = sizeof(buf);
-	}
-	if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_CONFIG << 8) | nr,
-			    0, sz, buf) < 0) {
-		if (open_mode == O_RDWR)
-		fprintf(stdout, "cannot get config descriptor %d, %s (%d)\n", nr, strerror(errno), errno);
-		return;
+	switch (buf[2]) {
+	case 0:
+		if (buf[0] != 5)
+			goto bad;
+		printf("%sCDC Header:\n"
+		       "%s  bcdCDC               %x.%02x\n",
+		       indent,
+		       indent, buf[4], buf[3]);
+		break;
+	case 0x01:		/* call management functional desc */
+		if (buf [0] != 5)
+			goto bad;
+		printf("%sCDC Call Management:\n"
+		       "%s  bmCapabilities       0x%02x\n",
+		       indent,
+		       indent, buf[3]);
+		if (buf[3] & 0x01)
+			printf("%s    call management\n", indent);
+		if (buf[3] & 0x02)
+			printf("%s    use DataInterface\n", indent);
+		printf("%s  bDataInterface          %d\n", indent, buf[4]);
+		break;
+	case 0x02:		/* acm functional desc */
+		if (buf [0] != 4)
+			goto bad;
+		printf("%sCDC ACM:\n"
+		       "%s  bmCapabilities       0x%02x\n",
+		       indent,
+		       indent, buf[3]);
+		if (buf[3] & 0x08)
+			printf("%s    connection notifications\n", indent);
+		if (buf[3] & 0x04)
+			printf("%s    sends break\n", indent);
+		if (buf[3] & 0x02)
+			printf("%s    line coding and serial state\n", indent);
+		if (buf[3] & 0x01)
+			printf("%s    get/set/clear comm features\n", indent);
+		break;
+	case 0x06:		/* union desc */
+		if (buf [0] < 5)
+			goto bad;
+		printf("%sCDC Union:\n"
+		       "%s  bMasterInterface        %d\n"
+		       "%s  bSlaveInterface         ",
+		       indent,
+		       indent, buf [3],
+		       indent);
+		for (tmp = 4; tmp < buf [0]; tmp++)
+			printf("%d ", buf [tmp]);
+		printf("\n");
+		break;
+	case 0x0f:		/* ethernet functional desc */
+		if (buf [0] != 13)
+			goto bad;
+		get_string(dev, str, sizeof str, buf[3]);
+		tmp = buf [7] << 8;
+		tmp |= buf [6]; tmp <<= 8;
+		tmp |= buf [5]; tmp <<= 8;
+		tmp |= buf [4];
+		printf("%sCDC Ethernet:\n"
+		       "%s  iMacAddress             %10d %s\n"
+		       "%s  bmEthernetStatistics    0x%08x\n",
+		       indent,
+		       indent, buf[3], (buf[3] && *str) ? str : "(?\?)",
+		       indent, tmp);
+		/* FIXME dissect ALL 28 bits */
+		printf("%s  wMaxSegmentSize         %10d\n"
+		       "%s  wNumberMCFilters            0x%04x\n"
+		       "%s  bNumberPowerFilters     %10d\n",
+		       indent, (buf[9]<<8)|buf[8],
+		       indent, (buf[11]<<8)|buf[10],
+		       indent, buf[12]);
+		break;
+	default:
+		/* FIXME there are about a dozen more descriptor types */
+		printf("%sUNRECOGNIZED: ", indent);
+		dump_bytes(buf, buf[0]);
+		return "unrecognized comm descriptor";
 	}
-	p = buf;
-	while (sz >= 2) {
-		if (p[0] < 2)
-			break;
-		if (p[0] > sz) {
-			printf("  descriptor length past end:");
-			dump_junk2(p, sz);
-			sz = 0;
-			break;
-		}
-		switch (p[1]) {
-		case USB_DT_DEVICE:
-			dump_device(fd, p, lang);
-			curclass = p[4];
-			cursubclass = p[5];
-			break;
-			
-		case USB_DT_CONFIG:
-			dump_config(fd, p);
-			break;
-			
-		case USB_DT_INTERFACE:
-			dump_interface(fd, p, lang);
-			curclass = p[5];
-			cursubclass = p[6];
-			curinterface = p[2];
-			break;
-			
-		case USB_DT_ENDPOINT:
-			dump_endpoint(fd, p);
-			break;
+	return 0;
 
-		case USB_DT_CS_DEVICE:
-			if (curclass == 3) {
-				dump_hid_device(fd, p, curinterface);
-				break;
-			}
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-			break;
+  bad:
+	printf("%sinvalid: ", indent);
+	dump_bytes(buf, buf[0]);
+	return "corrupt comm descriptor";
+}
 
-		case USB_DT_CS_CONFIG:
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-			break;
+/* ---------------------------------------------------------------------- */
 
-		case USB_DT_CS_STRING:
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-			break;
+static void do_hub(struct usb_dev_handle *fd, unsigned has_tt)
+{
+	unsigned char buf [7];
+	int ret;
+	
+	ret = usb_control_msg(fd,
+			USB_ENDPOINT_IN | USB_TYPE_CLASS | USB_RECIP_DEVICE,
+			USB_REQ_GET_DESCRIPTOR,
+			0x29 << 8, 0,
+			buf, sizeof buf, CTRL_TIMEOUT);
+	if (ret != sizeof buf) {
+		/* Linux returns this for suspended devices */
+		if (errno != EHOSTUNREACH)
+			perror ("can't get hub descriptor");
+		return;
+	}
+	dump_hub("", buf, has_tt);
+}
 
-		case USB_DT_CS_INTERFACE:
-			if (curclass == 1 && cursubclass == 1) {
-				dump_audiocontrol_interface(fd, p, lang);
-				break;
-			}
-			if (curclass == 1 && cursubclass == 2) {
-				dump_audiostreaming_interface(fd, p);
-				break;
-			}
-			if (curclass == 1 && cursubclass == 3) {
-				dump_midistreaming_interface(fd, p, lang);
-				break;
-			}
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-			break;
+static void do_dualspeed(struct usb_dev_handle *fd)
+{
+	unsigned char buf [10];
+	char cls[128], subcls[128], proto[128];
+	int ret;
+	
+	ret = usb_control_msg(fd,
+			USB_ENDPOINT_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE, 
+			USB_REQ_GET_DESCRIPTOR,
+			USB_DT_DEVICE_QUALIFIER << 8, 0,
+			buf, sizeof buf, CTRL_TIMEOUT);
 
-		case USB_DT_CS_ENDPOINT:
-			if (curclass == 1 && cursubclass == 2) {
-				dump_audiostreaming_endpoint(fd, p);
-				break;
-			}
-			if (curclass == 1 && cursubclass == 3) {
-				dump_midistreaming_endpoint(fd, p);
-				break;
-			}
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-			break;
+	/* all dual-speed devices have a qualifier */
+	if (ret != sizeof buf
+			|| buf[0] != ret
+			|| buf[1] != USB_DT_DEVICE_QUALIFIER)
+		return;
 
-		case USB_DT_HUB:
-			dump_hub(p);
-			break;
+	get_class_string(cls, sizeof(cls),
+			buf[4]);
+	get_subclass_string(subcls, sizeof(subcls),
+			buf[4], buf[5]);
+	get_protocol_string(proto, sizeof(proto),
+			buf[4], buf[5], buf[6]);
+	printf("Device Qualifier (for other device speed):\n"
+	       "  bLength             %5u\n"
+	       "  bDescriptorType     %5u\n"
+	       "  bcdUSB              %2x.%02x\n"
+	       "  bDeviceClass        %5u %s\n"
+	       "  bDeviceSubClass     %5u %s\n"
+	       "  bDeviceProtocol     %5u %s\n"
+	       "  bMaxPacketSize0     %5u\n"
+	       "  bNumConfigurations  %5u\n",
+	       buf[0], buf[1],
+	       buf[3], buf[2],
+	       buf[4], cls,
+	       buf[5], subcls,
+	       buf[6], proto, 
+	       buf[7], buf[8]);
 
-		default:
-			printf("  unknown descriptor type:");
-			dump_junk2(p, p[0]);
-		}
-		sz -= p[0];
-		p += p[0];
-	}
-	if (sz > 0) {
-		printf("  junk at config descriptor end:");
-		dump_junk2(p, sz);
-	}
+	/* FIXME also show the OTHER_SPEED_CONFIG descriptors */
 }
 
-/* ---------------------------------------------------------------------- */
+static unsigned char *find_otg(unsigned char *buf, int buflen)
+{
+	if (!buf)
+		return 0;
+	while (buflen >= 3) {
+		if (buf[0] == 3 && buf[1] == USB_DT_OTG)
+			return buf;
+		if (buf[0] > buflen)
+			return 0;
+		buflen -= buf[0];
+		buf += buf[0];
+	}
+	return 0;
+}
 
-/* returns first lang ID */
-static u_int16_t dump_langids(int fd, int quiet)
+static void do_otg(struct usb_config_descriptor *config)
 {
-	unsigned char b[256];
-	int i, l;
-        u_int16_t lang;
+	unsigned	i, j, k;
+	unsigned char	*desc;
 
-	b[0] = b[1] = 0xbf;
-	l = usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, USB_DT_STRING << 8, 0, sizeof(b), b);
+	/* each config of an otg device has an OTG descriptor */
+	desc = find_otg(config->extra, config->extralen);
+	for (i = 0; !desc && i < config->bNumInterfaces; i++) {
+		struct usb_interface *intf;
 
-	if (l < 0) {
-		if (open_mode == O_RDWR)
-		printf("  Language IDs: none (cannot get min. string descriptor; got len=%d, error=%d:%s)\n",
-			l, errno, strerror(errno));
-		return 0;
-	}
-	if (l < 4 || b[0] != l) {
-		printf("  Language IDs: none (invalid length string descriptor %02x; len=%d)\n", b[0], l);
-		return 0;
-	}
-        /* save first language ID for further get_string_descriptors */
-	lang =  b[2] | (b[3] << 8);
-#if 0
-	printf ("dump_langids: ret=%d:%d, lang=0x%x, length=%d\n", l, errno, lang, b[0]);
-	dump_junk2 (b, 32);
-#endif
-	if(quiet)
-		return lang;
-	printf("  Language IDs: (length=%d)\n", b[0]);
-	for (i = 0; i < ((b[0] - 2) / 2); i++) {
-		l = b[2+2*i] | (b[3+2*i] << 8);
-		printf("     %04x %s(%s)\n", l, names_langid(l & 0x3ff), names_langid(l));
+		intf = &config->interface [i];
+		for (j = 0; !desc && j < intf->num_altsetting; j++) {
+			struct usb_interface_descriptor *alt;
+
+			alt = &intf->altsetting[j];
+			desc = find_otg(alt->extra, alt->extralen);
+			for (k = 0; !desc && k < alt->bNumEndpoints; k++) {
+				struct usb_endpoint_descriptor *ep;
+
+				ep = &alt->endpoint[k];
+				desc = find_otg(ep->extra, ep->extralen);
+			}
+		}
 	}
-        return lang;
-}
+	if (!desc)
+		return;
 
-/* ---------------------------------------------------------------------- */
+	printf("OTG Descriptor:\n"
+		"  bLength               %3u\n"
+		"  bDescriptorType       %3u\n"
+		"  bmAttributes         0x%02x\n"
+		"%s%s",
+		desc[0], desc[1], desc[2],
+		(desc[2] & 0x01)
+			? "    SRP (Session Request Protocol)\n" : "",
+		(desc[2] & 0x02)
+			? "    HNP (Host Negotiation Protocol)\n" : "");
+}
 
-static void dumpdev(unsigned char *devdesc, int fd, unsigned int flags)
+static void dumpdev(struct usb_device *dev, unsigned int flags)
 {
-	unsigned int i, maxcfg;
-	u_int16_t lang;
+	struct usb_dev_handle *udev;
+	int i;
 
-	maxcfg = devdesc[17];
-	if (devdesc[0] < 18 || devdesc[1] != USB_DT_DEVICE)
-		maxcfg = 1;
-	lang = dump_langids(fd, 1);
-	dump_device(fd, devdesc, lang);
-	for (i = 0; i < maxcfg; i++)
-		do_config(fd, i, lang);
-	lang = dump_langids(fd, 0);
+	udev = usb_open(dev);
+	if (udev) {
+		dump_device(udev, &dev->descriptor, flags);
+		if (dev->config) {
+			for (i = 0; i < dev->descriptor.bNumConfigurations;
+					i++) {
+				dump_config(udev, &dev->config[i]);
+			}
+			do_otg(&dev->config[0]);
+		}
+		if (dev->descriptor.bDeviceClass == USB_CLASS_HUB)
+			do_hub(udev, dev->descriptor.bDeviceProtocol);
+		if (dev->descriptor.bcdUSB >= 0x0200)
+			do_dualspeed(udev);
+		usb_close(udev);
+	}
+	else
+		fprintf(stderr, "Couldn't open device\n");
 }
 
 /* ---------------------------------------------------------------------- */
 
 static int dump_one_device(const char *path, unsigned int flags)
 {
-        unsigned char buf[USB_DT_DEVICE_SIZE];
-	unsigned int vid, pid;
+	struct usb_device *dev;
 	char vendor[128], product[128];
-        int fd;
-	int status;
-
-	status=1;
 
-	if ((fd = open(path, O_RDWR)) == -1) {
-		fprintf(stderr, "cannot open %s, %s (%d)\n", path, strerror(errno), errno);
-		return(1);
-	}
-	if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_DEVICE << 8), 0, USB_DT_DEVICE_SIZE, buf) < 0) {
-		if (open_mode == O_RDWR)
-		fprintf(stderr, "cannot get config descriptor, %s (%d)\n", strerror(errno), errno);
-		goto err;
+	dev = get_usb_device(path);
+	if (!dev) {
+		fprintf(stderr, "Cannot open %s\n", path);
+		return 1;
 	}
-	vid = buf[8] | (buf[9] << 8);
-	pid = buf[10] | (buf[11] << 8);
-	get_vendor_string(vendor, sizeof(vendor), vid);
-	get_product_string(product, sizeof(product), vid, pid);
-	printf("Device: ID %04x:%04x %s %s\n", vid, pid, vendor, product);
-	dumpdev(buf, fd, flags);
-	status=0;
- err:
-	close(fd);
-	return(status);
+	get_vendor_string(vendor, sizeof(vendor), dev->descriptor.idVendor);
+	get_product_string(product, sizeof(product), dev->descriptor.idVendor, dev->descriptor.idProduct);
+	printf("Device: ID %04x:%04x %s %s\n", dev->descriptor.idVendor, 
+					       dev->descriptor.idProduct, 
+					       vendor, 
+					       product);
+	dumpdev(dev, flags);
+	return 0;
 }
 
-/* ---------------------------------------------------------------------- */
-
-static int list_devices(int bus, int devnum, int vendorid, int productid, unsigned int flags)
+static int list_devices(int busnum, int devnum, int vendorid, int productid, unsigned int flags)
 {
-        DIR *d, *d2;
-        struct dirent *de, *de2;
-        unsigned char buf[256];
-	unsigned int vid, pid;
+	struct usb_bus *bus;
+	struct usb_device *dev;
 	char vendor[128], product[128];
-        int fd;
 	int status;
 
 	status=1; /* 1 device not found, 0 device found */
-
-        d = opendir(procbususb);
-        if (!d) {
-                fprintf(stderr, "cannot open %s, %s (%d)\n", procbususb, strerror(errno), errno);
-                return(1);
-        }
-        while ((de = readdir(d))) {
-                if (de->d_name[0] < '0' || de->d_name[0] > '9')
-                        continue;
-		if (bus != -1 && strtoul(de->d_name, NULL, 0) != bus)
+	
+	for (bus = usb_busses; bus; bus = bus->next) {
+		if (busnum != -1 && strtoul(bus->dirname, NULL, 0) != busnum)
 			continue;
-                snprintf(buf, sizeof(buf), "%s/%s/", procbususb, de->d_name);
-                if (!(d2 = opendir(buf)))
-                        continue;
-                while ((de2 = readdir(d2))) {
-                        if (de2->d_name[0] == '.')
-                                continue;
-			if (devnum != -1 && strtoul(de2->d_name, NULL, 0) != devnum)
+		for (dev = bus->devices; dev; dev = dev->next) {
+			if (devnum != -1 && strtoul(dev->filename, NULL, 0) != devnum)
 				continue;
-                        snprintf(buf, sizeof(buf), "%s/%s/%s", procbususb, de->d_name, de2->d_name);
-			if ((fd = open(buf, open_mode)) == -1) {
-				fprintf(stderr, "cannot open %s, %s (%d)\n", buf, strerror(errno), errno);
+			if ((vendorid != -1 && vendorid != dev->descriptor.idVendor) || (productid != -1 && productid != dev->descriptor.idProduct))
 				continue;
-			}
-			if (read(fd, buf, USB_DT_DEVICE_SIZE) != USB_DT_DEVICE_SIZE) {
-				fprintf(stderr, "cannot read device descriptor %s (%d)\n", strerror(errno), errno);
-				goto err;
-			}
-			vid = buf[8] | (buf[9] << 8);
-			pid = buf[10] | (buf[11] << 8);
-			if (buf[0] >= USB_DT_DEVICE_SIZE && ((vendorid != -1 && vendorid != vid) || (productid != -1 && productid != pid)))
-				goto err;
-			status=0;
-			get_vendor_string(vendor, sizeof(vendor), vid);
-			get_product_string(product, sizeof(product), vid, pid);
+			status = 0;
+			get_vendor_string(vendor, sizeof(vendor), dev->descriptor.idVendor);
+			get_product_string(product, sizeof(product), dev->descriptor.idVendor, dev->descriptor.idProduct);
 			if (verblevel > 0)
 				printf("\n");
-			printf("Bus %s Device %s: ID %04x:%04x %s %s\n", de->d_name, de2->d_name, vid, pid, vendor, product);
+			printf("Bus %s Device %s: ID %04x:%04x %s %s\n", bus->dirname, 
+					                                 dev->filename, 
+									 dev->descriptor.idVendor, 
+									 dev->descriptor.idProduct, 
+									 vendor, 
+									 product);
 			if (verblevel > 0)
-				dumpdev(buf, fd, flags);
-		err:
-			close(fd);
-                }
-                closedir(d2);
-        }
-        closedir(d);
+				dumpdev(dev, flags);
+		}
+	}
 	return(status);
 }
 
@@ -1487,7 +1778,6 @@
 		{ "verbose", 0, 0, 'v' },
                 { 0, 0, 0, 0 }
         };
- 	static const char usage[] = "usage: lsusb [-v] [-x] [-p <procpath>] [-s [<bus>:][<devnum>]] [-d [<vendor>]:[<device>]]\n";
 	int c, err = 0;
 	unsigned int allowctrlmsg = 0, treemode = 0;
 	int bus = -1, devnum = -1, vendor = -1, product = -1;
@@ -1495,7 +1785,8 @@
 	char *cp;
 	int status;
 
-	while ((c = getopt_long(argc, argv, "D:vxtP:p:s:d:V", long_options, NULL)) != EOF) {
+	while ((c = getopt_long(argc, argv, "D:vxtP:p:s:d:V",
+			long_options, NULL)) != EOF) {
 		switch(c) {
                 case 'V':
                         printf("lsusb (" PACKAGE ")  " VERSION "\n");
@@ -1503,7 +1794,6 @@
                         
 		case 'v':
 			verblevel++;
-			open_mode = O_RDWR;
 			break;
 
 		case 'x':
@@ -1514,11 +1804,6 @@
 			treemode = 1;
 			break;
 
-		case 'P':	/* lspci uses -P; but lsusb 0.9, -p */
-		case 'p':
-			procbususb = optarg;
-			break;
-
 		case 's':
 			cp = strchr(optarg, ':');
 			if (cp) {
@@ -1556,15 +1841,43 @@
 		}
 	}
 	if (err || argc > optind) {
-		fprintf(stderr, usage);
+                fprintf(stderr, "Usage: lsusb [options]...\n"
+			"List all USB devices\n"
+			"\n"
+			"OPTIONS\n"
+			"  -v\n"
+			"      Increase verbosity\n"
+			"  -s [[bus]:][devnum]\n"
+			"      Show only devices in specified bus and/or devnum\n"
+			"  -d vendor:[product]\n"
+			"      Show only devices with the specified vendor and product ID\n"
+			"  -D device\n"
+			"      Selects which device lsusb will examine\n"
+			"  -t\n"
+			"      Dump the physical USB device hierarchy as a tree\n"
+			"  -V, --version\n"
+			"      Show version of program\n"
+			"\n");
 		exit(1);
 	}
-	if ((err = names_init("./usb.ids")) != 0)
-		if(err = names_init(USBIDS_FILE)) {
-			printf("Error, cannot open USBIDS File \"%s\", %s\n", USBIDS_FILE, strerror(err));
-			exit(1);
+
+	/* by default, print names as well as numbers */
+	if ((err = names_init("./usb.ids")) != 0) {
+		if ((err = names_init(USBIDS_FILE)) != 0) {
+			fprintf(stderr, "%s: cannot open \"%s\", %s\n",
+					argv[0],
+					USBIDS_FILE,
+					strerror(err));
+		}
 	}
 	status = 0;
+
+	usb_init();
+
+	usb_find_busses();
+	usb_find_devices();
+	      
+	
 	if (treemode) {
 		/* treemode requires at least verblevel 1 */
  		verblevel += 1 - VERBLEVEL_DEFAULT;
--- usbutils-0.11/names.c~usbutils-0.11+cvs20041108
+++ usbutils-0.11/names.c
@@ -116,6 +116,7 @@
 static struct genericstrtable *physdess[HASHSZ] = { NULL, };
 static struct genericstrtable *hutus[HASHSZ] = { NULL, };
 static struct genericstrtable *langids[HASHSZ] = { NULL, };
+static struct genericstrtable *countrycodes[HASHSZ] = { NULL, };
 
 /* ---------------------------------------------------------------------- */
 
@@ -164,6 +165,11 @@
 	return names_genericstrtable(biass, b);
 }
 
+const char *names_countrycode(unsigned int countrycode)
+{
+	return names_genericstrtable(countrycodes, countrycode);
+}
+
 const char *names_vendor(u_int16_t vendorid)
 {
 	struct vendor *v;
@@ -402,6 +408,11 @@
 	return new_genericstrtable(biass, name, b);
 }
 
+static int new_countrycode(const char *name, unsigned int countrycode)
+{
+	return new_genericstrtable(countrycodes, name, countrycode);
+}
+
 /* ---------------------------------------------------------------------- */
 
 #define DBG(x) 
@@ -553,6 +564,27 @@
 			DBG(printf("line %5u audio terminal type %02x %s\n", linectr, u, cp));
 			continue;
 		}
+		if (buf[0] == 'H' && buf[1] == 'C' && buf[2] == 'C' && isspace(buf[3])) {
+			/* HID Descriptor bCountryCode */
+                        cp =  buf+3;
+                        while (isspace(*cp))
+                                cp++;
+                        if (!isxdigit(*cp)) {
+                                fprintf(stderr, "Invalid HID country code at line %u\n", linectr);
+                                continue;
+                        }
+                        u = strtoul(cp, &cp, 10);
+                        while (isspace(*cp))
+                                cp++;
+                        if (!*cp) {
+                                fprintf(stderr, "Invalid HID country code at line %u\n", linectr);
+                                continue;
+                        }
+                        if (new_countrycode(cp, u))
+                                fprintf(stderr, "Duplicate HID country code at line %u country %02u %s\n", linectr, u, cp);
+                        DBG(printf("line %5u keyboard country code %02u %s\n", linectr, u, cp));
+                        continue;
+		}
 		if (isxdigit(*cp)) {
 			/* vendor */
 			u = strtoul(cp, &cp, 16);
--- usbutils-0.11/names.h~usbutils-0.11+cvs20041108
+++ usbutils-0.11/names.h
@@ -44,6 +44,7 @@
 extern const char *names_langid(u_int16_t langid);
 extern const char *names_physdes(u_int8_t ph);
 extern const char *names_bias(u_int8_t b);
+extern const char *names_countrycode(unsigned int countrycode);
 extern int names_init(char *n);
 
 /* ---------------------------------------------------------------------- */
--- usbutils-0.11/usb.h
+++ /dev/null
@@ -1,768 +0,0 @@
-#ifndef __LINUX_USB_H
-#define __LINUX_USB_H
-
-/* USB constants */
-
-/*
- * Device and/or Interface Class codes
- */
-#define USB_CLASS_PER_INTERFACE		0	/* for DeviceClass */
-#define USB_CLASS_AUDIO			1
-#define USB_CLASS_COMM			2
-#define USB_CLASS_HID			3
-#define USB_CLASS_PRINTER		7
-#define USB_CLASS_MASS_STORAGE		8
-#define USB_CLASS_HUB			9
-#define USB_CLASS_DATA			10
-#define USB_CLASS_VENDOR_SPEC		0xff
-
-/*
- * USB types
- */
-#define USB_TYPE_STANDARD		(0x00 << 5)
-#define USB_TYPE_CLASS			(0x01 << 5)
-#define USB_TYPE_VENDOR			(0x02 << 5)
-#define USB_TYPE_RESERVED		(0x03 << 5)
-
-/*
- * USB recipients
- */
-#define USB_RECIP_DEVICE		0x00
-#define USB_RECIP_INTERFACE		0x01
-#define USB_RECIP_ENDPOINT		0x02
-#define USB_RECIP_OTHER			0x03
-
-/*
- * USB directions
- */
-#define USB_DIR_OUT			0
-#define USB_DIR_IN			0x80
-
-/*
- * Descriptor types
- */
-#define USB_DT_DEVICE			0x01
-#define USB_DT_CONFIG			0x02
-#define USB_DT_STRING			0x03
-#define USB_DT_INTERFACE		0x04
-#define USB_DT_ENDPOINT			0x05
-
-#define USB_DT_HID			(USB_TYPE_CLASS | 0x01)
-#define USB_DT_REPORT			(USB_TYPE_CLASS | 0x02)
-#define USB_DT_PHYSICAL			(USB_TYPE_CLASS | 0x03)
-#define USB_DT_HUB			(USB_TYPE_CLASS | 0x09)
-
-/*
- * Descriptor sizes per descriptor type
- */
-#define USB_DT_DEVICE_SIZE		18
-#define USB_DT_CONFIG_SIZE		9
-#define USB_DT_INTERFACE_SIZE		9
-#define USB_DT_ENDPOINT_SIZE		7
-#define USB_DT_ENDPOINT_AUDIO_SIZE	9	/* Audio extension */
-#define USB_DT_HUB_NONVAR_SIZE		7
-#define USB_DT_HID_SIZE			9
-
-/*
- * Endpoints
- */
-#define USB_ENDPOINT_NUMBER_MASK	0x0f	/* in bEndpointAddress */
-#define USB_ENDPOINT_DIR_MASK		0x80
-
-#define USB_ENDPOINT_XFERTYPE_MASK	0x03	/* in bmAttributes */
-#define USB_ENDPOINT_XFER_CONTROL	0
-#define USB_ENDPOINT_XFER_ISOC		1
-#define USB_ENDPOINT_XFER_BULK		2
-#define USB_ENDPOINT_XFER_INT		3
-
-/*
- * USB Packet IDs (PIDs)
- */
-#define USB_PID_UNDEF_0                        0xf0
-#define USB_PID_OUT                            0xe1
-#define USB_PID_ACK                            0xd2
-#define USB_PID_DATA0                          0xc3
-#define USB_PID_PING                           0xb4	/* USB 2.0 */
-#define USB_PID_SOF                            0xa5
-#define USB_PID_NYET                           0x96	/* USB 2.0 */
-#define USB_PID_DATA2                          0x87	/* USB 2.0 */
-#define USB_PID_SPLIT                          0x78	/* USB 2.0 */
-#define USB_PID_IN                             0x69
-#define USB_PID_NAK                            0x5a
-#define USB_PID_DATA1                          0x4b
-#define USB_PID_PREAMBLE                       0x3c	/* Token mode */
-#define USB_PID_ERR                            0x3c	/* USB 2.0: handshake mode */
-#define USB_PID_SETUP                          0x2d
-#define USB_PID_STALL                          0x1e
-#define USB_PID_MDATA                          0x0f	/* USB 2.0 */
-
-/*
- * Standard requests
- */
-#define USB_REQ_GET_STATUS		0x00
-#define USB_REQ_CLEAR_FEATURE		0x01
-#define USB_REQ_SET_FEATURE		0x03
-#define USB_REQ_SET_ADDRESS		0x05
-#define USB_REQ_GET_DESCRIPTOR		0x06
-#define USB_REQ_SET_DESCRIPTOR		0x07
-#define USB_REQ_GET_CONFIGURATION	0x08
-#define USB_REQ_SET_CONFIGURATION	0x09
-#define USB_REQ_GET_INTERFACE		0x0A
-#define USB_REQ_SET_INTERFACE		0x0B
-#define USB_REQ_SYNCH_FRAME		0x0C
-
-/*
- * HID requests
- */
-#define USB_REQ_GET_REPORT		0x01
-#define USB_REQ_GET_IDLE		0x02
-#define USB_REQ_GET_PROTOCOL		0x03
-#define USB_REQ_SET_REPORT		0x09
-#define USB_REQ_SET_IDLE		0x0A
-#define USB_REQ_SET_PROTOCOL		0x0B
-
-
-#ifdef __KERNEL__
-
-#include <linux/types.h>
-#include <linux/ioctl.h>
-#include <linux/version.h>
-#include <linux/sched.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>	/* for in_interrupt() */
-#include <linux/config.h>
-#include <linux/list.h>
-
-#define USB_MAJOR 180
-
-static __inline__ void wait_ms(unsigned int ms)
-{
-	if(!in_interrupt()) {
-		current->state = TASK_UNINTERRUPTIBLE;
-		schedule_timeout(1 + ms * HZ / 1000);
-	}
-	else
-		mdelay(ms);
-}
-
-typedef struct {
-	__u8 requesttype;
-	__u8 request;
-	__u16 value;
-	__u16 index;
-	__u16 length;
-} devrequest __attribute__ ((packed));
-
-/*
- * USB-status codes:
- * USB_ST* maps to -E* and should go away in the future
- */
-
-#define USB_ST_NOERROR		0
-#define USB_ST_CRC		(-EILSEQ)
-#define USB_ST_BITSTUFF		(-EPROTO)
-#define USB_ST_NORESPONSE	(-ETIMEDOUT)			/* device not responding/handshaking */
-#define USB_ST_DATAOVERRUN	(-EOVERFLOW)
-#define USB_ST_DATAUNDERRUN	(-EREMOTEIO)
-#define USB_ST_BUFFEROVERRUN	(-ECOMM)
-#define USB_ST_BUFFERUNDERRUN	(-ENOSR)
-#define USB_ST_INTERNALERROR	(-EPROTO) 			/* unknown error */
-#define USB_ST_SHORT_PACKET    	(-EREMOTEIO)
-#define USB_ST_PARTIAL_ERROR  	(-EXDEV)			/* ISO transfer only partially completed */
-#define USB_ST_URB_KILLED     	(-ENOENT)			/* URB canceled by user */
-#define USB_ST_URB_PENDING       (-EINPROGRESS)
-#define USB_ST_REMOVED		(-ENODEV) 			/* device not existing or removed */
-#define USB_ST_TIMEOUT		(-ETIMEDOUT)			/* communication timed out, also in urb->status**/
-#define USB_ST_NOTSUPPORTED	(-ENOSYS)			
-#define USB_ST_BANDWIDTH_ERROR	(-ENOSPC)			/* too much bandwidth used */
-#define USB_ST_URB_INVALID_ERROR  (-EINVAL)			/* invalid value/transfer type */
-#define USB_ST_URB_REQUEST_ERROR  (-ENXIO)			/* invalid endpoint */
-#define USB_ST_STALL		(-EPIPE) 			/* pipe stalled, also in urb->status*/
-
-/*
- * USB device number allocation bitmap. There's one bitmap
- * per USB tree.
- */
-struct usb_devmap {
-	unsigned long devicemap[128 / (8*sizeof(unsigned long))];
-};
-
-#define USB_MAXBUS		64
-
-struct usb_busmap {
-	unsigned long busmap[USB_MAXBUS / (8*sizeof(unsigned long))];
-};
-
-/*
- * This is a USB device descriptor.
- *
- * USB device information
- */
-
-/* Everything but the endpoint maximums are aribtrary */
-#define USB_MAXCONFIG		8
-#define USB_ALTSETTINGALLOC     4
-#define USB_MAXALTSETTING	128  /* Hard limit */
-#define USB_MAXINTERFACES	32
-#define USB_MAXENDPOINTS	32
-
-/* All standard descriptors have these 2 fields in common */
-struct usb_descriptor_header {
-	__u8  bLength;
-	__u8  bDescriptorType;
-} __attribute__ ((packed));
-
-/* Device descriptor */
-struct usb_device_descriptor {
-	__u8  bLength;
-	__u8  bDescriptorType;
-	__u16 bcdUSB;
-	__u8  bDeviceClass;
-	__u8  bDeviceSubClass;
-	__u8  bDeviceProtocol;
-	__u8  bMaxPacketSize0;
-	__u16 idVendor;
-	__u16 idProduct;
-	__u16 bcdDevice;
-	__u8  iManufacturer;
-	__u8  iProduct;
-	__u8  iSerialNumber;
-	__u8  bNumConfigurations;
-} __attribute__ ((packed));
-
-/* Endpoint descriptor */
-struct usb_endpoint_descriptor {
-	__u8  bLength;
-	__u8  bDescriptorType;
-	__u8  bEndpointAddress;
-	__u8  bmAttributes;
-	__u16 wMaxPacketSize;
-	__u8  bInterval;
-	__u8  bRefresh;
-	__u8  bSynchAddress;
-
-   	unsigned char *extra;   /* Extra descriptors */
-	int extralen;
-} __attribute__ ((packed));
-
-/* Interface descriptor */
-struct usb_interface_descriptor {
-	__u8  bLength;
-	__u8  bDescriptorType;
-	__u8  bInterfaceNumber;
-	__u8  bAlternateSetting;
-	__u8  bNumEndpoints;
-	__u8  bInterfaceClass;
-	__u8  bInterfaceSubClass;
-	__u8  bInterfaceProtocol;
-	__u8  iInterface;
-
-  	struct usb_endpoint_descriptor *endpoint;
-
-	unsigned char *extra;
-	int extralen;
-} __attribute__ ((packed));
-
-struct usb_interface {
-	struct usb_interface_descriptor *altsetting;
-
-	int act_altsetting;		/* active alternate setting */
-	int num_altsetting;		/* number of alternate settings */
-	int max_altsetting;             /* total memory allocated */
- 
-	struct usb_driver *driver;	/* driver */
-	void *private_data;
-};
-
-/* Configuration descriptor information.. */
-struct usb_config_descriptor {
-	__u8  bLength;
-	__u8  bDescriptorType;
-	__u16 wTotalLength;
-	__u8  bNumInterfaces;
-	__u8  bConfigurationValue;
-	__u8  iConfiguration;
-	__u8  bmAttributes;
-	__u8  MaxPower;
-
-	struct usb_interface *interface;
-} __attribute__ ((packed));
-
-/* String descriptor */
-struct usb_string_descriptor {
-	__u8  bLength;
-	__u8  bDescriptorType;
-	__u16 wData[1];
-} __attribute__ ((packed));
-
-struct usb_device;
-
-struct usb_driver {
-	const char *name;
-
-	void * (*probe)(struct usb_device *, unsigned int);
-	void (*disconnect)(struct usb_device *, void *);
-
-	struct list_head driver_list;
-
-	struct file_operations *fops;
-	int minor;
-};
-
-/*
- * Pointer to a device endpoint interrupt function -greg
- *   Parameters:
- *     int status - This needs to be defined.  Right now each HCD
- *         passes different transfer status bits back.  Don't use it
- *         until we come up with a common meaning.
- *     void *buffer - This is a pointer to the data used in this
- *         USB transfer.
- *     int length - This is the number of bytes transferred in or out
- *         of the buffer by this transfer.  (-1 = unknown/unsupported)
- *     void *dev_id - This is a user defined pointer set when the IRQ
- *         is requested that is passed back.
- *
- *   Special Cases:
- *     if (status == USB_ST_REMOVED), don't trust buffer or len.
- */
-typedef int (*usb_device_irq)(int, void *, int, void *);
-
-/*----------------------------------------------------------------------------* 
- * New USB Structures                                                         *
- *----------------------------------------------------------------------------*/
-
-#define USB_DISABLE_SPD         0x0001
-#define USB_ISO_ASAP            0x0002
-#define USB_URB_EARLY_COMPLETE  0x0004
-#define USB_ASYNC_UNLINK        0x0008
-#define USB_QUEUE_BULK          0x0010
-#define USB_TIMEOUT_KILLED	0x1000	// only set by HCD!
-
-typedef struct
-{
-	unsigned int offset;
-	unsigned int length;		// expected length
-	unsigned int actual_length;
-	unsigned int status;
-} iso_packet_descriptor_t, *piso_packet_descriptor_t;
-
-struct urb;
-typedef void (*usb_complete_t)(struct urb *);
-
-typedef struct urb
-{
-	spinlock_t lock;		// lock for the URB
-	void *hcpriv;			// private data for host controller
-	struct list_head urb_list;	// list pointer to all active urbs 
-	struct urb *next;		// pointer to next URB	
-	struct usb_device *dev;		// pointer to associated USB device
-	unsigned int pipe;		// pipe information
-	int status;			// returned status
-	unsigned int transfer_flags;	// USB_DISABLE_SPD | USB_ISO_ASAP | USB_URB_EARLY_COMPLETE
-	void *transfer_buffer;		// associated data buffer
-	int transfer_buffer_length;	// data buffer length
-	int actual_length;              // actual data buffer length	
-	unsigned char *setup_packet;	// setup packet (control only)
-	//
-	int start_frame;		// start frame (iso/irq only)
-	int number_of_packets;		// number of packets in this request (iso/irq only)
-	int interval;                   // polling interval (irq only)
-	int error_count;		// number of errors in this transfer (iso only)
-	int timeout;			// timeout (in jiffies)
-	//
-	void *context;			// context for completion routine
-	usb_complete_t complete;	// pointer to completion routine
-	//
-	iso_packet_descriptor_t	 iso_frame_desc[0];
-} urb_t, *purb_t;
-
-#define FILL_CONTROL_URB(a,aa,b,c,d,e,f,g) \
-    do {\
-	spin_lock_init(&(a)->lock);\
-	(a)->dev=aa;\
-	(a)->pipe=b;\
-	(a)->setup_packet=c;\
-	(a)->transfer_buffer=d;\
-	(a)->transfer_buffer_length=e;\
-	(a)->complete=f;\
-	(a)->context=g;\
-    } while (0)
-
-#define FILL_BULK_URB(a,aa,b,c,d,e,f) \
-    do {\
-	spin_lock_init(&(a)->lock);\
-	(a)->dev=aa;\
-	(a)->pipe=b;\
-	(a)->transfer_buffer=c;\
-	(a)->transfer_buffer_length=d;\
-	(a)->complete=e;\
-	(a)->context=f;\
-    } while (0)
-    
-#define FILL_INT_URB(a,aa,b,c,d,e,f,g) \
-    do {\
-	spin_lock_init(&(a)->lock);\
-	(a)->dev=aa;\
-	(a)->pipe=b;\
-	(a)->transfer_buffer=c;\
-	(a)->transfer_buffer_length=d;\
-	(a)->complete=e;\
-	(a)->context=f;\
-	(a)->interval=g;\
-	(a)->start_frame=-1;\
-    } while (0)
-
-#define FILL_CONTROL_URB_TO(a,aa,b,c,d,e,f,g,h) \
-    do {\
-	spin_lock_init(&(a)->lock);\
-	(a)->dev=aa;\
-	(a)->pipe=b;\
-	(a)->setup_packet=c;\
-	(a)->transfer_buffer=d;\
-	(a)->transfer_buffer_length=e;\
-	(a)->complete=f;\
-	(a)->context=g;\
-	(a)->timeout=h;\
-    } while (0)
-
-#define FILL_BULK_URB_TO(a,aa,b,c,d,e,f,g) \
-    do {\
-	spin_lock_init(&(a)->lock);\
-	(a)->dev=aa;\
-	(a)->pipe=b;\
-	(a)->transfer_buffer=c;\
-	(a)->transfer_buffer_length=d;\
-	(a)->complete=e;\
-	(a)->context=f;\
-	(a)->timeout=g;\
-    } while (0)
-    
-purb_t usb_alloc_urb(int iso_packets);
-void usb_free_urb (purb_t purb);
-int usb_submit_urb(purb_t purb);
-int usb_unlink_urb(purb_t purb);
-int usb_internal_control_msg(struct usb_device *usb_dev, unsigned int pipe, devrequest *cmd,  void *data, int len, int timeout);
-int usb_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *data, int len, int *actual_length, int timeout);
-
-/*-------------------------------------------------------------------*
- *                         COMPATIBILITY STUFF                       *
- *-------------------------------------------------------------------*/
-typedef struct
-{
-  wait_queue_head_t *wakeup;
-
-  usb_device_irq handler;
-  void* stuff;
-  /* more to follow */
-} api_wrapper_data;
-
-struct irq_wrapper_data {
-	void *context;
-	usb_device_irq handler;
-};
-
-/* -------------------------------------------------------------------------- */
-
-struct usb_operations {
-	int (*allocate)(struct usb_device *);
-	int (*deallocate)(struct usb_device *);
-	int (*get_frame_number) (struct usb_device *usb_dev);
-	int (*submit_urb) (struct urb* purb);
-	int (*unlink_urb) (struct urb* purb);
-};
-
-/*
- * Allocated per bus we have
- */
-struct usb_bus {
-	int busnum;			/* Bus number (in order of reg) */
-
-	struct usb_devmap devmap;       /* Device map */
-	struct usb_operations *op;      /* Operations (specific to the HC) */
-	struct usb_device *root_hub;    /* Root hub */
-	struct list_head bus_list;
-	void *hcpriv;                   /* Host Controller private data */
-
-	unsigned int bandwidth_allocated; /* on this Host Controller; */
-					  /* applies to Int. and Isoc. pipes; */
-					  /* measured in microseconds/frame; */
-					  /* range is 0..900, where 900 = */
-					  /* 90% of a 1-millisecond frame */
-	int bandwidth_int_reqs;		/* number of Interrupt requesters */
-	int bandwidth_isoc_reqs;	/* number of Isoc. requesters */
-
-	/* usbdevfs inode list */
-        struct list_head inodes;
-};
-
-#define USB_MAXCHILDREN (8)	/* This is arbitrary */
-
-struct usb_device {
-	int devnum;			/* Device number on USB bus */
-	int slow;			/* Slow device? */
-
-	atomic_t refcnt;		/* Reference count */
-
-	unsigned int toggle[2];		/* one bit for each endpoint ([0] = IN, [1] = OUT) */
-	unsigned int halted[2];		/* endpoint halts; one bit per endpoint # & direction; */
-					/* [0] = IN, [1] = OUT */
-	struct usb_config_descriptor *actconfig;/* the active configuration */
-	int epmaxpacketin[16];		/* INput endpoint specific maximums */
-	int epmaxpacketout[16];		/* OUTput endpoint specific maximums */
-
-	struct usb_device *parent;
-	struct usb_bus *bus;		/* Bus we're part of */
-
-	struct usb_device_descriptor descriptor;/* Descriptor */
-	struct usb_config_descriptor *config;	/* All of the configs */
-
-	int have_langid;		/* whether string_langid is valid yet */
-	int string_langid;		/* language ID for strings */
-  
-	void *hcpriv;			/* Host Controller private data */
-	
-        /* usbdevfs inode list */
-        struct list_head inodes;
-        struct list_head filelist;
-
-	/*
-	 * Child devices - these can be either new devices
-	 * (if this is a hub device), or different instances
-	 * of this same device.
-	 *
-	 * Each instance needs its own set of data structures.
-	 */
-
-	int maxchild;			/* Number of ports if hub */
-	struct usb_device *children[USB_MAXCHILDREN];
-};
-
-extern int usb_register(struct usb_driver *);
-extern void usb_deregister(struct usb_driver *);
-
-/* used these for multi-interface device registration */
-extern void usb_driver_claim_interface(struct usb_driver *driver, struct usb_interface *iface, void* priv);
-extern int usb_interface_claimed(struct usb_interface *iface);
-extern void usb_driver_release_interface(struct usb_driver *driver, struct usb_interface *iface);
-
-extern struct usb_bus *usb_alloc_bus(struct usb_operations *);
-extern void usb_free_bus(struct usb_bus *);
-extern void usb_register_bus(struct usb_bus *);
-extern void usb_deregister_bus(struct usb_bus *);
-
-extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bus *);
-extern void usb_free_dev(struct usb_device *);
-extern void usb_inc_dev_use(struct usb_device *);
-#define usb_dec_dev_use usb_free_dev
-extern void usb_release_bandwidth(struct usb_device *, int);
-
-extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout);
-
-extern void usb_init_root_hub(struct usb_device *dev);
-extern int usb_root_hub_string(int id, int serial, char *type, __u8 *data, int len);
-extern void usb_connect(struct usb_device *dev);
-extern void usb_disconnect(struct usb_device **);
-
-extern void usb_destroy_configuration(struct usb_device *dev);
-
-int usb_get_current_frame_number (struct usb_device *usb_dev);
-
-/*
- * Calling this entity a "pipe" is glorifying it. A USB pipe
- * is something embarrassingly simple: it basically consists
- * of the following information:
- *  - device number (7 bits)
- *  - endpoint number (4 bits)
- *  - current Data0/1 state (1 bit)
- *  - direction (1 bit)
- *  - speed (1 bit)
- *  - max packet size (2 bits: 8, 16, 32 or 64) [Historical; now gone.]
- *  - pipe type (2 bits: control, interrupt, bulk, isochronous)
- *
- * That's 18 bits. Really. Nothing more. And the USB people have
- * documented these eighteen bits as some kind of glorious
- * virtual data structure.
- *
- * Let's not fall in that trap. We'll just encode it as a simple
- * unsigned int. The encoding is:
- *
- *  - max size:		bits 0-1	(00 = 8, 01 = 16, 10 = 32, 11 = 64) [Historical; now gone.]
- *  - direction:	bit 7		(0 = Host-to-Device [Out], 1 = Device-to-Host [In])
- *  - device:		bits 8-14
- *  - endpoint:		bits 15-18
- *  - Data0/1:		bit 19
- *  - speed:		bit 26		(0 = Full, 1 = Low Speed)
- *  - pipe type:	bits 30-31	(00 = isochronous, 01 = interrupt, 10 = control, 11 = bulk)
- *
- * Why? Because it's arbitrary, and whatever encoding we select is really
- * up to us. This one happens to share a lot of bit positions with the UHCI
- * specification, so that much of the uhci driver can just mask the bits
- * appropriately.
- */
-
-#define PIPE_ISOCHRONOUS		0
-#define PIPE_INTERRUPT			1
-#define PIPE_CONTROL			2
-#define PIPE_BULK			3
-
-#define usb_maxpacket(dev, pipe, out)	(out \
-				? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] \
-				: (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] )
-#define usb_packetid(pipe)	(((pipe) & USB_DIR_IN) ? USB_PID_IN : USB_PID_OUT)
-
-#define usb_pipeout(pipe)	((((pipe) >> 7) & 1) ^ 1)
-#define usb_pipein(pipe)	(((pipe) >> 7) & 1)
-#define usb_pipedevice(pipe)	(((pipe) >> 8) & 0x7f)
-#define usb_pipe_endpdev(pipe)	(((pipe) >> 8) & 0x7ff)
-#define usb_pipeendpoint(pipe)	(((pipe) >> 15) & 0xf)
-#define usb_pipedata(pipe)	(((pipe) >> 19) & 1)
-#define usb_pipeslow(pipe)	(((pipe) >> 26) & 1)
-#define usb_pipetype(pipe)	(((pipe) >> 30) & 3)
-#define usb_pipeisoc(pipe)	(usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
-#define usb_pipeint(pipe)	(usb_pipetype((pipe)) == PIPE_INTERRUPT)
-#define usb_pipecontrol(pipe)	(usb_pipetype((pipe)) == PIPE_CONTROL)
-#define usb_pipebulk(pipe)	(usb_pipetype((pipe)) == PIPE_BULK)
-
-#define PIPE_DEVEP_MASK		0x0007ff00
-
-/* The D0/D1 toggle bits */
-#define usb_gettoggle(dev, ep, out) (((dev)->toggle[out] >> ep) & 1)
-#define	usb_dotoggle(dev, ep, out)  ((dev)->toggle[out] ^= (1 << ep))
-#define usb_settoggle(dev, ep, out, bit) ((dev)->toggle[out] = ((dev)->toggle[out] & ~(1 << ep)) | ((bit) << ep))
-
-/* Endpoint halt control/status */
-#define usb_endpoint_out(ep_dir)	(((ep_dir >> 7) & 1) ^ 1)
-#define usb_endpoint_halt(dev, ep, out) ((dev)->halted[out] |= (1 << (ep)))
-#define usb_endpoint_running(dev, ep, out) ((dev)->halted[out] &= ~(1 << (ep)))
-#define usb_endpoint_halted(dev, ep, out) ((dev)->halted[out] & (1 << (ep)))
-
-static inline unsigned int __create_pipe(struct usb_device *dev, unsigned int endpoint)
-{
-	return (dev->devnum << 8) | (endpoint << 15) | (dev->slow << 26);
-}
-
-static inline unsigned int __default_pipe(struct usb_device *dev)
-{
-	return (dev->slow << 26);
-}
-
-/* Create various pipes... */
-#define usb_sndctrlpipe(dev,endpoint)	((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvctrlpipe(dev,endpoint)	((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_sndisocpipe(dev,endpoint)	((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvisocpipe(dev,endpoint)	((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_sndbulkpipe(dev,endpoint)	((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvbulkpipe(dev,endpoint)	((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_sndintpipe(dev,endpoint)	((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvintpipe(dev,endpoint)	((PIPE_INTERRUPT << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_snddefctrl(dev)		((PIPE_CONTROL << 30) | __default_pipe(dev))
-#define usb_rcvdefctrl(dev)		((PIPE_CONTROL << 30) | __default_pipe(dev) | USB_DIR_IN)
-
-/*
- * Send and receive control messages..
- */
-int usb_new_device(struct usb_device *dev);
-int usb_reset_device(struct usb_device *dev);
-int usb_set_address(struct usb_device *dev);
-int usb_get_descriptor(struct usb_device *dev, unsigned char desctype,
-	unsigned char descindex, void *buf, int size);
-int usb_get_class_descriptor(struct usb_device *dev, int ifnum, unsigned char desctype,
-	unsigned char descindex, void *buf, int size);
-int usb_get_device_descriptor(struct usb_device *dev);
-int __usb_get_extra_descriptor(char *buffer, unsigned size, unsigned char type, void **ptr);
-int usb_get_status(struct usb_device *dev, int type, int target, void *data);
-int usb_get_protocol(struct usb_device *dev, int ifnum);
-int usb_set_protocol(struct usb_device *dev, int ifnum, int protocol);
-int usb_set_interface(struct usb_device *dev, int ifnum, int alternate);
-int usb_set_idle(struct usb_device *dev, int ifnum, int duration, int report_id);
-int usb_set_configuration(struct usb_device *dev, int configuration);
-int usb_get_report(struct usb_device *dev, int ifnum, unsigned char type,
-	unsigned char id, void *buf, int size);
-int usb_set_report(struct usb_device *dev, int ifnum, unsigned char type,
-	unsigned char id, void *buf, int size);
-int usb_string(struct usb_device *dev, int index, char *buf, size_t size);
-int usb_clear_halt(struct usb_device *dev, int pipe);
-
-#define usb_get_extra_descriptor(ifpoint,type,ptr)\
-	__usb_get_extra_descriptor((ifpoint)->extra,(ifpoint)->extralen,type,(void**)ptr)
-
-/*
- * Some USB bandwidth allocation constants.
- */
-#define BW_HOST_DELAY	1000L		/* nanoseconds */
-#define BW_HUB_LS_SETUP	333L		/* nanoseconds */
-                        /* 4 full-speed bit times (est.) */
-
-#define FRAME_TIME_BITS         12000L		/* frame = 1 millisecond */
-#define FRAME_TIME_MAX_BITS_ALLOC	(90L * FRAME_TIME_BITS / 100L)
-#define FRAME_TIME_USECS	1000L
-#define FRAME_TIME_MAX_USECS_ALLOC	(90L * FRAME_TIME_USECS / 100L)
-
-#define BitTime(bytecount)  (7 * 8 * bytecount / 6)  /* with integer truncation */
-		/* Trying not to use worst-case bit-stuffing
-                   of (7/6 * 8 * bytecount) = 9.33 * bytecount */
-		/* bytecount = data payload byte count */
-
-#define NS_TO_US(ns)	((ns + 500L) / 1000L)
-			/* convert & round nanoseconds to microseconds */
-
-/*
- * Debugging helpers..
- */
-void usb_show_device_descriptor(struct usb_device_descriptor *);
-void usb_show_config_descriptor(struct usb_config_descriptor *);
-void usb_show_interface_descriptor(struct usb_interface_descriptor *);
-void usb_show_endpoint_descriptor(struct usb_endpoint_descriptor *);
-void usb_show_device(struct usb_device *);
-void usb_show_string(struct usb_device *dev, char *id, int index);
-
-#ifdef DEBUG
-#define dbg(format, arg...) printk(KERN_DEBUG __FILE__ ": " format "\n" , ## arg)
-#else
-#define dbg(format, arg...) do {} while (0)
-#endif
-#define err(format, arg...) printk(KERN_ERR __FILE__ ": " format "\n" , ## arg)
-#define info(format, arg...) printk(KERN_INFO __FILE__ ": " format "\n" , ## arg)
-#define warn(format, arg...) printk(KERN_WARNING __FILE__ ": " format "\n" , ## arg)
-
-
-/*
- * bus and driver list
- */
-
-extern struct list_head usb_driver_list;
-extern struct list_head usb_bus_list;
-
-/*
- * USB device fs stuff
- */
-
-#ifdef CONFIG_USB_DEVICEFS
-
-/*
- * these are expected to be called from the USB core/hub thread
- * with the kernel lock held
- */
-extern void usbdevfs_add_bus(struct usb_bus *bus);
-extern void usbdevfs_remove_bus(struct usb_bus *bus);
-extern void usbdevfs_add_device(struct usb_device *dev);
-extern void usbdevfs_remove_device(struct usb_device *dev);
-
-extern int usbdevfs_init(void);
-extern void usbdevfs_cleanup(void);
-
-#else /* CONFIG_USB_DEVICEFS */
-
-extern inline void usbdevfs_add_bus(struct usb_bus *bus) {}
-extern inline void usbdevfs_remove_bus(struct usb_bus *bus) {}
-extern inline void usbdevfs_add_device(struct usb_device *dev) {}
-extern inline void usbdevfs_remove_device(struct usb_device *dev) {}
-
-extern inline int usbdevfs_init(void) { return 0; }
-extern inline void usbdevfs_cleanup(void) { }
-
-#endif /* CONFIG_USB_DEVICEFS */
-
-#endif  /* __KERNEL__ */
-
-#endif
--- usbutils-0.11/usb.ids~usbutils-0.11+cvs20041108
+++ usbutils-0.11/usb.ids
@@ -3,8 +3,10 @@
 #
 #	Maintained by Vojtech Pavlik <vojtech@suse.cz>
 #	If you have any new entries, send them to the maintainer.
+#	The latest version can be obtained from
+#		http://www.linux-usb.org/usb.ids
 #
-# $Id$
+# $Id$
 #
 
 # Vendors, devices and interfaces. Please keep sorted.
@@ -14,22 +16,26 @@
 #	device  device_name				<-- single tab
 #		interface  interface_name		<-- two tabs
 
-0000  Virtual
-	0000  Hub
 0386  LTS
 	0001  PSX for USB Converter
-03e8  AOX Inc.
+03e8  EndPoints, Inc.
 	0004  SE401 WebCam
 	0008  101 Ethernet [klsi]
 03e9  Thesys Microelectronics
 03ea  Data Broadcasting Corp.
 03eb  Atmel Corp.
 	3301  4-port Hub
-	7603  AT76c503a D-Link DWL-120
-03ec  Iwatsu America Inc.
+	3312  4-port Hub
+	7603  AT76c503a D-Link DWL-120 802.11b Adapter
+	7605  AT76c503a 802.11b Adapter
+	7606  AT76c505 802.11b dapter
+03ec  Iwatsu America, Inc.
 03ed  Mitel Corp.
 03ee  Mitsumi
 	0000  CD-R/RW Drive
+	641f  WIF-0402C Bluetooth Adapter
+	6440  WML-C52APR Bluetooth Adapter
+	6901  SmartDisk FDD
 03f0  Hewlett-Packard
 	0004  DeskJet 895c
 	0101  ScanJet 4100c
@@ -39,6 +45,8 @@
 	0107  CD-Writer Plus
 	010c  Multimedia Keyboard Hub
 	0111  G55xi Printer/Scanner/Copier
+	011c  hn210w 802.11b Adapter
+	0121  HP49g+ Calculator
 	0201  ScanJet 6200c
 	0202  PhotoSmart S20
 	0204  DeskJet 815c
@@ -46,30 +54,80 @@
 	0207  CD-Writer Plus 8200e
 	020c  Multimedia Keyboard
 	0304  DeskJet 810c/812c
+	0305  ScanJet 4300c
 	0311  OfficeJet G85xi
 	0317  LaserJet 1200
 	0401  ScanJet 5200c
 	0404  DeskJet 830c/832c
 	0405  ScanJet 3400cse
 	0504  DeskJet 885c
+	0505  ScanJet 2100c
+	0517  LaserJet 1000
 	0601  ScanJet 6300c
 	0604  DeskJet 840c
 	0605  ScanJet 2200c
 	0701  ScanJet 5300c/5370c
+	0704  DeskJet 825c
 	0705  ScanJet 4400c
+	0712  DeskJet 1180c
+	0801  ScanJet 7400c
 	0804  DeskJet 816c
+	0901  ScanJet 2300c
+	0904  DeskJet 845c
 	1004  DeskJet 970c/970cse
-	1104  Deskjet 959C
+	1005  ScanJet 5400c
+	1016  Jornada 548 Pocket PC
+	1104  DeskJet 959c
 	1105  ScanJet 5470c
+	1116  Jornada 568 Pocket PC
 	1151  750xi Printer/Scanner/Copier
 	1204  DeskJet 930c
+	1305  ScanJet 4570c
+	1317  LaserJet 1005
+	1405  Scanjet 3670
+	1504  DeskJet 920c
+	1604  DeskJet 940c
+	1904  DeskJet 3820
+	1e11  PSC-950
 	2004  DeskJet 640c
+	2005  ScanJet 3570c
+	2104  DeskJet 630c
+	2205  ScanJet 3500c
+	2304  DeskJet 656c
+	2305  ScanJet 3970c
+	2811  PSC-2100
 	3102  PhotoSmart P1100 Printer w/ Card Reader
-	4102  PhotoSmart 618 Camera
-	6202  PhotoSmart 215 Camera
-	6302  PhotoSmart 318/612 Camera
-	efbe  NEC Picty900
+	3104  DeskJet 960c
+	3304  DeskJet 990c
+	3404  DeskJet 6122
+	3504  DeskJet 6127c
+	3c02  PhotoSmart 7350
+	3f11  PSC-1315
+	4002  PhotoSmart 720 / PhotoSmart 935 (storage)
+	4102  PhotoSmart 618
+	4202  PhotoSmart 812
+	4302  PhotoSmart 850 (ptp)
+	4402  PhotoSmart 935 (ptp)
+	5004  DeskJet 995c
+	6004  DeskJet 5550
+	6104  DeskJet 5650c
+	6202  PhotoSmart 215
+	6204  DeskJet 5150c
+	6302  PhotoSmart 318/612
+	6402  PhotoSmart 715 (ptp)
+	6502  PhotoSmart 120 (ptp)
+	6602  PhotoSmart 320
+	6702  PhotoSmart 720 (ptp)
+	6802  PhotoSmart 620 (ptp)
+	6a02  PhotoSmart 735 (ptp)
+	7004  DeskJet 3320c
+	7104  DeskJet 3420c
+	7202  PhotoSmart 43x (ptp)
+	7204  DeskJet 36xx
+	7304  DeskJet 35xx
+	a004  DeskJet 5850c
 	bef4  NEC Picty760
+	efbe  NEC Picty900
 	f0be  NEC Picty920
 	f1be  NEC Picty800
 03f1  Genoa Technology
@@ -79,32 +137,35 @@
 03f5  Siemens Electromechanical
 03f8  Epson Imaging Technology Center
 03f9  KeyTronic Corp.
-03fb  OPTi Inc.
+03fb  OPTi, Inc.
 03fc  Elitegroup Computer Systems
-03fd  Xilinx Inc.
+03fd  Xilinx, Inc.
 03fe  Farallon Comunications
-0400  National Semiconductor
-	1000  BearPaw 1200 Scanner
-	1001  BearPaw 2400 Scanner
-0401  National Registry Inc.
-0402  Acer Labs Inc.
-0403  Future Technology Devices
+0400  National Semiconductor Corp.
+	1000  Mustek BearPaw 1200 Scanner
+	1001  Mustek BearPaw 2400 Scanner
+0401  National Registry, Inc.
+0402  ALi Corp.
+0403  Future Technology Devices International, Ltd
 	0000  H4SMK 7 Port Hub
-	8070  7 Port Hub
+	6001  8-bit FIFO
 	8040  4 Port Hub
+	8070  7 Port Hub
 	8370  7 Port Hub
 	8371  PS/2 Keyboard And Mouse
 	8372  FT8U100AX Serial Port
+	F208  Papenmeier Braille-Display
 0404  NCR Corp.
-0405  inSilicon
+0405  Synopsys, Inc.
 0406  Fujitsu-ICL Computers
 0407  Fujitsu Personal Systems, Inc.
-0408  Quanta Computer Inc.
-0409  NEC Systems
+0408  Quanta Computer, Inc.
+0409  NEC Corp.
 	0012  ATerm IT75DSU ISDN TA
 	0014  Japanese Keyboard
 	0027  MultiSync Monitor
-	0058  USB2.0 Hub Controller
+	0058  HighSpeed Hub
+	0059  HighSpeed Hub
 	55aa  Hub
 	55ab  Hub [iMac kbd]
 	efbe  P!cty 900 [HP DJ]
@@ -122,21 +183,45 @@
 	0131  DC-5000
 	0132  DC-3400
 	0140  DC-4800
+	0160  DC4800
+	0170  DX3900
 	0300  EZ-200
 	0400  MC3
+	0500  DX3500
+	0510  DX3600
+	0525  DX3215
+	0530  DX3700
+	0535  EasyShare CX4230 Camera
+	0540  LS420
+	0550  DX4900
+	0555  DX4330
+	0560  CX4200
+	0565  CX4210
+	0566  CX4300
+	0568  LS443
+	0569  LS663
+	0570  DX6340
+	0571  CX6330
+	0572  DX6440
+	0573  CX6230
+	0574  CX6200
+	0575  DX6490
+	0576  DX4530
 040b  Weltrend Semiconductor
-040c  VTech Computers Ltd.
+040c  VTech Computers, Ltd
 040d  VIA Technologies, Inc.
 040e  MCCI
 040f  Echo Speech Corp.
-0411  Melco, Inc.
+0411  MelCo., Inc.
 	0001  LUA-TX Ethernet [pegasus]
+	0016  WLI-USB-S11 802.11b Adapter
+	0027  WLI-USB-KS11G 802.11b Adapter
 0412  Award Software International
-0413  Leadtek Research Inc.
-0414  Giga-Byte Technology Co., Ltd.
+0413  Leadtek Research, Inc.
+0414  Giga-Byte Technology Co., Ltd
 0416  Winbond Electronics Corp.
 	0961  AVL Flash Card Reader
-	5518  Hub
+	5518  4-Port Hub
 	551a  PC Sync Keypad
 	551b  PC Async Keypad
 	551c  Sync Tenkey
@@ -144,36 +229,58 @@
 	551e  Keyboard
 	551f  Keyboard w/ Sys and Media
 	5521  Keyboard
+	7723  SD Card Reader
 	6481  16-bit Scanner
 0417  Symbios Logic
 0418  AST Research
-0419  Samsung Info. Systems America Inc.
-041a  Phoenix Technologies, Ltd.
+0419  Samsung Info. Systems America, Inc.
+	3001  Xerox P1202 Laser Printer
+	8002  SyncMaster 757DFX HID Device
+041a  Phoenix Technologies, Ltd
 041b  d'TV
 041d  S3, Inc.
-041e  Creative Labs
+041e  Creative Technology, Ltd
 	1002  Nomad II MP3 Player
 	1003  Blaster GamePad Cobra
 	1050  GamePad Cobra
+	3020  SoundBlaster Audigy 2 NX
 	4003  VideoBlaster WebCam Go Plus [W9967CF]
 	4004  Nomad II MG MP3 Player
 	400a  PC-Cam 300
 	400b  PC-Cam 600
 	400c  WebCam 5 [pwc]
+	400d  WebCam PD1001
+	4011  WebCam PRO eX
+	4013  PC-Cam 750
+	4015  CardCam Value
+	4017  WebCam Mobile
+	4018  WebCam Vista
+	401c  Creative WebCam NX [PD1110]
+	4100  Nomad Jukebox 2 MP3 player
+	4101  Nomad Jukebox 3 MP3 player  
+	4106  Nomad MuVo MP3 Player
+	4108  Nomad Jukebox Zen MP3 player
+	410b  Nomad Jukebox Zen USB 2.0 MP3 player
+	4109  Nomad Jukebox Zen NX MP3 player
+	4110  Nomad Jukebox Zen Xtra MP3 player
+	4111  Dell Digital Jukebox
 041f  LCS Telegraphics
 0420  Chips and Technologies
 0421  Nokia Mobile Phones
-0422  ADI Systems Inc.
+	0401  6650 GSM Phone
+	0800  Connectivity Cable DKU-5
+0422  ADI Systems, Inc.
 0423  Computer Access Technology Corp.
 	000a  NetMate Ethernet
 	000c  NetMate2 Ethernet
 	000d  USB Chief Analyzer
 	1237  Andromeda Hub
 0424  Standard Microsystems Corp.
-0425  Motorola Semiconductors HK, Ltd.
-0426  Integrated Device Technology
-0427  Motorola Electronics Taiwan Ltd.
-0428  Advanced Gravis Computer Tech. Ltd.
+	223a  8-in-1 Card Reader
+0425  Motorola Semiconductors HK, Ltd
+0426  Integrated Device Technology, Inc.
+0427  Motorola Electronics Taiwan, Ltd
+0428  Advanced Gravis Computer Tech, Ltd
 	4001  GamePad Pro
 0429  Cirrus Logic
 042a  Ericsson Austrian, AG
@@ -182,29 +289,38 @@
 042d  Micronics
 042e  Acer, Inc.
 042f  Molex, Inc.
-0430  Sun Microsystems
+0430  Sun Microsystems, Inc.
 	0005  Type 6 Keyboard
 	0100  3-button Mouse
 0431  Itac Systems, Inc.
 0432  Unisys Corp.
-0433  Alps Electric Inc.
+0433  Alps Electric, Inc.
 	1101  IBM Game Controller
-0434  Samsung Info. Systems America Inc.
+0434  Samsung Info. Systems America, Inc.
 0435  Hyundai Electronics America
 0436  Taugagreining HF
 0437  Framatome Connectors USA
-0438  Advanced Micro Devices
+0438  Advanced Micro Devices, Inc.
 0439  Voice Technologies Group
-043d  Lexmark International Inc.
+043d  Lexmark International, Inc.
 	0002  Optra E310 Printer
 	0009  Optra S2450 Printer
 	000c  Optra E312 Printer
 	0017  Z32 printer
 	0018  Z52 Printer
+	001c  Kodak Personal Picture Maker 200 Printer
+	001f  Kodak Personal Picture Maker 200 Card Reader
 	0020  Z51 Printer
+	0021  Z33 Printer
+	002d  X70/X73 Scan/Print/Copy
 	003d  X83 Scan/Print/Copy
-043e  LG Electronics USA Inc.
+	0057  Z35 Printer
+	0060  X74/X75 Scanner
+	0061  X74 Hub
+	0069  X74 Printer
+043e  LG Electronics USA, Inc.
 	42bd  Flatron 795FT Plus Monitor
+	4a4d  Flatron 915FT Plus Monitor
 	7001  MF-PD100 Soul Digital MP3 Player
 	8484  LPC-U30 Webcam II
 	8585  LPC-UC35 Webcam
@@ -212,49 +328,69 @@
 0440  Eizo Nanao Corp.
 0441  Winbond Systems Lab.
 	1456  Hub
-0442  Ericsson Inc.
-0443  Gateway 2000
-0445  Lucent Technologies
-0446  NMB Technologies, Inc.
+0442  Ericsson, Inc.
+0443  Gateway, Inc.
+0445  Lucent Technologies, Inc.
+0446  NMB Technologies Corp.
 0447  Momentum Microsystems
-044a  Shamrock Tech. Co., Ltd.
+044a  Shamrock Tech. Co., Ltd
 044b  WSI
 044c  CCL/ITRI
-044d  Siemens Nixdorf
-044e  Alps Electric Co.
+044d  Siemens Nixdorf AG
+044e  Alps Electric Co., Ltd
 	2002  MD-5500 Printer
+	3001  UGTZ4 Bluetooth
 044f  ThrustMaster, Inc.
+	0400  HOTAS Cougar
 	a0a3  Fusion Digital GamePad
+	b203  360 Modena Pro Wheel
 	b300  Firestorm Dual Power
-0450  DFI Inc.
-0451  Texas Instruments
+	b304  Firestorm Dual Power
+0450  DFI, Inc.
+0451  Texas Instruments, Inc.
 	1428  Hub
 	1446  TUSB2040/2070 Hub
 	2036  TUSB2036 Hub
 	2046  TUSB2046 Hub
 	2077  TUSB2077 Hub
+	6000  AU5 ADSL Modem (pre-reenum)
+	6001  AU5 ADSL Modem
 	e001  GraphLink
+	e004  TI-89 Titanium Calculator
+	e008  TI-84 Plus Silver Calculator
 0452  Mitsubishi Electronics America, Inc.
+	0050  Diamond Pro 900u CRT Monitor
+	0051  Integrated Hub
 0453  CMD Technology
 0454  Vobis Microcomputer AG
 0455  Telematics International, Inc.
 0456  Analog Devices, Inc.
 0457  Silicon Integrated Systems Corp.
-0458  KYE Systems Corp.(Mouse Systems)
+0458  KYE Systems Corp. (Mouse Systems)
 	0001  Mouse
 	0002  Genius NetMouse Pro
 	0003  Genius NetScroll+
+	000e  VideoCAM Web
+	001a  Genius WebScroll+
 	0100  EasyPen Tablet
 	0101  CueCat
 	1003  Genius VideoCam
 	1004  Flight2000 F-23 Joystick
+	100a  Aashima Technology Trust Sight Fighter Vibration Feedback Joystick
 	2001  ColorPage-Vivid Pro Scanner
+	2007  ColorPage-HR6 V2 Scanner
+	2008  ColorPage-HR6 V2 Scanner
+	2009  ColorPage-HR6A Scanner
+	2011  ColorPage-Vivid3x Scanner
+	2013  ColorPage-HR7 Scanner
+	2015  ColorPage-HR7LE Scanner
+	2016  ColorPage-HR6X Scanner
 0459  Adobe Systems, Inc.
-045a  Diamond Multimedia Systems
+045a  SONICblue, Inc.
 	0b4a  SupraMax 2890 56K Modem [Lucent Atlas]
 	0b68  SupraMax 56K Modem
-045b  Hitachi, Ltd.
-045d  Nortel Networks
+045b  Hitachi, Ltd
+045d  Nortel Networks, Ltd
 045e  Microsoft Corp.
 	0008  SideWinder Precision Pro
 	0009  IntelliMouse
@@ -264,6 +400,7 @@
 	001b  SideWinder Force Feedback 2 Joystick
 	001d  Natural Keyboard Pro
 	001e  IntelliMouse Explorer
+	0023  Trackball Optical
 	0024  Trackball Explorer
 	0025  IntelliEye Mouse
 	0026  SideWinder GamePad Pro
@@ -271,58 +408,81 @@
 	0028  SideWinder Dual Strike
 	0029  IntelliMouse Optical
 	002b  Internet Keyboard Pro
-	0034  SideWinder Force Feedback Wheel
 	0033  Sidewinder Strategic Commander
+	0034  SideWinder Force Feedback Wheel
 	0038  SideWinder Precision 2
 	0039  IntelliMouse Optical
 	003b  SideWinder Game Voice
 	003c  SideWinder Joystick
-0460  Ace Cad Enterprise Co., Ltd.
-0461  Primax Electronics
+	0040  Wheel Mouse Optical
+	0047  IntelliMouse Explorer 3.0
+	0059  Wireless IntelliMouse Explorer
+	006e  MN510 802.11b Adapter
+	007d  Notebook Optical Mouse
+	007e  Wireless Transceiver for Bluetooth
+	008a  Wireless Keyboard and Mouse
+	0284  Xbox DVD Playback Kit
+0460  Ace Cad Enterprise Co., Ltd
+0461  Primax Electronics, Ltd
 	0300  G2-300 Scanner
 	0301  G2E-300 Scanner
 	0302  G2-300 #2 Scanner
 	0303  G2E-300 #2 Scanner
 	0340  Colorado 9600 Scanner
 	0341  Colorado 600u Scanner
+	0345  Visioneer 6200 Scanner
 	0346  Memorex Maxx 6136u Scanner
-	0347  Visioneer 4400 Scanner
+	0347  Primascan Colorodao 2600u/Visioneer 4400 Scanner
 	0360  Colorado 19200 Scanner
 	0361  Colorado 1200u Scanner
+	0364  LG Electronics Scanworks 600U Scanner
+	0371  Visioneer Onetouch 8920 Scanner
+	0377  Medion MD 5345 Scanner
+	037b  Medion MD 6190 Scanner
 	0380  G2-600 Scanner
 	0381  ReadyScan 636i Scanner
 	0382  G2-600 #2 Scanner
 	0383  G2E-600 Scanner
 	0813  IBM UltraPort Camera
+	0815  Micro Innovations WebCam
 	081a  Fujifilm IX-30 Camera
+	081c  Elitegroup ECS-C11 Camera
+	081d  Elitegroup ECS-C11 Storage
 	4d01  Comfort Keyboard
 	4d02  Mouse-in-a-Box
 	4d03  Kensington Mouse-in-a-box
 	4d04  Mouse
 0463  MGE UPS Systems
-	ffff  Ellipse UPS
-0464  AMP Incorporated
+	0001  UPS
+	ffff  UPS
+0464  AMP/Tycoelectronics Corp.
 0467  AT&T Paradyne
-0468  Wieson Electronic Co., Ltd.
-046a  Cherry Mikroschalter GmbH
+0468  Wieson Technologies Co., Ltd
+046a  Cherry GmbH
 	0001  My3000 Keyboard
 	0003  My3000 Hub
-046b  American Megatrends
+046b  American Megatrends, Inc.
 046c  Toshiba Corp., Digital Media Equipment
-046d  Logitech Inc.
+046d  Logitech, Inc.
 	0203  M2452 Keyboard
 	0301  M4848 Mouse
 	0401  HP PageScan
 	0402  NEC PageScan
-	040F  Logitech/Storm PageScan
+	040f  Logitech/Storm PageScan
 	0801  QuickCam Home
 	0810  QuickCam Pro
 	0840  QuickCam Express
 	0850  QuickCam Web
 	0870  QuickCam Express
+	08a0  QuickCam IM
 	08b0  QuickCam 3000 Pro [pwc]
+	08b2  QuickCam Pro 4000
+	08b3  QuickCam Zoom
+	08b4  QuickCam Zoom
 	0900  ClickSmart 310
 	0901  ClickSmart 510
+	0921  Labtec WebCam
+	0950  Pocket Camera
 	c000  N43 [Pilot Mouse]
 	c001  N48/M-BB48 [FirstMouse Plus]
 	c002  M-BA47 [MouseMan Plus]
@@ -331,6 +491,9 @@
 	c00c  Optical Wheel Mouse
 	c00e  Optical Mouse
 	c012  Optical Mouse
+	c016  Optical Mouse
+	c01b  MX310 Optical Mouse
+	c025  MX500 Optical Mouse
 	c030  iFeel Mouse
 	c032  MouseMan iFeel
 	c202  WingMan Formula
@@ -343,15 +506,22 @@
 	c283  WingMan Force 3D
 	c285  WingMan Strike Force 3D
 	c291  WingMan Formula Force
+	c293  WingMan Formula Force GP
 	c295  Momo Force Steering Wheel
 	c2a0  Wingman Force Feedback Mouse
+	c303  iTouch Keyboard
 	c308  Internet Navigator Keyboard
+	c309  Internet Keyboard
 	c401  TrackMan Marble Wheel
+	c402  Marble Mouse (2-button)
+	c404  TrackMan Wheel
+	c408  Marble Mouse (4-button)
 	c501  Cordless Mouse Receiver
 	c503  Cordless Mouse+Keyboard Receiver
 	c504  Cordless Mouse+Keyboard Receiver
+	c505  Cordless Mouse+Keyboard Receiver
 	d001  QuickCam Pro
-046e  Behavior Tech. Computer
+046e  Behavior Tech. Computer Corp.
 	6782  BTC 7932 mouse+keyboard
 046f  Crystal Semiconductor
 0471  Philips
@@ -364,26 +534,29 @@
 	0304  Askey VC010 WebCam [pwc]
 	0307  PCVC675K WebCam [pwc]
 	0308  PCVC680K WebCam [pwc]
-	030C  PCVC690K WebCam [pwc]
+	030c  PCVC690K WebCam [pwc]
 	0310  PCVC730K WebCam [pwc]
 	0311  PCVC740K ToUcam Pro [pwc]
 	0312  PCVC750K WebCam [pwc]
 	0471  Digital Speaker System
 	0601  OVU1020 IR Dongle (Kbd+Mouse)
 	0701  150P1 TFT Display
+	0811  JR24 CDRW
+	1120  Creative Rhomba MP3 player
 	1801  Diva MP3 player
-0472  Chicony
+0472  Chicony Electronics Co., Ltd
 	0065  PFU-65 Keyboard
-0473  Sanyo Information Business Co., Ltd.
-0474  Sanyo Electric Co. Ltd.
+0473  Sanyo Information Business Co., Ltd
+0474  Sanyo Electric Co., Ltd
+	0701  SCP-4900 Cellphone
 0475  Relisys/Teco Information System
 0476  AESP
-0477  Seagate Technology
+0477  Seagate Technology, Inc.
 0478  Connectix Corp.
 	0001  QuickCam
 	0002  QuickClip
 0479  Advanced Peripheral Laboratories
-047a  USAR Systems
+047a  Semtech Corp.
 047b  Silitek Corp.
 	0002  Keyboard and Mouse
 	0101  BlueTooth Keyboard and Mouse
@@ -392,43 +565,45 @@
 047d  Kensington
 	1003  Orbit TrackBall
 	1005  TurboBall
-	5002  VideoCam CABO II
-	5003  VideoCam
-	4006  Gravis Eliminator AfterShock
 	4005  Gravis Eliminator GamePad Pro
+	4006  Gravis Eliminator AfterShock
 	4008  Gravis Destroyer TiltPad
-047e  Agere (Lucent)
+	5002  VideoCam CABO II
+	5003  VideoCam
+047e  Agere Systems, Inc. (Lucent)
 	1001  USS720 Parallel Port
 	f101  Atlas Modem
 047f  Plantronics, Inc.
 0480  Toshiba America Info. Systems, Inc.
 0481  Zenith Data Systems
-0482  Kyocera Electronics, Inc.
+0482  Kyocera Corp.
 0483  SGS Thomson Microelectronics
+	1307  Cytronix 6in1 card reader
+	163d  Cool Icam Digi-MP3
 	7554  56k SoftModem
 0484  Specialix
 0485  Nokia Monitors
-0486  ASUS Computers Inc.
+0486  ASUS Computers, Inc.
 0487  Stewart Connector
 0488  Cirque Corp.
 0489  Foxconn / Hon Hai
 	0502  SmartMedia Card Reader Firmware Loader
 	0503  SmartMedia Card Reader
 048a  S-MOS Systems, Inc.
-048c  Alps Electric Ireland Ltd.
-048d  Integrated Technology Express
+048c  Alps Electric Ireland, Ltd
+048d  Integrated Technology Express, Inc.
 048f  Eicon Tech.
 0490  United Microelectronics Corp.
 0491  Capetronic
 0492  Samsung SemiConductor, Inc.
-0493  MAG Technology Co., Ltd.
+0493  MAG Technology Co., Ltd
 0495  ESS Technology, Inc.
 0496  Micron Electronics
 0497  Smile International
 0498  Capetronic (Kaohsiung) Corp.
 0499  Yamaha Corp.
 	6001  CRW2200UX Lightspeed 2 External CD-RW Drive
-049a  Gandalf Technologies Ltd.
+049a  Gandalf Technologies, Ltd
 049b  Curtis Computer Products
 049c  Acer Advanced Labs, Inc.
 	0002  Keyboard (???)
@@ -436,15 +611,18 @@
 049f  Compaq Computer Corp.
 	0003  iPAQ PocketPC
 	000e  Internet Keyboard
-	0033  Evo N600c Builtin Wireless Ethernet [orinoco]
+	0018  PA-1/PA-2 MP3 Player
+	001a  S4 100 Scanner
+	0021  S200 Scanner
+	0033  801.11b Adapter [orinoco]
 	505a  SA-11x0 based Linux Device, or Itsy (experimental)
 	8511  iPAQ Networking 10/100 Ethernet [pegasus2]
 04a0  Digital Equipment Corp.
 04a1  SystemSoft Corp.
 04a2  FirePower Systems
-04a3  Trident Microsystems Inc.
-04a4  Hitachi, Ltd.
-04a5  Acer Peripherals Inc.
+04a3  Trident Microsystems, Inc.
+04a4  Hitachi, Ltd
+04a5  Acer Peripherals Inc. (now BenQ Corp.)
 	0001  Keyboard
 	12a6  AcerScan C310U
 	1a20  Prisa 310U
@@ -457,41 +635,97 @@
 	20be  Prisa 640BT
 	20c0  Prisa 1240UT
 	20de  S2W 4300U+
+	20fc  Benq 5000
+	20fe  SW2 5300U
+	3003  Benq WebCam
 	9213  Kbd Hub
 04a6  Nokia Display Products
 04a7  Visioneer
 	0211  OneTouch 7600 Scanner
 	0221  OneTouch 5300 Scanner
-	0224  Microtek Scanport 3000
+	0224  OneTouch 4800 USB/Microtek Scanport 3000
+	0226  OneTouch 5300 USB
 	0231  6100 Scanner
 	0311  6200 EPP/USB Scanner
 	0321  OneTouch 8100 EPP/USB Scanner
 	0331  OneTouch 8600 EPP/USB Scanner
 04a8  Multivideo Labs, Inc.
-04a9  Canon Inc.
+04a9  Canon, Inc.
 	1051  BJC-3000 Color Printer
 	1056  BJC-2110 Color Printer
+	105b  S600 Printer
 	105d  S450 Printer
 	1062  S500 Printer
 	1064  S300 Printer
+	106b  S520 Printer
+	106d  S750 Printer
+	1074  S330 Printer
+	2201  CanoScan FB320U
+	2202  CanoScan FB620U
 	2204  CanoScan FB630U
 	2205  CanoScan FB1210U
-	2206  CanoScan N650U
+	2206  CanoScan N650U/N656U
 	2207  CanoScan 1220U
 	2208  CanoScan D660U
-	220d  CanoScan N670U
+	220b  CanoScan D646U
+	220c  CanoScan D1250U2
+	220d  CanoScan N670U/N676U/LiDE 20
+	220e  CanoScan N1240U/LiDE 30
+	2213  LiDE 50
 	3041  PowerShot S10
+	3042  CanoScan FS4000US Film Scanner
 	3043  PowerShot S20
+	3044  EOS D30
 	3045  PowerShot S100
+	3046  IXY Digital
 	3047  Digital IXUS
 	3048  PowerShot G1
 	3049  PowerShot Pro90 IS
 	304b  IXY Digital 300
+	304c  PowerShot S300
+	304d  Digital IXUS 300
 	304e  PowerShot A20
 	304f  PowerShot A10
+	3051  PowerShot S110
+	3052  Digital IXUS V
+	3055  PowerShot G2
 	3056  PowerShot S40
+	3057  PowerShot S30
 	3058  PowerShot A40
-04aa  DaeWoo Telecom, Ltd.
+	3059  PowerShot A30
+	305b  ZR45MC Digital Camcorder
+	3060  EOS D60
+	3061  PowerShot A100
+	3062  PowerShot A200
+	3065  PowerShot S200
+	3066  Digital IXUS 330
+	3067  MV550i Digital Video Camera
+	3069  PowerShot G3
+	306b  MVX2i Digital Video Camera
+	306c  PowerShot S45
+	306d  PowerShot S45 PtP Mode
+	306f  PowerShot G3 (ptp)
+	3070  PowerShot S230
+	3071  PowerShot S230 (ptp)
+	3072  PowerShot SD100 / Digital IXUS 2 (ptp)
+	3073  PowerShot A70 (ptp)
+	3074  PowerShot A60 (ptp)
+	3075  IXUS 400 Camera
+	3076  PowerShot A300
+	3077  PowerShot S50
+	3078  ZR70MC Digital Camcorder
+	307b  MV630i Difital Video Camera
+	307f  Optura 20
+	3081  Optura 10
+	3083  EOS 10D
+	3084  EOS 300D
+	3085  PowerShot G5
+	3099  EOS 300D (ptp)
+	309a  PowerShot A80
+	309b  Digital IXUS (ptp)
+	309c  PowerShot S1 IS
+	30ba  PowerShot S410 Digital Elph
+04aa  DaeWoo Telecom, Ltd
 04ab  Chromatic Research
 04ac  Micro Audiometrics Corp.
 04ad  Dooin Electronics
@@ -502,10 +736,31 @@
 	0104  Coolpix 995
 	0106  Coolpix 775
 	0107  Coolpix 5000
+	0108  Coolpix 2500
+	0109  Coolpix 2500 (ptp)
+	010a  Coolpix 4500
+	010b  Coolpix 4500 (ptp)
+	010d  Coolpix 5700 (ptp)
+	010e  Coolpix 4300 (storage)
+	010f  Coolpix 4300 (ptp)
+	0111  Coolpix 3500 (ptp)
+	0112  Coolpix 885 (ptp)
+	0113  Coolpix 5000 (ptp)
+	0114  Coolpix 3100 (storage)
+	0115  Coolpix 3100 (ptp)
+	0117  Coolpix 2100 (ptp)
+	0119  Coolpix 5400 (ptp)
+	0202  Coolpix SQ (ptp)
+	0301  Coolpix 2000 (storage)
+	0302  Coolpix 2000 (ptp)
+	0402  DSC D100 (ptp)
+	4000  Coolscan LS 40 ED
 04b1  Pan International
 04b3  IBM Corp.
 	3004  Media Access Pro Keyboard
 	3100  NetVista Mouse
+	3103  ScrollPoint Pro Mouse
+	3109  Optical ScrollPoint Pro Mouse
 	4427  Portable CD ROM
 	4525  Double sided CRT
 	4550  NVRAM (128 KB)
@@ -514,14 +769,18 @@
 	4581  4800-2xx Hub w/ Cash Drawer
 	4604  Keyboard w/ Card Reader
 	4671  4820 LCD w/ MSR/KB
-04b4  Cypress Semiconductor
+04b4  Cypress Semiconductor Corp.
 	0000  Dacal DC-101 CD Library
 	0001  Mouse
 	0002  CY7C63x0x Thermometer
 	1002  CY7C63001 R100 FM Radio
+	5500  HID->COM RS232 Adapter
+	6560  CY7C65640 USB-2.0 "TetraHub"
+	6830  USB-2.0 IDE Adapter
 	8613  CY7C68013 EZ-USB FX2 USB 2.0 Development Kit
 	d5d5  CY7C63x0x Zoltrix Z-Boxer GamePad
-04b5  ROHM LSI Systems, Inc.
+	f000  CY30700 Licorice evaluation board
+04b5  ROHM LSI Systems USA, LLC
 04b6  Hint Corp.
 04b7  Compal Electronics, Inc.
 04b8  Seiko Epson Corp.
@@ -530,28 +789,42 @@
 	0003  ISD Smart Cable
 	0005  Stylus Printer
 	0101  Perfection 636
+	0102  GT-2200
 	0103  Perfection 610
 	0104  Perfection 1200
+	0105  StylusScan 2000
 	0106  Stylus Scan 2500
 	0107  Expression 1600U
+	0109  Expression 1640 XL
 	010a  Perfection 1640SU
 	010b  Perfection 1240
 	010c  Perfection 640
+	010e  Perfection 1680
 	010f  Perfection 1250
 	0110  Perfection 1650
+	0112  Perfection 2450
+	0114  Perfection 660
+	011b  Perfection 2400 Photo
+	011c  Perfection 3200
+	011d  Perfection 1260 Photo
+	011e  Perfection 1660 Photo
+	011f  Perfection 1670
 	0202  Receipt Printer M129C
 	0601  Stylus Photo 875DC Card Reader
 	0602  Stylus Photo 895 Card Reader
+	0801  Stylus CX5200
+	0802  Stylus CX3200
 04b9  Rainbow Technologies, Inc.
 	1000  iKey 1000 Token
 	1001  iKey 1200 Token
 	1200  iKey 2000 Token
 	1202  iKey 2032 Token
 	1300  iKey 3000 Token
-04ba  Toucan Systems Ltd.
+04ba  Toucan Systems, Ltd
 04bb  I-O Data Device, Inc.
 	0904  ET/TX Ethernet [pegasus]
 	0913  ET/TX-S Ethernet [pegasus2]
+	0922  IOData AirPort WN-B11/USBS 802.11b
 04bd  Toshiba Electronics Taiwan Corp.
 04be  Telia Research AB
 04bf  TDK Corp.
@@ -561,150 +834,202 @@
 	008f  Pro ISDN TA
 	009d  HomeConnect WebCam [vicam]
 	3021  56k Voice FaxModem Pro
-04c2  Methode Electronics Far East PTE Ltd.
+04c2  Methode Electronics Far East PTE, Ltd
 04c3  Maxi Switch, Inc.
 04c4  Lockheed Martin Energy Research
-04c5  Fujitsu Ltd.
+04c5  Fujitsu, Ltd
+	1029  fi-4010c Scanner
+	1041  fi-4120c Scanner
+	1042  fi-4220c Scanner
 04c6  Toshiba America Electronic Components
 04c7  Micro Macro Technologies
 04c8  Konica Corp.
 	0720  Digital Color Camera
 	0721  e-miniD Camera
 	0723  KD-200Z Camera
+	0726  KD-310Z Camera
 04ca  Lite-On Technology Corp.
-04cb  Fuji Photo Film Co., Ltd.
-	0100  FinePix 1300 / 1400 / 4700 Zoom digital camrea
+04cb  Fuji Photo Film Co., Ltd
+	0100  FinePix 1300 / 1400 / 4700 Zoom digital camera
 	0103  FinePix NX-700 printer
+	0104  FinePix A101/2600 Zoom (PC-Cam Mode)
+	0108  FinePix F601 Zoom (Disk mode)
+	0109  FinePix F601 Zoom (PC-Cam mode)
+	010a  FinePix S602 Zoom (Disk mode)
+	010b  FinePix S602 Zoom (PC-Cam mode)
+	0114  FinePix F401 Zoom (Disk mode)
+	0115  FinePix F401 Zoom (PC-Cam mode)
+	0116  FinePix A203 (Disk mode)
+	0117  FinePix A203 (PC-Cam mode)
+	011a  FinePix S304/3800 (Disk mode)
+	011b  FinePix S304/3800 (PC-Cam mode)
+	011c  FinePix 2650 (Disk mode)
+	0130  Finepix S5000 Camera (Disk mode)
+	0131  Finepix S5000 Camera (PC-Cam mode)
 04cc  Philips Semiconductors
 	1122  Hub
+	1521  USB 2.0 Hub
 	8116  Camera
 04cd  Tatung Co. Of America
 04ce  ScanLogic Corp.
 	0002  SL11R-IDE IDE Bridge
-04cf  Myson Technology Inc.
+04cf  Myson Century, Inc.
 04d0  Digi International
 04d1  ITT Canon
 04d2  Altec Lansing Technologies
 	0311  ADA-310 Speakers
 	ff05  ADA-305 Speakers
 04d3  VidUS, Inc.
-04d4  LSI Logic Corp.
+04d4  LSI Logic, Inc.
 04d5  Forte Technologies, Inc.
 04d6  Mentor Graphics
 04d7  Oki Semiconductor
-04d8  Microchip Technology Inc.
+04d8  Microchip Technology, Inc.
+	8000  In-Circuit Debugger
 04d9  Holtek Semiconductor, Inc.
 04da  Panasonic (Matsushita)
-04db  Hypertec Pty Ltd.
-04dc  Huan Hsin Co.
+04db  Hypertec Pty, Ltd
+04dc  Huan Hsin Holdings, Ltd
 04dd  Sharp Corp.
-	8004  Zaurus SL-5000D PDA
+	7004  VE-CG40U Digital Still Camera
+	8004  Zaurus SL-5000D/SL-5500 PDA
+	8005  Zaurus A-300
+	8006  Zaurus SL-B500/SL-5600 PDA
+	8007  Zaurus C-700 PDA
+	9014  IM-DR80 Portable NetMD Player
+	9031  Zaurus C-750/C-760 PDA
+	9032  Zaurus SL-6000
+	9050  Zaurus C-860 PDA
 04de  MindShare, Inc.
 04df  Interlink Electronics
-04e1  Iiyama North America Inc.
+04e1  Iiyama North America, Inc.
 	0201  Monitor Hub
 04e2  Exar Corp.
-04e3  Zilog
+04e3  Zilog, Inc.
 04e4  ACC Microelectronics
 04e5  Promise Technology
-04e6  Shuttle Technology Inc.
+04e6  SCM Microsystems, Inc.
 	0001  E-USB ATA Bridge
 	0002  eUSCSI SCSI Bridge
 	0003  eUSB SmartMedia Card Reader
 	0005  eUSB SmartMedia/CompactFlash Card Reader
 	0006  eUSB SmartMedia Card Reader
 	0007  Hifd
-	0101  E-USB ATA Bridge
+	0101  eUSB ATA Bridge
+	0325  eUSB ORCA Quad Reader
 	1010  USBAT-2 CompactFlash Card Reader
 04e7  Elo TouchSystems
-	0001 TouchScreen
-04e8  Samsung Electronics Co., Ltd.
+	0001  TouchScreen
+04e8  Samsung Electronics Co., Ltd
+	1003  MP3 Player and Recorder
+	300c  ML-1210 Printer
 	5a03  Yepp MP3 Player
-04e9  PC-Tel Inc.
+	6601  Z100 Mobile Phone
+04e9  PC-Tel, Inc.
 04ea  Brooktree Corp.
 04eb  Northstar Systems, Inc.
-04ec  Tokyo Electron Limited
+04ec  Tokyo Electron Device, Ltd
 04ed  Annabooks
 04ef  Pacific Electronic International, Inc.
-04f0  Daewoo Electronics Co., Ltd.
-04f1  Victor Company of Japan (JVC)
+04f0  Daewoo Electronics Co., Ltd
+04f1  Victor Company of Japan, Ltd
 	0001  GC-QX3 Digital Still Camera
 	0004  GR-DVL815U Digital Video Camera
-04f2  Chicony Electronics Co., Ltd.
+	0009  GR-DX25EK Digital Video Camera
+04f2  Chicony Electronics Co., Ltd
 	0001  KU-8933 Keyboard
 	0002  NT68P81 Keyboard
+	0110  KU-2971 Keyboard
 	0112  KU-8933 Keyboard with PS/2 Mouse port
-04f3  Elan Microelectronics Corportation
-04f4  Harting Elektronik Inc.
+04f3  Elan Microelectronics Corp.
+04f4  Harting Elektronik, Inc.
 04f5  Fujitsu-ICL Systems, Inc.
 04f6  Norand Corp.
 04f7  Newnex Technology Corp.
 04f8  FuturePlus Systems
-04f9  Brother Industries, Ltd.
+04f9  Brother Industries, Ltd
 	0002  HL-1050 Laser Printer
 	0007  HL-1250 Laser Printer
+	0008  HL-1270 Laser Printer
+	000d  HL-1440 Laser Printer
+	010f  MFC 5100C
+	0111  MFC 6800
+	2004  PT-2300/2310 p-Touch Laber Printer
 04fa  Dallas Semiconductor
 	2490  DS1490F 2-in-1 Fob, 1-Wire adapter
 	4201  DS4201 Audio DAC
-04fb  Biostar Microtech Int'l Corp.
-04fc  Sunplus Technology Co.
+04fb  Biostar Microtech International Corp.
+04fc  Sunplus Technology Co., Ltd
+	0003  CM1092 Optical Scroller Mouse
+	504a  SPCA504a Digital Camera
+	504b  Aiptek, 1.3 mega PockerCam
 04fd  Soliton Systems, K.K.
-04fe  PFU Limited
+04fe  PFU, Ltd
 04ff  E-CMOS Corp.
 0500  Siam United Hi-Tech
-0501  DDK Electronics, Inc.
+0501  Fujikura DDK, Ltd
 0502  Acer, Inc.
 	d001  Divio NW801/DVC-V6+ Digital Camera
-0503  Hitachi America Ltd.
+0503  Hitachi America, Ltd
 0504  Hayes Microcomputer Products
 0506  3Com Corp.
+	00a0  3CREB96 Bluetooth Adapter
 	03e8  3C19250 Ethernet [klsi]
-	4601  3C460B USB 10/100 Ethernet Adaptor
+	4601  3C460B 10/100 Ethernet Adapter
 	f002  3CP4218 ADSL Modem (pre-init)
 	f003  3CP4218 ADSL Modem
 	f100  3CP4218 ADSL Modem (pre-init)
 0507  Hosiden Corp.
-0508  Clarion Co., Ltd.
-0509  Aztech Systems Ltd.
+0508  Clarion Co., Ltd
+0509  Aztech Systems, Ltd
 050a  Cinch Connectors
 050b  Cable System International
 050c  InnoMedia, Inc.
 050d  Belkin Components
 	0103  F5U103 Serial Adapter [etek]
-	0109  F5U109 PDA Adapter
+	0109  F5U109/F5U409 PDA Adapter
 	0115  SCSI Adapter
 	0121  F5D5050 100Mbps Ethernet
-	0208  Video Adapter [nt1004]
+	0208  USBView II Video Adapter [nt1004]
+	0224  F5U224 USB 2.0 4-Port Hub
+	0234  F5U234 USB 2.0 4-Port Hub
 	0805  Nostromo N50 GamePad
 	1203  F5U120-PC Serial Port
 050e  Neon Technology, Inc.
-050f  KC Technology Inc.
+050f  KC Technology, Inc.
 	0003  KC82C160S Hub
 	0180  KC-180 IrDA Dongle
-0510  Sejin Electron Inc.
+0510  Sejin Electron, Inc.
 0511  N'Able (DataBook) Technologies, Inc.
 0512  Hualon Microelectronics Corp.
 0513  digital-X, Inc.
-0514  FCI/Berg Electronics Group
+0514  FCI Electronics
 0515  ACTC
 0516  Longwell Electronics
 0517  Butterfly Communications
 0518  EzKEY Corp.
-0519  Star Micronics Co., Ltd.
+0519  Star Micronics Co., Ltd
 051a  WYSE Technology
 051b  Silicon Graphics
-051c  Shuttle Inc.
+051c  Shuttle, Inc.
 051d  American Power Conversion
-	0002  Back-UPS Pro 500
-051e  Scientific Atlanta
+	0002  Back-UPS Pro 500/1000/1500
+051e  Scientific Atlanta, Inc.
 051f  IO Systems (Elite Electronics), Inc.
 0520  Taiwan Semiconductor Manufacturing Co.
 0521  Airborn Connectors
-0522  Advanced Connectek USA Inc.
+0522  Advanced Connectek, Inc.
 0523  ATEN GmbH
 0524  Sola Electronics
-0525  Netchip Technology Inc.
+0525  Netchip Technology, Inc.
 	1080  NET1080 USB-USB Bridge
+	a4a0  Linux-USB "Gadget Zero"
+	a4a1  Linux-USB Ethernet Gadget
+	a4a2  Linux-USB Ethernet/RNDIS Gadget
+	a4a3  Linux-USB user-mode isochronous source/sink
+	a4a4  Linux-USB user-mode bulk source/sink
+	a4a5  Linux-USB File Storage Gadget
+	a4a6  Linux-USB Serial Gadget
 0526  Temic MHS S.A.
 0527  ALTRA
 0528  ATI Technologies, Inc.
@@ -715,27 +1040,30 @@
 	0313  eToken R1 v3.2.3.x
 	031b  eToken R1 v3.3.3.x
 	0323  eToken R1 v3.4.3.x
-	050c  eToken Pro v4.1.5.x
 	0412  eToken R2 v2.2.4.x
 	041a  eToken R2 v2.2.4.x
 	0422  eToken R2 v2.4.4.x
 	042a  eToken R2 v2.5.4.x
+	050c  eToken Pro v4.1.5.x
+	0514  eToken Pro v4.2.5.4
 052a  Crescent Heart Software
 052b  Tekom Technologies, Inc.
-052c  Canon Information System
+	1513  Aosta CX100 WebCam
+	1514  Aosta CX100 WebCam Storage
+052c  Canon Information Systems, Inc.
 052d  Avid Electronics Corp.
 052e  Standard Microsystems Corp.
 052f  Unicore Software, Inc.
-0530  American Microsystems Inc.
+0530  American Microsystems, Inc.
 0531  Wacom Technology Corp.
 0532  Systech Corp.
 0533  Alcatel Mobile Phones
-0534  Motorola
-0535  LIH TZU Electric Co., Ltd.
-0536  Welch Allyn Inc.
+0534  Motorola, Inc.
+0535  LIH TZU Electric Co., Ltd
+0536  Hand Held Products (Welch Allyn, Inc.)
 0537  Inventec Corp.
-0538  Santa Cruz Operation
-0539  Shyh Shiun Terminals Co. Ltd.
+0538  Caldera International, Inc. (SCO)
+0539  Shyh Shiun Terminals Co., Ltd
 053a  Preh Werke GmbH & Co. KG
 053b  Global Village Communication
 053c  Institut of Microelectronic & Mechatronic Systems
@@ -749,13 +1077,15 @@
 	00fe  G773 Monitor Hub
 	00ff  P815 Monitor Hub
 	4153  ViewSonic G773 Control (?)
-0544  Cristie Electronics Ltd.
+0544  Cristie Electronics, Ltd
 0545  Xirlink, Inc.
 	8002  IBM NetCamera
 	800c  Veo StingRay
 	8080  IBM C-It WebCam
+	810a  Veo Advanced Connect WebCam
 0546  Polaroid Corp.
-0547  Anchor Chips Inc.
+	1bed  PDC 1320 Camera
+0547  Anchor Chips, Inc.
 	2131  AN2131 EZUSB Microcontroller
 	2235  AN2235 EZUSB-FX Microcontroller
 	2720  AN2720 USB-USB Bridge
@@ -775,24 +1105,29 @@
 	002e  Sony HandyCam MemoryStick Reader
 	0032  MemoryStick MSC-U01 Reader
 	0038  Clie PEG-S300/D PalmOS PDA
+	004e  DSC-xxx (ptp)
 	0058  Clie PEG-N7x0C PalmOS PDA Mass Storage
-	0066  Clie PEG-N7x0C PalmOS PDA Serial
+	0066  Clie PEG-N7x0C/PEG-T425 PalmOS PDA Serial
 	0069  Memorystick MSC-U03 Reader
+	006d  Clie PEG-T425 PDA Mass Storage
 	0099  Clie NR70 PDA Mass Storage
 	009a  Clie NR70 PDA Serial
+	00c8  MZ-N710 Minidisc Walkman
+	0107  VCC-U01 Visual Communication Camera
 054d  Try Corp.
 054e  Proside Corp.
 054f  WYSE Technology Taiwan
-0550  Fuji Xerox Co., Ltd.
+0550  Fuji Xerox Co., Ltd
 0551  CompuTrend Systems, Inc.
 0552  Philips Monitors
-0553  VLSI Vision Ltd.
+0553  STMicroelectronics Imaging Division (VLSI Vision)
 	0002  CPiA WebCam
 	0202  Aiptek PenCam 1
 0554  Dictaphone Corp.
-0555  ANAM S&T Co., Ltd.
-0556  Asahi Kasei Microsystems Co., Ltd.
-0557  ATEN International Co. Ltd.
+0555  ANAM S&T Co., Ltd
+0556  Asahi Kasei Microsystems Co., Ltd
+	0001  AK5370 I/F A/D Converter
+0557  ATEN International Co., Ltd
 	2001  UC-1284 Printer Port
 	2002  10Mbps Ethernet [klsi]
 	2004  UC-100KM PS/2 Mouse and Keyboard adapter
@@ -811,17 +1146,35 @@
 	9000  AnyCam [pwc]
 	9001  MPC-C30 AnyCam Premium for Notebooks [pwc]
 055e  CTX Opto-Electronics Corp.
-055f  Mustek Systems Inc.
+055f  Mustek Systems, Inc.
 	0001  ScanExpress 1200 CU
 	0002  ScanExpress 600 CU
 	0003  ScanExpress 1200 USB
 	0006  ScanExpress 1200 UB
+	0007  ScanExpress 1200 USB Plus
 	0008  ScanExpress 1200 CU Plus
+	0010  BearPaw 1200F
+	0210  ScanExpress A3 USB
 	0218  BearPaw 2400 TA
+	0219  BearPaw 2400 TA Plus
+	021c  BearPaw 1200 CU Plus
+	021d  BearPaw 2400 CU Plus
+	021e  BearPaw 1200 TA/CS
+	0400  BearPaw 2400 TA Pro
+	0401  P 3600 A3 Pro
+	0873  ScanExpress 600 USB
+	1000  BearPaw 4800 TA Pro
+	a350  gSmart 350
 	a800  MDC 800 Camera
-0560  Interface Co., Ltd.
+	b500  MDC 3000 Camera
+	c200  gSmart 300
+	c220  gSmart mini
+	c420  gSmart mini 2
+	c520  gSmart mini 3
+	d001  WCam 300
+0560  Interface Corp.
 0561  Oasis Design, Inc.
-0562  Telex Communications Inc.
+0562  Telex Communications, Inc.
 	0001  Enhanced Microphone
 0563  Immersion Corp.
 0564  Chinon Industries, Inc.
@@ -830,10 +1183,11 @@
 	0002  Enet Ethernet [klsi]
 	0003  @Home Networks Ethernet [klsi]
 	0005  Enet2 Ethernet [klsi]
-0567  Xyratex Int'l Ltd.
+0566  Monterey International Corp.
+0567  Xyratex International, Ltd
 0568  Quartz Ingenierie
 0569  SegaSoft
-056a  Wacom Co., Ltd.
+056a  Wacom Co., Ltd
 	0000  PenPartner
 	0010  Graphire
 	0011  Graphire 2
@@ -844,28 +1198,47 @@
 	0024  Intuos 12x18
 	0031  PL500
 	0043  Intuos 2
-056b  Decicon Incorporated
+056b  Decicon, Inc.
 056c  eTEK Labs
 	8007  Kwik232 Serial Port
 	8101  KwikLink USB-USB Bridge
 056d  EIZO Corp.
 	0000  Hub
 	0001  Monitor
-056e  Elecom Co., Ltd.
+056e  Elecom Co., Ltd
 	0002  29UO Mouse
 	4002  Laneed 100Mbps Ethernet LD-USB/TX [pegasus]
-056f  Korea Data Systems Co., Ltd.
+056f  Korea Data Systems Co., Ltd
 0570  Epson America
 0571  Interex, Inc.
 0572  Conexant Systems (Rockwell), Inc.
 	0001  Ezcam II WebCam
 	0002  Ezcam II WebCam
+	0040  Wondereye CP-115 WebCam
 	1232  V.90 modem
-0573  Nogatech Ltd.
+	cafe  AccessRunner ADSL Modem
+0573  Zoran Co. Personal Media Division (Nogatech)
+	0003  USBGear USBG-V1
+	0400  D-Link V100
 	2000  X10 va10a Wireless Camera
-	4d01  Hauppauge USB TV
-	4d02  NT1003 Frame Grabber
-	4d11  NT1003 Frame Grabber
+	2101  Zoran Co. PMD (Nogatech) AV-grabber Manhattan
+	4100  USB-TV FM (NTSC)
+	4450  PixelView PlayTv-USB PRO (PAL) FM
+	4d00  Hauppauge WinTV-USB USA
+	4d01  Hauppauge WinTV-USB
+	4d02  Hauppauge WinTV-USB UK
+	4d03  Hauppauge WinTV-USB France
+	4d10  Hauppauge WinTV-USB with FM USA radio
+	4d11  Hauppauge WinTV-USB (PAL) with FM radio
+	4d12  Hauppauge WinTV-USB UK with FM Radio
+	4d20  Hauppauge WinTV-USB II (PAL) with FM radio
+	4d21  Hauppauge WinTV-USB II (PAL)
+	4d22  Hauppauge WinTV-USB II (PAL) Model 566
+	4d23  Hauppauge WinTV-USB France 4D23
+	4d30  Hauppauge WinTV-USB with FM USA radio Model 602
+	4d31  Hauppauge WinTV-USB III (PAL) with FM radio Model 568
+	4d32  Hauppauge WinTV-USB III (PAL) FM Model 573
+	4d35  Hauppauge WinTV-USB III (PAL) FM Model 597
 0574  City University of Hong Kong
 0575  Philips Creative Display Solutions
 0576  BAFO/Quality Computer Accessories
@@ -875,55 +1248,66 @@
 057a  Samsung Electronics America
 057b  Y-E Data, Inc.
 	0000  FlashBuster-U Floppy
+	0001  Tri-Media Reader Floppy
+	0006  Tri-Media Reader Card Reader
+	0010  Memory Stick Reader Writer
+	0020  HEXA Media Drive 6-in-1 Card Reader Writer
+	0030  Memory Card Viewer (TV)
 057c  AVM GmbH
 	2800  ISDN-Connector TA
-057d  Shark Multimedia Inc.
-057e  Nintendo Co., Ltd.
-057f  QuickShot Limited
-0580  Denron Inc.
+057d  Shark Multimedia, Inc.
+057e  Nintendo Co., Ltd
+057f  QuickShot, Ltd
+0580  Denron, Inc.
 0581  Racal Data Group
 0582  Roland Corp.
 	0002  MPU64 Midi Interface
 	0003  Sound Canvas SC-8850
-0583  Padix (Rockfire) Co. Ltd.
+	0005  Edirol UM-2 MIDI Adapter
+	0011  Edirol UA-5 Sound Capture 
+0583  Padix Co., Ltd (Rockfire)
 	2030  RM-203 USB Nest [mode 1]
 	2031  RM-203 USB Nest [mode 2]
 	2032  RM-203 USB Nest [mode 3]
 	2033  RM-203 USB Nest [mode 4]
+	2050  PX-205 PSX Bridge
 	3050  QF-305u Gamepad
-	7070  QF-707u Joystick [Bazooka]
-0584  RATOC System Inc.
+	688f  QF-688uv Windstorm Pro Joystick
+	7070  QF-707u Bazooka Joystick
+0584  RATOC System, Inc.
 0585  FlashPoint Technology, Inc.
 0586  ZyXEL Communications Corp.
 	1000  Omni NET Modem / ISDN TA
-0587  America Kotobuki Electronics Ind.
+0587  America Kotobuki Electronics Industries, Inc.
 0588  Sapien Design
 0589  Victron
 058a  Nohau Corp.
 058b  Infineon Technologies
 058c  In Focus Systems
 058d  Micrel Semiconductor
-058e  Tripath Technology Inc.
-058f  Alcor Micro, Inc.
+058e  Tripath Technology, Inc.
+058f  Alcor Micro Corp.
 	2802  Monterey Keyboard
+	5492  Hub
 	9213  MacAlly Kbd Hub
 	9215  AU9814 Hub
 	9254  Hub
-	9410  MicroConnectors/StrongMan Keyboard
-	9472  Monterey/NEC Kbd Hub
+	9380  USB Flash drive
+	9410  Keyboard
+	9472  Keyboard Hub
 0590  Omron Corp.
 	0004  Cable Modem
 0591  Questra Consulting
 0592  Powerware Corp.
 0593  Incite
 0594  Princeton Graphic Systems
-0595  Zoran Microelectronics Ltd.
-0596  MicroTouch Systems Inc.
+0595  Zoran Microelectronics, Ltd
+0596  MicroTouch Systems, Inc.
 	0001  Touchscreen
 0597  Trisignal Communications
 0598  Niigata Canotec Co., Inc.
-0599  Brilliance Semiconductor Inc.
-059a  Spectrum Signal Processing Inc.
+0599  Brilliance Semiconductor, Inc.
+059a  Spectrum Signal Processing, Inc.
 059b  Iomega Corp.
 	0001  Zip 100 (Type 1)
 	000b  Zip 100 (Type 2)
@@ -932,135 +1316,172 @@
 	0032  Zip 250 (Ver 2)
 	0040  SCSI Bridge
 	0050  Zip CD 650 Writer
+	0053  CDRW55292EXT CD-RW External Drive
 	006d  HipZip MP3 Player
-059c  A-Trend Technology Co., Ltd.
+059c  A-Trend Technology Co., Ltd
 059d  Advanced Input Devices
 059e  Intelligent Instrumentation
-059f  LaCie
+059f  LaCie, Ltd
+	0212  PocketDrive
 	a601  HardDrive
 05a0  Vetronix Corp.
 05a1  USC Corp.
-05a2  Fuji Film Microdevices Co. Ltd.
-05a3  V Automation Inc.
+05a2  Fuji Film Microdevices Co., Ltd
+05a3  ARC International
 05a4  Ortek Technology, Inc.
 	9731  MCK-600W Keyboard
 05a5  Sampo Technology Corp.
-05a6  Cisco Systems
+05a6  Cisco Systems, Inc.
 05a7  Bose Corp.
 05a8  Spacetec IMC Corp.
 05a9  OmniVision Technologies, Inc.
 	0511  OV511 WebCam
 	0518  OV518 WebCam
 	a511  OV511+ WebCam
-05aa  Utilux South China Ltd.
+05aa  Utilux South China, Ltd
 05ab  In-System Design
 	0002  Parallel Port
 	0031  ATA Bridge
-	0060  USB 2.0 Bridge
+	0060  USB 2.0 ATA Bridge
 	0200  USS725 ATA Bridge
 	0202  ATA Bridge
 	081a  ATA Bridge
-05ac  Apple Computer
+	0cda  ATA Bridge for CD-R/RW
+05ac  Apple Computer, Inc.
 	0201  iMac Keyboard [ALPS M2452]
 	0202  Apple Keyboard [ALPS]
+	0205  Apple Extended Keyboard [Mitsumi]
 	0206  Apple Extended Keyboard [Mitsumi]
 	0301  iMac Mouse [Mitsumi/Logitech]
 	0302  Apple Optical Mouse [Fujitsu]
 	1001  Apple Keyboard Hub [ALPS]
 	1002  Apple Extended Keyboard Hub [Mitsumi]
-05ad  Y.C.Cable U.S.A., Inc.
+	1101  Speakers
+	1201  3G iPod
+05ad  Y.C. Cable U.S.A., Inc.
 05ae  Synopsys, Inc.
-05af  Jing-Mold Enterprise Co., Ltd.
+05af  Jing-Mold Enterprise Co., Ltd
 05b0  Fountain Technologies, Inc.
 05b1  First International Computer, Inc.
-05b4  LG Semicon Co., Ltd.
-05b5  Dialogic Corp
+05b4  LG Semicon Co., Ltd
+	4857  M-Any DAH-210
+	6001  Digisette DUO-MP3 AR-100
+05b5  Dialogic Corp.
 05b6  Proxima Corp.
 05b7  Medianix Semiconductor, Inc.
 05b8  Agiler, Inc.
 	3002  Scroll Mouse
 05b9  Philips Research Laboratories
 05ba  DigitalPersona, Inc.
+05bc   3G Green Green Globe Co., Ltd
+	0004  Trackball
 05bd  RAFI GmbH & Co. KG
-05be  Raychem Corp.
+05be  Tyco Electronics (Raychem)
 05bf  S & S Research
 05c0  Keil Software
-05c1  Kawasaki Steel
+05c1  Kawasaki Microelectronics, Inc.
 05c2  Media Phonics (Suisse) S.A.
-05c5  Digi International Inc.
+05c5  Digi International, Inc.
 05c6  Qualcomm, Inc.
 	3100  CDMA Wireless Modem/Phone
 	3196  CDMA Wireless Modem
 	3197  CDMA Wireless Modem/Phone
-05c7  Qtronix Corp
+05c7  Qtronix Corp.
 	1001  Lynx Mouse
-	2011  Scorpius Keyboard
-05c8  Cheng Uei Precision Industry Co., Ltd.
+	2011  SCorpius Keyboard
+05c8  Cheng Uei Precision Industry Co., Ltd (Foxlink)
 05c9  Semtech Corp.
-05ca  Ricoh Company Ltd.
-	0101  RDC-5300 Digital Camera
-	2201  RDC-7 Digital Camera
-05cb  PowerVision Technologies Inc.
+05ca  Ricoh Co., Ltd
+	0101  RDC-5300 Camera
+	2201  RDC-7 Camera
+	2205  Caplio RR30 / Medion MD 6126 Camera
+05cb  PowerVision Technologies, Inc.
 	1483  Trust CombiScan 19200
 05cc  ELSA AG
 	2100  MicroLink ISDN Office
 	2219  MicroLink ISDN
 	2265  MicroLink 56k
+	2267  MicroLink 56k (V.250)
 	2280  MicroLink 56k Fun
 	3000  Micolink USB2Ethernet [pegasus]
-05cd  Silicom Ltd.
-05ce  SICAN GmbH
-05cf  Sung Forn Co. Ltd.
-05d0  Lunar Corp.
-05d1  Brainboxes Limited
+	3363  MicroLink ADSL Fun
+05cd  Silicom, Ltd
+05ce  sci-worx GmbH
+05cf  Sung Forn Co., Ltd
+05d0  GE Medical Systems Lunar
+05d1  Brainboxes, Ltd
 05d2  Wave Systems Corp.
 05d6  Philips Semiconductors, CICT
 05d7  Thomas & Betts Corp.
 	0099  10Mbps Ethernet [klsi]
 05d8  Ultima Electronics Corp.
-	4002  Lifetec LT9385 Scanner
+	4001  Artec Ultima 2000
+	4002  Artec Ultima 2000 (GT6801 based)/Lifetec LT9385 Scanner
+	4003  Artec E+ 48U
+	4004  Artec E+ Pro
+	4008  Trust Easy Webscan 19200
+	4009  Umax Astraslim
 05d9  Axiohm Transaction Solutions
-05da  Microtek International Inc.
+05da  Microtek International, Inc.
 	0093  ScanMaker V6USL
 	0094  Phantom 336CX/C3
 	0099  ScanMaker X6/X6U
 	009a  Phantom C6
 	00a0  Phantom 336CX/C3 (#2)
 	00b6  ScanMaker V6UPL
+	1011  NHJ Che-ez! Kiss Digital Camera
+	30ce  ScanMaker 3800
 	30cf  ScanMaker 4800
+	30e6  ScanMaker i320
 	40ca  ScanMaker 3600
 	80a3  ScanMaker V6USL (#2)
 	80ac  ScanMaker V6UL/SpicyU
+05db  Sun Corp. (Suntac?)
 05dc  Lexar Media, Inc.
-05dd  Delta Electronics Inc.
+	0080  Jumpdrive Secure 64MB
+	b018  Multi-Card Reader
+05dd  Delta Electronics, Inc.
 05e0  Symbol Technologies
+05e1  Syntek Semiconductor Co., Ltd
 05e3  Genesys Logic, Inc.
-	000a Keyboard with PS/2 Port
-	000b Karna Razor BoomSlang 2000 Mouse
-	0120 Pacific Image Electronics PrimeFilm 1800u slide/negative scanner
-	0300 GLUSB98PT Parallel Port
-	0502 GL620USB GeneLink USB-USB Bridge
-	0700 SIIG US2256 CompactFlash Card Reader
-05e5  Fuji Electric Co., Ltd.
+	000a  Keyboard with PS/2 Port
+	000b  Mouse 
+	0120  Pacific Image Electronics PrimeFilm 1800u slide/negative scanner
+	0300  GLUSB98PT Parallel Port
+	0406  Hub
+	0502  GL620USB GeneLink USB-USB Bridge
+	0660  USB 2.0 Hub
+	0700  SIIG US2256 CompactFlash Card Reader
+	0701  USB 2.0 IDE Adapter
+	0702  USB 2.0 IDE Adapter
+	0703  Card Reader
+	0760  Card Reader
+	07A0  Pen Flash
+	1205  Afilias Optical Mouse H3003
+05e5  Fuji Electric Co., Ltd
 05e6  Keithley Instruments
 05e9  Kawasaki LSI
 	0008  KL5KUSB101B Ethernet [klsi]
 	0009  Sony 10Mbps Ethernet [pegasus]
-05eb  FFC Limited
+05eb  FFC, Ltd
 05ef  AVB, Inc. [anko?]
 	020a  Top Shot Pegasus Joystick
 	8884  Mag Turbo Force Wheel
 	8888  Top Shot Force Feedback Racing Wheel
-05f0  Canopus Co., Ltd.
+05f0  Canopus Co., Ltd
 	0101  DA-Port DAC
-05f2  Dexin Corp., Ltd.
+05f2  Dexin Corp., Ltd
 05f3  PI Engineering, Inc.
+	0007  Kinesis Advantage PRO MPC/USB Keyboard
+	0081  Kinesis Integrated Hub
 	020b  PS2 Adapter
-05f5  Unixtar Technology Inc.
+	0232  X-Keys Switch Interface, Programming Mode
+	0264  X-Keys Switch Interface, Composite Mode
+05f5  Unixtar Technology, Inc.
 05f6  AOC International
-05f7  RFC Distribution(s) PTE Ltd.
+05f7  RFC Distribution(s) PTE, Ltd
 05f9  PSC Scanning, Inc.
-05fa  Siemens Telecommunications Systems Limited
+05fa  Siemens Telecommunications Systems, Ltd
 05fc  Harman Multimedia
 05fd  InterAct, Inc.
 	0251  Raider Pro
@@ -1075,47 +1496,51 @@
 05ff  LeCroy Corp.
 0600  Barco Display Systems
 0601  Jazz Hipster Corp.
-0602  Vista Imaging Inc.
+0602  Vista Imaging, Inc.
 	1001  ViCam WebCam
 0603  Novatek Microelectronics Corp.
 	6871  Mouse
-0604  Jean Co, Ltd.
-0606  Royal Information Electronics Co., Ltd.
-0607  Bridge Information Co., Ltd.
-0609  SMK Manufacturing Inc.
+0604  Jean Co., Ltd
+0606  Royal Information Electronics Co., Ltd
+0607  Bridge Information Co., Ltd
+0609  SMK Manufacturing, Inc.
 060a  Worthington Data Solutions, Inc.
 060b  Solid Year (?)
 	0001  MacAlly Keyboard
 	2101  Solid Year Keyboard
 060c  EEH Datalink GmbH
-060f  Joinsoon Electronics Mfg. Co., Ltd.
-0611  Totoku Electric Co., Ltd.
-0613  Ithaca Peripherals
+060f  Joinsoon Electronics Mfg. Co., Ltd
+0611  Totoku Electric Co., Ltd
+0613  TransAct Technologies, Inc.
 0614  Bio-Rad Laboratories
-0616  Future Techno Designs PVT. Ltd.
+0616  Future Techno Designs PVT, Ltd
 0618  MacAlly
 	0101  Mouse
-0619  Seiko Instruments Inc.
-061c  Act Labs, Ltd.
+0619  Seiko Instruments, Inc.
+061c  Act Labs, Ltd
 061d  Quatech, Inc.
 061e  Nissei Electric Co.
 0620  Alaris, Inc.
 0621  ODU-Steckverbindungssysteme GmbH & Co. KG
+0623  Littelfuse, Inc.
 0624  Apex, Inc.
-0626  Nippon Systems Development Co., Ltd.
-0629  Zida Technologies Limited
-062b  Greatlink Electronics Taiwan  Ltd.
-062d  Taiwan Tai-Hao Enterprises Co. Ltd.
-062e  Mainsuper Enterprises Co., Ltd.
-062f  Sin Sheng Terminal & Machine Inc.
+0626  Nippon Systems Development Co., Ltd
+0629  Zida Technologies, Ltd
+062a  Creative Labs
+	0001  Notebook Optical Mouse
+062b  Greatlink Electronics Taiwan, Ltd
+062d  Taiwan Tai-Hao Enterprises Co., Ltd
+062e  Mainsuper Enterprises Co., Ltd
+062f  Sin Sheng Terminal & Machine, Inc.
 0634  Micron Technology, Inc.
 0636  Sierra Imaging, Inc.
 0638  Avision, Inc.
 	0268  iVina 1200U Scanner
 	026a  Minolta Dimage Scan Dual II
+	0a10  iVina FB1600/UMAX Astra 4500
 	4004  Minolta Dimage Scan Elite II
-063d  Fong Kai Industrial Co., Ltd.
-063f  New Technology Cable Ltd.
+063d  Fong Kai Industrial Co., Ltd
+063f  New Technology Cable, Ltd
 0640  Hitex Development Tools
 0641  Woods Industries, Inc.
 0642  VIA Medical Corp.
@@ -1123,107 +1548,165 @@
 	0000  Floppy
 0645  Who? Vision Systems, Inc.
 0646  UMAX
+0647  Acton Research Corp.
+	0100  ARC SpectraPro UV/VIS/IR Monochromator/Spectrograph
+	0101  ARC AM-VM Mono Airpath/Vacuum Monochromator/Spectrograph
+	0102  ARC Inspectrum Mono 
+	0103  ARC Filterwheel
+	03e9  Inspectrum 128x1024 F VIS Spectrograph
+	03ea  Inspectrum 256x1024 F VIS Spectrograph
+	03eb  Inspectrum 128x1024 B VIS Spectrograph
+	03ec  Inspectrum 256x1024 B VIS Spectrograph
 0648  Inside Out Networks
 064b  White Mountain DSP, Inc.
-064c  Ji-Haw Industrial Co., Ltd.
+064c  Ji-Haw Industrial Co., Ltd
+064e  Suyin Corp.
 064f  WIBU-Systems AG
 0651  Likom Technology Sdn. Bhd.
 0652  Stargate Solutions, Inc.
 0654  Granite Microsystems, Inc.
-0655  Space Shuttle Hi-Fi Wire & Cable Industry Co, Ltd.
-0656  Glory Mark Electronic Ltd.
-0657  Tekcon American Corp.
-065a  Optoelectronics Co., Ltd.
+0655  Space Shuttle Hi-Tech Co., Ltd
+0656  Glory Mark Electronic, Ltd
+0657  Tekcon Electronics Corp.
+065a  Optoelectronics Co., Ltd
+	0001  Barcode scanner
 065e  Silicon Graphics
-065f  Good Way Industrial Co, Ltd & GWC Technology Inc.
+065f  Good Way Technology Co., Ltd & GWC technology Inc.
+0660  TSAY-E (BVI) International, Inc.
 0661  Hamamatsu Photonics K.K.
-0663  Topmax Electronic Co., Ltd.
-0667  Aiwa Co., Ltd.
+0663  Topmax Electronic Co., Ltd
+	0103  CobraPad
+0667  Aiwa Co., Ltd
 	0fa1  TD-U8000 Tape Drive
 0668  WordWand
 0669  Oce' Printing Systems GmbH
-066a  Total Technologies, Ltd.
-066b  Linksys Inc.
+066a  Total Technologies, Ltd
+066b  Linksys, Inc.
 	0105  SCM eUSB SmartMedia Card Reader
 	010a  Melco MCR-U2 SmartMedia / CompactFlash Reader
 	2202  USB10TX Ethernet [pegasus]
 	2203  USB100TX Ethernet [pegasus]
 	2204  USB100TX HomePNA Ethernet [pegasus]
 	2206  USB Ethernet [pegasus]
-	2211  WUSB11 Wireless Ethernet
-066d  Entrega Inc.
+	2211  WUSB11 802.11b Adapter
+	2212  WUSB11v2.5 802.11b Adapter
+	2213  WUSB12v1.1 802.11b Adapter
+066d  Entrega, Inc.
 066e  Acer Semiconductor America, Inc.
 066f  SigmaTel, Inc.
+	3400  STMP3400 D-Major MP3 Player
+	3410  STMP3410 D-Major MP3 Player
 	4200  STIr4200 IrDA Bridge
-0672  Labtec Inc.
+	8202  Jens of Sweden / I-BEAD 150M/150H MP3 player
+0672  Labtec, Inc.
 	1041  LCS1040 Speaker System
 	5000  SpaceBall 4000 FLX
 0673  HCL
 	5000  Keyboard
+0674  Key Mouse Electronic Enterprise Co., Ltd
 0675  Draytech
 	0110  Vigor 128 ISDN TA
 0676  Teles AG
-0677  Aiwa Co., Ltd.
+0677  Aiwa Co., Ltd
 	0fa1  TD-U8000 Tape Drive
 0678  ACard Technology Corp.
 067b  Prolific Technology, Inc.
 	0000  PL2301 USB-USB Bridge
 	0001  PL2302 USB-USB Bridge
-	2307  PL2307 USB-ATAPI4 Bridge
 	2303  PL2303 Serial Port
+	2305  PL2305 Parallel Port
+	2307  PL2307 USB-ATAPI4 Bridge
+	2315  Flash Disk Embedded Hub
+	2316  Flash Disk Security Device
+	2317  Mass Storage Device
+	2501  PL2501 USB-USB Bridge (USB 2.0)
+	2515  Flash Disk Embedded Hub
+	2517  Flash Disk Mass Storage Device
 067c  Efficient Networks, Inc.
 	1001  Siemens SpeedStream 100MBps Ethernet
-	1022  Siemens 802.11b Wireless Ethernet
+	1022  Siemens SpeedStream 1022 802.11b Adapter
 	4060  Alcatel Speedstream 4060 ADSL Modem
 067d  Hohner Corp.
 067e  Intermec
-067f  Virata Ltd.
-0680  Avance Logic, Inc.
+067f  Virata, Ltd
+0680  Realtek Semiconductor Corp., CPP Div. (Avance Logic)
+	0002  Arowana Optical Wheel Mouse MSOP-01
 0681  Siemens Information and Communication Products
 	0002  Gigaset 3075 Passive ISDN
 	0005  Mouse with Fingerprint Reader
+	0012  I-Gate 802.11b Adapter
 0684  Actiontec Electronics, Inc.
-0686  Minolta Co., Ltd.
+0686  Minolta Co., Ltd
+	4003  Dimage 2330 Zoom
+	4004  Scan Elite II
 	4006  Dimage 7 digital still camera
+	4007  Dimage S304 digital still camera
 	4009  Dimage X digital still camera
-068a  Pertech Inc.
+	400a  Dimage S404 digital still camera
+	400b  Dimage 7i digital still camera
+	400d  Scan Dual III
+	4014  Dimage S414 digital still camera
+068a  Pertech, Inc.
 068e  CH Products, Inc.
+	00e2  HFX OEM Joystick
+	00f2  Flight Sim Pedals
+	00ff  Flight Sim Yoke
 	0500  GameStick 3D
+	0501  CH Pro Pedals
 	0504  F-16 Combat Stick
-0690  Golden Bridge Electric Co., Ltd.
-0693  Hagiwara Sys-Com
+0690  Golden Bridge Electech, Inc.
+0693  Hagiwara Sys-Com Co., Ltd
 	0002  FlashGate SmartMedia Card Reader
-	0003  FlasgGate CompactFlash Card Reader
+	0003  FlashGate CompactFlash Card Reader
 	0005  FlashGate
 0694  Lego Group
 	0001  Mindstorms Tower
 0698  Chuntex (CTX)
 	1786  1300ex Monitor
 	9999  VLxxxx Monitor+Hub
+0699  Tektronix, Inc.
 069a  Askey Computer Corp.
 	0001  VC010 WebCam [pwc]
-069b  Thomson Consumer Electronics
+	0321  Dynalink WLL013 / Compex WLU11A 802.11b Adapter
+	0821  BT Voyager 1010 802.11b Adapter
+069b  Thomson, Inc.
+	0704  DCM245 Cable Modem
+	2220  RCA Kazoo RD1000 MP3 Player
 069d  Hughes Network Systems (HNS)
 	0002  Satellite Device
 069e  Marx
 	0005  CryptoBox v1.2
+069f  Allied Data Technologies BV
+	0010  Tornado Speakerphone FaxModem 56.0
+06a2  Topro Technology, Inc.
 06a3  Saitek PLC
 	0006  Cyborg Gold Joystick
+	0200  Xbox Adrenalin Hub
+	0241  Xbox Adrenalin Gamepad
+	0422  ST90 Joystick
 	052d  P750 Gamepad
 	053f  X36F Flightstick
 	100a  SP550 Pad and Joystick Combo
 	100b  SP550 Pad
+06a4  Xiamen Doowell Electron Co., Ltd
 06a5  Divio
+	0000  Typhoon Webcam 100k [nw8000]
 	d001  ProLink DS3303u WebCam
-06aa  Sysgration Ltd.
-06ac  Fujitsu PC Corp.
-06ad  Greatland Electronics Taiwan Ltd.
+	d800  Chicony TwinkleCam
+06a8  Topaz Systems, Inc.
+	0042  SignatureGem 1X5 Pad
+	0043  SignatureGem 1X5-HID Pad
+06a9  Westell
+06aa  Sysgration, Ltd
+06ac  Fujitsu Laboratories of America, Inc.
+06ad  Greatland Electronics Taiwan, Ltd
 06ae  Professional Multimedia Testing Centre
-06b8  Pixela Corproation
+06b8  Pixela Corp.
 06b9  Alcatel Telecom
-	4061  Speed Touch ISDN
-06ba  Smooth Cord & Connector Co., Ltd.
-06bb  EDA Inc.
+	4061  Speed Touch ISDN or ADSL Modem
+	a5a5  DynaMiTe Modem
+06ba  Smooth Cord & Connector Co., Ltd
+06bb  EDA, Inc.
 06bc  Oki Data Corp.
 06bd  AGFA-Gevaert NV
 	0001  SnapScan 1212U
@@ -1232,17 +1715,38 @@
 	0403  ePhoto CL18 Camera
 	0404  ePhoto CL20 Camera
 	2061  SnapScan 1212U (?)
+	208d  Snapscan e40
 	208f  SnapScan e50
+	2091  SnapScan e20
+	2093  SnapScan e10
+	2095  SnapScan e25
+	2097  SnapScan e26
 	20fd  SnapScan e52
-06be  Asia Microelectronic Development, Inc.
+	20ff  SnapScan e42
+06be  AME Optimedia Technology Co., Ltd
 06bf  Leoco Corp.
+06c2  GLAB Chester
+	0030  RFID Reader
+	0038  4-Motor PhidgetServo v3.0
+	0039  1-Motor PhidgetServo v3.0
+	003b  8-Motor PhidgetServo
+	0040  Interface Kit 884
+	0041  Interface Kit 088
+	0042  Interface Kit 32-32-0
+	0043  Interface Kit 0-256-0
+	0048  Receiver Ver 1.0
+	0049  PhidgetLED Ver 1.0
+	004b  PhidgetEncoder Ver 1.0
+	004e  PhidgetPower Ver 1.01
+	0050  PhidgetTextLCD ECMA1010 Ver 1.0
+	0058  PhidgetGraphicLCD Ver 1.0
 06c4  Bizlink International Corp.
 06c5  Hagenuk, GmbH
-06c6  Infowave Software Inc.
+06c6  Infowave Software, Inc.
 06c8  SIIG, Inc.
-06c9  Taxan (Europe) Ltd.
+06c9  Taxan (Europe), Ltd
 06ca  Newer Technology, Inc.
-06cb  Synaptics
+06cb  Synaptics, Inc.
 06cc  Terayon Communication Systems
 06cd  Keyspan
 	0101  USA-28 PDA [preenum]
@@ -1265,20 +1769,23 @@
 	1012  PanoCam 12/12X
 06d0  LapLink, Inc.
 	0622  LapLink Gold USB-USB Bridge [net1080]
-06d1  Daewoo Electronics Co Ltd.
+06d1  Daewoo Electronics Co., Ltd
 06d3  Mitsubishi Electric Corp.
 06d5  Toshiba
 	4000  Japanese Keyboard
 06d6  Aashima Technology B.V.
 06d7  Network Computing Devices (NCD)
 06d8  Technical Marketing Research, Inc.
-06da  Phoenixtec Power Co., Ltd.
+06da  Phoenixtec Power Co., Ltd
 06db  Paradyne
-06dc  Compeye Corp.
-06de  Heisei Electronics Co. Ltd.
+06dc  Foxlink Image Technology Co., Ltd
+	0014  Prolink Winscan Pro 2448U
+06de  Heisei Electronics Co., Ltd
 06e0  Multi-Tech Systems, Inc.
-	f101  MT5634ZBA MultiModem 56k Intl.
-	f104  MT5634ZBA MultiModem 56k
+	f101  MT5634ZBA-USB MultiModemUSB (old firmware)
+	f103  MT5634MU MultiMobileUSB
+	f104  MT5634ZBA-USB MultiModemUSB (new firmware)
+	f107  MT5634ZBA-USB-V92 MultiModemUSB
 06e1  ADS Technologies, Inc.
 	0008  UBS-10BT Ethernet [klsi]
 06e4  Alcatel Microelectronics
@@ -1287,22 +1794,25 @@
 	0001  NetCom Roadster II 56k
 	0002  Roadster II 56k
 06ef  I.A.C. Geometrische Ingenieurs B.V.
-06f0  T.N.C Industrial Co., Ltd.
-06f1  Opcode Systems Inc.
-06f2  Machkey  International (USA)
-06f6  Wintrend Technology Co., Ltd.
+06f0  T.N.C Industrial Co., Ltd
+06f1  Opcode Systems, Inc.
+06f2  Emine Technology Co.
+06f6  Wintrend Technology Co., Ltd
 06fa  HSD S.r.L
 06fd  Boston Acoustics
 06fe  Gallant Computer, Inc.
 0701  Supercomal Wire & Cable SDN. BHD.
-0703  Bencent Tzeng Industry Co., Ltd.
-0707  Standard Microsystems Corp
+0703  Bvtech Industry, Inc.
+0705  NKK Corp.
+0707  Standard Microsystems Corp.
 	0100  2202 Ethernet [klsi]
 	0200  2202 Ethernet [pegasus]
-0709  Silicon Systems Ltd. (SSL)
-070a  Oki Electric Industry Co., Ltd.
-070d  Comoss Electronic Co., Ltd.
-0710  Connect Tech Inc.
+0708  Putercom Co., Ltd
+0709  Silicon Systems, Ltd (SSL)
+070a  Oki Electric Industry Co., Ltd
+070d  Comoss Electronic Co., Ltd
+070e  Excel Cell Electronic Co., Ltd
+0710  Connect Tech, Inc.
 	0001  WhiteHeat (fake ID)
 	8001  WhiteHeat
 0711  Magic Control Technology Corp.
@@ -1317,21 +1827,25 @@
 0714  NewMotion, Inc.
 	0003  ADB to USB convertor
 0718  Imation Corp.
-0719  Tremon Enterprises Co., Ltd.
+0719  Tremon Enterprises Co., Ltd
 071b  Domain Technologies, Inc.
 	0002  DTI-56362-USB Digital Interface Unit
 	0101  Audio4-USB DSP Data Acquisition Unit
 	0201  Audio4-5410 DSP Data Acquisition Unit
 	0301  SB-USB JTAG Emulator
 071c  Xionics Document Technologies, Inc.
-071d  Eicon Technology Corp.
+071d  Eicon Networks Corp.
 	1000  Diva ISDN TA
 0723  Centillium Communications Corp.
 0726  Vanguard International Semiconductor-America
 0729  Amitm
 	1000  USC-1000 Serial Port
-072f  ACS, Ltd.
-	0001  ACR20U SmartCard Reader
+072e  Sunix Co., Ltd
+072f  Advanced Card Systems, Ltd
+	0001  AC1030-based SmartCard Reader
+	9000  ACR38 AC1038-based Smart Card Reader
+0731  Susteen, Inc.
+0732  Goldfull Electronics & Telecommunications Corp.
 0733  ViewQuest Technologies, Inc.
 	0401  CS330 WebCam
 	0402  M-318B WebCam
@@ -1340,46 +1854,58 @@
 	0001  560V Modem
 0735  Asuscom Network
 	c541  ISDN TA 280
+0736  Lorom Industrial Co., Ltd
 0738  Mad Catz, Inc.
+073b  Suncom Technologies
+073d  Eutron S.p.a.
+	0005  Crypto Token
 073e  NEC, Inc.
 	0301  Game Pad
-073b  Suncom Technologies
-0745  Syntech Information Co., Ltd.
+0745  Syntech Information Co., Ltd
 0746  Onkyo Corp.
 0747  Labway Corp.
-0748  Strong Man Enterprise Co., Ltd.
+0748  Strong Man Enterprise Co., Ltd
 0749  EVer Electronics Corp.
-074a  Ming Fortune Industry Co., Ltd.
+074a  Ming Fortune Industry Co., Ltd
 074b  Polestar Tech. Corp.
 074c  C-C-C Group PLC
-074d  Micronas Intermetall GmbH
+074d  Micronas GmbH
 074e  Digital Stream Corp.
 	0001  PS/2 Adapter
 	0002  PS/2 Adapter
 0755  Aureal Semiconductor
+0757  Network Technologies, Inc.
 0763  Midiman
 	1001  Midisport 2x2
-0757  Network Technologies, Inc.
+	1010  Midisport 1x1
+	1020  Midisport 4x4
+	1030  Midisport 8x8
 0764  Cyber Power System, Inc.
-0765  X-Rite Incorporated
-0766  Destech Solutions, Inc.
+0765  X-Rite, Inc.
+0766  Jess-Link Products Co., Ltd
 0768  Camtel Technology Corp.
 0769  Surecom Technology Corp.
 076a  Smart Technology Enablers, Inc.
-076b  Utimaco Safeware AG
+076b  OmniKey AG
+	0596  CardMan 2020
+	1784  CardMan 6020
+076c  Partner Tech
 076d  Denso Corp.
-076e  Kuan Tech Enterprise Co., Ltd.
-076f  Jhen Vei Enterprise Co., Ltd.
-0774  AmTRAN Technology Co., Ltd.
+076e  Kuan Tech Enterprise Co., Ltd
+076f  Jhen Vei Electronic Co., Ltd
+0774  AmTRAN Technology Co., Ltd
 0775  Longshine Electronics Corp.
 0776  Inalways Corp.
 0777  Comda Enterprise Corp.
 0779  Fairchild Semiconductor
-077a  Sankyo Seiki Mfg. Co., Ltd.
+077a  Sankyo Seiki Mfg. Co., Ltd
 077b  Linksys
-077c  Forward Electronics Co., Ltd.
+	2219  WUSB11 V2.6 802.11b Adapter
+	2226  USB200M 100baseTX Adapter
+077c  Forward Electronics Co., Ltd
 	0005  NEC Keyboard
 077d  Griffin Technology
+	0410  PowerMate
 	0223  IMic Audio In/Out
 077f  Well Excellent & Most Corp.
 0781  SanDisk Corp.
@@ -1387,27 +1913,40 @@
 	0002  SDDR-31 ImageMate II CompactFlash Reader
 	0005  SDDR-05b (CF II) ImageMate CompactFlash Reader
 	0200  SDDR-09 (SSFDC) ImageMate SmartMedia Reader [eusb]
+	0400  SecureMate SD/MMC Reader
+	0621  SDDR-86 Imagemate 6-in-1 Reader
+	0810  SDDR-75 ImageMate CF-SM Reader
+	0830  ImageMate CF/MMC/SD Reader
+	8185  SDCZ2-nnn Cruzer Mini flash-RAM drive
+	8889  SDDR-88 Imagemate 8-in-1 Reader
 0782  Trackerball
-0784  Vivitar Inc.
-	0100  ViviCam 2655
+0784  Vivitar, Inc.
+	0100  Vivicam 2655
 	1310  Vivicam 3305
-	5260  Werlisa Sport PX 100
+	1688  Vivicam 3665
+	2888  Polaroid DC700
+	3330  Nytec ND-3200 Camera
+	5260  Werlisa Sport PX 100 / JVC GC-A33 Camera
+	5300  Pretec dc530
 0785  NTT-ME
 	0001  MN128mini-V ISDN TA
 	0003  MN128mini-J ISDN TA
+0789  Logitec Corp.
 078b  Happ Controls, Inc.
 	0010  Driving UGCI
 	0020  Flying UGCI
 	0030  Fighting UGCI
-078e  Brimax Inc.
-0790  Pro-Image Manufacturing Co., Ltd.
+078e  Brincom, Inc.
+0790  Pro-Image Manufacturing Co., Ltd
 0791  Copartner Wire and Cable Mfg. Corp.
 0792  Axis Communications AB
-0793  Wha Yu Industrial Co., Ltd.
+0793  Wha Yu Industrial Co., Ltd
 0794  ABL Electronics Corp.
-0795  RealChip Inc.
+0795  RealChip, Inc.
 0796  Certicom Corp.
 0797  Grandtech Semiconductor Corp.
+	8001  SmartCam
+	801c  Meade Binoculars/Camera
 079b  Sagem
 079d  Alfadata Computer Corp.
 	0201  GamePort Adapter
@@ -1415,15 +1954,17 @@
 	d952  Palladio USB V.92 Modem
 07a2  National Technical Systems
 07a3  Onnto Corp.
-07a4  Be Incorporated
-07a6  ADMtek Incorporated
+07a4  Be, Inc.
+07a6  ADMtek, Inc.
 	0986  AN986 Pegasus Ethernet
 	8511  ADM8511 Pegasus II Ethernet
-07aa  Correga K.K.
+07aa  Corega K.K.
 	0001  Ether USB-T Ethernet [klsi]
 	0004  FEther USB-TX Ethernet [pegasus]
-07ab  Freecom
+	0012  Stick-11 802.11b Adapter
+07ab  Freecom Technologies
 	fc01  IDE bridge
+	fc03  USB2-IDE IDE bridge
 07af  Microtech
 	0004  SCSI-DB25 SCSI Bridge [shuttle]
 	0005  SCSI-HD50 SCSI Bridge [shuttle]
@@ -1431,224 +1972,294 @@
 07b0  Trust Technologies
 	0001  ISDN TA
 07b1  IMP, Inc.
-07b2  Motorola ING
+07b2  Motorola BCS, Inc.
 	4100  SB4100 Cable Modem
 07b3  Plustek, Inc.
 	0001  OpticPro 1212U Scanner
-07b4  Olympus Optical Co., Ltd.
+	0010  OpticPro U12 Scanner
+	0011  OpticPro U24 Scanner
+	0013  OpticPro UT12 Scanner
+	0015  OpticPro U24 Scanner
+	0017  OpticPro UT12/16/24 Scanner
+	0400  OpticPro 1248U Scanner
+	0401  OpticPro 1248U Scanner #2
+	0403  OpticPro U16B Scanner
+07b4  Olympus Optical Co., Ltd
 	0100  Camedia C-2100/C-3000 Ultra Zoom Camera
-	0102  Camedia E-10 Camera
-	0105  Camedia C-700/C-3040 Zoom Camera
-07b5  Mega World International Ltd.
+	0102  Camedia E-10/C-220/C-50 Camera
+	0105  Camedia C-700/C-3040/C-4000 Zoom Camera
+	0114  C-350Z Camera
+	0203  Digital Voice Recorder DW-90
+	0206  Digital Voice Recorder DS-330
+	0207  Digital Voice Recorder & Camera W-10
+07b5  Mega World International, Ltd
 	9902  GamePad
 07b6  Marubun Corp.
-07b7  TIME Interconect Ltd.
-07b8  D-Link, Inc.
-	abc1  DU-E10 Ethernet [pegasus]
+07b7  TIME Interconnect, Ltd
+07b8  D-Link Corp.
 	4000  DU-E10 Ethernet [klsi]
 	4002  DU-E100 Ethernet [pegasus]
+	abc1  DU-E10 Ethernet [pegasus]
 	f101  DSB-560 Modem [atlas]
-07bc  Canon Computer Sytems, Inc.
-07bd  Webgear Inc.
+07bc  Canon Computer Systems, Inc.
+07bd  Webgear, Inc.
 07be  Veridicom
-07c4  DataFab Systems, Inc.
+07c0  Code Mercenaries Hard- und Software GmbH
+	1500  IO-Warrior 40
+	1501  IO-Warrior 24
+	1502  IO-Warrior 48
+	1503  IO-Warrior 28
+07c4  Datafab Systems, Inc.
 	a000  CompactFlash Card Reader
 	a001  CompactFlash & SmartMedia Card Reader [eusb]
 	a002  Disk Drive
 	a005  CompactFlash & SmartMedia Card Reader
 	a006  SmartMedia Card Reader
 	a109  LC1 CompactFlash & SmartMedia Card Reader
+	a200  DF-UT-06 Hama MMC/SD Reader
 	a400  CompactFlash & Microdrive Reader
+	b004  MMC/SD Reader
 07c5  APG Cash Drawer
-07c6  Share Wave, Inc.
-07c7  Powertech Industrial Co., Ltd.
+07c6  ShareWave, Inc.
+07c7  Powertech Industrial Co., Ltd
 07c8  B.U.G., Inc.
 07c9  Allied Telesyn International
 07ca  AVerMedia Technologies, Inc.
-07cb  Kingmax Technology Inc.
-07cc  Carry Inc.
+07cb  Kingmax Technology, Inc.
+07cc  Carry Computer Eng., Co., Ltd
 	0000  CF Card Reader
 	0003  SM Card Reader
 	0004  SM/CF/PCMCIA Card Reader
 	0006  SM/CF/PCMCIA Card Reader
 	000c  SM/CF Card Reader
 	000d  SM/CF Card Reader
+	0200  6-in-1 Card Reader
+	0301  6-in-1 Card Reader
 07cd  Elektor
 	0001  USBuart Serial Port
-07cf  Casio Computer Co., Ltd.
-	1001  QV-8000SX/3000EX Digicam
+07cf  Casio Computer Co., Ltd
+	1001  QV-8000SX/5700/3000EX Digicam
 	2002  E-125 Cassiopeia Pocket PC
 	3801  Casio WMP-1 MP3-Watch
+	4500  LV-20 Digital Camera
+07d0  Dazzle
+	0001  Digital Video Creator I
+	0002  Global Village VideoFX Grabber
+	0004  DVC-800 (PAL) Grabber
 07d1  D-Link System
-07d2  Aptio Products Inc.
+07d2  Aptio Products, Inc.
 07d3  Cyberdata Corp.
 07d7  GCC Technologies, Inc.
 07da  Arasan Chip Systems
+07df  David Electronics Co., Ltd
 07e1  Ambient Technologies, Inc.
 	5201  V.90 Modem
-07e2  Elmeg GmbH & Co., Ltd.
+07e2  Elmeg GmbH & Co., Ltd
 07e3  Planex Communications, Inc.
-07e4  Movado Enterprise Co., Ltd.
+07e4  Movado Enterprise Co., Ltd
 07e5  QPS, Inc.
 	5c01  Que! CDRW
 07e6  Allied Cable Corp.
 07e7  Mirvo Toys, Inc.
 07e8  Labsystems
-07eb  Double-H Technology Co., Ltd.
-07ec  Taiyo Electrical Wire & Cable Co., Ltd.
+07ea  Iwatsu Electric Co., Ltd
+07eb  Double-H Technology Co., Ltd
+07ec  Taiyo Electric Wire & Cable Co., Ltd
+07f6  Circuit Assembly Corp.
+07f7  Century Corp.
+07f9  Dotop Technology, Inc.
 07fa  Draytek
 	0778  miniVigor 128 ISDN TA
-07f6  Circuit Assembly Corp
-07f7  Century Corp.
 07fd  Mark of the Unicorn
 	0000  FastLane MIDI Interface
 0801  Mag-Tek
-0802  Tritheim Technologies, Inc.
+0802  Mako Technologies, LLC
 0803  Zoom Telephonics, Inc.
 	9700  2986L FaxModem
-0809  Genicom Corp.
-080a  Evermuch Technology Co., Ltd.
-080d  Teco Image Systems Co., Ltd.
+0809  Genicom Technology, Inc.
+080a  Evermuch Technology Co., Ltd
+080d  Teco Image Systems Co., Ltd
+	0102  Hercules Scan@home 48
+0810  Personal Communication Systems, Inc.
 0813  Mattel, Inc.
+	0001  Intel Play QX3 Microscope
 081a  MG Logic
 	1000  Duo Pen Tablet
+081b  Indigita Corp.
 081c  Mipsys
-081e  Intelligent Peripheral Devices, Inc.
+081e  AlphaSmart, Inc.
 0822  Reudo Corp.
 0825  GC Protronics
 0826  Data Transit
 0827  BroadLogic, Inc.
 0828  Sato Corp.
-0829  Telocity, Inc.
+0829  DirecTV Broadband, Inc. (Telocity)
 082d  Handspring
 	0100  Visor
-0830  Palm Computing, Inc.
+	0300  Treo 600
+0830  Palm, Inc.
 	0002  Palm M505
 	0003  Palm M515
 	0020  Palm I705
 	0040  Palm M125
 	0050  Palm M130
+	0060  Palm Tungsten T
 	0080  Palm 
 0832  Kouwell Electronics Corp.
 0833  Sourcenext Corp.
-0835  Action Star Enterprise Co., Ltd.
-0839  Samsung Aerospace Industries Ltd.
+0835  Action Star Enterprise Co., Ltd
+0839  Samsung Techwin Co., Ltd
 	0005  Digimax Camera
+	0008  Digimax 230 Camera
+	1003  Digimax 210SE
+	1012  6500 Document Camera
+	1542  Digimax 50 Duo
 083a  Accton Technology Corp.
 	1046  10/100 Ethernet [pegasus]
 	5046  SpeedStream 10/100 Ethernet [pegasus]
 083f  Global Village
 	b100  TelePort V.90 Fax/Modem
-0841  Rioport.com Inc.
+0840  Argosy Research, Inc.
+0841  Rioport.com, Inc.
 	0001  Rio 500
+0844  Welland Industrial Co., Ltd
 0846  NetGear, Inc.
 	1001  EA101 Ethernet [klsi]
 084d  Minton Optic Industry Co., Inc.
 	0003  S-Cam F5 Digital Camera
+	0011  Argus DC3500 Digital Camera
 084e  KB Gear
 	1002  Pablo Tablet
 084f  Empeg
 	0001  Empeg-Car Mark I/II Player
 0850  Fast Point Technologies, Inc.
-0851  Macronix International Co., Ltd.
+0851  Macronix International Co., Ltd
+	1543  Maxell WS30 Slim Digital Camera
 0852  CSEM
-0854  ActiveWire Inc.
+0854  ActiveWire, Inc.
 	0100  I/O Board
 	0101  I/O Board, rev1
-0858  Hitachi Maxell Ltd.
+0858  Hitachi Maxell, Ltd
 0859  Minolta Systems Laboratory, Inc.
 085a  Xircom
 	0001  Portstation Dual Serial Port
+	0299  Colorvision, Inc. Monitor Spyder
 	8027  PGSDB9 Serial Port
 0862  Teletrol Systems, Inc.
 0863  Filanet Corp.
 0864  NetGear, Inc.
-	4100  MA101 Wireless Adapter 
+	4100  MA101 802.11b Adapter 
+	4102  MA101 802.11b Adapter
 086a  Emagic Soft-und Hardware GmbH
 086c  DeTeWe - Deutsche Telephonwerke AG & Co.
 	1001  Eumex 504PC ISDN TA
-086e  System TALKS Inc.
-086f  MEC IMEX Inc/HPT
+086e  System TALKS, Inc.
+086f  MEC IMEX, Inc.
 0870  Metricom
 0871  SanDisk, Inc.
 	0001  SDDR-01 Compact Flash Reader
 	0002  SDDR-31 Compact Flash Reader
 	0005  SDDR-05 Compact Flash Reader
-0873  Xpeed Inc.
+0873  Xpeed, Inc.
+0874  A-Tec Subsystem, Inc.
 0879  Comtrol Corp.
-087c  Adesso/Kbtek America Inc.
+087c  Adesso/Kbtek America, Inc.
 087d  Jaton Corp.
 087e  Fujitsu Computer Products of America
 087f  Virtual IP Group, Inc.
-0880  APT Technologies Inc.
+0880  APT Technologies, Inc.
 0883  Recording Industry Association of America (RIAA)
 0885  Boca Research, Inc.
 0886  XAC Automation Corp.
 0887  Hannstar Electronics Corp.
 088b  MassWorks, Inc.
 	4944  MassWorks ID-75 TouchScreen
-0892  DioGraphy Inc.
+0892  DioGraphy, Inc.
 089c  United Technologies Research Cntr.
-089d  Icron Systems Inc.
-089e  NST Co., Ltd.
-08a5  e9 Inc.
+089d  Icron Technologies Corp.
+089e  NST Co., Ltd
+089f  Primex Aerospace Co.
+08a5  e9, Inc.
 08a8  Andrea Electronics
+08ae  Macally (Mace Group, Inc.)
+08b4  Sorenson Vision, Inc.
 08b8  J. Gordon Electronic Design, Inc.
 	01f4  USBSIMM1
-08b9  Tandy Corp./Radio Shack
-08bb  Burr-Brown Japan, Ltd.
-08bd  Citizen Watch Co., Ltd.
+08b9  RadioShack Corp. (Tandy)
+08bb  Texas Instruments Japan
+08bd  Citizen Watch Co., Ltd
 08c3  Precise Biometrics
 	0101  Precise 100 MC FingerPrint and SmartCard Reader
 08c4  Proxim, Inc.
-08c7  Key Nice Enterprise Co., Ltd.
+08c7  Key Nice Enterprise Co., Ltd
 08c8  2Wire, Inc.
 08c9  Nippon Telegraph and Telephone Corp.
-08ca  AIPTEK International Inc.
+08ca  Aiptek International, Inc.
+	0010  Tablet
 	0020  APT-6000U Tablet
+	0021  APT-2 Tablet
+	0022  Tablet
+	0023  Tablet
+	0024  Tablet
 	0103  Pocket DV Digital Camera
+	0111  PenCam VGA Plus
+	2010  Pocket CAM 3 Mega (webcam)
+	2011  Pocket CAM 3 Mega (storage)
 08cd  Jue Hsun Ind. Corp.
 08ce  Long Well Electronics Corp.
 08cf  Productivity Enhancement Products
 08d1  smartBridges, Inc.
 	0001  smartNIC Ethernet [catc]
 08d3  Virtual Ink
-08d4  Siemens PC Systems
+08d4  Fujitsu Siemens Computers
+	0009  SCR SmartCard Reader
+08d9  Increment P Corp.
 08dd  Billionton Systems, Inc.
 	0986  USB-100N Ethernet [pegasus]
 	0987  USBLP-100 HomePNA Ethernet [pegasus]
 	0988  USBEL-100 Ethernet [pegasus]
 	8511  USBE-100 Ethernet [pegasus2]
+08de  ???
+	7a01  802.11b Adapter
+08df  Spyrus, Inc.
 08e3  Olitec, Inc.
 	0002  USB-RS232 Bridge
+08e4  Pioneer Corp.
 08e5  Litronic
-08e6  GemPlus
+08e6  Gemplus
+	0430  GemPC430 SmartCard Reader
+	0432  GemPC432 SmartCard Reader
+	0435  GemPC435 SmartCard Reader
 08e7  Pan-International Wire & Cable
 08e8  Integrated Memory Logic
 08e9  Extended Systems, Inc.
 	0100  XTNDAccess IrDA Dongle
-08ea  Ericsson Inc., Blue Ridge Labs
-08ec  M-Systems
+08ea  Ericsson, Inc., Blue Ridge Labs
+08ec  M-Systems Flash Disk Pioneers
 	0010  DiskOnKey
+08ee  CCSI/Hesso
+08f0  Corex Technologies
 08f1  CTI Electronics Corp.
-08f5  SYSTEC Co., Ltd.
-08f6  Logic 3 International Limited
-08f8  Keen Top International Enterprise Co., Ltd.
-08f9  EnThink, Inc.
+08f5  SysTec Co., Ltd
+08f6  Logic 3 International, Ltd
+08f8  Keen Top International Enterprise Co., Ltd
+08f9  Wipro Technologies
 08fa  Caere
 08fb  Socket Communications
-08fc  Sicon Cable Technology Co. Ltd.
+08fc  Sicon Cable Technology Co., Ltd
 08fd  Digianswer A/S
 08ff  AuthenTec, Inc.
 0900  Pinnacle Systems, Inc.
 0901  VST Technologies
 0906  Faraday Technology Corp.
-090a  Trumpion Microelectronics Inc.
+0909  Audio-Technica Corp.
+090a  Trumpion Microelectronics, Inc.
+	1540  Digitex Container Flash Disk
 090b  Neurosmith
 090c  Feiya Technology Corp.
 090d  Multiport Computer Vertriebs GmbH
 090e  Shining Technology, Inc.
-090f  Fujitsu Devices Inc.
+090f  Fujitsu Devices, Inc.
 0910  Alation Systems, Inc.
 0911  Philips Speech Processing
 0912  Voquette, Inc.
@@ -1656,49 +2267,64 @@
 0917  SmartDisk Corp.
 0919  Tiger Electronics
 	0100  Fast Flicks Digital Camera
+091e  Garmin International
+	0003  GPSmap 60C
 0920  Echelon Co.
 0921  GoHubs, Inc.
 0922  Dymo-CoStar Corp.
+	0007  LabelWriter 330
+	0009  LabelWriter 310
 0923  IC Media Corp.
+	010f  SIIG MobileCam
 0924  Xerox
-0927  Summus, Ltd.
-0928  Oxford Semiconductor Ltd.
-0929  American Biometric Company
+0925  Wisegroup, Ltd
+	8101  1-Motor PhidgetServo v2.0
+	8104  4-Motor PhidgetServo v2.0
+	8866  MP-8866 Dual USB Joypad
+0927  Summus, Ltd
+0928  Oxford Semiconductor, Ltd
+0929  American Biometric Co.
+092a  Toshiba Information & Industrial Sys. And Services
+092b  Sena Technologies, Inc.
 0930  Toshiba Corp.
-0931  Harmonic Data Systems Ltd.
+0931  Harmonic Data Systems, Ltd
 0932  Crescentec Corp.
 0933  Quantum Corp.
 0934  Netcom Systems
 0939  Lumberg, Inc.
 093a  Pixart Imaging, Inc.
-093b  Plextor
-093e  J.S.T. Mfg. Co., Ltd.
+093b  Plextor Corp.
+093d  InnoSync, Inc.
+093e  J.S.T. Mfg. Co., Ltd
 093f  Olympia Telecom Vertriebs GmbH
-0940  Japan Storage Battery Co., Ltd.
+0940  Japan Storage Battery Co., Ltd
 0941  Photobit Corp.
 0942  i2Go.com, LLC
-0943  HCL Technologies India Private Limited
+0943  HCL Technologies India Private, Ltd
 0944  KORG, Inc.
 0945  Pasco Scientific
 0948  Kronauer music in digital
-	1105  USB One
 	0301  USB Pro (24/48)
 	0302  USB Pro (24/96 playback)
 	0303  USB Pro (24/96 record)
 	0304  USB Pro (16/48)
+	1105  USB One
+094b  Linkup Systems Corp.
 094d  Cable Television Laboratories
 0951  Kingston Technology
 	000a  KNU101TX 100baseTX Ethernet
 0954  RPM Systems Corp.
-0955  NVidia
-0956  BlueWater Systems, Inc.
+0955  NVidia Corp.
+0956  BSquare Corp.
 0957  Agilent Technologies, Inc.
 0958  CompuLink Research, Inc.
-0959  Cologne Chip Designs GmbH
+0959  Cologne Chip AG
 095a  Portsmith
 095b  Medialogic Corp.
 095c  K-Tec Electronics
 095d  Polycom, Inc.
+0967  Acer (??)
+	0204  WarpLink 802.11b Adapter
 0968  Catalyst Enterprises, Inc.
 0971  Gretag-Macbeth AG
 0973  Schlumberger
@@ -1707,19 +2333,21 @@
 0976  Adirondack Wire & Cable
 0977  Lightsurf Technologies
 0978  Beckhoff GmbH
-0979  Teracom International Inc.
+0979  Jeilin Technology Corp., Ltd
 097a  Minds At Work LLC
-097b  Knudsen Engineering Limited
-097c  Marunix Co., Ltd.
+097b  Knudsen Engineering, Ltd
+097c  Marunix Co., Ltd
 097d  Rosun Technologies, Inc.
-0981  Oak Technology Ltd.
+097f  Barun Electronics Co., Ltd
+0981  Oak Technology, Ltd
+0984  Apricorn
 0985  cab Produkttechnik GmbH & Co KG
 	00a3  A3/200 or A3/300 Label Printer
 098c  Vitana Corp.
 098d  INDesign
-098e  Integrated Intellectual Property Inc.
+098e  Integrated Intellectual Property, Inc.
 098f  Kenwood TMI Corp.
-0993  Gemstar eBook Group, Ltd.
+0993  Gemstar eBook Group, Ltd
 	0001  REB1100 eBook Reader
 0996  Integrated Telecom Express, Inc.
 09a3  PairGain Technologies
@@ -1727,14 +2355,18 @@
 09a5  VCON Telecommunications
 09a6  Poinchips
 09a7  Data Transmission Network Corp.
-09a8  Shinestar Enterprise Co., Ltd.
-09a9  Smart Card Technologies Co., Ltd.
+09a8  Lin Shiung Enterprise Co., Ltd
+09a9  Smart Card Technologies Co., Ltd
 09aa  Intersil Corp.
-09b2  Franklin Electronic Publishers
-	0001 eBookman Palm Computer
+	3642  Prism2.x 802.11b Adapter
+09ae  Tripp Lite
+09b2  Franklin Electronic Publishers, Inc.
+	0001  eBookman Palm Computer
 09b3  Altius Solutions, Inc.
 09b4  MDS Telephone Systems
-09b5  Celltrix Technology Co., Ltd.
+09b5  Celltrix Technology Co., Ltd
+09bc  Grundig
+	0002  MPaxx MP150 MP3 Player
 09be  MySmart.Com
 	0001  MySmartPad
 09bf  Auerswald GmbH & Co. KG
@@ -1742,129 +2374,1002 @@
 	00db  COMpact 4410/2206 ISDN ISDN
 	00f1  COMfort System Telephones
 09c1  Arris Interactive LLC
-09c3  ActivCard, INC.
+09c2  Nisca Corp.
+09c3  ActivCard, Inc.
 09c4  ACTiSYS Corp.
-	0011   ACT-IR2000U IrDA Dongle
+	0011  ACT-IR2000U IrDA Dongle
 09c5  Memory Corp.
 09cc  Workbit Corp.
-09cd  Psion Dacom Home Networks Ltd.
-09ce  City Electronics Ltd.
+09cd  Psion Dacom Home Networks, Ltd
+09ce  City Electronics, Ltd
 09cf  Electronics Testing Center, Taiwan
-09d1  NeoMagic Inc.
-09d2  Vreelin Engineering Inc.
+09d1  NeoMagic, Inc.
+09d2  Vreelin Engineering, Inc.
 09d3  Com One
-09d9  KRF Tech Ltd.
-09da  A4 Tech Co., Ltd.
-09db  ComputerBoards Inc.
+	0001  ISDN TA
+09d9  KRF Tech, Ltd
+09da  A4 Tech Co., Ltd
+	001a  Wireless Mouse & RXM-15 Receiver
+09db  Measurement Computing Corp.
 09dc  Aimex Corp.
-09dd  Fellowes Manufacturing Co.
+09dd  Fellowes, Inc.
 09df  Addonics Technologies Corp.
+09e1  Intellon Corp.
 09e5  Jo-Dan International, Inc.
 09e6  Silutia, Inc.
 09e7  Real 3D, Inc.
-09e8  AKAI Professional M.I. Corp.
-09e9  Chen-Source Inc.
+09e8  AKAI  Professional M.I. Corp.
+09e9  Chen-Source, Inc.
+09eb  IM Networks, Inc.
+	4331  iRhythm Tuner Remote
 09ef  Xitel
-	0101 MD-Port DG2 MiniDisc Interface
+	0101  MD-Port DG2 MiniDisc Interface
 09f5  AresCom
 09f6  RocketChips, Inc.
-09f7  Edu-Science (H.K.) Ltd.
-09f8  SoftConnex
+09f7  Edu-Science (H.K.), Ltd
+09f8  SoftConnex Technologies, Inc.
 09f9  Bay Associates
 09fa  Mtek Vision
 09fb  Altera
 09ff  Gain Technology Corp.
 0a00  Liquid Audio
 0a01  ViA, Inc.
-0a11  Xentec Incorporated
-0a12  Cambridge Silicon Radio Ltd.
-0a13  Telebyte Inc.
-0a14  Spacelabs Medical Inc.
+0a07  Ontrak Control Systems Inc.
+	0064  ADU100 Data Acquisition Interface
+	00c8  ADU200 Relay I/O Interface
+	00d0  ADU208 Data Acquisition Interface
+0a0b  Cybex Computer Products Co.
+0a11  Xentec, Inc.
+0a12  Cambridge Silicon Radio, Ltd
+	0001  Bluetooth Dongle
+0a13  Telebyte, Inc.
+0a14  Spacelabs Medical, Inc.
 0a15  Scalar Corp.
-0a16  Trek Technology (S) PTE Ltd.
+0a16  Trek Technology (S) PTE, Ltd
 	9988  Trek2000 TD-G2
-0a17  Asahi Optical Co., Ltd.
+0a17  Pentax Corp.
 	0004  Pentax Optio 330
+	0006  Pentax Optio S
 0a18  Heidelberger Druckmaschinen AG
-0a19  Hua Geng Technologies Inc.
-0a43  Boca Systems Inc.
+0a19  Hua Geng Technologies, Inc.
+0a21  Medtronic Physio Control Corp.
+0a22  Century Semiconductor USA, Inc.
+0a2c  AK-Modul-Bus Computer GmbH
+	0008  GPIO Ports
+0a39  Gilat Satellite Networks, Ltd
+0a3a  PentaMedia Co., Ltd
+0a3c  NTT DoCoMo, Inc.
+0a3d  Varo Vision
+0a43  Boca Systems, Inc.
+0a46  Davicom Semiconductor, Inc.
+0a47  Hirose Electric
+0a48  I/O Interconnect
+	3258  Dane Elec zMate SD Reader
+	3259  Dane Elec zMate CF Reader
+0a4b  Fujitsu Media Devices, Ltd
+0a4c  Computex Co., Ltd
+0a4d  Evolution Electronics, Ltd
+	008e  MK-249C MIDI Keyboard
+0a4e  Steinberg Soft-und Hardware GmbH
+0a4f  Litton Systems, Inc.
+0a50  Mimaki Engineering Co., Ltd
+0a51  Sony Electronics, Inc.
+0a52  Jebsee Electronics Co., Ltd
+0a53  Portable Peripheral Co., Ltd
+0a5a  Electronics For Imaging, Inc.
+0a5b  EAsics NV
 0a5c  Broadcom Corp.
+	2033  BCM2033 Bluetooth
+	2035  BCM2035 Bluetooth
+0a5d  Diatrend Corp.
 0a5f  Zebra
 	0009  LP2844 Printer
-0a6b  Green House
+0a62  MPMan
+	0010  MPMan MP-F40 MP3 Player
+0a66  ClearCube Technology
+0a67  Medeli Electronics Co., Ltd
+0a68  Comaide Corp.
+0a69  Chroma ate, Inc.
+0a6b  Green House Co., Ltd
 	0001  Compact Flash R/W with MP3 player
+0a6c  Integrated Circuit Systems, Inc.
+0a6d  UPS Manufacturing
+0a6e  Benwin
+0a6f  Core Technology, Inc.
+0a70  International Game Technology
+0a72  Sanwa Denshi
+0a7d  NSTL, Inc.
+0a7e  Octagon Systems Corp.
+0a80  Rexon Technology Corp., Ltd
+0a81  Chesen Electronics Corp.
+	0101 Keyboard
+	0203 Mouse
+0a82  Syscan
+	4600  TravelScan 460/464
+0a83  NextComm, Inc.
+0a84  Maui Innovative Peripherals
+0a85  Idexx Labs
+0a86  NITGen Co., Ltd
+0a8d  Picturetel
+0a8e  Japan Aviation Electronics Industry, Ltd
+0a90  Candy Technology Co., Ltd
+0a91  Globlink Technology, Inc.
+0a92  EGO SYStems, Inc.
+0a93  C Technologies AB
+0a94  Intersense
+0aa3  Lava Computer Mfg., Inc.
+0aa4  Develco Elektronik
+0aa5  First International Digital
+0aa6  Perception Digital, Ltd
+	0101  Hercules Jukebox
+0aa7  Wincor Nixdorf GmbH & Co KG
+0aa8  TriGem Computer, Inc.
+0aa9  Baromtec Co.
+	f01b  Medion MD 6242 MP3 Player
+0aaa  Japan CBM Corp.
+0aab  Vision Shape Europe SA
+0aac  iCompression, Inc.
+0aad  Rohde & Schwarz GmbH & Co. KG
+0aae  NEC infrontia Corp. (Nitsuko)
+0aaf  Digitalway Co., Ltd
+0ab0  Arrow Strong Electronics Co., Ltd
+0aba  Ellisys
+	8001  USB Tracker 110 Protocol Analyzer
 0abe  Stereo-Link
 	0101  SL1200 DAC
-0aec  Neodio
+0ac3  Sanyo Semiconductor Company Micro
+0ac4  Leco Corp.
+0ac5  I & C Corp.
+0ac6  Singing Electrons, Inc.
+0ac7  Panwest Corp.
+0ac8  Z-Star Microelectronics Corp.
+0ac9  Micro Solutions, Inc.
+	0000  Backpack CD-ReWriter
+	0011  Backpack 40GB Hard Drive 
+0acc  Koga Electronics Co.
+0acd  ID Tech
+0acf  Intoto, Inc.
+0ad0  Intellix Corp.
+0ad1  Remotec Technology, Ltd
+0ad2  Service & Quality Technology Co., Ltd
+0ae3  Allion Computer, Inc.
+0ae4  Taito Corp.
+0ae7  Neodym Systems, Inc.
+0ae8  System Support Co., Ltd
+0ae9  North Shore Circuit Design L.L.P.
+0aea  SciEssence, LLC
+0aeb  TTP Communications, Ltd
+0aec  Neodio Technologies Corp.
+	3050  ND3050 8-in-1 Card Reader
 	5010  ND5010 Card Reader
+0af0  Option
+	5000  UMTS Card
+0af6  Silver I Co., Ltd
+0af7  B2C2, Inc.
 0af9  Hama, Inc.
 	0010  USB SightCam 100
+0afc  Zaptronix Ltd
+0afd  Tateno Dennou, Inc.
+0afe  Cummins Engine Co.
+0aff  Jump Zone Network Products, Inc.
+0b05  ASUSTek Computer, Inc.
+0b0e  GN Netcom
+0b0f  AVID Technology
+0b10  Pcally
+0b11  I Tech Solutions Co., Ltd
+0b1e  Electronic Warfare Assoc., Inc. (EWA)
+0b1f  Insyde Software Corp.
+0b20  TransDimension, Inc.
+0b21  Yokogawa Electric Corp.
+0b22  Japan System Development Co., Ltd
+0b23  Pan-Asia Electronics Co., Ltd
+0b24  Link Evolution Corp.
+0b27  Ritek Corp.
+0b28  Kenwood Corp.
+0b2c  Village Center, Inc.
 0b30  PNY Technologies, Inc.
 	0006  SM Media-Shuttle Card Reader
-0b3b  Tekram Technology, Co., Ltd.
-	1612  AIR.Mate 2@net
-0c70  MCT Elektronikladen
-	0000  USB08 Development board
-0c76  JMTek, LLC.
-        0003  USBdisk
-	0005  USBdisk
-0bda  RealTek Semiconductor Corp.
+0b33  Contour Design, Inc.
+0b37  Hitachi ULSI Systems Co., Ltd
+0b39  Omnidirectional Control Technology, Inc.
+0b3a  IPaxess
+0b3b  Tekram Technology Co., Ltd
+	1601  Allnet 0193 802.11b Adapter
+	1602  ZyXEL ZyAIR B200 802.11b Adapter
+	1612  AIR.Mate 2@net 802.11b Adapter
+0b3c  Olivetti Techcenter
+0b3e  Kikusui Electronics Corp.
+0b41  Hal Corp.
+0b43  Play.com, Inc.
+	0003  PS2 Controller Converter
+0b47  Sportbug.com, Inc.
+0b48  TechnoTrend AG
+0b49  ASCII Corp.
+0b4b  Pine Corp. Ltd.
+	0100  D'music MP3 Player
+0b4e  Musical Electronics, Ltd
+0b50  Dumpries Co., Ltd
+0b52  Colorado MicroDisplay, Inc.
+0b54  Sinbon Electronics Co., Ltd
+0b56  TYI Systems, Ltd
+0b57  Beijing HanwangTechnology Co., Ltd
+0b59  Lake Communications, Ltd
+0b5a  Corel Corp.
+0b5f  Green Electronics Co., Ltd
+0b60  Nsine, Ltd
+0b61  NEC Viewtechnology, Ltd
+0b62  Orange Micro, Inc.
+	0059  iBOT2 WebCam
+0b63  ADLink Technology, Inc.
+0b64  Wonderful Wire Cable Co., Ltd
+0b65  Expert Magnetics Corp.
+0b69  CacheVision
+0b6a  Maxim Integrated Products
+0b6f  Nagano Japan Radio Co., Ltd
+0b70  PortalPlayer, Inc.
+0b71  SHIN-EI Sangyo Co., Ltd
+0b72  Embedded Wireless Technology Co., Ltd
+0b73  Computone Corp.
+0b75  Roland DG Corp.
+0b79  Sunrise Telecom, Inc.
+0b7a  Zeevo, Inc.
+0b7b  Taiko Denki Co., Ltd
+0b7c  ITRAN Communications, Ltd
+0b7d  Astrodesign, Inc.
+0b84  Rextron Technology, Inc.
+0b85  Elkat Electronics, Sdn., Bhd.
+0b86  Exputer Systems, Inc.
+0b87  Plus-One I & T, Inc.
+0b88  Sigma Koki Co., Ltd, Technology Center
+0b89  Advanced Digital Broadcast, Ltd
+0b95  ASIX Electronics Corp.
+0b96  Sewon Telecom
+0b97  O2 Micro, Inc.
+0b98  Playmates Toys, Inc.
+0b99  Audio International, Inc.
+0b9d  Softprotec Co.
+0b9f  Chippo Technologies
+0baf  U.S. Robotics
+	00eb  USR1120 802.11b Adapter
+	6112  FaxModem Model 5633
+0bb0  Concord Camera Corp.
+0bb1  Infinilink Corp.
+0bb2  Ambit Microsystems Corp.
+	6098  USB Cable Modem
+0bb3  Ofuji Technology
+0bb4  High Tech Computer Corp.
+	00ce  mmO2 XDA GSM/GPRS Pocket PC
+	0a02  Himalaya GSM/GPRS Pocket PC
+0bb5  Murata Manufacturing Co., Ltd
+0bb6  Network Alchemy
+0bb7  Joytech Computer Co., Ltd
+0bb8  Hitachi Semiconductor and Devices Sales Co., Ltd
+0bb9  Eiger M&C Co., Ltd
+0bba  ZAccess Systems
+0bbb  General Meters Corp.
+0bbc  Assistive Technology, Inc.
+0bbd  System Connection, Inc.
+0bc0  Knilink Technology, Inc.
+0bc1  Fuw Yng Electronics Co., Ltd
+0bc2  Seagate RSS LLC
+0bc3  IPWireless, Inc.
+0bc4  Microcube Corp.
+0bc5  JCN Co., Ltd
+0bc6  ExWAY, Inc.
+0bc7  X10 Wireless Technology, Inc.
+	0004  X10 Receiver
+0bc8  Telmax Communications
+0bc9  ECI Telecom, Ltd
+0bca  Startek Engineering, Inc.
+0bcb  Perfect Technic Enterprise Co., Ltd
+0bda  Realtek Semiconductor Corp.
 	8150  RTL8150 Fast Ethernet Adapter
-	8151  RTL8151 HomePNA Adapter
+	8151  RTL8151 Adapteon Business Mobile Networks BV
+0bdb  Ericsson Business Mobile Networks BV
+0bdc  Y Media Corp.
+0bdd  Orange PCS
+0be2  Kanda Tsushin Kogyo Co., Ltd
+0be3  TOYO Corp.
+0be4  Elka International, Ltd
+0be5  DOME imaging systems, Inc.
+0be6  Dong Guan Humen Wonderful Wire Cable Factory
+0bee  LTK Industries, Ltd
+0bef  Way2Call Communications
+0bf0  Pace Micro Technology PLC
+0bf1  Intracom S.A.
+0bf2  Konexx
 0bf6  Addonics Technologies, Inc.
 	a002  IDE Bridge
+0bf7  Sunny Giken, Inc.
+0bf8  Fujitsu Siemens Computers
+0c04  MOTO Development Group, Inc.
+0c05  Appian Graphics
+0c06  Hasbro Games, Inc.
+0c07  Infinite Data Storage, Ltd
 0c08  Agate
 	0378  Q 16MB Storage Device
-0c0b  Acomdata
-	b004  MMC/SD Reader and Writer
+0c09  Comjet Information System
+0c0a  Highpoint Technologies, Inc.
+0c0b  Dura Micro, Inc. (Acomdata)
+	27cb  6-in-1 Flash Reader and Writer
 	a109  CF/SM Reader and Writer
 	a10c  SD/MS Reader and Writer
+	b004  MMC/SD Reader and Writer
+0c12  Zeroplus
+	0005  PSX Vibration Feedback Converter
+0c15  Iris Graphics
+0c16  Gyration, Inc.
+0c17  Cyberboard A/S
+0c18  SynerTek Korea, Inc.
+0c19  cyberPIXIE, Inc.
+0c1a  Silicon Motion, Inc.
+0c1b  MIPS Technologies
+0c1c  Hang Zhou Silan Electronics Co., Ltd
+0c22  Tally Printer Corp.
+0c23  Lernout + Hauspie
+0c24  Taiyo Yuden
+0c25  Sampo Corp.
+0c35  Eagletron, Inc.
+0c36  E Ink Corp.
+0c37  e.Digital
+0c38  Der An Electric Wire & Cable Co., Ltd
+0c39  IFR
+0c3a  Furui Precise Component (Kunshan) Co., Ltd
+0c3b  Komatsu, Ltd
+0c3c  Radius Co., Ltd
+0c3d  Innocom, Inc.
+0c3e  Nextcell, Inc.
+0c44  Motorola iDEN
+0c45  Microdia
+	1060  iFlash SM-Direct Card Reader
+	6001  Genius VideoCAM NB
+	6029  Triplex i-mini PC Camera
+	602a  Meade ETX-105EC Camera
+0c46  WaveRider Communications, Inc.
+0c52  Sealevel Systems, Inc.
+0c53  ViewPLUS, Inc.
+0c54  Glory, Ltd
+0c55  Spectrum Digital, Inc.
+	0510 Spectrum Digital XDS510 JTAG Debugger
+0c56  Billion Bright, Ltd
+0c57  Imaginative Design Operation Co., Ltd
+0c58  Vidar Systems Corp.
+0c59  Dong Guan Shinko Wire Co., Ltd
+0c5a  TRS International Mfg., Inc.
 0c5e  Xytronix Research & Design
+0c62  Chant Sincere Co., Ltd
+0c63  Toko, Inc.
+0c64  Signality System Engineering Co., Ltd
+0c65  Eminence Enterprise Co., Ltd
+0c66  Rexon Electronics Corp.
+0c67  Concept Telecom, Ltd
+0c70  MCT Elektronikladen
+	0000  USB08 Development board
+0c74  Optronic Laboratories Inc.
+	0002  OL 700-30 Goniometer
+0c76  JMTek, LLC.
+	0003  USBdisk
+	0005  USBdisk
+	0006  Transcend JetFlash
+0c77  Sipix Group, Ltd
+0c78  Detto Corp.
+0c79  NuConnex Technologies Pte., Ltd
+0c7a  Wing-Span Enterprise Co., Ltd
 0c86  NDA Technologies, Inc.
+0c88  Kyocera Wireless Corp.
+0c89  Honda Tsushin Kogyo Co., Ltd
+0c8a  Pathway Connectivity, Inc.
+0c8b  Wavefly Corp.
+0c8c  Coactive Networks
+0c8d  Tempo
+0c8e  Cesscom Co., Ltd
+0c8f  Applied Microsystems
+0c99  Innochips Co., Ltd
+0c9a  Hanwool Robotics Corp.
+0c9b  Jobin Yvon, Inc.
+0ca2  Zyfer
+0ca3  Sega Corp.
+0ca4  ST&T Instrument Corp.
+0ca5  BAE Systems Canada, Inc.
+0ca6  Castles Technology Co., Ltd
+0ca7  Information Systems Laboratories
+0cad  Motorola CGISS
+0cae  Ascom Business Systems, Ltd
+0caf  Buslink
+	3a00  Hard Drive
+0cb0  Flying Pig Systems
+0cb1  Innovonics, Inc.
+0cb6  Celestix Networks, Pte., Ltd
+0cb7  Singatron Enterprise Co., Ltd
+0cb8  Opticis Co., Ltd
+0cba  Trust Electronic (Shanghai) Co., Ltd
+0cbb  Shanghai Darong Electronics Co., Ltd
+0cbc  Palmax Technology Co., Ltd
+0cbd  Pentel Co., Ltd (Electronics Equipment Div.)
+0cbe  Keryx Technologies, Inc.
+0cbf  Union Genius Computer Co., Ltd
+0cc0  Kuon Yi Industrial Corp.
+0cc1  Given Imaging, Ltd
+0cc2  Timex Corp.
+0cc3  Rimage Corp.
+0cc4  emsys GmbH
+0cc5  Sendo
+0cc6  Intermagic Corp.
+0cc7  Kontron Medical AG
+0cc8  Technotools Corp.
+0cc9  BroadMAX Technologies, Inc.
+0cca  Amphenol
+0ccb  SKNet Co., Ltd
+0ccc  Domex Technology Corp.
+0ccd  TerraTec Electronic GmbH
+0cd4  Bang Olufsen
+	0101  BeolinkPC2
+0cd7  NewChip S.r.l.
+0cd8  JS Digitech, Inc.
+0cd9  Hitachi Shin Din Cable, Ltd
+0cde  Z-Com
+	0002  XI-725/726 Prism2.5 802.11b Adapter
+	0005  XI-735 Prism3 802.11b Adapter
+0cf1  e-Conn Electronic Co., Ltd
+0cf2  ENE Technology, Inc.
+0cf3  Atheros Communications, Inc.
+0cf4  Fomtex Corp.
+0cf5  Cellink Co., Ltd
+0cf6  Compucable Corp.
+0cf7  ishoni Networks
+0cf8  Clarisys, Inc.
+0cf9  Central System Research Co., Ltd
+0cfa  Inviso, Inc.
+0cfc  Minolta-QMS, Inc.
 0d06  telos EDV Systementwicklung GmbH
-0d7d  Apacer
-	0100  HandyDrive 64MB
-0d8e  Repotec
-	7100  Wireless 802.11b Ethernet
-0d96  Traveler
-	3300  SX330z Digital Camera
-0dbf  Pocketec
-0dcd  NetworkFab Corporation
+0d0b  Contemporary Controls
+0d0c  Astron Electronics Co., Ltd
+0d0d  MKNet Corp.
+0d0e  Hybrid Networks, Inc.
+0d0f  Feng Shin Cable Co., Ltd
+0d10  Elastic Networks
+0d11  Maspro Denkoh Corp.
+0d12  Hansol Electronics, Inc.
+0d13  BMF Corp.
+0d14  Array Comm, Inc.
+0d15  OnStream b.v.
+0d16  Hi-Touch Imaging Technologies Co., Ltd
+0d17  NALTEC, Inc.
+0d18  coaXmedia
+0d19  Hank Connection Industrial Co., Ltd
+0d32  Leo Hui Electric Wire & Cable Co., Ltd
+0d33  AirSpeak, Inc.
+0d34  Rearden Steel Technologies
+0d35  Dah Kun Co., Ltd
+0d3c  Sri Cable Technology, Ltd
+0d3d  Tangtop Technology Co., Ltd
+0d3e  Fitcom, inc.
+0d3f  MTS Systems Corp.
+0d40  Ascor, Inc.
+0d41  Ta Yun Terminals Industrial Co., Ltd
+0d42  Full Der Co., Ltd
+0d49  Maxtor
+0d4a  NF Corp.
+0d4b  Grape Systems, Inc.
+0d4c  Tedas AG
+0d4d  Coherent, Inc.
+0d4e  Agere Systems Netherland BV
+0d4f  EADS Airbus France
+0d50  Cleware GmbH
+0d51  Volex (Asia) Pte., Ltd
+0d53  HMI Co., Ltd
+0d54  Holon Corp.
+0d55  ASKA Technologies, Inc.
+0d56  AVLAB Technology, Inc.
+0d57  Solomon Microtech, Ltd
+0d5c  Belkin
+	a002  F5D6050 802.11b Adapter
+0d5e  Myacom, Ltd
+0d5f  CSI, Inc.
+0d60  IVL Technologies, Ltd
+0d61  Meilu Electronics (Shenzhen) Co., Ltd
+0d62  Darfon Electronics Corp.
+	a100  Benq Mouse
+0d63  Fritz Gegauf AG
+0d64  DXG Technology Corp.
+	0107  Horus MT-409 Camera
+0d65  KMJP Co., Ltd
+0d66  TMT
+0d67  Advanet, Inc.
+0d68  Super Link Electronics Co., Ltd
+0d69  NSI
+0d6a  Megapower International Corp.
+0d6b  And-Or Logic
+0d70  Try Computer Co., Ltd
+0d71  Hirakawa Hewtech Corp.
+0d72  Winmate Communication, Inc.
+0d73  Hit's Communications, Inc.
+0d76  MFP Korea, Inc.
+0d77  Power Sentry/Newpoint
+0d78  Japan Distributor Corp.
+0d7a  MARX Datentechnik GmbH
+0d7b  Wellco Technology Co., Ltd
+0d7c  Taiwan Line Tek Electronic Co., Ltd
+0d7d  Phison Electronics Corp.
+	0100  PS1001/1011/1006/1026 Flash Disk
+	0110  Gigabyte FlexDrive
+	0240  I/O Magic Drive
+	110E  NEC uPD720121/130 USB-ATA/ATAPI Bridge
+	1240  Apacer 6-in-1 Card Reader 2.0
+	1300  Flash Disk
+	1320  PS2031 Flash Disk
+	1420  PS2044 Pen Drive
+0d7e  American Computer & Digital Components
+0d7f  Essential Reality LLC
+0d80  H.R. Silvine Electronics, Inc.
+0d81  TechnoVision
+0d83  Think Outside, Inc.
+0d89  Oz Software
+0d8a  King Jim Co., Ltd
+0d8b  Ascom Telecommunications, Ltd
+0d8c  C-Media Electronics, Inc.
+0d8d  Promotion & Display Technology, Ltd
+0d8e  Global Sun Technology, Inc.
+	7100  802.11b Adapter
+	7a01  PRISM25 802.11b Adapter
+0d8f  Pitney Bowes
+0d90  Sure-Fire Electrical Corp.
+0d96  Skanhex Technology, Inc.
+	3300  SX330z Camera
+	4100  SX410z Camera
+	4102  MD 9700 Camera
+	5200  SX-520z Camera
+0d97  Santa Barbara Instrument Group
+	0001  SBIG Astronomy Camera (without firmware)
+	0101  SBIG Astronomy Camera (with firmware)
+0d98  Mars Semiconductor Corp.
+0d99  Trazer Technologies, Inc.
+0d9a  RTX Telecom AS
+0d9b  Tat Shing Electrical Co.
+0d9c  Chee Chen Hi-Technology Co., Ltd
+0d9d  Sanwa Supply, Inc.
+0d9e  Avaya
+0d9f  Powercom Co., Ltd
+0da0  Danger Research
+0da1  Suzhou Peter's Precise Industrial Co., Ltd
+0da2  Land Instruments International, Ltd
+0da3  Nippon Electro-Sensory Devices Corp.
+0da4  Polar Electro OY
+0da7  IOGear, Inc.
+0dab  Cubig Group
+	0100  DVR/CVR-M140 MP3 Player
+0dad  Westover Scientific
+0db0  Micro Star International
+	6982  Medion Flash XL V2.7A Card Reader
+0db1  Wen Te Electronics Co., Ltd
+0db2  Shian Hwi Plug Parts, Plastic Factory
+0db3  Tekram Technology Co., Ltd
+0db4  Chung Fu Chen Yeh Enterprise Corp.
+0dbe  Jiuh Shiuh Precision Industry Co., Ltd
+0dbf  Quik Tech Solutions
+0dc0  Great Notions
+0dc1  Tamagawa Seiki Co., Ltd
+0dc3  Athena Smartcard Solutions, Inc.
+0dc4  Macpower Peripherals, Ltd
+0dc5  SDK Co., Ltd
+0dc6  Precision Squared Technology Corp.
+0dc7  First Cable Line, Inc.
+0dcd  NetworkFab Corp.
 	0001  Remote Interface Adapter
 	0002  High Bandwidth Codec
+0dd1  Contek Electronics Co., Ltd
+0dd2  Power Quotient International Co., Ltd
+0dd3  MediaQ
+0dd4  Custom Engineering SPA
+0dd5  California Micro Devices
+0dd7  Kocom Co., Ltd
+0dd9  HighSpeed Surfing
+0dda  Integrated Circuit Solution, Inc.
+0ddb  Tamarack, Inc.
+0ddd  Datelink Technology Co., Ltd
+0dde  Ubicom, Inc.
+0de0  BD Consumer Healthcare
+0ded  Novasonics
+0dee  Lifetime Memory Products
+0def  Full Rise Electronic Co., Ltd
+0df6  Sitecom Europe B.V.
+0df7  Mobile Action Technology, Inc.
+	0620  MA-620 USB Infrared Adapter
+0dfa  Toyo Communication Equipment Co., Ltd
+0dfc  GeneralTouch Technology Co., Ltd
+	0001  Touchscreen
+0e03  Nippon Systemware Co., Ltd
+0e08  Winbest Technology Co., Ltd
 0e0c  Gesytec
 	0101  LonUSB LonTalk Network Adapter
+0e16  JMTek, LLC
+0e17  Walex Electronic, Ltd
 0e1b  Crewave
+0e21  Cowon Systems, Inc.
+	0300  iAudio CW200 
+0e23  Liou Yuane Enterprise Co., Ltd
+0e25  VinChip Systems, Inc.
+0e26  J-Phone East Co., Ltd
+0e30  HeartMath LLC
+0e34  Micro Computer Control Corp.
+0e35  3Pea Technologies, Inc.
+0e36  TiePie engineering
+0e38  Stratitec, Inc.
+0e39  Smart Modular Technologies, Inc.
+0e3a  Neostar Technology Co., Ltd
 	1100  CW-1100 Wireless Network Adapter
-0e48  Julia Corp., Ltd.
+0e3b  Mansella, Ltd
+0e48  Julia Corp., Ltd
 	0100  CardPro SmartCard Reader
+0e4a  Shenzhen Bao Hing Electric Wire & Cable Mfr. Co.
+0e4c  Radica Games, Ltd
+0e55  Speed Dragon Multimedia, Ltd
+0e5a  Active Co., Ltd
+0e5b  Union Power Information Industrial Co., Ltd
+0e5c  Bitland Information Technology Co., Ltd
+0e5d  Neltron Industrial Co., Ltd
 0e66  Hawking
 	400c  UF100 Ethernet [pegasus2]
-0e75  TVS Electronics, Ltd.
-0ef7  Tulip Computers International
+0e6a  Megawin Technology Co., Ltd
+0e70  Tokyo Electronic Industry Co., Ltd
+0e72  Hsi-Chin Electronics Co., Ltd
+0e75  TVS Electronics, Ltd
+0e7b  On-Tech Industry Co., Ltd
+0e7e  Gmate Inc.
+	0001  Yopy 3000 PDA
+0e82  Ching Tai Electric Wire & Cable Co., Ltd
+0e8c  Well Force Electronic Co., Ltd
+0e90  WiebeTech, LLC
+0e91  VTech Engineering Canada, Ltd
+0e92  C's Glory Enterprise Co., Ltd
+0e93  eM Technics Co., Ltd
+0e95  Future Technology Co., Ltd
+0e96  Aplux Communications, Ltd
+0e97  Fingerworks, Inc.
+0e98  Advanced Analogic Technologies, Inc.
+0e99  Parallel Dice Co., Ltd
+0e9a  TA HSING Industries, Ltd
+0e9b  ADTEC Corp.
+0e9f  Tamura Corp.
+0ea0  Ours Technology, Inc.
+	2168  Transcend JetFlash 2.0
+	6803  OTI-6803 Flash Disk
+	6808  OTI-6808 Flash Disk
+	6828  OTI-6828 Flash Disk
+0ea6  Nihon Computer Co., Ltd
+0ea7  MSL Enterprises Corp.
+0ea8  CenDyne, Inc.
+0ead  Humax Co., Ltd
+0eb1  WIS Technologies, Inc.
+0eb2  Y-S Electronic Co., Ltd
+0eb3  Saint Technology Corp.
+0eb7  Endor AG
+0ebe  VWeb Corp.
+0ebf  Omega Technology of Taiwan, Inc.
+0ec0  LHI Technology (China) Co., Ltd
+0ec1  Abit Computer Corp.
+0ec2  Sweetray Industrial, Ltd
+0ec3  Axell Co., Ltd
+0ec4  Ballracing Developments, Ltd
+0ec5  GT Information System Co., Ltd
+0ec6  InnoVISION Multimedia, Ltd
+0ec7  Theta Link Corp.
+	1008  So., Show 301 Digital Camera
+0ecd  Lite-On IT Corp.
+0ece  TaiSol Electronics Co., Ltd
+0ecf  Phogenix Imaging, LLC
+0ed1  WinMaxGroup
+	6660  USB Flash Disk 64M-C
+0ed2  Kyoto Micro Computer Co., Ltd
+0ed3  Wing-Tech Enterprise Co., Ltd
+0eda  Noriake Itron Corp.
+0edf  e-MDT Co., Ltd
+0ee0  Shima Seiki Mfg., Ltd
+0ee1  Sarotech Co., Ltd
+0ee2  AMI Semiconductor, Inc.
+0ee3  ComTrue Technology Corp. 
+	1000  Image Tank 1.5
+0ee4  Sunrich Technology, Ltd
+0eee  Digital Stream Technology, Inc.
+0eef  D-WAV Scientific Co., Ltd
+	0001  eGalax TouchScreen
+0ef0  Hitachi Cable, Ltd
+0ef1  Aichi Micro Intelligent Corp.
+0ef2  I/O Magic Corp.
+0ef3  Lynn Products, Inc.
+0ef4  DSI Datotech
+0ef5  PointChips
+	2202  Flash Disk
+0ef6  Yield Microelectronics Corp.
+0ef7  SM Tech Co., Ltd (Tulip)
+0efe  Wem Technology, Inc.
+0efd  Oasis Semiconductor
+0f06  Visual Frontier Enterprise Co., Ltd
+0f08  CSL Wire & Plug (Shen Zhen) Co.
+0f0c  CAS Corp.
+0f0d  Hori Co., Ltd
+0f0e  Energy Full Corp.
+0f12  Mars Engineering Corp.
+0f13  Acetek Technology Co., Ltd
+0f19  Oracom Co., Ltd
+0f1b  Onset Computer Corp.
+0f1c  Funai Electric Co., Ltd
+0f1d  Iwill Corp.
+0f21  IOI Technology Corp.
+0f22  Senior Industries, Inc.
+0f23  Leader Tech Manufacturer Co., Ltd
+0f24  Flex-P Industries, Snd., Bhd. 
+0f2d  ViPower, Inc.
+0f2e  Geniality Maple Technology Co., Ltd
+0f2f  Priva Design Services
+0f30  Jess Technology Co., Ltd
+0f31  Chrysalis Development
+0f32  YFC-BonEagle Electric Co., Ltd
+0f37  Kokuyo Co., Ltd
+0f38  Nien-Yi Industrial Corp.
+0f41  RDC Semiconductor Co., Ltd
+0f42  Nital Consulting Services, Inc.
+0f4b  St. John Technology Co., Ltd
+0f4c  WorldWide Cable Opto Corp.
+0f4d  Microtune, Inc.
+0f4e  Freedom Scientific
+0f52  Wing Key Electrical Co., Ltd
+0f53  Dongguan White Horse Cable Factory, Ltd
+0f54  Kawai Musical Instruments Mfg. Co., Ltd
+0f55  AmbiCom, Inc.
+0f5c  Prairiecomm, Inc.
+0f5d  NewAge International, LLC
+0f5f  Key Technology Corp.
+0f60  NTK, Ltd
+0f61  Varian, Inc.
+0f62  Acrox Technologies Co., Ltd
+0f68  Kobe Steel, Ltd
+0f69  Dionex Corp.
+0f6a  Vibren Technologies, Inc.
+0f73  DFI
+0f7c  DQ Technology, Inc.
+0f7d  NetBotz, Inc.
+0f7e  Fluke Corp.
+0f88  VTech Holdings, Ltd
+0f8b  Yazaki Corp.
+0f8c  Young Generation International Corp.
+0f8d  Uniwill Computer Corp.
+0f8e  Kingnet Technology Co., Ltd
+0f8f  Soma Networks
+0f97  CviLux Corp.
+0f98  CyberBank Corp.
+0f9e  Lucent Technologies
+0fa3  Starconn Electronic Co., Ltd
+0fa4  ATL Technology
+0fa5  Sotec Co., Ltd
+0fa7  Epox Computer Co., Ltd
+0fa8  Logic Controls, Inc.
+0faf  Winpoint Electronic Corp.
+0fb0  Haurtian Wire & Cable Co., Ltd
+0fb1  Inclose Design, Inc.
+0fb2  Juan-Chern Industrial Co., Ltd
+0fb8  Wistron Corp.
+0fb9  AACom Corp.
+0fba  San Shing Electronics Co., Ltd
+0fbb  Bitwise Systems, Inc.
+0fc1  Mitac Internatinal Corp.
+0fc2  Plug and Jack Industrial, Inc.
+0fc5  Delcom Engineering
+	1222  I/O Development Board
+0fc6  Dataplus Supplies, Inc.
+0fca  Research In Motion, Ltd.
+	0001  Blackberry Handheld
+0fce  Sony Ericsson Mobile Communications AB
+0fcf  Dynastream Innovations, Inc.
+0fd0  Tulip Computers B.V.
+0fd4  Tenovis GmbH & Co., KG
+0fd5  Direct Access Technology, Inc.
+0fdc  Micro Plus
+0fe4  IN-Tech Electronics, Ltd
+0fe5  Greenconn (U.S.A.), Inc.
+0fea  United Computer Accessories
+0feb  CRS Electronic Co., Ltd
+0fec  UMC Electronics Co., Ltd
+0fed  Access Co., Ltd
+0fee  Xsido Corp.
+0fef  MJ Research, Inc.
+0ff6  Core Valley Co., Ltd
+0ff7  CHI SHING Computer Accessories Co., Ltd
+0fff  Aopen, Inc.
+1000  Speed Tech Corp.
+1001  Ritronics Components (S) Pte., Ltd
+1003  Sigma Corp.
+1004  LG Electronics, Inc.
+	6000  VX4400/VX6000 Cellphone
+	6800  CDMA Modem
+1005  Apacer Technology, Inc.
+	b113  Handy Steno 2.0 (256MB)
+1006  iRiver, Ltd.
+	3002  iHP-140 mp3 player
+1009  Emuzed, Inc.
+100a  AV Chaseway, Ltd
+100b  Chou Chin Industrial Co., Ltd
+100d  Netopia, Inc.
+1010  Fukuda Denshi Co., Ltd
+1011  Mobile Media Tech.
+1012  SDKM Fibres, Wires & Cables Berhad
+1013  TST-Touchless Sensor Technology AG
+1014  Densitron Technologies PLC
+1015  Softronics Pty., Ltd
+1016  Xiamen Hung's Enterprise Co., Ltd
+1017  Speedy Industrial Supplies, Pte., Ltd
+1022  Shinko Shoji Co., Ltd
+1025  Hyper-Paltek
+1026  Newly Corp.
+1027  Time Domain
+1028  Inovys Corp.
+1029  Atlantic Coast Telesys
+102a  Ramos Technology Co., Ltd
+102b  Infotronic America, Inc.
+102c  Etoms Electronics Corp.
+102d  Winic Corp.
+1031  Comax Technology, Inc.
+1032  C-One Technology Corp.
+1033  Nucam Corp.
+1043  iCreate Technologies Corp.
+1044  Chu Yuen Enterprise Co., Ltd
 1046  Winbond Electronics Corp. [hex]
 	9967  W9967CF/W9968CF WebCam IC
-1063  Motorola Electronics Taiwan Ltd. [hex]
+104c  AMCO TEC International, Inc.
+1053  Immanuel Electronics Co., Ltd
+1054  BMS International Beheer N.V.
+1055  Complex Micro Interconnection Co., Ltd
+1056  Hsin Chen Ent Co., Ltd
+1057  ON Semiconductor
+1058  Western Digital Technologies, Inc.
+1059  Giesecke & Devrient GmbH
+105c  Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd
+105d  Delkin Devices, Inc.
+105e  Valence Semiconductor Design, Ltd
+105f  Chin Shong Enterprise Co., Ltd
+1060  Easthome Industrial Co., Ltd
+1063  Motorola Electronics Taiwan, Ltd [hex]
 	1555  MC141555 Hub
 1065  CCYU Technology
 	2136  EasyDisk ED1064
+106a  Loyal Legend, Ltd
+106c  Curitel Communications, Inc.
+	2101  AudioVox 8900 Cell Phone
+106d  San Chieh Manufacturing, Ltd
+106e  ConectL
+106f  Money Controls
+1076  GCT Semiconductor, Inc.
+107d  Arlec Australia, Ltd
+107e  Midoriya Electric Co., Ltd
+107f  KidzMouse, Inc.
+1082  Shin-Etsukaken Co., Ltd
+1083  Canon Electronics, Inc.
+1084  Pantech Co., Ltd
+108a  Chloride Power Protection
+108b  Grand-tek Technology Co., Ltd
+108c  Robert Bosch GmbH
+1099  Surface Optics Corp.
+109a  DATASOFT Systems GmbH
+109f  eSOL Co., Ltd
+10a0  Hirotech, Inc.
+10a3  Mitsubishi Materials Corp.
+10a9  SK Teletech Co., Ltd
+10aa  Cables To Go
+10ab  USI Co., Ltd
 10ac  Honeywell, Inc.
-10b5  PLX
+10ae  Princeton Technology Corp.
+10b5  Comodo (PLX?)
 	9060  Test Board
+10bb  TM Technology, Inc.
+10bc  Dinging Technology Co., Ltd
+10bd  TMT Technology, Inc.
+10c4  Cygnal Integrated Products, Inc.
+10c5  Sanei Electric, Inc.
+10c6  Intec, Inc.
+10cb  Eratech
+10cc  GBM Connector Co., Ltd
+10cd  Kycon, Inc.
+10d1  Hottinger Baldwin Measurement
+	0101 USB-Module for Spider8, CP32
+	0202 CP22 - Communication Processor
+	0301 CP42 - Communication Processor
+10d4  Man Boon Manufactory, Ltd
+10d5  Uni Class Technology Co., Ltd
+10d6  Actions Semiconductor Co., Ltd
+	1000  MP3 Player
+10de  Authenex, Inc.
+10df  In-Win Development, Inc.
+10e0  Post-Op Video, Inc.
+10e1  CablePlus, Ltd
+10e2  Nada Electronics, Ltd
+10ec  Vast Technologies, Inc.
+10fb  Pictos Technologies, Inc.
+10fd  Anubis Electronics, Ltd
+	804d  Typhoon Webshot II Webcam [zc0301]
+1a0a  ...
+	badd  USB OTG Compliance test device
+1100  VirTouch, Ltd
+	0001  VTPlayer VTP-1 Braille Mouse
+1101  EasyPass Industrial Co., Ltd
+	0001  FSK Electronics Super GSM Reader
+1108  Brightcom Technologies, Ltd
+1110  Analog Devices Canada, Ltd (Allied Telesyn)
+	900f  AT-AR215 DSL Modem
+1112  YM ELECTRIC CO., Ltd
+1113  Medion AG
+111e  VSO Electric Co., Ltd
+112e  Master Hill Electric Wire and Cable Co., Ltd
+112f  Cellon International, Inc.
+1130  Tenx Technology, Inc.
+1131  Integrated System Solution Corp.
 1132  Toshiba Corp., Digital Media Equipment [hex]
 	4331  PDR-M4/M5/M70 Digital Camera
-	4432  PDR-M60 Digital Camera
-1183  Compaq Computer Corp. [hex]
-	4008  56k FaxModem
+	4332  PDR-M60 Digital Camera
+113c  Arin Tech Co., Ltd
+113d  Mapower Electronics Co., Ltd
+1141  V One Multimedia, Pte., Ltd
+1142  CyberScan Technologies, Inc.
+1147  Ever Great Electric Wire and Cable Co., Ltd
+114c  Tinius Olsen Testing Machine Co., Inc.
+114d  Alpha Imaging Technology Corp.
+1162  Secugen Corp.
+1163  DeLorme Publishing, Inc.
+1164  YUAN High-Tech Development Co., Ltd
+1165  Telson Electronics Co., Ltd
+1166  Bantam Interactive Technologies
+1167  Salient Systems Corp.
+1168  BizConn International Corp.
+116e  Gigastorage Corp.
+116f  Silicon 10 Technology Corp.
+1175  Shengyih Steel Mold Co., Ltd
+117d  Santa Electronic, Inc.
+117e  JNC, Inc.
+1182  Venture Corp., Ltd
+1183  Compaq Computer Corp. [hex] (Digital Dream ??)
 	19c7  ISDN TA
+	4008  56k FaxModem
 	504a  PJB-100 Personal Jukebox
+1184  Kyocera Elco Corp.
+118f  You Yang Technology Co., Ltd
 1190  Tripace
-120e  Hudson Soft Co., Ltd.
+1191  Loyalty Founder Enterprise Co., Ltd
+1197  Technoimagia Co., Ltd
+1198  StarShine Technology Corp.
+1199  Sierra Wireless, Inc.
+119a  ZHAN QI Technology Co., Ltd
+11a3  Technovas Co., Ltd
+11aa  GlobalMedia Group, LLC
+11ab  Exito Electronics Co., Ltd
+11db  Topfield Co., Ltd.
+	1000  PVR
+	1100  PVR
+1209  InterBiometrics
+	1001  USB Hub
+	1002  USB Relais
+	1003  IBSecureCam-P
+	1004  IBSecureCam-O
+	1005  IBSecureCam-N
+120e  Hudson Soft Co., Ltd
+121e  Jungsoft Co., Ltd
+1241  Belkin (?)
+	1111  Mouse
+1267  Logic3 / SpectraVideo plc
+	a001 JP260 PC Game Pad
+126e  Strobe Data, Inc.
+126f  TwinMOS
+	1325  Mobile Disk
+	2168  Mobile Disk III
+1275  Xaxero Marine Software Engineering, Ltd.
+	0002  WeatherFax 2000 Demodulator
+	0080  SkyEye Weather Satellite Receiver
 1292  Innomedia
 	0258  Creative Labs VoIP Blaster
 1293  Belkin Components [hex]
 	0002  F5U002 Parallel Port [uss720]
 	2101  104-key keyboard
+12fd  AIN Comm. Technology Co., Ltd
+	1001  AWU2000b 802.11b Stick
+1312  ICS Electronics
 1342  Mobility
 	0200  EasiDock 200 Hub
 	0201  EasiDock 200 Keyboard and Mouse Port
@@ -1872,18 +3377,31 @@
 	0203  EasiDock 200 Printer Port
 13d2  Shark Multimedia
 	0400  Pocket Ethernet [klsi]
+147a  Formosa Industrial Computing, Inc.
 1484  Elsa AG [hex]
 	1746  Ecomo 19H99 Monitor
 	7616  Elsa Hub
+14c2  Gemlight Computer, Ltd
+1520  Bitwire Corp.
+1554  Prolink Microsystems Corp.
+1568  Sunf Pu Technology Co., Ltd
+15c6  Laboratoires MXM
 15e8  SohoWare
 	9100  NUB100 Ethernet [pegasus]
+15e9  Pacific Digital Corp.
 1604  Tascam
 	8000  US-428 Audio/Midi Controller (without fw)
 	8001  US-428 Audio/Midi Controller
+	8004  US-224 Audio/Midi Controller (without fw)
+	8005  US-224 Audio/Midi Controller
+	8006  US-122 Audio/Midi Interface (without fw)
+	8007  US-122 Audio/Midi Interface
 1606  Umax [hex]
 	0010  Astra 1220U
 	0030  Astra 2000U
 	0060  Astra 3400U
+	0130  Astra 2100U
+	0160  Astra 5400U
 	0230  Astra 2200/2200SU
 	2020  AstraCam 1000
 1608  Inside Out Networks [hex]
@@ -1903,55 +3421,113 @@
 	8093  PortGear Serial Port
 1668  Actiontec Electronics, Inc. [hex]
 	0333  Modem
-	0421  802.11b Wireless Adapter
+	0408  Prism2.5 802.11b Adapter
+	0421  Prism2.5 802.11b Adapter
 1690  Askey Computer Corp. [hex]
 	0101  Creative Modem Blaster DE5670
 	0103  Askey 1456 VQE-R3 Modem [conexant]
 	0109  Askey MagicXpress V.90 Pocket Modem [conexant]
-2001  D-Link Corp [hex]
+1696  Hitachi Video and Information System, Inc.
+1697  VTec Test, Inc.
+1733  Cellink Technology Co., Ltd
+	0101  RF Wireless Optical Mouse OP-701
+1894  Topseed
+	5632  Atek Tote Remote
+	5641  TSAM-004 Presentation Remote
+1ebb  NuCORE Technology, Inc.
+2001  D-Link Corp. [hex]
+	3200  DWL-120 802.11b (Atmel RFMD503A) [usbvnetr]
+	3700  DWL-122 802.11b
 	4000  DSB-650C Ethernet [klsi]
 	4001  DSB-650TX Ethernet [pegasus]
 	4002  DSB-650TX Ethernet [pegasus]
 	4003  DSB-650TX-PNA Ethernet [pegasus]
 	abc1  DSB-650 Ethernet [pegasus]
+2162  Creative (?)
+	500c  DE5771 Modem Blaster
 2222  MacAlly
 	0004  iWebKey Keyboard
 22b8  Motorola PCS
-	1005  Ti280e GSM/GPRS Phone
+	0005  V.60c/V.60i GSM Phone
+	1005  T280e GSM/GPRS Phone
+	2821  T720 GSM Phone
+	2822  V.120e GSM Phone
+	3002  A835 GSM Phone
+	3802  C330 GSM Phone
+22b9  eTurboTouch Technology, Inc.
+22ba  Technology Innovation Holdings, Ltd
 2304  Pinnacle Systems, Inc. [hex]
-	0111  Studio PCTV (PAL) Frame Grabber
-	0112  Studio PCTV (NTSC) Frame Grabber
-	0210  Studio PCTV (PAL) Frame Grabber
-	0212  Studio PCTV (NTSC) Frame Grabber
-2318  Shining Technologies Inc. [hex]
+	0109  Pinnacle Studio PCTV USB (SECAM)
+	0110  Pinnacle Studio PCTV USB (PAL)
+	0111  Miro PCTV USB
+	0112  Pinnacle Studio PCTV USB (NTSC) with FM radio
+	0210  Pinnacle Studio PCTV USB (PAL) with FM radio
+	0212  Pinnacle Studio PCTV USB (NTSC)
+	0214  Pinnacle Studio PCTV USB (PAL) with FM radio
+	0300  Pinnacle Studio Linx Video input cable (NTSC)
+	0419  Pinnacle PCTV Bungee USB (PAL) with FM radio
+2318  Shining Technologies, Inc. [hex]
 	0011  CitiDISK Jr. IDE Enclosure
 2375  Digit@lway, Inc.
 	0001  Digital Audio Player
+2632  TwinMOS
+	3209  7-in-1 Card Reader
+2650  Electronics For Imaging, Inc. [hex]
+2770  NHJ, Ltd
+	9120  Che-ez! Snap / iClick Tiny VGA Digital Camera
+2899  Toptronic Industrial Co., Ltd
 3125  Eagletron
 	0001  TrackerPod Camera Stand
+3176  Whanam Electronics Co., Ltd
 3504  Micro Star
 	f110  Security Key
+3538  Power Quotient International Co., Ltd
+	0001  Travel Flash
+3579  DIVA
+	6901  Media Reader
+3636  InVibro
+3838  WEM
+	0001  5-in-1 Card Reader
+3923  National Instruments Corp.
+4102  iRiver, Ltd.
+	1001  iFP-100 series mp3 player
+	1003  iFP-300 series mp3 player
+	1005  iFP-500 series mp3 player
+	1007  iFP-700 series mp3/ogg vorbis player
+	1008  iFP-800 series mp3/ogg vorbis player
+	100A  iFP-1000 series mp3/ogg vorbis player
+	1101  iFP-100 series mp3 player (ums firmware)
+	1103  iFP-300 series mp3 player (ums firmware)
+	1105  iFP-500 series mp3 player (ums firmware)
+413c  Dell Computer Corp.
+	8100  TrueMobile 1180 802.11b Adapter
 4242  USB Design by Example
 	4201  Buttons and Lights HID device
 	4220  Echo 1 Camera
 544d  Transmeta Corp.
-55aa  OnSpec Electronic Inc.
+5543  UC-Logic Technology Corp.
+	0002  SuperPen WP3325U Tablet
+55aa  OnSpec Electronic, Inc.
 	1234  ATAPI Bridge
 	a103  Sandisk SDDR-55 SmartMedia Card Reader
-5543  UC-Logic Technology, Corp.
-	0002  SuperPen WP3325U Tablet
 636c  CoreLogic, Inc.
 6666  Prototype product Vendor ID
 	0667  Smart Joy PSX, PS-PC Smart JoyPad
-6a75  Shanghai Jujo Electronics Co., Ltd.
+6a75  Shanghai Jujo Electronics Co., Ltd
 8086  Intel Corp.
 	0110  Easy PC Camera
 	0431  Intel Pro Video PC Camera
 	0510  Digital Movie Creator
 	0630  Pocket PC Camera
+	07d3  BLOB boot loader firmware
+	1111  PRO/Wireless 2011B 802.11b Adapter
 	9890  82930 Test Board
 	c013  Wireless HID Station
-c251  Keil Software
+8341  EGO Systems, Inc.
+	2000  Flashdisk
+c251  Keil Software, Inc.
+eb1a  eMPIA Technology, Inc.
+	2801  GrabBeeX+ Video Encoder
 
 # List of known device classes, subclasses and protocols
 
@@ -1960,22 +3536,32 @@
 #	subclass  subclass_name			<-- single tab
 #		protocol  protocol_name		<-- two tabs
 
-C 00  Interface
+C 00  (Defined at Interface level)
 C 01  Audio
 	01  Control Device
 	02  Streaming
-	03  Non Streaming
+	03  MIDI Streaming
 C 02  Communications
 	01  Direct Line
 	02  Abstract (modem)
 		00  None
-		01  AT-commands
-		ff  Vendor Specific
+		01  AT-commands (v.25ter)
+		02  AT-commands (PCCA101)
+		03  AT-commands (PCCA101 + wakeup)
+		04  AT-commands (GSM)
+		05  AT-commands (3G)
+		06  AT-commands (CDMA)
+		fe  Defined by command set descriptor
+		ff  Vendor Specific (MSFT RNDIS?)
 	03  Telephone
 	04  Multi-Channel
 	05  CAPI Control
 	06  Ethernet Networking
 	07  ATM Networking
+	08  Wireless Handset Control
+	09  Device Management
+	0a  Mobile Direct Line
+	0b  OBEX
 C 03  Human Interface Devices
 	00  No Subclass
 		00  None
@@ -2012,20 +3598,44 @@
 		01  Control/Bulk
 		50  Bulk (Zip)
 C 09  Hub
-C 10  Data
-	30  I.430 ISDN BRI
-	31  HDLC
-	32  Transparent
-	50  Q.921M
-	51  Q.921
-	52  Q.921TM
-	90  V.42bis
-	91  Q.932 EuroISDN
-	92  V.120 V.24 rate ISDN
-	93  CAPI 2.0
-	fd  Host Based Driver
-	fe  CDC PUF
-	ff  Vendor specific
+	00  Unused
+		01  Single TT
+		02  TT per port
+C 0a  Data
+	00  Unused
+		30  I.430 ISDN BRI
+		31  HDLC
+		32  Transparent
+		50  Q.921M
+		51  Q.921
+		52  Q.921TM
+		90  V.42bis
+		91  Q.932 EuroISDN
+		92  V.120 V.24 rate ISDN
+		93  CAPI 2.0
+		fd  Host Based Driver
+		fe  CDC PUF
+		ff  Vendor specific
+C 0b  Chip/SmartCard
+C 0d  Content Security
+C 0e  Video
+	00  Undefined
+	01  Video Control
+	02  Video Streaming
+	03  Video Interface Collection
+C dc  Diagnostic
+	01  Reprogrammable Diagnostics
+		01  USB2 Compliance
+C e0  Wireless
+	01  Radio Frequency
+		01  Bluetooth
+C ef  Miscellaneous Device
+	02  Common Class
+		01  Interface Association
+C fe  Application Specific Interface
+	01  Device Firmware Update
+	02  IRDA Bridge
+	03  Test and Measurement
 C ff  Vendor Specific Class
 	ff  Vendor Specific Subclass
 		ff  Vendor Specific Protocol
@@ -2644,10 +4254,12 @@
 	001  Button 1 (Primary)
 	002  Button 2 (Secondary)
 	003  Button 3 (Tertiary)
+	004  Button 4
+	005  Button 5
 HUT 0a  Ordinal
 	001  Instance 1
 	002  Instance 2
-	002  Instance 3
+	003  Instance 3
 HUT 0b  Telephony
 	000  Unassigned
 	001  Phone
@@ -3177,14 +4789,191 @@
 	0b0  Settings
 	0ca  On Screen Display (OSD)
 	0d4  Stereo Mode
-HUT 84  Power Pages
-HUT 85  Power Pages
+HUT 84  Power Device Page
+	000  Undefined
+	001  iName
+	002  Present Status
+	003  Changed Status
+	004  UPS
+	005  Power Supply
+	010  Battery System
+	011  Battery System ID
+	012  Battery
+	013  Battery ID
+	014  Charger
+	015  Charger ID
+	016  Power Converter
+	017  Power Converter ID
+	018  Outlet System
+	019  Outlet System ID
+	01a  Input
+	01b  Input ID
+	01c  Output
+	01d  Output ID
+	01e  Flow
+	01f  Flow ID
+	020  Outlet
+	021  Outlet ID
+	022  Gang
+	023  Gang ID
+	024  Power Summary
+	025  Power Summary ID
+	030  Voltage
+	031  Current
+	032  Frequency
+	033  Apparent Power
+	034  Active Power
+	035  Percent Load
+	036  Temperature
+	037  Humidity
+	038  Bad Count
+	040  Config Voltage
+	041  Config Current
+	042  Config Frequency
+	043  Config Apparent Power
+	044  Config Active Power
+	045  Config Percent Load
+	046  Config Temperature
+	047  Config Humidity
+	050  Switch On Control
+	051  Switch Off Control
+	052  Toggle Control
+	053  Low Voltage Transfer
+	054  High Voltage Transfer
+	055  Delay Before Reboot
+	056  Delay Before Startup
+	057  Delay Before Shutdown
+	058  Test
+	059  Module Reset
+	05a  Audible Alarm Control
+	060  Present
+	061  Good
+	062  Internal Failure
+	063  Voltage out of range
+	064  Frequency out of range
+	065  Overload
+	066  Over Charged
+	067  Over Temperature
+	068  Shutdown Requested
+	069  Shutdown  Imminent
+	06a  Reserved
+	06b  Switch On/Off
+	06c  Switchable
+	06d  Used
+	06e  Boost
+	06f  Buck
+	070  Initialized
+	071  Tested
+	072  Awaiting Power
+	073  Communication Lost
+	0fd  iManufacturer
+	0fe  iProduct
+	0ff  iSerialNumber
+HUT 85  Battery System Page
+	000  Undefined
+	001  SMB Battery Mode
+	002  SMB Battery Status
+	003  SMB Alarm Warning
+	004  SMB Charger Mode
+	005  SMB Charger Status
+	006  SMB Charger Spec Info
+	007  SMB Selector State
+	008  SMB Selector Presets
+	009  SMB Selector Info
+	010  Optional Mfg. Function 1
+	011  Optional Mfg. Function 2
+	012  Optional Mfg. Function 3
+	013  Optional Mfg. Function 4
+	014  Optional Mfg. Function 5
+	015  Connection to SMBus
+	016  Output Connection
+	017  Charger Connection
+	018  Battery Insertion
+	019  Use Next
+	01a  OK to use
+	01b  Battery  Supported
+	01c  SelectorRevision
+	01d  Charging Indicator
+	028  Manufacturer Access
+	029  Remaining Capacity Limit
+	02a  Remaining Time Limit
+	02b  At Rate
+	02c  Capacity Mode
+	02d  Broadcast To Charger
+	02e  Primary Battery
+	02f  Charge Controller
+	040  Terminate Charge
+	041  Terminate Discharge
+	042  Below Remaining Capacity Limit
+	043  Remaining Time Limit Expired
+	044  Charging
+	045  Discharging
+	046  Fully Charged
+	047  Fully Discharged
+	048  Conditioning Flag
+	049  At Rate OK
+	04a  SMB Error Code
+	04b  Need Replacement
+	060  At Rate Time To Full
+	061  At Rate Time To Empty
+	062  Average Current
+	063  Max Error
+	064  Relative State Of Charge
+	065  Absolute State Of Charge
+	066  Remaining Capacity
+	067  Full Charge Capacity
+	068  Run Time To Empty
+	069  Average Time To Empty
+	06a  Average Time To Full
+	06b  Cycle Count
+	080  Batt. Pack Model Level
+	081  Internal Charge Controller
+	082  Primary Battery Support
+	083  Design Capacity
+	084  Specification Info
+	085  Manufacturer Date
+	086  Serial Number
+	087  iManufacturerName
+	088  iDeviceName
+	089  iDeviceChemistry
+	08a  Manufacturer Data
+	08b  Rechargeable
+	08c  Warning Capacity Limit
+	08d  Capacity Granularity 1
+	08e  Capacity Granularity 2
+	08f  iOEMInformation
+	0c0  Inhibit Charge
+	0c1  Enable Polling
+	0c2  Reset To Zero
+	0d0  AC Present
+	0d1  Battery Present
+	0d2  Power Fail
+	0d3  Alarm Inhibited
+	0d4  Thermistor Under Range
+	0d5  Thermistor Hot
+	0d6  Thermistor Cold
+	0d7  Thermistor Over Range
+	0d8  Voltage Out Of Range
+	0d9  Current Out Of Range
+	0da  Current Not Regulated
+	0db  Voltage Not Regulated
+	0dc  Master Mode
+	0f0  Charger Selector Support
+	0f1  Charger Spec
+	0f2  Level 2
+	0f3  Level 3
 HUT 86  Power Pages
 HUT 87  Power Pages
 HUT 8c  Bar Code Scanner Page (POS)
 HUT 8d  Scale Page (POS)
 HUT 90  Camera Control Page
 HUT 91  Arcade Control Page
+HUT f0  Cash Device
+	0f1  Cash Drawer
+	0f2  Cash Drawer Number
+	0f3  Cash Drawer Set
+	0f4  Cash Drawer Status
+HUT ff  Vendor Specific
 
 # List of Languages
 
@@ -3285,8 +5074,8 @@
 	01  Bokmal
 	02  Nynorsk
 L 0015  Polish
-L 0016	Portugese
-	01  Portugese
+L 0016	Portuguese
+	01  Portuguese
 	02  Brazilian
 L 0017  forgotten
 L 0018  Romanian
@@ -3354,3 +5143,46 @@
 	02  India
 L 0061  Nepali
 	02  India
+
+# HID Descriptor bCountryCode
+# HID Specification 1.11 (2001-06-27) page 23   
+#
+# Syntax:
+# HCC country_code keymap_type
+
+HCC 00  Not supported
+HCC 01  Arabic
+HCC 02  Belgian
+HCC 03  Canadian-Bilingual
+HCC 04  Canadian-French
+HCC 05  Czech Republic
+HCC 06  Danish
+HCC 07  Finnish
+HCC 08  French
+HCC 09  German
+HCC 10  Greek
+HCC 11  Hebrew
+HCC 12  Hungary
+HCC 13  International (ISO)
+HCC 14  Italian
+HCC 15  Japan (Katakana)
+HCC 16  Korean
+HCC 17  Latin American
+HCC 18  Netherlands/Dutch
+HCC 19  Norwegian
+HCC 20  Persian (Farsi)
+HCC 21  Poland
+HCC 22  Portuguese
+HCC 23  Russia
+HCC 24  Slovakia
+HCC 25  Spanish
+HCC 26  Swedish
+HCC 27  Swiss/French
+HCC 28  Swiss/German
+HCC 29  Switzerland
+HCC 30  Taiwan
+HCC 31  Turkish-Q
+HCC 32  UK
+HCC 33  US
+HCC 34  Yugoslavia
+HCC 35  Turkish-F
--- usbutils-0.11/usbdevice_fs.h~usbutils-0.11+cvs20041108
+++ usbutils-0.11/usbdevice_fs.h
@@ -23,7 +23,7 @@
  *  History:
  *   0.1  04.01.2000  Created
  *
- *  $Id$
+ *  $Id$
  */
 
 /*****************************************************************************/
@@ -31,6 +31,8 @@
 #ifndef _LINUX_USBDEVICE_FS_H
 #define _LINUX_USBDEVICE_FS_H
 
+#include <linux/types.h>
+
 /* --------------------------------------------------------------------- */
 
 #define USBDEVICE_SUPER_MAGIC 0x9fa2
@@ -64,8 +66,21 @@
 	void *context;
 };
 
+#define USBDEVFS_MAXDRIVERNAME 255
+
+struct usbdevfs_getdriver {
+	unsigned int interface;
+	char driver[USBDEVFS_MAXDRIVERNAME + 1];
+};
+
+struct usbdevfs_connectinfo {
+	unsigned int devnum;
+	unsigned char slow;
+};
+
 #define USBDEVFS_URB_DISABLE_SPD           1
 #define USBDEVFS_URB_ISO_ASAP              2
+#define USBDEVFS_URB_QUEUE_BULK            0x10
 
 #define USBDEVFS_URB_TYPE_ISO		   0
 #define USBDEVFS_URB_TYPE_INTERRUPT	   1
@@ -94,11 +109,27 @@
 	struct usbdevfs_iso_packet_desc iso_frame_desc[0];
 };
 
+/* ioctls for talking to drivers in the usbcore module: */
+struct usbdevfs_ioctl {
+	int	ifno;		/* interface 0..N ; negative numbers reserved */
+	int	ioctl_code;	/* MUST encode size + direction of data so the
+				 * macros in <asm/ioctl.h> give correct values */
+	void	*data;		/* param buffer (in, or out) */
+};
+
+/* You can do most things with hubs just through control messages,
+ * except find out what device connects to what port. */
+struct usbdevfs_hub_portinfo {
+	char nports;		/* number of downstream ports in this hub */
+	char port [127];	/* e.g. port 3 connects to device 27 */
+};
+
 #define USBDEVFS_CONTROL           _IOWR('U', 0, struct usbdevfs_ctrltransfer)
 #define USBDEVFS_BULK              _IOWR('U', 2, struct usbdevfs_bulktransfer)
 #define USBDEVFS_RESETEP           _IOR('U', 3, unsigned int)
 #define USBDEVFS_SETINTERFACE      _IOR('U', 4, struct usbdevfs_setinterface)
 #define USBDEVFS_SETCONFIGURATION  _IOR('U', 5, unsigned int)
+#define USBDEVFS_GETDRIVER         _IOW('U', 8, struct usbdevfs_getdriver)
 #define USBDEVFS_SUBMITURB         _IOR('U', 10, struct usbdevfs_urb)
 #define USBDEVFS_DISCARDURB        _IO('U', 11)
 #define USBDEVFS_REAPURB           _IOW('U', 12, void *)
@@ -106,6 +137,11 @@
 #define USBDEVFS_DISCSIGNAL        _IOR('U', 14, struct usbdevfs_disconnectsignal)
 #define USBDEVFS_CLAIMINTERFACE    _IOR('U', 15, unsigned int)
 #define USBDEVFS_RELEASEINTERFACE  _IOR('U', 16, unsigned int)
+#define USBDEVFS_CONNECTINFO       _IOW('U', 17, struct usbdevfs_connectinfo)
+#define USBDEVFS_IOCTL             _IOWR('U', 18, struct usbdevfs_ioctl)
+#define USBDEVFS_HUB_PORTINFO      _IOR('U', 19, struct usbdevfs_hub_portinfo)
+#define USBDEVFS_RESET             _IO('U', 20)
+#define USBDEVFS_CLEAR_HALT        _IOR('U', 21, unsigned int)
 
 /* --------------------------------------------------------------------- */
 
@@ -126,18 +162,6 @@
 
 #define IROOT      1
 
-/*
- * sigh. rwsemaphores do not (yet) work from modules
- */
-
-#define rw_semaphore semaphore
-#define init_rwsem init_MUTEX
-#define down_read down
-#define down_write down
-#define up_read up
-#define up_write up
-
-
 struct dev_state {
 	struct list_head list;      /* state list */
 	struct rw_semaphore devsem; /* protects modifications to dev (dev == NULL indicating disconnect) */ 
@@ -163,7 +187,6 @@
 extern struct file_operations usbdevfs_bus_file_operations;
 extern void usbdevfs_conn_disc_event(void);
 
-
 #endif /* __KERNEL__ */
 
 /* --------------------------------------------------------------------- */
--- /dev/null
+++ usbutils-0.11/usbmisc.c
@@ -0,0 +1,141 @@
+/*****************************************************************************/
+/*
+ *      usbmisc.c  --  Misc USB routines
+ *
+ *      Copyright (C) 2003  Aurelien Jarno (aurelien@aurel32.net)
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
+/*****************************************************************************/
+
+#include <stdio.h>
+#include <string.h>
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "usbmisc.h"
+
+/* ---------------------------------------------------------------------- */
+
+static const char *procbususb = "/proc/bus/usb";
+
+/* ---------------------------------------------------------------------- */
+
+static int readlink_recursive(const char *path, char *buf, size_t bufsize)
+{
+	char temp[PATH_MAX + 1];
+	char *ptemp;
+	int ret;
+
+	ret = readlink(path, buf, bufsize);
+
+	if (ret > 0) {
+		buf[ret] = 0;
+		if (*buf != '/')
+		{
+			strncpy(temp, path, sizeof(temp));
+			ptemp = temp + strlen(temp);
+			while (*ptemp != '/' && ptemp != temp) ptemp--;
+			ptemp++;
+			strncpy(ptemp, buf, bufsize + temp - ptemp);
+		}
+		else
+			strncpy(temp, buf, sizeof(temp));
+		return readlink_recursive(temp, buf, bufsize);
+	}
+	else {
+		strncpy(buf, path, bufsize);
+		return strlen(buf);
+	}
+}
+
+static char *get_absolute_path(const char *path, char *result, size_t result_size)
+{
+	const char *ppath;	/* pointer on the input string */
+	char *presult;		/* pointer on the output string */
+
+	ppath = path;
+	presult = result;
+	result[0] = 0;
+
+	if (path == NULL)
+		return result;
+
+	if (*ppath != '/')
+	{
+		getcwd(result, result_size);		
+		presult += strlen(result);
+		result_size -= strlen(result);
+
+		*presult++ = '/';
+		result_size--;
+	}		
+	
+	while (*ppath != 0 && result_size > 1) {
+		if (*ppath == '/') {
+			do ppath++; while (*ppath == '/');
+			*presult++ = '/';
+			result_size--;
+		}
+		else if (*ppath == '.' && *(ppath + 1) == '.' && *(ppath + 2) == '/' && *(presult - 1) == '/') {
+			if ((presult - 1) != result)
+			{
+				/* go one directory upper */
+				do {
+					presult--;
+					result_size++;
+				} while (*(presult - 1) != '/');
+			}
+			ppath += 3;
+		}
+		else if (*ppath == '.'  && *(ppath + 1) == '/' && *(presult - 1) == '/') {
+			ppath += 2;
+		}
+	        else {
+			*presult++ = *ppath++;
+			result_size--;
+		}
+	}
+	/* Don't forget to mark the end of the string! */
+	*presult = 0;
+	
+	return result;
+}	
+
+struct usb_device *get_usb_device(const char *path)
+{
+	struct usb_bus *bus;
+	struct usb_device *dev;
+	char device_path[PATH_MAX + 1];
+	char absolute_path[PATH_MAX + 1];
+
+	readlink_recursive(path, device_path, sizeof(device_path));
+	get_absolute_path(device_path, absolute_path, sizeof(absolute_path));
+	
+	for (bus = usb_busses; bus; bus = bus->next) {
+        	for (dev = bus->devices; dev; dev = dev->next) {
+			snprintf(device_path, sizeof(device_path), "%s/%s/%s", procbususb, bus->dirname, dev->filename);
+			if (!strcmp(device_path, absolute_path))
+				return dev;
+		}				
+        }			
+	return NULL;
+}	
+
--- /dev/null
+++ usbutils-0.11/usbmisc.h
@@ -0,0 +1,36 @@
+/*****************************************************************************/
+/*
+ *      usbmisc.h  --  Misc USB routines
+ *
+ *      Copyright (C) 2003  Aurelien Jarno (aurelien@aurel32.net)
+ *
+ *      This program is free software; you can redistribute it and/or modify
+ *      it under the terms of the GNU General Public License as published by
+ *      the Free Software Foundation; either version 2 of the License, or
+ *      (at your option) any later version.
+ *
+ *      This program is distributed in the hope that it will be useful,
+ *      but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *      GNU General Public License for more details.
+ *
+ *      You should have received a copy of the GNU General Public License
+ *      along with this program; if not, write to the Free Software
+ *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
+/*****************************************************************************/
+
+#ifndef _USBMISC_H
+#define _USBMISC_H
+
+#include <usb.h>
+
+/* ---------------------------------------------------------------------- */
+
+extern struct usb_device *get_usb_device(const char *path);
+
+/* ---------------------------------------------------------------------- */
+#endif /* _USBMISC_H */
--- usbutils-0.11/usbmodules.8~usbutils-0.11+cvs20041108
+++ usbutils-0.11/usbmodules.8
@@ -5,7 +5,8 @@
 in USB device
 .SH SYNOPSIS
 .B usbmodules
-.RB [ "--device " /proc/bus/bus/NNN/NNN ]
+.RB [ "--device " /proc/bus/bus/NNN/NNN 
+.RB | " --product " xx/xx/xx " --type " dd/dd/dd " --interface " dd/dd/dd ]
 .RB [ "--check " modulename ]
 .RB [ --help ]
 .RB [ "--mapfile " pathname ]
@@ -27,11 +28,21 @@
 .IP
 	done
 .PP
+or
+.IP
+	for module in $(usbmodules --product $PRODUCT --type $TYPE --interface $INTERFACE) ; do
+.IP
+		modprobe -s -k "$module"
+.IP
+	done
+.PP
 The DEVICE environment variable is passed from the kernel to /sbin/hotplug
 during USB hotplugging if the kernel was configured using
 .I usbdevfs.
+The environment variables PRODUCT, TYPE and INTERFACE are set when
+/sbin/hotplug is called during hotplugging.
 .B usbmodules
-currently requires usbdevfs to operate.
+can operate with both configurations.
 .PP
 When a USB device is removed from the system, the Linux kernel will
 decrement a usage count on USB driver module.  If this count drops
@@ -52,7 +63,20 @@
 .BI "--device " /proc/bus/usb/MMM/NNN
 Selects which device
 .B usbmodules
-will examine.  The argument is currently mandatory.
+will examine.  The argument is mandatory unless
+.B --procuct
+,
+.B --type
+and
+.B --interface
+are used together.
+.TP
+.BI "--product " xx/xx/xx " --type " dd/dd/dd " --interface " dd/dd/dd
+Alternative way to select the device
+.B usbmodules
+will examine. These arguments are mandatory unless
+.B --device
+is given.
 .TP
 .B --help, -h
 Print a help message
--- usbutils-0.11/usbmodules.c~usbutils-0.11+cvs20041108
+++ usbutils-0.11/usbmodules.c
@@ -11,7 +11,7 @@
  *
  *	The code in usbmodules not derived from elsewhere was written by
  *	Adam J. Richter.  David Brownell added the --mapfile and --version
- *	options.
+ *	options. Aurelien Jarno modified the code to use libusb.
  *
  *	Copyright (C) 2000, 2001  Yggdrasil Computing, Inc.
  *      Copyright (C) 1999  Thomas Sailer (sailer@ife.ee.ethz.ch)
@@ -38,8 +38,6 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/ioctl.h>
-#include <fcntl.h>
-#include <dirent.h>
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
@@ -48,36 +46,27 @@
 #include <stdarg.h>
 #include <sys/param.h>
 #include <sys/utsname.h>
-
-#include <linux/types.h>
-#ifdef HAVE_LINUX_USBDEVICE_FS_H
-#include <linux/usbdevice_fs.h>
-#else
-#include "usbdevice_fs.h"
-#endif
-#ifdef HAVE_LINUX_USB_H
-#include <linux/usb.h>
-#else
-#include "usb.h"
-#endif
+#include <usb.h>
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include "usbmodules.h"
-#include "names.h"
-#include "devtree.h"
+#include "usbmisc.h"
 
 #define _GNU_SOURCE
 #include <getopt.h>
 
-#define OPT_STRING "c:d:hm:v"
+#define OPT_STRING "c:d:hi:m:p:t:v"
 static struct option long_options[] = {
 	{"check",	required_argument,	NULL,	'c'},
 	{"device",      required_argument,      NULL,   'd'},
 	{"help",	no_argument, 		NULL,	'h'},
+	{"interface",	required_argument,	NULL,	'i'},
 	{"mapfile",     required_argument,      NULL,   'm'},
+	{"product",	required_argument,	NULL,	'p'},
+	{"type",	required_argument,	NULL,	't'},
 	{"version",	no_argument, 		NULL,	'v'},
 	{ 0,            0,                      NULL,   0}
 };
@@ -87,23 +76,7 @@
 
 #define LINELENGTH     8000 
 
-#define CTRL_RETRIES    50
-#define CTRL_TIMEOUT   100     /* milliseconds */
-
-#define USB_DT_CS_DEVICE               0x21
-#define USB_DT_CS_CONFIG               0x22
-#define USB_DT_CS_STRING               0x23
-#define USB_DT_CS_INTERFACE            0x24
-#define USB_DT_CS_ENDPOINT             0x25
-
 static char *checkname = NULL;
-
-static int idVendor;
-static int idProduct;
-static int bcdDevice;
-static int bDeviceClass;
-static int bDeviceSubClass;
-static int bDeviceProtocol;
 struct usbmap_entry *usbmap_list;
 
 static void *
@@ -218,6 +191,9 @@
                if (line[0] == '#')
                        continue;
 
+	       if (line[0] == '\n')
+		       continue;
+
                entry = xmalloc(sizeof(struct usbmap_entry));
 
 	       if (!scan_with_flags(line, entry, name) &&
@@ -257,52 +233,51 @@
 */
 
 static void
-match_modules(int bInterfaceClass,
-            int bInterfaceSubClass,
-            int bInterfaceProtocol)
+match_modules(struct usb_device_descriptor *device_descriptor, 
+              struct usb_interface_descriptor *interface_descriptor)
 {
         struct usbmap_entry *mod;
 
         for (mod = usbmap_list; mod != NULL; mod = mod->next) {
 
                 if ((mod->match_flags & USB_MATCH_VENDOR) &&
-                    mod->idVendor != idVendor)
+                    mod->idVendor != device_descriptor->idVendor)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_PRODUCT) &&
-                    mod->idProduct != idProduct)
+                    mod->idProduct != device_descriptor->idProduct)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_DEV_LO) &&
-                    mod->bcdDevice_lo > bcdDevice)
+                    mod->bcdDevice_lo > device_descriptor->bcdDevice)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_DEV_HI) &&
-                    mod->bcdDevice_hi < bcdDevice)
+                    mod->bcdDevice_hi < device_descriptor->bcdDevice)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_DEV_CLASS) &&
-                    mod->bDeviceClass != bDeviceClass)
+                    mod->bDeviceClass != device_descriptor->bDeviceClass)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_DEV_SUBCLASS) &&
-                    mod->bDeviceSubClass != bDeviceSubClass)
+                    mod->bDeviceSubClass != device_descriptor->bDeviceSubClass)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_DEV_PROTOCOL) &&
-                    mod->bDeviceProtocol != bDeviceProtocol)
+                    mod->bDeviceProtocol != device_descriptor->bDeviceProtocol)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_INT_CLASS) &&
-                    mod->bInterfaceClass != bInterfaceClass)
+                    mod->bInterfaceClass != interface_descriptor->bInterfaceClass)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_INT_SUBCLASS) &&
-                    mod->bInterfaceSubClass != bInterfaceSubClass)
+                    mod->bInterfaceSubClass != interface_descriptor->bInterfaceSubClass)
                         continue;
 
                 if ((mod->match_flags & USB_MATCH_INT_PROTOCOL) &&
-                    mod->bInterfaceProtocol != bInterfaceProtocol)
+                    mod->bInterfaceProtocol != interface_descriptor->bInterfaceProtocol)
                         continue;
 
 		if (checkname != NULL) {
@@ -315,161 +290,154 @@
         }
 }
 
-static int usb_control_msg(int fd,
-                          u_int8_t requesttype,
-                          u_int8_t request,
-                          u_int16_t value,
-                          u_int16_t index,
-                          unsigned int size,
-                          void *data)
+static void process_device(const char *path)
 {
-       int result;
-       int try;
-
-       struct usbdevfs_ctrltransfer ctrl;
-
-       ctrl.requesttype = requesttype;
-       ctrl.request = request;
-       ctrl.value = value;
-       ctrl.index = index;
-       ctrl.length = size;
-       ctrl.data = data;
-       ctrl.timeout = CTRL_TIMEOUT;
-
-       /* At least on UHCI controllers, this ioctl gets a lot of
-          ETIMEDOUT errors which can often be retried with success
-          one is persistent enough.  So, we try 100 times, which work
-          on one machine, but not on my notebook computer.
-          --Adam J. Richter (adam@yggdrasil.com) 2000 November 03. */
-
-       try = 0;
-       do {
-	  	result = ioctl(fd, USBDEVFS_CONTROL, &ctrl);
-               try++;
-       } while (try < CTRL_RETRIES && result == -1 && errno == ETIMEDOUT);
-       return result;
-}
+	struct usb_device *dev;
+	struct usb_dev_handle *udev;
+	int i, j, k;
 
+	dev = get_usb_device(path);
 
-static void do_config(int fd, unsigned int nr)
-{
-       unsigned char buf[1024], *p;
-       unsigned int sz;
+	if (!dev) {
+		fprintf(stderr, "Cannot open %s\n", path);	       
+		return;
+	}
+		
+			
+	udev = usb_open(dev);
+	
+	for (i = 0 ; i < dev->descriptor.bNumConfigurations ; i++)
+		for (j = 0 ; j < dev->config[i].bNumInterfaces ; j++) 
+		       	for (k = 0 ; k < dev->config[i].interface[j].num_altsetting ; k++)
+			        match_modules(&dev->descriptor, 
+					      &dev->config[i].interface[j].altsetting[k]);
 
-       if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
-                           (USB_DT_CONFIG << 8) | nr,
-                           0, USB_DT_CONFIG_SIZE, buf) < 0) {
-               fprintf(stderr ,"cannot get config descriptor %d, %s (%d)\n",
-                       nr, strerror(errno), errno);
-               return;
-       }
-       if (buf[0] < USB_DT_CONFIG_SIZE || buf[1] != USB_DT_CONFIG)
-               fprintf(stderr, "Warning: invalid config descriptor\n");
-       sz = buf[2] | buf[3] << 8;
-       if (sz > sizeof(buf)) {
-               fprintf(stderr,
-                       "Config %d descriptor too long, truncating\n", nr);
-               sz = sizeof(buf);
-       }
-       if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
-                           (USB_DT_CONFIG << 8) | nr, 0, sz, buf) < 0) {
-               fprintf(stderr, "cannot get config descriptor %d, %s (%d)\n",
-                       nr, strerror(errno), errno);
-               return;
-       }
-       p = buf;
-       while (sz >= 2 && p[0] >= 2 && p[0] < sz) {
-               if (p[1] == USB_DT_INTERFACE) {
-                       const int intClass = p[5];
-                       const int intSubClass = p[6];
-                       const int intProto = p[7];
-                       match_modules(intClass, intSubClass, intProto);
-               }
-               sz -= p[0];
-               p += p[0];
-       }
+	usb_close(udev);
 }
 
-static void process_device(const char *path)
+static void process_args(char *product,
+			 char *type,
+			 char *interface)
 {
-        unsigned char buf[USB_DT_DEVICE_SIZE];
-        int fd;
-       unsigned int i, maxcfg;
-
-       if ((fd = open(path, O_RDWR)) == -1) {
-               fprintf(stderr, "cannot open %s, %s (%d)\n",
-                       path, strerror(errno), errno);
-               return;
-       }
-       if (usb_control_msg(fd, USB_DIR_IN, USB_REQ_GET_DESCRIPTOR,
-                           (USB_DT_DEVICE << 8), 0, USB_DT_DEVICE_SIZE, buf)
-           < 0) {
-               perror("cannot get config descriptor");
-               goto err;
-       }
-       bDeviceClass = buf[4];
-       bDeviceSubClass = buf[5];
-       bDeviceProtocol = buf[6];
-       idVendor = buf[8] | (buf[9] << 8);
-       idProduct = buf[10] | (buf[11] << 8);
-       bcdDevice = buf[12] | (buf[13] << 8);
-
-       maxcfg = buf[17];
-       if (buf[0] < 18 || buf[1] != USB_DT_DEVICE)
-               maxcfg = 1;
+	int a, b, c;
+	struct usb_device_descriptor dd;
+	struct usb_interface_descriptor id;
 
-       for (i = 0; i < maxcfg; i++)
-               do_config(fd, i);
- err:
-       close(fd);
+	memset(&dd, 0, sizeof(dd));
+	memset(&id, 0, sizeof(id));
+	if (product == NULL ||
+	    sscanf(product, "%hx/%hx/%hx", &dd.idVendor, &dd.idProduct, &dd.bcdDevice) != 3) {
+		fprintf(stderr, "Bad product format: '%s'\n", product);
+		return;
+	}
+	if (type == NULL || sscanf(type, "%d/%d/%d", &a, &b, &c) != 3) {
+		fprintf(stderr, "Bad type format: '%s'", type);
+		return;
+	}
+	dd.bDeviceClass = a;
+	dd.bDeviceSubClass = b;
+	dd.bDeviceProtocol = c;
+	if (dd.bDeviceClass == 0) {
+		/* interface must be specified for device class 0 */
+		if (interface == NULL ||
+		    sscanf(interface, "%d/%d/%d", &a, &b, &c) != 3) {
+			fprintf(stderr, "Bad interface format: '%s'\n", interface);
+			return;
+		}
+		id.bInterfaceClass = a;
+		id.bInterfaceSubClass = b;
+		id.bInterfaceProtocol = c;
+	} else {
+		/* interface maybe given. if so, check and use arg */
+		if (interface != NULL && *interface != '\0' &&
+		    sscanf(interface, "%d/%d/%d", &a, &b, &c) != 3) {
+			fprintf(stderr, "Bad interface format: '%s'\n", interface);
+			return;
+		}
+		id.bInterfaceClass = a;
+		id.bInterfaceSubClass = b;
+		id.bInterfaceProtocol = c;
+	}
+    	match_modules(&dd, &id);
 }
 
-
-int
-main (int argc, char **argv)
+int main (int argc, char *argv[])
 {
        int opt_index = 0;
        int opt;
        char *device = NULL;
        char *pathname = NULL;
+       char *product = NULL, *type = NULL, *interface = NULL;
 
-       while ((opt = getopt_long(argc, argv, OPT_STRING, long_options,
-                          &opt_index)) != -1) {
+       while ((opt = getopt_long(argc, argv, OPT_STRING, long_options, &opt_index)) != -1) {
                switch(opt) {
-			case 'c':
-				checkname = optarg;
-				break;
-                       case 'd':
-                               device = optarg;
-                               break;
-                       case 'h':
-				printf ("Usage: usbmodules [--help] [--device /proc/bus/usb/NNN/NNN] [--check module]\n"
-				"\t[--mapfile pathname] [--version]\n"
-	"  Lists kernel modules corresponding to USB devices currently plugged\n"
-                                       "  into the computer.\n");
-                               return 0;
-		       case 'm':
-                               pathname = optarg;
-                               break;
-		       case 'v':
-                               puts (VERSION);
-                               return 0;
-                       default:
-                               fprintf(stderr,
-                                       "Unknown argument character \"%c\".\n",
-                                       opt);
-                               return 1;
+	       case 'c':
+		       checkname = optarg;
+		       break;
+	       case 'd':
+		       device = optarg;
+		       break;
+	       case 'h':
+		       printf ("Usage: usbmodules [options]...\n"
+			       "Lists kernel modules corresponding to USB devices currently plugged\n"
+			       "\n"
+			       "OPTIONS\n"
+			       "  -d, --device /proc/bus/usb/NNN/NNN\n"
+			       "      Selects which device usbmodules will examine\n"
+			       "  -c, --check module\n"
+			       "      Check if the given module's exported USB ID patterns matches\n"
+			       "  -m, --mapfile /etc/hotplug/usb.handmap\n"
+			       "      Specify a mapfile\n"
+			       "  -p, --product xx/xx/xx\n"
+			       "  -t, --type dd/dd/dd\n"
+			       "  -i, --interface dd/dd/dd\n"
+			       "  -h, --help\n"
+			       "      Print help screen\n"
+			       "  -v, --version\n"
+			       "      Show version of program\n"
+			       "\n");
+		       return 0;
+	       case 'm':
+		       pathname = optarg;
+		       break;
+	       case 'i':
+		       interface = optarg;
+		       break;
+	       case 'p':
+		       product = optarg;
+		       break;
+	       case 't':
+		       type = optarg;
+		       break;
+	       case 'v':
+		       puts (VERSION);
+		       return 0;
+	       default:
+		       fprintf(stderr,
+			       "Unknown argument character \"%c\".\n",
+			       opt);
+		       return 1;
                }
        }       
 
-       if (device == NULL) {
+       if (device == NULL &&
+	   (product == NULL || type == NULL || interface == NULL) ) {
                fprintf (stderr,
                         "You must specify a device with something like:\n"
-                        "\tusbmodules --device /proc/bus/usb/001/009\n");
-               return 1;
+                        "\tusbmodules --device /proc/bus/usb/001/009\n"
+			"or\n"
+			"\tusbmodules --product 82d/100/100 --type 0/0/0 --interface 0/0/0\n");
+              return 1;
        }
+       
        read_modules_usbmap(pathname);
-       process_device(device);
+       usb_init();
+       usb_find_busses();
+       usb_find_devices();
+       if (device != NULL)
+	       process_device(device);
+       if (product != NULL && type != NULL)
+	       process_args(product, type, interface);
 
 	if (checkname != NULL)
 		return 1; /* The module being checked was not needed */
--- usbutils-0.11/usbutils.spec~usbutils-0.11+cvs20041108
+++ usbutils-0.11/usbutils.spec
@@ -1,5 +1,5 @@
 %define name    usbutils
-%define version 0.11
+%define version 0.12
 %define release 1
 Name:		%{name}
 Version:	%{version}
@@ -10,6 +10,7 @@
 ExclusiveOS: 	Linux
 Summary: Linux USB utilities.
 Group: Applications/System
+BuildPrereq: libusb-devel
 
 %description
 This package contains an utility for inspecting
--- /dev/null
+++ usbutils-0.11/update-usbids
@@ -0,0 +1,37 @@
+#!/bin/sh
+# This is a script stolen from pciutils. Thanks to Martin Mares <mj@atrey.karlin.mff.cuni.cz>
+# for writing and publishing it under the GNU General Public License.
+
+set -e
+
+SRC="http://linux-usb.sourceforge.net/usb.ids"
+DEST=/var/lib/usbutils//usb.ids
+
+umask 022
+
+if which wget >/dev/null ; then
+	DL="wget -O $DEST.new $SRC"
+elif which lynx >/dev/null ; then
+	DL="eval lynx -source $SRC >$DEST.new"
+else
+	echo >&2 "update-usbids: cannot find wget nor lynx"
+	exit 1
+fi
+
+if ! $DL ; then
+	echo >&2 "update-usbids: download failed"
+	rm -f $DEST.new
+	exit 1
+fi
+
+if ! grep >/dev/null "^C " $DEST.new ; then
+	echo >&2 "update-usbids: missing class info, probably truncated file"
+	exit 1
+fi
+
+if [ -f $DEST ] ; then
+	mv $DEST $DEST.old
+fi
+mv $DEST.new $DEST
+
+echo "Done."
--- /dev/null
+++ usbutils-0.11/update-usbids.8
@@ -0,0 +1,27 @@
+.TH update-usbids 8 "27 October 2004" "usbutils-0.11" "Linux USB Utilities"
+.IX update-usbids
+
+.SH NAME
+update-usbids \- download new version of the USB ID list
+
+.SH SYNOPSIS
+.B update-usbids
+
+.SH DESCRIPTION
+.B update-usbids
+fetches the current version of the usb.ids file from the primary distribution
+site and installs it.
+
+This utility requires either wget or lynx to be installed. If gzip or bzip2
+are available, it automatically downloads the compressed version of the list.
+
+.SH FILES
+.TP
+.B /var/lib/usbutils/usb.ids
+Here we install the new list.
+
+.SH SEE ALSO
+.BR lsusb(8).
+
+.SH AUTHOR
+Thomas Sailer, <sailer@ife.ee.ethz.ch>.