51 lines
1.2 KiB
Python
51 lines
1.2 KiB
Python
import os
|
|
import re
|
|
|
|
SUB_DIR = "subs"
|
|
OUT_FILE = "esp32/signals.h"
|
|
|
|
def parse_raw(file_path):
|
|
with open(file_path, "r") as f:
|
|
content = f.read()
|
|
|
|
raw_lines = re.findall(r"RAW_Data:\s*(.*)", content)
|
|
values = []
|
|
|
|
for line in raw_lines:
|
|
parts = line.strip().split()
|
|
for p in parts:
|
|
try:
|
|
values.append(int(p))
|
|
except:
|
|
pass
|
|
|
|
return values
|
|
|
|
|
|
signals = {}
|
|
|
|
for fname in os.listdir(SUB_DIR):
|
|
if fname.endswith(".sub"):
|
|
key = os.path.splitext(fname)[0]
|
|
signals[key] = parse_raw(os.path.join(SUB_DIR, fname))
|
|
|
|
with open(OUT_FILE, "w") as f:
|
|
f.write("#pragma once\n\n")
|
|
|
|
for name, data in signals.items():
|
|
f.write(f"const int {name}_raw[] = {{\n")
|
|
f.write(", ".join(map(str, data)))
|
|
f.write("\n};\n")
|
|
f.write(f"const int {name}_len = {len(data)};\n\n")
|
|
|
|
f.write("struct SignalDef { const char* name; const int* data; int len; };\n\n")
|
|
|
|
f.write("SignalDef signals[] = {\n")
|
|
for name in signals:
|
|
f.write(f' {{"{name}", {name}_raw, {name}_len}},\n')
|
|
f.write("};\n")
|
|
|
|
f.write(f"const int SIGNAL_COUNT = {len(signals)};\n")
|
|
|
|
print("signals.h generated")
|