1. Device Reference
   URL: https://developer.garmin.com/connect-iq/device-reference/venu2/
   Device Reference

MenuDevice Reference

Device Reference
[Garmin Developers](https://developer.garmin.com/)
#
* [Overview](https://developer.garmin.com/connect-iq/overview/)
*
* [Compatible Devices](https://developer.garmin.com/connect-iq/compatible-devices/)
*
* [API Docs](https://developer.garmin.com/connect-iq/api-docs/)
*
* [Get the SDK](https://developer.garmin.com/connect-iq/sdk/)
*
* [Submit an App](https://developer.garmin.com/connect-iq/submit-an-app/)
*
* [Stay Informed](https://developer.garmin.com/connect-iq/stay-informed/)
*
* [Connect IQ Basics](https://developer.garmin.com/connect-iq/connect-iq-basics/)
*
* [Monkey C](https://developer.garmin.com/connect-iq/monkey-c/)
*
* [Core Topics](https://developer.garmin.com/connect-iq/core-topics/)
*
* [User Experience Guidelines](https://developer.garmin.com/connect-iq/user-experience-guidelines/)
*
* [Personality Library](https://developer.garmin.com/connect-iq/personality-library/)
*
* [Connect IQ FAQ](https://developer.garmin.com/connect-iq/connect-iq-faq/)
*
* [Reference Guides](https://developer.garmin.com/connect-iq/reference-guides/)
*
* [App Review Guidelines](https://developer.garmin.com/connect-iq/app-review-guidelines/)
*
* [Monetization](https://developer.garmin.com/connect-iq/monetization/)
*
* [Device Reference](https://developer.garmin.com/connect-iq/device-reference/)
*
* [Approach® S50](https://developer.garmin.com/connect-iq/device-reference/approachs50/)
* [Approach® S60](https://developer.garmin.com/connect-iq/device-reference/approachs60/)
* [Approach® S62](https://developer.garmin.com/connect-iq/device-reference/approachs62/)
* [Approach® S70 42mm](https://developer.garmin.com/connect-iq/device-reference/approachs7042mm/)
* [Approach® S70 47mm](https://developer.garmin.com/connect-iq/device-reference/approachs7047mm/)
* [D2™ Air](https://developer.garmin.com/connect-iq/device-reference/d2air/)
* [D2™ Air X10](https://developer.garmin.com/connect-iq/device-reference/d2airx10/)
* [D2™ Bravo](https://developer.garmin.com/connect-iq/device-reference/d2bravo/)
* [D2™ Bravo Titanium](https://developer.garmin.com/connect-iq/device-reference/d2bravo-titanium/)
* [D2™ Charlie](https://developer.garmin.com/connect-iq/device-reference/d2charlie/)
* [D2™ Delta](https://developer.garmin.com/connect-iq/device-reference/d2delta/)
* [D2™ Delta PX](https://developer.garmin.com/connect-iq/device-reference/d2deltapx/)
* [D2™ Delta S](https://developer.garmin.com/connect-iq/device-reference/d2deltas/)
* [D2™ Mach 1](https://developer.garmin.com/connect-iq/device-reference/d2mach1/)
* [D2™ Mach 2](https://developer.garmin.com/connect-iq/device-reference/d2mach2/)
* [D2™ Mach 2 Pro](https://developer.garmin.com/connect-iq/device-reference/d2mach2pro/)
* [Descent™ G1 / G1 Solar](https://developer.garmin.com/connect-iq/device-reference/descentg1/)
* [Descent™ G2](https://developer.garmin.com/connect-iq/device-reference/descentg2/)
* [Descent™ Mk1](https://developer.garmin.com/connect-iq/device-reference/descentmk1/)
* [Descent™ Mk2 / Mk2i](https://developer.garmin.com/connect-iq/device-reference/descentmk2/)
* [Descent™ Mk2 S](https://developer.garmin.com/connect-iq/device-reference/descentmk2s/)
* [Descent™ Mk3 43mm / Mk3i 43mm](https://developer.garmin.com/connect-iq/device-reference/descentmk343mm/)
* [Descent™ Mk3i 51mm](https://developer.garmin.com/connect-iq/device-reference/descentmk351mm/)
* [Edge® 1030](https://developer.garmin.com/connect-iq/device-reference/edge1030/)
* [Edge® 1030 / Bontrager](https://developer.garmin.com/connect-iq/device-reference/edge1030bontrager/)
* [Edge® 1030 Plus](https://developer.garmin.com/connect-iq/device-reference/edge1030plus/)
* [Edge® 1040 / 1040 Solar](https://developer.garmin.com/connect-iq/device-reference/edge1040/)
* [Edge® 1050](https://developer.garmin.com/connect-iq/device-reference/edge1050/)
* [Edge® 130](https://developer.garmin.com/connect-iq/device-reference/edge130/)
* [Edge® 130 Plus](https://developer.garmin.com/connect-iq/device-reference/edge130plus/)
* [Edge® 520 Plus](https://developer.garmin.com/connect-iq/device-reference/edge520plus/)
* [Edge® 530](https://developer.garmin.com/connect-iq/device-reference/edge530/)
* [Edge® 540 / 540 Solar](https://developer.garmin.com/connect-iq/device-reference/edge540/)
* [Edge® 550](https://developer.garmin.com/connect-iq/device-reference/edge550/)
* [Edge® 820 / Explore](https://developer.garmin.com/connect-iq/device-reference/edge820/)
* [Edge® 830](https://developer.garmin.com/connect-iq/device-reference/edge830/)
* [Edge® 840 / 840 Solar](https://developer.garmin.com/connect-iq/device-reference/edge840/)
* [Edge® 850](https://developer.garmin.com/connect-iq/device-reference/edge850/)
* [Edge® 1000 / Explore](https://developer.garmin.com/connect-iq/device-reference/edge-1000/)
* [Edge® 520](https://developer.garmin.com/connect-iq/device-reference/edge-520/)
* [Edge® Explore](https://developer.garmin.com/connect-iq/device-reference/edgeexplore/)
* [Edge® Explore 2](https://developer.garmin.com/connect-iq/device-reference/edgeexplore2/)
* [Edge® MTB](https://developer.garmin.com/connect-iq/device-reference/edgemtb/)
* [Enduro™](https://developer.garmin.com/connect-iq/device-reference/enduro/)
* [Enduro™ 3](https://developer.garmin.com/connect-iq/device-reference/enduro3/)
* [epix™](https://developer.garmin.com/connect-iq/device-reference/epix/)
* [epix™ (Gen 2) / quatix® 7 Sapphire](https://developer.garmin.com/connect-iq/device-reference/epix2/)
* [epix™ Pro (Gen 2) 42mm](https://developer.garmin.com/connect-iq/device-reference/epix2pro42mm/)
* [epix™ Pro (Gen 2) 47mm / quatix® 7 Pro](https://developer.garmin.com/connect-iq/device-reference/epix2pro47mm/)
* [epix™ Pro (Gen 2) 51mm / D2™ Mach 1 Pro / tactix® 7 – AMOLED Edition](https://developer.garmin.com/connect-iq/device-reference/epix2pro51mm/)
* [eTrex® Touch](https://developer.garmin.com/connect-iq/device-reference/etrextouch/)
* [fēnix® 3 / tactix® Bravo / quatix® 3](https://developer.garmin.com/connect-iq/device-reference/fenix3/)
* [fēnix® 3 HR](https://developer.garmin.com/connect-iq/device-reference/fenix3-hr/)
* [fēnix® 5 / quatix® 5](https://developer.garmin.com/connect-iq/device-reference/fenix5/)
* [fēnix® 5 Plus](https://developer.garmin.com/connect-iq/device-reference/fenix5plus/)
* [fēnix® 5S](https://developer.garmin.com/connect-iq/device-reference/fenix5s/)
* [fēnix® 5S Plus](https://developer.garmin.com/connect-iq/device-reference/fenix5splus/)
* [fēnix® 5X / tactix® Charlie](https://developer.garmin.com/connect-iq/device-reference/fenix5x/)
* [fēnix® 5X Plus](https://developer.garmin.com/connect-iq/device-reference/fenix5xplus/)
* [fēnix® 6 / 6 Solar / 6 Dual Power](https://developer.garmin.com/connect-iq/device-reference/fenix6/)
* [fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power / quatix® 6](https://developer.garmin.com/connect-iq/device-reference/fenix6pro/)
* [fēnix® 6S / 6S Solar / 6S Dual Power](https://developer.garmin.com/connect-iq/device-reference/fenix6s/)
* [fēnix® 6S Pro / 6S Sapphire / 6S Pro Solar / 6S Pro Dual Power](https://developer.garmin.com/connect-iq/device-reference/fenix6spro/)
* [fēnix® 6X Pro / 6X Sapphire / 6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power](https://developer.garmin.com/connect-iq/device-reference/fenix6xpro/)
* [fēnix® 7 / quatix® 7](https://developer.garmin.com/connect-iq/device-reference/fenix7/)
* [fēnix® 7 Pro](https://developer.garmin.com/connect-iq/device-reference/fenix7pro/)
* [fēnix® 7 Pro - Solar Edition (no Wi-Fi)](https://developer.garmin.com/connect-iq/device-reference/fenix7pronowifi/)
* [fēnix® 7S](https://developer.garmin.com/connect-iq/device-reference/fenix7s/)
* [fēnix® 7S Pro](https://developer.garmin.com/connect-iq/device-reference/fenix7spro/)
* [fēnix® 7X / tactix® 7 / quatix® 7X Solar / Enduro™ 2](https://developer.garmin.com/connect-iq/device-reference/fenix7x/)
* [fēnix® 7X Pro](https://developer.garmin.com/connect-iq/device-reference/fenix7xpro/)
* [fēnix® 7X Pro - Solar Edition (no Wi-Fi)](https://developer.garmin.com/connect-iq/device-reference/fenix7xpronowifi/)
* [fēnix® 8 43mm](https://developer.garmin.com/connect-iq/device-reference/fenix843mm/)
* [fēnix® 8 47mm / 51mm / tactix® 8 47mm / 51mm / quatix® 8 47mm / 51mm](https://developer.garmin.com/connect-iq/device-reference/fenix847mm/)
* [fēnix® 8 Pro 47mm / 51mm / MicroLED / quatix® 8 Pro 47mm / 51mm](https://developer.garmin.com/connect-iq/device-reference/fenix8pro47mm/)
* [fēnix® 8 Solar 47mm](https://developer.garmin.com/connect-iq/device-reference/fenix8solar47mm/)
* [fēnix® 8 Solar 51mm / tactix® 8 Solar 51mm](https://developer.garmin.com/connect-iq/device-reference/fenix8solar51mm/)
* [fēnix® Chronos](https://developer.garmin.com/connect-iq/device-reference/fenixchronos/)
* [fēnix® E](https://developer.garmin.com/connect-iq/device-reference/fenixe/)
* [Forerunner® 165](https://developer.garmin.com/connect-iq/device-reference/fr165/)
* [Forerunner® 165 Music](https://developer.garmin.com/connect-iq/device-reference/fr165m/)
* [Forerunner® 170](https://developer.garmin.com/connect-iq/device-reference/fr170/)
* [Forerunner® 170 Music](https://developer.garmin.com/connect-iq/device-reference/fr170m/)
* [Forerunner® 230](https://developer.garmin.com/connect-iq/device-reference/fr230/)
* [Forerunner® 235](https://developer.garmin.com/connect-iq/device-reference/fr235/)
* [Forerunner® 245](https://developer.garmin.com/connect-iq/device-reference/fr245/)
* [Forerunner® 245 Music](https://developer.garmin.com/connect-iq/device-reference/fr245m/)
* [Forerunner® 255](https://developer.garmin.com/connect-iq/device-reference/fr255/)
* [Forerunner® 255 Music](https://developer.garmin.com/connect-iq/device-reference/fr255m/)
* [Forerunner® 255s](https://developer.garmin.com/connect-iq/device-reference/fr255s/)
* [Forerunner® 255s Music](https://developer.garmin.com/connect-iq/device-reference/fr255sm/)
* [Forerunner® 265](https://developer.garmin.com/connect-iq/device-reference/fr265/)
* [Forerunner® 265s](https://developer.garmin.com/connect-iq/device-reference/fr265s/)
* [Forerunner® 45](https://developer.garmin.com/connect-iq/device-reference/fr45/)
* [Forerunner® 55](https://developer.garmin.com/connect-iq/device-reference/fr55/)
* [Forerunner® 570 42mm](https://developer.garmin.com/connect-iq/device-reference/fr57042mm/)
* [Forerunner® 570 47mm](https://developer.garmin.com/connect-iq/device-reference/fr57047mm/)
* [Forerunner® 630](https://developer.garmin.com/connect-iq/device-reference/fr630/)
* [Forerunner® 645](https://developer.garmin.com/connect-iq/device-reference/fr645/)
* [Forerunner® 645 Music](https://developer.garmin.com/connect-iq/device-reference/fr645m/)
* [Forerunner® 70](https://developer.garmin.com/connect-iq/device-reference/fr70/)
* [Forerunner® 735xt](https://developer.garmin.com/connect-iq/device-reference/fr735xt/)
* [Forerunner® 745](https://developer.garmin.com/connect-iq/device-reference/fr745/)
* [Forerunner® 920XT](https://developer.garmin.com/connect-iq/device-reference/fr920xt/)
* [Forerunner® 935](https://developer.garmin.com/connect-iq/device-reference/fr935/)
* [Forerunner® 945](https://developer.garmin.com/connect-iq/device-reference/fr945/)
* [Forerunner® 945 LTE](https://developer.garmin.com/connect-iq/device-reference/fr945lte/)
* [Forerunner® 955 / Solar](https://developer.garmin.com/connect-iq/device-reference/fr955/)
* [Forerunner® 965](https://developer.garmin.com/connect-iq/device-reference/fr965/)
* [Forerunner® 970](https://developer.garmin.com/connect-iq/device-reference/fr970/)
* [Garmin Swim™ 2](https://developer.garmin.com/connect-iq/device-reference/garminswim2/)
* [GPSMAP® 66s / 66i / 66sr / 66st](https://developer.garmin.com/connect-iq/device-reference/gpsmap66/)
* [GPSMAP® 67 / 67i](https://developer.garmin.com/connect-iq/device-reference/gpsmap67/)
* [GPSMAP® 86s / 86sc / 86i / 86sci](https://developer.garmin.com/connect-iq/device-reference/gpsmap86/)
* [GPSMAP® H1 / H1i Plus](https://developer.garmin.com/connect-iq/device-reference/gpsmaph1/)
* [Instinct® 2 / Solar / Dual Power / dēzl Edition](https://developer.garmin.com/connect-iq/device-reference/instinct2/)
* [Instinct® 2S / Solar / Dual Power](https://developer.garmin.com/connect-iq/device-reference/instinct2s/)
* [Instinct® 2X Solar](https://developer.garmin.com/connect-iq/device-reference/instinct2x/)
* [Instinct® 3 AMOLED 45mm](https://developer.garmin.com/connect-iq/device-reference/instinct3amoled45mm/)
* [Instinct® 3 AMOLED 50mm](https://developer.garmin.com/connect-iq/device-reference/instinct3amoled50mm/)
* [Instinct® 3 Solar 45mm / 50mm](https://developer.garmin.com/connect-iq/device-reference/instinct3solar45mm/)
* [Instinct® Crossover](https://developer.garmin.com/connect-iq/device-reference/instinctcrossover/)
* [Instinct® Crossover AMOLED](https://developer.garmin.com/connect-iq/device-reference/instinctcrossoveramoled/)
* [Instinct® E 40mm](https://developer.garmin.com/connect-iq/device-reference/instincte40mm/)
* [Instinct® E 45mm](https://developer.garmin.com/connect-iq/device-reference/instincte45mm/)
* [Captain Marvel](https://developer.garmin.com/connect-iq/device-reference/legacyherocaptainmarvel/)
* [First Avenger](https://developer.garmin.com/connect-iq/device-reference/legacyherofirstavenger/)
* [Darth Vader™](https://developer.garmin.com/connect-iq/device-reference/legacysagadarthvader/)
* [Rey™](https://developer.garmin.com/connect-iq/device-reference/legacysagarey/)
* [MARQ® (Gen 2) Athlete / Adventurer / Captain / Golfer / Carbon Edition / Commander - Carbon Edition](https://developer.garmin.com/connect-iq/device-reference/marq2/)
* [MARQ® (Gen 2) Aviator](https://developer.garmin.com/connect-iq/device-reference/marq2aviator/)
* [MARQ® Adventurer](https://developer.garmin.com/connect-iq/device-reference/marqadventurer/)
* [MARQ® Athlete](https://developer.garmin.com/connect-iq/device-reference/marqathlete/)
* [MARQ® Aviator](https://developer.garmin.com/connect-iq/device-reference/marqaviator/)
* [MARQ® Captain / MARQ® Captain: American Magic Edition](https://developer.garmin.com/connect-iq/device-reference/marqcaptain/)
* [MARQ® Commander](https://developer.garmin.com/connect-iq/device-reference/marqcommander/)
* [MARQ® Driver](https://developer.garmin.com/connect-iq/device-reference/marqdriver/)
* [MARQ® Expedition](https://developer.garmin.com/connect-iq/device-reference/marqexpedition/)
* [MARQ® Golfer](https://developer.garmin.com/connect-iq/device-reference/marqgolfer/)
* [Montana® 7 Series](https://developer.garmin.com/connect-iq/device-reference/montana7xx/)
* [Oregon® 7 Series](https://developer.garmin.com/connect-iq/device-reference/oregon7xx/)
* [Rino® 7 Series](https://developer.garmin.com/connect-iq/device-reference/rino7xx/)
* [Venu®](https://developer.garmin.com/connect-iq/device-reference/venu/)
* [Venu® 2](https://developer.garmin.com/connect-iq/device-reference/venu2/)
* [Venu® 2 Plus](https://developer.garmin.com/connect-iq/device-reference/venu2plus/)
* [Venu® 2S](https://developer.garmin.com/connect-iq/device-reference/venu2s/)
* [Venu® 3](https://developer.garmin.com/connect-iq/device-reference/venu3/)
* [Venu® 3S](https://developer.garmin.com/connect-iq/device-reference/venu3s/)
* [Venu® 4 41mm](https://developer.garmin.com/connect-iq/device-reference/venu441mm/)
* [Venu® 4 45mm / D2™ Air X15](https://developer.garmin.com/connect-iq/device-reference/venu445mm/)
* [Venu® Mercedes-Benz® Collection](https://developer.garmin.com/connect-iq/device-reference/venud/)
* [Venu® Sq](https://developer.garmin.com/connect-iq/device-reference/venusq/)
* [Venu® Sq 2](https://developer.garmin.com/connect-iq/device-reference/venusq2/)
* [Venu® Sq 2 Music](https://developer.garmin.com/connect-iq/device-reference/venusq2m/)
* [Venu® Sq. Music Edition](https://developer.garmin.com/connect-iq/device-reference/venusqm/)
* [Venu® X1](https://developer.garmin.com/connect-iq/device-reference/venux1/)
* [vívoactive®](https://developer.garmin.com/connect-iq/device-reference/vivoactive/)
* [vívoactive® 3](https://developer.garmin.com/connect-iq/device-reference/vivoactive3/)
* [vívoactive® 3 Mercedes-Benz® Collection](https://developer.garmin.com/connect-iq/device-reference/vivoactive3d/)
* [vívoactive® 3 Music](https://developer.garmin.com/connect-iq/device-reference/vivoactive3m/)
* [vívoactive® 3 Music LTE](https://developer.garmin.com/connect-iq/device-reference/vivoactive3mlte/)
* [vívoactive® 4](https://developer.garmin.com/connect-iq/device-reference/vivoactive4/)
* [vívoactive® 4S](https://developer.garmin.com/connect-iq/device-reference/vivoactive4s/)
* [vívoactive® 5](https://developer.garmin.com/connect-iq/device-reference/vivoactive5/)
* [vívoactive® 6](https://developer.garmin.com/connect-iq/device-reference/vivoactive6/)
* [vívoactive® HR](https://developer.garmin.com/connect-iq/device-reference/vivoactive-hr/)
MenuDevice Reference

2. API 5.0.0 - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/366559/api-5-0-0/1769647
   API 5.0.0 - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- State Not Answered
- Replies 18 replies
- Subscribers 24 subscribers
- Views 5382 views
- Users 0 members are here

Options

- Share
- More
- Cancel

Related

# API 5.0.0

I'm confused. I don't see any Garmin devices that support API 5.0.0. What am I missing?

- Sign in to reply
- Cancel

## Top Replies

Toybox.System (garmin.com) getDisplayMode() and DisplayMode enum. Only for Amoled devices (mostly). Previously we'd have to use and set a variable in OnEnterSleep and…

So maybe save off the device folder before you get the updates with the SDKmanager I'm fully switched to the 7.1.0 SDK

There really ought to be versioning built in into the sdk manager…

- Indeed. For example if you use Menu2 and compile with old SDK (6.4.2) and run on a 5.0.0 device in the simulator then it crashes

## All Replies

That developer page clearly hasn’t been updated.

API 5 is System 7, and it seems that more or all of the System 6 (API 4) devices are getting it. The devices in the SDK haven’t been updated either, but physical watches such as Forerunner 955 have received an update with CIQ 5.0.0.

If you’re wondering why the SDK devices haven’t been updated yet, I’d imagine that they’re waiting either until there’s a reasonable chance that “everyone” (or as many people as possible) have the update, or they’re waiting to see if there’s any bugs in the field. Remember, once an SDK device is updated with a new firmware/CIQ version, then any app you build for that device will require that firmware at a *minimum* (meaning people who still have CIQ 4.x would have to update.)

System 7 APIs are available in the following devices:

- D2 Mach 1
- Edge® 1040 Series
- Edge 540
- Edge 840
- Epix (Gen 2) Series
- Epix (Gen 2) Pro Series
- Enduro 2 Series
- fēnix® 7 Series
- fēnix 7 Pro Series
- MARQ 2 Series
- Forerunner 165 series
- Forerunner® 255 series
- Forerunner 265 series
- Forerunner 955 series
- Forerunner 965
- Venu® 3
- Vivoactive® 5

Venu 2 series, Venu 2 Plus, and Venu Sq 2 Series will be getting API 5.0.0 in a future update. Get the Connect IQ 7.1.0 SDK from the SDK Manager today.

You might take issue with the wording of this announcement, given that the sdk devices haven’t been updated yet. I guess they can weasel out of it by saying that the actual devices have API 5, and you can still build an app that uses API 5 features (I think), you just can’t set the minApiVersion to 5 otherwise you won’t be able to build for any device (which might be a problem for someone who wants to make an app which *only* works on CIQ 5 devices.)

There were new deice files a few days back with the System 7/CIQ 5 devices. Be forewarned, some folks have run into issues using the new device files and the 6.4.x SDK. So maybe save off the device folder before you get the updates with the SDKmanager I'm fully switched to the 7.1.0 SDK.

When I run an app for the 965 in the sim with the new device files, I see this on the top line:

I see the same thing for other watches, like the fr955. And edge devices like the 540/840

Device files for some of the devices that will get System7 haven't been released yet. Could be that production FW for those devices with CIQ 5 hasn't been released, only beta FW.

Oh my mistake. I did hear that some ppl got the 5.0.0 devices in the forums, but I hadn’t received the updates myself. Sorry for the misinformation.

In that case, the devices page in the online documentation should def be updated.

Indeed. For example if you use Menu2 and compile with old SDK (6.4.2) and run on a 5.0.0 device in the simulator then it crashes

Thanks. Just need to reconcile API 5 and System 7 and SDK 7 and CIQ 5. Sounds like these are all the same. My immediate issue is I'm running out of BG memory for a large JSON packet. I can't pass it into Background.exit(data), and I can't Storage.setValue("data",data). Out of memory. So I was hoping my Target Devices like an EDGE 1030, 820, etc, would now be able to to handle COMM in the foreground under API 5.

Older edge devices like the 520,820,530,830,1030 are CIQ 3 and will not be getting CIQ 5, so this will not help you with those.

Is there an easy way / summary to see all the new functions in 5.0.0 ? E.g. stress score is now in ActivityMonitor.Info

There is the System 7 announcement, and also in each SDK is a readme file with all the Release notes back to version 0.0.1 of the SDK

I don't see this specific change (stress score) documented in either of those places. I'm guessing there might be more things that were added and it would be nice to know what they are.

There are times that it's just a matter of going through the API doc (yes, it can be a pain), but imagine a doc that listed this for each version of the SDK over the last 9 years.

3. Connect IQ System 5 SDK Now Available - News & Announcements - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/b/news-announcements/posts/connect-iq-system-5-sdk-now-available
   Connect IQ System 5 SDK Now Available - News & Announcements - Connect IQ - Garmin Forums

- SDK Release
- sdk manager

- nradov and 1 other like this" data-format="{count}" data-configuration="Format=%7Bcount%7D&IncludeLike=true&IncludeTip=true">

- Share
- Subscribe by email
- More
- Cancel

Related

Recommended

Mar 22, 2022

Connect IQ System 5 is here! The Connect IQ 4.1.1 SDK is now available from the SDK manager. System 5 better, faster and stronger than before with several key enhancements and updates.

## New Metrics

System 5 has all new access to device metrics including:

API

Description

Get the current respiration value

Get the current time to recovery

Get device Body Battery history

Get device stress history

Get the amount of battery remaining in days

Get the user’s running VO2 Max

Get the user’s cycling VO2 Max

Get an iterator of the user’s past activities

Get the sunrise time for a location

Get the sunset time for a location

## Updated App Settings

The new app settings system is now deployed in Connect, Connect IQ and Garmin Express.

With the new` ` tag, you can tie related settings together. These will appear as a single entry in mobile that is editable within its own page. With the`enableIfTrue` attribute, you can disable a group based on if the user has selected a Boolean within the settings. The new array setting allows for growable lists of sub-objects within your settings. Best of all, these settings can work with any Connect IQ device.

You can learn more in the Properties and Settings chapter of the Core Topics section.

## New Profiler

The new Connect IQ profiler will help you improve your on-device app performance by giving you visibility to which calls are taking time in your app.

In a future device update, you will be able to profile your app on device by compiling the app with the`-k` option. After you run, a file named`.PRF` will be generated in the`LOGS` folder. You will be able load the`PRF` file into the simulator profile tool for analysis.

## New! New Authentication Module

System 5 introduces a new Toybox module Authentication. The`Authentication` module provides a new function that is similar to Communications.makeOAuthRequest(). The main differences are that the request will open in the Connect IQ Store mobile app, and that the Authentication module is available to all app types in the foreground. Now your data fields and watch faces can initiate authentication without using a background service.

## Supported Devices

Connect IQ System 5 has rolled out on a number of devices with more coming:

Now Available

Public Beta Available

Coming Soon

Forerunner® 245 SeriesForerunner® 745Forerunner® 945Forerunner® 945 LTEVenu® SeriesVenu® 2 SeriesVenu® 2 Plus SeriesVivoactive 4 Series

Edge® 530 Edge® 830 Edge® 1030 Edge® 1030 Plus

epixTM (gen 2)fēnix® 5 Plus Seriesfēnix® 6 Seriesfēnix® 7 SeriesInstinct® 2 SeriesMARQ® Seriesquatix® 6tactix® 6Venu® Sq Series

## Get the SDK

System 5 is ready to make your apps better, faster, and stronger. You can download the SDK from the SDK manager to begin updating your apps.

4. Retrieve ambient pressure in foreground - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/288741/retrieve-ambient-pressure-in-foreground
   Retrieve ambient pressure in foreground - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 11 replies
- Subscribers 18 subscribers
- Views 1953 views
- Users 0 members are here

Options

Related

# Retrieve ambient pressure in foreground

Toybox.Sensor.getInfo().ambientPressure needs the permission Toybox.Sensor - I don't have added this permission yet because until now I used the pressure history.

I realised that ambientPressure is the value I want to display and not the one from the history and want to change this now.

1) it seems like ambientPressure value can't be retrieved from history, correct?

2) I realised that Toybox.Sensor also needs the background permission, does this mean I can only read the ambientPressure in the background?

Actually I don't want to add 2 permissions for this single data value to my watchface, is there no alternative way to get the current pressure (or last in one from history)?

- Sign in to reply
- Cancel

With a watch face, you can only access Sensor data in a background service.

Try Activity.getActivityInfo().ambientPressure in the foreground

Be sure to handle devices without a baro altimeter

In the sim I can access ambientPressure without an exception but it returns null (without adding the necessary permissions though)... But you say, the foreground access won't work on a real device anyway, that's the important information for me. Btw, adding background + sensor permission approx. halves the available memory for a watchface (ERROR: PRG generated exceeds the memory limit of 'background' applications for device id 'fenix6xpro': 63883 bytes) - is this something I have to accept or can I circumvent this side effect?

Can't I alternatively convert pressure to ambientPressure with the history data?

In the sim, are you simulating data? Try Activity.Info on a real device with a baro if you have doubts.

Once you add background permission, you want to make sure you use the (:background) annotation where needed, otherwise it will try to load the entire WF when the background runs, inclusing when onAppInstall() or onAppUpdate() are called.

Now that I simulate data it shows a value - thanks. Even without adding additional permissions.

Oh, now I remember that in need to add :background annotations where needed to avoid my whole WF is running in the background - thanks.

So actually you say something different than I though - that real devices with baro allow to access Activity.getActivityInfo().ambientPressure in the foreground? So I just have to add the permissions, make sure my WF is running in foreground and it will work on a real device? Or will it work without the additional permissions in the foreground on a real device (as this is what I see in the sim)?

hi, no permission is need for Activity.getActivityInfo().ambientPressure

when Jim said "Be sure to handle devices without a baro altimeter" I think he means to check if the device has a Baro with

if(Activity.getActivityInfo() has :ambientPressure){...}

if you use this method, you don't need :Background annotation or permission.

Thanks, that answers all open questions. The unsure phrase for me was "you can only access Sensor data in a background service"

yes the module Sensor. but Activity is available from foreground.

Don't forget to check null statment

thanks for clarifying that. Btw, isn't the null check enough for class variables? I actually though the :has must only be used for functions...

hi, no it is not enough, if you try for exemple Activity.getActivityInfo().ambientPressure on a F45, it will crash since FR45 does not have ABC sensor.

see the API doc, you have lots of exemple of :has

You want to do the has check too. Devices like the fr45, fr55, fr245 and venu sq don't have a baro altimeter.

5. Which models support API level 5.0.0 or higher? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/406222/which-models-support-api-level-5-0-0-or-higher/1912310
   Which models support API level 5.0.0 or higher? - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 15 replies
- Subscribers 23 subscribers
- Views 4096 views
- Users 0 members are here

Options

Related

# Which models support API level 5.0.0 or higher?

Which models support API level 5.0.0 or higher? Is there a list somewhere?

- Sign in to reply
- Cancel

## Top Replies

Note, devices with 5.1.0 are different and require the 8.1.0+ SDK

I have an Edge 1050 with CIQ 5.1 where IQ apps compiled with SDK 7.3 run without any problems!I think it's more like only…

- That can't be true... the Garmin store is full of CIQ apps published in the past before SDK 8 was around, and those all work fine on my FR955 and my EDGE 1050, both of which are API 5.1 devices. You know…
- I think there is a misunderstanding:This thread has started with:Which models support API level 5.0.0 or higher? Is there a list somewhere?Jim he has linked a list of real devices and their CIQ level…

## All Replies

That can't be true... the Garmin store is full of CIQ apps published in the past before SDK 8 was around, and those all work fine on my FR955 and my EDGE 1050, both of which are API 5.1 devices. You know this... so I must not understand what you mean. Or do you think all those apps will stop working on newer Garmin devices until the developer re-publishes their apps using SDK 8?

He's saying that if you now build an app for a CIQ 5.1.0 device (after updating the device files, and assuming compiler.json indicates a connectIqVersion of 5.1.0), you must use SDK 8.1.0.

Older SDKs (>= 7.2.0 and < 8.0.0) will fail to build with the error message that was already posted in this thread above.

Very old SDKs (< 7.2.0) will work, but that's actually a bug. You will find that these SDKs assume that they're able to build for any device whose API level is greater or equal to the SDK version (it's a very old assumption which used to be true.) So for example, SDK 6.2.0 thinks it can build for any CIQ API level >= 6.2.0, SDK 4.2.4 thinks it can build for any CIQ API level >= 4.2.4, etc.

What SDKs are supposed to be doing is checking bin/compilerinfo.xml (in the SDK folder), which contains targetSdkVersions, a list of supported API versions for that SDK. And you will find that is exactly what happens with SDK 7.2.0 and higher

I think there is a misunderstanding:

This thread has started with:Which models support API level 5.0.0 or higher? Is there a list somewhere?

Jim he has linked a list of real devices and their CIQ level and answered:Note, devices with 5.1.0 are different and require the 8.1.0+ SDK

And my answer was: „Devices with 5.1.0 do not require apps with 8.1.0 build“.

It‘s all about real devices. And devices with 5.1.0 do work with apps built with older SDKs - as Dave commented, too.

Jim he has linked a list of real devices and their CIQ level

That list of “real devices” is similar to the corresponding information in the SDK device files. There’s nothing magical about that list of devices as user-readable documentation, as opposed to the machine-readable information in the SDK device files.

I don’t know why you think that list (or the devices in it) are any “realer” than the info in the CIQ SDK device files. Both lists have the same concept of “CIQ devices”, which sometimes group several actual “real models” into a single CIQ device.

Like how Tactix is never a separate CIQ device, but it’s always lumped in with a Fenix CIQ device. This can be seen in both the list of real devices (as you call it) and the CIQ SDK device files. Nobody in the real world will say that a Fenix is the same as a Tactix though.

Like how “Edge 820 / Explore” (which means Edge 820 and Edge 820 Explore) is a single device for the purposes of CIQ, even though they are 2 distinct models in real life. Edge 820 supports power meters, and Edge 820 Explore does not, which is rather inconvenient if you wanted to make a CIQ app which requires power meter support, as you cannot include one of those models and exclude the other.

Speaking of “real devices”, there’s no list that can tell you what firmware / CIQ level is actually on the “real devices”, only what the CIQ ecosystem expects (or enforces) to be on those devices at a minimum, if you want to install CIQ apps. A user could’ve bought an fr955 on release and never updated, meaning they would have CIQ 4.x instead of CIQ 5.1.0. Ofc Garmin will now enforce that you have to have CIQ 5.1.0 on your fr955 if you want to install an app (or update to an app version) that was built today.

Note, devices with 5.1.0 are different and require the 8.1.0+ SDK

And my answer was: „Devices with 5.1.0 do not require apps with 8.1.0 build“

Well, it all depends on how you interpret that statement.

Does every CIQ 5.1.0 device only work with apps that were built with 8.1.0 SDK? Clearly not, as every device that now has 5.1.0 once had 5.x and many had 4.x. So yeah, in the past you could build apps for CIQ 4.x or 5.x with SDKs earlier than 8.1.0, and those apps should continue to work.

Does every CIQ 5.1.0 device now require the 8.1.0 SDK if you want to build an app for it today? Yes, assuming the corresponding device files have been updated to API level 5.1.0. Why is this the case? Because no SDK other than 8.1.0 will allow you to build for such a device (except for the pre-7.2.0 SDKs which have a bug in this check). And furthermore, if such a device has not been updated to CIQ 5.1.0, users will be unable to install apps that were built today.

It‘s all about real devices. And devices with 5.1.0 do work with apps built with older SDKs - as Dave commented, too.

And my point is that if you try to build for a 5.1.0 device *today* (with up-to-date device files), you will find that you are unable to do so with an older SDK, regardless of whether the PRG produced with that SDK would work on the 5.1.0 device or not.

It’s also well-accepted that to build for a device that was *released* with CIQ 5.0.0 or 5.0.1 (e.g. fenix8*), you would need to use one of the SDKs which had support for those CIQ levels. Nobody expects an older SDK to work with a new device that didn’t exist when the old SDK was released (although it’s possible that it might work in some cases, idk)

I think the big grey area is that we have a ton of existing CIQ 4.x devices which have now received a major CIQ update (to CIQ 5.x), something which hasn’t happened since the move from CIQ 1 to CIQ 2. (CIQ 2 devices never got CIQ 3, and CIQ 3 devices never got CIQ 4.)

You will also see that Garmin employees (with ConnectIQ in their username) have said “you need the latest SDK to build for devices with CIQ 5.x.x” (back when 5.0.0 or 5.0.1 was the latest API level.) Ofc this is a somewhat confusing statement, given that we all know you can continue to run apps built with an older SDK on a device that now has CIQ 5.x.

But people have reported bugs / crashes when building with an older SDK (like 6.4.2) for a newer device with CIQ 5.x (either in the sim or the real device), and whenever this has come up, Garmin employeees with ConnectIQ in their username have said “you should build with the latest SDK for CIQ 5.x.”

These somewhat ambiguous and confusing statements from Garmin are what led me to open that “bug report” (request for explanation) in the first place.

Again you can read the replies from Richard.ConnectIQ in that “bug report” to see Garmin’s perspective. After all, it’s their ecosystem. I have to say that I’m not quite satisfied with their answers. Everything they say pretty much boils down to “yes, old apps will continue to work on devices with new CIQ API”, but “we still require you to use the newest SDK to build for devices with the newest CIQ API”. There is an obvious contradiction here: if old apps continue to work on devices with a new CIQ API, why not allow older SDKs to build for newer CIQ API levels? They tried to explain this in a few different ways, but maybe I’m just not getting it.

I mean, I do understand the motivation for wanting to force devs to use the latest SDK, but I’m just not sure under what precise circumstances (if any) that building with an old SDK will cause a device with newer CIQ API level to crash.

"Does every CIQ 5.1.0 device now require the 8.1.0 SDK if you want to build an app for it today?"

This is misleading to me. Maybe to others. I have the lastest SDK downloaded from the SDK Manager. It regularly updates device files as well as downloading the latest SDK. I have SDK 8.1.0. I build my data field for many devices, many of which are API 5.1 devices, like my EDGE 1050.

So to test what it appears you are claiming... I opened my SDK Manager and selected SDK 7.4.3 as the Current SDK. Then I built my field for API 5.1 devices using SDK 7.4.3. No issues or errors at all. I can publish that build and it works, on my 5.1 devices.

So, what did I miss in what you all are say about this not being possible?

So to test what it appears you are claiming... I opened my SDK Manager and selected SDK 7.4.3 as the Current SDK. Then I built my field for API 5.1 devices using SDK 7.4.3. No issues or errors at all. I can publish that build and it works, on my 5.1 devices.

So, what did I miss in what you all are say about this not being possible?

TL;DR it's another CIQ bug. Thank you for bringing this up.

It looks like you are referring to "Monkey C: Export Project" and not "Monkey C: Build Current Project".

I double-checked and it looks like there is a bug in the compiler device CIQ version check. If you export a project, the compiler does not perform the check. If you build a project for a single 5.1.0 device (using "Monkey C: Build Current Project". or "Monkey C: Build For Device"), you will see the compiler error that I have posted more than once, with screenshot evidence.

So let me amend my statement: Garmin clearly *intends* to prevent this from being possible.

This isn't the first time they've had a bug in the device CIQ version check. Every compiler up to 7.1.* has a bug in the check where it incorrectly assumes it can build for any CIQ API level greater or equal to its own version, meaning that for example, SDK 6.4.2 thinks that it has support for CIQ 5.* (since 5 is less than 6).

No issues or errors at all. I can publish that build and it works, on my 5.1 devices.

I don't deny that if you are somehow able to build for a device configured with a newer CIQ version with an older SDK that doesn't support version, it might work in some cases (or even all cases?). I *think* it depends on what features of the device you use. Others have accomplished this by editing their device files. Or you could use an SDK that's old enough that the version check doesn't work properly (anything older than 7.2). I have to admit I've done it in the past, for a simple data field that doesn't use any fancy features.

All I can say is that Garmin says you are not supposed to do this and it's not supposed to work. Again you can read the bug report thread I linked with comments from Richard.ConnectIQ who relayed feedback from the Connect IQ team.

Go ahead and read the comments from people who actually work for Garmin and worked on Connect IQ.

Like I said, I'm not 100% satisified with their answers, but they said what they said.

6. Venu  2 Series Now Available in Connect IQ SDK Manager - News & Announcements - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/b/news-announcements/posts/venu-2-series-now-available-in-connect-iq-sdk-manager
   Venu 2 Series Now Available in Connect IQ SDK Manager - News & Announcements - Connect IQ - Garmin Forums

- Share
- Subscribe by email
- More
- Cancel

Related

Recommended

Apr 22, 2021

Today Garmin announced the Venu® 2 series. This family of GPS smartwatches, available in two sizes, has advanced health monitoring and fitness features to help you better understand what’s going on inside your body.

With the advanced features on the Venu® 2, you can take your activities to the next level. Switch up your activities with animated workouts and more than 25 built-in indoor and GPS sports apps. You can feed your soul with your favorite music, stored right on your wrist for phone-free listening when paired with wireless headphones (not included). Thanks to a battery that features rapid recharging and can last up to 11 days, you’re sure to get an uninterrupted picture of your health.

The Venu® 2/2s is our first Connect IQ product using API level 4.0.0 and requires the Connect IQ 4.0.0 SDK. Use the Connect IQ SDK Manager to update your device library and add Venu® 2 support to your apps.

7. Toybox.Weather.CurrentConditions.pressure clarification - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/409172/toybox-weather-currentconditions-pressure-clarification/1930906
   Toybox.Weather.CurrentConditions.pressure clarification - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 12 replies
- Subscribers 21 subscribers
- Views 2409 views
- Users 0 members are here

Options

Related

# Toybox.Weather.CurrentConditions.pressure clarification

Is the value from Toybox.Weather.CurrentConditions.pressure , the sea level air pressure or the ambient (ground level) pressure?

The API documentation says Connect IQ 5.1.0 supports it. My watch has CIQ 5.1.0. Reading the value seems to always return null (so far).

- Sign in to reply
- flocsy🤠 likes this" data-format="{count}" data-configuration="Format=%7Bcount%7D&IncludeTip=true">
- Cancel

## Top Replies

- ...tested with my EDGE device:Now... clear as water?PS: Gumpoldskirchen is at 250 m above sea level.The difference between local and sea level pressure is about 1 hPa per 8 m.

## All Replies

Hello Garmin???

From a pilot (not Garmin)…

Short answer: Neither. It tells you how far from standard atmosphere you are.

Longer answer: It tells you how far from standard sea level you are by measuring the difference in the weight of the atmosphere on a standard day at sea level and the weight of the atmosphere of where you are. It’s an adjustment amount to tell someone how much more or less pressure the atmosphere is applying to a location compared to standard. I can’t pick a gooder way to say that right now.

Pilots adjust the aircraft’s altimeters from standard (29.92 in the US, 1019 most international places…and Garmin) so that we accurately measure where the ground is. For example, where I live the airport elevation is 856 feet. In order for that altitude to show on my altimeter right now, I need to dial in 29.56 inHG into the altimeter. If I didn’t make this adjustment and left the altimeter in standard, and I was flying without visual reference to the ground, I’d impact the ground while my altimeter was still indicating 1,216 feet (note: early morning math may be off a few feet). The lower pressure makes the altimeter feel higher than what it actually is.

(insert your favorite “One pilot says to the other pilot, 'What’s that goat doing in these clouds?'” joke here)

Clear as mud? Basic, but I hope this answers your question.

Thanks, clear as mud. I'm looking for more solid info on what this is from Garmin. Especially since there are so many places where the API documentation is just plain wrong or misleading.

Can't you decide it by looking at the data you get and the data from the same weather station in another place?

...tested with my EDGE device:

Now... clear as water?

PS: Gumpoldskirchen is at 250 m above sea level.The difference between local and sea level pressure is about 1 hPa per 8 m.

101586Pa ~= 1016hPa so it seems the Weather is at sea level?But also ActivityInfo almost matches: 98495Pa ~= 984hPa, and 989hPa is only 5 Pa higher, which means it's about 40m lower?But where is the 250m? that should be ~31hPa difference (BTW IMHO there's a typo: is it really 1hPa/8m or it's 1Pa/8m?)

250 m above sea level is the official altitude of Gumpoldskirchen. It is a hilly area near where I live. I don't know the exact altitude of the weather station in Gumpoldskirchen.

I live at 235 m above sea level - and this is where I took my Edge measurements.

(...and I'm sure none of this is mathematically accurate)

BTW IMHO there's a typo: is it really 1hPa/8m or it's 1Pa/8m?

From internet: (It seems to be ok… but is only valid for elevations below 500 m)Da der Luftdruck mit zunehmender Höhe abnimmt, musst du den relativen Luftdruck für jede 8 Meter Höhe um 1 hPa erhöhen.

English: As the air pressure decreases with increasing altitude, you must increase the relative air pressure by 1 hPa for every 8 meters of altitude.

985 hPa local plus 31 hPa from elevation (250/8) —> 1,016 hPa

…ok, these hPa figures are taken from my Edge, and I live at 235 + 6 m for 2nd floor = 241 m, and 241/8 makes only 30 hPa difference instead of 31…

Generally, in a weather report, the pressure is MSL, and if you are close to the weather station but at a different elevation, the pressure you observe will be different. In fact, if you are stating next to the weather station, what you observe can be different than what's reported for that weather station, due to it's elevation.

With my own weather station, one of the things you configure is the WS elevation, so when it displays pressure, it's adjusted to MSL.

Other things come into play with garmin weather, such as how old a reading is. For me and Garmin, the reading is always 51 minutes after the hour and sometimes a reading is missed so the value can be up to 2 hours old, where a storm rolled through and it's clear again, but I can see that on my own weather station that updates every few minutes.

Out of the 3 different sources of weather I use with CIQ, the most accurate is Weather Underground, where the data is right where I live. OWM isn't bad, as it's from a ranch not far away, and the worst is Garmin, where even the temperature with Garmin can be off by 10F. It's probably better in the flat lands of Kansas,

Thank you, and yes: this field of weather is very complicated in detail and interesting to solve.

But trudelta asked simply for clarification.Is the value from Toybox.Weather.CurrentConditions.pressure , the sea level air pressure or the ambient (ground level) pressure?

And the test above gives clarification: it‘s sea level pressure.

8. Ambient Pressure and Mean Seal Level Pressure Mismatch - Connect IQ App Development Discussion - Connect IQ - Garmin Forums
   URL: https://forums.garmin.com/developer/connect-iq/f/discussion/324960/ambient-pressure-and-mean-seal-level-pressure-mismatch
   Ambient Pressure and Mean Seal Level Pressure Mismatch - Connect IQ App Development Discussion - Connect IQ - Garmin Forums

- Replies 4 replies
- Subscribers 19 subscribers
- Views 1459 views
- Users 0 members are here

Options

- Share
- More
- Cancel

Related

# Ambient Pressure and Mean Seal Level Pressure Mismatch

I've been seeing a discrepancy between the watch-calculated mean sea level pressure and true calculations based on the watch-observed ambient pressure. Based on the actual mean sea level pressure in the area, the value returned from meanSeaLevelPressure appears inaccurate. Here are more specific details from the simulator using simulated data:

- Activity.Info.meanSeaLevelPressure returns a value of 102154.98 Pa (This is the seemingly incorrect value, should be 101045 Pa).
- Activity.Info.ambientPressure returns a value of 87026.59 Pa
- Activity.Info.altitude returns a value of 1242.70 m
- SensorHistory.getTemperatureHistory (the last value in the iteration) returns a temperature of 25.5 C

Using that ambient pressure (87026 Pa) and altitude (1242 m), the mean sea level pressure should be 101045 Pa1, or 99957 Pa2 with a Temperature correction. The returned meanSeaLevelPressure is substantially off using the Garmin API. There should be only a couple areas where that error could occur

1. The altitude used in meanSeaLevelPressure is substantially (roughly 100m) different than that of Activity.Info.altitude .
2. The temperature correction used in meanSeaLevelPressure is different than returned by SensorHistory.getTemperatureHistory , however the documentation of meanSeaLevelPressure only suggests it is corrected for altitude
3. The formulas used to calculate meanSeaLevelPressure in the API have an error.

Does anyone have any more insight into the specifics of the calculations and data Activity.Info.meanSeaLevelPressure utilizes? I'm consistently seeing errors in my watch face from actual measurements to the displayed data using the API data. Is there anything I may be missing?

---

References for calculations:

1) Elevation, Station (QFE) and Sea Level (QNH) Pressure Calculator (sensorsone.com)

2) Mean sea level pressure calculator (converter) (wind101.net)

- Sign in to reply
- Cancel

This is something you really want to look at on a real device and not the sim. To compute MSL pressure it needs ambient presume and elevation, and based on device there are different ways to calibrate the altitude/elevation. You can enter a specific value, use GPS, or DEM.

And then there's the case where you can be in the same location, but the weather, therefore ambient pressure, changes over time

And then even on a real device, getXyzHistory isn't real time, but is only saved every few minutes (you can tell how often by using the "when" values of two adjacent samples. In the sim some of this data is "canned" and doesn't change over time

Here for example are graphs of getPressureHistory and getTemperatureHistory in the sim. Both are canned and never change:

Thats a great thought --- I'll work on building a quick test app for my actual watch and update the post with that data if I'm seeing the same issue

Update with actual device data (still seeing the same issue as the sim, been monitoring the data for a couple hours):

Using the device measured ambient pressure and altitude, the non-temperature corrected value for MSL Pressure should be 98803.0 Pascals. Although that seems close, it is noticeably off when using inHg values for aviation.

The Garmin API meanSeaLevelPressure converts to an altimeter setting of 29.09 inHg. Using widely accepted calculations from the measured ambientPressure results in 98803.0 Pascals results in an altimeter setting of 29.18 inHg [actual value from weather service is 29.17 inHg].

What is interesting is the Garmin Barometer widget also shows the "correct" calculated value of 29.18 inHg. All this to say that the meanSeaLevelPressure value that is returned from the Garmin API neither matches the Garmin Barometer widget data, nor widely accepted calculation methods. Unless they're using some other method or pulling data from elsewhere, it seems like there's an error in the meanSeaLevelPressure calculations in Toybox.Activity.

I thought altitude was based on GPS reading .. my Mk1 is new to me and i am noticing that the altitude changes over a range of 10 m at my desk near the beach . currently 40m . assumed it was based on tide change (i keep the GPS on) .. . the pressure detection i assume is the same as the one used for depth on a dive which has to be a manometer of sorts (not calculated) & a critical datapoint.

- - Cancel
- - Up 0 Down
- Sign in to reply
- Cancel
- - Cancel
- - Up 0 Down
- Sign in to reply
- Cancel
- - meanSeaLevelPressure returns 98517.5 Pascals (still doesn't match typical calculations, should be 98803.0 Pascals)
- ambientPressure returns 88806.8 Pascals
- altitude returns 890.6 meters [actual altitude at location is 886.5 meters, this is pretty accurate]
- getTemperatureHistory returns 26.7 C
- - Cancel
- - Up 0 Down
- Sign in to reply
- Cancel
- - Cancel
- - Up 0 Down
- Sign in to reply
- Cancel

Device Reference


Excellent! This is extremely valuable. I found that:

1. **Fenix 3 / Fenix 3 HR**: API Level 1.4 (from the compatible devices matrix)
2. **Venu 2**: API Level 5.0
3. **ambientPressure exists in Connect IQ**: `Toybox.Sensor.getInfo().ambientPressure` is mentioned in a forum post. Also `Activity.getActivityInfo().ambientPressure` exists. This is the raw ambient pressure we need!
4. **Sensor.Info.pressure is sea-level calibrated** - confirmed multiple times.
5. **SensorHistory.getPressureHistory returns MSL pressure** - not useful for depth.
6. **For diving apps**: Garmin has banned them from the store. Sideloading is the only option. DiveIQ's apps exist and use the newer raw ambient pressure APIs.

So the key question is: does Fenix 3 (API 1.4) support `ambientPressure`? And when was `ambientPressure` added to the API?

I need to find the API level at which `Sensor.Info.ambientPressure` and `Activity.Info.ambientPressure` were introduced. The forum post says "Toybox.Sensor.getInfo().ambientPressure needs the permission Toybox.Sensor" and that in watch faces it needs background. For an app (Watch App), it should work in foreground with Sensor permission.

Let me search the docs for ambientPressure. The docs I have may be too old (the CIQ API docs I fetched might be a specific version). Let me search for Activity.Info ambientPressure and Sensor.Info ambientPressure API level.

Also I should fetch the Activity.Info docs.


fetched 2 c=1. ok=2 cache=0 err=0. 82 sections 134.6KB.

- [new]   CIQ Activity Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html — 63 sections (108.7KB)
- [new]   CIQ Activity module API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity.html — 19 sections (25.9KB)

ctx_search(queries: [...], source: "<label>") for full content.

---

### CIQ Activity Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html

Toybox.Activity.Info

# Class: Toybox.Activity.Info

Inherits:

Toybox.Lang.Object

*   [Toybox.Lang.Object](../../Toybox/Lang/Object.html)

*   [Toybox.Activity.Info](../../Toybox/Activity/Info.html)

[show all](#)

## Overview

The Info class contains information about the current activity.

This information can be retrieved with the [getActivityInfo()](../../Toybox/A…
### CIQ Activity module API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity.html

Toybox.Activity

# Module: Toybox.Activity

## Overview

The Activity module provides a way to retrieve available info for the current activity.

Activity Info is automatically provided by the [compute()](../Toybox/WatchUi/DataField.html#compute-instance_function) method in Data Fields. The [getActivityInfo()](../Toybox/Activity.html#getActivityInfo-instance_function) method is…


Now search for ambientPressure in the Activity.Info docs.

ambientPressure Activity.Info API level since supported devices

meanSeaLevelPressure Activity Info ambientPressure

rawAmbientPressure Activity Info Garmin Connect IQ

getActivityInfo ambientPressure foreground no permission

Activity.getActivityInfo ambient pressure depth barometer


## ambientPressure Activity.Info API level since supported devices

--- [current-session | 2026-07-26 21:01 | CIQ Activity Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html] ---
### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)

### var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the pressure sensor. The data is smoothed by a two-stage filter to reduce noise and instantaneous variation.

Since:

API Level 2.4.0

Supported Devices:

---

## meanSeaLevelPressure Activity Info ambientPressure

--- [current-session | 2026-07-26 21:01 | CIQ Activity Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html] ---
### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)

### var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the pressure sensor. The data is smoothed by a two-stage filter to reduce noise and instantaneous variation.

Since:

API Level 2.4.0

Supported Devices:

---

## rawAmbientPressure Activity Info Garmin Connect IQ

--- [current-session | 2026-07-26 21:01 | CIQ Activity Info API::https://developer.garmin.com/connect-iq/api-docs/Toybox/Activity/Info.html] ---
### Class: Toybox.Activity.Info > Instance Attribute Details > var rawAmbientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)

### var rawAmbientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The raw ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the internal pressure sensor. The data is the temperature compensated information read directly from the internal sensor.

Since:

API Level 2.4.0

Supported Devices:

⚠ search call #8/8 in this window. Results limited to 1/query. 0 call(s) remaining before block. Batch queries: ctx_search(queries: ["q1","q2","q3"]) or use ctx_batch_execute.


BLOCKED: 9 search calls in 51s. You're flooding context. STOP making individual search calls. Use ctx_batch_execute(commands, queries) for your next research step.


I hit the search throttle. But I got crucial info:
- `Activity.Info.ambientPressure` - API Level 2.4.0 - smoothed/filtered ambient pressure
- `Activity.Info.rawAmbientPressure` - API Level 2.4.0 - raw ambient pressure from sensor

Now I need to know if Fenix 3 (API 1.4) supports API 2.4.0 features. Since Fenix 3 is API 1.4, it does NOT support API 2.4.0. This means **Fenix 3 CANNOT use Activity.Info.ambientPressure or rawAmbientPressure**.

However, `Sensor.Info.pressure` exists at API 1.0.0, but it's sea-level calibrated, making depth measurement unreliable on Fenix 3.

But wait - there might be a `Sensor.Info.ambientPressure` too, maybe at a different API level. The forum post mentioned `Toybox.Sensor.getInfo().ambientPressure` exists. I need to check its API level and supported devices. But I've hit the search limit. Let me use ctx_batch_execute with a command that does a web search or fetch.

Actually, I can use ctx_batch_execute to fetch more pages and query them in one go. Let me do that to get Sensor.Info.ambientPressure details and the supported devices list for Activity.Info.rawAmbientPressure.

But first, I need to understand: Fenix 3 is at API 1.4. Activity.Info.ambientPressure is API 2.4.0, so it's NOT available on Fenix 3. Period.

For Venu 2 at API 5.0, Activity.Info.rawAmbientPressure (API 2.4.0) IS available.

So the conclusion is:
- **Venu 2**: Can measure depth using `Activity.Info.rawAmbientPressure` (API 2.4.0, available on API 5.0 device). The watch is 5 ATM rated, has touchscreen (problematic underwater), and built-in optical HR (unreliable underwater).
- **Fenix 3**: Only has `Sensor.Info.pressure` which is sea-level calibrated. Depth measurement is unreliable. It requires deriving depth from altitude which has lag and weather issues. Also API 1.4 doesn't support raw ambient pressure. It has physical buttons (better underwater control) and can use external HR chest strap.

Wait, but DiveIQ says they used Fenix 3 historically? Let me re-read the forum post. The post says: "I originally made it for Fenix3 and it were compatible with a few more devices. I used data from the altimeter to measure the depth." So yes, the original depth data field for Fenix 3 used altitude-derived depth, not raw pressure. And it was removed by Garmin.

So the answer to the user's question "can these watches measure depth accurately enough" is:
- Venu 2: Yes, using rawAmbientPressure (with calibration), but touchscreen and 5ATM rating are concerns.
- Fenix 3: No, not accurately. Only sea-level calibrated pressure available, depth must be derived from altitude with significant lag and weather sensitivity.

Now I need to check if Sensor.Info has ambientPressure too and its API level, for completeness. But I can infer it's likely API 2.4+ as well. Let me use ctx_batch_execute to fetch the Sensor.Info page (which I already have) and query it for ambientPressure. Or I can use the web_fetch tool directly.

Actually, I already have the Sensor.Info page indexed. I just need to search it, but I hit the throttle. Let me wait a moment and then use ctx_batch_execute which does search as part of batch.

Also, I need to verify the supported devices for Activity.Info.rawAmbientPressure. The docs have "Supported Devices:" lists. I need to see if Venu 2 is in the list. Let me query that with ctx_batch_execute.

But actually I need to think about what to deliver. The user wanted:
1. Confirmation whether these watches can measure depth accurately enough
2. Limitations of each
3. A structured implementation plan

Given the findings, I have enough to answer #1 and #2. For the implementation plan, I need to decide on target device. Since Fenix 3 cannot measure depth accurately, I should recommend Venu 2 as the primary target, but also maybe support Fenix 3 with degraded/altitude-derived depth if the user still wants it. But given the user's constraints, I should probably focus on Venu 2.

Actually, wait. The user said "Fenix 3 uses external HR monitor; Venu 2 uses built-in HR". So they were already thinking of a split approach. But if Fenix 3 can't do depth, then the app wouldn't work well on Fenix 3. I need to be clear about this.

Let me now use ctx_batch_execute to get the remaining details about Sensor.Info.ambientPressure and supported devices for rawAmbientPressure. I'll also fetch the Venu 2 device reference page for specifics.

echo "Querying indexed CIQ Sensor.Info API for ambientPressure..."

echo "Querying indexed CIQ Activity.Info API for rawAmbientPressure supported devices..."

echo "Fetching Venu 2 device reference from Garmin..."

ambientPressure Sensor.Info API level since supported devices

var ambientPressure as Lang.Float Sensor Info

rawAmbientPressure supported devices Venu 2

ambientPressure supported devices list Garmin API


Executed 3 commands (21 lines, 0.5KB). Indexed 3 sections. Searched 4 queries.

## Commands

- sensor_info_ambientpressure: `echo "Querying indexed CIQ Sensor.Info API for ambientPressure..."`
- activity_info_supported_devices: `echo "Querying indexed CIQ Activity.Info API for rawAmbientPressure supported devices..."`
- venu2_device_ref: `echo "Fetching Venu 2 device reference from Garmin..."`

## Indexed Sections

- sensor_info_ambientpressure (0.2KB)
- activity_info_supported_devices (0.2KB)
- venu2_device_ref (0.1KB)

## ambientPressure Sensor.Info API level since supported devices

### sensor_info_ambientpressure
# sensor_info_ambientpressure

$ echo "Querying indexed CIQ Sensor.Info API for ambientPressure..."

Querying indexed CIQ Sensor.Info API for ambientPressure...

### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)
### var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the pressure sensor. The data is smoothed by a two-stage filter to reduce noise and instantaneous variation.

Since:

API Level 2.4.0

Supported Devices:

### Class: Toybox.Sensor.Info > Instance Attribute Details > var accel as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null** (1)
### var accel as [Lang.Array](../../Toybox/Lang/Array.html)<[Lang.Number](../../Toybox/Lang/Number.html)\> or **Null**

The accelerometer reading of the x, y, and z axes as an Array of [Number](../../Toybox/Lang/Number.html) values in millig-units.

Note:

Some devices do not enable the accelerometer at startup. To get valid data from this field on such devices, applications must enable the sensor with a call to [registerSensorDataListener](../../Toybox/Sensor.html#registerSensorDataListener-instance_function).

Since:

API Level 1.2.0

Supported Devices:

## var ambientPressure as Lang.Float Sensor Info

### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)
### var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the pressure sensor. The data is smoothed by a two-stage filter to reduce noise and instantaneous variation.

Since:

API Level 2.4.0

Supported Devices:

### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (2)
…nu® 3S
*   Venu® 4 41mm
*   Venu® 4 45mm / D2™ Air X15
*   Venu® Mercedes-Benz® Collection
*   Venu® X1
*   Venu®
*   vívoactive® 3 Mercedes-Benz® Collection
*   vívoactive® 3 Music LTE
*   vívoactive® 3 Music
*   vívoactive® 3
*   vívoactive® 4
*   vívoactive® 4S
*   vívoactive® HR

Returns:

*   [Lang.Float](../../Toybox/Lang/Float.html)

### sensor_info_ambientpressure
# sensor_info_ambientpressure

$ echo "Querying indexed CIQ Sensor.Info API for ambientPressure..."

Querying indexed CIQ Sensor.Info API for ambientPressure...

## rawAmbientPressure supported devices Venu 2

### activity_info_supported_devices
# activity_info_supported_devices

$ echo "Querying indexed CIQ Activity.Info API for rawAmbientPressure supported devices..."

Querying indexed CIQ Activity.Info API for rawAmbientPressure supported devices...

### Class: Toybox.Activity.Info > Instance Attribute Details > var rawAmbientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)
### var rawAmbientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The raw ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the internal pressure sensor. The data is the temperature compensated information read directly from the internal sensor.

Since:

API Level 2.4.0

Supported Devices:

### Class: Toybox.Activity.Info > Instance Attribute Details > var rawAmbientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (2)
*   Approach® S70 42mm
*   Approach® S70 47mm
*   Captain Marvel
*   D2™ Air X10
*   D2™ Air
*   D2™ Charlie
*   D2™ Delta PX
*   D2™ Delta S
*   D2™ Delta
*   D2™ Mach 1
*   D2™ Mach 2 Pro
*   D2™ Mach 2
*   Darth Vader™
*   Descent™ G1 / G1 Solar
*   Descent™ G2
*   Descent™ Mk1
*   Descent™ Mk2 / Mk2i
*   Descent™ Mk2 S
*   Descent™ Mk3 43mm / Mk3i 43mm
*   Descent™ Mk3i 51mm
*   Edge® 1000 / Explore
*   Edge® 1030 / Bontrager
*   Edge® 1030 Plus
*   Edge® 1030
*   Edge® 1040 / 1040 Solar
*   Edge® 1050
*   Edge® 130 Plus
*   Edge® 130
*   Edge® 520 Plus
*   Edge® 520
*   Edge® 530
*   Edge® 540 / 540 Solar
*   Edge® 550
*   Edge® 820 / Explore
*   Edge® 830
*   Edge® 840 / 840 Solar
*   Edge® 850
*   Edge® Explore 2
*   Edge® MTB
*   Enduro™ 3
*   Enduro™
*   epix™ (Gen 2) / quatix® 7 Sapphire
*   epix™ Pro (Gen 2) 42mm
*   epix™ Pro (Gen 2) 47mm / quatix® 7 Pro
*   epix™ Pro (Gen 2) 51mm / D2™ Mach 1 Pro / tactix® 7 – AMOLED Edition
*   eTrex® Touch
*   fēnix® 5 / quatix® 5
*   fēnix® 5 Plus
*   fēnix® 5S Plus
*   fēnix® 5S
*   fēnix® 5X / tactix® Charlie
*   fēnix® 5X Plus
*   fēnix® 6 / 6 Solar / 6 Dual Power
*   fēnix® 6 Pro / 6 Sapphire / 6 Pro Solar / 6 Pro Dual Power /…

…6X Pro Solar / tactix® Delta Sapphire / Delta Solar / Delta Solar - Ballistics Edition / quatix® 6X / 6X Solar / 6X Dual Power
*   fēnix® 7 / quatix® 7
*   fēnix® 7 Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7 Pro
*   fēnix® 7S Pro
*   fēnix® 7S
*   fēnix® 7X / tactix® 7 / quatix® 7X Solar / Enduro™ 2
*   fēnix® 7X Pro - Solar Edition (no Wi-Fi)
*   fēnix® 7X Pro
*   fēnix® 8 43mm
*   fēnix® 8 47mm / 51mm / tactix® 8 47mm / 51mm / quatix® 8 47mm / 51mm
*   fēnix® 8 Pro 47mm / 51mm / MicroLED / quatix® 8 Pro 47mm / 51mm
*   fēnix® 8 Solar 47mm
*   fēnix® 8 Solar 51mm / tactix® 8 Solar 51mm
*   f…

…orerunner® 70
*   Forerunner® 745
*   Forerunner® 935
*   Forerunner® 945 LTE
*   Forerunner® 945
*   Forerunner® 955 / Solar
*   Forerunner® 965
*   Forerunner® 970
*   GPSMAP® 66s / 66i / 66sr / 66st
*   GPSMAP® 67 / 67i
*   GPSMAP® 86s / 86sc / 86i / 86sci
*   GPSMAP® H1 / H1i Plus
*   Instinct® 2 / Solar / Dual Power / dēzl Edition
*   Instinct® 2S / Solar / Dual Power
*   Instinct® 2X Solar
*   Instinct® 3 AMOLED 45mm
*   Instinct® 3 AMOLED 50mm
*   Instinct® 3 Solar 45mm / 50mm
*   Instinct® Crossover AMOLED
*   Instinct® Crossover
*   Instinct® E 40mm
*   Instinct® E 45mm
*   MARQ® (Gen 2) Athlete / Adventurer / Captain / Golfer / Carbon Edition / Commander - Carbon Edition
*   MARQ® (Gen 2) Aviator
*   MARQ® Adventurer
*   MARQ® Athlete
*   MARQ® Aviator
*   MARQ® Captain / MARQ® Captain: American Magic Edition
*   MARQ® Commander
*   MARQ® Driver
*   MARQ® Expedition
*   MARQ® Golfer
*   Montana® 7 Series
*   Oregon® 7 Series
*   Rey™
*   Rino® 7 Series
*   Venu® 2 Plus
*   Venu® 2
*   Venu® 2S
*   Venu® 3
*   Venu® 3S
*   Venu® 4 41mm
*   Venu® 4 45mm / D2™ Air X15
*   Venu® Mercedes-Benz® Collection
*   Venu® X1
*   Venu®
*   vívoactive® 3 Mercedes-Benz® Collection
*   vív

## ambientPressure supported devices list Garmin API

### Class: Toybox.Activity.Info > Instance Attribute Details > var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null** (1)
### var ambientPressure as [Lang.Float](../../Toybox/Lang/Float.html) or **Null**

The ambient pressure in Pascals (Pa).

This returns ambient (local) barometric pressure as measured by the pressure sensor. The data is smoothed by a two-stage filter to reduce noise and instantaneous variation.

Since:

API Level 2.4.0

Supported Devices:

### sensor_info_ambientpressure
# sensor_info_ambientpressure

$ echo "Querying indexed CIQ Sensor.Info API for ambientPressure..."

Querying indexed CIQ Sensor.Info API for ambientPressure...

### Untitled (1)
Compatible Devices | Connect IQ | Garmin Developers

*   [Overview](/connect-iq/overview/)

*   [Compatible Devices](/connect-iq/compatible-devices/)

*   [API Docs](/connect-iq/api-docs/)

*   [Get the SDK](/connect-iq/sdk/)

*   [Submit an App](/connect-iq/submit-an-app/)

*   [Stay Informed](/connect-iq/stay-informed/)

*   [Connect IQ Basics](/connect-iq/connect-iq-basics/)

*   [Monkey C](/connect-iq/monkey-c/)

*   [Core Topics](/connect-iq/core-topics/)

*   [User Ex…

…e-guidelines/)

*   [Personality Library](/connect-iq/personality-library/)

*   [Connect IQ FAQ](/connect-iq/connect-iq-faq/)

*   [Reference Guides](/connect-iq/reference-guides/)

*   [App Review Guidelines](/connect-iq/app-review-guidelines/)

*   [Monetization](/connect-iq/monetization/)

*   [Device Reference](/connect-iq/device-reference/)

MenuCompatible Devices

×

Device Type:

AllWatches/WearablesOutdoor HandheldsEdge

Supported CIQ Version:

All

*   [

    All](#)
*   [

    1.2](#)
*   [

    1.4](#)
*   [

    2.4](#)
*   [

    3.0](#)
*   [

    3.1](#)
*   [

    3.2](#)
*   [

    3.3](#)
*   [

    3.4](#)
*   [

    5.0](#)
*   [

    5.1](#)
*   [

    5.2](#)
*   [

    6.0](#)

| Watches/Wearables | Screen Resolution | Screen Shape | Screen Technology | API Level |
| --- | --- | --- | --- | --- |
|
![](https://res.garmin.com/en/products/010-03010-00/v/cf-sm.jpg)

Approach® S50

 | 390 x 390 | round | AMOLED | 5.1 |
|

![](https://static.garmincdn.com/en/products/010-01702-00/v/cf-sm.jpg)

Approach® S60

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 2.4 |
|

![](https://static.garmincdn.com/en/products/010-02200-00/v/cf-sm-bc8fd553-731f-4fc3-98dd-ef9eb4d7d597.jpg)

Approach® S62

 | 260 x 260 | round | Memory-In-Pixel (64 colors) | 3.0 |
|

![](https://res.garmin.com/en/products/010-02746-01/v/cf-sm.jpg)

Approach® S70 42mm

 | 390 x 390 | round | AMOLED | 5.1 |
|

![](https://res.garmin.com/en/products/010-02746-12/g/cf-sm.jpg)

Approach® S70 47mm

 | 454 x 454 | round | AMOLED | 5.1 |
|

![](https://static.garmincdn.com/en/products/010-02172-41/g/cf-sm-0a318bb6-9baa-4c5d-b344-19de0c656cd7.jpg)

Captain Marvel

 | 218 x 218 | round | Memory-In-Pixel (64 colors) | 3.3 |
|

…

…m-431a8fa0-3449-43e0-9702-5ff6ad991c84.jpg)

D2™ Delta S

 | 240 x 240 | round | Memory-In-Pixel (64 colors) | 3.1 |
|

![](https://static.garmincdn.com/en/products/010-02582-54/v/cf-sm-4e5412c4-10ee-4008-9436-e9bc51f60a0f.jpg)

D2™ Mach 1

 | 416 x 416 | round | AMOLED | 5.2 |
|

![](https://res.garmin.com/en/products/010-02905-30/v/cf-sm.jpg)

D2™ Mach 2

 | 454 x 454 | round | AMOLED | 5.2 |
|

![](https://res.garmin.com/en/products/010-03199-50/v/cf-sm.jpg)

D2™ Mach 2 Pro

 | 454 x 454 | round | AMOLED | 6.0 |
|

> **Scope:** Queries searched the entire persistent index (query_scope: "global").

Searchable terms for follow-up: querying, indexed, info, ciq, api, echo


Excellent! I now have the supported devices list. Key finding:
- **Venu 2** IS in the supported devices list for `Activity.Info.rawAmbientPressure` AND `ambientPressure`.
- **Fenix 3 / Fenix 3 HR are NOT in the supported devices list** for `rawAmbientPressure` or `ambientPressure` (the list starts from Fenix 5).

Also, `Sensor.Info` apparently does NOT have `ambientPressure` as a separate field - the search confused it with Activity.Info. The Sensor.Info page only lists `pressure` (sea-level calibrated). So raw ambient pressure is only available via `Activity.Info.rawAmbientPressure` (and `ambientPressure` is the smoothed version).

Now I have enough to answer the feasibility question and write the implementation plan. But I should also research the underwater HR / HRM-Swim / HRM-Tri specifics, and whether Venu 2's optical HR works underwater at all. But I think I have enough from the summary. Let me just verify a couple of things about the SDK setup and sideloading process, and the Connect IQ app type.

Also need to know:
- Which app type to use for an activity-recording app with custom FIT fields: it should be a **Watch App** with `ActivityRecording` module. Data Fields cannot use `Sensor` module directly (they crash), and the app needs to control recording.
- How to sideload: via USB to `GARMIN/APPS/` folder with `.PRG` file.

I have this from the summary and the docs I fetched.

Now I need to write the implementation plan. But before that, I should ask the user the open questions mentioned in the summary:
1. Water type (fresh vs. salt) - affects density in depth calculation
2. Whether they have/will buy HRM-Swim/Tri chest strap
3. Desired safety alerts
4. Whether they want to write the Monkey C code themselves or have it implemented

Actually, the user asked for a "structured implementation plan" and said "Before building, the user wants confirmation whether these watches can measure depth accurately enough and what the limitations of each would be." So I should deliver the feasibility assessment and the structured plan. The open questions can be included in the plan as decisions needed.

Given that I've established Fenix 3 cannot measure depth accurately via raw pressure, I need to make a strong recommendation. Let me think about whether to still include Fenix 3 as a secondary target with altitude-based fallback.

Actually, the user has both watches and wants to use them. I should:
1. State clearly: Venu 2 can measure depth; Fenix 3 cannot reliably.
2. Recommend primary target: Venu 2.
3. Optionally, if they want to use Fenix 3, it would only work as a static breath-hold timer / surface HR logger (no depth), or with very unreliable altitude-derived depth.

But wait - the summary says the user wants the app to "run on the Venu 2 or fēnix 3 they already own". And the user wants depth up to 30m. If Fenix 3 can't do depth, the app won't meet the requirements on Fenix 3. This is a critical finding that needs to be communicated.

Now, should I write code? The user asked for a structured plan, not code. But I could create a plan document. The plan should probably be saved as a file. Let me create a comprehensive plan document in the workspace.

Actually, looking at the workspace, there's no project directory. I should create one. Maybe `/home/liph/code/freediving-ciq-app/` or similar. The `code` directory is a symlink to `/mnt/flash1/code`. Let me check if it exists.

bash

ls -la code 2>/dev/null || echo "code symlink broken/missing"; ls -la /mnt/flash1 2>/dev/null | head


lrwxrwxrwx 1 liph liph 16 Jul 22 08:50 code -> /mnt/flash1/code
total 16
drwxr-xr-x 4 root root 4096 Jul 21 22:02 .
drwxr-xr-x 4 root root 4096 Jul 21 21:14 ..
drwxr-xr-x 9 liph liph 4096 Jul 24 12:54 code
drwxr-xr-x 9 liph liph 4096 Jul 21 22:02 opencode_data


The code directory exists. Let me create a project folder and write the implementation plan there. But first, do I have enough info? Let me also quickly verify a couple more things:
1. Does Venu 2 support optical HR underwater? (General knowledge: no, but I'll note it)
2. Does Fenix 3 support ANT+ chest strap? (Yes, it's a Fenix)
3. App review guidelines / sideloading specifics

I think I have enough. Let me write the plan. I'll create a markdown file with:
- Executive summary / feasibility verdict
- Device comparison table
- Approach and architecture
- Implementation steps
- Risks and mitigations
- Open questions / decisions needed

Let me also create a simple example Monkey C code snippet for the depth calculation and FIT recording, but keep it in the plan as reference.

Actually, the user might appreciate having the plan file. Let me create it. I'll put it in `/mnt/flash1/code/garmin-freediving-plan.md` or maybe create a project folder. Let me create a project folder `garmin-freedive-app` with the plan.

Wait, should I ask the user about the open questions first? The summary says "Next Steps: 1. Answer the remaining open questions: water type... HRM-Swim/Tri... safety alerts... write code themselves". The user hasn't answered these. But the user's original request was to confirm feasibility and provide a structured plan. I can provide the plan while flagging these decisions. I don't need to block on them.

However, since the user's question is partly a yes/no on feasibility, I should present the findings clearly and ask if they want to proceed with Venu 2 only, or if they still want Fenix 3 support as a degraded mode. This is a decision point.

Let me write the plan and then present it. I can also ask the user the key question at the end.

Let me now create the implementation plan file.

mkdir -p code/garmin-freedive-app && cd code/garmin-freedive-app && pwd


Now I'll write the implementation plan. It should be comprehensive and address the user's specific questions. Let me structure it:

1. Feasibility verdict (short)
2. Device/API findings (the critical part)
3. Recommendation
4. Implementation plan
5. Risks & limitations
6. Open questions/decisions
7. Appendix: depth formula, sample code

Let me write this as a markdown file.

write

# Garmin Connect IQ Freediving App — Implementation Plan

## 1. Executive Summary / Feasibility Verdict

**Goal:** Build a personal, sideloaded Garmin Connect IQ app that records freedive sessions (dive time, depth, heart rate, static breath-hold) up to ~30 m on watches the user already owns.

**Feasibility:**

| Watch | Can measure depth accurately? | Verdict |
|-------|------------------------------|---------|
| **Garmin Venu 2** | **Yes** (raw ambient pressure API available) | **Recommended primary target** |
| **Garmin fēnix 3 / fēnix 3 HR** | **No, not reliably** (only sea-level-calibrated pressure available) | Not suitable as a depth dive computer; usable only for surface logging / breath-hold timer |

**Key finding:** Depth calculation requires *raw ambient* barometric pressure. Garmin exposes this via `Activity.Info.rawAmbientPressure` starting at Connect IQ API Level 2.4.0. The fēnix 3 family is capped at API Level 1.4 and does **not** support this field. The only pressure value available on fēnix 3 (`Sensor.Info.pressure`) is sea-level calibrated and auto-corrected for weather/altitude, making depth computation unreliable.

**Recommendation:** Build for the **Venu 2** first. If desired, add a degraded fēnix 3 mode that uses altitude-derived depth (with heavy caveats) or limits fēnix 3 to static breath-hold / surface HR logging.

---

## 2. Device/API Findings

### 2.1 Venu 2

| Item | Detail |
|------|--------|
| Connect IQ API Level | **5.0.0** (can be targeted with modern SDK; device files available) |
| Raw ambient pressure | **Supported** — `Activity.Info.rawAmbientPressure` (API 2.4.0+) |
| Smoothed ambient pressure | **Supported** — `Activity.Info.ambientPressure` (API 2.4.0+) |
| Activity recording / FIT export | **Supported** — `Toybox.ActivityRecording` + `Toybox.FitContributor` |
| Heart rate | Built-in optical wrist HR (unreliable underwater) |
| External ANT+ HR chest strap | Supported (HRM-Swim / HRM-Tri recommended for underwater HR) |
| Water resistance | 5 ATM (~50 m pressure equivalent), "Swim" rating; **not dive-rated by Garmin** |
| Controls | Touchscreen + two buttons; touchscreen may be unresponsive when wet / underwater |
| Screen | 416 × 416 AMOLED; bright, but higher battery draw than MIP displays |

**Depth accuracy on Venu 2:** Good enough for recreational freediving to 30 m *if* you calibrate at the surface and account for fresh vs. salt water density. The raw pressure sensor is temperature-compensated and read directly from the internal sensor, so it responds to hydrostatic pressure changes.

### 2.2 fēnix 3 / fēnix 3 HR

| Item | Detail |
|------|--------|
| Connect IQ API Level | **1.4.0** (max) |
| Raw ambient pressure | **Not supported** — `rawAmbientPressure` requires API 2.4.0+ |
| Available pressure value | `Sensor.Info.pressure` only; returns **sea-level-calibrated barometric pressure** |
| Activity recording / FIT export | Supported at API 1.4 (`ActivityRecording`, `FitContributor` since 1.3.0) |
| Heart rate | fēnix 3: external ANT+ chest strap required; fēnix 3 HR: built-in optical HR (still unreliable underwater) |
| Water resistance | 10 ATM (~100 m pressure equivalent), but Garmin explicitly limits it to surface swimming |
| Controls | Five physical buttons — excellent underwater control |
| Screen | 218 × 218 Memory-In-Pixel (16 colors), sunlight-readable, low power |

**Why fēnix 3 cannot give accurate depth:**
- `Sensor.Info.pressure` is calibrated to mean sea level using the current altimeter setting and GPS altitude.
- Garmin's altimeter algorithm deliberately filters out rapid pressure changes to distinguish weather from altitude changes.
- Underwater pressure changes are interpreted as altitude changes with significant lag and may be rejected/flattened.
- Historical depth data fields for fēnix 3 used `Sensor.Info.altitude` and reverse-calculated pressure; this is approximate and weather-sensitive.

**Conclusion:** The fēnix 3 is a poor choice for a 30 m freediving depth app, despite its better water-resistance rating and buttons. It can still host a static breath-hold timer or log surface heart rate.

### 2.3 Connect IQ API Context

- `Activity.Info.rawAmbientPressure` — raw, temperature-compensated sensor reading. Best for depth.
- `Activity.Info.ambientPressure` — two-stage filtered/smoothed reading. Slightly slower response, less noise.
- `Sensor.Info.pressure` — mean sea level pressure. **Not usable for depth on fēnix 3.**
- `SensorHistory.getPressureHistory()` — returns pressure history, but forum reports indicate it stores MSL pressure, not ambient.

---

## 3. Recommended Approach

### 3.1 Primary Target Device

**Garmin Venu 2** (device ID `venu2` in the SDK).

**Why:** It is the only one of the two watches that exposes raw ambient pressure, which is a hard requirement for accurate depth to 30 m.

### 3.2 App Type

**Watch App** with `ActivityRecording` module.

- A **Data Field** cannot call `Sensor` methods (app crash) and cannot control recording.
- A **Watch App** can:
  - Start/stop a FIT activity session.
  - Read `Activity.getActivityInfo().rawAmbientPressure` in the foreground.
  - Create custom FIT fields via `FitContributor` to store depth, dive time, etc.
  - Render a full-screen UI with large dive numbers and button/touch controls.

### 3.3 Recording Strategy

1. On app launch, enter a pre-dive screen.
2. User calibrates surface pressure (auto-capture current `rawAmbientPressure` as `P_surface`).
3. Start `ActivityRecording` session with sport `Activity.SPORT_GENERIC` or `Activity.SPORT_SWIMMING` and an appropriate sub-sport.
4. Every second (or on sensor update), compute:
   - `depth = (P - P_surface) / (ρ · g)`
   - Update a `FitContributor` field for depth in the FIT `RECORD` message.
   - Update max depth, dive time, surface interval.
5. Stop/save session when user finishes.

### 3.4 Heart Rate Strategy

- **Surface / breath-hold mode:** Use wrist optical HR (`Sensor.Info.heartRate` or `ActivityRecording`'s built-in HR).
- **Underwater dive mode:** Wrist optical HR does not work reliably in water. Recommend an **ANT+ chest strap** such as Garmin HRM-Swim or HRM-Tri, which store HR during the dive and download it at the surface.
- The app should enable `SENSOR_HEARTRATE` and pair with the chest strap if available.

### 3.5 Distribution

- **Sideload only.** Garmin prohibits scuba/free-diving apps in the Connect IQ Store.
- Build `.PRG` and copy to `GARMIN/APPS/` over USB.
- Optionally host source on a private GitHub repo; the user builds/sideloads themselves.

---

## 4. Depth Calculation

### 4.1 Formula

```
ΔP = P_current - P_surface            // Pascals
ρ  = water density (kg/m³)
g  = 9.80665 m/s²
depth = ΔP / (ρ · g)                  // meters
```

Density values:
- Fresh water: ~997–1000 kg/m³
- Salt water: ~1020–1025 kg/m³ (varies with salinity/temperature)

### 4.2 Calibration

- At the surface, sample `rawAmbientPressure` for a few seconds and average it.
- Allow the user to set fresh/salt water and to manually override surface pressure if needed.
- Optionally use `Activity.Info.ambientPressure` instead of `rawAmbientPressure` for a less noisy (but slower) reading.

### 4.3 Accuracy Expectations

| Factor | Impact |
|--------|--------|
| Sensor noise | ± few cm at shallow depths |
| Temperature compensation | Handled by rawAmbientPressure |
| Water density error | ~2–3% depth error between fresh and salt |
| Surface pressure drift during session | Small over a dive session; can be re-calibrated at surface |
| Rapid movement / splashing | Use smoothing / median filter to reduce spikes |

At 30 m in salt water, expected pressure increase: ~30 m × 1025 kg/m³ × 9.81 ≈ **302 kPa** above surface pressure. This is well within a 5 ATM sensor's range (~400 kPa above surface).

---

## 5. Implementation Steps

### Phase 0 — Environment & Verification (1–2 days)

1. Install latest Connect IQ SDK (SDK Manager / VS Code Monkey C extension).
2. Download device files for `venu2` (and `fenix3` if degraded support is desired).
3. Create a skeleton Watch App project.
4. Write a quick sensor probe app that prints `Activity.Info.rawAmbientPressure`, `ambientPressure`, `altitude`, and `Sensor.Info.pressure` to confirm values on the real Venu 2.
5. Test in a bucket / shallow water to verify depth response.

### Phase 1 — App Skeleton (1–2 days)

1. Define `manifest.xml` as a Watch App with permissions:
   - `Toybox.ActivityRecording`
   - `Toybox.Sensor`
   - `Toybox.FitContributor`
   - `Toybox.AntPlus` (for external HR sensors)
2. Create main app class (`AppBase` subclass).
3. Create initial views:
   - Pre-dive / calibration view
   - Dive view (current depth, max depth, dive time, HR)
   - Breath-hold view (timer, contractions counter, pulse)
   - Summary / save view
4. Implement input handling (Venu 2: button + touch; fēnix 3: buttons only).

### Phase 2 — Depth & Recording (2–3 days)

1. Implement surface calibration logic.
2. Implement depth computation with fresh/salt-water setting.
3. Implement `ActivityRecording` session start/stop/save.
4. Add `FitContributor` custom fields:
   - `depth_m` (float, units `m`) on `MESG_TYPE_RECORD`
   - `max_depth_m` (float, units `m`) on `MESG_TYPE_SESSION`
   - `dive_time_s` (uint16/uint32, units `s`) on `MESG_TYPE_SESSION`
5. Add per-second update loop (Timer or sensor events).
6. Add max-depth tracking and surface-interval timer.

### Phase 3 — Heart Rate & Sensors (1–2 days)

1. Enable `SENSOR_HEARTRATE`.
2. Detect paired ANT+ chest strap (HRM-Swim/Tri).
3. Display current HR.
4. For fēnix 3, focus on external HR only (no depth channel).

### Phase 4 — Safety Alerts (1 day)

1. Configurable max-depth alarm (vibration + screen flash).
2. Configurable dive-time alarm.
3. Optional surface-interval / recovery timer.

### Phase 5 — Static Breath-Hold Mode (1 day)

1. Timer with prep breathe, hold, and recovery phases.
2. Optional contractions tap counter.
3. Store breath-hold duration to FIT session fields.

### Phase 6 — Testing & Sideloading (2–3 days)

1. Simulator testing for UI and recording logic.
2. Real-device shallow-water tests in pool.
3. Controlled depth tests to 5 m, 10 m, 20 m, 30 m (with safety diver).
4. Compare app-reported depth against a known reference dive computer.
5. Sideload packaging and document install steps.

---

## 6. Risks & Mitigations

| Risk | Likelihood | Impact | Mitigation |
|------|------------|--------|------------|
| Venu 2 is not dive-rated; water damage at 30 m | Medium | High (watch destroyed) | Limit to shallow testing first; understand warranty is void; consider fēnix 3 for 10 m snorkeling only; accept that 30 m is beyond Garmin's stated use case |
| Touchscreen unusable underwater | High | Medium | Use physical buttons on Venu 2 (Start/Back) for all critical actions; keep UI simple |
| Wrist HR unreliable underwater | High | Medium | Require ANT+ chest strap for meaningful underwater HR |
| Pressure sensor drift / weather changes | Low-Medium | Medium | Calibrate at surface before each dive; allow manual override; re-calibrate between dives |
| App crash due to memory limits | Medium | Medium | Keep data structures small; avoid storing per-second arrays in memory; rely on FIT recording |
| Garmin policy / sideload friction | Low | Low | Never submit to store; use private source repo; build `.PRG` manually |
| fēnix 3 depth is inaccurate | Certain | High | Do not rely on fēnix 3 for depth; limit to breath-hold / surface mode |
| Battery drain on AMOLED Venu 2 | Medium | Low | Keep screen on only during dive; use low-brightness mode; end session promptly |

---

## 7. Open Questions / Decisions Needed

Before coding begins, the user should decide:

1. **Primary water type:** Fresh water (pool/lake) or salt water? This sets the default density constant.
2. **External HR strap:** Do you own or plan to buy an HRM-Swim or HRM-Tri? This determines whether underwater HR is a core feature or a best-effort optional feature.
3. **Safety alerts:** Which alarms do you want? (e.g., depth at 15 m, 20 m, 25 m; dive time at 1:00, 1:30, 2:00; surface interval)
4. **fēnix 3 support scope:**
   - A) Drop fēnix 3 depth entirely; use it only as a breath-hold / surface-HR logger.
   - B) Keep a degraded fēnix 3 depth mode using altitude-derived pressure, clearly labeled as unreliable.
5. **Implementation ownership:** Do you want to write the Monkey C code yourself with guidance, or do you want the code scaffolded/implemented for you?
6. **Screen behavior:** Should the dive view stay always-on during the dive, or sleep between updates to save battery?

---

## 8. Appendix A — Sample Depth Calculation (Monkey C)

```monkey-c
using Toybox.Activity;
using Toybox.System;

const G = 9.80665;
const RHO_FRESH = 997.0;   // kg/m³
const RHO_SALT  = 1023.0;  // kg/m³

var surfacePressure = null;
var isSaltWater = false;

function calibrateSurface() {
    var info = Activity.getActivityInfo();
    if (info has :rawAmbientPressure && info.rawAmbientPressure != null) {
        surfacePressure = info.rawAmbientPressure;
        System.println("Surface pressure: " + surfacePressure);
    }
}

function computeDepth() {
    if (surfacePressure == null) { return null; }
    var info = Activity.getActivityInfo();
    if (info == null || !(info has :rawAmbientPressure) || info.rawAmbientPressure == null) {
        return null;
    }
    var rho = isSaltWater ? RHO_SALT : RHO_FRESH;
    var deltaP = info.rawAmbientPressure - surfacePressure;
    return deltaP / (rho * G);
}
```

## 9. Appendix B — Sample FIT Field Registration

```monkey-c
using Toybox.ActivityRecording;
using Toybox.FitContributor;

var depthField = null;
var session = null;

function startDiveSession() {
    session = ActivityRecording.createSession({
        :name => "Freedive",
        :sport => Activity.SPORT_GENERIC,
        :subSport => Activity.SUB_SPORT_GENERIC
    });

    depthField = session.createField(
        "depth",
        0,                                  // developer field id
        FitContributor.DATA_TYPE_FLOAT,
        { :mesgType => Fit.MESG_TYPE_RECORD, :units => "m" }
    );

    session.start();
}

function onTimerTick() {
    var d = computeDepth();
    if (d != null && depthField != null) {
        depthField.setData(d);
    }
}
```

---

## 10. Appendix C — Key Sources

- Garmin Connect IQ API: `Toybox.Activity.Info` — `rawAmbientPressure` since API 2.4.0.
- Garmin Connect IQ API: `Toybox.Sensor.Info` — `pressure` is sea-level calibrated (API 1.0.0).
- Garmin Connect IQ Compatible Devices matrix: Venu 2 = API 5.0; fēnix 3/3 HR = API 1.4.
- Garmin Forums: fēnix 3 depth data fields were removed from the store; they relied on altitude-derived pressure.
- Garmin App Review Guidelines: diving apps are not listed in the Connect IQ Store.

---

**Document status:** Draft — awaiting user decisions in §7 before moving to code.


Successfully wrote 14917 bytes to code/garmin-freedive-app/IMPLEMENTATION_PLAN.md