Skip to content

What firmware should I choose

Szybet edited this page Nov 12, 2024 · 8 revisions

If you disagree, or think something is missing, feel free to contact me and contribute to this page, it was written at 2 am, it's not really objective or well written

The TLDR

Watchy GSR

If you want to easily compile and forget about it firmware, or modify it a bit (your own watchface) using basic arduino functions, never look or modify the inside code, use it

InkWatchy:

If you want to modify the firmware, have full control of it, read the code without getting a headache, use some unique features, have a good base for your own modifications, have a proper wiki (you are now on it!), use proper wrapping functions (for ui for example) to easily achieve various things, use it. Well the setup is more complicated, (but the wiki explains it all)

The default firmware

No reasons to use it, Watchy GSR is where you should look at if inkwatchy is definitely not for you. If you still disagree, maybe look here ;p

Ok some folks didn't liked the rickroll apparently, here are the real reasons:

  • It's not mantained, SQFMI doesn't develop it further, some of it's features are still from the watchy v1 era, that shouldn't be used in watchy v3 era (like syncing time so often). Just look at the repo, many not closed issues and pull requests, still only arduino ide support etc.
  • It's code is bad, like chaos, no structure, it's blocking on major operations (wifi, bluetooth). Uses basic operations, no interrupts for example
  • For many people it won't even compile easily
  • No one uses it, no one helps with it. Everyone uses watchy gsr at this point

Obviously, as I noted below in 3 paragraphs in detail, use what you want, do what you want, I just want to make sure you make the right decision for yourself




The rest of the wiki explains why I dislike other firmwares

You may have found me calling other (The default one mostly) firmwares bad, this is a small wiki page that explains my stance.

CLARIFICATION

use what you want, use what you like, I don't force you, I don't force anyone, It's just my opinion. I love the watchy and the idea behind it, I just hate looking at other people struggling with coding it and giving up on the watchy because other firmwares are "bad or shitty". That's why I push on using some proper ones, better experience, happier people, project growing, happier me.

FURTHER CLARIFICATION don't be mad or something

There is good code and there is bad code, inkwatchy has bad code too in some places. We all learn everyday to be better at what we do. With that said, with the previous CLARIFICATION point in mind, I don't call people bad or shitty programmers, the code is bad. That's 2 things, they are not the same. The whole point is to provide a good base for beginners to learn, if the base itself is bad, they will struggle and give up, I was there too, I know how it was when I begun my journey. Looking at countless people having problems to even compile or setup the serial connection is painful, they just want to program their watchface, not to fix the broken base.

Clarification 3: the return

I'm obviously not objective, I tell you things, you explore things, you should make your own opinion

So

First, a lot is explained in the Code features section of the readme of inkwatchy repo, but we are here, you are looking for further clarification, I'm here to provide it, but you should still read it to get some idea of why and how anyway.

Literal examples, there are more, I could talk hours about it, I wouldn't spend months developing this firmware if I didn't had to.

UI rendering in starfield watchface:

https://github.com/Prokuon/watchy-starfield/blob/d2b7b8006076e72942a8b1db68fcdd0c24fcc894/Watchy_7_SEG.cpp#L123-L211

image

UI rendering in inkwatchy:

https://github.com/Szybet/InkWatchy/blob/3c5ee6d81ec91433b72ff86d87679b8a8171acf0/src/ui/watchface/watchFaceDraw.cpp#L93-L131

image

Do I need to explain?


Ok, second example, code structure. Let's say we try to look at the wifi connection setup because we had issues, we want to verify the code

In watchy GSR: https://github.com/GuruSR/Watchy_GSR/blob/master/src/Watchy_GSR.cpp A 5K long line file, use the search function... There are 400 results for searching wifi

In the default firmware: https://github.com/sqfmi/Watchy/blob/master/src/Watchy.cpp a 1K long file, 50 wifi searches. This firmware is a lot more basic than GSR so that explains it, still bad

in InkWatchy? go to src/network/wifi or just src/network/ for everything network related, structured via topic to files. It can be that easy...

Unrelated, the linux kernel starting point file: https://github.com/torvalds/linux/blob/master/init/main.c is 1.6K line long. The biggest open source project on earth starting file is near the length of a firmware for a watch. We can do better, we can structure things too... right?...


I could go on but nah, I hope you won't be a reason I will need to expand the list to prove my point even further