You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
"""Shared functionality for home screen apps
|
|
|
|
Apps in the "homescreen" should behave in a similar manner to not confuse users.
|
|
|
|
In particular, they *should*:
|
|
|
|
* Call "homescreen.init()" at the beginning. This will initiate ugfx, clear the screen and
|
|
initiate button handline.
|
|
* Use "sleep.wfi()" as much as possible to avoid draining the battery.
|
|
* Not use
|
|
|
|
They also *may*:
|
|
|
|
* Display a name, returned by "homescreen.name()"
|
|
* Display network strength "homescreen.wifi_strength()" (0-1, might return "None" if not connected)
|
|
* Display remaining battery "homescreen.battery()" (0-1)
|
|
"""
|
|
|
|
___license___ = "MIT"
|
|
___dependencies___ = ["database", "buttons", "app", "sleep", "ugfx_helper", "wifi", "sim800"]
|
|
|
|
import database, ugfx, random, buttons, tilda, sleep, ugfx_helper, wifi, time, sim800
|
|
from app import App
|
|
|
|
_state = None
|
|
def init(enable_menu_button = True):
|
|
global _state
|
|
_state = {"menu": False}
|
|
ugfx_helper.init()
|
|
|
|
if enable_menu_button:
|
|
pass
|
|
#buttons.enable_interrupt("BTN_MENU", lambda t: set_state("menu"), on_release = True)
|
|
|
|
def set_state(key, value = True):
|
|
# we can't allocate memory in interrupts, so make sure all keys are set beforehand and
|
|
# you're only using numbers and booleans
|
|
global _state
|
|
_state[key] = value
|
|
|
|
def clean_up():
|
|
pass
|
|
|
|
def time_as_string(seconds=False):
|
|
t = time.localtime()
|
|
if seconds:
|
|
return "%d:%02d:%02d" % (t[3], t[4], t[5])
|
|
return "%d:%02d" % (t[3], t[4]) #todo: add a setting for AM/PM mode
|
|
|
|
def sleep_or_exit(interval = 0.5):
|
|
# todo: do this better - check button multiple times and sleep for only a short while
|
|
if buttons.is_triggered(tilda.Buttons.BTN_Menu):
|
|
clean_up()
|
|
launcher = "launcher"
|
|
try:
|
|
with open("default_launcher.txt", "r") as dl:
|
|
launcher=dl.readline()
|
|
except OSError:
|
|
pass
|
|
App(launcher).boot()
|
|
sleep.sleep(interval)
|
|
|
|
|
|
def name(default = None):
|
|
return database.get("homescreen.name", default)
|
|
|
|
|
|
def callsign(default = None):
|
|
return database.get("homescreen.callsign", default)
|
|
|
|
# Strength in %, None if unavailable
|
|
def wifi_strength():
|
|
return wifi.get_strength()
|
|
|
|
# Charge in %, None if unavailable
|
|
def battery():
|
|
return sim800.batterycharge() # todo: fix me, we can get this from the sim800
|
|
|
|
|