From eb5bf66d713797732c733eb062e9ef1ff419997e Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Wed, 10 Sep 2014 20:12:10 -0700 Subject: [PATCH] Fixed multi-byte capability arguments. - Little endian byte conversion required (has to do with struct assignment rather than architecture) --- examples/md1Map.kll | 14 ++++++++++++-- kll.py | 19 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/examples/md1Map.kll b/examples/md1Map.kll index 901fccb..98ca5b8 100644 --- a/examples/md1Map.kll +++ b/examples/md1Map.kll @@ -8,8 +8,11 @@ Date = 2014-09-07; # MOVE THIS SECTION to another file -usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 ); -layerState => Macro_layerState_capability( layer: 2, state : 1 ); +usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 ); +layerState => Macro_layerState_capability( layer : 2, state : 1 ); +layerLatch => Macro_layerLatch_capability( layer : 2 ); +layerLock => Macro_layerLock_capability( layer : 2 ); +layerShift => Macro_layerShift_capability( layer : 2 ); # END SECTION @@ -77,3 +80,10 @@ S0x3C : U"Function3"; # Right Blank Key 1 S0x3D : U"Function4"; # Right Blank Key 2 S0x3E : U"BackTick"; +# TODO MOVE +# Function Layer Assignments +U"Function1" : layerShift( 1 ); +U"Function2" : layerShift( 1 ); +U"Function3" : layerShift( 1 ); +U"Function4" : layerShift( 1 ); + diff --git a/kll.py b/kll.py index 7844b82..fc7b426 100755 --- a/kll.py +++ b/kll.py @@ -107,7 +107,7 @@ def processCommandLineArgs(): defaultFiles = args.default partialFileSets = args.partial if defaultFiles is None: - partialFileSets = [] + defaultFiles = [] if partialFileSets is None: partialFileSets = [[]] @@ -321,6 +321,21 @@ def oneLayerFlatten( items ): return mainList + # Capability arguments may need to be expanded (e.g. 1 16 bit argument needs to be 2 8 bit arguments for the state machine) +def capArgExpander( items ): + newArgs = [] + # For each defined argument in the capability definition + for arg in range( 0, len( capabilities_dict[ items[0] ][1] ) ): + argLen = capabilities_dict[ items[0] ][1][ arg ][1] + num = items[1][ arg ] + byteForm = num.to_bytes( argLen, byteorder='little' ) # XXX Yes, little endian from how the uC structs work + + # For each sub-argument, split into byte-sized chunks + for byte in range( 0, argLen ): + newArgs.append( byteForm[ byte ] ) + + return tuple( [ items[0], tuple( newArgs ) ] ) + # Expand ranges of values in the 3rd dimension of the list, to a list of 2nd lists # i.e. [ sequence, [ combo, [ range ] ] ] --> [ [ sequence, [ combo ] ],