UNPKG

fit-file-parser

Version:

Parse your .FIT files easily, directly from JS (Garmin, Polar, Suunto)

670 lines (668 loc) 162 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMessageName = getMessageName; exports.getFieldObject = getFieldObject; // some unit conversion constants var metersInOneKilometer = 1000; var secondsInOneHour = 3600; // according to https://en.wikipedia.org/wiki/Mile var metersInOneMile = 1609.344; var centiBarsInOneBar = 100; var psiInOneBar = 14.5037738; var FIT = exports.FIT = { scConst: 180 / Math.pow(2, 31), options: { speedUnits: { // native speed unit: meters per second [m/s] 'm/s': { multiplier: 1, offset: 0 }, // miles per hour [mph] mph: { multiplier: secondsInOneHour / metersInOneMile, offset: 0 }, // kilometers per hour [km/h] 'km/h': { multiplier: secondsInOneHour / metersInOneKilometer, offset: 0 } }, lengthUnits: { // native length unit: meters [m] m: { multiplier: 1, offset: 0 }, // (international) mile [mi] mi: { multiplier: 1 / metersInOneMile, offset: 0 }, // kilometer [km] km: { multiplier: 1 / metersInOneKilometer, offset: 0 } }, temperatureUnits: { // native temperature unit: degree Celsius [°C] '°C': { multiplier: 1, offset: 0 }, // kelvin [K] kelvin: { multiplier: 1, offset: -273.15 }, // degree fahrenheit [°F] fahrenheit: { multiplier: 9 / 5, offset: 32 } }, pressureUnits: { cbar: { multiplier: 1, offset: 0 }, bar: { multiplier: 1 / centiBarsInOneBar, offset: 0 }, psi: { multiplier: 1 / centiBarsInOneBar * psiInOneBar, offset: 0 } } }, messages: { 0: { name: 'file_id', 0: { field: 'type', type: 'file', scale: null, offset: '', units: '' }, 1: { field: 'manufacturer', type: 'manufacturer', scale: null, offset: '', units: '' }, 2: { field: 'product', type: 'uint16', scale: null, offset: '', units: '' }, 3: { field: 'serial_number', type: 'uint32z', scale: null, offset: '', units: '' }, 4: { field: 'time_created', type: 'date_time', scale: null, offset: '', units: '' }, 5: { field: 'number', type: 'uint16', scale: null, offset: '', units: '' }, 8: { field: 'product_name', type: 'string', scale: null, offset: '', units: '' } }, 1: { name: 'capabilities', 0: { field: 'languages', type: 'uint8z', scale: null, offset: '', units: '' }, 1: { field: 'sports', type: 'sport_bits_0', scale: null, offset: '', units: '' }, 21: { field: 'workouts_supported', type: 'workout_capabilities', scale: null, offset: '', units: '' }, 23: { field: 'connectivity_supported', type: 'connectivity_capabilities', scale: null, offset: '', units: '' } }, 2: { name: 'device_settings', 0: { field: 'active_time_zone', type: 'uint8', scale: null, offset: '', units: '' }, 1: { field: 'utc_offset', type: 'uint32', scale: null, offset: '', units: '' }, 2: { field: 'time_offset', type: 'uint32', scale: null, offset: '', units: 's' }, 5: { field: 'time_zone_offset', type: 'sint8', scale: 4, offset: '', units: 'hr' }, 55: { field: 'display_orientation', type: 'display_orientation', scale: null, offset: '', units: '' }, 56: { field: 'mounting_side', type: 'side', scale: null, offset: '', units: '' }, 94: { field: 'number_of_screens', type: 'uint8', scale: null, offset: '', units: '' }, 95: { field: 'smart_notification_display_orientation', type: 'display_orientation', scale: null, offset: '', units: '' } }, 3: { name: 'user_profile', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 0: { field: 'friendly_name', type: 'string', scale: null, offset: 0, units: '' }, 1: { field: 'gender', type: 'gender', scale: null, offset: 0, units: '' }, 2: { field: 'age', type: 'uint8', scale: null, offset: 0, units: 'years' }, 3: { field: 'height', type: 'uint8', scale: 100, offset: 0, units: 'm' }, 4: { field: 'weight', type: 'uint16', scale: 10, offset: 0, units: 'kg' }, 5: { field: 'language', type: 'language', scale: null, offset: 0, units: '' }, 6: { field: 'elev_setting', type: 'display_measure', scale: null, offset: 0, units: '' }, 7: { field: 'weight_setting', type: 'display_measure', scale: null, offset: 0, units: '' }, 8: { field: 'resting_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 9: { field: 'default_max_running_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 10: { field: 'default_max_biking_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 11: { field: 'default_max_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 12: { field: 'hr_setting', type: 'display_heart', scale: null, offset: 0, units: '' }, 13: { field: 'speed_setting', type: 'display_measure', scale: null, offset: 0, units: '' }, 14: { field: 'dist_setting', type: 'display_measure', scale: null, offset: 0, units: '' }, 16: { field: 'power_setting', type: 'display_power', scale: null, offset: 0, units: '' }, 17: { field: 'activity_class', type: 'activity_class', scale: null, offset: 0, units: '' }, 18: { field: 'position_setting', type: 'display_position', scale: null, offset: 0, units: '' }, 21: { field: 'temperature_setting', type: 'display_measure', scale: null, offset: 0, units: '' }, 22: { field: 'local_id', type: 'user_local_id', scale: null, offset: 0, units: '' }, 23: { field: 'global_id', type: 'byte', scale: null, offset: 0, units: '' }, 28: { field: 'wake_time', type: 'localtime_into_day', scale: null, offset: 0, units: '' }, 29: { field: 'sleep_time', type: 'localtime_into_day', scale: null, offset: 0, units: '' }, 30: { field: 'height_setting', type: 'display_measure', scale: null, offset: 0, units: '' } }, 4: { name: 'hrm_profile', 254: { field: 'message_index', type: 'message_index', scale: null, offset: '', units: '' }, 0: { field: 'enabled', type: 'bool', scale: null, offset: '', units: '' }, 1: { field: 'hrm_ant_id', type: 'uint16z', scale: null, offset: '', units: '' }, 2: { field: 'log_hrv', type: 'bool', scale: null, offset: '', units: '' }, 3: { field: 'hrm_ant_id_trans_type', type: 'uint8z', scale: null, offset: '', units: '' } }, 5: { name: 'sdm_profile', 254: { field: 'message_index', type: 'message_index', scale: null, offset: '', units: '' }, 0: { field: 'enabled', type: 'bool', scale: null, offset: '', units: '' }, 1: { field: 'sdm_ant_id', type: 'uint16z', scale: null, offset: '', units: '' }, 2: { field: 'sdm_cal_factor', type: 'uint16', scale: 10, offset: '', units: '%' }, 3: { field: 'odometer', type: 'uint32', scale: 100, offset: '', units: 'm' }, 4: { field: 'speed_source', type: 'bool', scale: null, offset: '', units: '' }, 5: { field: 'sdm_ant_id_trans_type', type: 'uint8z', scale: null, offset: '', units: '' }, 7: { field: 'odometer_rollover', type: 'uint8', scale: null, offset: '', units: '' } }, 6: { name: 'bike_profile', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 0: { field: 'name', type: 'string', scale: null, offset: 0, units: '' }, 1: { field: 'sport', type: 'sport', scale: null, offset: 0, units: '' }, 2: { field: 'sub_sport', type: 'sub_sport', scale: null, offset: 0, units: '' }, 3: { field: 'odometer', type: 'uint32', scale: 100, offset: 0, units: 'm' }, 4: { field: 'bike_spd_ant_id', type: 'uint16z', scale: null, offset: 0, units: '' }, 5: { field: 'bike_cad_ant_id', type: 'uint16z', scale: null, offset: 0, units: '' }, 6: { field: 'bike_spdcad_ant_id', type: 'uint16z', scale: null, offset: 0, units: '' }, 7: { field: 'bike_power_ant_id', type: 'uint16z', scale: null, offset: 0, units: '' }, 8: { field: 'custom_wheelsize', type: 'uint16', scale: 1000, offset: 0, units: 'm' }, 9: { field: 'auto_wheelsize', type: 'uint16', scale: 1000, offset: 0, units: 'm' }, 10: { field: 'bike_weight', type: 'uint16', scale: 10, offset: 0, units: 'kg' }, 11: { field: 'power_cal_factor', type: 'uint16', scale: 10, offset: 0, units: '%' }, 12: { field: 'auto_wheel_cal', type: 'bool', scale: null, offset: 0, units: '' }, 13: { field: 'auto_power_zero', type: 'bool', scale: null, offset: 0, units: '' }, 14: { field: 'id', type: 'uint8', scale: null, offset: 0, units: '' }, 15: { field: 'spd_enabled', type: 'bool', scale: null, offset: 0, units: '' }, 16: { field: 'cad_enabled', type: 'bool', scale: null, offset: 0, units: '' }, 17: { field: 'spdcad_enabled', type: 'bool', scale: null, offset: 0, units: '' }, 18: { field: 'power_enabled', type: 'bool', scale: null, offset: 0, units: '' }, 19: { field: 'crank_length', type: 'uint8', scale: 2, offset: -110, units: 'mm' }, 20: { field: 'enabled', type: 'bool', scale: null, offset: 0, units: '' }, 21: { field: 'bike_spd_ant_id_trans_type', type: 'uint8z', scale: null, offset: 0, units: '' }, 22: { field: 'bike_cad_ant_id_trans_type', type: 'uint8z', scale: null, offset: 0, units: '' }, 23: { field: 'bike_spdcad_ant_id_trans_type', type: 'uint8z', scale: null, offset: 0, units: '' }, 24: { field: 'bike_power_ant_id_trans_type', type: 'uint8z', scale: null, offset: 0, units: '' }, 37: { field: 'odometer_rollover', type: 'uint8', scale: null, offset: 0, units: '' }, 38: { field: 'front_gear_num', type: 'uint8z', scale: null, offset: 0, units: '' }, 39: { field: 'front_gear', type: 'uint8z', scale: null, offset: 0, units: '' }, 40: { field: 'rear_gear_num', type: 'uint8z', scale: null, offset: 0, units: '' }, 41: { field: 'rear_gear', type: 'uint8z', scale: null, offset: 0, units: '' }, 44: { field: 'shimano_di2_enabled', type: 'bool', scale: null, offset: 0, units: '' } }, 7: { name: 'zones_target', 1: { field: 'max_heart_rate', type: 'uint8', scale: null, offset: '', units: '' }, 2: { field: 'threshold_heart_rate', type: 'uint8', scale: null, offset: '', units: '' }, 3: { field: 'functional_threshold_power', type: 'uint16', scale: null, offset: '', units: '' }, 5: { field: 'hr_calc_type', type: 'hr_zone_calc', scale: null, offset: '', units: '' }, 7: { field: 'pwr_calc_type', type: 'pwr_zone_calc', scale: null, offset: '', units: '' } }, 8: { name: 'hr_zone', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 1: { field: 'high_bpm', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 2: { field: 'name', type: 'string', scale: null, offset: 0, units: '' } }, 9: { name: 'power_zone', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 1: { field: 'high_value', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 2: { field: 'name', type: 'string', scale: null, offset: 0, units: '' } }, 10: { name: 'met_zone', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 1: { field: 'high_bpm', type: 'uint8', scale: null, offset: 0, units: '' }, 2: { field: 'calories', type: 'uint16', scale: 10, offset: 0, units: 'kcal / min' }, 3: { field: 'fat_calories', type: 'uint8', scale: 10, offset: 0, units: 'kcal / min' } }, 12: { name: 'sport', 0: { field: 'sport', type: 'sport', scale: null, offset: '', units: '' }, 1: { field: 'sub_sport', type: 'sub_sport', scale: null, offset: '', units: '' }, 3: { field: 'name', type: 'string', scale: null, offset: '', units: '' } }, 15: { name: 'goal', 254: { field: 'message_index', type: 'message_index', scale: null, offset: '', units: '' }, 0: { field: 'sport', type: 'sport', scale: null, offset: '', units: '' }, 1: { field: 'sub_sport', type: 'sub_sport', scale: null, offset: '', units: '' }, 2: { field: 'start_date', type: 'date_time', scale: null, offset: '', units: '' }, 3: { field: 'end_date', type: 'date_time', scale: null, offset: '', units: '' }, 4: { field: 'type', type: 'goal', scale: null, offset: '', units: '' }, 5: { field: 'value', type: 'uint32', scale: null, offset: '', units: '' }, 6: { field: 'repeat', type: 'bool', scale: null, offset: '', units: '' }, 7: { field: 'target_value', type: 'uint32', scale: null, offset: '', units: '' }, 8: { field: 'recurrence', type: 'goal_recurrence', scale: null, offset: '', units: '' }, 9: { field: 'recurrence_value', type: 'uint16', scale: null, offset: '', units: '' }, 10: { field: 'enabled', type: 'bool', scale: null, offset: '', units: '' } }, 18: { name: 'session', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'event', type: 'event', scale: null, offset: 0, units: '' }, 1: { field: 'event_type', type: 'event_type', scale: null, offset: 0, units: '' }, 2: { field: 'start_time', type: 'date_time', scale: null, offset: 0, units: '' }, 3: { field: 'start_position_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 4: { field: 'start_position_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 5: { field: 'sport', type: 'sport', scale: null, offset: 0, units: '' }, 6: { field: 'sub_sport', type: 'sub_sport', scale: null, offset: 0, units: '' }, 7: { field: 'total_elapsed_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 8: { field: 'total_timer_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 9: { field: 'total_distance', type: 'uint32', scale: 100, offset: 0, units: 'm' }, 10: { field: 'total_cycles', type: 'uint32', scale: null, offset: 0, units: 'cycles' }, 11: { field: 'total_calories', type: 'uint16', scale: null, offset: 0, units: 'kcal' }, 13: { field: 'total_fat_calories', type: 'uint16', scale: null, offset: 0, units: 'kcal' }, 14: { field: 'avg_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 15: { field: 'max_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 16: { field: 'avg_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 17: { field: 'max_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 18: { field: 'avg_cadence', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 19: { field: 'max_cadence', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 20: { field: 'avg_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 21: { field: 'max_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 22: { field: 'total_ascent', type: 'uint16', scale: null, offset: 0, units: 'm' }, 23: { field: 'total_descent', type: 'uint16', scale: null, offset: 0, units: 'm' }, 24: { field: 'total_training_effect', type: 'uint8', scale: 10, offset: 0, units: '' }, 25: { field: 'first_lap_index', type: 'uint16', scale: null, offset: 0, units: '' }, 26: { field: 'num_laps', type: 'uint16', scale: null, offset: 0, units: '' }, 27: { field: 'event_group', type: 'uint8', scale: null, offset: 0, units: '' }, 28: { field: 'trigger', type: 'session_trigger', scale: null, offset: 0, units: '' }, 29: { field: 'nec_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 30: { field: 'nec_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 31: { field: 'swc_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 32: { field: 'swc_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 34: { field: 'normalized_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 35: { field: 'training_stress_score', type: 'uint16', scale: 10, offset: 0, units: 'tss' }, 36: { field: 'intensity_factor', type: 'uint16', scale: 1000, offset: 0, units: 'if' }, 37: { field: 'left_right_balance', type: 'left_right_balance_100', scale: 100, offset: 0, units: '%' }, 41: { field: 'avg_stroke_count', type: 'uint32', scale: 10, offset: 0, units: 'strokes/lap' }, 42: { field: 'avg_stroke_distance', type: 'uint16', scale: 100, offset: 0, units: 'm' }, 43: { field: 'swim_stroke', type: 'swim_stroke', scale: null, offset: 0, units: 'swim_stroke' }, 44: { field: 'pool_length', type: 'uint16', scale: 100, offset: 0, units: 'm' }, 45: { field: 'threshold_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 46: { field: 'pool_length_unit', type: 'display_measure', scale: null, offset: 0, units: '' }, 47: { field: 'num_active_lengths', type: 'uint16', scale: null, offset: 0, units: 'lengths' }, 48: { field: 'total_work', type: 'uint32', scale: null, offset: 0, units: 'J' }, 49: { field: 'avg_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 50: { field: 'max_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 51: { field: 'gps_accuracy', type: 'uint8', scale: null, offset: 0, units: 'm' }, 52: { field: 'avg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 53: { field: 'avg_pos_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 54: { field: 'avg_neg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 55: { field: 'max_pos_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 56: { field: 'max_neg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 57: { field: 'avg_temperature', type: 'sint8', scale: null, offset: 0, units: 'C' }, 58: { field: 'max_temperature', type: 'sint8', scale: null, offset: 0, units: 'C' }, 59: { field: 'total_moving_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 60: { field: 'avg_pos_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 61: { field: 'avg_neg_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 62: { field: 'max_pos_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 63: { field: 'max_neg_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 64: { field: 'min_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 65: { field: 'time_in_hr_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 66: { field: 'time_in_speed_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 67: { field: 'time_in_cadence_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 68: { field: 'time_in_power_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 69: { field: 'avg_lap_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 70: { field: 'best_lap_index', type: 'uint16', scale: null, offset: 0, units: '' }, 71: { field: 'min_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 82: { field: 'player_score', type: 'uint16', scale: null, offset: 0, units: '' }, 83: { field: 'opponent_score', type: 'uint16', scale: null, offset: 0, units: '' }, 84: { field: 'opponent_name', type: 'string', scale: null, offset: 0, units: '' }, 85: { field: 'stroke_count', type: 'uint16', scale: null, offset: 0, units: 'counts' }, 86: { field: 'zone_count', type: 'uint16', scale: null, offset: 0, units: 'counts' }, 87: { field: 'max_ball_speed', type: 'uint16', scale: 100, offset: 0, units: 'm/s' }, 88: { field: 'avg_ball_speed', type: 'uint16', scale: 100, offset: 0, units: 'm/s' }, 89: { field: 'avg_vertical_oscillation', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 90: { field: 'avg_stance_time_percent', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 91: { field: 'avg_stance_time', type: 'uint16', scale: 10, offset: 0, units: 'ms' }, 92: { field: 'avg_fractional_cadence', type: 'uint8', scale: 128, offset: 0, units: 'rpm' }, 93: { field: 'max_fractional_cadence', type: 'uint8', scale: 128, offset: 0, units: 'rpm' }, 94: { field: 'total_fractional_cycles', type: 'uint8', scale: 128, offset: 0, units: 'cycles' }, 95: { field: 'avg_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 96: { field: 'min_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 97: { field: 'max_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 98: { field: 'avg_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 99: { field: 'min_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 100: { field: 'max_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 101: { field: 'avg_left_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 102: { field: 'avg_right_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 103: { field: 'avg_left_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 104: { field: 'avg_right_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 105: { field: 'avg_combined_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 111: { field: 'sport_index', type: 'uint8', scale: null, offset: 0, units: '' }, 112: { field: 'time_standing', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 113: { field: 'stand_count', type: 'uint16', scale: null, offset: 0, units: '' }, 114: { field: 'avg_left_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 115: { field: 'avg_right_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 116: { field: 'avg_left_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 117: { field: 'avg_left_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 118: { field: 'avg_right_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 119: { field: 'avg_right_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 120: { field: 'avg_power_position', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 121: { field: 'max_power_position', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 122: { field: 'avg_cadence_position', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 123: { field: 'max_cadence_position', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 124: { field: 'enhanced_avg_speed', type: 'uint32', scale: 1000, offset: 0, units: 'm/s' }, 125: { field: 'enhanced_max_speed', type: 'uint32', scale: 1000, offset: 0, units: 'm/s' }, 126: { field: 'enhanced_avg_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 127: { field: 'enhanced_min_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 128: { field: 'enhanced_max_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 129: { field: 'avg_lev_motor_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 130: { field: 'max_lev_motor_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 131: { field: 'lev_battery_consumption', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 132: { field: 'avg_vertical_ratio', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 133: { field: 'avg_stance_time_balance', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 134: { field: 'avg_step_length', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 137: { field: 'total_anaerobic_effect', type: 'uint8', scale: 10, offset: 0, units: '' }, 139: { field: 'avg_vam', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 192: { field: 'workout_feel', type: 'uint8', scale: null, offset: 0, units: '' }, 193: { field: 'workout_rpe', type: 'uint8', scale: 10, offset: 0, units: '' } }, 19: { name: 'lap', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'event', type: 'event', scale: null, offset: 0, units: '' }, 1: { field: 'event_type', type: 'event_type', scale: null, offset: 0, units: '' }, 2: { field: 'start_time', type: 'date_time', scale: null, offset: 0, units: '' }, 3: { field: 'start_position_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 4: { field: 'start_position_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 5: { field: 'end_position_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 6: { field: 'end_position_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 7: { field: 'total_elapsed_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 8: { field: 'total_timer_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 9: { field: 'total_distance', type: 'uint32', scale: 100, offset: 0, units: 'm' }, 10: { field: 'total_cycles', type: 'uint32', scale: null, offset: 0, units: 'cycles' }, 11: { field: 'total_calories', type: 'uint16', scale: null, offset: 0, units: 'kcal' }, 12: { field: 'total_fat_calories', type: 'uint16', scale: null, offset: 0, units: 'kcal' }, 13: { field: 'avg_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 14: { field: 'max_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 15: { field: 'avg_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 16: { field: 'max_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 17: { field: 'avg_cadence', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 18: { field: 'max_cadence', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 19: { field: 'avg_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 20: { field: 'max_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 21: { field: 'total_ascent', type: 'uint16', scale: null, offset: 0, units: 'm' }, 22: { field: 'total_descent', type: 'uint16', scale: null, offset: 0, units: 'm' }, 23: { field: 'intensity', type: 'intensity', scale: null, offset: 0, units: '' }, 24: { field: 'lap_trigger', type: 'lap_trigger', scale: null, offset: 0, units: '' }, 25: { field: 'sport', type: 'sport', scale: null, offset: 0, units: '' }, 26: { field: 'event_group', type: 'uint8', scale: null, offset: 0, units: '' }, 32: { field: 'num_lengths', type: 'uint16', scale: null, offset: 0, units: 'lengths' }, 33: { field: 'normalized_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 34: { field: 'left_right_balance', type: 'left_right_balance_100', scale: 100, offset: 0, units: '%' }, 35: { field: 'first_length_index', type: 'uint16', scale: null, offset: 0, units: '' }, 37: { field: 'avg_stroke_distance', type: 'uint16', scale: 100, offset: 0, units: 'm' }, 38: { field: 'swim_stroke', type: 'swim_stroke', scale: null, offset: 0, units: '' }, 39: { field: 'sub_sport', type: 'sub_sport', scale: null, offset: 0, units: '' }, 40: { field: 'num_active_lengths', type: 'uint16', scale: null, offset: 0, units: 'lengths' }, 41: { field: 'total_work', type: 'uint32', scale: null, offset: 0, units: 'J' }, 42: { field: 'avg_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 43: { field: 'max_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 44: { field: 'gps_accuracy', type: 'uint8', scale: null, offset: 0, units: 'm' }, 45: { field: 'avg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 46: { field: 'avg_pos_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 47: { field: 'avg_neg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 48: { field: 'max_pos_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 49: { field: 'max_neg_grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 50: { field: 'avg_temperature', type: 'sint8', scale: null, offset: 0, units: 'C' }, 51: { field: 'max_temperature', type: 'sint8', scale: null, offset: 0, units: 'C' }, 52: { field: 'total_moving_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 53: { field: 'avg_pos_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 54: { field: 'avg_neg_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 55: { field: 'max_pos_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 56: { field: 'max_neg_vertical_speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 57: { field: 'time_in_hr_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 58: { field: 'time_in_speed_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 59: { field: 'time_in_cadence_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 60: { field: 'time_in_power_zone', type: 'uint32_array', scale: 1000, offset: 0, units: 's' }, 61: { field: 'repetition_num', type: 'uint16', scale: null, offset: 0, units: '' }, 62: { field: 'min_altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 63: { field: 'min_heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 71: { field: 'wkt_step_index', type: 'message_index', scale: null, offset: 0, units: '' }, 74: { field: 'opponent_score', type: 'uint16', scale: null, offset: 0, units: '' }, 75: { field: 'stroke_count', type: 'uint16', scale: null, offset: 0, units: 'counts' }, 76: { field: 'zone_count', type: 'uint16', scale: null, offset: 0, units: 'counts' }, 77: { field: 'avg_vertical_oscillation', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 78: { field: 'avg_stance_time_percent', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 79: { field: 'avg_stance_time', type: 'uint16', scale: 10, offset: 0, units: 'ms' }, 80: { field: 'avg_fractional_cadence', type: 'uint8', scale: 128, offset: 0, units: 'rpm' }, 81: { field: 'max_fractional_cadence', type: 'uint8', scale: 128, offset: 0, units: 'rpm' }, 82: { field: 'total_fractional_cycles', type: 'uint8', scale: 128, offset: 0, units: 'cycles' }, 83: { field: 'player_score', type: 'uint16', scale: null, offset: 0, units: '' }, 84: { field: 'avg_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 85: { field: 'min_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 86: { field: 'max_total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 87: { field: 'avg_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 88: { field: 'min_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 89: { field: 'max_saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 91: { field: 'avg_left_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 92: { field: 'avg_right_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 93: { field: 'avg_left_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 94: { field: 'avg_right_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 95: { field: 'avg_combined_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 98: { field: 'time_standing', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 99: { field: 'stand_count', type: 'uint16', scale: null, offset: 0, units: '' }, 100: { field: 'avg_left_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 101: { field: 'avg_right_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 102: { field: 'avg_left_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 103: { field: 'avg_left_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 104: { field: 'avg_right_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 105: { field: 'avg_right_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 106: { field: 'avg_power_position', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 107: { field: 'max_power_position', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 108: { field: 'avg_cadence_position', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 109: { field: 'max_cadence_position', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 110: { field: 'enhanced_avg_speed', type: 'uint32', scale: 1000, offset: 0, units: 'm/s' }, 111: { field: 'enhanced_max_speed', type: 'uint32', scale: 1000, offset: 0, units: 'm/s' }, 112: { field: 'enhanced_avg_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 113: { field: 'enhanced_min_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 114: { field: 'enhanced_max_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 115: { field: 'avg_lev_motor_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 116: { field: 'max_lev_motor_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 117: { field: 'lev_battery_consumption', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 118: { field: 'avg_vertical_ratio', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 119: { field: 'avg_stance_time_balance', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 120: { field: 'avg_step_length', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 121: { field: 'avg_vam', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' } }, 20: { name: 'record', 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'position_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 1: { field: 'position_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 2: { field: 'altitude', type: 'uint16', scale: 5, offset: -500, units: 'm' }, 3: { field: 'heart_rate', type: 'uint8', scale: null, offset: 0, units: 'bpm' }, 4: { field: 'cadence', type: 'uint8', scale: null, offset: 0, units: 'rpm' }, 5: { field: 'distance', type: 'uint32', scale: 100, offset: 0, units: 'm' }, 6: { field: 'speed', type: 'uint16', scale: 1000, offset: 0, units: 'm/s' }, 7: { field: 'power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 8: { field: 'compressed_speed_distance', type: 'byte', scale: '100,16', offset: 0, units: 'm/s,m' }, 9: { field: 'grade', type: 'sint16', scale: 100, offset: 0, units: '%' }, 10: { field: 'resistance', type: 'uint8', scale: null, offset: 0, units: '' }, 11: { field: 'time_from_course', type: 'sint32', scale: 1000, offset: 0, units: 's' }, 12: { field: 'cycle_length', type: 'uint8', scale: 100, offset: 0, units: 'm' }, 13: { field: 'temperature', type: 'sint8', scale: null, offset: 0, units: 'C' }, 17: { field: 'speed_1s', type: 'uint8', scale: 16, offset: 0, units: 'm/s' }, 18: { field: 'cycles', type: 'uint8', scale: null, offset: 0, units: 'cycles' }, 19: { field: 'total_cycles', type: 'uint32', scale: null, offset: 0, units: 'cycles' }, 28: { field: 'compressed_accumulated_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 29: { field: 'accumulated_power', type: 'uint32', scale: null, offset: 0, units: 'watts' }, 30: { field: 'left_right_balance', type: 'left_right_balance', scale: null, offset: 0, units: '' }, 31: { field: 'gps_accuracy', type: 'uint8', scale: null, offset: 0, units: 'm' }, 32: { field: 'vertical_speed', type: 'sint16', scale: 1000, offset: 0, units: 'm/s' }, 33: { field: 'calories', type: 'uint16', scale: null, offset: 0, units: 'kcal' }, 39: { field: 'vertical_oscillation', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 40: { field: 'stance_time_percent', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 41: { field: 'stance_time', type: 'uint16', scale: 10, offset: 0, units: 'ms' }, 42: { field: 'activity_type', type: 'activity_type', scale: null, offset: 0, units: '' }, 43: { field: 'left_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 44: { field: 'right_torque_effectiveness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 45: { field: 'left_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 46: { field: 'right_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 47: { field: 'combined_pedal_smoothness', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 48: { field: 'time128', type: 'uint8', scale: 128, offset: 0, units: 's' }, 49: { field: 'stroke_type', type: 'stroke_type', scale: null, offset: 0, units: '' }, 50: { field: 'zone', type: 'uint8', scale: null, offset: 0, units: '' }, 51: { field: 'ball_speed', type: 'uint16', scale: 100, offset: 0, units: 'm/s' }, 52: { field: 'cadence256', type: 'uint16', scale: 256, offset: 0, units: 'rpm' }, 53: { field: 'fractional_cadence', type: 'uint8', scale: 128, offset: 0, units: 'rpm' }, 54: { field: 'total_hemoglobin_conc', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 55: { field: 'total_hemoglobin_conc_min', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 56: { field: 'total_hemoglobin_conc_max', type: 'uint16', scale: 100, offset: 0, units: 'g/dL' }, 57: { field: 'saturated_hemoglobin_percent', type: 'uint16', scale: 10, offset: 0, units: '%' }, 58: { field: 'saturated_hemoglobin_percent_min', type: 'uint16', scale: 10, offset: 0, units: '%' }, 59: { field: 'saturated_hemoglobin_percent_max', type: 'uint16', scale: 10, offset: 0, units: '%' }, 62: { field: 'device_index', type: 'device_index', scale: null, offset: 0, units: '' }, 67: { field: 'left_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 68: { field: 'right_pco', type: 'sint8', scale: null, offset: 0, units: 'mm' }, 69: { field: 'left_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 70: { field: 'left_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 71: { field: 'right_power_phase', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 72: { field: 'right_power_phase_peak', type: 'uint8', scale: '0,7111111', offset: 0, units: 'degrees' }, 73: { field: 'enhanced_speed', type: 'uint32', scale: 1000, offset: 0, units: 'm/s' }, 78: { field: 'enhanced_altitude', type: 'uint32', scale: 5, offset: -500, units: 'm' }, 81: { field: 'battery_soc', type: 'uint8', scale: 2, offset: 0, units: 'percent' }, 82: { field: 'motor_power', type: 'uint16', scale: null, offset: 0, units: 'watts' }, 83: { field: 'vertical_ratio', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 84: { field: 'stance_time_balance', type: 'uint16', scale: 100, offset: 0, units: 'percent' }, 85: { field: 'step_length', type: 'uint16', scale: 10, offset: 0, units: 'mm' }, 91: { field: 'absolute_pressure', type: 'uint32', scale: null, offset: 0, units: 'Pa' }, 92: { field: 'depth', type: 'uint32', scale: null, offset: 0, units: 'm' }, 93: { field: 'next_stop_depth', type: 'uint32', scale: null, offset: 0, units: 'm' }, 94: { field: 'next_stop_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 95: { field: 'time_to_surface', type: 'uint32', scale: null, offset: 0, units: 's' }, 96: { field: 'ndl_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 97: { field: 'cns_load', type: 'uint8', scale: null, offset: 0, units: 'percent' }, 98: { field: 'n2_load', type: 'uint16', scale: null, offset: 0, units: 'percent' } }, 21: { name: 'event', 253: { field: 'timestamp', type: 'date_time', scale: null, offset: '', units: 's' }, 0: { field: 'event', type: 'event', scale: null, offset: '', units: '' }, 1: { field: 'event_type', type: 'event_type', scale: null, offset: '', units: '' }, 2: { field: 'data16', type: 'uint16', scale: null, offset: '', units: '' }, 3: { field: 'data', type: 'uint32', scale: null, offset: '', units: '' }, 4: { field: 'event_group', type: 'uint8', scale: null, offset: '', units: '' }, 7: { field: 'score', type: 'uint16', scale: null, offset: '', units: '' }, 8: { field: 'opponent_score', type: 'uint16', scale: null, offset: '', units: '' }, 9: { field: 'front_gear_num', type: 'uint8z', scale: null, offset: '', units: '' }, 10: { field: 'front_gear', type: 'uint8z', scale: null, offset: '', units: '' }, 11: { field: 'rear_gear_num', type: 'uint8z', scale: null, offset: '', units: '' }, 12: { field: 'rear_gear', type: 'uint8z', scale: null, offset: '', units: '' }, 13: { field: 'device_index', type: 'device_index', scale: null, offset: '', units: '' } }, 23: { name: 'device_info', 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'device_index', type: 'uint8', scale: null, offset: 0, units: '' }, 1: { field: 'device_type', type: 'antplus_device_type', scale: null, offset: 0, units: '' }, 2: { field: 'manufacturer', type: 'manufacturer', scale: null, offset: 0, units: '' }, 3: { field: 'serial_number', type: 'uint32z', scale: null, offset: 0, units: '' }, 4: { field: 'product', type: 'uint16', scale: null, offset: 0, units: '' }, 5: { field: 'software_version', type: 'uint16', scale: 100, offset: 0, units: '' }, 6: { field: 'hardware_version', type: 'uint8', scale: null, offset: 0, units: '' }, 7: { field: 'cum_operating_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 10: { field: 'battery_voltage', type: 'uint16', scale: 256, offset: 0, units: 'V' }, 11: { field: 'battery_status', type: 'battery_status', scale: null, offset: 0, units: '' }, 18: { field: 'sensor_position', type: 'body_location', scale: null, offset: 0, units: '' }, 19: { field: 'descriptor', type: 'string', scale: null, offset: 0, units: '' }, 20: { field: 'ant_transmission_type', type: 'uint8z', scale: null, offset: 0, units: '' }, 21: { field: 'ant_device_number', type: 'uint16z', scale: null, offset: 0, units: '' }, 22: { field: 'ant_network', type: 'ant_network', scale: null, offset: 0, units: '' }, 25: { field: 'source_type', type: 'source_type', scale: null, offset: 0, units: '' }, 27: { field: 'product_name', type: 'string', scale: null, offset: 0, units: '' } }, 26: { name: 'workout', 4: { field: 'sport', type: 'sport', scale: null, offset: '', units: '' }, 5: { field: 'capabilities', type: 'workout_capabilities', scale: null, offset: '', units: '' }, 6: { field: 'num_valid_steps', type: 'uint16', scale: null, offset: '', units: '' }, 8: { field: 'wkt_name', type: 'string', scale: null, offset: '', units: '' } }, 27: { name: 'workout_step', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 0: { field: 'wkt_step_name', type: 'string', scale: null, offset: 0, units: '' }, 1: { field: 'duration_type', type: 'wkt_step_duration', scale: null, offset: 0, units: '' }, 2: { field: 'duration_value', type: 'uint32', scale: null, offset: 0, units: '' }, 3: { field: 'target_type', type: 'wkt_step_target', scale: null, offset: 0, units: '' }, 4: { field: 'target_value', type: 'uint32', scale: null, offset: 0, units: '' }, 5: { field: 'custom_target_value_low', type: 'uint32', scale: null, offset: 0, units: '' }, 6: { field: 'custom_target_value_high', type: 'uint32', scale: null, offset: 0, units: '' }, 7: { field: 'intensity', type: 'intensity', scale: null, offset: 0, units: '' } }, 30: { name: 'weight_scale', 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'weight', type: 'weight', scale: 100, offset: 0, units: 'kg' }, 1: { field: 'percent_fat', type: 'uint16', scale: 100, offset: 0, units: '%' }, 2: { field: 'percent_hydration', type: 'uint16', scale: 100, offset: 0, units: '%' }, 3: { field: 'visceral_fat_mass', type: 'uint16', scale: 100, offset: 0, units: 'kg' }, 4: { field: 'bone_mass', type: 'uint16', scale: 100, offset: 0, units: 'kg' }, 5: { field: 'muscle_mass', type: 'uint16', scale: 100, offset: 0, units: 'kg' }, 7: { field: 'basal_met', type: 'uint16', scale: 4, offset: 0, units: 'kcal/day' }, 8: { field: 'physique_rating', type: 'uint8', scale: null, offset: 0, units: '' }, 9: { field: 'active_met', type: 'uint16', scale: 4, offset: 0, units: 'kcal/day' }, 10: { field: 'metabolic_age', type: 'uint8', scale: null, offset: 0, units: 'years' }, 11: { field: 'visceral_fat_rating', type: 'uint8', scale: null, offset: 0, units: '' }, 12: { field: 'user_profile_index', type: 'message_index', scale: null, offset: 0, units: '' } }, 31: { name: 'course', 4: { field: 'sport', type: 'sport', scale: null, offset: '', units: '' }, 5: { field: 'name', type: 'string', scale: null, offset: '', units: '' }, 6: { field: 'capabilities', type: 'course_capabilities', scale: null, offset: '', units: '' } }, 32: { name: 'course_point', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 1: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: '' }, 2: { field: 'position_lat', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 3: { field: 'position_long', type: 'sint32', scale: null, offset: 0, units: 'semicircles' }, 4: { field: 'distance', type: 'uint32', scale: 100, offset: 0, units: 'm' }, 5: { field: 'type', type: 'course_point', scale: null, offset: 0, units: '' }, 6: { field: 'name', type: 'string', scale: null, offset: 0, units: '' }, 8: { field: 'favorite', type: 'bool', scale: null, offset: 0, units: '' } }, 33: { name: 'totals', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: 's' }, 0: { field: 'timer_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 1: { field: 'distance', type: 'uint32', scale: null, offset: 0, units: 'm' }, 2: { field: 'calories', type: 'uint32', scale: null, offset: 0, units: 'kcal' }, 3: { field: 'sport', type: 'sport', scale: null, offset: 0, units: '' }, 4: { field: 'elapsed_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 5: { field: 'sessions', type: 'uint16', scale: null, offset: 0, units: '' }, 6: { field: 'active_time', type: 'uint32', scale: null, offset: 0, units: 's' }, 9: { field: 'sport_index', type: 'uint8', scale: null, offset: 0, units: '' } }, 34: { name: 'activity', 253: { field: 'timestamp', type: 'date_time', scale: null, offset: 0, units: '' }, 0: { field: 'total_timer_time', type: 'uint32', scale: 1000, offset: 0, units: 's' }, 1: { field: 'num_sessions', type: 'uint16', scale: null, offset: 0, units: '' }, 2: { field: 'type', type: 'activity', scale: null, offset: 0, units: '' }, 3: { field: 'event', type: 'event', scale: null, offset: 0, units: '' }, 4: { field: 'event_type', type: 'event_type', scale: null, offset: 0, units: '' }, 5: { field: 'local_timestamp', type: 'local_date_time', scale: null, offset: 0, units: '' }, 6: { field: 'event_group', type: 'uint8', scale: null, offset: 0, units: '' } }, 35: { name: 'software', 254: { field: 'message_index', type: 'message_index', scale: null, offset: '', units: '' }, 3: { field: 'version', type: 'uint16', scale: 100, offset: '', units: '' }, 5: { field: 'part_number', type: 'string', scale: null, offset: '', units: '' } }, 37: { name: 'file_capabilities', 254: { field: 'message_index', type: 'message_index', scale: null, offset: 0, units: '' }, 0: { field: 'type', type: 'file', scale: null, offset: 0, units: '' }, 1: { field: 'flags', type: 'file_