add sigrok import (to check export against it)
This commit is contained in:
parent
130212039e
commit
2f6465d439
|
@ -4,6 +4,8 @@ import math
|
||||||
import shutil
|
import shutil
|
||||||
import datetime
|
import datetime
|
||||||
import zipfile
|
import zipfile
|
||||||
|
import re
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
def dec2bin(d, nb=0):
|
def dec2bin(d, nb=0):
|
||||||
if d=="x":
|
if d=="x":
|
||||||
|
@ -303,12 +305,12 @@ class SRExport():
|
||||||
def __init__(self, dump):
|
def __init__(self, dump):
|
||||||
self.dump = dump
|
self.dump = dump
|
||||||
|
|
||||||
def create_version(self):
|
def write_version(self):
|
||||||
f = open("version", "w")
|
f = open("version", "w")
|
||||||
f.write("1")
|
f.write("1")
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
def create_metadata(self, name):
|
def write_metadata(self, name):
|
||||||
f = open("metadata", "w")
|
f = open("metadata", "w")
|
||||||
r = """
|
r = """
|
||||||
[global]
|
[global]
|
||||||
|
@ -329,7 +331,7 @@ samplerate = {} MHz
|
||||||
f.write(r)
|
f.write(r)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
def create_data(self, name):
|
def write_data(self, name):
|
||||||
# XXX are probes limited to 1 bit?
|
# XXX are probes limited to 1 bit?
|
||||||
data_bits = math.ceil(len(self.dump.vars)/8)*8
|
data_bits = math.ceil(len(self.dump.vars)/8)*8
|
||||||
data_len = 0
|
data_len = 0
|
||||||
|
@ -366,13 +368,69 @@ samplerate = {} MHz
|
||||||
shutil.rmtree(name)
|
shutil.rmtree(name)
|
||||||
os.makedirs(name)
|
os.makedirs(name)
|
||||||
os.chdir(name)
|
os.chdir(name)
|
||||||
self.create_version()
|
self.write_version()
|
||||||
self.create_metadata(name)
|
self.write_metadata(name)
|
||||||
self.create_data(name)
|
self.write_data(name)
|
||||||
os.chdir("..")
|
os.chdir("..")
|
||||||
self.zip(name)
|
self.zip(name)
|
||||||
shutil.rmtree(name)
|
shutil.rmtree(name)
|
||||||
|
|
||||||
|
class SRImport():
|
||||||
|
def __init__(self, filename):
|
||||||
|
name, ext = os.path.splitext(filename)
|
||||||
|
self.unzip(filename, name)
|
||||||
|
os.chdir(name)
|
||||||
|
probes = self.read_metadata()
|
||||||
|
total_probes = len(probes.keys())
|
||||||
|
datas = self.read_data(name, total_probes)
|
||||||
|
os.chdir("..")
|
||||||
|
shutil.rmtree(name)
|
||||||
|
self.dump = self.generate_dump(probes, datas)
|
||||||
|
|
||||||
|
# XXX we can maybe avoid this
|
||||||
|
def unzip(self, filename, name):
|
||||||
|
f = open(filename, "rb")
|
||||||
|
z = zipfile.ZipFile(f)
|
||||||
|
if os.path.exists(name):
|
||||||
|
shutil.rmtree(name)
|
||||||
|
os.makedirs(name)
|
||||||
|
for file in z.namelist():
|
||||||
|
z.extract(file, name)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
def read_metadata(self):
|
||||||
|
probes = OrderedDict()
|
||||||
|
f = open("metadata", "r")
|
||||||
|
for l in f:
|
||||||
|
m = re.search("probe([0-9]+) = (\w+)", l, re.I)
|
||||||
|
if m is not None:
|
||||||
|
index = int(m.group(1))
|
||||||
|
name = m.group(2)
|
||||||
|
probes[name] = index
|
||||||
|
f.close()
|
||||||
|
return probes
|
||||||
|
|
||||||
|
def read_data(self, name, total_probes):
|
||||||
|
datas = []
|
||||||
|
f = open(name, "rb")
|
||||||
|
while True:
|
||||||
|
data = f.read(math.ceil(total_probes/8))
|
||||||
|
if data == bytes('', "utf-8"):
|
||||||
|
break
|
||||||
|
data = int.from_bytes(data, "big")
|
||||||
|
datas.append(data)
|
||||||
|
f.close()
|
||||||
|
return datas
|
||||||
|
|
||||||
|
def generate_dump(self, probes, datas):
|
||||||
|
dump = Dump()
|
||||||
|
for k, v in probes.items():
|
||||||
|
probe_data = []
|
||||||
|
for data in datas:
|
||||||
|
probe_data.append((data >> v) & 0x1)
|
||||||
|
dump.add(Var(k, 1, probe_data))
|
||||||
|
return dump
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
dump = Dump()
|
dump = Dump()
|
||||||
dump.add(Var("foo1", 1, [0,1,0,1,0,1]))
|
dump.add(Var("foo1", 1, [0,1,0,1,0,1]))
|
||||||
|
@ -384,6 +442,9 @@ def main():
|
||||||
CSVExport(dump).write("mydump.csv")
|
CSVExport(dump).write("mydump.csv")
|
||||||
PYExport(dump).write("mydump.py")
|
PYExport(dump).write("mydump.py")
|
||||||
SRExport(dump).write("dump.sr")
|
SRExport(dump).write("dump.sr")
|
||||||
|
dump = SRImport("dump.sr").dump
|
||||||
|
VCDExport(dump).write("dump.vcd")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in New Issue