コード例 #1
0
def handle_keyboard_event(hidg_dev, input_ev_dev):
    modkey = [0, 0, 0, 0, 0, 0, 0, 0]
    while True:
        try:
            for event in input_ev_dev.read_loop():
                if VERBOSE:
                    print('{} got event: type={}, code={}, value={}'.format(
                        input_ev_dev.name, event.type, event.code,
                        event.value))
                if event.type == evdev.ecodes.EV_KEY:
                    if event.value != 2:
                        key = event.code
                        evdev_code = evdev.ecodes.KEY[key]
                        modkey_element = keymap.modkey(evdev_code)

                        if modkey_element > 0:
                            if event.value == 1:
                                modkey[modkey_element] = 1
                            else:
                                modkey[modkey_element] = 0

                        bit_pattern = ''
                        for bit in modkey:
                            bit_pattern += str(bit)

                        modbyte = int(bit_pattern, 2)

                        if event.value == 0:
                            key = 0
                        else:
                            key = event.code

                        evdev_code = evdev.ecodes.KEY[key]
                        modkey_element = keymap.modkey(evdev_code)

                        if event.value == 0:
                            key = 0
                        else:
                            key = event.code

                        barray = bytearray([
                            KEYBOARD_REPORT_ID, modbyte, 0,
                            keymap.keytable[evdev_code], 0, 0, 0, 0, 0
                        ])
                        hidg_dev.write(barray)
                        hidg_dev.flush()
        except Exception as e:
            print(traceback.format_exc())
            time.sleep(5)
コード例 #2
0
    def change_state(self, event):
        evdev_code = ecodes.KEY[event.code]
        modkey_element = keymap.modkey(evdev_code)

        if modkey_element > 0:
            if self.mods[modkey_element] == 0:
                self.mods[modkey_element] = 1
            else:
                self.mods[modkey_element] = 0
            self.lock = mapneo.locks(self.mods, self.lock)

        else:

            #Get the keycode of the key
            hex_key_old = keymap.convert(ecodes.KEY[event.code])
            hex_key = mapneo.convert(hex_key_old, self.mods, self.state[2],
                                     self.lock)
            #Loop through elements 4 to 9 of the inport report structure
            for i in range(4, 10):  #(4,10)
                if self.state[i] == hex_key and event.value == 0:
                    #Code 0 so we need to depress it
                    self.state[i] = 0x00
                elif self.state[i] == 0x00 and event.value == 1:
                    #if the current space if empty and the key is being pressed
                    self.state[i] = hex_key
                    break
コード例 #3
0
    def change_state(self, button, event, i):

        inputStr = database.keyDatabase(button.objectName(), i)
        if inputStr == 'ctrl' or inputStr == 'shift' or inputStr == 'alt':
            inputStr = 'left' + inputStr
        elif inputStr == 'caps':
            inputStr = inputStr + 'lock'
        elif inputStr == '.':
            inputStr = 'dot'
        evdev_code = "KEY_" + inputStr.upper()
        modkey_element = keymap.modkey(evdev_code)

        if modkey_element > 0:
            if self.state[2][modkey_element] == 0:
                self.state[2][modkey_element] = 1
            else:
                self.state[2][modkey_element] = 0

        else:

            #Get the keycode of the key
            #hex_key = keymap.convert(ecodes.KEY[event.code])
            hex_key = keymap.convert(evdev_code)
            #Loop through elements 4 to 9 of the inport report structure
            for i in range(4, 10):
                if self.state[i] == hex_key and event == 0:
                    #Code 0 so we need to depress it
                    self.state[i] = 0x00
                elif self.state[i] == 0x00 and event == 1:
                    #if the current space if empty and the key is being pressed
                    self.state[i] = hex_key
                    break
コード例 #4
0
ファイル: client.py プロジェクト: oesmith/keyboard
 def update(self, event):
     code = evdev.ecodes.KEY[event.code]
     modkey = keymap.modkey(code)
     if modkey > 0:
         self.modifier_state ^= 1 << (7 - modkey)
     else:
         key = keymap.convert(code)
         for i in range(len(self.key_state)):
             if self.key_state[i] == 0 and event.value == 1:
                 self.key_state[i] = key
                 break
             elif self.key_state[i] == key and event.value == 0:
                 self.key_state[i] = 0
コード例 #5
0
ファイル: voice_kb_client.py プロジェクト: fmacrae/BTSquawk
 def event_loop(self):
     """
     Loop to check for keyboard events and send HID message
     over D-Bus keyboard service when they happen
     """
     print('Listening...')
     for event in self.dev.read_loop():
         # only bother if we hit a key and its an up or down event
         if event.type == evdev.ecodes.EV_KEY and event.value < 2:
             key_str = evdev.ecodes.KEY[event.code]
             mod_key = keymap.modkey(key_str)
             if mod_key > -1:
                 self.update_mod_keys(mod_key, event.value)
             else:
                 self.update_keys(keymap.convert(key_str), event.value)
         self.send_keys()
コード例 #6
0
ファイル: Keyboard.py プロジェクト: chandlerpl/New-BTGamepad
 def change_state(self, event):
     evdev_code = ecodes.KEY[event.code]
     modkey_element = keymap.modkey(evdev_code)
     if modkey_element > 0:
         if self.state[2][modkey_element] == 0:
             self.state[2][modkey_element] = 1
         else:
             self.state[2][modkey_element] = 0
     else:
         hex_key = keymap.convert(evdev_code)
         for i in range(4, 10):
             if self.state[i] == hex_key and event.value == 0:
                 self.state[i] = 0x00
             elif self.state[i] == 0x00 and event.value == 1:
                 self.state[i] = hex_key
             break
コード例 #7
0
ファイル: Keyboard.py プロジェクト: 007durgesh219/BTGamepad
 def change_state(self,event):
     evdev_code = ecodes.KEY[event.code]
     modkey_element = keymap.modkey(evdev_code)
     if modkey_element > 0:
         if self.state[2][modkey_element] == 0:
             self.state[2][modkey_element] = 1
         else:
             self.state[2][modkey_element] = 0
     else:
         hex_key = keymap.convert(evdev_code)
         for i in range(4,10):
             if self.state[i] == hex_key and event.value == 0:
                 self.state[i] = 0x00
             elif self.state[i] == 0x00 and event.value == 1:
                 self.state[i] = hex_key
             break
コード例 #8
0
ファイル: PiTooth.py プロジェクト: Qlam77/Practicum
 def change_state(self, event):
     evdev_code = ecodes.KEY[event.code]
     modkey_element = keymap.modkey(evdev_code)
     if modkey_element > 0:
         # Need to set one of the modifier bits
         if self.state[2][modkey_element] == 0:
             self.state[2][modkey_element] = 1
         else:
             self.state[2][modkey_element] = 0
     else:
         # Get the hex keycode of the key
         hex_key = keymap.convert(ecodes.KEY[event.code])
         # Loop through elements 4 to 9 of the input report structure
         for i in range (4, 10):
             if self.state[i] == hex_key and event.value == 0:
                 # Code is 0 so we need to depress it
                 self.state[i] = 0x00
             elif self.state[i] == 0x00 and event.value == 1:
                 # If the current space is empty and the key is being pressed
                 self.state[i] = hex_key
                 break
コード例 #9
0
  def getReport(self, json):
    # The structure for an bt keyboard input report (size is 10 bytes)
    report = [
         0xA1, # This is an input report
         0x01, # Report ID
         # Bit array for Modifier keys
         [0,   # Right GUI - (usually the Windows key)
          0,   # Right ALT
          0,   # Right Shift
          0,   # Right Control
          0,   # Left GUI - (again, usually the Windows key)
          0,   # Left ALT
          0,   # Left Shift
          0],   # Left Control
         0x00,  # Vendor reserved
         0x00,  # Rest is space for 6 keys
         0x00,
         0x00,
         0x00,
         0x00,
         0x00 ]

    # Expects json to be in the form of {"pressedKeys": ["KEY_LEFTSHIFT", "KEY_A"]}
    if 'pressedKeys' not in json.keys():
      return

    pressedKeys = json['pressedKeys']
    startIndexForKeys = 4

    for pressedKey in pressedKeys:
      modkey_element = keymap.modkey(pressedKey)
      if modkey_element > 0:
          report[2][modkey_element] = 1
      else:
        # Get the hex keycode of the key
        hex_key = keymap.convert(pressedKey)
        report[startIndexForKeys] = hex_key
        startIndexForKeys += 1
    return report
コード例 #10
0
ファイル: PiTooth.py プロジェクト: caminante99/BluePloverPi
 def change_state(self, event):
     # linux and X codes differ by X's reserved 8?
     evdev_code = ecodes.KEY[event.detail - 8]
     modkey_element = keymap.modkey(evdev_code)
     if modkey_element > 0:
         # Need to set one of the modifier bits
         if self.state[2][modkey_element] == 0:
             self.state[2][modkey_element] = 1
         else:
             self.state[2][modkey_element] = 0
     else:
         # Get the hex keycode of the key
         hex_key = keymap.convert(evdev_code)
         # Loop through elements 4 to 9 of the input report structure
         for i in range(4, 10):
             if self.state[i] == hex_key and event.type == X.KeyRelease:
                 # Code is 0 so we need to depress it
                 self.state[i] = 0x00
                 break
             elif self.state[i] == 0x00 and event.type == X.KeyPress:
                 # If the current space is empty and the key is being pressed
                 self.state[i] = hex_key
                 break
コード例 #11
0
    def change_keyboard_state(self, event):
        evdev_code = ecodes.KEY[event.code]
        modkey_element = keymap.modkey(evdev_code)

        if modkey_element > 0:
            if self.keyboard_state[2][modkey_element] == 0:
                self.keyboard_state[2][modkey_element] = 1
            else:
                self.keyboard_state[2][modkey_element] = 0

        else:

            # Get the keycode of the key
            hex_key = keymap.convert(ecodes.KEY[event.code])
            print("Key " + str(ecodes.KEY[event.code]) + " was pressed")
            # Loop through elements 4 to 9 of the input report structure
            for i in range(4, 10):
                if self.keyboard_state[i] == hex_key and event.value == 0:
                    # Code 0 so we need to depress it
                    self.keyboard_state[i] = 0x00
                elif self.keyboard_state[i] == 0x00 and event.value == 1:
                    # if the current space is empty and the key is being pressed
                    self.keyboard_state[i] = hex_key
                    break
コード例 #12
0
            print(device.fn, device.name, device.phys)
            if 'keyboard' in device.name.lower():
                print('Keyboard device {} is found.'.format(device.name))
            else:
                print('Waiting for keyboard device')
                time.sleep(1)
                continue
            device = evdev.InputDevice(device.fn)
            rainbow = Rainbow()
            for event in device.read_loop():
                print('type={}, code={}, value={}'.format(event.type, event.code, event.value))
                if event.type == evdev.ecodes.EV_KEY:
                     if event.value != 2:
                         key = event.code
                         evdev_code = evdev.ecodes.KEY[key]
                         modkey_element = keymap.modkey(evdev_code)

                         if modkey_element > 0:
                             if event.value == 1:
                                 modkey[modkey_element] = 1
                             else:
                                 modkey[modkey_element] = 0
                             continue

                         bin_str = ""          
                         for bit in modkey:
                             bin_str += str(bit)

                         modbyte = int(bin_str, 2)

                         if event.value == 0: