VectorFonts -- what's available?

I'm trying to use Graphics.getVectorFont to fetch a VectorFont, but I couldn't figure out what font faces are available. Does anyone know how to find them? 

I was referencing https://developer.garmin.com/connect-iq/reference-guides/devices-reference/, but "Noto Sans" doesn't seem like a valid font face. 

  • There's two ways:

    1) From the device reference page you linked, click a device (such as Fenix 7), scroll down to the Fonts section (for the part number * of interest - usually the first one), and look for the fonts with Font Size listed as "Scalable". The left-most column (Font Symbol) contains the string to pass into getVectorFont().

    e.g. Fenix 7, Part Number 006-B3906–00

    In this case, if you want "Noto Sans SC", pass in "NotoSansSCMedium" to getVectorFont()

    (You'd think this would be the easiest way, but given that it's just one huge page, it's pretty annoying to wait for it to load, and it's slow to scroll.)


    2) Look in the CIQ devices info that's installed along with the SDK

    2a) Open the CIQ devices folder on your computer. On Windows, this is located at %appdata%\Garmin\ConnectIQ\Devices

    2b) Open the folder for the device you're interested in - e.g. Devices\fenix7x

    2c) Open compiler.json and look for the part number (*) you're interested in (usually the first one - i.e. partNumbers[0])

    2d) Look at the languages[] array and note the font sets for the various languages you're interested in. e.g.

    ...
    {
      "code": "eng",
      "fontSet": "ww"
    },
    ...
    {
      "code": "jpn",
      "fontSet": "apac_jpn"
    },

    ...

    2e) Open simulator.json and look at the fonts available for each font set. Vector fonts will have type equal to system_ttf. The name field contains the value to pass into getVectorFont().

    e.g. from fenix7x

        "fonts": [
            {
                "fontSet": "ww",
                "fonts": [
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_13B",
                        "name": "xtiny"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_19B",
                        "name": "tiny"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_22B",
                        "name": "small"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_25B",
                        "name": "medium"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_27B",
                        "name": "large"
                    },
                    {
                        "filename": "FNT_006B390700_BIONIC_COND_BOLD_NUMBER_33",
                        "name": "numberMild"
                    },
                    {
                        "filename": "FNT_006B390700_BIONIC_COND_BOLD_NUMBER_40",
                        "name": "numberMedium"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_54",
                        "name": "numberHot"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_62",
                        "name": "numberThaiHot"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_13B",
                        "name": "systemXtiny"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_19B",
                        "name": "systemTiny"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_22B",
                        "name": "systemSmall"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_25B",
                        "name": "systemMedium"
                    },
                    {
                        "filename": "FNT_FENIX6X_CDPG_ROBOTO_27B",
                        "name": "systemLarge"
                    },
                    {
                        "filename": "FNT_006B390700_BIONIC_COND_BOLD_NUMBER_33",
                        "name": "systemNumberMild"
                    },
                    {
                        "filename": "FNT_006B390700_BIONIC_COND_BOLD_NUMBER_40",
                        "name": "systemNumberMedium"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_54",
                        "name": "systemNumberHot"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_62",
                        "name": "systemNumberThaiHot"
                    },
                    {
                        "filename": "FNT_FENIX6_CDPG_ROBOTO_15B",
                        "name": "glanceFont"
                    },
                    {
                        "filename": "FNT_FENIX6_BIONIC_BOLD_NUMBER_18",
                        "name": "glanceNumberFont"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_27",
                        "name": "simExtNumber1"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_49",
                        "name": "simExtNumber2"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_69",
                        "name": "simExtNumber3"
                    },
                    {
                        "filename": "Bionic_Bold_Number_Only",
                        "name": "BionicBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "RobotoCondensed-Bold",
                        "name": "RobotoCondensedBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "RobotoCondensed-Regular",
                        "name": "RobotoCondensedRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "NotoSansSC-Medium-3",
                        "name": "NotoSansSCMedium",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "Kosugi-Regular-3",
                        "name": "KosugiRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "NanumGothic-Regular",
                        "name": "NanumGothicRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "Pridi-Regular_Garmin",
                        "name": "PridiRegularGarmin",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "sakkal_majalla_bold",
                        "name": "SakkalMajallaBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "sakkal_majalla_roman",
                        "name": "SakkalMajallaRoman",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "swiss_721_bd",
                        "name": "Swiss721Bold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "swiss_721_reg",
                        "name": "Swiss721Regular",
                        "type": "system_ttf"
                    }
                ]
            },
            {
                "fontSet": "apac_chn",
                "fonts": [
                    {
                        "filename": "FNT_006B437400_NOTO_SANS_SC_BOLD_94_16",
                        "name": "xtiny"
                    },
                    {
                        "filename": "FNT_006B437500_NOTO_SANS_SC_BOLD_94_23",
                        "name": "tiny"
                    },
                    {
                        "filename": "FNT_006B437400_NOTO_SANS_SC_BOLD_94_28",
                        "name": "small"
                    },
                    {
                        "filename": "FNT_006B437500_NOTO_SANS_SC_BOLD_94_34",
                        "name": "medium"
                    },
                    {
                        "filename": "FNT_006B437600_NOTO_SANS_SC_BOLD_94_36",
                        "name": "large"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_32",
                        "name": "numberMild"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_39",
                        "name": "numberMedium"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_54",
                        "name": "numberHot"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_62",
                        "name": "numberThaiHot"
                    },
                    {
                        "filename": "FNT_006B437400_NOTO_SANS_SC_BOLD_94_16",
                        "name": "systemXtiny"
                    },
                    {
                        "filename": "FNT_006B437500_NOTO_SANS_SC_BOLD_94_23",
                        "name": "systemTiny"
                    },
                    {
                        "filename": "FNT_006B437400_NOTO_SANS_SC_BOLD_94_28",
                        "name": "systemSmall"
                    },
                    {
                        "filename": "FNT_006B437500_NOTO_SANS_SC_BOLD_94_34",
                        "name": "systemMedium"
                    },
                    {
                        "filename": "FNT_006B437600_NOTO_SANS_SC_BOLD_94_36",
                        "name": "systemLarge"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_32",
                        "name": "systemNumberMild"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_39",
                        "name": "systemNumberMedium"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_54",
                        "name": "systemNumberHot"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_62",
                        "name": "systemNumberThaiHot"
                    },
                    {
                        "filename": "FNT_006B437400_NOTO_SANS_SC_BOLD_94_18",
                        "name": "glanceFont"
                    },
                    {
                        "filename": "FNT_FENIX6_BIONIC_BOLD_NUMBER_18",
                        "name": "glanceNumberFont"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_27",
                        "name": "simExtNumber1"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_COND_BOLD_NUMBER_49",
                        "name": "simExtNumber2"
                    },
                    {
                        "filename": "FNT_FENIX6X_BIONIC_BOLD_NUMBER_69",
                        "name": "simExtNumber3"
                    },
                    {
                        "filename": "Bionic_Bold_Number_Only",
                        "name": "BionicBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "RobotoCondensed-Bold",
                        "name": "RobotoCondensedBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "RobotoCondensed-Regular",
                        "name": "RobotoCondensedRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "NotoSansSC-Medium-3",
                        "name": "NotoSansSCMedium",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "Kosugi-Regular-3",
                        "name": "KosugiRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "NanumGothic-Regular",
                        "name": "NanumGothicRegular",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "Pridi-Regular_Garmin",
                        "name": "PridiRegularGarmin",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "sakkal_majalla_bold",
                        "name": "SakkalMajallaBold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "sakkal_majalla_roman",
                        "name": "SakkalMajallaRoman",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "swiss_721_bd",
                        "name": "Swiss721Bold",
                        "type": "system_ttf"
                    },
                    {
                        "filename": "swiss_721_reg",
                        "name": "Swiss721Regular",
                        "type": "system_ttf"
                    }
                ]
            },


    (*) Q: What's a part number in CIQ?

    A: A part number in CIQ maps a CIQ device type (such as fenix7x) to an actual product variant, such as Fenix 7X, quatix 7, or Enduro 2. It is *not* the same as the part number on the box.

    For older devices, it also distinguishes between the default / Worldwide (WW) and Asia-Pacific (APAC) variants of a device. Newer devices typically have a single variant for WW and APAC. Note that the APAC variant of a device typically has an older firmware / CIQ version, and it may never receive the latest version.

    Usually the first part number in compiler.json (or a given device section of the device reference page) is the "main variant" (whether that means WW as opposed to APAC, or Fenix 7X as opposed to quatix or enduro 2.) This is also usually the part number contained in the top-level worldWidePartNumber field in compiler.json.

    Q: How do I know what real device corresponds to a given part number?

    A: Check the JSON response of [https://apps.garmin.com/api/appsLibraryExternalServices/api/asw/deviceTypes]

    (This query is made when you open the Compatible Devices tab of an app in the CIQ store website.)

    For example:

    fenix7x > 006-B3907-00 is "fēnix® 7X - Solar Edition", "fēnix® 7X– Sapphire Solar Edition", "quatix® 7X – Solar Edition"

    fenix7x > 006-B3910-00 is quatix® 7X

    fenix7x > 006-B4135-00 is "tactix® 7 – Pro Ballistics Edition", "tactix® 7 – Pro Edition"

    fenix7x > 006-B4341-00 is Enduro 2

    fr935 > 006-B2691-00 is Forerunner 935 (WW)

    fr935 > 006-B2833-00 is Forerunner 935 (APAC)

  • Garmin needs to learn how to redirect ....

  • They really do. Even links from web search results don't properly redirect after logging in.

  • It's funny because their own docs still refer to that old, broken url.

    Click here - https://developer.garmin.com/connect-iq/reference-guides/ - and note that the "Devices Reference" link is broken.

    Furthermore the Reference Guides sidebar section doesn't match the main content.

    Ofc a bug has been reported, and ofc it hasn't been fixed (months later).

    I can imagine that it'll still be a problem in 2030, but I'm not sure how many of us will still care.

    Here's the correct url:

    https://developer.garmin.com/connect-iq/device-reference/

    Unfortunately I can't edit my previous reply.

    Garmin needs to learn how to redirect ....

    Old blog posts in the Garmin dev docs link to broken urls from the old forum, and old threads in the forum link to broken urls from the old dev docs.

    You can't make this stuff up.

    I feel like it's not that they don't know how to redirect, it's just that they obviously don't care about breaking links, since they have done so over and over again for years. 

    When they migrated the forum platform years ago (ironically because the forums were even more broken than they are now), they had no problem breaking all inbound links as well as breaking most links posted in the forums themselves (because the link text was abbreviated similarly to how it's done now, and the migration replaced all links with their text, meaning that the original url was lost). Attachments and images were also lost.

    Garmin just doesn't care. (I mean Garmin as an org, I'm sure the individual employees are very passionate. Personally I've worked for a company that didn't care, while caring very much myself.)

  • Even links from web search results don't properly redirect after logging in.

    Because Garmin (the org) doesn't care about user experience. We can see this over and over again, in all facets of Garmin (Connect, the forums, the products, etc.)

    Speaking of logging in, the forum forces you to log in only if you are already logged in to another Garmin site (like Connect), but it doesn't reuse the existing login session (you have to log in again). (This applies to visiting the forums after logging into Connect).

    Not only does it defeat the purpose of SSO but it punishes users for being logged into a Garmin site. If you're not already logged into a Garmin site, you can happily browse the forum without logging in.

    There's actually a ton of bugs with Garmin log in stuff, but I doubt anyone would be surprised at this point.

    The irony is that it's demonstrable that Garmin sites are able to reuse login details from other Garmin sites, as if you log into Connect while the logged-out forums are open in another tab, the forum tab will automatically be logged in. Similarly, if you log into Connect as a *different* user than you're using for the forums, the existing forum login details will change to the new user. But it seems like they missed that one edge case of opening the forums after logging into to another Garmin site.

  • Demonstrate yes. But we don't know if it's on purpose or it's a bug Slight smile

  • I don't really care whether it's on purpose or a bug, it's still a bad user experience and it's inconsistent.

    Does it make you feel better to think of all the "sorry you can't post that" forum issues as being "on purpose" (overzealous protection against hacking) rather than a bug?

    And my point was that Garmin knows how to reuse login details in some instances, so it's conceivable they could also do so in the other instance.

  • (*) Q: What's a part number in CIQ?

    A: A part number in CIQ maps a CIQ device type (such as fenix7x) to an actual product variant, such as Fenix 7X, quatix 7, or Enduro 2. It is *not* the same as the part number on the box.

    More information:

    - these part numbers are actually software part numbers (i.e. the partNumbers[] array in compiler.json). Each CIQ device can have 1 or more (software) part numbers

    - each CIQ device is associated with a single unique hardware part number (in compiler.json, this is indicated by the value of hardwarePartNumber)

    - therefore each CIQ device (e.g. fenix7x) can be thought of as a unique hardware platform, and each part number within a CIQ device can be thought of as a software variant (e.g. "Fenix 7X", "Quatix 7", "Enduro 2", etc.)

  • except if what you see and interpret as "they know" is that they don't know, maybe they're not even aware of, and maybe it's a security bug.