touch_screen.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import logging
  2. import traceback
  3. from threading import Thread
  4. import os
  5. import pygame
  6. import pykka
  7. import mopidy
  8. from mopidy import core
  9. from .screen_manager import ScreenManager
  10. logger = logging.getLogger(__name__)
  11. class TouchScreen(pykka.ThreadingActor, core.CoreListener):
  12. def __init__(self, config, core):
  13. super(TouchScreen, self).__init__()
  14. self.core = core
  15. self.running = False
  16. self.screen_size = (config['touchscreen']['screen_width'],
  17. config['touchscreen']['screen_height'])
  18. self.cache_dir = config['touchscreen']['cache_dir']
  19. self.fullscreen = config['touchscreen']['fullscreen']
  20. os.putenv("SDL_FBDEV", config['touchscreen']['sdl_fbdev'])
  21. os.putenv("SDL_MOUSEDRV", config['touchscreen'][
  22. 'sdl_mousdrv'])
  23. os.putenv("SDL_MOUSEDEV",config['touchscreen'][
  24. 'sdl_mousedev'])
  25. pygame.init()
  26. self.cursor = config['touchscreen']['cursor']
  27. self.screen_manager = ScreenManager(self.screen_size,
  28. self.core,
  29. self.cache_dir)
  30. # Raspberry pi GPIO
  31. self.gpio = config['touchscreen']['gpio']
  32. if self.gpio:
  33. from .gpio_inpput_manager import GPIOManager
  34. pins = {}
  35. pins['left'] = config['touchscreen']['gpio_left']
  36. pins['right'] = config['touchscreen']['gpio_right']
  37. pins['up'] = config['touchscreen']['gpio_up']
  38. pins['down'] = config['touchscreen']['gpio_down']
  39. pins['enter'] = config['touchscreen']['gpio_enter']
  40. self.gpio_manager = GPIOManager(pins)
  41. def start_thread(self):
  42. clock = pygame.time.Clock()
  43. if self.fullscreen:
  44. screen = pygame.display.set_mode(self.screen_size,
  45. pygame.FULLSCREEN)
  46. else:
  47. screen = pygame.display.set_mode(self.screen_size)
  48. pygame.mouse.set_visible(self.cursor)
  49. while self.running:
  50. clock.tick(15)
  51. screen.blit(self.screen_manager.update(), (0, 0))
  52. pygame.display.flip()
  53. for event in pygame.event.get():
  54. if event.type == pygame.QUIT:
  55. self.running = False
  56. elif event.type == pygame.KEYUP and event.key == pygame.K_q:
  57. self.running = False
  58. else:
  59. self.screen_manager.event(event)
  60. pygame.quit()
  61. mopidy.utils.process.exit_process()
  62. def on_start(self):
  63. try:
  64. self.running = True
  65. thread = Thread(target=self.start_thread)
  66. thread.start()
  67. except:
  68. traceback.print_exc()
  69. def on_stop(self):
  70. self.running = False
  71. def track_playback_started(self, tl_track):
  72. try:
  73. self.screen_manager.track_started(tl_track)
  74. except:
  75. traceback.print_exc()
  76. def volume_changed(self, volume):
  77. self.screen_manager.volume_changed(volume)
  78. def playback_state_changed(self, old_state, new_state):
  79. self.screen_manager.playback_state_changed(old_state,
  80. new_state)
  81. def tracklist_changed(self):
  82. try:
  83. self.screen_manager.tracklist_changed()
  84. except:
  85. traceback.print_exc()
  86. def track_playback_ended(self, tl_track, time_position):
  87. self.screen_manager.track_playback_ended(tl_track,
  88. time_position)
  89. def options_changed(self):
  90. try:
  91. self.screen_manager.options_changed()
  92. except:
  93. traceback.print_exc()
  94. def playlists_loaded(self):
  95. self.screen_manager.playlists_loaded()