changeset 6:fbd991c7542d

Adding support for USB Code trigger assignment - Added USBCode "cached assignment" - Added ANSI -> Colemak USBCode assignment kll file - Removed debug printing
author Jacob Alexander <haata@kiibohd.com>
date Sun, 07 Sep 2014 21:32:36 -0700
parents 4bea03bae7eb
children 8104b5dd54c4
files examples/colemak.kll examples/md1Map.kll kll.py kll_lib/containers.py
diffstat 4 files changed, 69 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/examples/colemak.kll	Sun Sep 07 21:32:36 2014 -0700
@@ -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';
+
--- a/examples/md1Map.kll	Sat Sep 06 20:56:46 2014 -0700
+++ b/examples/md1Map.kll	Sun Sep 07 21:32:36 2014 -0700
@@ -4,11 +4,12 @@
 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
 
 
--- a/kll.py	Sat Sep 06 20:56:46 2014 -0700
+++ b/kll.py	Sun Sep 07 21:32:36 2014 -0700
@@ -397,9 +397,6 @@
 			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 @@
 		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 @@
 
 #| <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 @@
 			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()
--- a/kll_lib/containers.py	Sat Sep 06 20:56:46 2014 -0700
+++ b/kll_lib/containers.py	Sun Sep 07 21:32:36 2014 -0700
@@ -94,6 +94,9 @@
 		self.triggerList = []
 		self.maxScanCode = []
 
+		# USBCode Assignment Cache
+		self.assignmentCache = []
+
 	def __repr__( self ):
 		return "{0}".format( self.macros )
 
@@ -124,11 +127,35 @@
 
 		# 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()