FreeCalypso > hg > fc-usbser-tools
annotate cp2102/decode_usb_desc.c @ 87:4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Wed, 27 Sep 2023 19:15:29 +0000 |
parents | b7397959ae68 |
children | ea7b411aad27 |
rev | line source |
---|---|
85
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * This program reads a CP2102 EEPROM image from an Intel HEX file |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * and decodes the USB descriptors portion thereof. |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 */ |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 #include <sys/types.h> |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 #include <stdio.h> |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 #include <stdlib.h> |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 #include "cp210x_defs.h" |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 u_char eeprom[SIZE_EEPROM]; |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
87
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
13 static void |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
14 print_device_desc(desc) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
15 u_char *desc; |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
16 { |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
17 printf(" bLength: %u", desc[0]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
18 if (desc[0] != 18) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
19 fputs(" (WRONG!)", stdout); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
20 putchar('\n'); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
21 printf(" bDescriptorType: 0x%02X", desc[1]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
22 if (desc[1] != 0x01) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
23 fputs(" (WRONG!)", stdout); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
24 putchar('\n'); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
25 printf(" bcdUSB: 0x%02X%02X\n", desc[3], desc[2]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
26 printf(" bDeviceClass: 0x%02X\n", desc[4]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
27 printf(" bDeviceSubClass: 0x%02X\n", desc[5]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
28 printf(" bDeviceProtocol: 0x%02X\n", desc[6]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
29 printf(" bMaxPacketSize0: %u\n", desc[7]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
30 printf(" idVendor: 0x%02X%02X\n", desc[9], desc[8]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
31 printf(" idProduct: 0x%02X%02X\n", desc[11], desc[10]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
32 printf(" bcdDevice: 0x%02X%02X\n", desc[13], desc[12]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
33 printf(" iManufacturer: %u\n", desc[14]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
34 printf(" iProduct: %u\n", desc[15]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
35 printf(" iSerialNumber: %u\n", desc[16]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
36 printf(" bNumConfigurations: %u\n", desc[17]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
37 } |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
38 |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
39 static void |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
40 print_config_desc(desc) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
41 u_char *desc; |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
42 { |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
43 printf(" bLength: %u", desc[0]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
44 if (desc[0] != 9) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
45 fputs(" (WRONG!)", stdout); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
46 putchar('\n'); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
47 printf(" bDescriptorType: 0x%02X", desc[1]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
48 if (desc[1] != 0x02) |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
49 fputs(" (WRONG!)", stdout); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
50 putchar('\n'); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
51 printf(" wTotalLength: %u\n", desc[2] | (desc[3] << 8)); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
52 printf(" bNumInterfaces: %u\n", desc[4]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
53 printf(" bConfigurationValue: 0x%02X\n", desc[5]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
54 printf(" iConfiguration: %u\n", desc[6]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
55 printf(" bmAttributes: 0x%02X\n", desc[7]); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
56 printf(" bMaxPower: 0x%02X (%u mA)\n", desc[8], desc[8] * 2); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
57 } |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
58 |
85
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 main(argc, argv) |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 char **argv; |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 { |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 if (argc != 2) { |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 fprintf(stderr, "usage: %s ihex-file\n", argv[0]); |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 exit(1); |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 read_intel_hex(argv[1]); |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 printf("USB device descriptor at 0x3988:\n"); |
87
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
68 print_device_desc(eeprom + 0x388); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
69 printf("USB configuration descriptor at 0x399A:\n"); |
4393e1b4b245
cp2102-decode-ee-desc: decode config descriptor
Mychaela Falconia <falcon@freecalypso.org>
parents:
86
diff
changeset
|
70 print_config_desc(eeprom + 0x39A); |
85
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 /* decoding of other descriptors remains to be implemented */ |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 exit(0); |
0787525a33e2
cp2102-decode-ee-desc program started
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 } |