commit 0804c1160dac2f932f4b803b13bd2fdc530fb115 Author: Maurizio Porrato Date: Mon Feb 13 08:20:33 2017 +0000 Initial commit diff --git a/docs/ut61e/howto-dump.txt b/docs/ut61e/howto-dump.txt new file mode 100644 index 0000000..8eaada6 --- /dev/null +++ b/docs/ut61e/howto-dump.txt @@ -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 diff --git a/docs/ut61e/serial-protocol.md b/docs/ut61e/serial-protocol.md new file mode 100644 index 0000000..18c328e --- /dev/null +++ b/docs/ut61e/serial-protocol.md @@ -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 | + diff --git a/samples/ut61e/frame-parser.py b/samples/ut61e/frame-parser.py new file mode 100755 index 0000000..4c6db10 --- /dev/null +++ b/samples/ut61e/frame-parser.py @@ -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:])) + diff --git a/samples/ut61e/sample-data.bin b/samples/ut61e/sample-data.bin new file mode 100644 index 0000000..255fc22 --- /dev/null +++ b/samples/ut61e/sample-data.bin @@ -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 diff --git a/samples/ut61e/sample-data.txt b/samples/ut61e/sample-data.txt new file mode 100644 index 0000000..9170d32 --- /dev/null +++ b/samples/ut61e/sample-data.txt @@ -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 + diff --git a/src/FreeRTOSConfig.h b/src/FreeRTOSConfig.h new file mode 100644 index 0000000..0a9a6b7 --- /dev/null +++ b/src/FreeRTOSConfig.h @@ -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 + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..aca2408 --- /dev/null +++ b/src/Makefile @@ -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 diff --git a/src/wifidmm.c b/src/wifidmm.c new file mode 100644 index 0000000..ceb1074 --- /dev/null +++ b/src/wifidmm.c @@ -0,0 +1,114 @@ +#include + +#include +#include +#include +#include +#include +#include + +#include + +#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: */