VOC Optimation
[owSlave2.git] / tools_cmd / rwOW / main.cpp
1 #define _CRT_SECURE_NO_WARNINGS 1\r
2 extern "C" {\r
3 #include "ownet.h"\r
4 }\r
5 #include <stdio.h>\r
6 #include <stdlib.h>\r
7 #include <string.h>\r
8 \r
9 FILE *fio;\r
10 char s[100], fname[254];\r
11 \r
12 \r
13 SMALLINT ReadDS2430(int portnum, uchar SerialNum[8]) {\r
14         uchar rt = FALSE;\r
15         uchar send_block[145];\r
16         uchar send_cnt = 0, i;\r
17         int address;\r
18         char s[100];\r
19         FILE *f;\r
20         sprintf(s, "%02X%02X%02X%02X%02X%02X%02X%02X.bin", SerialNum[7], SerialNum[6], SerialNum[5], SerialNum[4], SerialNum[3], SerialNum[2], SerialNum[1], SerialNum[0]);\r
21         fprintf(fio, ">14\n");\r
22         send_cnt = 0;\r
23         printf("Read Data MEM  \n");\r
24         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
25         send_block[send_cnt++] = 0xF0;\r
26         send_block[send_cnt++] = 0x00;\r
27         for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF;\r
28         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
29         for (i = 2; i<send_cnt; i++) { printf("%02X ", send_block[i]); fprintf(fio,"%02X ", send_block[i]); }\r
30         printf("\n");\r
31         fprintf(fio, "\n");\r
32         send_cnt = 0;\r
33         printf("Read App MEM  \n");\r
34         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
35         send_block[send_cnt++] = 0xC3;\r
36         send_block[send_cnt++] = 0x00;\r
37         for (i = 0; i<8; i++) send_block[send_cnt++] = 0xFF;\r
38         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
39         for (i = 2; i<send_cnt; i++) { printf("%02X ", send_block[i]); fprintf(fio, "%02X ", send_block[i]); }\r
40         printf("\n");\r
41         fprintf(fio, "\n");\r
42 \r
43         send_cnt = 0;\r
44         printf("Read App State  \n");\r
45         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
46         send_block[send_cnt++] = 0x66;\r
47         for (i = 0; i<1; i++) send_block[send_cnt++] = 0xFF;\r
48         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
49         for (i = 1; i<send_cnt; i++) { printf("%02X ", send_block[i]);  fprintf(fio, "%02X ", send_block[i]); }\r
50         printf("\n");\r
51         fprintf(fio, "\n");\r
52 }\r
53 \r
54 \r
55 SMALLINT ReadDS2433(int portnum, uchar SerialNum[8]) {\r
56         uchar rt = FALSE;\r
57         uchar send_block[145];\r
58         uchar send_cnt = 0, i, j;\r
59         int address;\r
60         send_cnt = 0;\r
61         printf("-----> TEST DS2433 \n");\r
62         fprintf(fio, ">23\n");\r
63 \r
64         send_cnt = 0;\r
65         printf("\nRead MEM ALL \n");\r
66         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
67         send_block[send_cnt++] = 0xF0;\r
68         send_block[send_cnt++] = 0x00;\r
69         send_block[send_cnt++] = 0x00;\r
70         for (j = 0; j<16; j++) {\r
71                 for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF;\r
72                 if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
73                 for (i = j?0:3; i < send_cnt; i++) { printf("%02X ", send_block[i]); fprintf(fio, "%02X ", send_block[i]); }\r
74                 send_cnt = 0;\r
75                 printf("\n");\r
76                 fprintf(fio, "\n");\r
77         }\r
78 \r
79 }\r
80 \r
81 \r
82 int findDev(uchar code) {\r
83         int find = 0;\r
84         fio = fopen(fname, "r");\r
85         while (!feof(fio)) {\r
86                 s[0] = fgetc(fio);\r
87                 if (s[0] == '>') {\r
88                         s[0] = fgetc(fio);\r
89                         s[1] = fgetc(fio);\r
90                         s[2] = 0;\r
91                         uchar w = strtol(s, NULL, 16);\r
92                         if (code ==w) return 1;\r
93                 }\r
94         }\r
95         fclose(fio);\r
96         return 0;\r
97 }\r
98 \r
99 \r
100 \r
101 SMALLINT WriteDS2433(int portnum, uchar SerialNum[8]) {\r
102         uchar rt = FALSE;\r
103         uchar send_block[145];\r
104         uchar send_cnt = 0, i, j;\r
105         int address;\r
106         send_cnt = 0;\r
107         printf("-----> TEST DS2433 \n");\r
108         if (findDev(0x23)) {\r
109                 for (j = 0; j < 16; j++) {\r
110                         for (i = 0; i < 32; i++) {\r
111                                 fscanf(fio, "%02X", &send_block[i + 3]);\r
112                         }\r
113                         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
114                         send_block[0] = 0x0F;\r
115                         send_block[1] = j << 5;\r
116                         send_block[2] = j >> 3;\r
117                         if (!owBlock(portnum, FALSE, send_block, 32 + 3))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
118                         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
119                         send_cnt = 0;\r
120                         send_block[send_cnt++] = 0xAA;\r
121                         for (i = 0; i < 32 + 3; i++) send_block[send_cnt++] = 0xFF;\r
122                         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
123                         for (i = 0; i < send_cnt; i++) { printf("%02X ", send_block[i]); }\r
124                         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
125                         send_cnt = 0;\r
126                         send_block[send_cnt++] = 0x55;\r
127                         send_cnt += 3;\r
128                         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
129                         msDelay(100);\r
130                         printf("\n");\r
131                 }\r
132         \r
133         }\r
134         fclose(fio);\r
135         return 0;\r
136 \r
137 \r
138 }\r
139 \r
140 \r
141 SMALLINT WriteDS2430(int portnum, uchar SerialNum[8]) {\r
142         uchar rt = FALSE;\r
143         uchar send_block[145];\r
144         uchar send_cnt = 0, i, j;\r
145         int address;\r
146         send_cnt = 0;\r
147         printf("-----> TEST DS2430 \n");\r
148         if (findDev(0x14)) {\r
149                 for (i = 0; i < 32; i++) {\r
150                         fscanf(fio, "%02X", &send_block[i + 2]);\r
151                 }\r
152                 if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
153                 send_block[0] = 0x0F;\r
154                 send_block[1] = 0;\r
155                 if (!owBlock(portnum, FALSE, send_block, 32 + 2))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
156                 if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
157                 send_cnt = 0;\r
158                 send_block[send_cnt++] = 0xAA;\r
159                 send_block[send_cnt++] = 0x00;\r
160                 for (i = 0; i < 32 + 2; i++) send_block[send_cnt++] = 0xFF;\r
161                 if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
162                 for (i = 0; i < send_cnt; i++) { printf("%02X ", send_block[i]); }\r
163                 if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
164                 send_cnt = 0;\r
165                 send_block[send_cnt++] = 0x55;\r
166                 send_block[send_cnt++] = 0xA5;\r
167                 if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
168                 msDelay(100);\r
169                 printf("\n");\r
170         }\r
171         fclose(fio);\r
172 \r
173 }\r
174 /*\r
175 SMALLINT WriteDS2430(int portnum, uchar SerialNum[8], const char *fname) {\r
176         uchar rt = FALSE;\r
177         uchar send_block[145];\r
178         uchar send_cnt = 0, i;\r
179         int address;\r
180         uchar readbl[64];\r
181         FILE *f;\r
182         f = fopen(fname, "rb");\r
183         fread(readbl, 1, 32 + 16, f);\r
184         fclose(f);\r
185         ResetDS2430(portnum, SerialNum);\r
186         msDelay(1000);\r
187         send_cnt = 0;\r
188         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
189         send_block[send_cnt++] = 0x0F;\r
190         send_block[send_cnt++] = 0x00;\r
191         for (i = 0; i<32; i++) send_block[send_cnt++] = readbl[i + 8];\r
192         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
193         send_cnt = 0;\r
194         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
195         send_block[send_cnt++] = 0xAA;\r
196         send_block[send_cnt++] = 0x00;\r
197         for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF;\r
198         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
199         for (i = 0; i<send_cnt; i++) { printf("%02X ", send_block[i]); if ((i - 1) % 16 == 0) printf("\n"); }\r
200 \r
201         send_cnt = 0;\r
202         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
203         send_block[send_cnt++] = 0x55;\r
204         send_block[send_cnt++] = 0xA5;\r
205         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
206         msDelay(10);\r
207 \r
208         send_cnt = 0;\r
209         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
210         send_block[send_cnt++] = 0xF0;\r
211         send_block[send_cnt++] = 0x00;\r
212         for (i = 0; i<32; i++) send_block[send_cnt++] = 0xFF;\r
213         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
214         for (i = 0; i<send_cnt; i++) { printf("%02X ", send_block[i]); if ((i - 1) % 16 == 0) printf("\n"); }\r
215 \r
216         send_cnt = 0;\r
217         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
218         send_block[send_cnt++] = 0x99;\r
219         send_block[send_cnt++] = 0x00;\r
220         for (i = 0; i<8; i++) send_block[send_cnt++] = readbl[i + 8 + 32];\r
221         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
222 \r
223         send_cnt = 0;\r
224         if (!owAccess(portnum)) { printf("ERROR MATCH ROM \n"); return 1; }\r
225         send_block[send_cnt++] = 0x5A;\r
226         send_block[send_cnt++] = 0xA5;\r
227         if (!owBlock(portnum, FALSE, send_block, send_cnt))  { printf("ERROR RUN COMMAND \n"); return 1; }\r
228         msDelay(10);\r
229         SetIDDS2430(portnum, SerialNum, readbl);\r
230 \r
231 \r
232 }\r
233 */\r
234 \r
235 \r
236 \r
237 unsigned char conf2(const char *s) {\r
238         unsigned char b = 0;\r
239         for (int i = 0; i < 2; i++) {\r
240                 b = b * 16;\r
241                 if ((s[i] >= '0') && (s[i] <= '9')) {\r
242                         b += s[i] - '0';\r
243                 } else\r
244                 if ((s[i] >= 'A') && (s[i] <= 'F')) {\r
245                         b += s[i] - 'A'+10;\r
246                 } else\r
247                 if ((s[i] >= 'a') && (s[i] <= 'f')) {\r
248                         b += s[i] - 'a'+10;\r
249                 }\r
250                 \r
251         }\r
252         return b;\r
253 }\r
254 \r
255 void strcpys(char *s, const char* d,bool up) {\r
256         if (strlen(d) > 7990) {\r
257                 strncpy(s, d, 7990);\r
258                 s[200] = 0;\r
259         }\r
260         else strcpy(s, d);\r
261         if (up) {\r
262                 for (int i = 0; i<strlen(s); i++)\r
263                         if ((s[i] >= 'a') && (s[i] <= 'z'))\r
264                                 s[i] += 'A' - 'a';\r
265         }\r
266 }\r
267 \r
268 int main(int argc, char *argv[]) {\r
269         uchar SNum[8];\r
270         int rslt, cnt, i;\r
271         uchar send_block[256];\r
272         uchar send_cnt = 0;\r
273         int portnum;\r
274         char adapter[20];\r
275         int found = 0;\r
276         int rw = 0;\r
277         int err = 0;\r
278         char s[8000];\r
279         int adt = 0;\r
280         int mod = 0;\r
281         if (argc >= 2) {\r
282                 strcpys(s, argv[1],true);\r
283                 \r
284                 \r
285                 if (strncmp(s,"USB",3)==0) {adt = 6;}\r
286                 if (strncmp(s, "COM", 3) == 0) { adt = 5; }\r
287                 if (adt != 0) {\r
288                         strcpy(s, argv[1] + 3);\r
289                         sprintf(adapter, "{%s,%i}\0",s,adt);\r
290                         printf("Open Port %s\n", argv[1]);\r
291                         if ((portnum = owAcquireEx(adapter)) < 0) {\r
292                                 printf("ERROR \n", adt);\r
293                         }\r
294                         else mod = 1;\r
295 \r
296                 } \r
297                 if ((argc == 2) && (mod == 1)) mod = 2;\r
298                 if (argc > 2) {\r
299                         strcpys(s, argv[2],true);\r
300                         if (strncmp(s, "DC", 2) == 0) {\r
301                                 if (argc > 3) {\r
302                                         if (strlen(argv[3])>=16)\r
303                                         for (int i = 0; i < 16; i += 2) {\r
304                                                 SNum[7 - (i / 2)] = conf2(argv[3] + i);\r
305 \r
306                                         }\r
307                                         printf("Select: %02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]);\r
308                                         mod = 3;\r
309                                 }\r
310 \r
311                         }\r
312                 }\r
313                 if ((mod == 3) && (argc>4)) {\r
314                         strcpys(s, argv[4], true);\r
315                         mod = 4;\r
316                 }\r
317         \r
318         }\r
319 \r
320         if (mod == 2) {\r
321                 rslt = owFirst(portnum, TRUE, FALSE);\r
322                 cnt = 0;\r
323                 while (rslt) {\r
324                         cnt++;\r
325                         owSerialNum(portnum, &SNum[0], TRUE);\r
326                         printf("%02X%02X%02X%02X%02X%02X%02X%02X\n", SNum[7], SNum[6], SNum[5], SNum[4], SNum[3], SNum[2], SNum[1], SNum[0]);\r
327                         //                      fprintf(ft,"%02X%02X%02X%02X%02X%02X%02X%02X\n",SNum[7],SNum[6],SNum[5],SNum[4],SNum[3],SNum[2],SNum[1],SNum[0]);\r
328 /*                      switch (SNum[0]) {\r
329 \r
330 \r
331                                 case 0x14: {\r
332                                         //TestDS2430(portnum,&SNum[0]);\r
333                                         //scanf("%i",&i);\r
334                                         //ResetDS2430(portnum,&SNum[0]);\r
335                                         //uchar id[]={0x14,0xF5 ,0xEA ,0x24 ,0x06 ,0x00 ,0x00 ,0x5E};\r
336                                         //SetIDDS2430(portnum,&SNum[0],id);\r
337                                         if (rw) WriteDS2430(portnum, &SNum[0]); else ReadDS2430(portnum, &SNum[0]);\r
338                                         //WriteDS2430(portnum,&SNum[0],"5E00000624EAF514.bin");\r
339                                         break;\r
340                                 }\r
341                                 case 0x23: {\r
342                                         //TestDS2433(portnum,&SNum[0]);\r
343                                         //TestDS2433_reset(portnum,&SNum[0]);\r
344                                         //scanf("%i",&i);\r
345                                         if (rw) WriteDS2433(portnum, &SNum[0]); else ReadDS2433(portnum, &SNum[0]);\r
346                                         break;\r
347                                 }\r
348                                 }*/\r
349                         rslt = owNext(portnum, TRUE, FALSE);\r
350                 }\r
351         }\r
352         if (mod == 4) {\r
353                 owSerialNum(portnum, SNum, FALSE);\r
354                 strcat(s, "_R");\r
355                 int len = strlen(s);\r
356                 int i = 0;\r
357                 while (i < len) {\r
358                         if (s[i] == '_') {\r
359                                 if (s[i + 1] == 'R') {\r
360                                         if (owAccess(portnum)) {\r
361                                                 if (owBlock(portnum, FALSE, send_block, send_cnt)) {\r
362                                                         for (int j = 0; j < send_cnt; j++) {\r
363                                                                 printf("%02X", send_block[j]);\r
364                                                         }\r
365                                                         printf("\n");\r
366                                                 }\r
367                                                 else printf("ERROR RESET\n");\r
368                                         }\r
369                                         else printf("ERROR SEND\n");\r
370                                         send_cnt = 0;\r
371                                 }\r
372                                 if (s[i + 1] == 'P') {\r
373                                         if (i + 2 < len) {\r
374                                                 i += 2;\r
375                                                 msDelay(conf2(s + i));\r
376                                                 \r
377                                         }\r
378                                 }\r
379                         }\r
380                         else {\r
381                                 send_block[send_cnt++] = conf2(s + i);\r
382                         }\r
383                         i += 2;\r
384                 \r
385                         \r
386                 }\r
387         }\r
388         if (mod>0) owRelease(portnum);\r
389         \r
390         return 0;\r
391 }