61 lines
1.5 KiB
Python
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))
|