Forerunner 165 and 165s drawAngeledText

Forerunner 165 and 165s simulator gives an error what there is not drawAngeledText, but in documentation is

  • TL;DR drawAngledText and drawRadialText were previously removed from fr165/fr165m but should be back on the real devices with firmware 22.24.

    They are still missing from the sim :/

    --

    Sorry for the very late response but the history here is:

    - originally both the real and simulated fr165/fr165m devices had drawAngledText and drawRadialText. Many devs made apps for fr165 which used these functions with no problem

    - at some point the simulated fr165/fr165m device configuration was changed to remove drawAngledText and drawRadialText. (The SDK changelog said something along the lines of "remove drawAngledText and drawRadial for devices which don't have a GPU")

    - at some point, the real fr165/fr165m was updated to also remove those functions. This caused several apps to start crashing

    -  Garmin decided to restore these functions to real fr165/fr165m devices, in firmware 22.24

    https://forums.garmin.com/sports-fitness/running-multisport/f/forerunner-165-series/406369/forerunner-165---software-version-22-24---live

    • Fix some Connect IQ app crashes when drawing radial or angled text.

    - unfortunately, it looks like the device configuration for the simulated fr165 and fr165m hasn't been updated yet to reflect the changes in the real device. so those functions are still missing in the sim

    Here's a thread where people are talking about it (hasn't been updated in 3 weeks though):

    https://forums.garmin.com/developer/connect-iq/f/discussion/404436/forerunner-165-ciq-apps-crash-since-firmware-update-22-22/1913521#1913521

  • While this definitely needs to be documented, I'll say (it's hard to know with Garmin...) that it is possible that they forgot to add it back to the simulator, but it's also possible that they deliberately removed it (not added it back) from the simulator.

    My explanation for that would be that, originally the intent was not to have the function because there's no GPU. They don't want jungle generator scripts and compile time has checks to make it use the function. For the real devices they decided to add it back so the CIQ apps already out, and not getting upgraded won't crash.

    I'd argue the chance that someone upgrades the FW but not the CIQ apps is not very high though...

  • My explanation for that would be that, originally the intent was not to have the function because there's no GPU. They don't want jungle generator scripts and compile time has checks to make it use the function. For the real devices they decided to add it back so the CIQ apps already out, and not getting upgraded won't crash.

    Yeah this is plausible.

    Honestly I never understood why FR165 had drawAngledText/drawRadialText considering it doesn't have a GPU. We were originally led to believe that a GPU would be a prereq of CIQ 4 devices (it was speculated this is why CIQ 3 devices did not get CIQ 4), but then they released new devices without a GPU, but which still had CIQ 4. (Ofc they were never going to release new devices without support for CIQ 4). Then it felt like devices without a GPU would not get any of the CIQ 4-only graphics functions, but that "rule" was broken with drawAngledText/drawRadialText and FR165. Now it seems like that exception has been reversed by Garmin.

    Looking back at the API docs for old SDKs, it looks like Vivoactive 5 (which also doesn't have a GPU) never had support for those functions, and FR165 only gained support with 7.2.0 (released in June 2024, 4 months after FR165 was announced).

    So they went out of their way to add support for FR165, then went out of their way to remove support.

    (Yes, I realize that from the dev's pov, the device files aren't versioned like the SDKs, but changes to the device files are documented in the SDK via "view supported devices" and, sometimes, the changelog. There's probably a many-to-one relationship between internal device config versions and SDKs, based on statements from the CIQ team)

    So idk why they added support for FR165 in the first place and idk why they removed support for FR165, but I do know that the removal was intentional (and it was literally in the SDK changelog). And it's entirely possible that they added it back in firmware to avoid crashes, but they deliberately kept it gone in SDK device configuration because they don't want devs using it going forward.

    I'd argue the chance that someone upgrades the FW but not the CIQ apps is not very high though...

    That was probably their original thinking, but they changed their mind when they saw all the users and devs who were complaining. They may have decided that it's not possible to force those devs to change their apps to make drawRadialText / drawAngledText optional. Indeed, some devs said they would not be willing or able to do so.

    The argument from the devs side was that Garmin took away functionality that used to work, and it's not right for Garmin to break perfectly working apps. I would agree with that.

    But then again, if Garmin has some reason of their own for removing that functionality (idk, battery life or product differentiation), then from Garmin's POV, there's no reason for them to make it easy for devs to use functionality in future apps.

    So I think you're def on the right track here, as some devs have been asking Garmin about the device configuration in various threads, but Garmin has said nothing.

    TL;DR

    Looks like:

    - support was removed on purpose

    - support was only added back to the firmware grudgingly / to placate the angry mob

    - support is probably purposely being withheld in the SDK

  • Speaking of using drawAngledText and drawRadialText in FR165, devs can still do so safely, as long as:

    - they use has checks to conditionally use these functions. e.g.

    if (Graphics.Dc has :drawAngledText) {
    //...
    }

    - they use the compiler option --disable-api-has-check-removal

    Just won't be able to test this in the simulator (for FR165) or rely on support to be in firmware forever