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