led = ~0
gc.disable() # So we never get GC pauses
try:
    for ev in scanner():
        if ev is None: # complete scan, poll LEDs
            leds = kbd.led_status
            if leds and leds[0] != led:
                led = leds[0]
                for i in range(3):
                    LEDS[i].value = not (led & (1 << i))
            continue

        key_number = ev & 0xfff
        pressed = ev >> 15

        keycode = keycodes.get(key_number)
        if led & 1:
            keycode = keycodes_l1.get(key_number, keycode)

        # the normal methods aren't used so that gc allocations can be avoided
        if keycode is not None:
            if pressed:
                kbd._add_keycode_to_report(keycode)
            else:
                kbd._remove_keycode_from_report(keycode)
            kbd._keyboard_device.send_report(kbd.report)

finally:
    kbd.release_all()