Confirms and supplements a lot of things that have been discussed here and in other Garmin subforums.
Personally, in the past, I've worked with C and C++ in embedded devices (networking equipment), but the constraints of a wearable like a Garmin watch are a lot tighter than anything I've worked on in my day job. I do get some of the unique challenges tho. (The predecessors to some of the products I worked on also ran on a custom platform with no processes or kernel/user separation. And even when the company moved to standard platform - Linux - we had regular bugs caused by the use of unsafe C functions like strcpy and strncpy.)
I know I criticize Garmin a lot, but I do have sympathy for what their engineers must go through. (However, I still wish the company as a whole would care more about UX and quality.)
https://the5krunner.com/2022/04/29/garmin-epix-2-review/#comment-107584
Check out this podcast. https://cppcast.com/brad-larson-cpp-watch/
If you follow the tech stack stuff at all, it becomes amazing that these watches do so much and franks work at all. Garmin has a drastically simplified architecture relative to Apple. It’s not really based on a operating system or barely an operating system — nothing like the Unix model in Apple WatchOS or Google WearOS.
– no memory protection at all
– no processes
– no kernel protection or kernel vs user concept
– everything is a single process with threads
– everything is C and C++
– The connectIQ interpreter is a thread running in this stuff (and an interpreter is expensive in terms or compute which means battery overhead)
– basically any programming error can hang or crash the watchIt’s a punishing environment for the Garmin engineers to work in. But on the other hand that is how they get so much more battery life than WearOS and WatchOS. I’m now astonished that ConnectIQ works at all, let alone as well as it does.
Having listened to this, I’m more than slightly skeptical of any ConnectIQ stuff and I understand why companies with similar architecture like Polar, Suunto, and Coros have nothing like ConnectIQ.
I’ve definitely experience Bluetooth “crashing” in the f6X and f7X while using the Amazon CIQ music player and simultaneously disconnecting all Bluetooth sensors. I’m not sure if I should blame the Bluetooth implementation or ConnectIQ or both.
I think I am right to have avoided ConnectIQ entirely in my Ultra Run and (extreme) Trail Run profiles where navigation with the watch is a safety feature.
If Garmin would just enable the power code they have in the Cycling app in the Run app, Stryd could connect as a power meter (which it does) and work without the Stryd Zones CIQ data field. That seems like low hanging fruit. At this point it must be “strategic” that they haven’t done it when all competitors other than Apple have.