Close
0%
0%

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)

Similar projects worth following
Make a Weloop Tommy an open source sport watch that can be used without a mobile phone. Want to see a heart rate when running, cycling speed and cadence when cycling or number of laps while swimming? Help to make it possible!

The idea is simple. Write a custom firmware that allows to communicate with many BLE enabled sensors and shows live values on a watch screen.

This project is divided into six phases:

  • Phase 1: find out and document watch pinout so it will be possible to communicate with screen, accelerometer and a flash memory from a custom firmware. DONE
  • Phase 2: write a custom firmware that will print sample text on a screen and expose a BLE service. Firmware will be flashed using SWD connector. DONE
  • Phase 3: make it possible to upload a custom firmware using OTA. This will save the waterproof case from destruction. DONE
  • Phase 4: update softdevice to the newest version (S110 8.0.0). Add possibility to switch to S120 2.0.0 softdevice. DONE
  • Phase 5: create a "terminal" firmware that allows to control what is displayed on a watch from an android/iOS app. DONE
  • Phase 6: create a "standalone" firmware using S120 softdevice that can connect to external sensors (HRS, CSCS etc) without a phone. IN PROGRESS

Roadmap:

  • 0.5.0
    • possibility to upload multiple watchfaces/applications
  • 0.6.0
    • support for country specific characters in user fonts

Instructions:

Some instructions can be found here: http://ossw.github.io/

Current version: 0.4.1

https://github.com/ossw/ossw-firmware-s120/releases/tag/0.4.1

Beta testers group

https://groups.google.com/group/ossw-beta

If you like this idea and want to support my work please donate HERE. Thanks!

  • 1 × Weloop tommy
  • 1 × Big amount of time ;)

  • OSSW 0.4.0 is here

    Krzysiek10/19/2015 at 21:25 9 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:


  • Still alive

    Krzysiek06/03/2015 at 07:12 25 comments

    Just quick update what I've managed to do:

    • it's possible to choose between central (without phone) and peripheral (with phone) mode on watch start
    • I've written simple android app that sends sensor data from IpSensorMan to a watch in peripheral mode. Currently it's only HR and CSC but it's extremely easy to add any other sensor type that IpSensorMan supports. IpSensorMan supports both ANT and BLE devices (to use BLE devices you need to install beta version of this app)
    • In central mode watch can connect directly to HR sensor. Other sensors will be added but it requires a little bit more work then adding them in peripheral mode.
    • I rewrote gui so it's now more generic and allow to use controls on a screen. Still it requires a bit of work to be able to define what should be displayed on a watch from the phone screen (like cycling speed in this place and this size, heart rate there etc.)
    • Handling notifications like missed phone calls and sms is still TODO
    • I've managed to create a firmware that reverts watch to original softdevice/bootloader so it will be possible to go back to original firmware if you don't like mine ;)
    • I've embedded PAWN abstract machine so it's possible to run scripts on a watch but only from internal flash/ram, have to rewrite it to be able to read them from external flash.

    All of this is still an alpha version so I have to put some more work to make it user friendly and generic. Expect some photos/videos how this works in the next week.

  • What's next?

    Krzysiek05/13/2015 at 09:13 2 comments

    Hi, I'm back and here are the things I will focus on in the next days/weeks:

    • add font support + possibility to upload fonts for given locale
    • write android app that sends notifications to the watch
    • add a service to android app that will allow to register data sources from other android apps like current weather, data from external sensors etc.
    • embed PAWN abstract machine to allow writing custom apps for the watch, those compiled scripts will be saved on external flash so there will be additional 512kB for the apps.

  • Quick update

    Krzysiek04/20/2015 at 22:25 5 comments

    I've just recorded watch upgrade process and will publish it in a few days. It's stable, I've added visual notification to be able to verify if everything was upgraded successfully.

    HERE you can find a newest softdevice/bootloader installer. After flashing this firmware watch will restart and use the newest S120 2.0.0 softdevice. After that you can upload your custom firmware that can work as a peripheral or as a central device. I've also created a mock application to start writing firmware, source code for it can be found HERE.

    DFU (bootloader) looks like this:

    Test app:

    And without backlight:

    From now on I will focus on firmware functionality. Stay tuned!

  • Softdevice/bootloader installation internals

    Krzysiek04/15/2015 at 19:41 0 comments

    Finally I have some time to describe how to override bootloader and softdevice. It's not supported by weloop bootloader but nothing stops us from writing a custom firmware that will allow this. To make it as simple as possible and to use existing applications that support nordic DFU I've decided to merge custom installation app with a new bootloader and a softdevice and upload it as a new firmware. After firmware upload installation app is started and bootloader and softdevice are copied to the correct addresses. Unfortunately it's not so easy because it's not possible to override softdevice from the firmware. There's also problem with UICR registers because it's not possible to override them. There's only one way to change UICR - make a full memory erase. But when we do this from a firmware then watch will crash after erase because processor will be executing instructions from empty flash...

    So how I did this? I've created two apps:

    • ossw-installer - this app makes a copy of new softdevice and bootloader to an external flash, makes a full memory erase, copies new softdevice and bootloader from external flash to processor flash and sets correct values in UICR.
    • ossw-jump - this app copies ossw-installer to processor RAM and jumps to its start address.

    So haw does it work step by step? On the left there's a weloop processor flash structure before any changes. In the middle there's memory structure of ossw-combined.bin file. On the right there's a weloop processor flash structure after installation of ossw-combined.hex using nRF Master Control Panel.

    After firmware installation weloop restarts and bootloader is executed and passes execution to ossw-jump. This app copies ossw-installer to RAM.

    Then ossw-jump jumps to ossw-installer start address. This app copies new bootloader and softdevice to external flash.

    After copying bootloader and softdevice full memory flash erase is executed so weloop processor flash is empty.

    And finally new bootloader and softdevice is copied from external flash to processor flash and new bottloader address (0x3C000) is set in UICR.

    And that's it, we have a new bootloader and S120 2.0.0 softdevice and may upload a new firmware with nRF Toolbox.

  • Changing softdevice and bootloader relocation

    Krzysiek04/09/2015 at 21:59 0 comments

    Today I finally managed to upload a new bootloader/softdevice to a watch! It wasn't easy because bootloader that is originally installed on weloop does not allow to upload a new softdevice or bootloader. There's also no support in softdevice to run command on device start (using MBR) that will copy part of firmware from one place to another (it was added in 7.1.0 softdevice and is required to change bootloader or softdevice). So the biggest issues were:

    • no bootloader/sofdevice upload feature in original bootloader
    • no way to use a newer bootloader code because it requires features that are not available in S110 6.0.0 softdevice.
    • UICR cannot be updated! That's the biggest issue because there is a value 0x14000 set at 0x10001000 address so there's no way to use newer softdevice with this value there. There's also 0x38000 set at 0x10001014 and I wanted to make bootloader smaller and use 0x3C000 as a start address.

    So how I manage to do this? I will describe it tomorrow because it's time to go sleep ;) If you want to check it yourself take a look at THIS CODE. A compiled firmware that replaces bootloader/softdevice can be found HERE. But be careful with it, it can brick your watch!

    So from now on my weloop can connect directly to other devices without a mobile phone! Now's time to write an awesome firmware ;)

  • Nothing fancy

    Krzysiek04/02/2015 at 22:44 0 comments

    I've wasted few days trying to upload a sample app using S110 8.0.0 softdevice and here are the findings:

    • it doesn't work with current (2.1.1) nRF Master Control Panel app for android :(
    • it will work with Master Control Panel for windows but I have MacOSX... I didn't manage to install MacBook Pro bluetooth host controller driver in Windows within Virtualbox. It doesn't work either in wine (no bluetooth support).
    • it WORKS with nRF Toolbox for android but only if you remove Chronos eco android app!
    • Chronos eco app for android is a crap. Even if device is not paired and app is closed it breaks communication. I wasn't able to upload an app with bootloader provided with 8.0.0 softdevice when using OTHER software. After removal everything works ok. One more strange feature is that when you enter DFU mode and upgrade firmware from chronos eco android app then it will install... weloop firmware that is not compatible with chronos eco app :D

    Good news:

    • My new watch came today so I will upload a new softdevice and an app to it soon.
    • I've decided to use S120 softdevice. It has big advantage - in newest version (2.0.0) it can be used both as a central or peripheral device (all features available in S110 7.1.0) but only one at a time. This will give us a possibility to switch watch from terminal to standalone mode!

  • Almost there

    Krzysiek03/26/2015 at 21:16 0 comments

    The bed news is that it's not possible to update softdevice/bootloader with standard weloop bootloader. When you try to update the firmware/application it works but when you try to update bootloader/softdevice it just restarts.

    The good news is that we can write a custom application that will do this. Now I'm working on an app that will fetch new bootloader/softdevice using nordic UART over BLE and save it in external flash. When everything is uploaded then it will copy data from external flash to internal flash and we will have a new softdevice/bootloader. And I have to write it using nrf 5.2.0 SDK which is really annoying ;)

    There was only one problem... I didn't know what external flash is in this watch. After some research I found out that there is a standard spi command that works with almost every flash chip. It's 90h and returns chip version but that version may be shared between many variants of the same chip. Then I found a newer command: 9Fh and now I'm 100% sure what chip is there.

    Manufacturer Id: 0xEF

    Device Id: 0x4013

    So it's definitely THIS chip :)

  • Sky is the limit!

    Krzysiek03/22/2015 at 09:01 2 comments

    Today I managed to write an app for mac OSX that's able to upload a custom firmware using firmware update feature of the watch. It doesn't require to enter an OTA mode so there's a catch:

    You can upload a custom firmware to any watch that's in the bluetooth range and is not connected to any phone! No physical access needed!

    Because of that issue I decided not to publish source code. But it doesn't stop you from uploading your custom firmware in OTA mode. To enter OTA mode just connect a charging cable, press all 3 buttons on the right side of the watch and release top and bottom keeping middle button pressed few seconds more. How to upload a new firmware in that mode? Just use a nRF Master Control Panel on an android phone. No need to calculate and provide firmware checksum (.dat file), watch bootloader is old and doesn't require to do that.

    Firmware upgrade constrains

    There are two ways to modify the watch:

    • Update just the firmware
    • Update firmware, soft device and the bootloader

    The first option is quite easy. There's no way you can break anything (unless you play with internal flash from the code ;) ) because there's always a possibility to switch watch to an OTA mode and override existing/broken firmware. But it has also the biggest limitations:

    • we have to use existing softdevice which is a S110 6.0.0. This is very old and obsolete softdevice and it's not possible to write code in mbed (unless you use an old/buggy version)
    • we're limited to being a peripheral device so no way to connect to an external sensor without a phone

    To write a firmware that way you need to:

    • Set firmware base address to 0x14000 (that's the address of the first instruction in the firmware)
    • Your firmware cannot be bigger than 147456 bytes (0x24000 bytes) because than you will override a bootloader (it starts at 0x38000)
    • Use old NRF SDK 5.2.0 with S110 6.0.0 soft device

    The second option is to override not only firmware but also the bootloader and the softdevice. That way we can use other softdevices like S120 (for central device) or S130 (both central and peripheral) and write anything we want!

    I will try to upload S130 softdevice and a sample app in the following days. Stay tuned!

  • Battery level/charging

    Krzysiek03/17/2015 at 22:20 0 comments

    Weloop tommy uses bq24232 chip as a battery charger. Documentation for this chip can be found HERE.

    There are only two pins that are interesting for us, one is a charging indicator which is high when an external power supply is connected. The second one is a battery level.

    DescriptionNRF WLCSP ballNRF pin name
    Battery levelH9P0.05
    Battery charging indicatorC5P0.25

View all 15 project logs

Enjoy this project?

Share

Discussions

kamilonn wrote 03/31/2017 at 09:27 point

Witam, mam problem. Podczas wgrywania ossw-installer-combined-0.3 przy 95% zegarek się zresetował ale po ponownym uruchomieniu pokazała się strzałka w dół. Jednak nie można wgrać ossw-firmware-s120-0.4.1 ponieważ nRF Toolbox nie widzi zegarka. (inne urządzenia go widzą np. laptop). Nie da się również uruchomić zegarka w trybie OTA, cały czas świeci się strzałka. Jakieś pomysły???

pozdrawiam

  Are you sure? yes | no

Avamander wrote 01/24/2017 at 19:21 point

Have you thought about working with RebbleOS (Pebble smartwatch open-source OS) developers to bring unified platform to multiple smartwatches? I'm sure working together the end result will be much better.

  Are you sure? yes | no

eumeirx hidalgo wrote 11/10/2016 at 14:02 point

PLEASE HELP, I can't download the 4.0 or 4.1 zip file on nRF Toolbox, it keeps on giving me this message DFU REMOTE DATA SIZE EXCEEDS LIMIT after clicking the upload button :(  please give me the solution send it to my mail eumeirx.gonowon@lsca.edu.ph

  Are you sure? yes | no

tstoylen wrote 11/02/2016 at 10:18 point

hi, this is my 1st post here. Firstly I will say I`m higly impressed by the skills of you guys here. Now I have installed OSSW - 0.5, but there must be something wrong because suddenly my phone (Samsung Galaxy s5) start vibrating and I can stop it only by shutting down the phone.  But after a while, appearantly out of nothing,it start again. Please help, or send me PM how to go back to basic software.

  Are you sure? yes | no

Phucphuc88888 wrote 08/20/2016 at 14:01 point

how can i back to weloop or chronos from ossw , please ???

  Are you sure? yes | no

Daniel Andrade wrote 07/15/2016 at 20:16 point

I installed the software on my weeloop Tommy and everything worked. My question is how to install the "JSON" files (watchfaces, backlight fix and other addons). I tried via app (which is in the google play) and I nos works.

I appreciate the help.

  Are you sure? yes | no

maurizio wrote 07/09/2016 at 13:48 point

News...Updated file xxx combined 03.bin...showed down arrow on display but after watch and display goes off ..no more possible to update fw zip file....watch is dead...

  Are you sure? yes | no

maurizio wrote 07/09/2016 at 09:04 point

hello, this is my first post.

Have a goclever chronos eco and now don t work with  android 6. Downloaded new ossw bootloader and zip app, but when watch is in ota mode/dfu goes off every 30 seconds....sometimes i can upload max 15% of software...can you help me? Use nrf toolbox but tried also with goclever app...there is mode to exit from ota mode and retutn to normal watch operations?

  Are you sure? yes | no

dawid wrote 02/02/2016 at 08:57 point

Czy to normalne, że bateria zaczęła mi trzymać kilka dni?

  Are you sure? yes | no

dawid wrote 03/08/2016 at 11:39 point

Unormowało się :)

  Are you sure? yes | no

badesign90 wrote 01/22/2016 at 21:20 point

I want to return goclever eco watch software!



Can you please send me instructions for this?
Thanks in advance

  Are you sure? yes | no

dawid wrote 12/23/2015 at 12:06 point

Nie działa batteryLevel jako progressbar. Czy tutaj mam pisać takie rzeczy jako tester?

Działa ale chyba tylko: zaczyna działać jak się zmieni wartość poziomu. Niestety przestaje działać po przełączeniu na zwykły i powrót do własnego projektu.

  Are you sure? yes | no

Krzysiek wrote 12/28/2015 at 14:20 point

I think the best way is to create an issue at:

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

or write on a group:

https://groups.google.com/forum/#!forum/ossw-beta

  Are you sure? yes | no

dawid wrote 12/22/2015 at 08:06 point

Mam nadzieję, że po polsku też można. 

Na początek bardzo mi się podoba Twój projekt, choć nie ukrywam, że fajnie jakby by już o wiele dalej w rozwoju: stoper, licznik kroków, badanie snu.

Ale do rzeczy: podoba mi się Twój zegarek "clock with date (24h)" ale dni tygodnia wolałbym po polsku. Przerobiłem PNG ale nie wiem jak go przerobić na "resorsa". Liczyłem na to, że konwersja do base64 da ten sam wynik co u Ciebie, niestety nie. Wgrałem testowo ale nie działa. Pomożesz?

Pozdrawiam i życzę dużo siły na rozbudowę projektu.

Dawid

  Are you sure? yes | no

Krzysiek wrote 12/28/2015 at 14:16 point

You can build resource data using utility page: http://ossw.github.io/utils/ (may work only in Chrome)

  Are you sure? yes | no

raicg wrote 12/06/2015 at 22:09 point

I've tried a lot of times to upload the weather watchset, but when I upload the watchface to the watch, nothing happens

Appears: File was uploaded to the watch, but nothing changes

I tried to click up button, but nothing




When I upload other watchsets, like music player or mouth with time all works good.




I tried this weather-3-screen.json from Ken Moorhead
I tried this watchmusicweather.json from Jus M.
and I get the same error




Im using the weather extension in google play 
My cellphone: Zenfone 2 - Android 5.0

  Are you sure? yes | no

novy wrote 11/24/2015 at 19:34 point

need help to revert to original goclevers software! Help!

  Are you sure? yes | no

gusomn wrote 10/29/2015 at 01:23 point

Hi,sorry...but i've  installed version OSSW - 0.4.0, but I want to return goclever eco watch software. Can you please send me instructions for this?

Thankyou

  Are you sure? yes | no

J F wrote 10/29/2015 at 11:24 point

  Are you sure? yes | no

gusomn wrote 10/29/2015 at 11:55 point

Your work is amazing..but I dont understand or something is missing to me. Because when i receive a call, the watch notificación only shows for a few moment. Message notification, only shows up one time. Also i would like to control another audio sources like in stock firmware.  Thank you!

  Are you sure? yes | no

J F wrote 10/29/2015 at 12:04 point

Not  mine work Krzysiek`s.

When someone is calling, it vibrates all along to me.

Notifications only show once, that is true, it is by design i think. I like it, if you dismiss notification on watch, it is dismissed on phone as well.

Not sure what you mean by another audio source, i use it with google music with success.

Overall OSSW have some childhood issues but works fine for me.

  Are you sure? yes | no

alessio.pellegrino wrote 10/28/2015 at 14:28 point

i want to returned in basic software,how i can do it?

  Are you sure? yes | no

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

Check PM

  Are you sure? yes | no

Phucphuc88888 wrote 08/20/2016 at 14:03 point

how can come back weloop rom ,please ???

  Are you sure? yes | no

Alexandros wrote 10/25/2015 at 08:12 point

I installed version OSSW - 0.4.0, but I want to return goclever eco watch software!

Can you please send me instructions for this?

Thanks in advance

  Are you sure? yes | no

Krzysiek wrote 10/25/2015 at 08:15 point

Check PM

  Are you sure? yes | no

apostolos_dervas wrote 01/11/2016 at 07:08 point

Please guide me as to how to return to the goclever eco watch software. Thank you

  Are you sure? yes | no

J F wrote 10/19/2015 at 10:43 point

Hi, i saw a lot of commits lately. Will you write some report again? 

I would like to switch to your frmware, will there be a autonomous alarm (could be set via phone or watch)?

If so, i will not linger on original firmware.

  Are you sure? yes | no

Krzysiek wrote 10/19/2015 at 22:14 point

Hi, unfortunately there's no autonomous alarm, only standard alarm from android clock app but it should be quite easy to add.

  Are you sure? yes | no

Krzysiek wrote 10/06/2015 at 18:30 point

Hi, sorry but I was on a leave and I've returned today. You can find more info how to build one here: http://ossw.github.io/instructions/create-a-watchset/index.html

I don't have a sample that have both time and date on the same screen but you can check: https://github.com/ossw/ossw-firmware-s120/releases/download/0.1.0/sampleWatchset.json - there are all parts you need, just put: dayOfMonth, month, year, hour and minutes on the same screen.

  Are you sure? yes | no

Sanjay Mishra wrote 09/06/2015 at 11:30 point

 I might be able to contribute accelerometer code if we have a schematic and accelerometer part number.

Do we have a schematic for the watch? Do we know the accelerometer being used?

  Are you sure? yes | no

Krzysiek wrote 09/08/2015 at 16:47 point

Accelerometer specification and pinout can be found here: https://hackaday.io/project/4510-open-source-sportsmart-watch/log/15222-accelerometer-pinout

I've managed to connect to it and configure to invoke interrupt after directional tap but it was quite useless (hard to find a good threshold) so it has many false positives or not always caught a true tap. 

Had problem with hardware I2C because it uses the same interrupt as SPI so I've used software I2C.

You can find some code here: https://github.com/ossw/ossw-firmware-s120/commit/8fb81c4506c465ada32c125a30424a0d8ba3f6f0

I've exposed two commands over BLE: 0xF0 and 0xF1 to set/get accelerometer register. I've configure it from external app with commands:

//0x2A: CTRL_REG1 System Control 1 register

[0xF0, 0x2A, 0];

//0x0E: XYZ_DATA_CFG register

[0xF0, 0x0E, 0];

//0x2B: CTRL_REG2 System Control 2 register

[0xF0, 0x2B, 0x1F];

//0x2C: CTRL_REG3 Interrupt Control register

[0xF0, 0x2C, 0x10];

//0x2D: CTRL_REG4 Interrupt Enable register (Read/Write)

[0xF0, 0x2D, 0x08];

 //0x21: PULSE_CFG Pulse Configuration register

[0xF0, 0x21, 0x55];

//0x23 – 0x25: PULSE_THSX, Y, Z Pulse Threshold for X, Y and Z registers

[0xF0, 0x23, 0x20];

[0xF0, 0x24, 0x20];

[0xF0, 0x25, 0x20];

//0x26: PULSE_TMLT Pulse Time Window 1 register

[0xF0, 0x26, 0x10];

 //0x27: PULSE_LTCY Pulse Latency Timer register

[0xF0, 0x27, 0x20];

//0x28 PULSE_WIND register (Read/Write)

[0xF0, 0x28, 0x5];

[0xF0, 0x0F, 0x10];

[0xF0, 0x2A, 0x69];

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates