transport: add _get_item and simplify _encode_cmd/_decode_cmd
authorFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 15 Dec 2014 12:38:50 +0000 (13:38 +0100)
committerFlorent Kermarrec <florent@enjoy-digital.fr>
Mon, 15 Dec 2014 12:38:50 +0000 (13:38 +0100)
lib/sata/transport/__init__.py

index 30baa0526ba6fbba532f95b36d1398c744e4edca..f95fb393508ea2bcf111276331b1b3d5309c73eb 100644 (file)
@@ -3,17 +3,21 @@ from migen.genlib.fsm import FSM, NextState
 
 from lib.sata.common import *
 
+def _get_item(obj, name, width):
+       if "_lsb" in name:
+               item = getattr(obj, name.replace("_lsb", ""))[:width]
+       elif "_msb" in name:
+               item = getattr(obj, name.replace("_msb", ""))[width:2*width]
+       else:
+               item = getattr(obj, name)
+       return item
+
 def _encode_cmd(obj, description, signal):
        r = []
        for k, v in sorted(description.items()):
                start = v.dword*32 + v.offset
                end = start + v.width
-               if "_lsb" in k:
-                       item = getattr(obj, k.replace("_lsb", ""))[:v.width]
-               elif "_msb" in k:
-                       item = getattr(obj, k.replace("_msb", ""))[v.width:2*v.width]
-               else:
-                       item = getattr(obj, k)
+               item = _get_item(obj, k, v.width)
                r.append(signal[start:end].eq(item))
        return r
 
@@ -114,12 +118,7 @@ def _decode_cmd(signal, description, obj):
        for k, v in sorted(description.items()):
                start = v.dword*32+v.offset
                end = start+v.width
-               if "_lsb" in k:
-                       item = getattr(obj, k.replace("_lsb", ""))[:v.width]
-               elif "_msb" in k:
-                       item = getattr(obj, k.replace("_msb", ""))[v.width:2*v.width]
-               else:
-                       item = getattr(obj, k)
+               item = _get_item(obj, k, v.width)
                r.append(item.eq(signal[start:end]))
        return r