manager: Enable Software by default

Enabling software by default allows us disable several other applications
by default because there is now a GUI based route to enable them.

This does require a few tweaks to the test suite and allows allows us to
remove a lot of boilerplate text from the application library document
since it is no longer relavent.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
This commit is contained in:
Daniel Thompson 2021-01-03 14:59:14 +00:00
parent 231f3b6fdd
commit 3813eb2911
5 changed files with 42 additions and 63 deletions

View file

@ -25,52 +25,18 @@ Watch faces
.. automodule:: apps.chrono
This application is very simple and largely serves as an example of how to
implement traditional watch faces.
It is not included by default in any image.
Instead it can be transferred to the device dynamically using wasptool:
.. code-block:: sh
./tools/wasptool --exec wasp/apps/chrono.py --eval 'wasp.system.register(ChronoApp())'
.. automodule:: apps.fibonacci_clock
This app is enabled by default in the simulator.
The app is also frozen into the firmware image but it is disabled by
default in order to keep RAM available for user developed applications.
It can be enabled by modifying ``main.py``.
Games
-----
.. automodule:: apps.gameoflife
This app is enabled by default in the simulator.
The app is also frozen into the firmware image but it is disabled by
default in order to keep RAM available for user developed applications.
It can be enabled by modifying ``main.py``.
.. automodule:: apps.snake
This app is enabled by default in the simulator.
The app is also frozen into the firmware image but it is disabled by
default in order to keep RAM available for user developed applications.
It can be enabled by modifying ``main.py``.
Integration
-----------
.. automodule:: apps.alarm
This app is enabled by default in the simulator.
The app is also frozen into the firmware image but it is disabled by
default in order to keep RAM available for user developed applications.
It can be enabled by modifying ``main.py``.
.. automodule:: apps.musicplayer
This app is enabled by default in the simulator.
The app is also frozen into the firmware image but it is disabled by
default in order to keep RAM available for user developed applications.
It can be enabled by modifying ``main.py``.

View file

@ -4,19 +4,21 @@
manifest = (
'apps/alarm.py',
'apps/calc.py',
'apps/clock.py',
'apps/chrono.py',
'apps/fibonacci_clock.py',
'apps/flashlight.py',
'apps/gameoflife.py',
'apps/haiku.py',
'apps/heart.py',
'apps/musicplayer.py',
'apps/calc.py',
'apps/launcher.py',
'apps/pager.py',
'apps/settings.py',
'apps/software.py',
'apps/steps.py',
'apps/stopwatch.py',
'apps/fibonacci_clock.py',
'apps/snake.py',
'apps/testapp.py',
'fonts/__init__.py',

View file

@ -3,26 +3,33 @@
import wasp
from apps.alarm import AlarmApp
wasp.system.register(AlarmApp())
from apps.fibonacci_clock import FibonacciClockApp
wasp.system.register(FibonacciClockApp())
from apps.gameoflife import GameOfLifeApp
wasp.system.register(GameOfLifeApp())
from apps.snake import SnakeGameApp
wasp.system.register(SnakeGameApp())
from apps.calc import CalculatorApp
wasp.system.register(CalculatorApp())
from apps.musicplayer import MusicPlayerApp
wasp.system.register(MusicPlayerApp())
# Ensure there's something interesting to look at ;-)
wasp.system.set_music_info({
'track': 'Tasteless Brass Duck',
'artist': 'Dreams of Bamboo',
})
# Instantiate the analogue clock application and replace the default
# (digital) clock with this alternative.
#from chrono import ChronoApp
#clock = wasp.system.quick_ring[0]
#wasp.system.quick_ring[0] = ChronoApp()
#wasp.system.switch(wasp.system.quick_ring[0])
#wasp.system.register(clock)
# Adopt a basic all-orange theme
#wasp.system.set_theme(
# b'\xff\x00' # ble
# b'\xff\x00' # scroll-indicator
# b'\xff\x00' # battery
# b'\xff\x00' # status-clock
# b'\xff\x00' # notify-icon
# b'\xff\x00' # bright
# b'\xbe\xe0' # mid
# b'\xff\x00' # ui
# b'\xff\x00' # spot1
# b'\xff\x00' # spot2
# b'\x00\x0f' # contrast
# )
wasp.system.run()

View file

@ -1,6 +1,7 @@
import pytest
import time
import wasp
import apps.testapp
def step():
wasp.system._tick()
@ -36,12 +37,11 @@ def test_quick_ring(system):
def test_launcher_ring(system):
names = [ x.NAME for x in system.launcher_ring ]
assert('Self Test' in names)
assert('Settings' in names)
assert('Torch' in names)
assert('Software' in names)
@pytest.mark.parametrize("name",
('Steps', 'Timer', 'Heart', 'Self Test', 'Settings', 'Torch'))
('Steps', 'Timer', 'Heart', 'Settings', 'Software'))
def test_app(system, name):
system.switch(system.apps[name])
for i in range(4):
@ -101,7 +101,7 @@ def test_selftests(system):
will do something useful! For example it will run the benchmark for every
one of the benchmark tests.
"""
system.switch(system.apps['Self Test'])
system.switch(apps.testapp.TestApp())
system.step()
start_point = system.app.test
@ -115,7 +115,7 @@ def test_selftests(system):
assert(start_point == system.app.test)
def test_selftest_crash(system):
system.switch(system.apps['Self Test'])
system.switch(apps.testapp.TestApp())
system.step()
def select(name):

View file

@ -21,14 +21,13 @@ import watch
import widgets
from apps.clock import ClockApp
from apps.flashlight import FlashlightApp
from apps.heart import HeartApp
from apps.launcher import LauncherApp
from apps.pager import PagerApp, CrashApp, NotificationApp
from apps.settings import SettingsApp
from apps.steps import StepCounterApp
from apps.software import SoftwareApp
from apps.stopwatch import StopwatchApp
from apps.testapp import TestApp
class EventType():
"""Enumerated interface actions.
@ -151,9 +150,8 @@ class Manager():
(StepCounterApp, True),
(StopwatchApp, True),
(HeartApp, True),
(FlashlightApp, False),
(SettingsApp, False),
(TestApp, False) ):
(SoftwareApp, False),
(SettingsApp, False) ):
try:
self.register(app(), qr)
except:
@ -172,6 +170,12 @@ class Manager():
self.launcher_ring.append(app)
self.launcher_ring.sort(key = _key_app)
def unregister(self, cls):
for app in self.launcher_ring:
if instanceof(app, cls):
self.launcher_ring.remove(app)
break
@property
def brightness(self):
"""Cached copy of the brightness current written to the hardware."""