fix incompatibility between spec gen and pinmux code-gen
[pinmux.git] / src / spec / gen.py
1 import os
2 import os.path
3 from spec.interfaces import Pinouts
4
5
6 def specgen(pth, pinouts, bankspec, fixedpins):
7 """ generates a specification of pinouts (tsv files)
8 for reading in by pinmux
9 """
10 pth = pth or ''
11 #print bankspec.keys()
12 #print fixedpins.keys()
13 if not os.path.exists(pth):
14 os.makedirs(pth)
15 with open(os.path.join(pth, 'interfaces.txt'), 'w') as f:
16 for k in pinouts.fnspec.keys():
17 s = pinouts.fnspec[k]
18 f.write("%s\t%d\n" % (k.lower(), len(s)))
19 s0 = s[s.keys()[0]] # hack, take first
20 with open(os.path.join(pth, '%s.txt' % k.lower()), 'w') as g:
21 if len(s0.pingroup) == 1: # only one function, grouped higher
22 for ks in s.keys(): # grouped by interface
23 fntype = 'inout' # XXX TODO
24 k = "%s_%s" % (s[ks].fname, s[ks].suffix)
25 k_ = k.lower()
26 g.write("%s\t%s\n" % (k_, fntype))
27 else:
28 for pinname in s0.pingroup:
29 fntype = s0.fntype.get(pinname, 'inout')
30 pn = pinname.lower()
31 g.write("%s\t%s\n" % (pn, fntype))
32
33 pks = pinouts.keys()
34 pks.sort()
35
36 # truly dreadful way to work out the max mux size...
37 muxsz = 0
38 for k in pks:
39 for m in pinouts[k].keys():
40 muxsz = max(muxsz, m + 1)
41
42 with open(os.path.join(pth, 'pinmap.txt'), 'w') as g:
43 for k in pks:
44 res = [str(k)]
45 # append pin mux
46 for midx in range(muxsz):
47 if pinouts[k].has_key(midx):
48 fname = pinouts[k][midx][0]
49 else:
50 fname = ''
51 print k, midx, fname
52 res.append(fname.lower())
53 g.write('\t'.join(res) + '\n')