93 lines
2.2 KiB
Python
93 lines
2.2 KiB
Python
"""Mini train departure board for your badge
|
|
|
|
Configurable with which station you want to monitor
|
|
"""
|
|
___title___ = "trains"
|
|
___license___ = "MIT"
|
|
___dependencies___ = ["app", "sleep", "wifi", "http", "ugfx_helper"]
|
|
___categories___ = ["Homescreens", "Other"]
|
|
___bootstrapped___ = False
|
|
|
|
|
|
import database
|
|
import wifi
|
|
import ugfx
|
|
import app
|
|
import sleep
|
|
import ntp
|
|
from tilda import Buttons, LED
|
|
from trains import api
|
|
from trains import screen
|
|
from trains.departure_screen import DepartureScreen
|
|
from trains.settings_screen import SettingsScreen
|
|
|
|
def init_screen(orientation):
|
|
# initialize screen
|
|
ugfx.clear()
|
|
ugfx.orientation(orientation)
|
|
ugfx.backlight(50)
|
|
# show initial screen
|
|
# photo credit: https://www.flickr.com/photos/remedy451/8061918891
|
|
ugfx.display_image(0, 0, 'trains/splash.gif', 90)
|
|
|
|
|
|
def init():
|
|
print('trains/main: Init')
|
|
ugfx.init()
|
|
ntp.set_NTP_time()
|
|
# ensure wifi connection
|
|
if not wifi.is_connected():
|
|
wifi.connect(show_wait_message=True)
|
|
|
|
|
|
def exit():
|
|
print('trains/main: Exit')
|
|
ugfx.clear()
|
|
app.restart_to_default()
|
|
|
|
|
|
app_screens = {
|
|
screen.SETTINGS: SettingsScreen(),
|
|
screen.DEPARTURES: DepartureScreen()
|
|
}
|
|
|
|
|
|
def get_initial_screen():
|
|
station_code = database.get('trains.station_code', None)
|
|
if station_code == None:
|
|
return app_screens[screen.SETTINGS]
|
|
return app_screens[screen.DEPARTURES]
|
|
|
|
|
|
def run_screen(instance):
|
|
print('trains/main: Starting screen {}'.format(instance))
|
|
instance.enter()
|
|
|
|
is_running = True
|
|
next_screen_name = None
|
|
while is_running:
|
|
status, value = instance.tick()
|
|
|
|
if status == screen.SWITCH_SCREEN:
|
|
is_running = False
|
|
next_screen_name = value
|
|
elif status == screen.EXIT_APP:
|
|
is_running = False
|
|
|
|
print('trains/main: Stopping screen {} (next = {})'.format(instance, next_screen_name))
|
|
instance.exit()
|
|
return next_screen_name
|
|
|
|
init()
|
|
current_screen = get_initial_screen()
|
|
is_app_running = True
|
|
while is_app_running:
|
|
init_screen(current_screen.orientation())
|
|
next_screen_name = run_screen(current_screen)
|
|
|
|
if next_screen_name != None:
|
|
current_screen = app_screens[next_screen_name]
|
|
else:
|
|
is_app_running = False
|
|
exit()
|