]> git.donarmstrong.com Git - kiibohd-kll.git/commitdiff
Fixed multi-byte capability arguments.
authorJacob Alexander <jacob.alexander@virtualinstruments.com>
Thu, 11 Sep 2014 03:12:10 +0000 (20:12 -0700)
committerJacob Alexander <jacob.alexander@virtualinstruments.com>
Thu, 11 Sep 2014 03:12:10 +0000 (20:12 -0700)
- Little endian byte conversion required (has to do with struct assignment rather than architecture)

examples/md1Map.kll
kll.py

index 901fccb3b55aab11e0aedafccb22c6ebe44a4713..98ca5b86e4570855d3c0f85cc186b6188505f9ce 100644 (file)
@@ -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 7844b8266a0d1b33e12b1aedef644e52197afa5b..fc7b42648544793f9a1728ab37016d49aeff45e8 100755 (executable)
--- 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 ] ], <option 2>, <option 3> ]
 def optionExpansion( sequences ):
@@ -478,7 +493,7 @@ usbCode_sequence    = oneplus( ( usbCode_combo | seqString ) + skip( maybe( comm
 
   # Capabilities
 capFunc_arguments = many( number + skip( maybe( comma ) ) ) >> listToTuple
-capFunc_elem      = name + skip( parenthesis('(') ) + capFunc_arguments + skip( parenthesis(')') ) >> listElem
+capFunc_elem      = name + skip( parenthesis('(') ) + capFunc_arguments + skip( parenthesis(')') ) >> capArgExpander >> listElem
 capFunc_combo     = oneplus( ( usbCode_expanded | usbCode_elem | capFunc_elem ) + skip( maybe( plus ) ) ) >> listElem
 capFunc_sequence  = oneplus( ( capFunc_combo | seqString ) + skip( maybe( comma ) ) ) >> oneLayerFlatten