=====================================================================================================================================================================================================================================================================================================================================================================================
/@@@@@\ ,_/@\ /@@@@@\ /@/ @| ` ,/` /@____,/ /@/ ,@/ /@_~=@\ , /@@@@@=` /@/ ,@/ |@( ,@@@` /@/ \@\ /@/ ,,@/ \@@@/ /@/ \@\ /@@@@@@`/ ,/,/ /@/ \@\
=====================================================================================================================================================================================================================================================================================================================================================================================
|| dodoradio git server || Blog || Contact || Art ||
=====================================================================================================================================================================================================================================================================================================================================================================================

2023-07-25: WSD-F20: Obituary

=====================================================================================================================================================================================================================================================================================================================================================================================
Unfortunately, my Casio Pro Trek Smart WSD-F20 has died. The story started when I got it from my favourite social media, Gumtree, basically new in box (worn twice) and for the grand sum of GBP20. Good deal indeed. --- The AsteroidOS port initially stalled because this was my first watch where `fastboot boot` didn't work (I believe the code for the `boot` command was actually commented out somewhere in [the source code](https://android.googlesource.com/device/casio/koi-uboot/+/refs/heads/nougat-mr1-wear-release/common/cmd_fastboot.c) but I can't seem to find it). Eventually I got the courage to try flashing to the recovery partition, which worked perfectly (we discovered that android restores the recovery partition to stock state on reboot). The port was finished quite quickly, but I ran into some weird issues. - Firstly, the watch would fail to load libraries if the Asteroid rootfs was directly flashed to userdata partition, but worked fine if it was just an ext4 inside the userdata partition. We got pretty deep into a rabbit hole involving `LD_BIND_NOW=1` with that, but we never actually figured it out. - Secondly, Android broke catastrophically. It seemed to also fail to load things now, and no reflashing of partitions helped to restore it. This manifested as missing assets in the OS, horrendous performance and persistent crashes. Apparently there's a whole host of softbricking issues that naturally happen with these watches in the wild due to some mismanagement of the update process by Casio. (though the watch should work fine if flashed with Asteroid) Once I got booted into Asteroid, the watch ran fine. It served me very well until I tried booting back into android in order to get GPS logs. It seems that it tried to flash over itself somehow and in the process ended up corrupting the bootloader. The watch now bootloops whenever the battery is inserted, and crashes out of the bootloader whenever I try to get fastboot running. --- This is the biggest WearOS watch, apart from medaka (Casio WSD-F21HR, which just resuses the body shell of the WSD-F20). I had the F20A-GN, which is probably the best looking of the F20 series. The WSD-F20 (codenamed `ayu`) shares most of its guts with the WSD-F10 (codenamed `koi`). The WSD-F20 differs in the addition of GPS, the visual redesign and the rebranding to `Pro Trek Smart` (while F10 was `Casio Smart Outdoor Watch`). GPS actually gives this thing purpose as an 'outdoor watch'. Anyway, apart from GPS, most of the internal hardware and software is shared. WearOS runs horribly on the exynos3250. This thing is disgustingly slow, especially for the price. The watch has a monochrome LCD stacked on top of the colour LCD, which allows it to show the time super clearly in bright sunlight and without being illuminated. After a bad case of RTFM, I discovered that the display can also be used under WearOS to show data from compass, altimeter, barometer, calorie counter and tide/sun cycle calculator. This display has three sections, with a 5 digit display in the middle, a 4 digit display at the bottom, and a 7x23 dot matrix at the top (also a charging indicator, a `P` symbol for `pm` and a bunch of punctuation dotted all over the place). Usually hours show in the middle, date and day of week at the top and seconds at the bottom, but in data display mode time moves to the bottom while the dot matrix and central number display are free for use. With the help of [MagneFire](https://github.com/Magnefire) and [Beroset](https://github.com/Beroset), who held my hand through using tools such as jadx and ghidra in the reverse engineering process, I managed to figure out quite a few of the commands needed to talk to the LCD. I discovered that there's a few dot matrix icons baked into the LCD controller, but it actually allows drawing arbitrary text and even graphics, which allowed me to create [this demo](https://dodorad.io/uploads/ayu-display-demo.mp4); This runs on top of AsteroidOS and shows things like the number of calendar events, next alarm, battery charge and compass. It seems that Casio only used the arbitrary graphics mode to show graphs of past altitude... which is perplexing, as a commited programmer (maybe me?) could essentially write a full new UI just using the secondary display. I have reason to suspect that Casio had much more in mind for this watch. For example, the [kernel](https://android.googlesource.com/kernel/exynos/+/refs/heads/android-exynos-koi-3.10-marshmallow-dr1-wear-release/drivers/misc/MSensorsDrv.h#64) references a buzzer, perhaps this watch was meant to have a beeper like classic digital Casios? While researching some names I found in the kernel's commit log, I found this [corporate report](https://world.casio.com/content/dam/casio/global/corporate/en/corporate/report/2016/CASIO2016_P15-18_en.pdf) which seems to have randomly leaked. This tells an interesting story about Google's conflicts with the dual display idea, which makes me suspect that some of the watch's cooler features were cut out to appease Google's standards for what a smartwatch should be. --- In the end, the unceremonious suicide of this watch is quite disappointing. Despite the various software issues, and the unimpressive battery life, I really enjoyed using and hacking on it. It feels like something that came out of a passionate team who tried to create something truly unique. I'd say that it's android's best watch, even if it's far from being the best smartwatch. I've not lost all hope for my koi example. The exynos3250 may have some sort of emergency download mode, which may allow the bootloader to be flashed and fixed. In the meantime I've swapped the body panels of the F20 onto my F21HR because they look better than the F21hr's. Thankfully we're also getting a few more ayu/koi users coming in on Asteroid. Bricking is still a risk, but I'm hoping that the watches should work stably if we don't ever allow them to boot into android. I think quite a few WSD-F20 will have a long happy life running asteroid. (please [donate](https://dodorad.io/contact.html) to help fund the purchase of a WSD-F30 for Asteroid porting and to soothe my post-ayu depression)
=====================================================================================================================================================================================================================================================================================================================================================================================