summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.rst4
-rw-r--r--docs/apps.rst2
-rw-r--r--res/SportsApp.pngbin0 -> 6049 bytes
-rw-r--r--wasp/apps/software.py1
-rw-r--r--wasp/apps/sports.py91
-rw-r--r--wasp/boards/manifest_240x240.py1
6 files changed, 99 insertions, 0 deletions
diff --git a/README.rst b/README.rst
index 81b4439..ae40bdf 100644
--- a/README.rst
+++ b/README.rst
@@ -153,6 +153,10 @@ simulator:
:alt: Heart rate application running on the wasp-os simulator
:width: 179
+.. image:: res/SportsApp.png
+ :alt: Sports applications, a combined stopwatch and step counter
+ :width: 179
+
.. image:: res/StopclockApp.png
:alt: Stop watch application running on the wasp-os simulator
:width: 179
diff --git a/docs/apps.rst b/docs/apps.rst
index 17bf149..a931b6c 100644
--- a/docs/apps.rst
+++ b/docs/apps.rst
@@ -53,6 +53,8 @@ Applications
.. automodule:: apps.musicplayer
+.. automodule:: apps.sports
+
.. automodule:: apps.testapp
.. automodule:: apps.timer
diff --git a/res/SportsApp.png b/res/SportsApp.png
new file mode 100644
index 0000000..54e9f96
--- /dev/null
+++ b/res/SportsApp.png
Binary files differ
diff --git a/wasp/apps/software.py b/wasp/apps/software.py
index cac4595..9e764bc 100644
--- a/wasp/apps/software.py
+++ b/wasp/apps/software.py
@@ -44,6 +44,7 @@ class SoftwareApp():
db.append(('musicplayer', factory('Music Player')))
db.append(('play2048', factory('Play 2048')))
db.append(('snake', factory('Snake Game')))
+ db.append(('sports', factory('Sports')))
db.append(('flashlight', factory('Torch')))
db.append(('testapp', factory('Test')))
db.append(('timer', factory('Timer')))
diff --git a/wasp/apps/sports.py b/wasp/apps/sports.py
new file mode 100644
index 0000000..e966855
--- /dev/null
+++ b/wasp/apps/sports.py
@@ -0,0 +1,91 @@
+# SPDX-License-Identifier: LGPL-3.0-or-later
+# Copyright (C) 2020 Daniel Thompson
+
+"""Sports timer
+~~~~~~~~~~~~~~~
+
+A combined stopwatch and step counter.
+
+.. figure:: res/SportsApp.png
+ :width: 179
+"""
+import wasp
+import icons
+import fonts
+
+class SportsApp():
+ """Sports timer application."""
+ NAME = 'Sports'
+ ICON = icons.app
+
+ def __init__(self):
+ self._timer = wasp.widgets.Stopwatch(120-36)
+ self._reset()
+
+ def foreground(self):
+ """Activate the application."""
+ wasp.system.bar.clock = True
+ self._draw()
+ wasp.system.request_tick(97)
+ wasp.system.request_event(wasp.EventMask.TOUCH | wasp.EventMask.BUTTON)
+
+ def background(self):
+ if not self._timer.started:
+ self._timer.reset()
+
+ def sleep(self):
+ return True
+
+ def wake(self):
+ self._update()
+
+ def press(self, button, state):
+ if not state:
+ return
+
+ steps = wasp.watch.accel.steps
+
+ if self._timer.started:
+ self._timer.stop()
+ else:
+ self._timer.start()
+ self._last_steps = steps
+
+ def touch(self, event):
+ if not self._timer.started:
+ self._reset()
+ self._update()
+
+ def tick(self, ticks):
+ self._update()
+
+ def _reset(self):
+ self._timer.reset()
+ self._steps = 0
+ self._last_steps = 0
+
+ def _draw(self):
+ """Draw the display from scratch."""
+ draw = wasp.watch.drawable
+ draw.fill()
+
+ wasp.system.bar.draw()
+ self._timer.draw()
+
+ def _update(self):
+ wasp.system.bar.update()
+ self._timer.update()
+
+ if self._timer.started:
+ steps = wasp.watch.accel.steps
+ redraw = bool(steps - self._last_steps)
+ self._steps += steps - self._last_steps
+ self._last_steps = steps
+ else:
+ redraw = True
+
+ if redraw:
+ draw = wasp.watch.drawable
+ draw.set_font(fonts.sans36)
+ draw.set_color(draw.lighten(wasp.system.theme('spot1'), wasp.system.theme('contrast')))
+ draw.string(str(self._steps), 0, 170, 228, True)
diff --git a/wasp/boards/manifest_240x240.py b/wasp/boards/manifest_240x240.py
index b8e7fc9..f0eb474 100644
--- a/wasp/boards/manifest_240x240.py
+++ b/wasp/boards/manifest_240x240.py
@@ -20,6 +20,7 @@ manifest = (
'apps/play2048.py',
'apps/settings.py',
'apps/software.py',
+ 'apps/sports.py',
'apps/steps.py',
'apps/stopwatch.py',
'apps/snake.py',