convert to python3
[pinmux.git] / src / spec / interfaces.py
index 684173edb6a5a7548a1189dca9359a8c63e5ff5b..f5ecf4817ba439b607a1909a4fcb6aa2589e2afd 100644 (file)
@@ -64,16 +64,31 @@ class PinGen(object):
         self.fname = fname
 
     def __call__(self, suffix, offs, mux,
-                 start=None, limit=None, spec=None, origsuffix=None):
+                 start=None, limit=None, spec=None, origsuffix=None,
+                 rev=False):
         bank = offs[0]
-        pingroup, gangedgroup = self.pinfn(suffix, bank)
+        pf = self.pinfn(suffix, bank)
+        print ("pf", suffix, bank, pf)
+        pingroup, gangedgroup, clock = pf
+        if clock:
+            self.pinouts.clocks[self.fname] = clock
         if isinstance(pingroup, tuple):
             prefix, pingroup = pingroup
         else:
             prefix = self.fname
         if start and limit:  # limit turns into an offset from start
             limit = start + limit
+        sk = "%s:%s" % (self.fname, str(suffix))
+        print ("pingroup pre", sk, pingroup)
         pingroup = pingroup[start:limit]  # see comment in spec.pinfunctions
+        if rev:
+            # reverse order of pingroup
+            pingroup.reverse()
+        print ("pingroup post", sk, pingroup)
+        if sk in self.pinouts.byspec:
+            self.pinouts.byspec[sk] += pingroup
+        else:
+            self.pinouts.byspec[sk] = deepcopy(pingroup)
         pins = Pins(prefix, pingroup, self.bankspec,
                     suffix, offs, bank, mux,
                     spec, origsuffix=suffix, gangedgrp=gangedgroup)
@@ -89,12 +104,15 @@ class Pinouts(object):
         self.pins = {}
         self.fnspec = {}
         self.ganged = {}
+        self.clocks = {}
+        self.byspec = {}
         for fname, pinfn in pinspec:
             if isinstance(pinfn, tuple):
                 name, pinfn = pinfn
             else:
                 name = pinfn.__name__
-            setattr(self, name, PinGen(self, fname, pinfn, self.bankspec))
+            pin = PinGen(self, fname, pinfn, self.bankspec)
+            setattr(self, name, pin)
 
     def setganged(self, fname, grp):
         grp = map(lambda x: x[:-1], grp)