1
0
Fork 0

README/TODO: Switch to restructured text

This commit is contained in:
Daniel Thompson 2020-05-15 19:52:49 +01:00
parent 6989eaf6a6
commit 56b39d6404
8 changed files with 285 additions and 241 deletions

129
README.md
View file

@ -1,129 +0,0 @@
Watch Application System in Python
==================================
Introduction
------------
Currently in its infancy wasp-os provides only a little more than a simple
digital clock application for [PineTime](https://www.pine64.org/pinetime/)
together with access to the MicroPython REPL for interactive testing and
tweaking. However it keeps time well and has enough power saving
functions implemented that it can survive for well over 72 hours between
charges so even at this early stage it is functional as a wearable
timepiece.
Wasp-os includes a robust bootloader based on the Adafruit NRF52
Bootloader. It has been extended to make it robust for development on
form-factor devices without a reset button, power switch, SWD debugger
or UART. This allows us to confidently develop on sealed devices relying
only on BLE for updates.
Videos
------
[![An M2 pre-release running on Pine64 PineTime](https://img.youtube.com/vi/YktiGUSRJB4/0.jpg)](https://www.youtube.com/watch?v=YktiGUSRJB4)\
[An M2 pre-release running on Pine64 PineTime](https://www.youtube.com/watch?v=YktiGUSRJB4)
[![How to develop wasp-os python applications on a Pine64 PineTime](https://img.youtube.com/vi/tuk9Nmr3Jo8/0.jpg)](https://www.youtube.com/watch?v=tuk9Nmr3Jo8)\
[How to develop wasp-os python applications on a Pine64 PineTime](https://www.youtube.com/watch?v=tuk9Nmr3Jo8)
[![Developing for Pine64 PineTime using wasp-os and MicroPython](https://img.youtube.com/vi/kf1VHj587Mc/0.jpg)](https://www.youtube.com/watch?v=kf1VHj587Mc)\
[Developing for Pine64 PineTime using wasp-os and MicroPython](https://www.youtube.com/watch?v=kf1VHj587Mc)
Documentation
-------------
Wasp-os is has [extensive
documentation](https://daniel-thompson.github.io/wasp-os/) which includes a
detailed [Applicaiton Writer's
Guide](https://daniel-thompson.github.io/wasp-os/appguide.html) to help you get
started coding for wasp-os as quickly as possible.
Building from a git clone
-------------------------
Get the code from
[https://github.com/daniel-thompson/wasp-os](https://github.com/daniel-thompson/wasp-os) .
~~~
pip3 install --user click serial pyserial
make submodules
make softdevice
make -j `nproc` BOARD=pinetime all
~~~
Note: *You will need a toolchain for the Arm Cortex-M4. wasp-os is developed and tested using the [GNU-RM toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) (9-2019-q4) from Arm.*
Note #2: *There are known problems with toolchains older than gcc-7.3 due to problems with link-time-optimization (which is enabled by default)*
Installing
----------
Note: *If you have a new PineTime then it will have been delivered with
flash protection enabled. You must disable the flash protection before
trying to program it.*
Use an SWD programmer to install `bootloader.hex` to the PineTime. This
file is an Intel HEX file containing both the bootloader and the Nordic
SoftDevice. Be careful to disconnect cleanly from the debug software
since just pulling out the SWD cable will mean the nRF52 will still
believe it is being debugged (and won't properly enter deep sleep
modes).
To install using Android device:
* Copy `micropython.zip` to your Android device and download nRF Connect
for Android if you do not already have it.
* In nRF Connect, choose settings and reduce the DFU packet count from
10 to 4.
* Connect to PineDFU using nRFConnect, click the DFU button and send
`micropython.zip` to the device.
To install using Linux and ota-dfu:
* Look up the MAC address for your watch (try: `sudo hcitool lescan`).
* Use ota-dfu to upload `micropython.zip` to the device. For example:
`tools/ota-dfu/dfu.py -z micropython.zip -a A0:B1:C2:D3:E3:F5 --legacy`
At the end of this process your watch will show the time (03:00) together
with a date and battery meter. When the watch goes into power saving mode
you can use the side button to wake it again.
At this point you will also be able to use the Nordic UART Service to
access the MicroPython REPL, although currently you must send ^C to
interrupt the program that updates the watch display.
Just for fun try:
~~~
^C
import demo
demo.run()
# After watching the demo for a bit...
^C
wasp.app.draw(watch)
wasp.system.run()
~~~
To set the time and restart the main application:
~~~
^C
watch.rtc.set_localtime((yyyy, mm, dd, HH, MM, SS))
wasp.system.run()
~~~
Or just use:
~~~
./tools/wasptool --rtc
~~~
which can run these commands automatically.
As mentioned above there are many drivers and features still to be
developed, see the [TODO list](TODO.md) for current status.
Screenshots
-----------
![wasp-os digital clock app running on PineTime](res/clock_app.jpg)

147
README.rst Normal file
View file

@ -0,0 +1,147 @@
Watch Application System in Python
==================================
Introduction
------------
Currently in its infancy wasp-os provides only a little more than a simple
digital clock application for `PineTime <https://www.pine64.org/pinetime/>`_
together with access to the MicroPython REPL for interactive testing and
tweaking. However it keeps time well and has enough power saving
functions implemented that it can survive for well over 72 hours between
charges so even at this early stage it is functional as a wearable
timepiece.
Wasp-os includes a robust bootloader based on the Adafruit NRF52
Bootloader. It has been extended to make it robust for development on
form-factor devices without a reset button, power switch, SWD debugger
or UART. This allows us to confidently develop on sealed devices relying
only on BLE for updates.
Videos
------
.. image:: https://img.youtube.com/vi/YktiGUSRJB4/0.jpg
:target: https://www.youtube.com/watch?v=YktiGUSRJB4
:alt: An M2 pre-release running on Pine64 PineTime
`An M2 pre-release running on Pine64 PineTime <https://www.youtube.com/watch?v=YktiGUSRJB4>`_
.. image:: https://img.youtube.com/vi/tuk9Nmr3Jo8/0.jpg
:target: https://www.youtube.com/watch?v=tuk9Nmr3Jo8
:alt: How to develop wasp-os python applications on a Pine64 PineTime
`How to develop wasp-os python applications on a Pine64 PineTime <https://www.youtube.com/watch?v=tuk9Nmr3Jo8>`_
.. image:: https://img.youtube.com/vi/kf1VHj587Mc/0.jpg
:target: https://www.youtube.com/watch?v=kf1VHj587Mc
:alt: Developing for Pine64 PineTime using wasp-os and MicroPython
`Developing for Pine64 PineTime using wasp-os and MicroPython <https://www.youtube.com/watch?v=kf1VHj587Mc>`_
Documentation
-------------
Wasp-os is has `extensive documentation <https://wasp-os.readthedocs.io>`_
which includes a detailed `Applicaiton Writer's Guide
<https://daniel-thompson.github.io/wasp-os/appguide.html>`_ to help you
get started coding for wasp-os as quickly as possible.
Building from a git clone
-------------------------
Get the code from
`https://github.com/daniel-thompson/wasp-os <https://github.com/daniel-thompson/wasp-os>`_ .
.. code-block:: sh
pip3 install --user click serial pyserial
make submodules
make softdevice
make -j `nproc` BOARD=pinetime all
.. note::
You will need a toolchain for the Arm Cortex-M4. wasp-os is developed and
tested using the `GNU-RM toolchain
<https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm>`_
(9-2019-q4) from Arm.
There are known problems with toolchains older than gcc-7.3 due to problems
with link-time-optimization (which is enabled by default).
Installing
----------
Use an SWD programmer to install ``bootloader.hex`` to the PineTime. This
file is an Intel HEX file containing both the bootloader and the Nordic
SoftDevice. Be careful to disconnect cleanly from the debug software
since just pulling out the SWD cable will mean the nRF52 will still
believe it is being debugged (and won't properly enter deep sleep
modes).
.. note::
If you have a new PineTime then it will have been delivered with flash
protection enabled. You must disable the flash protection before trying to
program it.
To install using Android device:
* Copy ``micropython.zip`` to your Android device and download nRF Connect
for Android if you do not already have it.
* In nRF Connect, choose settings and reduce the DFU packet count from
10 to 4.
* Connect to PineDFU using nRFConnect, click the DFU button and send
``micropython.zip`` to the device.
To install using Linux and ota-dfu:
* Look up the MAC address for your watch (try: ``sudo hcitool lescan``\ ).
* Use ota-dfu to upload ``micropython.zip`` to the device. For example:
``tools/ota-dfu/dfu.py -z micropython.zip -a A0:B1:C2:D3:E3:F5 --legacy``
At the end of this process your watch will show the time (03:00) together
with a date and battery meter. When the watch goes into power saving mode
you can use the side button to wake it again.
At this point you will also be able to use the Nordic UART Service to
access the MicroPython REPL, although currently you must send ^C to
interrupt the program that updates the watch display.
Just for fun try:
.. code-block:: python
^C
import demo
demo.run()
# After watching the demo for a bit...
^C
wasp.app.draw(watch)
wasp.system.run()
To set the time and restart the main application:
.. code-block:: python
^C
watch.rtc.set_localtime((yyyy, mm, dd, HH, MM, SS))
wasp.system.run()
Or just use:
.. code-block:: sh
./tools/wasptool --rtc
which can run these commands automatically.
As mentioned above there are many drivers and features still to be
developed, see the `TODO list <TODO.md>`_ for current status.
Screenshots
-----------
.. image:: res/clock_app.jpg
:alt: wasp-os digital clock app running on PineTime

110
TODO.md
View file

@ -1,110 +0,0 @@
# Roadmap
## M1: Dumb watch feature parity
The focus for M1 is to get wasp-os both to meet feature parity with a dumb
watch and to have a bootloader and watchdog strategy that is robust enough
to allow a PineTime case to be confidently glued shut.
### Bootloader
* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
* [X] OTA application update
* [X] Enable watchdog before starting the application
* [X] Splash screen
* [X] Ignore start button for first few seconds
### MicroPython
* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
* [X] Long press reset (conditional feeding of the watchdog)
- [X] Feed dog from REPL polling loop
- [X] Feed dog from a tick interrupt
### Wasp-os
* [X] Display driver
- [X] Display initialization
- [X] Bitmap blitting
- [X] RLE coder and decoder
- [X] Optimized RLE inner loops
* [X] Backlight driver
* [X] Button driver (polling)
* [X] Battery/charger driver
* [X] Simple clock and battery level application
* [X] Basic (WFI) power saving
* [X] Implement simple RTC for nrf52
## M2: Great developer experience
The focus for M2 is to make development faster and easier by providing
a file system and file transfer code. This allows much faster
development cycles compared to full downloads of frozen modules.
Additionally support for multiple event-driven applications will be
added during M2 to further help developers by providing example
applications.
### Bootloader
* [X] OTA bootloader update
* [X] RTC time measurement whilst in bootloader
### MicroPython
* [X] SPI FLASH driver
* [X] Enable LittleFS on SPI FLASH (at boot)
* [X] BLE file transfer
### Wasp-os
* [X] Add dd/mm/yyyy support to RTC
* [X] Button driver (interrupt based)
* [X] Touch sensor driver
* [X] Event driven application framework
* [X] Stopwatch app
* [X] Settings app
* [X] PC-hosted simulation platform
* [X] Documentation
- [X] Sphinx framework and integration with github.io
- [X] Document bootloader protocols
- [X] Application writer's guide
- [X] Write full docstring documentation for all wasp-os components
* [X] Application Launcher
* [X] Debug notifications
* [o] Multi-colour RLE images
- [X] Optimized "2-bit" RLE encoder and decoder
- [ ] Logarithmic RBG332 <-> RGB56516bit color space conversion
## M3: Smartwatch
At M3 we start to build out full fitness tracking and notification
functionality.
### Bootloader
* [ ] Stay in bootloader after battery run down
* [ ] Implement power off support (no splash screen)
### Micropython
* [ ] Use SoftDevice sleep logic
* [ ] Automatically enter SPI flash power saving mode
### Wasp-os
* [ ] Enable heart rate sensor
- [ ] HRS3300 driver
- [ ] HRS data post-processing
- [ ] Heart rate counter app
* [ ] Notifications
- [ ] BLE notification protocol
- [ ] Notification popups
- [ ] Notification app (show notification history)
- [ ] Find a recommended Android app
* [ ] Step counting
- [ ] BMA421 driver
- [ ] Step counter app
* [ ] Documentation
- [ ] Debugging and troubleshooting guide
- [ ] Screenshots for bootloader and all applications
- [ ] Improve the install guide

136
TODO.rst Normal file
View file

@ -0,0 +1,136 @@
Roadmap
=======
M1: Dumb watch feature parity
-----------------------------
The focus for M1 is to get wasp-os both to meet feature parity with a dumb
watch and to have a bootloader and watchdog strategy that is robust enough
to allow a PineTime case to be confidently glued shut.
Bootloader
~~~~~~~~~~
* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
* [X] OTA application update
* [X] Enable watchdog before starting the application
* [X] Splash screen
* [X] Ignore start button for first few seconds
MicroPython
~~~~~~~~~~~
* [X] Basic board ports (PineTime, DS-D6, 96Boards Nitrogen)
* [X] Long press reset (conditional feeding of the watchdog)
* [X] Feed dog from REPL polling loop
* [X] Feed dog from a tick interrupt
Wasp-os
~~~~~~~
* [X] Display driver
* [X] Display initialization
* [X] Bitmap blitting
* [X] RLE coder and decoder
* [X] Optimized RLE inner loops
* [X] Backlight driver
* [X] Button driver (polling)
* [X] Battery/charger driver
* [X] Simple clock and battery level application
* [X] Basic (WFI) power saving
* [X] Implement simple RTC for nrf52
M2: Great developer experience
------------------------------
The focus for M2 is to make development faster and easier by providing
a file system and file transfer code. This allows much faster
development cycles compared to full downloads of frozen modules.
Additionally support for multiple event-driven applications will be
added during M2 to further help developers by providing example
applications.
Bootloader
~~~~~~~~~~
* [X] OTA bootloader update
* [X] RTC time measurement whilst in bootloader
MicroPython
~~~~~~~~~~~
* [X] SPI FLASH driver
* [X] Enable LittleFS on SPI FLASH (at boot)
* [X] BLE file transfer
Wasp-os
~~~~~~~
* [X] Add dd/mm/yyyy support to RTC
* [X] Button driver (interrupt based)
* [X] Touch sensor driver
* [X] Event driven application framework
* [X] Stopwatch app
* [X] Settings app
* [X] PC-hosted simulation platform
* [X] Documentation
* [X] Sphinx framework and integration with github.io
* [X] Document bootloader protocols
* [X] Application writer's guide
* [X] Write full docstring documentation for all wasp-os components
* [X] Application Launcher
* [X] Debug notifications
* [o] Multi-colour RLE images
* [X] Optimized "2-bit" RLE encoder and decoder
* [ ] Logarithmic RBG332 <-> RGB56516bit color space conversion
M3: Smartwatch
--------------
At M3 we start to build out full fitness tracking and notification
functionality.
Bootloader
~~~~~~~~~~
* [ ] Stay in bootloader after battery run down
* [ ] Implement power off support (no splash screen)
Micropython
~~~~~~~~~~~
* [ ] Use SoftDevice sleep logic
* [ ] Automatically enter SPI flash power saving mode
Wasp-os
~~~~~~~
* [ ] Enable heart rate sensor
* [ ] HRS3300 driver
* [ ] HRS data post-processing
* [ ] Heart rate counter app
* [ ] Notifications
* [ ] BLE notification protocol
* [ ] Notification popups
* [ ] Notification app (show notification history)
* [ ] Find a recommended Android app
* [ ] Step counting
* [ ] BMA421 driver
* [ ] Step counter app
* [ ] Documentation
* [ ] Debugging and troubleshooting guide
* [ ] Screenshots for bootloader and all applications
* [ ] Improve the install guide

View file

@ -1 +0,0 @@
../README.md

1
docs/README.rst Symbolic link
View file

@ -0,0 +1 @@
../README.rst

View file

@ -1 +0,0 @@
../TODO.md

1
docs/TODO.rst Symbolic link
View file

@ -0,0 +1 @@
../TODO.rst