diff --git a/README.md b/README.md deleted file mode 100644 index 9e1d842..0000000 --- a/README.md +++ /dev/null @@ -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) - diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..fe62bbe --- /dev/null +++ b/README.rst @@ -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 `_ +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 `_ + +.. 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 `_ + +.. 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 `_ + +Documentation +------------- + +Wasp-os is has `extensive documentation `_ +which includes a detailed `Applicaiton Writer's Guide +`_ 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 `_ . + +.. 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 + `_ + (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 `_ for current status. + +Screenshots +----------- + +.. image:: res/clock_app.jpg + :alt: wasp-os digital clock app running on PineTime diff --git a/TODO.md b/TODO.md deleted file mode 100644 index 6d7d2f6..0000000 --- a/TODO.md +++ /dev/null @@ -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 diff --git a/TODO.rst b/TODO.rst new file mode 100644 index 0000000..7eee712 --- /dev/null +++ b/TODO.rst @@ -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 diff --git a/docs/README.md b/docs/README.md deleted file mode 120000 index 32d46ee..0000000 --- a/docs/README.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file diff --git a/docs/README.rst b/docs/README.rst new file mode 120000 index 0000000..89a0106 --- /dev/null +++ b/docs/README.rst @@ -0,0 +1 @@ +../README.rst \ No newline at end of file diff --git a/docs/TODO.md b/docs/TODO.md deleted file mode 120000 index 15d039a..0000000 --- a/docs/TODO.md +++ /dev/null @@ -1 +0,0 @@ -../TODO.md \ No newline at end of file diff --git a/docs/TODO.rst b/docs/TODO.rst new file mode 120000 index 0000000..d3893d7 --- /dev/null +++ b/docs/TODO.rst @@ -0,0 +1 @@ +../TODO.rst \ No newline at end of file