README/TODO: Switch to restructured text
This commit is contained in:
parent
6989eaf6a6
commit
56b39d6404
8 changed files with 285 additions and 241 deletions
129
README.md
129
README.md
|
@ -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
147
README.rst
Normal 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
110
TODO.md
|
@ -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
136
TODO.rst
Normal 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
|
|
@ -1 +0,0 @@
|
|||
../README.md
|
1
docs/README.rst
Symbolic link
1
docs/README.rst
Symbolic link
|
@ -0,0 +1 @@
|
|||
../README.rst
|
|
@ -1 +0,0 @@
|
|||
../TODO.md
|
1
docs/TODO.rst
Symbolic link
1
docs/TODO.rst
Symbolic link
|
@ -0,0 +1 @@
|
|||
../TODO.rst
|
Loading…
Reference in a new issue