]> git.donarmstrong.com Git - kiibohd-kll.git/blobdiff - backends/kiibohd.py
Fixing AL and AC namespaced Consumer control media keys
[kiibohd-kll.git] / backends / kiibohd.py
index 9f47150451cb706fae115ac54f31be92d83e190f..09b6dca4245c5d13727a880f5ec353548eb0d380 100644 (file)
@@ -129,15 +129,20 @@ class Backend( BackendBase ):
 
 
                ## 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 ##
@@ -171,7 +176,8 @@ class Backend( BackendBase ):
                                                # Special cases
                                                if isinstance( resultItem[1][ arg ], str ):
                                                        # If this is a CONSUMER_ element, needs to be split into 2 elements
-                                                       if re.match( '^CONSUMER_', resultItem[1][ arg ] ):
+                                                       # AC_ and AL_ are other sections of consumer control
+                                                       if re.match( '^(CONSUMER|AC|AL)_', resultItem[1][ arg ] ):
                                                                tag = resultItem[1][ arg ].split( '_', 1 )[1]
                                                                if '_' in tag:
                                                                        tag = tag.replace( '_', '' )
@@ -219,13 +225,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 +264,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