cartridge/uart/ft4232h.py
2023-07-13 08:27:27 -07:00

61 lines
1.5 KiB
Python

from itertools import chain
with open('ft4232h.txt') as f:
lines = [l.strip() for l in f.read().strip().split('\n') if l.strip()]
def tokenize(line):
pins, *rest = line.split()
return (pins.split(','), *rest)
signal_types = {
'POWER': 'power_in',
'INPUT': 'input',
'OUTPU': 'output',
'I/O': 'bidirectional'
}
def parse(tokens):
pins0, signal, type0, *rest = tokens
type = type0 if type0 in signal_types else 'I/O'
pins = list(map(int, pins0))
for pin in pins:
yield pin, signal, signal_types[type]
parse_tokenize = lambda x: parse(tokenize(x))
flat_parse = lambda x: \
list(sorted(chain.from_iterable(map(parse_tokenize, x)),
key=lambda x: x[0]))
parsed = flat_parse(lines)
assert(len(list(x[0] for x in parsed)) == 64)
assert(len(set(x[0] for x in parsed)) == 64)
#for pin, signal, type in parsed:
# print(pin, signal, type)
from kicad_sym import *
split_p = lambda l: "DBUS" not in l[1]
by_name = lambda l: (l[1], l[0])
def make_lib(parsed):
half_width = 20
source, sink, other = split_power(parsed)
source = sorted(source, key=by_name)
sink = sorted(sink, key=by_name)
pins, max_len = list(make_pins(other, half_width, split_p))
all_pins = chain(
pins,
make_pin_top(source),
make_pin_bottom(sink, max_len),
)
return lib([
symbol("FT4232H", "FT4232H",
all_pins,
u(-half_width), u(2),
u(half_width), u(-(max_len * 2)))
])
print(make_lib(parsed))