Hello!
Question:
When my Garmin HRM Pro+ strap is connected to my Garmin 955 solar forerunner watch, why is about 1% of the strap's broadcast data not able to be received? Is this normal behaviour? What does `Ant.MSG_CODE_EVENT_RX_FAIL` specifically mean?
Context:
I have written a Monkey Barrel library ( at https://github.com/mannyray/ANTPlusHeartStrap ) that allows me to connect my Garmin watch to my heart strap. This library is inspired by existing code, so I am not running anything unusual.
I have successfully tested this library as seen at the bottom of README's highlighting of the `sample_app` project. The watch connects to the strap successfully and displays incoming strap data on the watch display.
However, I noticed that sometimes there was a subtle delay in the printing of the data - suggesting that there was some sort of communication issue between watch and strap. According to protocol, the strap is expected to broadcast the heart data at a rate of about four times a second.
I am interested in reducing delay or communication issues between watch and strap because I am interested in getting as close to real time heart data as possible from the strap. Having a communication issue or packet drop will cause at least an extra quarter of second delay to my data or in the worst case have some data be overwritten with the latest heart beat data as the previous one failed to be received by watch.
What I tried to do to solve the issue:
- I created a test branch https://github.com/mannyray/ANTPlusHeartStrap/pull/5/files to investigate the communication via logging. What I found is:
- Communications does indeed occur every quarter of a second
- When the watch receives data from the strap, then usually the message ID is `Ant.MSG_ID_BROADCAST_DATA == msg.messageId`
- The perceived communication issue was that I was still receiving a message from the watch at the expected rate, but now the message ID is `Ant.MSG_ID_CHANNEL_RESPONSE_EVENT == msg.messageId` which I did not process as a regular broadcast event - hence the perceived communication issue
- The channel response event was specifically of type `Ant.MSG_CODE_EVENT_RX_FAIL`
- For a sample test run of the app on my watch, I discovered that out of 163 message (happening every quarter of a second), 13 where of `Ant.MSG_CODE_EVENT_RX_FAIL` which is about 1% rate
- Made sure the battery of my heart strap is OK as I have had the, lightly used, strap for a couple of years (maybe it is OK, but due to battery age, it is starting to fade a little?). I checked the battery level by connecting the strap to my watch and checking settings
- Tried running my logging experiment in a variety of contexts. I was not running around, but in a static position in case the broadcast failed due to motion of the strap sensor. I tried moving my watch in different positions in case there was some sort of sensor receiver issue. Nothing really helped.
My next best guess as to what to do to further debug the issue is to
- get another strap to compare - maybe one with a fresh battery - but that can be pricy
- ask the forum in case someone has already done some ANT+ crawling and has some knowledge here or can run the app on their watch and see if they have a similar experience