Skip to content

Commit 0056717

Browse files
authored
auto_analyse_raw_data Add kXxMsbFirst to easy change MSBFirst for the full protocol (#2143)
1 parent 5406737 commit 0056717

File tree

2 files changed

+54
-34
lines changed

2 files changed

+54
-34
lines changed

tools/auto_analyse_raw_data.py

+7-4
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def add_data_code(self, bin_str, name="", footer=True):
105105
code.append(f" // Data Section #{self.section_count}")
106106
code.append(f" // e.g. data = 0x{int(bin_str, 2):X}, nbits = {nbits}")
107107
code.append(f" sendData(k{name}BitMark, k{name}OneSpace, k{name}BitMark,"
108-
f" k{name}ZeroSpace, send_data, {nbits}, true);")
108+
f" k{name}ZeroSpace, send_data, {nbits}, k{name}MsbFirst);")
109109
code.append(f" send_data >>= {nbits};")
110110
if footer:
111111
code.append(" // Footer")
@@ -122,7 +122,8 @@ def add_data_decode_code(self, bin_str, name="", footer=True):
122122
f" // e.g. data_result.data = 0x{int(bin_str, 2):X}, nbits = {nbits}",
123123
f" data_result = matchData(&(results->rawbuf[offset]), {nbits},",
124124
f" k{name}BitMark, k{name}OneSpace,",
125-
f" k{name}BitMark, k{name}ZeroSpace);",
125+
f" k{name}BitMark, k{name}ZeroSpace,",
126+
f" kUseDefTol, kMarkExcess, k{name}MsbFirst);",
126127
" offset += data_result.used;",
127128
" if (data_result.success == false) return false; // Fail",
128129
f" data <<= {nbits}; // Make room for the new bits of data.",
@@ -163,7 +164,8 @@ def add_data_byte_code(self, bin_str, name="", ambles=None):
163164
f" k{name}BitMark, k{name}ZeroSpace,",
164165
f" {lastmark}, {lastspace},",
165166
f" data + pos, {int(nbytes)}, // Bytes",
166-
f" k{name}Freq, true, kNoRepeat, kDutyDefault);",
167+
f" k{name}Freq, k{name}MsbFirst, kNoRepeat,"
168+
" kDutyDefault);",
167169
f" pos += {int(nbytes)};"
168170
f" // Adjust by how many bytes of data we sent"])
169171
return code
@@ -198,7 +200,7 @@ def add_data_byte_decode_code(self, bin_str, name="", ambles=None):
198200
f" {firstmark}, {firstspace},",
199201
f" k{name}BitMark, k{name}OneSpace,",
200202
f" k{name}BitMark, k{name}ZeroSpace,",
201-
f" {lastmark}, {lastspace}, true);",
203+
f" {lastmark}, {lastspace}, k{name}MsbFirst);",
202204
" if (used == 0) return false; // We failed to find any data.",
203205
" offset += used; // Adjust for how much of the message we read.",
204206
f" pos += {int(nbytes)};"
@@ -351,6 +353,7 @@ def dump_constants(message, defines, name="", output=sys.stdout):
351353
defines.append(f"const uint16_t k{name}SpaceGap{count} = {gap};")
352354
defines.append(f"const uint16_t k{name}Freq = 38000; "
353355
"// Hz. (Guessing the most common frequency.)")
356+
defines.append(f"const bool k{name}MsbFirst = true; // default assumption")
354357

355358

356359
def parse_and_report(rawdata_str, margin, gen_code=False, name="",

tools/auto_analyse_raw_data_test.py

+47-30
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ def test_dump_constants_simple(self):
7676
'const uint16_t kBAROneSpace = 1485;',
7777
'const uint16_t kBARZeroSpace = 520;',
7878
'const uint16_t kBARFreq = 38000; // Hz. (Guessing the most common '
79-
'frequency.)'
79+
'frequency.)',
80+
'const bool kBARMsbFirst = true; // default assumption'
8081
])
8182
self.assertEqual(
8283
output.getvalue(), 'Guessing key value:\n'
@@ -113,7 +114,8 @@ def test_dump_constants_aircon(self):
113114
'const uint16_t kTESTZeroSpace = 554;',
114115
'const uint16_t kTESTSpaceGap = 19990;',
115116
'const uint16_t kTESTFreq = 38000; // Hz. (Guessing the most common '
116-
'frequency.)'
117+
'frequency.)',
118+
'const bool kTESTMsbFirst = true; // default assumption'
117119
])
118120
self.assertEqual(
119121
output.getvalue(), 'Guessing key value:\n'
@@ -302,6 +304,7 @@ def test_parse_and_report(self):
302304
'const uint16_t kFOOZeroSpace = 520;\n'
303305
'const uint16_t kFOOFreq = 38000; // Hz. (Guessing the most common'
304306
' frequency.)\n'
307+
'const bool kFOOMsbFirst = true; // default assumption\n'
305308
'const uint16_t kFOOBits = 16; // Move to IRremoteESP8266.h\n'
306309
'const uint16_t kFOOOverhead = 5;\n'
307310
'\n'
@@ -323,15 +326,15 @@ def test_parse_and_report(self):
323326
' // Data Section #1\n'
324327
' // e.g. data = 0xEB, nbits = 8\n'
325328
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
326-
' send_data, 8, true);\n'
329+
' send_data, 8, kFOOMsbFirst);\n'
327330
' send_data >>= 8;\n'
328331
' // Footer\n'
329332
' mark(kFOOBitMark);\n'
330333
' space(kFOOHdrSpace);\n'
331334
' // Data Section #2\n'
332335
' // e.g. data = 0x1, nbits = 8\n'
333336
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
334-
' send_data, 8, true);\n'
337+
' send_data, 8, kFOOMsbFirst);\n'
335338
' send_data >>= 8;\n'
336339
' // Footer\n'
337340
' mark(kFOOBitMark);\n'
@@ -374,7 +377,8 @@ def test_parse_and_report(self):
374377
' // e.g. data_result.data = 0xEB, nbits = 8\n'
375378
' data_result = matchData(&(results->rawbuf[offset]), 8,\n'
376379
' kFOOBitMark, kFOOOneSpace,\n'
377-
' kFOOBitMark, kFOOZeroSpace);\n'
380+
' kFOOBitMark, kFOOZeroSpace,\n'
381+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
378382
' offset += data_result.used;\n'
379383
' if (data_result.success == false) return false; // Fail\n'
380384
' data <<= 8; // Make room for the new bits of data.\n'
@@ -390,7 +394,8 @@ def test_parse_and_report(self):
390394
' // e.g. data_result.data = 0x1, nbits = 8\n'
391395
' data_result = matchData(&(results->rawbuf[offset]), 8,\n'
392396
' kFOOBitMark, kFOOOneSpace,\n'
393-
' kFOOBitMark, kFOOZeroSpace);\n'
397+
' kFOOBitMark, kFOOZeroSpace,\n'
398+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
394399
' offset += data_result.used;\n'
395400
' if (data_result.success == false) return false; // Fail\n'
396401
' data <<= 8; // Make room for the new bits of data.\n'
@@ -585,6 +590,7 @@ def test_leader_marks(self):
585590
'const uint16_t kHitachiSpaceGap = 49290;\n'
586591
'const uint16_t kHitachiFreq = 38000; // Hz. (Guessing the most'
587592
' common frequency.)\n'
593+
'const bool kHitachiMsbFirst = true; // default assumption\n'
588594
'const uint16_t kHitachiBits = 424; // Move to IRremoteESP8266.h\n'
589595
'const uint16_t kHitachiStateLength = 53; // Move to IRremoteESP8266.h'
590596
'\n'
@@ -616,7 +622,7 @@ def test_leader_marks(self):
616622
'FFCA358F7000FF00FF01FEC03F807F11EE00FF00FFFF00FF00FF00FF00,'
617623
' nbits = 424\n'
618624
' sendData(kHitachiBitMark, kHitachiOneSpace, kHitachiBitMark,'
619-
' kHitachiZeroSpace, send_data, 424, true);\n'
625+
' kHitachiZeroSpace, send_data, 424, kHitachiMsbFirst);\n'
620626
' send_data >>= 424;\n'
621627
' // Footer\n'
622628
' mark(kHitachiBitMark);\n'
@@ -663,7 +669,8 @@ def test_leader_marks(self):
663669
' kHitachiBitMark, kHitachiZeroSpace,\n'
664670
' kHitachiBitMark, kHitachiSpaceGap,\n'
665671
' data + pos, 53, // Bytes\n'
666-
' kHitachiFreq, true, kNoRepeat, kDutyDefault);\n'
672+
' kHitachiFreq, kHitachiMsbFirst, kNoRepeat,'
673+
' kDutyDefault);\n'
667674
' pos += 53; // Adjust by how many bytes of data we sent\n'
668675
' }\n'
669676
'}\n'
@@ -714,7 +721,9 @@ def test_leader_marks(self):
714721
' nbits = 424\n'
715722
' data_result = matchData(&(results->rawbuf[offset]), 424,\n'
716723
' kHitachiBitMark, kHitachiOneSpace,\n'
717-
' kHitachiBitMark, kHitachiZeroSpace);\n'
724+
' kHitachiBitMark, kHitachiZeroSpace,\n'
725+
' kUseDefTol, kMarkExcess,'
726+
' kHitachiMsbFirst);\n'
718727
' offset += data_result.used;\n'
719728
' if (data_result.success == false) return false; // Fail\n'
720729
' data <<= 424; // Make room for the new bits of data.\n'
@@ -772,7 +781,8 @@ def test_leader_marks(self):
772781
' kHitachiHdrMark, kHitachiHdrSpace,\n'
773782
' kHitachiBitMark, kHitachiOneSpace,\n'
774783
' kHitachiBitMark, kHitachiZeroSpace,\n'
775-
' kHitachiBitMark, kHitachiSpaceGap, true);\n'
784+
' kHitachiBitMark, kHitachiSpaceGap,'
785+
' kHitachiMsbFirst);\n'
776786
' if (used == 0) return false; // We failed to find any data.\n'
777787
' offset += used; // Adjust for how much of the message we read.\n'
778788
' pos += 53; // Adjust by how many bytes of data we read\n'
@@ -898,6 +908,7 @@ def test_unusual_gaps(self):
898908
'const uint16_t kFOOSpaceGap = 13996;\n'
899909
'const uint16_t kFOOFreq = 38000; // Hz. (Guessing the most common'
900910
' frequency.)\n'
911+
'const bool kFOOMsbFirst = true; // default assumption\n'
901912
'const uint16_t kFOOBits = 128; // Move to IRremoteESP8266.h\n'
902913
'const uint16_t kFOOStateLength = 16; // Move to IRremoteESP8266.h\n'
903914
'const uint16_t kFOOOverhead = 16;\n'
@@ -922,15 +933,15 @@ def test_unusual_gaps(self):
922933
' // Data Section #1\n'
923934
' // e.g. data = 0x5F5F4040, nbits = 32\n'
924935
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
925-
' send_data, 32, true);\n'
936+
' send_data, 32, kFOOMsbFirst);\n'
926937
' send_data >>= 32;\n'
927938
' // Header\n'
928939
' mark(kFOOHdrMark);\n'
929940
' space(kFOOHdrSpace);\n'
930941
' // Data Section #2\n'
931942
' // e.g. data = 0x5F5F4040, nbits = 32\n'
932943
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
933-
' send_data, 32, true);\n'
944+
' send_data, 32, kFOOMsbFirst);\n'
934945
' send_data >>= 32;\n'
935946
' // Header\n'
936947
' mark(kFOOHdrMark);\n'
@@ -944,15 +955,15 @@ def test_unusual_gaps(self):
944955
' // Data Section #3\n'
945956
' // e.g. data = 0x2F2F6C6C, nbits = 32\n'
946957
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
947-
' send_data, 32, true);\n'
958+
' send_data, 32, kFOOMsbFirst);\n'
948959
' send_data >>= 32;\n'
949960
' // Header\n'
950961
' mark(kFOOHdrMark);\n'
951962
' space(kFOOHdrSpace);\n'
952963
' // Data Section #4\n'
953964
' // e.g. data = 0x2F2F6C6C, nbits = 32\n'
954965
' sendData(kFOOBitMark, kFOOOneSpace, kFOOBitMark, kFOOZeroSpace,'
955-
' send_data, 32, true);\n'
966+
' send_data, 32, kFOOMsbFirst);\n'
956967
' send_data >>= 32;\n'
957968
' // Header\n'
958969
' mark(kFOOHdrMark);\n'
@@ -994,7 +1005,7 @@ def test_unusual_gaps(self):
9941005
' kFOOBitMark, kFOOZeroSpace,\n'
9951006
' kFOOHdrMark, kFOOHdrSpace,\n'
9961007
' data + pos, 4, // Bytes\n'
997-
' kFOOFreq, true, kNoRepeat, kDutyDefault);\n'
1008+
' kFOOFreq, kFOOMsbFirst, kNoRepeat, kDutyDefault);\n'
9981009
' pos += 4; // Adjust by how many bytes of data we sent\n'
9991010
' // Data Section #2\n'
10001011
' // e.g.\n'
@@ -1005,7 +1016,7 @@ def test_unusual_gaps(self):
10051016
' kFOOBitMark, kFOOZeroSpace,\n'
10061017
' kFOOHdrMark, kFOOHdrSpace,\n'
10071018
' data + pos, 4, // Bytes\n'
1008-
' kFOOFreq, true, kNoRepeat, kDutyDefault);\n'
1019+
' kFOOFreq, kFOOMsbFirst, kNoRepeat, kDutyDefault);\n'
10091020
' pos += 4; // Adjust by how many bytes of data we sent\n'
10101021
' // Data Section #3\n'
10111022
' // e.g.\n'
@@ -1016,7 +1027,7 @@ def test_unusual_gaps(self):
10161027
' kFOOBitMark, kFOOZeroSpace,\n'
10171028
' kFOOHdrMark, kFOOHdrSpace,\n'
10181029
' data + pos, 4, // Bytes\n'
1019-
' kFOOFreq, true, kNoRepeat, kDutyDefault);\n'
1030+
' kFOOFreq, kFOOMsbFirst, kNoRepeat, kDutyDefault);\n'
10201031
' pos += 4; // Adjust by how many bytes of data we sent\n'
10211032
' // Data Section #4\n'
10221033
' // e.g.\n'
@@ -1027,7 +1038,7 @@ def test_unusual_gaps(self):
10271038
' kFOOBitMark, kFOOZeroSpace,\n'
10281039
' kFOOHdrMark, kFOOHdrSpace,\n'
10291040
' data + pos, 4, // Bytes\n'
1030-
' kFOOFreq, true, kNoRepeat, kDutyDefault);\n'
1041+
' kFOOFreq, kFOOMsbFirst, kNoRepeat, kDutyDefault);\n'
10311042
' pos += 4; // Adjust by how many bytes of data we sent\n'
10321043
' }\n'
10331044
'}\n'
@@ -1068,7 +1079,8 @@ def test_unusual_gaps(self):
10681079
' // e.g. data_result.data = 0x5F5F4040, nbits = 32\n'
10691080
' data_result = matchData(&(results->rawbuf[offset]), 32,\n'
10701081
' kFOOBitMark, kFOOOneSpace,\n'
1071-
' kFOOBitMark, kFOOZeroSpace);\n'
1082+
' kFOOBitMark, kFOOZeroSpace,\n'
1083+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
10721084
' offset += data_result.used;\n'
10731085
' if (data_result.success == false) return false; // Fail\n'
10741086
' data <<= 32; // Make room for the new bits of data.\n'
@@ -1084,7 +1096,8 @@ def test_unusual_gaps(self):
10841096
' // e.g. data_result.data = 0x5F5F4040, nbits = 32\n'
10851097
' data_result = matchData(&(results->rawbuf[offset]), 32,\n'
10861098
' kFOOBitMark, kFOOOneSpace,\n'
1087-
' kFOOBitMark, kFOOZeroSpace);\n'
1099+
' kFOOBitMark, kFOOZeroSpace,\n'
1100+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
10881101
' offset += data_result.used;\n'
10891102
' if (data_result.success == false) return false; // Fail\n'
10901103
' data <<= 32; // Make room for the new bits of data.\n'
@@ -1112,7 +1125,8 @@ def test_unusual_gaps(self):
11121125
' // e.g. data_result.data = 0x2F2F6C6C, nbits = 32\n'
11131126
' data_result = matchData(&(results->rawbuf[offset]), 32,\n'
11141127
' kFOOBitMark, kFOOOneSpace,\n'
1115-
' kFOOBitMark, kFOOZeroSpace);\n'
1128+
' kFOOBitMark, kFOOZeroSpace,\n'
1129+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
11161130
' offset += data_result.used;\n'
11171131
' if (data_result.success == false) return false; // Fail\n'
11181132
' data <<= 32; // Make room for the new bits of data.\n'
@@ -1128,7 +1142,8 @@ def test_unusual_gaps(self):
11281142
' // e.g. data_result.data = 0x2F2F6C6C, nbits = 32\n'
11291143
' data_result = matchData(&(results->rawbuf[offset]), 32,\n'
11301144
' kFOOBitMark, kFOOOneSpace,\n'
1131-
' kFOOBitMark, kFOOZeroSpace);\n'
1145+
' kFOOBitMark, kFOOZeroSpace,\n'
1146+
' kUseDefTol, kMarkExcess, kFOOMsbFirst);\n'
11321147
' offset += data_result.used;\n'
11331148
' if (data_result.success == false) return false; // Fail\n'
11341149
' data <<= 32; // Make room for the new bits of data.\n'
@@ -1189,7 +1204,7 @@ def test_unusual_gaps(self):
11891204
' kFOOHdrMark, kFOOHdrSpace,\n'
11901205
' kFOOBitMark, kFOOOneSpace,\n'
11911206
' kFOOBitMark, kFOOZeroSpace,\n'
1192-
' kFOOHdrMark, kFOOHdrSpace, true);\n'
1207+
' kFOOHdrMark, kFOOHdrSpace, kFOOMsbFirst);\n'
11931208
' if (used == 0) return false; // We failed to find any data.\n'
11941209
' offset += used; // Adjust for how much of the message we read.\n'
11951210
' pos += 4; // Adjust by how many bytes of data we read\n'
@@ -1204,7 +1219,7 @@ def test_unusual_gaps(self):
12041219
' kFOOHdrMark, kFOOHdrSpace,\n'
12051220
' kFOOBitMark, kFOOOneSpace,\n'
12061221
' kFOOBitMark, kFOOZeroSpace,\n'
1207-
' kFOOHdrMark, kFOOHdrSpace, true);\n'
1222+
' kFOOHdrMark, kFOOHdrSpace, kFOOMsbFirst);\n'
12081223
' if (used == 0) return false; // We failed to find any data.\n'
12091224
' offset += used; // Adjust for how much of the message we read.\n'
12101225
' pos += 4; // Adjust by how many bytes of data we read\n'
@@ -1219,7 +1234,7 @@ def test_unusual_gaps(self):
12191234
' kFOOHdrMark, kFOOHdrSpace,\n'
12201235
' kFOOBitMark, kFOOOneSpace,\n'
12211236
' kFOOBitMark, kFOOZeroSpace,\n'
1222-
' kFOOHdrMark, kFOOHdrSpace, true);\n'
1237+
' kFOOHdrMark, kFOOHdrSpace, kFOOMsbFirst);\n'
12231238
' if (used == 0) return false; // We failed to find any data.\n'
12241239
' offset += used; // Adjust for how much of the message we read.\n'
12251240
' pos += 4; // Adjust by how many bytes of data we read\n'
@@ -1234,7 +1249,7 @@ def test_unusual_gaps(self):
12341249
' kFOOHdrMark, kFOOHdrSpace,\n'
12351250
' kFOOBitMark, kFOOOneSpace,\n'
12361251
' kFOOBitMark, kFOOZeroSpace,\n'
1237-
' kFOOHdrMark, kFOOHdrSpace, true);\n'
1252+
' kFOOHdrMark, kFOOHdrSpace, kFOOMsbFirst);\n'
12381253
' if (used == 0) return false; // We failed to find any data.\n'
12391254
' offset += used; // Adjust for how much of the message we read.\n'
12401255
' pos += 4; // Adjust by how many bytes of data we read\n'
@@ -1333,6 +1348,7 @@ def test_no_headers(self):
13331348
'const uint16_t kZeroSpace = 547;\n'
13341349
'const uint16_t kFreq = 38000; // Hz. (Guessing the most common'
13351350
' frequency.)\n'
1351+
'const bool kMsbFirst = true; // default assumption\n'
13361352
'const uint16_t kBits = 128; // Move to IRremoteESP8266.h\n'
13371353
'const uint16_t kStateLength = 16; // Move to IRremoteESP8266.h\n'
13381354
'const uint16_t kOverhead = 1;\n'
@@ -1354,7 +1370,7 @@ def test_no_headers(self):
13541370
' // Data Section #1\n'
13551371
' // e.g. data = 0xA55A0000400000000000000000000080, nbits = 128\n'
13561372
' sendData(kBitMark, kOneSpace, kBitMark, kZeroSpace, send_data,'
1357-
' 128, true);\n'
1373+
' 128, kMsbFirst);\n'
13581374
' send_data >>= 128;\n'
13591375
' // Footer\n'
13601376
' mark(kBitMark);\n'
@@ -1393,7 +1409,7 @@ def test_no_headers(self):
13931409
' kBitMark, kZeroSpace,\n'
13941410
' kBitMark, kDefaultMessageGap,\n'
13951411
' data + pos, 16, // Bytes\n'
1396-
' kFreq, true, kNoRepeat, kDutyDefault);\n'
1412+
' kFreq, kMsbFirst, kNoRepeat, kDutyDefault);\n'
13971413
' pos += 16; // Adjust by how many bytes of data we sent\n'
13981414
' }\n'
13991415
'}\n'
@@ -1429,7 +1445,8 @@ def test_no_headers(self):
14291445
' = 128\n'
14301446
' data_result = matchData(&(results->rawbuf[offset]), 128,\n'
14311447
' kBitMark, kOneSpace,\n'
1432-
' kBitMark, kZeroSpace);\n'
1448+
' kBitMark, kZeroSpace,\n'
1449+
' kUseDefTol, kMarkExcess, kMsbFirst);\n'
14331450
' offset += data_result.used;\n'
14341451
' if (data_result.success == false) return false; // Fail\n'
14351452
' data <<= 128; // Make room for the new bits of data.\n'
@@ -1483,7 +1500,7 @@ def test_no_headers(self):
14831500
' 0, 0,\n'
14841501
' kBitMark, kOneSpace,\n'
14851502
' kBitMark, kZeroSpace,\n'
1486-
' kBitMark, kDefaultMessageGap, true);\n'
1503+
' kBitMark, kDefaultMessageGap, kMsbFirst);\n'
14871504
' if (used == 0) return false; // We failed to find any data.\n'
14881505
' offset += used; // Adjust for how much of the message we read.\n'
14891506
' pos += 16; // Adjust by how many bytes of data we read\n'

0 commit comments

Comments
 (0)