annotate minimon.c @ 0:71b9540bdd23

starting, importing Woo's code and adding minimon
author Peter Meerwald <pmeerw@pmeerw.net>
date Sat, 07 May 2011 17:29:58 +0200
parents
children 111d4bbce605
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
1 #include <stdlib.h>
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
2 #include <stdio.h>
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
3 #include <string.h>
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
4 #include <fcntl.h>
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
5 #include <assert.h>
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
6 #include "usb.h"
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
7
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
8 static const char *progname = "minimon";
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
9
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
10 struct usb_device *find_dev() {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
11 struct usb_bus *bus;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
12 struct usb_device *dev;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
13
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
14 usb_init();
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
15 usb_find_busses();
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
16 usb_find_devices();
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
17
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
18 for (bus = usb_busses; bus; bus = bus->next) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
19 for (dev = bus->devices; dev; dev = dev->next) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
20 if (dev->descriptor.idVendor == 0x04e8 &&
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
21 dev->descriptor.idProduct == 0x2028) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
22 return dev;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
23 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
24 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
25 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
26
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
27 return NULL;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
28 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
29
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
30 usb_dev_handle *dev_open(struct usb_device *dev) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
31 int res = -1;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
32 char buf[256];
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
33 usb_dev_handle *udev;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
34 int numeps = 0;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
35
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
36 udev = usb_open(dev);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
37 if (!udev) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
38 fprintf(stderr, "%s: failed to open device, exit.\n", progname);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
39 exit(EXIT_FAILURE);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
40 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
41
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
42 setuid(getuid());
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
43
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
44 res = usb_set_configuration(udev, 1);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
45
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
46 usb_claim_interface(udev, 0);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
47 numeps = dev->config[0].interface[0].altsetting[0].bNumEndpoints;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
48 if (numeps == 0) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
49 fprintf(stderr, "%s: no endpoints, exit.\n", progname);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
50 exit(EXIT_FAILURE);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
51 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
52
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
53 strcpy(buf, "** no string **");
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
54 res = usb_get_string_simple(udev, dev->descriptor.iManufacturer, buf, sizeof(buf));
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
55 fprintf(stderr, "usb_get_string_simple => %d, %s\n", res, buf);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
56
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
57 {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
58 int eplist[] = { 0x2, 0x81, 0x83 };
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
59 int eplength = sizeof(eplist)/sizeof(eplist[0]);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
60 int *endpoint = eplist;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
61 int i;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
62 for (i=0; i<eplength; i++) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
63 res = usb_resetep(udev, *endpoint);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
64 res = usb_clear_halt(udev, *endpoint);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
65 endpoint++;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
66 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
67 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
68
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
69 return udev;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
70 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
71
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
72
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
73 void send_jpeg(FILE *f, usb_dev_handle *udev) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
74 fseek(f, 0, SEEK_END);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
75 int sz = ftell(f);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
76 fseek(f, 0, SEEK_SET);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
77
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
78 #define URBBUF_MAX 0x20000
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
79 char buf[URBBUF_MAX];
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
80
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
81 #define HDR_LEN 12
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
82 char hdr[HDR_LEN] = {0xa5, 0x5a, 0x18, 0x04, 0xff, 0xff, 0xff, 0xff, 0x48, 0x00, 0x00, 0x00};
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
83 *(int *)(hdr+4) = sz;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
84
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
85 memcpy(buf, hdr, HDR_LEN);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
86 int off = HDR_LEN;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
87
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
88 while(!feof(f)) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
89 int nr = fread(buf+off, 1, URBBUF_MAX - off, f);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
90 if (nr < 0) break;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
91 // pad
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
92 memset(buf + off + nr, 0, URBBUF_MAX - off - nr);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
93
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
94 // write it out chunk by chunk
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
95 int timeout = 1000;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
96 int endpoint = 0x2;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
97 int res = usb_bulk_write(udev, endpoint, buf, URBBUF_MAX, timeout);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
98
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
99 assert(res >= 0);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
100 off = 0; // no header on subsequent chunks
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
101 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
102 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
103
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
104 int main(int argc, char *argv[]) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
105 if (argc != 2) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
106 fprintf(stderr, "Usage: %s FILE", progname);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
107 return EXIT_FAILURE;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
108 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
109
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
110 struct usb_device *dev = find_dev(index);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
111 assert(dev != NULL);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
112
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
113 usb_dev_handle *udev = dev_open(dev);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
114
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
115 FILE *f = fopen(argv[1], "rb");
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
116 if (f == NULL) {
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
117 fprintf(stderr, "%s: failed to open file '%s', exit.\n", progname, argv[1]);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
118 exit(EXIT_FAILURE);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
119 }
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
120 send_jpeg(f, udev);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
121 fclose(f);
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
122
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
123 return EXIT_SUCCESS;
71b9540bdd23 starting, importing Woo's code and adding minimon
Peter Meerwald <pmeerw@pmeerw.net>
parents:
diff changeset
124 }

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.