X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=backends%2Fkiibohd.py;h=c03f853def63d41e45b14c1ca1c24aed508b3e5d;hb=f3451f619c96788ec8998fc111af0b4c8189d8cf;hp=ca1f4fbb926a8d54fda481e9c9467645ea69aa1d;hpb=84425679377194dda8b62185d909e71bdbb9d3cb;p=kiibohd-kll.git diff --git a/backends/kiibohd.py b/backends/kiibohd.py index ca1f4fb..c03f853 100644 --- a/backends/kiibohd.py +++ b/backends/kiibohd.py @@ -29,8 +29,9 @@ from datetime import date # Modifying Python Path, which is dumb, but the only way to import up one directory... sys.path.append( os.path.expanduser('..') ) -from kll_lib.containers import * from kll_lib.backends import * +from kll_lib.containers import * +from kll_lib.hid_dict import * ### Classes ### @@ -40,9 +41,16 @@ class Backend( BackendBase ): templatePaths = ["templates/kiibohdKeymap.h", "templates/kiibohdDefs.h"] outputPaths = ["generatedKeymap.h", "kll_defs.h"] - # USB Code Capability Name - def usbCodeCapability( self ): - return "usbKeyOut"; + requiredCapabilities = { + 'CONS' : 'consCtrlOut', + 'NONE' : 'noneOut', + 'SYS' : 'sysCtrlOut', + 'USB' : 'usbKeyOut', + } + + # Capability Lookup + def capabilityLookup( self, type ): + return self.requiredCapabilities[ type ]; # TODO @@ -146,7 +154,7 @@ class Backend( BackendBase ): # Needed for USB behaviour, otherwise, repeated keys will not work if sequence > 0: # , , - self.fill_dict['ResultMacros'] += "1, {0}, 0x00, ".format( capabilities.getIndex( self.usbCodeCapability() ) ) + self.fill_dict['ResultMacros'] += "1, {0}, 0x00, ".format( capabilities.getIndex( self.capabilityLookup('USB') ) ) # For each combo in the sequence, add the length of the combo self.fill_dict['ResultMacros'] += "{0}, ".format( len( macros.resultsIndexSorted[ result ][ sequence ] ) ) @@ -160,13 +168,29 @@ class Backend( BackendBase ): # Add each of the arguments of the capability for arg in range( 0, len( resultItem[1] ) ): + # 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 ] ): + tag = resultItem[1][ arg ].split( '_', 1 )[1] + if '_' in tag: + tag = tag.replace( '_', '' ) + lookupNum = kll_hid_lookup_dictionary['ConsCode'][ tag ][1] + byteForm = lookupNum.to_bytes( 2, byteorder='little' ) # XXX Yes, little endian from how the uC structs work + self.fill_dict['ResultMacros'] += "{0}, {1}, ".format( *byteForm ) + continue + + # None, fall-through disable + elif resultItem[0] is self.capabilityLookup('NONE'): + continue + self.fill_dict['ResultMacros'] += "{0}, ".format( resultItem[1][ arg ] ) # If sequence is longer than 1, append a sequence spacer at the end of the sequence # Required by USB to end at sequence without holding the key down if len( macros.resultsIndexSorted[ result ] ) > 1: # , , - self.fill_dict['ResultMacros'] += "1, {0}, 0x00, ".format( capabilities.getIndex( self.usbCodeCapability() ) ) + self.fill_dict['ResultMacros'] += "1, {0}, 0x00, ".format( capabilities.getIndex( self.capabilityLookup('USB') ) ) # Add list ending 0 and end of list self.fill_dict['ResultMacros'] += "0 };\n"