]> git.donarmstrong.com Git - kiibohd-kll.git/commitdiff
Adding support for USB Code trigger assignment
authorJacob Alexander <haata@kiibohd.com>
Mon, 8 Sep 2014 04:32:36 +0000 (21:32 -0700)
committerJacob Alexander <haata@kiibohd.com>
Mon, 8 Sep 2014 04:32:36 +0000 (21:32 -0700)
- Added USBCode "cached assignment"
- Added ANSI -> Colemak USBCode assignment kll file
- Removed debug printing

examples/colemak.kll [new file with mode: 0644]
examples/md1Map.kll
kll.py
kll_lib/containers.py

diff --git a/examples/colemak.kll b/examples/colemak.kll
new file mode 100644 (file)
index 0000000..6500e3e
--- /dev/null
@@ -0,0 +1,31 @@
+Name = colemak;
+Version = 0.1;
+Author = "HaaTa (Jacob Alexander) 2014";
+KLL = 0.3;
+
+# Modified Date
+Date = 2014-09-07;
+
+# Top row
+'e' : 'f';
+'r' : 'p';
+'t' : 'g';
+'y' : 'j';
+'u' : 'l';
+'i' : 'u';
+'o' : 'y';
+'p' : ';';
+
+# Middle Row
+'s' : 'r';
+'d' : 's';
+'f' : 't';
+'g' : 'd';
+'j' : 'n';
+'k' : 'e';
+'l' : 'i';
+';' : 'o';
+
+# Bottom Row
+'n' : 'k';
+
index 76c0b755af639fe8c3c92c896a0d499ff6ecc0b3..990d558d4c4a83619e7c002315ec6316bd44d7d6 100644 (file)
@@ -4,11 +4,12 @@ Author = "HaaTa (Jacob Alexander) 2014";
 KLL = 0.3;
 
 # Modified Date
-Date = 2014-08-24;
+Date = 2014-09-07;
 
 
 # MOVE THIS SECTION to another file
 usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 );
+layerState => Macro_layerState_capability( layer: 2, state : 1 );
 # END SECTION
 
 
diff --git a/kll.py b/kll.py
index 21c4418fbca37b2062aa5cbcc0880f9f7b6e5590..06ce83d91b91a6aae3641ec2c0e0c1a94b82f3de 100755 (executable)
--- a/kll.py
+++ b/kll.py
@@ -397,9 +397,6 @@ def eval_scanCode( triggers, operator, results ):
                        elif operator == ":":
                                macros_map.replaceScanCode( trigger, result )
 
-       print ( triggers )
-       print ( results )
-
 def eval_usbCode( triggers, operator, results ):
        # Convert to lists of lists of lists to tuples of tuples of tuples
        # Tuples are non-mutable, and can be used has index items
@@ -411,20 +408,8 @@ def eval_usbCode( triggers, operator, results ):
                scanCodes = macros_map.lookupUSBCodes( trigger )
                for scanCode in scanCodes:
                        for result in results:
-                               # Append Case
-                               if operator == ":+":
-                                       macros_map.appendScanCode( scanCode, result )
-
-                               # Remove Case
-                               elif operator == ":-":
-                                       macros_map.removeScanCode( scanCode, result )
-
-                               # Replace Case
-                               elif operator == ":":
-                                       macros_map.replaceScanCode( scanCode, result )
-
-       print ( triggers )
-       print ( results )
+                               # Cache assignment until file finishes processing
+                               macros_map.cacheAssignment( operator, scanCode, result )
 
 def eval_variable( name, content ):
        # Content might be a concatenation of multiple data types, convert everything into a single string
@@ -506,8 +491,8 @@ capability_expression = name + skip( operator('=>') ) + name + skip( parenthesis
 
 #| <trigger> : <result>;
 operatorTriggerResult = operator(':') | operator(':+') | operator(':-')
-scanCode_expression = triggerCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_scanCode
-usbCode_expression  = triggerUSBCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) #>> map_usbCode
+scanCode_expression   = triggerCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_scanCode
+usbCode_expression    = triggerUSBCode_outerList + operatorTriggerResult + resultCode_outerList + skip( eol ) >> map_usbCode
 
 def parse( tokenSequence ):
        """Sequence(Token) -> object"""
@@ -538,11 +523,11 @@ if __name__ == '__main__':
                        data = file.read()
 
                        tokenSequence = tokenize( data )
-                       print ( pformat( tokenSequence ) ) # Display tokenization
+                       #print ( pformat( tokenSequence ) ) # Display tokenization
                        tree = parse( tokenSequence )
-                       #print ( tree )
-                       #print ( variable_dict )
-                       #print ( capabilities_dict )
+
+               # Apply assignment cache, see 5.1.2 USB Codes for why this is necessary
+               macros_map.replayCachedAssignments()
 
        # Do macro correlation and transformation
        macros_map.generate()
index d843574564b63c37ffce995bd44a1c13e277b3bc..751f94947d9a224f788fa9ce1b8153e041a57e84 100644 (file)
@@ -94,6 +94,9 @@ class Macros:
                self.triggerList = []
                self.maxScanCode = []
 
+               # USBCode Assignment Cache
+               self.assignmentCache = []
+
        def __repr__( self ):
                return "{0}".format( self.macros )
 
@@ -124,11 +127,35 @@ class Macros:
 
                # Scan current layer for USB Codes
                for macro in self.macros[ self.layer ].keys():
-                       if usbCode == self.macros[ self.layer ][ macro ]:
+                       if usbCode in self.macros[ self.layer ][ macro ]:
                                scanCodeList.append( macro )
 
                return scanCodeList
 
+       # Cache USBCode Assignment
+       def cacheAssignment( self, operator, scanCode, result ):
+               self.assignmentCache.append( [ operator, scanCode, result ] )
+
+       # Assign cached USBCode Assignments
+       def replayCachedAssignments( self ):
+               # Iterate over each item in the assignment cache
+               for item in self.assignmentCache:
+                       # Check operator, and choose the specified assignment action
+                       # Append Case
+                       if item[0] == ":+":
+                               self.appendScanCode( item[1], item[2] )
+
+                       # Remove Case
+                       elif item[0] == ":-":
+                               self.removeScanCode( item[1], item[2] )
+
+                       # Replace Case
+                       elif item[0] == ":":
+                               self.replaceScanCode( item[1], item[2] )
+
+               # Clear assignment cache
+               self.assignmentCache = []
+
        # Generate/Correlate Layers
        def generate( self ):
                self.generateIndices()