author | viric <viriketo@gmail.com> |
Wed, 21 Dec 2011 21:41:32 +0100 | |
changeset 17 | 021968512187 |
parent 15 | 06da811cdc27 |
child 18 | f85465640dd4 |
permissions | -rw-r--r-- |
5
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
1 |
/* |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
2 |
PCE-HT71 programmer and data downloader for libusb |
17
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
3 |
Copyright (C) 2010-2011 LluĂs Batlle i Rossell |
5
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
4 |
|
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
5 |
This program is free software: you can redistribute it and/or modify |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
6 |
it under the terms of the GNU General Public License as published by |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
7 |
the Free Software Foundation, either version 3 of the License, or |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
8 |
(at your option) any later version. |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
9 |
|
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
10 |
This program is distributed in the hope that it will be useful, |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
11 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
12 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
13 |
GNU General Public License for more details. |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
14 |
|
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
15 |
You should have received a copy of the GNU General Public License |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
16 |
along with this program. If not, see <http://www.gnu.org/licenses/>. |
8459d991779e
Setting the license and authors, preparing for a release.
viric <viriketo@gmail.com>
parents:
4
diff
changeset
|
17 |
*/ |
0 | 18 |
#include <usb.h> |
19 |
#include <stdio.h> |
|
20 |
#include <assert.h> |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
21 |
#include <unistd.h> |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
22 |
#include <string.h> |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
23 |
#include <errno.h> |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
24 |
#include <time.h> |
0 | 25 |
|
26 |
const int vendor=0x10c4; |
|
27 |
const int product=0x0003; |
|
28 |
||
29 |
usb_dev_handle *handle; |
|
30 |
struct usb_device *device; |
|
31 |
||
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
32 |
int ep_in = 1; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
33 |
int ep_out = 2; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
34 |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
35 |
enum |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
36 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
37 |
HELP, |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
38 |
SET, |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
39 |
DOWNLOAD |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
40 |
} action; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
41 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
42 |
struct |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
43 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
44 |
int nsamples; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
45 |
int time_per_sample; |
4 | 46 |
int immediate; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
47 |
char *download_file; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
48 |
} config; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
49 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
50 |
FILE *outfile; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
51 |
|
0 | 52 |
int connect() |
53 |
{ |
|
54 |
struct usb_bus *bus; |
|
55 |
bus = usb_get_busses(); |
|
56 |
||
57 |
while (bus != 0) |
|
58 |
{ |
|
59 |
struct usb_device *dev; |
|
60 |
dev = bus->devices; |
|
61 |
while(dev != 0) |
|
62 |
{ |
|
63 |
if (dev->descriptor.idVendor == vendor |
|
64 |
&& dev->descriptor.idProduct == product) |
|
65 |
{ |
|
66 |
handle = usb_open(dev); |
|
67 |
device = dev; |
|
68 |
return 0; |
|
69 |
} |
|
70 |
dev = dev->next; |
|
71 |
} |
|
72 |
bus = bus->next; |
|
73 |
} |
|
74 |
||
75 |
handle = 0; |
|
76 |
return -1; |
|
77 |
} |
|
78 |
||
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
79 |
int send_program() |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
80 |
{ |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
81 |
int res; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
82 |
res = usb_bulk_write(handle, ep_out, "\x01\x40\x00", 3, 1000); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
83 |
assert(res == 3); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
84 |
} |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
85 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
86 |
int send_config() |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
87 |
{ |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
88 |
int res; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
89 |
char buf[64]; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
90 |
struct tm *t; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
91 |
time_t tmp_time; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
92 |
tmp_time = time(NULL); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
93 |
t = localtime(&tmp_time); |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
94 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
95 |
buf[0] = '\xce'; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
96 |
buf[1] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
97 |
buf[2] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
98 |
buf[3] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
99 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
100 |
// Samples |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
101 |
*( (int *) &buf[4]) = config.nsamples; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
102 |
// Samples got |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
103 |
*( (int *) &buf[8]) = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
104 |
// Sample rate |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
105 |
*( (int *) &buf[12]) = config.time_per_sample; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
106 |
// Year |
3 | 107 |
*( (int *) &buf[16]) = t->tm_year + 1900; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
108 |
// Mintemp |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
109 |
buf[20] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
110 |
buf[21] = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
111 |
*( (short int *) &buf[22]) = 0x4120; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
112 |
// Maxtemp |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
113 |
buf[24] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
114 |
buf[25] = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
115 |
*( (short int *) &buf[26]) = 0x41a0; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
116 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
117 |
// Month |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
118 |
buf[28] = t->tm_mon; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
119 |
// Day |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
120 |
buf[29] = t->tm_mday; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
121 |
// hour |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
122 |
buf[30] = t->tm_hour; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
123 |
// Minute |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
124 |
buf[31] = t->tm_min; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
125 |
// second |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
126 |
buf[32] = t->tm_sec; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
127 |
// Celsius (1 F) |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
128 |
buf[33] = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
129 |
// Pause between leds (300s) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
130 |
buf[34] = 0x1e; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
131 |
// Name |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
132 |
buf[35] = 'A'; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
133 |
buf[36] = '0'; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
134 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
135 |
// Immediate |
4 | 136 |
buf[51] = config.immediate ? 2 : 1; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
137 |
// Minhum |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
138 |
buf[52] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
139 |
buf[53] = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
140 |
*( (short int *) &buf[54]) = 0x410f; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
141 |
// Maxhum |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
142 |
buf[56] = 0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
143 |
buf[57] = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
144 |
*( (short int *) &buf[58]) = 0x4296; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
145 |
// final |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
146 |
buf[60] = 0xce; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
147 |
buf[61] = 0x0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
148 |
buf[62] = 0x0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
149 |
buf[63] = 0x0; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
150 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
151 |
res = usb_bulk_write(handle, ep_out, buf, 64, 1000); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
152 |
assert(res == 64); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
153 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
154 |
res = usb_bulk_read(handle, ep_in, buf, 1, 1000); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
155 |
assert(res == 1); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
156 |
} |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
157 |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
158 |
void parse_data(char *data) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
159 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
160 |
fprintf(outfile, "# Start: %hi-%hhi-%hhi %hhi:%hhi:%hhi\n", |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
161 |
*((short int *) (data + 16)), |
15
06da811cdc27
Fixing the month written into the file.
viric <viriketo@gmail.com>
parents:
12
diff
changeset
|
162 |
*((unsigned char *) (data + 28))+1, |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
163 |
*((unsigned char *) (data + 29)), |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
164 |
*((unsigned char *) (data + 30)), |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
165 |
*((unsigned char *) (data + 31)), |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
166 |
*((unsigned char *) (data + 32))); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
167 |
fprintf(outfile, "# Num Samples: %hi\n", |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
168 |
*((short int *) (data + 8)) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
169 |
); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
170 |
fprintf(outfile, "# Time between samples: %hi s\n", |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
171 |
*((short int *) (data + 12)) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
172 |
); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
173 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
174 |
|
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
175 |
int |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
176 |
start_download() |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
177 |
{ |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
178 |
int res; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
179 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
180 |
res = usb_bulk_write(handle, ep_out, "\x00\x10\x01", 3, 1000); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
181 |
assert(res == 3); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
182 |
|
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
183 |
char data[100]; |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
184 |
res = usb_bulk_read(handle, ep_in, data, 3, 1000); |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
185 |
assert(res == 3); |
4 | 186 |
fprintf(stderr, "Debug: %02hhx%02hhx%02hhx\n", data[0], data[1], data[2]); |
187 |
assert(data[0] == 2); |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
188 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
189 |
int num = *((short int*) &data[1]); |
4 | 190 |
fprintf(stderr, "Found %i bytes = %i samples\n", num, num/4); |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
191 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
192 |
if (num > 0) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
193 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
194 |
int num_frames = (num + 63) / 64; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
195 |
fprintf(stderr, "%i frames\n", num_frames); |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
196 |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
197 |
/* |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
198 |
res = usb_bulk_write(handle, ep_out, "\x00\x00\x01", 3, 1000); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
199 |
assert(res == 3); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
200 |
*/ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
201 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
202 |
res = usb_bulk_read(handle, ep_in, data, 64, 1000); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
203 |
assert(res == 64); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
204 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
205 |
parse_data(data); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
206 |
|
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
207 |
int sec = 0; |
11
0a821b9bdc80
Fixing the download of many samples.
viric <viriketo@gmail.com>
parents:
10
diff
changeset
|
208 |
int block = 0; |
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
209 |
do |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
210 |
{ |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
211 |
char frame[3]; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
212 |
int step_frames = num_frames >= 0x40 ? 0x40 : num_frames; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
213 |
frame[0] = 0; |
11
0a821b9bdc80
Fixing the download of many samples.
viric <viriketo@gmail.com>
parents:
10
diff
changeset
|
214 |
frame[1] = block; |
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
215 |
frame[2] = step_frames; |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
216 |
|
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
217 |
res = usb_bulk_write(handle, ep_out, frame, 3, 1000); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
218 |
assert(res == 3); |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
219 |
|
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
220 |
res = usb_bulk_read(handle, ep_in, data, 3, 1000); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
221 |
assert(res == 3); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
222 |
fprintf(stderr, "Debug: %02hhx%02hhx%02hhx\n", data[0], data[1], data[2]); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
223 |
assert(data[0] == 2); |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
224 |
|
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
225 |
int i; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
226 |
for(i=0; i < step_frames; ++i) |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
227 |
{ |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
228 |
res = usb_bulk_read(handle, ep_in, data, 64, 5000); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
229 |
assert(res == 64); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
230 |
int take = (num >= 64) ? 64 : num; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
231 |
|
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
232 |
int j; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
233 |
for(j=0; j<take; j+=4) |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
234 |
{ |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
235 |
float temp = *((short int *) (data + j)) / 10.; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
236 |
float hum = *((short int *) (data + j + 2)) / 10.; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
237 |
fprintf(outfile, "%i %g %g\n", sec, temp, hum); |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
238 |
sec++; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
239 |
} |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
240 |
num -= 64; |
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
241 |
num_frames -= 1; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
242 |
} |
11
0a821b9bdc80
Fixing the download of many samples.
viric <viriketo@gmail.com>
parents:
10
diff
changeset
|
243 |
++block; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
244 |
} |
10
fc8a8cfe680a
Fixing a bug, when it had to download more than 0x40 frames.
viric <viriketo@gmail.com>
parents:
8
diff
changeset
|
245 |
while(num_frames > 0); |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
246 |
} |
1
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
247 |
} |
fdce143cc82c
It works a bit. I reverse enginered part.
viric <viriketo@gmail.com>
parents:
0
diff
changeset
|
248 |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
249 |
void |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
250 |
usage() |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
251 |
{ |
17
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
252 |
fprintf(stderr, "pce v0.3 - PCE-HT71 programmer and data downloader\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
253 |
fprintf(stderr, "usage: pce [-n maxsamples] [-t timepersample] [-i] <-d downloadfile | -s>\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
254 |
fprintf(stderr, "Options:\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
255 |
fprintf(stderr, " -i Start measuring now, instead of waiting the manual button.\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
256 |
fprintf(stderr, " -s Program the capture according to '-n' and '-t'\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
257 |
fprintf(stderr, " -d file Download the data captured until now and stop it\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
258 |
fprintf(stderr, " -n maxs Set the maximum number of samples to capture (default 16000)\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
259 |
fprintf(stderr, " -t time Set the number of seconds between samples (default 2)\n"); |
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
260 |
fprintf(stderr, "\nCopyright (C) 2010-2011 Lluis Batlle i Rossell\n"); |
8
897b154201f8
More about the license, shown at program usage show.
viric <viriketo@gmail.com>
parents:
7
diff
changeset
|
261 |
fprintf(stderr, "This program comes with ABSOLUTELY NO WARRANTY.\n"); |
897b154201f8
More about the license, shown at program usage show.
viric <viriketo@gmail.com>
parents:
7
diff
changeset
|
262 |
fprintf(stderr, "This is free software, and you are welcome to redistribute it\n"); |
17
021968512187
Improving the help when run without parameters.
viric <viriketo@gmail.com>
parents:
15
diff
changeset
|
263 |
fprintf(stderr, "under certain conditions; read the COPYING file for details."); |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
264 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
265 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
266 |
int main(int argc, char **argv) |
0 | 267 |
{ |
268 |
int res; |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
269 |
int opt; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
270 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
271 |
config.nsamples = 16000; |
4 | 272 |
config.immediate = 0; |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
273 |
config.time_per_sample = 2; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
274 |
config.download_file = 0; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
275 |
action = HELP; |
4 | 276 |
while ((opt = getopt(argc, argv, "n:d:t:si")) != -1) { |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
277 |
switch (opt) { |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
278 |
case 'n': |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
279 |
config.nsamples = atoi(optarg); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
280 |
break; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
281 |
case 't': |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
282 |
config.time_per_sample = atoi(optarg); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
283 |
break; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
284 |
case 'd': |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
285 |
config.download_file = optarg; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
286 |
action = DOWNLOAD; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
287 |
break; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
288 |
case 's': |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
289 |
action = SET; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
290 |
break; |
4 | 291 |
case 'i': |
292 |
config.immediate = 1; |
|
293 |
break; |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
294 |
default: |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
295 |
usage(); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
296 |
return 1; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
297 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
298 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
299 |
|
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
300 |
if (action == HELP) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
301 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
302 |
usage(); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
303 |
return 0; |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
304 |
} |
0 | 305 |
|
306 |
usb_init(); |
|
307 |
||
308 |
usb_find_busses(); |
|
309 |
usb_find_devices(); |
|
310 |
||
311 |
connect(); |
|
312 |
if (handle == 0) |
|
313 |
{ |
|
314 |
fprintf(stderr, "Cannot find the PCE-HT71\n"); |
|
315 |
return -1; |
|
316 |
} |
|
317 |
||
318 |
res = usb_claim_interface(handle, |
|
319 |
device->config->interface->altsetting->bInterfaceNumber); |
|
320 |
assert(res == 0 && "claim_interface"); |
|
321 |
||
4 | 322 |
if (action == SET) |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
323 |
{ |
4 | 324 |
fprintf(stderr, "Settings: \n"); |
325 |
fprintf(stderr, " Max samples: %i\n", config.nsamples); |
|
326 |
fprintf(stderr, " Time between samples: %i\n", config.time_per_sample); |
|
327 |
fprintf(stderr, " Mode: %s\n", config.immediate ? "immediate" : "manual"); |
|
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
328 |
send_program(); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
329 |
send_config(); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
330 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
331 |
else |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
332 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
333 |
outfile = fopen(config.download_file, "w"); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
334 |
if (outfile != NULL) |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
335 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
336 |
start_download(); |
4 | 337 |
fprintf(stderr, "File \"%s\" written\n", config.download_file); |
2
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
338 |
fclose(outfile); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
339 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
340 |
else |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
341 |
{ |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
342 |
fprintf(stderr, "Error opening file: %s", strerror(errno)); |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
343 |
} |
884635f4a24f
First working a bit version, with usage()
viric <viriketo@gmail.com>
parents:
1
diff
changeset
|
344 |
} |
0 | 345 |
|
346 |
res = usb_release_interface(handle, |
|
347 |
device->config->interface->altsetting->bInterfaceNumber); |
|
348 |
assert(res == 0 && "release_interface"); |
|
349 |
usb_close(handle); |
|
350 |
handle = 0; |
|
351 |
return 0; |
|
352 |
} |