azymohliad / watchmate

PineTime smart watch companion app for Linux phone and desktop
GNU General Public License v3.0
139 stars 5 forks source link

flashing #8

Closed GameTec-live closed 1 year ago

GameTec-live commented 1 year ago

1.) Thanks for this tool, its awsome 2.) maybe "prevent" / add a warning or improve compatability when flashing version 1.0 and below. When flashing 1.0 or below and after a reboot watchmate doesnt know what to do and just fails to load data. (i have a devkit, so i can just reflash) 3.) what about adding support for "3rd party" firmwares like waspos?

azymohliad commented 1 year ago

Hey!

  1. Thank you! <3
  2. This is a very good idea. I had it in mind, but haven't got to properly test what's the oldest supported version and understand why. Do you know if it works with 1.1.0?
  3. I have it as a very long-term "maybe" on the roadmap. I'm not yet sure if it would be possible to keep the same level of tailored experience for InfiniTime and expand to other PineTime firmwares / smart-watches, and to what extent the trade-offs would be reasonable. I'd want to look deeper into that at some point, but not anytime soon. For now I plan to focus on InfiniTime only.
GameTec-live commented 1 year ago

dont rly know what the oldest supported is, but will find out... 1.0 or below def dont work XD

GameTec-live commented 1 year ago

1.11.0 fosdem - working 1.11.0 - working 1.10.0 - working 1.9.0 - error sending firmware 1.8.0 - working (2nd attempt) 1.7.1 - working 1.7.0 - working 1.6.0 - flashed, failng to read/load data so 1.6.0 and below is the deathpoint...

azymohliad commented 1 year ago

Wow, thanks a lot for this work! I'll add a warning for 1.6 and below later this week.

GameTec-live commented 1 year ago

just reflashed my devkit and then went from 1.11 down... Adding a warning would be great, yes... Also: i dont think adding waspos support wouldnt be too difficult? You could flash the "reloader" like everything else, then just go and search for a new device (which then prob is the bootlaoder, maybe add a confirmation?) and then flash the waspos itself / resources...

azymohliad commented 1 year ago

Wait, do you mean just adding ability to OTA upgrade from InfiniTime to WaspOS, or proper integration with WaspOS on a similar level as it is now for InfiniTime?

Speaking of just flashing from InfiniTime to WaspOS, WatchMate uses InfiniTime OTA upgrade procedure, so it really depends on if InfiniTime allows to receive other firmwares there. If loading WaspOS firmware from zip file doesn't work in WatchMate, then it's probably not supported or prevented by InfiniTime, and there's nothing a companion app can do here.

For a proper WaspOS integration, I can't find it on WaspOS docs, but I assume it is very different from InfiniTime in terms of BLE API (because why wouldn't it be if it doesn't explicitly try to be compatible, InfiniTime defines quite a few custom BLE characteristics, a very specific OTA upgrade protocol, slightly modified Adafruit BLE file system protocol for external resources, etc). And from the BLE API point of view, there's no really much difference whether it's a different firmware for PineTime or a completely different smart-watch. But if I'm wrong here, and WaspOS does try to be compatible with InfiniTime BLE API, then it might be not difficult indeed.

My preliminary idea is that for supporting multiple smart-watches / PineTime firmwares, I'd first need to define a more abstract smart-watch API, then implement multiple "backends" for it (InfiniTime, WaspOS, AsteroidOS, others), then map it to the UI. Designing this abstract API could be tricky to do well.

GameTec-live commented 1 year ago

waspos is compatible with gadgetbridge etc, so ig the api is infinitime copatible (ish)? And waspos installation, you just flash the waspos relaoder like any other update and then you connect to the bluetooth thingy of the reloader and flash the main os like every other update too?

azymohliad commented 1 year ago

Ok, I should've read more about the reloader after you've mentioned it for the first time. It indeed might turn out easier than I imagined. I assume you should be able to flash it with WatchMate from manually selected zip archive, but then WatchMate wouldn't connect to it, is that right? I'd need to check if it follows InfiniTime OTA upgrade procedure for flashing wasp-os. If yes, then just disabling filtering devices by "InfiniTime" name might already allow to do that. But even if so, before releasing that I'd still implement some sort of more abstract wrapper API with multiple devices in mind, so that at least it would report device's capabilities, and the app wouldn't try to read unavailable data or display the UI for unsupported features. But this could be a good starting point for expanding to more devices/firmwares and should not be too complicated.

About the similarity of WaspOS and InfiniTime BLE API, GadgetBridge isn't really an indication because it has a similar architecture to what I'm describing and already supports huge list of devices with very different BLE APIs

GameTec-live commented 1 year ago

ah ok... thx again for makeing this app, its rly useful ( and the only app that can flash resources i managed to get to work) <3

azymohliad commented 1 year ago

Just added warnings when trying to flash firmware older than 1.7 or mismatching version of external resources. Thanks again for your help with firmware versions testing. Probably I'll make another patch release with these changes and metadata update later today

GameTec-live commented 1 year ago

kk

azymohliad commented 1 year ago

A little note here, it's a bit hard to make a new release on Flathub right now.

I used some unreleased features of the GUI library Relm4, and normally I could just depend on the unreleased version from git, but due to some issue in the build stack, it's temporarily unavailable. I could temporarily remove those changes, and use stable Relm4. But I hope this isn't pressing, so I can just wait until either the new alpha Relm4 release comes out, or the issue is fixed (whichever happens first).

GameTec-live commented 1 year ago

A little note here, it's a bit hard to make a new release on Flathub right now.

I used some unreleased features of the GUI library Relm4, and normally I could just depend on the unreleased version from git, but due to some issue in the build stack, it's temporarily unavailable. I could temporarily remove those changes, and use stable Relm4. But I hope this isn't pressing, so I can just wait until either the new alpha Relm4 release comes out, or the issue is fixed (whichever happens first).

dont worry, its a nice to have...