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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }