]> git.donarmstrong.com Git - kiibohd-kll.git/blobdiff - backends/kiibohd.py
Adding cabilities index to kll compiler
[kiibohd-kll.git] / backends / kiibohd.py
index c03f853def63d41e45b14c1ca1c24aed508b3e5d..70fd58c8e7c97dae0a121c36ed6223cf4fc974ca 100644 (file)
@@ -123,21 +123,26 @@ class Backend( BackendBase ):
                # Iterate through defines and lookup the variables
                for define in variables.defines.keys():
                        if define in variables.overallVariables.keys():
-                               self.fill_dict['Defines'] += "\n#define {0} {1}".format( variables.defines[ define ], variables.overallVariables[ define ] )
+                               self.fill_dict['Defines'] += "\n#define {0} {1}".format( variables.defines[ define ], variables.overallVariables[ define ].replace( '\n', ' \\\n' ) )
                        else:
                                print( "{0} '{1}' not defined...".format( WARNING, define ) )
 
 
                ## Capabilities ##
+               self.fill_dict['CapabilitiesFuncDecl'] = ""
                self.fill_dict['CapabilitiesList'] = "const Capability CapabilitiesList[] = {\n"
+               self.fill_dict['CapabilitiesIndices'] = "typedef enum CapabilityIndex {\n"
 
                # Keys are pre-sorted
                for key in capabilities.keys():
                        funcName = capabilities.funcName( key )
                        argByteWidth = capabilities.totalArgBytes( key )
                        self.fill_dict['CapabilitiesList'] += "\t{{ {0}, {1} }},\n".format( funcName, argByteWidth )
+                       self.fill_dict['CapabilitiesFuncDecl'] += "void {0}( uint8_t state, uint8_t stateType, uint8_t *args );\n".format( funcName )
+                       self.fill_dict['CapabilitiesIndices'] += "\t{0}_index,\n".format( funcName )
 
                self.fill_dict['CapabilitiesList'] += "};"
+               self.fill_dict['CapabilitiesIndices'] += "} CapabilityIndex;"
 
 
                ## Results Macros ##
@@ -219,13 +224,17 @@ class Backend( BackendBase ):
 
                        # Add the trigger macro scan code guide
                        # See kiibohd controller Macros/PartialMap/kll.h for exact formatting details
-                       for sequence in range( 0, len( macros.triggersIndexSorted[ trigger ][ 0 ] ) ):
+                       for sequence in range( 0, len( macros.triggersIndexSorted[ trigger ][0] ) ):
                                # For each combo in the sequence, add the length of the combo
                                self.fill_dict['TriggerMacros'] += "{0}, ".format( len( macros.triggersIndexSorted[ trigger ][0][ sequence ] ) )
 
                                # For each combo, add the key type, key state and scan code
-                               for combo in range( 0, len( macros.triggersIndexSorted[ trigger ][ 0 ][ sequence ] ) ):
-                                       triggerItem = macros.triggersIndexSorted[ trigger ][ 0 ][ sequence ][ combo ]
+                               for combo in range( 0, len( macros.triggersIndexSorted[ trigger ][0][ sequence ] ) ):
+                                       triggerItemId = macros.triggersIndexSorted[ trigger ][0][ sequence ][ combo ]
+
+                                       # Lookup triggerItem in ScanCodeStore
+                                       triggerItemObj = macros.scanCodeStore[ triggerItemId ]
+                                       triggerItem = triggerItemObj.offset( macros.interconnectOffset )
 
                                        # TODO Add support for Analog keys
                                        # TODO Add support for LED states
@@ -254,21 +263,32 @@ class Backend( BackendBase ):
                self.fill_dict['MaxScanCode'] = "#define MaxScanCode 0x{0:X}".format( macros.overallMaxScanCode )
 
 
+               ## Interconnect ScanCode Offset List ##
+               self.fill_dict['ScanCodeInterconnectOffsetList'] = "const uint8_t InterconnectOffsetList[] = {\n"
+               for offset in range( 0, len( macros.interconnectOffset ) ):
+                       self.fill_dict['ScanCodeInterconnectOffsetList'] += "\t0x{0:02X},\n".format( macros.interconnectOffset[ offset ] )
+               self.fill_dict['ScanCodeInterconnectOffsetList'] += "};"
+
+
+               ## Max Interconnect Nodes ##
+               self.fill_dict['InterconnectNodeMax'] = "#define InterconnectNodeMax 0x{0:X}\n".format( len( macros.interconnectOffset ) )
+
+
                ## Default Layer and Default Layer Scan Map ##
                self.fill_dict['DefaultLayerTriggerList'] = ""
                self.fill_dict['DefaultLayerScanMap'] = "const nat_ptr_t *default_scanMap[] = {\n"
 
                # Iterate over triggerList and generate a C trigger array for the default map and default map array
-               for triggerList in range( macros.firstScanCode[ 0 ], len( macros.triggerList[ 0 ] ) ):
+               for triggerList in range( macros.firstScanCode[0], len( macros.triggerList[0] ) ):
                        # Generate ScanCode index and triggerList length
-                       self.fill_dict['DefaultLayerTriggerList'] += "Define_TL( default, 0x{0:02X} ) = {{ {1}".format( triggerList, len( macros.triggerList[ 0 ][ triggerList ] ) )
+                       self.fill_dict['DefaultLayerTriggerList'] += "Define_TL( default, 0x{0:02X} ) = {{ {1}".format( triggerList, len( macros.triggerList[0][ triggerList ] ) )
 
                        # Add scanCode trigger list to Default Layer Scan Map
                        self.fill_dict['DefaultLayerScanMap'] += "default_tl_0x{0:02X}, ".format( triggerList )
 
                        # Add each item of the trigger list
-                       for trigger in macros.triggerList[ 0 ][ triggerList ]:
-                               self.fill_dict['DefaultLayerTriggerList'] += ", {0}".format( trigger )
+                       for triggerItem in macros.triggerList[0][ triggerList ]:
+                               self.fill_dict['DefaultLayerTriggerList'] += ", {0}".format( triggerItem )
 
                        self.fill_dict['DefaultLayerTriggerList'] += " };\n"
                self.fill_dict['DefaultLayerTriggerList'] = self.fill_dict['DefaultLayerTriggerList'][:-1] # Remove last newline