def handle_lirc_event(self, code):
""" LIRC event handler.
To simplify event handling it wraps IR events into user event with keyboard sub-type.
For one IR event it generates two events - one for key down and one for key up.
:param code: IR code
"""
if self.screensaver_dispatcher.saver_running:
self.screensaver_dispatcher.cancel_screensaver()
return
d = {}
d[KEY_SUB_TYPE] = SUB_TYPE_KEYBOARD
d[KEY_ACTION] = pygame.KEYDOWN
d[KEY_KEYBOARD_KEY] = None
try:
d[KEY_KEYBOARD_KEY] = lirc_keyboard_map[code[0]]
station_screen = isinstance(self.current_screen, StationScreen)
file_player_screen = isinstance(self.current_screen, FilePlayerScreen)
if file_player_screen or (station_screen and self.current_screen.station_menu.current_mode == StationMenu.STATION_MODE):
if code[0] == "up":
d[KEY_KEYBOARD_KEY] = kbd_keys[KEY_VOLUME_UP]
elif code[0] == "down":
d[KEY_KEYBOARD_KEY] = kbd_keys[KEY_VOLUME_DOWN]
logging.debug("Received IR key: %s", d[KEY_KEYBOARD_KEY])
except KeyError:
logging.debug("Received not supported key: %s", code[0])
pass
if d[KEY_KEYBOARD_KEY]:
event = pygame.event.Event(USER_EVENT_TYPE, **d)
pygame.event.post(event)
d[KEY_ACTION] = pygame.KEYUP
event = pygame.event.Event(USER_EVENT_TYPE, **d)
pygame.event.post(event)
评论列表
文章目录