]> git.donarmstrong.com Git - kiibohd-kll.git/commitdiff
Adding None keyword (0.3b)
authorJacob Alexander <haata@kiibohd.com>
Sun, 10 May 2015 22:32:15 +0000 (15:32 -0700)
committerJacob Alexander <haata@kiibohd.com>
Sun, 10 May 2015 22:32:15 +0000 (15:32 -0700)
- Prevents fall-through
- Cannot be combined with other result capabilities

backends/kiibohd.py
examples/simple2.kll
kll.py
kll_lib/hid_dict.py

index 44daad8fc07ddf4699c4e037988fa96486d384dc..c03f853def63d41e45b14c1ca1c24aed508b3e5d 100644 (file)
@@ -168,16 +168,23 @@ class Backend( BackendBase ):
 
                                        # Add each of the arguments of the capability
                                        for arg in range( 0, len( resultItem[1] ) ):
-                                               # If this is a CONSUMER_ element, needs to be split into 2 elements
-                                               if isinstance( resultItem[1][ arg ], str ) and 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 )
-                                               else:
-                                                       self.fill_dict['ResultMacros'] += "{0}, ".format( resultItem[1][ arg ] )
+                                               # 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
index 9183d3fe45a07d64279abb4a24d1c1543fbc0f64..9e03c46455e93aa0ab847b9eda2f1b4e11163745 100644 (file)
@@ -39,3 +39,5 @@ S0x45 : SYS[0xA0];
 S0x46 : SYS["UnDock"];
 S0x47 : SYS0xA2;
 
+S0x48 : None;
+
diff --git a/kll.py b/kll.py
index 95884da14990874b007527a6865d6dbe5b1d7630..668b81639819622e1b123d4eee2ef994280b7def 100755 (executable)
--- a/kll.py
+++ b/kll.py
@@ -255,6 +255,10 @@ def make_consCode_number( token ):
 def make_sysCode_number( token ):
        return make_hidCode_number( 'SysCode', token )
 
+   # Replace key-word with None specifier (which indicates a noneOut capability)
+def make_none( token ):
+       return [[[('NONE', 0)]]]
+
 def make_seqString( token ):
        # Shifted Characters, and amount to move by to get non-shifted version
        # US ANSI
@@ -535,6 +539,7 @@ usbCode     = tokenType('USBCode') >> make_usbCode
 scanCode    = tokenType('ScanCode') >> make_scanCode
 consCode    = tokenType('ConsCode') >> make_consCode
 sysCode     = tokenType('SysCode') >> make_sysCode
+none        = tokenType('None') >> make_none
 name        = tokenType('Name')
 number      = tokenType('Number') >> make_number
 comma       = tokenType('Comma')
@@ -603,7 +608,7 @@ capFunc_sequence  = oneplus( ( capFunc_combo | seqString ) + skip( maybe( comma
   # Trigger / Result Codes
 triggerCode_outerList    = scanCode_sequence >> optionExpansion
 triggerUSBCode_outerList = usbCode_sequence >> optionExpansion >> hidCodeToCapability
-resultCode_outerList     = capFunc_sequence >> optionExpansion >> hidCodeToCapability
+resultCode_outerList     = ( ( capFunc_sequence >> optionExpansion ) | none ) >> hidCodeToCapability
 
 
  ## Main Rules
index d92a6c0332bf187a8b9d3087ebdd5e0b70a1aeb4..e33957095de612251bd2d24a82503ebc5933c94a 100644 (file)
@@ -20,6 +20,9 @@
 
 # Rather than generating tables of hex USB codes for the keymapping tables, readable defines are used (which correspond to usb_hid.h)
 hid_lookup_dictionary = dict([
+       # Fall-through block
+       ( ('NONE', 0), '' ), # Special case, there are no arguments
+
        # USB HID Keyboard Codes
        ( ('USB', 0x00), 'KEY_NOEVENT' ), # Event, not a physical key
        ( ('USB', 0x01), 'KEY_ERRORROLLOVER' ), # Event, not a physical key