Acknowledged
CIQQA-4660

Firmware applies Auto Pause to a CIQ ActivityRecording session (fenix 8 SW 22.41, Forerunner 570 SW 17.33)

Environment

- Devices: fenix 8 - 51mm AMOLED (006-B4536-00), firmware 22.41, paired with iOS. Forerunner 570 - 42mm (006-B4574-00), firmware 17.33, paired with Android.
- App: UDisc (watch-app), UUID 51d01a6a-272a-4750-af48-10bf0de983fd, minApiLevel 3.3.0, installed from the Connect IQ store.
- SDK: Connect IQ 9.2.0. Editor: VS Code with the Monkey C extension.

Description

Our app records disc golf activities with the ActivityRecording API. On the devices above, the firmware applies Auto Pause to the session. The FIT files contain timer stop and start events with timer_trigger = auto. Our app does not send these events. Connect IQ has no API to control Auto Pause.

The result for the user: low distance, low step count, and gaps in the GPS track. One auto pause continued for almost 15 minutes.

The auto_pause setting in the affected FIT files is "when stopped".I contacted a developer who helped with the version of ConnectIQ app. He confirmed that in FIT files from unaffected devices, the same setting is "off". He also told us that a CIQ generic activity must record this setting as invalid, which the device reads as disabled. Support directed us to this forum.

Our analysis of the speed data shows this pattern: the timer pauses after 2 seconds below 0.447 m/s (1.0 mph). The timer resumes only above 1.35 m/s. A normal disc golf walking pace stays between these two values. In the sample files, 82% to 89% of the discarded movement occurred in walk segments that did not restart the timer.

Code sample

_session = ActivityRecording.createSession({
:name => "Disc Golf @ " + courseName,
:sport => Activity.SPORT_DISC_GOLF,
:subSport => Activity.SUB_SPORT_GENERIC
});
_session.start();

We call start() one time. We do not call stop() until the round ends.

Steps to reproduce

* In theory, I have not been able to reproduce this myself since I do not have these devices.

1. Install UDisc from the Connect IQ store on a fenix 8 (22.41) or Forerunner 570 (17.33).
2. Start a round with activity recording on.
3. Walk a disc golf round. Stop at each tee and basket, as normal play requires.
4. Save the round and open the activity in Garmin Connect.
5. Compare the recorded distance with the phone's GPS track. Examine the timer events in the FIT file.

Attachments

    

We also have two FIT files from an affected user. The files contain user GPS data. Didn't want to attach for privacy reasons but can share in a private channel.

Question

Why does the firmware set auto_pause to "when stopped" for this CIQ session? Is there a workaround from the CIQ layer?

  • Interesting! My Hiker App that's around for ore than a year and 100k downloads started to get strange reports telling me that they went on a 10km hike but the app only recorded 6km. Lately a user sent me the link to his activity, where I could see even stranger things. It's not exactly matching the description of this bug report, but it looks like some strange things happen and it looks like it's happening to more and more users (without any updates to my app), so I suspect it's somehow firmware related.

    What I saw in the user's activity is this:

    1. he claims 10km hike, activity displays 6km

    2. the graph for the elevation (and some other graphs) is 2 hours long, the graph for the HR (and some other) is 3 hours long.

    3. When I move the mouse I can see the point is moving on the map, then it stops at the "end" of the elevation graph, which is in the middle of the course. The route does continue, and it does finish the full circle, so it's not caused by GPS outage. For some reason the last hour of hike has partial data, and some of the measurements stopped being updated at that exact point.

    I asked the user whether he stopped there or was there some slow walking involved there, but I got no answer, though even if that would kick in some pause, obviously it would've paused the recording of all the data. Very strange

  • Has anyone found a workaround for this?