Initial commit

This commit is contained in:
Maurizio Porrato 2017-02-13 08:20:33 +00:00
commit 0804c1160d
8 changed files with 1288 additions and 0 deletions

View File

@ -0,0 +1,2 @@
strace -P /dev/ttyUSB0 -e read=12 -xx -f wine UT61E.exe >/tmp/ut61e-dump.txt 2>&1
for byte in `grep '^ |' /tmp/ut61e-dump.txt | cut -c 11-60` ; do echo $byte ; done | xargs echo | tr -d " " | sed 's/0d0a/0d0a\n/g' > sample-data.txt

View File

@ -0,0 +1,106 @@
# Cyrustek ES51922 serial protocol
The information in this document are taken from the [Cyrustek ES51922 datasheet](http://www.cyrustek.com.tw/spec/ES51922.pdf).
## Serial signaling
19230 baud, 7 bits frames, odd parity, 1 stop bit.
## Packet format
14 frames, including the line ending markers CR and LF.
| 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9| 10| 11|12|13|
|-----|------|------|------|------|------|--------|------|-------|-------|-------|-------|--|--|
|Range|Digit4|Digit3|Digit2|Digit1|Digit0|Function|Status|Option1|Option2|Option3|Option4|CR|LF|
## Fields
### Range
| Code | V | 2-range auto A | 22A | Manual A | ADP | Ω | Frequency | Capacitor |
|:---------:|---------:|:-------------------|-------:|---------:|:-----:|--------:|----------:|----------:|
| 011 0000 | 2.2000V | Lower range (IVSL) | 22.000A| 2.2000A | ADP4 | 220.00Ω| 22.00Hz | 22.000nF |
| 011 0001 | 22.000V | Higher range (IVSH)| | 22.000A | ADP3 | 2.2000KΩ| 220.0Hz | 220.00nF |
| 011 0010 | 220.00V | | | 220.00A | ADP2 | 22.000KΩ| | 2.2000µF |
| 011 0011 | 2200.0V | | | 2200.0A | ADP1 | 220.00KΩ| 22.000KHz | 22.000µF |
| 011 0100 | 220.00mV | | | 22000A | ADP0 | 2.2000MΩ| 220.00KHz | 220.00µF |
| 011 0101 | | | | | | 22.000MΩ| 2.2000MHz | 2.2000mF |
| 011 0110 | | | | | | 220.00MΩ| 22.000MHz | 22.000mF |
| 011 0111 | | | | | | | 220.00MHz | 220.00mF |
### Digits
| Code | Digit |
|:--------:|:-----:|
| 011 0000 | 0 |
| 011 0001 | 1 |
| 011 0010 | 2 |
| 011 0011 | 3 |
| 011 0100 | 4 |
| 011 0101 | 5 |
| 011 0110 | 6 |
| 011 0111 | 7 |
| 011 1000 | 8 |
| 011 1001 | 9 |
### Function
| Code | Mode | VBAR=0 | VBAR=1 |
|:--------:|:--------------|:--------------:|:-------------------:|
| 011 0000 | 22A Current | Don't care | Don't care |
| 011 0001 | Diode | Don't care | Don't care |
| 011 0010 | Frequency | Don't care | Don't care |
| 011 0011 | Ω | Don't care | Don't care |
| 011 0100 | Temperature | Don't care | Don't care |
| 011 0101 | Continuity | Don't care | Don't care |
| 011 0110 | Capacitance | Don't care | Don't care |
| 011 0111 | ? | ? | ? |
| 011 1000 | ? | ? | ? |
| 011 1001 |Manual Current | Don't care | Don't care |
| 011 1010 | ? | ? | ? |
| 011 1011 | Voltage | Don't care | Don't care |
| 011 1100 | ? | ? | ? |
| 011 1101 |Auto µA Current|Auto µA Current |Auto 220.00A/2200.0A |
| 011 1110 | ADP | Don't care | Don't care |
| 011 1111 |Auto mA Current|Auto mA Current |Auto 22.000A/220.00A |
### Status
| Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
| 0 | 1 | 1 | Judge | Sign | BATT | OL |
### Options
#### Option 1
| Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
| 0 | 1 | 1 | MAX | MIN | REL | RMR |
#### Option 2
| Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
| 0 | 1 | 1 | UL | Pmax | Pmin | 0 |
#### Option 3
| Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
| 0 | 1 | 1 | DC | AC | AUTO | VAHZ |
#### Option 4
| Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|
| 0 | 1 | 1 | 0 | VBAR | Hold | LPF |

42
samples/ut61e/frame-parser.py Executable file
View File

@ -0,0 +1,42 @@
#!/usr/bin/env python3
UNITS = {
0b0110000: 'A', # 22A
0b0110001: 'V', # Diode
0b0110010: 'Hz',
0b0110011: 'Ω',
0b0110100: '°C',
0b0110101: 'Ω', # Continuity
0b0110110: 'F',
0b0111001: 'A', # Manual
0b0111011: 'V',
0b0111101: 'µA',
0b0111110: 'ADP', # ???
0b0111111: 'mA'}
def parse(f):
for frame in f.readlines():
data = frame.strip()
if len(data) != 12:
continue
digits = data[1:6]
print(digits+UNITS[ord(data[6])])
def main(argv):
for fn in argv:
with open(fn, 'r') as f:
parse(f)
else:
import sys
parse(sys.stdin)
return 0
if __name__ == '__main__':
import sys
sys.exit(main(sys.argv[1:]))

View File

@ -0,0 +1,501 @@
000000;000:0
000000;000:0
000089;400:0
000066;000:0
000010;000:0
000003;400:0
000013;400:0
000063;400:0
000169;400:0
000423;400:0
000367;000:0
000262;400:0
000189;000:0
000235;000:0
000006;000:0
000073;000:0
000000;000:0
000000;000:0
000000;000:0
000000;000:0
000000;000:0
000000;000:0
000206;000:0
000408;400:0
000121;000:0
000403;000:0
000005;400:0
100000;000;0
000000;000;0
000000;000;0
000000;000;0
000000;000;0
000000;80890
000000;80890
000000;80890
000012;000:0
000009;400:0
000004;400:0
000051;00060
000051;00060
000048;00060
000001;400:0
000001;400:0
000005;000:0
000019;000:0
000009;400:0
000009;400:0
000048;40082
000015;40082
000007;40082
000003;40082
000002;40082
000008;40082
000009;40082
000005;40082
000002;40082
000006;00082
000000;000:0
000061;400:0
000003;400:0
000003;40082
000003;40082
000003;40082
000003;40082
000003;400:0
000001;400:0
000158;000:0
000008;400:0
000008;400:0
000003;400:0
000003;400:0
000001;400:0
000001;400:0
000067;400:0
000008;400:0
000008;400:0
000010;000:0
000009;40082
000163;40082
000014;40082
000009;400:0
000018;400:0
000003;40080
100000;40080
200000;00080
000003;40080
000031;40080
000018;40080
000006;40080
000019;00080
000070;40080
100019;40080
100001;40080
100000;40080
100000;40080
100000;40080
100000;40080
200000;00080
200000;00080
200000;00080
200000;00080
200000;00080
200000;00080
200000;00080
200000;00080
300000;00080
300000;00080
300000;00080
300000;00080
300000;00080
300000;00080
300000;00080
000003;40080
000003;40080
000000;00080
000000;00080
000002;00080
000014;00080
000004;02080
000004;02080
000000;42080
000000;42080
000778;02080
000151;42080
000129;42080
000146;42080
000134;42080
000070;42080
000004;42080
000004;42080
000094;42080
000242;42080
000211;42080
000156;42080
000202;40080
000094;40080
000148;40080
000154;40080
000352;40080
000165;40080
000203;42080
000167;42080
000145;40080
000145;40080
000032;00080
000120;40080
000121;40080
000116;40080
000120;40080
000120;40080
000003;00080
000003;00080
000006;00080
000006;00080
000317;40180
000943;00180
000305;40180
000941;00080
000000;00280
000189;40480
000215;40280
000031;00480
000793;40280
000010;00480
000686;40280
000019;00480
000607;40280
000273;00480
001253;40280
000219;00480
001189;40280
000450;00480
001136;40280
000407;00480
001088;40280
000457;00480
001044;40280
000467;00480
001004;40280
000000;00080
000000;00080
000001;00080
000045;40080
000045;00080
000100;00080
000397;40080
000066;40080
422580;10080
422580;10080
422580;10080
422580;10080
422580;10080
422580;10080
422580;10080
422580;10080
100000;000;0
000000;000;0
000000;000;0
000000;000;0
000000;000;0
000000;80890
000000;80890
000000;80890
422580;50080
422580;50080
422580;50080
422580;50080
422580;50080
422580;10040
409534;00040
403979;00040
401999;00040
401412;00040
401086;00040
402516;00040
401337;00040
401031;00040
401988;00040
401197;00040
422580;10040
422580;10080
422580;10080
422580;10080
422580;10080
422580;50080
422580;50080
422580;50080
420130;40080
422580;50080
622580310020
622580310020
622580310020
603039300020
502268300020
509992300020
507258300020
507357300020
508314300020
508895300020
509374300020
000744300020
000011300020
000011300020
000010300020
000010300020
000010300020
000010300020
000011300020
000011302000
000011302000
000011302000
000011302000
000011302000
000011302000
022580312000
022580312000
022580312000
022580312000
022580312000
122580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
619461300020
602447300020
517683300020
518096300020
518619300020
518873300020
519079300020
519468300020
519283300020
519496300020
520121300020
518658300020
518144300020
518702300020
518197300020
518254300020
518754300020
518813300020
519149300020
607433300020
612632300020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
022580510000
022580510000
022580510000
022580510000
000029500000
000014500000
000014500000
000014500000
000011500000
022580510000
022580510000
022580510000
022580510000
000019500000
000012500000
000012500000
000012500000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
022580510000
019000110000
019000110000
019000110000
019000110000
000004100000
000004100000
000003100000
019000110000
019000110000
019000110000
019000110000
000004100000
019000110000
019000110000
019000110000
622580310020
622580310020
622580310020
622580310020
622580310020
622580310020
000282600020
000282600020
000381600020
000588600020
000679600020
000742600020
000801600020
000857600020
000623600020
000809600020
000682600020
001030600020
001151600020
001225600020
001268600020
001287600020
001281600020
000290600020
000284600020
000303600020
000443600020
000326600020
000289600020
000289600020
000288600020
000288600020
000288600020
000288600020
000289600020
000289600020
000289600020
000292600020
000607600020
100000200020
000000200020
000000200020
000000200020
000000200020
000000280800
000000280800
000000200020
000000200020
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
100000=000;0
000000=000;0
000000=000;0
000000=000:0
000000=000:0
000000=000:0
000046=00060
000046=00060
000043=00060
000043=00060
000040=00060
000038=00060
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000=000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000?000:0
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000034000040
000034000040
000032000040
000032000040
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000000080
000000?000:0
000000?000:0
000000=000:0
000000=000:0
100000200020
000000200020
000320600020
000320600020
000322600020
000738600020
622580310020
622580310020
622580310020
403761;00080
402732;40080
417101;40080
422580;50080
422580;50080
422580;50080
000026;400:0
000007;400:0
000002;400:0
000002;400:0
000057;400:0

View File

@ -0,0 +1,502 @@
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303038393b3430303a300d0a
3030303036363b3030303a300d0a
3030303031303b3030303a300d0a
3030303030333b3430303a300d0a
3030303031333b3430303a300d0a
3030303036333b3430303a300d0a
3030303136393b3430303a300d0a
3030303432333b3430303a300d0a
3030303336373b3030303a300d0a
3030303236323b3430303a300d0a
3030303138393b3030303a300d0a
3030303233353b3030303a300d0a
3030303030363b3030303a300d0a
3030303037333b3030303a300d0a
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303030303b3030303a300d0a
3030303230363b3030303a300d0a
3030303430383b3430303a300d0a
3030303132313b3030303a300d0a
3030303430333b3030303a300d0a
3030303030353b3430303a300d0a
3130303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b38303839300d0a
3030303030303b38303839300d0a
3030303030303b38303839300d0a
3030303031323b3030303a300d0a
3030303030393b3430303a300d0a
3030303030343b3430303a300d0a
3030303035313b30303036300d0a
3030303035313b30303036300d0a
3030303034383b30303036300d0a
3030303030313b3430303a300d0a
3030303030313b3430303a300d0a
3030303030353b3030303a300d0a
3030303031393b3030303a300d0a
3030303030393b3430303a300d0a
3030303030393b3430303a300d0a
3030303034383b34303038320d0a
3030303031353b34303038320d0a
3030303030373b34303038320d0a
3030303030333b34303038320d0a
3030303030323b34303038320d0a
3030303030383b34303038320d0a
3030303030393b34303038320d0a
3030303030353b34303038320d0a
3030303030323b34303038320d0a
3030303030363b30303038320d0a
3030303030303b3030303a300d0a
3030303036313b3430303a300d0a
3030303030333b3430303a300d0a
3030303030333b34303038320d0a
3030303030333b34303038320d0a
3030303030333b34303038320d0a
3030303030333b34303038320d0a
3030303030333b3430303a300d0a
3030303030313b3430303a300d0a
3030303135383b3030303a300d0a
3030303030383b3430303a300d0a
3030303030383b3430303a300d0a
3030303030333b3430303a300d0a
3030303030333b3430303a300d0a
3030303030313b3430303a300d0a
3030303030313b3430303a300d0a
3030303036373b3430303a300d0a
3030303030383b3430303a300d0a
3030303030383b3430303a300d0a
3030303031303b3030303a300d0a
3030303030393b34303038320d0a
3030303136333b34303038320d0a
3030303031343b34303038320d0a
3030303030393b3430303a300d0a
3030303031383b3430303a300d0a
3030303030333b34303038300d0a
3130303030303b34303038300d0a
3230303030303b30303038300d0a
3030303030333b34303038300d0a
3030303033313b34303038300d0a
3030303031383b34303038300d0a
3030303030363b34303038300d0a
3030303031393b30303038300d0a
3030303037303b34303038300d0a
3130303031393b34303038300d0a
3130303030313b34303038300d0a
3130303030303b34303038300d0a
3130303030303b34303038300d0a
3130303030303b34303038300d0a
3130303030303b34303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3230303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3330303030303b30303038300d0a
3030303030333b34303038300d0a
3030303030333b34303038300d0a
3030303030303b30303038300d0a
3030303030303b30303038300d0a
3030303030323b30303038300d0a
3030303031343b30303038300d0a
3030303030343b30323038300d0a
3030303030343b30323038300d0a
3030303030303b34323038300d0a
3030303030303b34323038300d0a
3030303737383b30323038300d0a
3030303135313b34323038300d0a
3030303132393b34323038300d0a
3030303134363b34323038300d0a
3030303133343b34323038300d0a
3030303037303b34323038300d0a
3030303030343b34323038300d0a
3030303030343b34323038300d0a
3030303039343b34323038300d0a
3030303234323b34323038300d0a
3030303231313b34323038300d0a
3030303135363b34323038300d0a
3030303230323b34303038300d0a
3030303039343b34303038300d0a
3030303134383b34303038300d0a
3030303135343b34303038300d0a
3030303335323b34303038300d0a
3030303136353b34303038300d0a
3030303230333b34323038300d0a
3030303136373b34323038300d0a
3030303134353b34303038300d0a
3030303134353b34303038300d0a
3030303033323b30303038300d0a
3030303132303b34303038300d0a
3030303132313b34303038300d0a
3030303131363b34303038300d0a
3030303132303b34303038300d0a
3030303132303b34303038300d0a
3030303030333b30303038300d0a
3030303030333b30303038300d0a
3030303030363b30303038300d0a
3030303030363b30303038300d0a
3030303331373b34303138300d0a
3030303934333b30303138300d0a
3030303330353b34303138300d0a
3030303934313b30303038300d0a
3030303030303b30303238300d0a
3030303138393b34303438300d0a
3030303231353b34303238300d0a
3030303033313b30303438300d0a
3030303739333b34303238300d0a
3030303031303b30303438300d0a
3030303638363b34303238300d0a
3030303031393b30303438300d0a
3030303630373b34303238300d0a
3030303237333b30303438300d0a
3030313235333b34303238300d0a
3030303231393b30303438300d0a
3030313138393b34303238300d0a
3030303435303b30303438300d0a
3030313133363b34303238300d0a
3030303430373b30303438300d0a
3030313038383b34303238300d0a
3030303435373b30303438300d0a
3030313034343b34303238300d0a
3030303436373b30303438300d0a
3030313030343b34303238300d0a
3030303030303b30303038300d0a
3030303030303b30303038300d0a
3030303030313b30303038300d0a
3030303034353b34303038300d0a
3030303034353b30303038300d0a
3030303130303b30303038300d0a
3030303339373b34303038300d0a
3030303036363b34303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3130303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b3030303b300d0a
3030303030303b38303839300d0a
3030303030303b38303839300d0a
3030303030303b38303839300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b31303034300d0a
3430393533343b30303034300d0a
3430333937393b30303034300d0a
3430313939393b30303034300d0a
3430313431323b30303034300d0a
3430313038363b30303034300d0a
3430323531363b30303034300d0a
3430313333373b30303034300d0a
3430313033313b30303034300d0a
3430313938383b30303034300d0a
3430313139373b30303034300d0a
3432323538303b31303034300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b31303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432303133303b34303038300d0a
3432323538303b35303038300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3630333033393330303032300d0a
3530323236383330303032300d0a
3530393939323330303032300d0a
3530373235383330303032300d0a
3530373335373330303032300d0a
3530383331343330303032300d0a
3530383839353330303032300d0a
3530393337343330303032300d0a
3030303734343330303032300d0a
3030303031313330303032300d0a
3030303031313330303032300d0a
3030303031303330303032300d0a
3030303031303330303032300d0a
3030303031303330303032300d0a
3030303031303330303032300d0a
3030303031313330303032300d0a
3030303031313330323030300d0a
3030303031313330323030300d0a
3030303031313330323030300d0a
3030303031313330323030300d0a
3030303031313330323030300d0a
3030303031313330323030300d0a
3032323538303331323030300d0a
3032323538303331323030300d0a
3032323538303331323030300d0a
3032323538303331323030300d0a
3032323538303331323030300d0a
3132323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3631393436313330303032300d0a
3630323434373330303032300d0a
3531373638333330303032300d0a
3531383039363330303032300d0a
3531383631393330303032300d0a
3531383837333330303032300d0a
3531393037393330303032300d0a
3531393436383330303032300d0a
3531393238333330303032300d0a
3531393439363330303032300d0a
3532303132313330303032300d0a
3531383635383330303032300d0a
3531383134343330303032300d0a
3531383730323330303032300d0a
3531383139373330303032300d0a
3531383235343330303032300d0a
3531383735343330303032300d0a
3531383831333330303032300d0a
3531393134393330303032300d0a
3630373433333330303032300d0a
3631323633323330303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3030303032393530303030300d0a
3030303031343530303030300d0a
3030303031343530303030300d0a
3030303031343530303030300d0a
3030303031313530303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3030303031393530303030300d0a
3030303031323530303030300d0a
3030303031323530303030300d0a
3030303031323530303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3032323538303531303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3030303030343130303030300d0a
3030303030343130303030300d0a
3030303030333130303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3030303030343130303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3031393030303131303030300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3030303238323630303032300d0a
3030303238323630303032300d0a
3030303338313630303032300d0a
3030303538383630303032300d0a
3030303637393630303032300d0a
3030303734323630303032300d0a
3030303830313630303032300d0a
3030303835373630303032300d0a
3030303632333630303032300d0a
3030303830393630303032300d0a
3030303638323630303032300d0a
3030313033303630303032300d0a
3030313135313630303032300d0a
3030313232353630303032300d0a
3030313236383630303032300d0a
3030313238373630303032300d0a
3030313238313630303032300d0a
3030303239303630303032300d0a
3030303238343630303032300d0a
3030303330333630303032300d0a
3030303434333630303032300d0a
3030303332363630303032300d0a
3030303238393630303032300d0a
3030303238393630303032300d0a
3030303238383630303032300d0a
3030303238383630303032300d0a
3030303238383630303032300d0a
3030303238383630303032300d0a
3030303238393630303032300d0a
3030303238393630303032300d0a
3030303238393630303032300d0a
3030303239323630303032300d0a
3030303630373630303032300d0a
3130303030303230303032300d0a
3030303030303230303032300d0a
3030303030303230303032300d0a
3030303030303230303032300d0a
3030303030303230303032300d0a
3030303030303238303830300d0a
3030303030303238303830300d0a
3030303030303230303032300d0a
3030303030303230303032300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3130303030303d3030303b300d0a
3030303030303d3030303b300d0a
3030303030303d3030303b300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303034363d30303036300d0a
3030303034363d30303036300d0a
3030303034333d30303036300d0a
3030303034333d30303036300d0a
3030303034303d30303036300d0a
3030303033383d30303036300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303033343030303034300d0a
3030303033343030303034300d0a
3030303033323030303034300d0a
3030303033323030303034300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303030303038300d0a
3030303030303f3030303a300d0a
3030303030303f3030303a300d0a
3030303030303d3030303a300d0a
3030303030303d3030303a300d0a
3130303030303230303032300d0a
3030303030303230303032300d0a
3030303332303630303032300d0a
3030303332303630303032300d0a
3030303332323630303032300d0a
3030303733383630303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3632323538303331303032300d0a
3430333736313b30303038300d0a
3430323733323b34303038300d0a
3431373130313b34303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3432323538303b35303038300d0a
3030303032363b3430303a300d0a
3030303030373b3430303a300d0a
3030303030323b3430303a300d0a
3030303030323b3430303a300d0a
3030303035373b3430303a300d0a

12
src/FreeRTOSConfig.h Normal file
View File

@ -0,0 +1,12 @@
/* Terminal FreeRTOSConfig overrides.
This is intended as an example of overriding some of the default FreeRTOSConfig settings,
which are otherwise found in FreeRTOS/Source/include/FreeRTOSConfig.h
*/
/* The serial driver depends on counting semaphores */
#define configUSE_COUNTING_SEMAPHORES 1
/* Use the defaults for everything else */
#include_next<FreeRTOSConfig.h>

9
src/Makefile Normal file
View File

@ -0,0 +1,9 @@
# Makefile for access_point example
PROGRAM=wifidmm
EXTRA_COMPONENTS=extras/dhcpserver
FLASH_SIZE=32
include /opt/esp-open-rtos/common.mk
pretty:
astyle --style=google *.c && $(RM) *.orig

114
src/wifidmm.c Normal file
View File

@ -0,0 +1,114 @@
#include <string.h>
#include <espressif/esp_common.h>
#include <esp/uart.h>
#include <FreeRTOS.h>
#include <task.h>
#include <queue.h>
#include <dhcpserver.h>
#include <lwip/api.h>
#define TIME_MS(ms) ((ms) / portTICK_PERIOD_MS)
void panic() {
printf("\n\n*** PANIC! ***\n");
for (;;);
}
/* This task ensures the network connection is up.
* If the network has not been configured yet,
* setup an AP with captive portal to allow
* network configuration.
*/
void NetworkConnectionTask(void *p) {
struct sdk_softap_config apconf;
struct sdk_station_config staconf;
uint8_t mac[6];
if (1 || !sdk_wifi_station_get_config(&staconf)) {
/* Station mode not configured: fallback to SoftAP configuration */
printf("sdk_wifi_station_get_config() failed\n");
if (!sdk_wifi_softap_get_config(&apconf)) {
/* SoftAP mode not configured: initialize default configuration */
printf("sdk_wifi_softap_get_config() failed\n");
sdk_wifi_get_macaddr(SOFTAP_IF, mac);
sprintf((char *)apconf.ssid, "UT61e-%02x%02x%02x", mac[3], mac[4], mac[5]);
apconf.ssid_len = strlen((char *)apconf.ssid);
apconf.channel = 1; /* TODO: auto channel selection? */
apconf.authmode = AUTH_OPEN;
apconf.ssid_hidden = 0;
apconf.max_connection = 4;
apconf.beacon_interval = 100;
sdk_wifi_softap_set_config(&apconf);
} else {
sdk_wifi_set_opmode(SOFTAP_MODE);
printf("SoftAP config:\n");
printf("SSID: %s\n", apconf.ssid);
printf("Password: %s\n", apconf.password);
printf("Channel: %d\n", apconf.channel);
printf("Authmode: %d\n", apconf.authmode);
}
} else {
sdk_wifi_set_opmode(STATION_MODE);
sdk_wifi_station_connect();
printf("Station config:\n");
printf("SSID: %s\n", staconf.ssid);
printf("Password: %s\n", staconf.password);
printf("BSSID: %s\n", staconf.bssid);
printf("BSSID set: %d\n", staconf.bssid_set);
}
uint8_t st;
for (;;) {
switch (st = sdk_wifi_station_get_connect_status()) {
case STATION_IDLE:
printf("IDLE\n");
break;
case STATION_CONNECTING:
printf("CONNECTING\n");
break;
case STATION_WRONG_PASSWORD:
printf("WRONG_PASSWORD\n");
break;
case STATION_NO_AP_FOUND:
printf("NO_AP_FOUND\n");
break;
case STATION_CONNECT_FAIL:
printf("CONNECT_FAIL\n");
break;
case STATION_GOT_IP:
printf("GOT_IP\n");
break;
default:
printf("UNEXPECTED status: %d\n", st);
}
vTaskDelay(TIME_MS(750));
}
}
/* This task continuosly listen for incoming data
* on the UART line, parses the packets and feeds
* the meter readings to the network shipping task
* discarding invalid packets
*/
void SerialDataCollectionTask(void *p) {
for (;;)
vTaskDelay(TIME_MS(5000));
}
/* This task sends parsed measurements to the network */
void MeasurementShippingTask(void *p) {
for (;;)
vTaskDelay(TIME_MS(5000));
}
void user_init(void) {
uart_set_baud(0, 115200);
printf("SDK version:%s\n", sdk_system_get_sdk_version());
xTaskCreate(NetworkConnectionTask, "NetworkConnection", 512, NULL, 1, NULL);
xTaskCreate(SerialDataCollectionTask, "SerialDataCollection", 512, NULL, 2, NULL);
xTaskCreate(MeasurementShippingTask, "MeasurementShipping", 512, NULL, 1, NULL);
}
/* vim: set et ai ts=4 sw=4: */