It works fine on an Edge device.
However, it doesn't show up when I run this on a Fenix 3.
7.60 firmware on the Fenix3
2.1.5 SDK
I'm using the 20.14.00 FITtoCSV.bat converter to verify if the session data is present. The record messages do show up like they are supposed to.
Here's the FIT contributor code.
using Toybox.Application as App;
using Toybox.WatchUi as Ui;
using Toybox.System as Sys;
using Toybox.FitContributor as Fit;
const SMO2_FIELD_ID = 0;
const THB_FIELD_ID = 1;
const DEVICE_INFO_ID = 2;
class MO2FitContributor {
// FIT Contributions variables
hidden var mSmO2 = null;
hidden var mThb = null;
hidden var mDeviceInfo = null;
// Constructor
function initialize(dataField, sensor) {
var label = " Sensor " + sensor.deviceNumber.toString() + " on " + get_sensor_location_name(App.getApp().getProperty("SensorLx"));
mSmO2 = dataField.createField(G_AppSensor + " " + G_currentHemoPercentLabel + label, SMO2_FIELD_ID, Fit.DATA_TYPE_FLOAT, { :nativeNum=>57, :mesgType=>Fit.MESG_TYPE_RECORD, :units=>G_currentHemoPercentUnits });
mThb = dataField.createField(G_AppSensor + " " + G_totalHemoConcentrationLabel + label, THB_FIELD_ID, Fit.DATA_TYPE_FLOAT, { :nativeNum=>54, :mesgType=>Fit.MESG_TYPE_RECORD, :units=>G_totalHemoConcentrationUnits });
mDeviceInfo = dataField.createField("CIQ_device_info", DEVICE_INFO_ID, Fit.DATA_TYPE_UINT8, { :count=>8, :mesgType=>Fit.MESG_TYPE_SESSION });
mSmO2.setData(0);
mThb.setData(0);
}
function compute(sensor) {
if( sensor != null ) {
var SmO2 = sensor.currentHemoPercent;
var THb = sensor.totalHemoConcentration;
if( SmO2 != null && THb != null) {
mSmO2.setData(SmO2.toFloat());
mThb.setData(THb.toFloat());
}
else {
mSmO2.setData(0);
mThb.setData(0);
}
}
}
function setDeviceInfo(deviceInfo) {
mDeviceInfo.setData([31,(deviceInfo[0]),(deviceInfo[1]),(deviceInfo[1] >> 8),(deviceInfo[1] >> 16),(deviceInfo[1] >> 24),(deviceInfo[2]),(deviceInfo[2] >> 8)]);
}
}