Ant+ certification requires main page 0 to be decoded

I have created my first datafield that uses Ant+ for communication.

It is pairing with heart rate sensors and works as expected when side loaded in physical devices.

Now, I am waiting for getting the ant+ certification required for the app is approved in the store. I have receive following request:

Your CIQ app has been tested and an issue has been identified:
the main data page 0 is not decoded and displayed on the tested device.

To pass the certification, this issue should be corrected.

I am not sure about what to do, as I have based the app in the example for Moxy sensor and I cannot identify a solution for this.

In addition, I am not aware of receiving data page 0 from sensor. See below payload for initial messages received from sensor.

Any suggestion to manage connection with HR sensor and solve this request?

[110, 0, 0, 0, 0, 0, 0, 0]

[65, 0, 0, 0, 0, 0, 0, 0]

[66, 0, 0, 0, 0, 0, 0, 0]

[81, 0, 0, 0, 0, 0, 0, 0]

[69, 0, 0, 0, 0, 0, 0, 0]

[67, 0, 0, 0, 0, 0, 0, 0]

[99, 0, 0, 0, 0, 0, 0, 0]

[68, 0, 0, 0, 0, 0, 0, 0]

[113, 0, 0, 0, 0, 0, 0, 0]

[75, 0, 0, 0, 0, 0, 0, 0]

[132, 0, 34, 45, 78, 48, 71, 78]

[132, 0, 34, 45, 78, 48, 71, 78]

[4, 0, 34, 45, 78, 48, 71, 78]

[4, 0, 78, 48, 125, 51, 72, 78]

[4, 0, 78, 48, 125, 51, 72, 78]

[4, 0, 78, 48, 125, 51, 72, 78]

[132, 0, 78, 48, 125, 51, 72, 78]

[132, 0, 125, 51, 178, 54, 73, 78]

...

  • What sensor is this? and what does this particular sensor's ANT+ specs say about data page 0?

  • It is a heart rate monitor. Page 0 should provide info about last heart beat event time and computed heart rate.

    According to all test I have done with several heart rate monitors, I never receive page 0, but page 4 that provides same information and adds previous heart beat event time.

    So I didn´t include decoding of page 0 in the initial version of the app wrongly assuming it was not used. I have just included it in my code to provide complete compativility with the Heart rate Ant+ device profile.

  • did you manage to get certification? Is there any chance you can share your onMessage method?

  • Yes I got certification. This is the code for onMessage in my case

    	public function onMessage(msg as Message) as Void {
    		// Parse the payload
    		var payload = msg.getPayload();
    		if (Ant.MSG_ID_BROADCAST_DATA == msg.messageId) {
    			if (_searching) {
    				_searching = false;
    				_deviceCfg = GenericChannel.getDeviceConfig();
    				$.ANTPLUS_lastDeviceNumber = _deviceCfg.deviceNumber;
    				getApp().setProperty("ANTPLUS_LAST_DEVICE_NUMBER", $.ANTPLUS_lastDeviceNumber);
    			}
    			_data.parse(payload);
    			_pastEventCount = _data.getEventCount();
    		} else if ((Ant.MSG_ID_CHANNEL_RESPONSE_EVENT == msg.messageId) && (Ant.MSG_ID_RF_EVENT == (payload[0] & 0xFF))) {
    			if (Ant.MSG_CODE_EVENT_CHANNEL_CLOSED == (payload[1] & 0xFF)) {
    				// Channel closed, re-open
    				open();
    			} else if (Ant.MSG_CODE_EVENT_RX_FAIL_GO_TO_SEARCH == (payload[1] & 0xFF)) {
    				_searching = true;
    			}
    		}
    	}

    I do not think the issue in your case is related to how you manage received messages.

    According to information you provide in a different post, it seems that you are sending common page 70 to request a specific data page from sensor. Is this correct?

  • No. Until 10 minutes ago I haven't even heard about page 70. And I don't send any message, only receive. Your code looks more or less identical to mine. I thought there will be some usage of Ant.MSG_ID_ACKNOWLEDGED_DATA.

    Strange. I start to suspect that they mixed up my app with someone else's because they also reported another error that I display invalid heart rate as "00 bpm", which is impossible in my code (it would display only "0" and I don't even have "bpm" in my code)

  • I would try to contact Ant+ certification team. I recommend you to do it through developers forum at thisisant. It could take some days till you get an answer.

    Developers forum (ANT+ Heart Rate Monitor)

  • I'm trying to implement a feature I haven't done before. For an ANT+ Sensor (say: a Radar or HR Strap) that is also paired with the Garmin Device, I want to send a request to the sensor for a Common Page, rather than wait for it to eventually send me the page. I'm not sure this is possible since I need to use ANTplus. I think to send to the sensor I need to use the lower level ANT functions, which are incompatible with the Device also pairing with the sensor? I hope I'm wrong about that. Do you know how to ask a sensor to send, say, Page 82, for a sensor also paired with the Garmin watch or bike computer? THANKS!

  • I don't think this is possible. You will need to directly pair the sensor from your data field.

    In case of dual sensors supporting BLE/ANT+ connections, you can ask the user for pairing in BLE from the device and use ANT+ from your app (or vice versa). But, be patient, this is usually a nightmare as users do not follow (even do not read) instructions to work in that way

  • Thanks! I thought that might be the case. One user of my ANT+ Battery field requested a more frequent update when he noticed one of his dual pedals wasn't updating the battery level. I was hoping I could ping the pedal for an update once in a while. I'm sure BLE is even worse in terms of being a 1:1 lock and if I tried to implement a BLE connection that could mess up a user's attempt to use the sensor for BLE pairing. So I'll just keep it as-is and wait for pages.

  • I think that all these pages are sent at least once a minute. There's no need to update battery level more frequently than that, you won't see any change even in 10 minutes