Browse Source

Adding None keyword (0.3b)

- Prevents fall-through
- Cannot be combined with other result capabilities
master
Jacob Alexander 9 years ago
parent
commit
d05f7ae820
4 changed files with 28 additions and 11 deletions
  1. 17
    10
      backends/kiibohd.py
  2. 2
    0
      examples/simple2.kll
  3. 6
    1
      kll.py
  4. 3
    0
      kll_lib/hid_dict.py

+ 17
- 10
backends/kiibohd.py View File



# Add each of the arguments of the capability # Add each of the arguments of the capability
for arg in range( 0, len( resultItem[1] ) ): 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 # 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 # Required by USB to end at sequence without holding the key down

+ 2
- 0
examples/simple2.kll View File

S0x46 : SYS["UnDock"]; S0x46 : SYS["UnDock"];
S0x47 : SYS0xA2; S0x47 : SYS0xA2;


S0x48 : None;


+ 6
- 1
kll.py View File

def make_sysCode_number( token ): def make_sysCode_number( token ):
return make_hidCode_number( 'SysCode', 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 ): def make_seqString( token ):
# Shifted Characters, and amount to move by to get non-shifted version # Shifted Characters, and amount to move by to get non-shifted version
# US ANSI # US ANSI
scanCode = tokenType('ScanCode') >> make_scanCode scanCode = tokenType('ScanCode') >> make_scanCode
consCode = tokenType('ConsCode') >> make_consCode consCode = tokenType('ConsCode') >> make_consCode
sysCode = tokenType('SysCode') >> make_sysCode sysCode = tokenType('SysCode') >> make_sysCode
none = tokenType('None') >> make_none
name = tokenType('Name') name = tokenType('Name')
number = tokenType('Number') >> make_number number = tokenType('Number') >> make_number
comma = tokenType('Comma') comma = tokenType('Comma')
# Trigger / Result Codes # Trigger / Result Codes
triggerCode_outerList = scanCode_sequence >> optionExpansion triggerCode_outerList = scanCode_sequence >> optionExpansion
triggerUSBCode_outerList = usbCode_sequence >> optionExpansion >> hidCodeToCapability triggerUSBCode_outerList = usbCode_sequence >> optionExpansion >> hidCodeToCapability
resultCode_outerList = capFunc_sequence >> optionExpansion >> hidCodeToCapability
resultCode_outerList = ( ( capFunc_sequence >> optionExpansion ) | none ) >> hidCodeToCapability




## Main Rules ## Main Rules

+ 3
- 0
kll_lib/hid_dict.py View File



# Rather than generating tables of hex USB codes for the keymapping tables, readable defines are used (which correspond to usb_hid.h) # 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([ hid_lookup_dictionary = dict([
# Fall-through block
( ('NONE', 0), '' ), # Special case, there are no arguments

# USB HID Keyboard Codes # USB HID Keyboard Codes
( ('USB', 0x00), 'KEY_NOEVENT' ), # Event, not a physical key ( ('USB', 0x00), 'KEY_NOEVENT' ), # Event, not a physical key
( ('USB', 0x01), 'KEY_ERRORROLLOVER' ), # Event, not a physical key ( ('USB', 0x01), 'KEY_ERRORROLLOVER' ), # Event, not a physical key