Adding basic layer support
- Not yet complete - Partial layers are not compiling properly (adding too many macros, wasting memory) - Adding example hhkb layout to try out as a layer
This commit is contained in:
parent
0fe79f3418
commit
ff6ba9198b
@ -178,20 +178,36 @@ class Backend:
|
||||
self.fill_dict['DefaultLayerScanMap'] = self.fill_dict['DefaultLayerScanMap'][:-2] # Remove last comma and space
|
||||
self.fill_dict['DefaultLayerScanMap'] += "\n};"
|
||||
|
||||
#print( self.fill_dict['DefaultLayerTriggerList'] )
|
||||
#print( self.fill_dict['DefaultLayerScanMap'] )
|
||||
|
||||
|
||||
## Partial Layers ##
|
||||
## Partial Layers and Partial Layer Scan Maps ##
|
||||
self.fill_dict['PartialLayerTriggerLists'] = ""
|
||||
# TODO
|
||||
#print( self.fill_dict['PartialLayerTriggerLists'] )
|
||||
|
||||
|
||||
## Partial Layer Scan Maps ##
|
||||
self.fill_dict['PartialLayerScanMaps'] = ""
|
||||
# TODO
|
||||
#print( self.fill_dict['PartialLayerScanMaps'] )
|
||||
|
||||
# Iterate over each of the layers, excluding the default layer
|
||||
for layer in range( 1, len( macros.triggerList ) ):
|
||||
# Prepare each layer
|
||||
self.fill_dict['PartialLayerScanMaps'] += "// Partial Layer {0}\n".format( layer )
|
||||
self.fill_dict['PartialLayerScanMaps'] += "const unsigned int *layer{0}_scanMap[] = {{\n".format( layer )
|
||||
self.fill_dict['PartialLayerTriggerLists'] += "// Partial Layer {0}\n".format( layer )
|
||||
|
||||
# Iterate over triggerList and generate a C trigger array for the layer
|
||||
for triggerList in range( 0, len( macros.triggerList[ layer ] ) ):
|
||||
# Generate ScanCode index and triggerList length
|
||||
self.fill_dict['PartialLayerTriggerLists'] += "Define_TL( layer{0}, 0x{1:02X} ) = {{ {2}".format( layer, triggerList, len( macros.triggerList[ 0 ][ triggerList ] ) )
|
||||
|
||||
# Add scanCode trigger list to Default Layer Scan Map
|
||||
self.fill_dict['PartialLayerScanMaps'] += "layer{0}_tl_0x{1:02X}, ".format( layer, triggerList )
|
||||
|
||||
# Add each item of the trigger list
|
||||
for trigger in macros.triggerList[ 0 ][ triggerList ]:
|
||||
self.fill_dict['PartialLayerTriggerLists'] += ", {0}".format( trigger )
|
||||
|
||||
self.fill_dict['PartialLayerTriggerLists'] += " };\n"
|
||||
self.fill_dict['PartialLayerTriggerLists'] += "\n"
|
||||
self.fill_dict['PartialLayerScanMaps'] = self.fill_dict['PartialLayerScanMaps'][:-2] # Remove last comma and space
|
||||
self.fill_dict['PartialLayerScanMaps'] += "\n};\n\n"
|
||||
self.fill_dict['PartialLayerTriggerLists'] = self.fill_dict['PartialLayerTriggerLists'][:-2] # Remove last 2 newlines
|
||||
self.fill_dict['PartialLayerScanMaps'] = self.fill_dict['PartialLayerScanMaps'][:-2] # Remove last 2 newlines
|
||||
|
||||
|
||||
## Layer Index List ##
|
||||
@ -200,15 +216,13 @@ class Backend:
|
||||
# Iterate over each layer, adding it to the list
|
||||
for layer in range( 0, len( macros.triggerList ) ):
|
||||
# Default map is a special case, always the first index
|
||||
# TODO Fix names
|
||||
if layer == 0:
|
||||
self.fill_dict['LayerIndexList'] += '\tLayer_IN( default_scanMap, "DefaultMap" ),\n'
|
||||
else:
|
||||
# TODO Partial Layer
|
||||
pass
|
||||
self.fill_dict['LayerIndexList'] += '\tLayer_IN( layer{0}_scanMap, "Layer {0}" ),\n'.format( layer )
|
||||
self.fill_dict['LayerIndexList'] += "};"
|
||||
|
||||
#print( self.fill_dict['LayerIndexList'] )
|
||||
|
||||
|
||||
# Generates the output keymap with fill tags filled
|
||||
def generate( self, filepath ):
|
||||
|
@ -6,7 +6,7 @@ KLL = 0.3;
|
||||
# Modified Date
|
||||
Date = 2014-09-07;
|
||||
|
||||
# Top row
|
||||
# Top Row
|
||||
'e' : 'f';
|
||||
'r' : 'p';
|
||||
't' : 'g';
|
||||
|
53
examples/hhkbpro2.kll
Normal file
53
examples/hhkbpro2.kll
Normal file
@ -0,0 +1,53 @@
|
||||
Name = hhkbpro2;
|
||||
Version = 0.1;
|
||||
Author = "HaaTa (Jacob Alexander) 2014";
|
||||
KLL = 0.3;
|
||||
|
||||
# Modified Date
|
||||
Date = 2014-09-07;
|
||||
|
||||
# Number Row
|
||||
U"1" : U"F1";
|
||||
U"2" : U"F2";
|
||||
U"3" : U"F3";
|
||||
U"4" : U"F4";
|
||||
U"5" : U"F5";
|
||||
U"6" : U"F6";
|
||||
U"7" : U"F7";
|
||||
U"8" : U"F8";
|
||||
U"9" : U"F9";
|
||||
U"0" : U"F10";
|
||||
U"-" : U"F11";
|
||||
U"=" : U"F12";
|
||||
U"Backslash" : U"Insert";
|
||||
U"Backtick" : U"Delete";
|
||||
|
||||
# Top Row
|
||||
U"Tab" : U"Capslock";
|
||||
U"I" : U"PrintScreen";
|
||||
U"O" : U"ScrollLock";
|
||||
U"P" : U"Pause";
|
||||
U"{" : U"Up";
|
||||
|
||||
# Middle Row
|
||||
U"A" : U"VolumeDown";
|
||||
U"S" : U"VolumeUp";
|
||||
U"D" : U"Mute";
|
||||
#U"F" : U"Eject"; # TODO Requires additional firmware support for media keys -HaaTa
|
||||
U"H" : U"Keypad Asterix";
|
||||
U"J" : U"Keypad Slash";
|
||||
U"K" : U"Home";
|
||||
U"L" : U"PageUp";
|
||||
U";" : U"Left";
|
||||
U"Quote" : U"Right";
|
||||
|
||||
# Bottom Row
|
||||
U"N" : U"Keypad Plus";
|
||||
U"M" : U"Keypad Minus";
|
||||
U"Comma" : U"End";
|
||||
U"Period" : U"PageDown";
|
||||
U"Slash" : U"Down";
|
||||
|
||||
# Space Row
|
||||
# N/A
|
||||
|
@ -40,7 +40,7 @@ S0x17 : U"O";
|
||||
S0x18 : U"P";
|
||||
S0x19 : U"LBrace";
|
||||
S0x1A : U"RBrace";
|
||||
S0x1B : U"Delete";
|
||||
S0x1B : U"Backspace";
|
||||
S0x1C : U"Ctrl";
|
||||
S0x1D : U"A";
|
||||
S0x1E : U"S";
|
||||
|
29
kll.py
29
kll.py
@ -507,6 +507,18 @@ def parse( tokenSequence ):
|
||||
|
||||
|
||||
|
||||
def processKLLFile( filename ):
|
||||
with open( filename ) as file:
|
||||
data = file.read()
|
||||
tokenSequence = tokenize( data )
|
||||
#print ( pformat( tokenSequence ) ) # Display tokenization
|
||||
tree = parse( tokenSequence )
|
||||
|
||||
# Apply assignment cache, see 5.1.2 USB Codes for why this is necessary
|
||||
macros_map.replayCachedAssignments()
|
||||
|
||||
|
||||
|
||||
### Main Entry Point ###
|
||||
|
||||
if __name__ == '__main__':
|
||||
@ -517,17 +529,18 @@ if __name__ == '__main__':
|
||||
backend_import = importlib.import_module( "backends.{0}".format( backend_name ) )
|
||||
backend = backend_import.Backend( template )
|
||||
|
||||
#TODO Move elsewhere
|
||||
# Default combined layer
|
||||
for filename in defaultFiles:
|
||||
with open( filename ) as file:
|
||||
data = file.read()
|
||||
processKLLFile( filename )
|
||||
|
||||
tokenSequence = tokenize( data )
|
||||
#print ( pformat( tokenSequence ) ) # Display tokenization
|
||||
tree = parse( tokenSequence )
|
||||
# Iterate through additional layers
|
||||
for partial in partialFileSets:
|
||||
# Increment layer for each -p option
|
||||
macros_map.addLayer()
|
||||
|
||||
# Apply assignment cache, see 5.1.2 USB Codes for why this is necessary
|
||||
macros_map.replayCachedAssignments()
|
||||
# Iterate and process each of the file in the layer
|
||||
for filename in partial:
|
||||
processKLLFile( filename )
|
||||
|
||||
# Do macro correlation and transformation
|
||||
macros_map.generate()
|
||||
|
@ -100,8 +100,10 @@ class Macros:
|
||||
def __repr__( self ):
|
||||
return "{0}".format( self.macros )
|
||||
|
||||
def setLayer( self, layer ):
|
||||
self.layer = layer
|
||||
def addLayer( self ):
|
||||
# Increment layer count, and append another macros dictionary
|
||||
self.layer += 1
|
||||
self.macros.append( dict() )
|
||||
|
||||
# Use for ScanCode trigger macros
|
||||
def appendScanCode( self, trigger, result ):
|
||||
|
Reference in New Issue
Block a user