Close

OSSW 0.4.0 is here

A project log for Open source sport/smart watch

Make Weloop Tommy an open source sport watch that can connect directly to all kind of sensors (heart rate monitor and so on)

krzysiekKrzysiek 10/19/2015 at 21:2510 Comments

Some time has passed since my last log but it doesn't mean that nothing was done. Today I finally managed to release 0.4.0 version. Changes are not groundbreaking but it's an important step to make this watch useful and customizable.

Changes:

I've spend most of the time on putting a good filesystem that will work with this very limited amount of RAM. Only 6kB of processor RAM are available for the app, that's twice the size of the screen buffer. There are still some things to do on the app size to be able to synchronize multiple files but it's now quite easy to do and should be available in few weeks. We have 512kB of flash storage and it should be enough for this.

Second big point was making it stable. Both the BLE connection and watch firmware itself. I've tested it for few days and never had situation when watch was not connected to the phone. Also random freeze or screen shifted by 8 pixels should not happen.

Third most important part for me was to add possibility to attach images, number fonts and enumerated images. So your watch will look like you want. For example now you can draw different images based on current day of week. That's also a good base for some weather forecast plugin.

Also some minor things were added:

- current day of week and day of year

- support for 12h clock

- external plugin text parameters may be now longer so current song name, artist etc can be displayed in multiple lines

- plugin installation/update/reinstallation will not require OSSW app restart, it will reconnect to new/modified plugin.

- OSSW app after next upgrade will automatically reconnect to last connected watch, so automatic update will not break connection.

- There's notification with current progress of watchset upload (watchsets may be big now so it can take some time)

- Update in musicplayer plugin that allows to control music volume

Thanks to these changes next release should be much faster than this one. I've published some new watchsets to show new features, all files can be found HERE

It would be great if I could make a web based GUI that will allow to build watchsets by drag and drop. Unfortunately for now, to be able to attach images you have to use some basic tool available HERE. Look's like it works only in Chrome for now, will try to fix that in next few days.

How to update:

To update firmware use nRF Toolbox, HERE you can find ossw-firmware-s120-0.4.0.zip

You don't have to go to bootloader mode or something. Just update from nRF Toolbox:

DFU -> SELECT FILE -> Distribution packet (ZIP) -> ossw-firmware-s120-0.4.0.zip, select device and click UPLOAD

Sample photos:


Discussions

Andrew W wrote 02/28/2019 at 15:53 point

Amazing work, I've just ordered a modern cheap nrf52832 based watch with an OLED screen. I'll use your code as a base to see how far I can get with an always-on display and see if it will get through the day on a charge. Is there a build guide, i.e. a doc that describes how to setup the dev environment and build the firmware and bootloader from source ? Thanks.

  Are you sure? yes | no

Krzysiek wrote 10/28/2015 at 21:03 point

Today I've attended nRF52 Global Tech Tour and it seems that Nordic will release a new version of S130 quite soon. There will be a configurable number of concurrent peripheral/central links so it will be possible to have 7 central + 1 peripheral devices. As soon as this softdevice will be released and memory/flash requirements will be reasonable I will switch to this version. 

  Are you sure? yes | no

Krzysiek wrote 10/28/2015 at 21:41 point

The only problem may be that our CEAAD0 version will not be supported in S130 v2 :/ From the alpha documentation:

"This SoftDevice version is compatible with the latest nRF51 IC revision (revision 3). It is not compatible with nRF51 IC revision 1.
Users of the SoftDevice must verify the compatibility of their SoftDevice/IC combination for development and for production.
Compatibility information is found in the nRF51 Series Compatibility Matrix, which can be downloaded from the Nordic
Semiconductor web page."

The question is if CEAAD0 (it's 2nd revision according to compatibility matrix) will be supported.

  Are you sure? yes | no

Pavel Vasilyev wrote 10/29/2015 at 12:33 point

It is a good news, could be a nice improvement. If they speak about rev.1 problems then maybe they were fixed in rev.2 and it is not the lack of RAM. Anyway, most of the use cases are already supported by current s120/s130. Adding a few features and fixing the bugs will give a good user experience.

Here is a link to the Weather plugin: https://play.google.com/apps/testing/com.klapaucius.ossw.weather. I had some issues uploading watch faces with lots of properties involved. I could also post a usage example to the OSSW samples project. Details on github.

BTW, I'd prefer collaborating on the same repository by branching projects for new features (not forking) keeping track of bugs, features, priorities, issue assignments, etc.

  Are you sure? yes | no

Krzysiek wrote 10/29/2015 at 19:09 point

Great that you've publish weather plugin, where can I find watchset to test it? OSSW samples project looks like a good place to commit it.

  Are you sure? yes | no

Pavel Vasilyev wrote 10/22/2015 at 09:57 point

Great. Concerning the softdevices, do I understand well that there are the following two options for the max number of BLE peripherals/devices (I presume a smartphone can handle 8 devices itself and also expose some data via the android app):

- S120:   8 devices   (central mode)    OR    1 smartphone with its 7 devices  (peripheral mode)

- S130:   3 devices directly + 1 smartphone with its 7 devices (10 devices max)

So, you prefer the first option. On my side I can't reach the max number of devices yet  :)  I've just ordered one sensor for testing.

  Are you sure? yes | no

Krzysiek wrote 10/22/2015 at 22:06 point

I see it more like:

watch + phone:
S120: 7 devices + phone (peripheral/central) and it's X devices (7+X max)
S130: 3 devices + phone (central) and it's X devices (3+X max)

just watch:
S120: 8 devices
S130: 3 devices 

;)


  Are you sure? yes | no

Pavel Vasilyev wrote 10/23/2015 at 14:25 point

Well, I forgot you are considering a recent smartphone with Android 5.0+ supporting combined peripheral/central BLE mode.  ;)

By the way, could you tell what are the plans for rendering routines (for configuring watch faces)?

- simple static text, like "Hello, world!" (without connecting to smartphone, without creating images)

- formatted text, like "Monday, 10/08/2015" which includes static text, numbers, punctuation.

- points, line segments, etc.

Anyway, it is better to discuss about each feature in detail on github.

  Are you sure? yes | no

Pavel Vasilyev wrote 10/21/2015 at 12:50 point

Really impressive work!

Testing your firmware for a couple of weeks (v0.3.0). Updated yesterday to v0.4.0 and see immediately the improved stabilty of BLE connection. Making watchfaces is rather easy. Maybe it would be easier for a watchface designer to reference an image file directly from the JSON file and transform it on-the-fly before uploading to the watch.

By the way, I have a few questions.

- Are you planning to move to SoftDevice S130 v1.0.0? One of the goals of the project is supporting central mode. At the same time I suppose that the user doesn't want to abandon all useful notifications and plugins from smartphone and use everything at the same time. The RAM/flash requirements are the same as of S120 (at least on paper).

- I'd really like to contribute (was thinking about a simple weather plugin) and had a brief look at the code. Did you consider to use the same Messenger from the bound service (or AIDL) to communicate with plugins? Or you think the ContentProvider is the best way in this case? Not sure but IMHO the overhead is the same (the price of extensibility) but it is easier for potential plugin developers to create a service and read properties and trigger actions with the help of the Messenger with fixed API.

- Are you using/planning to use github issues to track bugs, features, etc. so anyone can put ideas, feature requests? If so, I can put all small things/ideas as appropriate issues.

Best regards,

Pavel

  Are you sure? yes | no

Krzysiek wrote 10/21/2015 at 21:38 point

I've decided to merge images with json file because it's easier to share just one file than zip or something that has to be unpacked on the phone etc. Hope that will manage to write some GUI editor that will allow nontechnical guys to build, reuse and merge screens.


Switching to S130 is very easy because you only need to remove two lines and recompile both bootloader and firmware. The problem is that when you install S130 softdevice and leave old bootloader than your watch will be bricked. And I'm sure that when I'll release two versions for two different softdevices then some people will brick their watches and will be angry :) The possible solution would be to build a zip that contains both softdevice and bootloader but it's not possible... softdevice uses 0x1D000 bytes + bootloader uses 0x4000 bytes so totally it's 0x21000, too much to be able to update using DFU. Possible workaround would be to prepare S110 + bootloader pack and upload it to have more space for next upload but it's quite cumbersome. On the other hand I don't like this max 3 device connected limit in S130. In S120 it's up to 8. The other solution is to add peripheral mode in the android app and connect to the phone from the watch. But it will work only on android 5.0+.


Weather plugin is really welcome :) In existing plugins I've tried to make it as simple as possible so parameters are exchanged using content providers and functions are invoked with Messenger. The question is how you want to implement it, easy way is to just expose parameters and those that are used in the watchset will be sent to the watch. I've did it that way because I'm not an android developer and it was enough at a time of writing those plugins ;) If you have a better idea and can implement it then it's great.


Github issues are a good place to write bugs and ideas. I've even did this yesterday ;) Feel free to add or implement some.

https://github.com/ossw/ossw-firmware-s120/issues

https://github.com/ossw/ossw-android/issues

  Are you sure? yes | no